Der vollständige Befehl, den Sie möchten, lautet:
chrt -b 0 nice -n 19 ionice -c 2 -n 7 [command]
Der chrtBefehl 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 dies nice -n 19implizieren ionice -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 chrtBefehl verwendet, allerdings ohne Notwendigkeit nice(Priorität muss 0in der Leerlaufplanungsklasse festgelegt werden) und sieht folgendermaßen aus:
chrt -i 0 {command or PID}
Der niceBefehl 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 waren SCHED_RRund SCHED_FIFOder Befehl zum Festlegen von Planungsklassen aufgerufen wurde chrt. Die -iOption gibt an, dass die SCHED_IDLEPlanungsklasse verwendet werden soll
Für die E / A-Planungsklasse verwenden Sie ionice. Der genaue Befehl sieht folgendermaßen aus:
ionice -c 3 {command or PID}
Die -cOption 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 der noopE / A-Scheduler überhaupt keine Prioritäten oder Planungsklassen, und ich bin mir ziemlich sicher, dass die deadlineScheduler (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_setschedulerund ioprio_setSystemaufrufe (obwohl beide lesenswert sind, wenn Sie nur mehr Hintergrund wünschen).