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.

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.


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.