Quelle est la différence entre les colonnes Buffers et Cached dans la sortie / proc / meminfo?


Réponse 1:

Les opérations d'E / S ont souvent des latences élevées; le temps entre le début d'un processus d'E / S et son achèvement peut être des millions de cycles d'horloge du processeur. La majeure partie de cette latence est due au matériel lui-même; par exemple, les informations ne peuvent pas être lues ou écrites sur un disque dur jusqu'à ce que la rotation du disque amène les secteurs cibles directement sous la tête de lecture / écriture. (Au moment d'écrire ces lignes, les disques durs à 7200 tr / min sont la norme, donc ce processus peut prendre jusqu'à environ 8 millisecondes.) Lorsque le périphérique d'entrée / sortie est une interface réseau, la latence est généralement encore plus grande.

Ceci est atténué en ayant un ou plusieurs tampons d'entrée et de sortie associés à chaque périphérique. Même si un programme ne souhaite lire qu'un bloc de données à partir d'un périphérique, le pilote peut récupérer ce bloc ainsi que plusieurs des blocs qui le suivent immédiatement sur le disque, en les mettant en mémoire cache, car les programmes accèdent souvent au disque de manière séquentielle, ce qui signifie que le le prochain bloc que le programme demandera est probablement le prochain bloc physique sur le disque. Lorsqu'il le fait réellement, le pilote, au lieu d'effectuer une autre lecture physique sur le disque, peut alors simplement retourner ce bloc (qui est mis en cache en mémoire), et donc réduire considérablement la latence. Lorsque des écritures sur le disque sont demandées, le pilote peut simplement mettre en cache les données en mémoire jusqu'à ce qu'il ait accumulé suffisamment de blocs de données, point auquel il les écrit toutes en même temps; c'est ce qu'on appelle le vidage du tampon de sortie, ou la synchronisation. Le pilote fournira normalement un moyen de demander que les données soient vidées immédiatement, plutôt que mises en cache. Cela doit être fait, par exemple, avant de retirer le périphérique du système (s'il s'agit d'un support amovible tel qu'un disque optique) ou lorsque le système s'arrête.

Sur un système d'exploitation multitâche, les périphériques matériels sont contrôlés par le noyau et les applications de l'espace utilisateur peuvent ne pas y accéder directement. Pour cette raison, l'exécution d'E / S nécessite l'exécution d'appels système qui, pour diverses raisons, entraînent une surcharge. Cette surcharge est généralement de l'ordre des microsecondes plutôt que des millisecondes, donc l'utilisation de la mise en mémoire tampon ici n'est pas cruciale pour les programmes qui effectuent une quantité relativement faible d'E / S, mais fait une grande différence pour les applications qui sont liées aux E / S (ce qui signifie qu'elles passent la plupart de leur temps à attendre la fin des E / S, plutôt que d'effectuer des calculs qui seraient accélérés si le CPU était plus rapide).

Ainsi, presque tous les programmes écrits dans un langage de programmation de haut niveau auront leurs propres tampons d'E / S (généralement un tampon d'entrée pour chaque fichier ou périphérique à partir duquel le programme souhaite lire et un tampon de sortie pour chacun vers lequel il souhaite écrire. ). Ces tampons peuvent être beaucoup plus volumineux que ceux gérés par les pilotes de bas niveau, et ils existent à un niveau d'abstraction plus élevé, car ils sont associés à des objets de descripteur de fichier ou de descripteur de fichier