Jaka jest najładniejsza komenda uniksowa?

9

W celu szybkiego testu porównawczego, w jaki sposób można połączyć ładność i jonowość w celu uzyskania maksymalnego efektu, tj. Aby polecenie wykorzystywało możliwie jak najmniej zasobów (bez pracy na biegu jałowym)?

(Wydaje mi się, że jest to coś w rodzaju „nice -n 19 ionice -c 2 [polecenie], ale nie jestem pewien co do„ -n ”(classdata param) ionice, strona podręcznika jest tajemnicza pod względem znaczenia).

mahemoff
źródło
3
plus 1 za sprytny tytuł pytania, ale ogólnie jest to dobre pytanie.
Lizardx,

Odpowiedzi:

10

Pełne polecenie, które chcesz:

chrt -b 0 nice -n 19 ionice -c 2 -n 7 [command]

chrtPolecenia na początku przełączy rzeczy do klasy szeregowania partii, co jest równoznaczne z dodaniem 0,5 do miłej wartości. Opcja -n dla ionice jest prostym priorytetem dla opcji czasu rzeczywistego ( -c 1) i best-effort ( -c 2), przy czym niższe wartości są wyższym priorytetem, podobnie jak wartości ładne (ale w zakresie 0-7). Jednak polecenie ionice nie jest absolutnie konieczne, ponieważ klasa i priorytet planowania we / wy są domyślnie wyprowadzane z parametrów planowania procesora i nice -n 19implikują ionice -c 2 -n 7.

Można jednak uzyskać absolutnie minimalne zużycie zasobów, ustawiając zarówno CPU, jak i klasy planowania we / wy na bezczynne. W obu przypadkach „bezczynne” harmonogramy nie są tak naprawdę bezczynnymi, a Ty nadal będziesz mógł korzystać z zasobów, po prostu wszystko będzie miało wyższy priorytet.

W przypadku klasy planowania procesora korzysta to również z chrtpolecenia, choć bez potrzeby nice(priorytet musi być ustawiony 0na bezczynną klasę planowania) i wygląda następująco:

chrt -i 0 {command or PID}

niceKomenda na lustrach Linux wersji SVR4, co oznacza, że nie można zmienić klasę planowania, tylko piękny wartość (która również zachowuje się inaczej niż na klasycznej Linux UNIX, ale to trochę OT). Jako oryginalne alternatywne zajęcia harmonogramów były realtime POSIX.1E SCHED_RRi SCHED_FIFOpolecenie, aby ustawić klas planowania skończyło się to nazywa chrt. Do -iopcja określa użycie SCHED_IDLEklasy planowania

W przypadku klasy planowania we / wy używasz ionice. Dokładne polecenie wygląda następująco:

ionice -c 3 {command or PID}

Ta -copcja określa, jakiej klasy planowania użyć, a 3 oznacza liczbę bezczynnych klas. Należy pamiętać, że w zależności od używanego harmonogramu we / wy bloków może to nie mieć żadnego wpływu. W szczególności program noopplanujący we / wy w ogóle nie obsługuje priorytetów ani klas planowania, i jestem prawie pewien, że deadlineprogramy planujące (zarówno starsze, jak i blk-mq) też nie.

Jeśli chcesz to zrobić programowo, albo dla własnego programu, albo w celu dostosowania do innych procesów, sprawdź strony podręcznika dla wywołań sched_setscheduleri ioprio_setwywołań systemowych (chociaż oba są warte przeczytania, jeśli tylko chcesz więcej tła).

Austin Hemmelgarn
źródło
0

Zakładając, że nie chcesz, aby to polecenie całkowicie czekało na zakończenie przez innych, aby nie doszło do głodu zasobów , wiersz powinien wyglądać następująco:

nice -n19 [command]

Ponieważ ionice będą ustawione proporcjonalnie na nowoczesnych jądrach Linuksa.

Nawiasem mówiąc chrt -b0, nie ma to nic wspólnego z uprzejmością, ale z tym, jak często procesor przeskakuje z jednego procesu do drugiego. Ta linia wydłuża ten czas, aby programy wsadowe mogły lepiej wykorzystywać pamięć podręczną, ale w przypadku innych poleceń jest to bezużyteczne. Jak widać tutaj .

Alberto Salvia Novella
źródło