Je n'ai jamais vraiment compris pourquoi les E / S disque élevées ralentissaient tant le système. C'est étrange pour moi car je m'attendrais à ce que le ralentissement n'affecte que les processus dépendant des données du disque dur / optique, mais le ralentissement affecte même les choses chargées sur la RAM. Je parle ici de iowait .
Pourquoi le processeur attend-il au lieu de faire d'autres travaux? Quelqu'un peut-il expliquer cette limitation et pourquoi elle n'a pas été résolue dans le noyau Linux? Y a-t-il un noyau qui n'a pas ce problème?
[ note ] Des progrès ont été accomplis dans ce domaine de performance. D'une part, les noyaux ultérieurs (2.6.37 dans mon cas) sont beaucoup plus réactifs.
linux
kernel
performance
io
tshepang
la source
la source
Réponses:
Les systèmes d'exploitation utilisent la mémoire virtuelle afin d'utiliser plus de mémoire qu'il n'y a de RAM physique disponible. Lorsque le noyau décide qu'il a une meilleure utilisation pour une page de mémoire physique, son contenu peut être "paginé" pour le stockage sur disque. Lorsqu'une telle page de mémoire virtuelle est accessible pendant la pagination, elle génère une erreur de page et est déplacée du disque vers la RAM.
Les erreurs de page sont un désastre pour les performances car la latence du disque est mesurée en millisecondes, tandis que la latence de la RAM est mesurée en nanosecondes. (1 milliseconde = un million de nanosecondes!)
La mémoire n'est pas seulement utilisée par les processus utilisateur, mais aussi par le noyau pour des choses comme la mise en cache du système de fichiers. Pendant l'activité du système de fichiers, le noyau mettra en cache les données récemment utilisées. L'hypothèse est qu'il y a de fortes chances que les mêmes données soient réutilisées sous peu, donc la mise en cache devrait améliorer les performances d'E / S.
La mémoire physique utilisée pour le cache du système de fichiers ne peut pas être utilisée pour les processus, donc pendant l'activité du système de fichiers, plus de mémoire de processus sera paginée et les erreurs de page augmenteront. En outre, moins de bande passante d'E / S disque est disponible pour déplacer des pages de mémoire depuis et vers le disque. En conséquence, les processus peuvent se bloquer.
la source
Pour autant que je le comprenne, IOwait signifie qu'un processus, et non le processeur, attend que IO soit disponible. Les processeurs ont gagné beaucoup plus de vitesse que les disques durs, ce qui signifie que plus de code se terminera plus rapidement et que le disque devra être lu. Lorsque plusieurs autres doivent être lus que ce que le lecteur peut faire assez rapidement, vous vous retrouvez en attente du processeur. La façon dont il est décidé qui doit lire / écrire sur le disque est déterminée par le planificateur de blocs, dans la plupart des cas maintenant CFQ. Si vous utilisez CFQ et que vous avez besoin d'un processus pour utiliser moins de temps d'E / S global pour augmenter la réactivité du système, vous pouvez l'utiliser
ionice -c3 <processid>
. Cela indique au système de ne donner ce processus d'E / S que lorsque rien d'autre n'en a besoin.C'est toujours intéressant et cela explique mieux le problème.
la source