Sử dụng khả năng cho phép tạm chiếm:

Một phần của tài liệu TÌM HIỂU CÁC HỆ THỐNG ĐỊNH THỜI CẤP PHÁT TÀI NGUYÊN ẢO (Trang 61)

LẬP LỊCH QUÁ TRÌNH CẤP PHÁT TÀI NGUYÊN SỬ DỤNG MÁY ẢO

6.2.Sử dụng khả năng cho phép tạm chiếm:

Khi kết hợp khả năng cho thuê cả best-effort và advance-reservation trên cùng một hệ thống, dễ nhận thấy khoảng thời gian trước khi một yêu cầu advance- reservation có tài nguyên rảnh chưa được tận dụng, nhưng nhiều trường hợp, khoảng thời gian này không đủ dài để chạy bất kỳ một yêu cầu best-effort nào. (Hình 9: Dành chỗ các node trước những AR) Mặc dù kỹ thuật backfilling cho phép các lease có độ ưu tiên thấp hơn có thể được lập lịch trước các yêu cầu advance-reservation, nhưng vẫn có những khoảng lãng phí tài nguyên.

Để giải quyết vấn đề này, ta xét đến khả năng tạm treo/phục hồi/di dời qua node khác của máy ảo. Để thực hiện được điều này, thuật toán 1 cần phải mở rộng để có

khả năng tìm kiếm một sự phân phối có thời gian đáp ứng ngắn hơn thời gian yêu cầu, khi một lease cho phép lập lịch từng phần. Thuật toán 4 trình bày phần mở rộng của thuật toán 1, với một tham số thêm vào là fulldur. Tham số này được gán bằng true khi một lease bắt buộc phải chạy liên tục từ thời điểm bắt đầu, và gán bằng false nếu nó cho phép được lập lịch từng phần cho đến khi hoàn thành. Các thuật toán 2 và 3 cũng phải cần lập lịch sự tạm treo và phục hồi cho các máy ảo nếu có sự tạm chiếm xảy ra. Trong suốt quá trình tạm treo và phục hồi, toàn bộ trạng thái của VM phải được lưu lại, và chi phí cho các thao tác này cũng phải được lập lịch để không làm chậm các lease khác (nếu ta buộc phải tạm ngưng một yêu cầu best-effort để nhường tài nguyên cho advance-reservation, thao tác lưu và tạm ngưng máy ảo buộc phải hoàn thành trước khi yêu cầu đặt chỗ bắt đầu).

Thuật toán 4: Phân phối tham lam với quyền tạm chiếm

Input: Một lease l, thời điểm t, khoảng thời gian d, boolean fulldur

Output: (1) Một cách phân phối nodes[l] vào P, bắt đầu tại t và kết thúc tại t+d'. Với d' = d nếu fulldur = true, hoặc d' d nếu fulldur = false. (2) Khoảng thời gian d'. (3) Một tập preempt các lease bị tạm chiếm.

map ← empty dictionary P' ← sort(P)

possible_preempt ← Tập các lease cho phép bị tạm chiếm đã được lập lịch giữa t và t+d

preempt ← d' ← d

done ← false

found_mapping ← false while not done do

cur_node ← Node đầu tiên trong nodes[l] for do

p_done ← false while not p_done do

if cur_node có thể phân phối lên p bắt đầu tại thời điểm t then

if fulldur và cur_node không thể chạy tới t+d then p_done ← true

else

mapcur_node ← p

d' = max duration cur_node chạy trên p end if

cur_node ← Node tiếp theo trong nodes[l] end if else p_done ← true end if end while end for

if node p trong nodes[l] đã được phân phối then done ← true

found_mapping = true else if |possible_preempt|>0 then

Lấy phần tử đầu tiên của possilble_preempt thêm vào preempt else

done ← true {nhưng không tìm được cách phân phối} end if

end while

if found_mapping = true then return map, d', preeempt else

return endif

Một phần của tài liệu TÌM HIỂU CÁC HỆ THỐNG ĐỊNH THỜI CẤP PHÁT TÀI NGUYÊN ẢO (Trang 61)