Comment pdflush, kjournald, swapd, etc. interagissent-ils?

17

Récemment, une question a déclenché cette réflexion. Impossible de trouver une réponse ici ou via la machine Google. Fondamentalement, je suis intéressé à savoir comment l'architecture d'E / S du noyau est en couches. Par exemple, est-ce que l' kjournaldenvoi est effectué pdflushou l'inverse? Mon hypothèse est que pdflush(étant plus générique pour les E / S de stockage de masse) se situerait à un niveau inférieur et déclencherait les commandes SCSI / ATA / quoi que ce soit nécessaire pour réellement effectuer les écritures, et kjournaldgère les structures de données du système de fichiers de niveau supérieur avant d'écrire. Je pouvais également voir l'inverse, avec kjournaldune interface directe avec les structures de données du système de fichiers et un pdflushréveil de temps en temps pour écrire des pages de pagecache sales sur l'appareil viakjournald. Il est également possible que les deux n'interagissent pas du tout pour une autre raison.

Fondamentalement: j'ai besoin d'un moyen de visualiser (graphique ou juste une explication) l'architecture de base utilisée pour répartir les E / S vers le stockage de masse dans le noyau Linux.

Bratchley
la source
1
Est-ce ce que vous recherchez? oss.org.cn/ossdocs/linux/kernel/a1/index.html
slm
1
Il y a aussi cette présentation: 7ème diapositive: slideshare.net/LukCzerner/local-file-systems-update
slm
1
Il y a aussi ce schéma que j'ai trouvé: thomas-krenn.com/en/oss/linux-io-stack-diagram/…
slm
1
J'ai trouvé cette carte interactive du noyau qui aide à montrer comment les différents composants du noyau vont ensemble: makelinux.net/kernel_map
slm
1
Encore une ressource, pages 19-24: Linux Performance and Tuning Guidelines . Celui-ci ressemble exactement à ce que vous recherchez.
slm

Réponses:

21

Avant de discuter des détails concernant pdflush, kjournald, andkswapd` , obtenons d'abord un peu de contexte sur le contexte de ce dont nous parlons exactement en termes de noyau Linux.

L'architecture GNU / Linux

L'architecture de GNU / Linux peut être considérée comme 2 espaces:

  • Utilisateur
  • Noyau

Entre l' espace utilisateur et l' espace noyau se trouve la bibliothèque GNU C ( glibc). Cela fournit l'interface d'appel système qui connecte le noyau aux applications de l'espace utilisateur.

L'espace du noyau peut être subdivisé en 3 niveaux:

  • Interface d'appel système
  • Code du noyau indépendant de l'architecture
  • Code dépendant de l'architecture

L'interface d'appel système, comme son nom l'indique, fournit une interface entre le glibcet le noyau. Le code du noyau indépendant architectural est composé des unités logiques telles que le VFS (Virtual File System) et le VMM (Virtual Memory Management). Le code dépendant de l'architecture est les composants qui sont spécifiques au processeur et à la plate-forme pour une architecture matérielle donnée.

Diagramme de l'architecture GNU / Linux

                                 SS de gnu / linux arch.

Pour le reste de cet article, nous concentrerons notre attention sur les unités logiques VFS et VMM dans l'espace noyau.

Sous-systèmes du noyau GNU / Linux

                                    ss de kernel com

Sous-système VFS

Avec un concept de haut niveau sur la structure du noyau GNU / Linux, nous pouvons approfondir un peu plus le sous-système VFS. Ce composant est responsable de fournir l'accès aux différents périphériques de stockage de blocs qui finalement se mappent vers un système de fichiers (ext3 / ext4 / etc.) Sur un périphérique physique (HDD / etc.).

Diagramme de VFS

SS de VFS

Ce diagramme montre comment un write()processus d'un utilisateur traverse le VFS et se dirige finalement vers le pilote de périphérique où il est écrit sur le support de stockage physique. Ceci est le premier endroit où nous rencontrons pdflush. Il s'agit d'un démon chargé de vider les blocs de données sales et de tampon de métadonnées sur le support de stockage en arrière-plan. Le diagramme ne le montre pas mais il y a un autre démon, kjournaldqui se trouve à côté pdflush, effectuant une tâche similaire en écrivant des blocs de journal sales sur le disque. REMARQUE: les blocs de journal sont la façon dont les systèmes de fichiers comme ext4 et JFS gardent une trace des modifications apportées au disque dans un fichier, avant que ces modifications ne se produisent.

Les détails ci-dessus sont discutés plus loin dans ce document .

Aperçu des write()étapes

Pour fournir un aperçu simple des opérations du système d'E / S, nous utiliserons un exemple où la fonction write()est appelée par une application de l'espace utilisateur.

  1. Un processus demande d'écrire un fichier via l' write()appel système.
  2. Le noyau met à jour le cache de pages mappé au fichier.
  3. Un thread du noyau pdflush s'occupe de vider le cache des pages sur le disque.
  4. La couche de système de fichiers associe chaque tampon de bloc à un bio struct( voir 1.4.3, «Couche de bloc» à la page 23 ) et soumet une demande d'écriture à la couche de périphérique de bloc.
  5. La couche de périphérique de bloc reçoit les demandes des couches supérieures, effectue une opération d'élévateur d'E / S et place les demandes dans la file d'attente des demandes d'E / S.
  6. Un pilote de périphérique tel que SCSI ou d'autres pilotes spécifiques au périphérique se chargera de l'opération d'écriture.
  7. Un micrologiciel de périphérique de disque effectue des opérations matérielles telles que la recherche de tête, la rotation et le transfert de données vers le secteur sur le plateau.

Sous-système VMM

Poursuivant notre plongée plus profonde, nous pouvons maintenant examiner le sous-système VMM. Ce composant est chargé de maintenir la cohérence entre la mémoire principale (RAM), le swap et le support de stockage physique. Le principal mécanisme de maintien de la cohérence est bdflush. Les pages de mémoire étant considérées comme sales, elles doivent être synchronisées avec les données présentes sur le support de stockage. bdflushcoordonnera avec les pdflushdémons pour synchroniser ces données avec le support de stockage.

Diagramme de VMM

                ss de VMM

Échanger

Lorsque la mémoire système se raréfie ou que le délai de permutation du noyau expire, le kswapddémon tente de libérer des pages. Tant que le nombre de pages gratuites reste supérieur free_pages_high, kswapdne fera rien. Cependant, si le nombre de pages gratuites chute en dessous, kswapdle processus de récupération des pages démarre. Après kswapdavoir marqué les pages pour la relocalisation, bdflushprendra soin de synchroniser toutes les modifications en suspens sur le support de stockage, via les pdflushdémons.

Références et lectures complémentaires

slm
la source
1
Je vais attendre un jour avant d'accepter cette réponse et d'attribuer la prime afin qu'elle reste sur la page "prime". De cette façon, quiconque l'a déjà vu a la chance de le remarquer a une réponse maintenant.
Bratchley
1
Merci encore, BTW. Vous vous êtes vraiment investi dans vos recherches.
Bratchley