2013-02-17 10 views

Odpowiedz

12

Dostępnych jest kilka programów planujących. Ta odpowiedź zakłada domyślne harmonogramy: CFS (Linux) i ULE (FreeBSD).

CFS jest skrótem od Zupełnie uczciwy Scheduler. Najbardziej znaczącą różnicą jest to, że CFS nie opiera się na kolejkach uruchomień dla wyboru procesu. Zamiast tego używa drzewa czerwono-czarnego o złożoności O (log N), która jest indeksowana przez zużyty czas procesora.

Innym godnym uwagi szczegółem jest to, że CFS wykorzystuje nanosekundy do rozliczania czasu. Od Kernel Trap:

CFS stosuje rachunkowość ziarnistość nanosekund i nie opiera się na żadnej jiffies lub innych szczegółach Hz. Zatem program planujący CFS nie ma pojęcia "przedziałów czasu" i nie ma żadnej heurystyki. Jest tylko jeden centralny przestrajanie:

/proc/sys/kernel/sched_granularity_ns 

które mogą być wykorzystane, aby dostroić harmonogram z „pulpitu” (Low latencji) do obciążeń związanych z serwerem „” (dobrze dozowania). Domyślnie jest to ustawienie odpowiednie dla obciążeń pulpitu. SCHED_BATCH jest również obsługiwany przez moduł planisty CFS CFS.

ULE jest następcą tradycyjnego programu planującego BSD. Oferuje znacznie lepszą wydajność zarówno w systemach SMP, jak i systemach jednoprocesorowych. Jest on zgodny z bardziej tradycyjnym projektem z kolejkami uruchomień i podziałami czasowymi. Stara się być uczciwym, ale może być poinstruowany, aby faworyzować procesy interaktywne.

Oto link do niektórych ustaleń autora ULE podczas studiowania źródła CFS. Omawiają także złożoność (która była mocno dyskutowana) algorytmów w programie planującym CFS w komentarzach.

Oba harmonogramy są odpowiednie do użytku stacjonarnego. Z zestawem kern.sched.interact, ULE faworyzuje procesy interaktywne. Bez tego CFS i ULE powinny być równie sprawiedliwe.

ULE ląduje na około 3000 linii kodu, podczas gdy CFS zbliża się do podwójnej wartości.