Pour un test de benchmarking rapide, comment nice et ionice peuvent-ils être combinés pour un effet maximum, c'est-à-dire pour qu'une commande utilise le moins de ressources possible (sans tourner au ralenti)?
(Je pense que c'est quelque chose comme `nice -n 19 ionice -c 2 [commande], mais je ne suis pas sûr du" -n "(param de données de classe) d'ionice, la page de manuel est cryptique quant à sa pertinence.)
performance
nice
ionice
mahemoff
la source
la source
Réponses:
La commande complète que vous souhaitez est:
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 etnice -n 19
impliquentionice -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 besoinnice
(la priorité doit être définie sur0
dans la classe de planification inactive), et ressemble à ceci: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.1ESCHED_RR
etSCHED_FIFO
, la commande pour définir les classes de planification a finalement été appeléechrt
. L'-i
option spécifie d'utiliser laSCHED_IDLE
classe de planificationPour la classe de planification d'E / S, vous utilisez
ionice
. La commande exacte ressemble à ceci: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, lenoop
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 lesdeadline
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
etioprio_set
(bien que les deux valent la peine d'être lus si vous voulez juste plus d'informations).la source
En supposant que vous ne voulez pas que cette commande attende complètement la fin des autres, afin de ne pas potentiellement souffrir de la famine des ressources , la ligne serait:
Comme ionice sera défini proportionnellement sur les noyaux Linux modernes.
Soit dit en passant, cela
chrt -b0
n'a rien à voir avec la gentillesse, mais avec la fréquence à laquelle le processeur passera d'un processus à l'autre. Cette ligne allonge ce temps pour que les programmes batch utilisent mieux les caches, mais pour d'autres commandes, c'est inutile. Comme on le voit ici .la source