La commande complète que vous souhaitez est:
chrt -b 0 nice -n 19 ionice -c 2 -n 7 [command]
La chrt
commande au début fera basculer les choses dans la classe de planification par lots, ce qui équivaut à ajouter 0,5 à la valeur de Nice. L'option -n pour ionice est une priorité simple pour les options en temps réel ( -c 1
) et best-effort ( -c 2
), avec des valeurs plus faibles étant une priorité plus élevée tout comme les bonnes valeurs (mais dans la plage 0-7). Cependant, la commande ionice n'est pas strictement nécessaire, car la classe et la priorité d'ordonnancement des E / S sont par défaut dérivées des paramètres d'ordonnancement du processeur et nice -n 19
impliquent ionice -c 2 -n 7
.
Cependant, vous pouvez obtenir l'utilisation minimale absolue des ressources en définissant les classes de planification CPU et E / S sur inactif. Dans les deux cas, les planificateurs «inactifs» ne sont pas réellement des planificateurs inactifs, et vous pourrez toujours utiliser les ressources, c'est juste que tout aura une priorité plus élevée.
Pour la classe de planification CPU, cela utilise également la chrt
commande, bien que sans besoin nice
(la priorité doit être définie sur 0
dans la classe de planification inactive), et ressemble à ceci:
chrt -i 0 {command or PID}
La nice
commande sur Linux reflète la version SVR4, ce qui signifie qu'elle ne peut pas changer la classe de planification, seulement une belle valeur (qui se comporte également différemment sur Linux que UNIX classique, mais c'est un peu OT). Comme les classes de planification alternatives originales étaient le temps réel POSIX.1E SCHED_RR
et SCHED_FIFO
, la commande pour définir les classes de planification a finalement été appelée chrt
. L' -i
option spécifie d'utiliser la SCHED_IDLE
classe de planification
Pour la classe de planification d'E / S, vous utilisez ionice
. La commande exacte ressemble à ceci:
ionice -c 3 {command or PID}
L' -c
option spécifie la classe de planification à utiliser et 3 est le numéro de la classe inactive. Notez que selon le planificateur d'E / S de bloc utilisé, cela peut n'avoir aucun impact. En particulier, le noop
planificateur d'E / S ne prend pas du tout en charge les priorités ou les classes de planification, et je suis pratiquement sûr que les deadline
planificateurs (à la fois hérités et blk-mq) ne le font pas non plus.
Si vous voulez le faire par programme, soit pour votre propre programme, soit pour ajuster les choses pour d'autres processus, consultez les pages de manuel pour les appels système sched_setscheduler
et ioprio_set
(bien que les deux valent la peine d'être lus si vous voulez juste plus d'informations).