9.3. Glocks
Pour comprendre GFS2, le concept le plus important, et celui qui le différencie des autres systèmes de fichiers, est celui des glocks. Dans le code source, un glock est une structure de données qui réunit le DLM et la mise en cache en une seule machine à états. Chaque glock a une relation 1:1 avec un seul verrou DLM et fournit un cache pour cet état de verrouillage afin que les opérations répétitives effectuées à partir d'un seul nœud du système de fichiers n'aient pas à appeler le DLM à plusieurs reprises, ce qui permet d'éviter un trafic réseau inutile. Il existe deux grandes catégories de glocks, ceux qui mettent en cache les métadonnées et ceux qui ne le font pas. Les glocks d'inodes et les glocks de groupes de ressources mettent tous deux des métadonnées en cache, tandis que les autres types de glocks ne mettent pas de métadonnées en cache. Le glock inode est également impliqué dans la mise en cache de données en plus des métadonnées et possède la logique la plus complexe de tous les glocks.
Mode Glock | Mode de verrouillage DLM | Notes |
---|---|---|
ONU | IV/NL | Déverrouillé (pas de serrure DLM associée au glock ou serrure NL en fonction de l'indicateur I) |
SH | PR | Verrouillage partagé (lecture protégée) |
EX | EX | Serrure exclusive |
DF | CW | Différé (écriture simultanée) utilisé pour Direct I/O et le gel du système de fichiers |
Les glocks restent en mémoire jusqu'à ce qu'ils soient déverrouillés (à la demande d'un autre nœud ou de la VM) et qu'il n'y ait plus d'utilisateurs locaux. Ils sont alors retirés de la table de hachage des glocks et libérés. Lorsqu'un glock est créé, le verrou DLM n'est pas immédiatement associé au glock. Le verrou DLM est associé au cadenas lors de la première demande au DLM, et si cette demande aboutit, le drapeau "I" (initial) est activé sur le cadenas. Le tableau "Glock Flags" dans The glock debugfs interface montre la signification des différents drapeaux de glock. Une fois que le DLM a été associé au glock, le verrou DLM restera toujours au moins en mode NL (Null) jusqu'à ce que le glock soit libéré. La rétrogradation du verrou DLM de NL à déverrouillé est toujours la dernière opération dans la vie d'un cadenas.
Chaque glock peut être associé à un certain nombre de "détenteurs", chacun d'entre eux représentant une demande de verrouillage de la part des couches supérieures. Les appels système relatifs à GFS2 mettent en file d'attente et retirent de la file d'attente les détenteurs du glock afin de protéger la section critique du code.
La machine à états de glock est basée sur une file d'attente. Pour des raisons de performance, les tasklets seraient préférables ; cependant, dans l'implémentation actuelle, nous devons soumettre des E/S à partir de ce contexte, ce qui interdit leur utilisation.
Les files d'attente ont leurs propres tracepoints qui peuvent être utilisés en combinaison avec les tracepoints de GFS2.
Le tableau suivant montre quel état peut être mis en cache dans chacun des modes de verrouillage et si cet état mis en cache peut être sale. Cela s'applique aux verrous d'inodes et de groupes de ressources, bien qu'il n'y ait pas de composant de données pour les verrous de groupes de ressources, seulement des métadonnées.
Mode Glock | Données du cache | Métadonnées du cache | Données sales | Métadonnées sales |
---|---|---|---|---|
ONU | Non | Non | Non | Non |
SH | Oui | Oui | Non | Non |
DF | Non | Oui | Non | Non |
EX | Oui | Oui | Oui | Oui |