Jak miło działa?

20

schedule_setscheduler mówi:

Całe planowanie jest zapobiegawcze: jeśli proces o wyższym priorytecie statycznym stanie się gotowy do uruchomienia, aktualnie uruchomiony proces zostanie zablokowany i wróci do listy oczekujących na swój poziom priorytetu statycznego.

podczas gdy setpriority mówi

Powoduje to, że bardzo niskie wartości ładne (+19) naprawdę zapewniają niewielki procesor procesowi, gdy w systemie występuje inne obciążenie o wyższym priorytecie, i sprawia, że ​​wysokie wartości ładne (-20) dostarczają większość procesora do aplikacji, które tego wymagają

Jak więc zmiana ładnej wartości wpłynie na wykonanie programów? Czy jest podobny do planowania RT (gdzie program o wyższej wartości Nicei przerwie program o niższej wartości Nice)?


Wszystkie informacje w Internecie dotyczą sposobu korzystania nicei zmiany priorytetu procesu. Brak linku wyjaśnia, jak dokładnie działa proces o różnych priorytetach. Nie mogłem nawet znaleźć kodu źródłowego.

BЈовић
źródło

Odpowiedzi:

24

Proporcja czasu procesora do określonego procesu zależy od względnej różnicy między nim a innymi uruchomionymi procesami.

Program Linux Completely Fair Scheduler (CFS) oblicza wagę na podstawie wartości. Waga jest w przybliżeniu równa 1024 / (1.25 ^ nice_value). Gdy wartość ładna maleje, waga rośnie wykładniczo. Czas przydzielony dla procesu jest proporcjonalny do wagi procesu podzielonej przez całkowitą wagę wszystkich uruchomionych procesów. Wdrożenie CFS jest w kernel/sched/fair.c.

CFS ma docelowe opóźnienie na czas planowania. Mniejsze opóźnienia docelowe zapewniają lepszą interaktywność, ale wraz ze spadkiem opóźnienia docelowego rośnie narzut przełączania, zmniejszając w ten sposób ogólną przepustowość.

Biorąc pod uwagę na przykład docelowe opóźnienie wynoszące 20 milisekund i dwa uruchomialne procesy o równej łagodności, wówczas oba procesy będą działać przez 10 milisekund każdy, zanim zostaną wyprzedzone na korzyść drugiego procesu. Jeśli istnieje 10 procesów o jednakowej wartości, każdy działa przez 2 milisekundy.

Rozważmy teraz dwa procesy, jeden z dokładnością 0 (domyślnie), drugi z dokładnością 5. Proporcjonalna różnica między odpowiednimi wagami wynosi około 1/3, co oznacza, że ​​proces o wyższym priorytecie otrzymuje przedział czasu około 15 milisekund podczas gdy proces o niższym priorytecie otrzymuje przedział czasu 5 milisekund.

Na koniec rozważ dwa procesy z wartościami 5 lub 10, odpowiednio. Chociaż bezwzględna bezwzględność jest w tym przypadku większa, względne różnice między wartościami bezwzględności są takie same jak w poprzednim przykładzie, co daje identyczny podział na przedziały czasu.

Thomas Nyman
źródło
Właśnie tego szukałem. Dzięki! Później znalazłem ten artykuł, który wyjaśnia wszystko szczegółowo, ale nie to, co właśnie napisałeś.
BЈовић
Jest coś, czego nie rozumiem ... jaka jest rola vruntime?
Surfer na jesieni
@ Surferonthefall vruntime to wewnętrzny mechanizm CFS, który śledzi wiele przydzielanych procesów procesora. To pytanie dotyczy ładnej wartości widocznej w przestrzeni użytkownika. Jeśli masz pytanie na temat elementów wewnętrznych CFS i nie możesz znaleźć odpowiedzi w innym miejscu , zadaj nowe pytanie
Thomas Nyman,