Pourquoi une E / S disque élevée réduit-elle la réactivité / les performances du système?

19

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.

tshepang
la source
Xeno n'a-t-il pas expliqué exactement comment cela a été résolu dans le noyau Linux la dernière fois que vous avez demandé?
Michael Mrozek
2
Compte tenu des modifications, je pense que l'intention est que la question précédente porte sur les progrès réalisés vers la résolution du problème alors que cette question porte sur la raison pour laquelle le problème existe.
Steven D
@mic Steven a raison. Nous avons eu une longue discussion sur ce que je voulais dire avec la question précédente. La réponse de xeno était si bonne que j'ai édité la question pour l'adapter, et j'ai re-posé la question d'origine ici.
tshepang
Je comprends, mais votre question semble contredire l'autre; ici vous dites "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?", mais la réponse de xeno commence par "Je pense que pour la plupart, il a été résolu."
Michael Mrozek
@mic Pas vraiment. Le noyau est toujours en attente , ce qui signifie qu'il attend toujours. Je vois la réponse de xeno car la réactivité du système a été améliorée . Et que je suis d'accord, comme je l'ai noté sur la question.
tshepang

Réponses:

9

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.

Wim Coenen
la source
Je sais que c'est aussi vieux que la saleté, mais, selon la façon dont cela arrive, des quantités élevées d'E / S pourraient entraîner la génération de nombreuses interruptions et la perte de temps CPU du changement de contexte résultant.
Bratchley
5

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.

xénoterracide
la source