Comment définir automatiquement la priorité d'E / S disque?


8

Si j'utilise une application intensive en IO (comme Virtualbox, la vérification des données Steam ou même dd), mon système ne répond presque plus. Bien que tous soient démarrés avec une priorité normale, ils rendent le bureau très lent et retardent beaucoup le démarrage d'autres applications.

Je sais que je peux utiliser quelque chose comme ionicechanger la priorité à l'inactivité par exemple, mais dans le cas de Virtualbox qui engendre de nombreux processus, cela devient difficile.

Puis-je donner un certain type d'indices au système, donc lors du lancement de certaines applications spécifiques, ils sont démarrés avec la priorité IO la plus faible?


avez-vous essayé ma solution? Fait-il le travail?
sm4rk0

Réponses:


7

Remarque: Cette solution ne fonctionne qu'avec le planificateur cfq, comme expliqué ici . Vous devez vérifier lequel est utilisé en émettant

cat /sys/block/sda/queue/scheduler

et changez- le si nécessaire.

Si j'ai bien compris, vous souhaitez qu'un ioniceparamètre soit appliqué à chaque démarrage d'une commande. Vous pouvez le faire de cette façon:

echo 'ionice -c 3 /usr/bin/VirtualBox "$@"' > VirtualBox
chmod a+x VirtualBox
sudo mv VirtualBox /usr/local/bin/

La première commande crée un fichier VirtualBoxavec le texte entre guillemets comme contenu. Cela devrait avoir le chemin complet vers le programme, car si on ne le spécifie que VirtualBoxcela peut l'interpréter comme le fichier que nous venons de créer et créer une "boucle".

La deuxième commande le rend exécutable, et la troisième déplace ce nouveau fichier dans un dossier qui se trouve devant le dossier bin "système" /usr/bin, afin que notre nouveau fichier soit exécuté à la place de l'original. La partie "$ @" contient tous les arguments avec lesquels la commande a été invoquée, ils sont donc transmis à la vraie commande VirtualBox.

Selon la réponse ("oui") à cette question de super utilisateur Les processus des enfants héritent-ils des priorités ioniques de leurs parents? Comment vérifiez-vous la priorité d'E / S d'un processus en cours? , cela devrait suffire au ioniceprocessus parent, comme ceci:

ionice -c 3 VirtualBox

À partir de la ionice page de manuel , les valeurs de classe de planification d'E / S suivantes sont disponibles:

  • 0 pour aucun
  • 1 en temps réel
  • 2 pour le meilleur effort
  • 3 pour inactif (utilisé dans l'exemple ci-dessus)

Un numéro ou un nom de classe peut être utilisé.

En outre, l' -n leveloption s'applique aux classes en temps réel et au meilleur effort, avec 0 à 7 comme données valides (niveaux de priorité).


1
Bien que cela puisse théoriquement répondre à la question, il serait préférable d'inclure ici les parties essentielles de la réponse et de fournir le lien de référence.
Lucio

@Lucio, merci pour un indice, mais "cela devrait-il suffire au ioniceprocessus parent" n'est-il pas une partie essentielle?
sm4rk0

1
Oui tu as raison. Mais, si vous le pouvez , prenez le temps, puis ajoutez plus d'informations sur votre propre expérience sur cette procédure, créant une meilleure réponse :)
Lucio

@ Lucio, j'espère que c'est assez bon maintenant. Merci d'avoir insisté (:
sm4rk0

1
FYI: ionicepeut travailler avec le cfqplanificateur uniquement! Pour plus de détails: unix.stackexchange.com/questions/136226/…
andras.tim

-1

Vous pouvez utiliser la commande «renice» pour hiérarchiser les processus:

renice -<priority> <application's pid>

Il se peut également que votre disque tourne trop bas, donc lorsque vous voulez démarrer une application comme Virtualbox, il doit tourner avant de pouvoir commencer à travailler (cela peut prendre un certain temps).


Merci pour le conseil, mais je cherchais un moyen de le faire automatiquement et à l'échelle du système. Par exemple: lors du lancement de Virtualbox, exécutez-le avec la priorité IO la plus basse possible ...
Salem

nice et renice ne donnent pas la priorité aux entrées / sorties séparément.
Jay _silly_evarlast_ Wren

Et c'est bien, pas ionice. L'un est pour CPU l'autre pour IO.
Dagelf
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.