W plikach usług systemowych można ustawić następujące opcje związane z planowaniem (na systemd.exec
stronie podręcznika popraw mnie, jeśli się mylę):
Nice Ustawia domyślny poziom nice (priorytet planowania) dla wykonywanych procesów. Przyjmuje liczbę całkowitą od -20 (najwyższy priorytet) do 19 (najniższy priorytet). Szczegóły w setpriority (2) .
Co to jest znajomy niezły poziom. Wygląda na to, że jego działanie jest nieco „podważone” ze względu na funkcję „automatycznego grupowania” ostatnich jąder Linuksa. Więc poniższe opcje mogą być tym, co naprawdę chciałbym ustawić, aby procesy zachowywały się ładnie na moim komputerze.
CPUSchedulingPolicy Ustawia zasady planowania CPU dla wykonywanych procesów. Pobiera jedną z pozostałych, partię, bezczynność, fifo lub rr. Aby uzyskać szczegółowe informacje, zobacz Sched_setscheduler (2) .
CPUSchedulingPriority Ustawia priorytet planowania CPU dla wykonywanych procesów. Dostępny zakres priorytetów zależy od wybranych zasad planowania CPU (patrz wyżej). W przypadku zasad planowania w czasie rzeczywistym można użyć liczby całkowitej od 1 (najniższy priorytet) do 99 (najwyższy priorytet). Aby uzyskać szczegółowe informacje, zobacz Sched_setscheduler (2) .
CPUSchedulingResetOnFork Pobiera argument boolowski. Jeśli jest to prawda, podwyższone priorytety i zasady planowania procesora zostaną zresetowane po rozwidleniu się wykonanych procesów, a zatem nie mogą przeciekać do procesów potomnych. Aby uzyskać szczegółowe informacje, zobacz Sched_setscheduler (2) . Domyślnie false.
Rozumiem ostatnią opcję. Na podstawie dwóch pierwszych wyjaśnień dowiaduję się, że mogę wybrać zasadę planowania, a następnie, biorąc pod uwagę tę zasadę, priorytet. Nie jest dla mnie do końca jasne, co powinienem wybrać do jakiego rodzaju zadań. Na przykład, czy bezpieczne jest wybranie „bezczynności” dla zadań tworzenia kopii zapasowych (stosunkowo intensywnie wykorzystujących procesor, ponieważ deduplikacja), czy też lepiej nadaje się inny?
Ogólnie rzecz biorąc, szukam zrozumiałego przeglądu każdej polityki, każdego z jej priorytetów i przydatności do określonych celów. Interesująca jest także interakcja z niezłym poziomem.
Oprócz planowania procesora istnieje szeregowanie we / wy. Myślę, że to odpowiada ionice
(popraw mnie, jeśli się mylę).
IOSchedulingClass Ustawia klasę planowania we / wy dla wykonywanych procesów. Przyjmuje liczbę całkowitą od 0 do 3 lub jeden z ciągów brak, w czasie rzeczywistym, najlepszym wysiłkiem lub bezczynności. Aby uzyskać szczegółowe informacje, patrz ioprio_set (2) .
IOSchedulingPriority Ustawia priorytet planowania we / wy dla wykonywanych procesów. Przyjmuje liczbę całkowitą od 0 (najwyższy priorytet) do 7 (najniższy priorytet). Dostępne priorytety zależą od wybranej klasy planowania we / wy (patrz wyżej). Aby uzyskać szczegółowe informacje, patrz ioprio_set (2) .
Widzimy tutaj taką samą strukturę jak w przypadku planowania CPU. Szukam również tego samego rodzaju informacji.
Dla wszystkich opcji „Planowania” strony, do których się odwołuje, nie są dla mnie wystarczająco jasne, głównie w tłumaczeniu rzeczy na nieco technicznie skłonny użytkownik pulpitu.
nice
wartość).Odpowiedzi:
CPUScheduling {Policy | Priority}
Link informuje, że
CPUSchedulingPriority
należy ustawić tylko dla zadańfifo
lubrr
(„w czasie rzeczywistym”). Nie chcesz wymuszać planowania usług w czasie rzeczywistym.CPUSchedulingPolicy=other
jest wartością domyślną.To opuszcza
batch
iidle
. Różnica między nimi jest istotna tylko wtedy, gdy masz wiele zadań o priorytecie bezczynności, które jednocześnie zużywają procesor. Teoretyczniebatch
daje większą przepustowość (w zamian za dłuższe opóźnienia). Ale to nie jest duża wygrana, więc nie jest tak naprawdę w tym przypadku istotna.idle
dosłownie głoduje, jeśli cokolwiek innego chce procesora. Priorytet procesora jest raczej mniej znaczący niż kiedyś w przypadku starych systemów UNIX z jednym rdzeniem. Byłbym szczęśliwszy zaczynając odnice
np. Niezłego poziomu 10 lub 14, zanim zacznę uciekać sięidle
. Zobacz następny rozdział.Jednak większość komputerów stacjonarnych jest stosunkowo bezczynna przez większość czasu. A kiedy masz świnia procesora, która wyprzedziłaby zadanie w tle, to świnia często używa tylko jednego z twoich procesorów. Mając to na uwadze, nie czułbym się zbyt ryzykowny
idle
w kontekście przeciętnego komputera stacjonarnego lub laptopa. Chyba że ma procesor Atom / Celeron / ARM o mocy co najmniej 15 watów ; wtedy chciałbym przyjrzeć się nieco bardziej uważnie.Czy fajny poziom jest „podważony” przez funkcję „automatycznego grupowania” jądra?
Tak.
Automatyczne grupowanie jest trochę dziwne. Autor
systemd
nie lubił heurystyki, nawet dla komputerów stacjonarnych. Jeśli chcesz przetestować wyłączanie automatycznego grupowania, możesz ustawić sysctlkernel.sched_autogroup_enabled
na0
. Myślę, że najlepiej jest przetestować, ustawiając sysctl w stałej konfiguracji i restartując, aby upewnić się, że pozbyłeś się wszystkich grup automatycznych.Powinieneś być w stanie osiągnąć niezły poziom dla swoich usług bez żadnego problemu. Przynajmniej w aktualnych wersjach systemd - patrz następna sekcja.
Np. Niezły poziom 10 obniży wagę każdego wątku w harmonogramie procesora Linux do około 10%. Niezły poziom 14 jest poniżej 5%. (Link: pełna formuła )
Dodatek: czy ładny poziom jest „podważony” przez systemd cgroups?
Bieżące
DefaultCPUAccounting=
ustawienie jest domyślnie wyłączone, chyba że można je włączyć bez włączania kontroli procesora dla poszczególnych usług. Więc powinno być dobrze. Możesz to sprawdzić w swojej aktualnej dokumentacji:man systemd-system.conf
Należy pamiętać, że kontrola procesora dla poszczególnych usług zostanie również włączona, gdy dowolna usługa ustawi rachunkowość CPU / CPUWeight / StartupCPUWeight / CPUShares / StartupCPUShares.
Poniższy wyciąg z bloga jest nieaktualny (ale nadal online). Domyślne zachowanie uległo zmianie, a dokumentacja referencyjna została odpowiednio zaktualizowana.
źródło
Klasyczna rada strojenia to „Don't Optimize, Benchmark”.
Zamiast przejmować się ogólnymi poradami, zacznij od konkretnego przypadku, który martwisz się o ulepszenie i został przetestowany pod kątem konkretnego problemu z wydajnością. Pozwól, aby dane pozwoliły Ci dostroić właściwą dyrektywę. W przypadku danych może być jasne, czy proces ma zły priorytet, zapiera procesor lub ma inny problem.
Nowoczesne komputery stacjonarne są często bardzo szybkie do pracy bez żadnego strojenia.
źródło
systemd-analyze
zblame
iplot
udało mi się zmniejszyć czas rozruchu na starszego RPI przez ponad minutę. Jasne, że jeśli chodzi o analizę problemu, należy zmierzyć zamiast przedwcześnie rozpocząć „optymalizację”.