Wie können für einen schnellen Benchmarking-Test Nizza und Ionice maximal kombiniert werden, dh damit ein Befehl so wenig Ressourcen wie möglich verbraucht (ohne insgesamt im Leerlauf zu sein)?
(Ich denke, es ist so etwas wie `nice -n 19 ionice -c 2 [Befehl], aber nicht sicher über ionices" -n "(classdata param), die Manpage ist hinsichtlich ihrer Relevanz kryptisch.)
performance
nice
ionice
Mahemoff
quelle
quelle
Antworten:
Der vollständige Befehl, den Sie möchten, lautet:
Der
chrt
Befehl am Anfang schaltet die Dinge in die Stapelplanungsklasse um, was dem Hinzufügen von 0,5 zum netten Wert entspricht. Die Option -n für Ionice hat für die Optionen Echtzeit (-c 1
) und Best-Effort (-c 2
) eine einfache Priorität , wobei niedrigere Werte ebenso wie schöne Werte eine höhere Priorität haben (jedoch im Bereich von 0 bis 7). Der Befehl ionice ist jedoch nicht unbedingt erforderlich, da die E / A-Planungsklasse und die Priorität standardmäßig aus den CPU-Planungsparametern abgeleitet werden und diesnice -n 19
implizierenionice -c 2 -n 7
.Sie können jedoch die absolut minimale Ressourcennutzung erzielen, indem Sie sowohl die CPU- als auch die E / A-Planungsklasse auf Leerlauf setzen. In beiden Fällen sind die "inaktiven" Scheduler keine inaktiven Scheduler, und Sie können weiterhin Ressourcen verwenden. Es ist nur so, dass alles eine höhere Priorität hat.
Für die CPU-Planungsklasse wird auch der
chrt
Befehl verwendet, allerdings ohne Notwendigkeitnice
(Priorität muss0
in der Leerlaufplanungsklasse festgelegt werden) und sieht folgendermaßen aus:Der
nice
Befehl unter Linux spiegelt die SVR4-Version wider, was bedeutet, dass die Planungsklasse nicht geändert werden kann, sondern nur ein netter Wert (der sich auch unter Linux anders verhält als unter klassischem UNIX, aber das ist ein bisschen OT). Da die ursprünglichen alternativen Planungsklassen POSIX.1E in Echtzeit warenSCHED_RR
undSCHED_FIFO
der Befehl zum Festlegen von Planungsklassen aufgerufen wurdechrt
. Die-i
Option gibt an, dass dieSCHED_IDLE
Planungsklasse verwendet werden sollFür die E / A-Planungsklasse verwenden Sie
ionice
. Der genaue Befehl sieht folgendermaßen aus:Die
-c
Option gibt an, welche Planungsklasse verwendet werden soll, und 3 ist die Nummer für die Leerlaufklasse. Beachten Sie, dass dies je nach verwendetem Block-E / A-Scheduler möglicherweise keine Auswirkungen hat. Insbesondere unterstützt dernoop
E / A-Scheduler überhaupt keine Prioritäten oder Planungsklassen, und ich bin mir ziemlich sicher, dass diedeadline
Scheduler (sowohl der Legacy- als auch der blk-mq-Scheduler) dies auch nicht tun.Wenn Sie dies programmgesteuert tun möchten, entweder für Ihr eigenes Programm oder um Dinge für andere Prozesse anzupassen, lesen Sie die Manpages für die
sched_setscheduler
undioprio_set
Systemaufrufe (obwohl beide lesenswert sind, wenn Sie nur mehr Hintergrund wünschen).quelle
Angenommen, Sie möchten nicht, dass dieser Befehl vollständig auf das Ende anderer wartet, um möglicherweise keinen Ressourcenmangel zu erleiden , lautet die Zeile:
Da ionice auf modernen Linux-Kerneln proportional eingestellt wird.
Hat übrigens
chrt -b0
nichts mit Freundlichkeit zu tun, sondern damit, wie oft die CPU von einem Prozess zum anderen springt. Diese Zeile verlängert die Zeit für Batch-Programme, um Caches besser zu nutzen, für andere Befehle ist sie jedoch nutzlos. Wie hier zu sehen .quelle