Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

9.3. Utiliser le cache avec NFS

NFS n'utilisera pas le cache à moins d'en avoir reçu l'instruction spécifique. Pour configurer un montage NFS afin d'utiliser FS-Cache, veuillez inclure l'option -o fsc à la commande mount :
# mount nfs-share:/ /mount/point -o fsc
Tous les accès aux fichiers sous /mount/point passeront par le cache, sauf si le fichier est ouvert pour des E/S ou écritures directes (veuillez consulter Section 9.3.2, « Limitations des caches avec NFS » pour obtenir des informations supplémentaires). NFS indexe le contenu du cache à l'aide d'un gestionnaire de fichiers NFS, et non avec le nom du fichier ; cela signifie que les fichiers avec des liens physiques partagent le cache correctement.
La mise en cache est prise en charge dans les versions 2, 3 et 4 de NFS. Cependant, chaque version utilise différentes branches pour la mise en cache.

9.3.1. Partage de cache

Il existe plusieurs problèmes potentiels liés au partage de cache NFS. Comme le cache est persistant, des blocs de données dans le cache sont indexés sur une séquence de quatre clés :
  • Niveau 1 : Détails du serveur
  • Niveau 2 : Certaines options de montage, type de sécurité, FSID, uniquifier
  • Niveau 3 : Identificateur de fichier
  • Niveau 4 : Numéro de la page dans le fichier
Pour éviter les problèmes de gestion de cohérence entre superblocs, tous les superblocs NFS souhaitant mettre des données en cache possèdent des clés de Niveau 2 uniques. Normalement, deux montages NFS avec le même volume source et les mêmes options partageront un superbloc et partageront ainsi la mise en cache, même s'ils montent différents répertoires à l'intérieur de ce volume.

Exemple 9.1. Partager un cache

Exécutez les deux commandes mount suivantes :
mount home0:/disk0/fred /home/fred -o fsc
mount home0:/disk0/jim /home/jim -o fsc
Ici, /home/fred et /home/jim partageront probablement le superrbloc car ils possèdent les mêmes options, particulièrement s'ils proviennent du même volume ou de la même partition sur le serveur NFS (home0). Prenez en considération les deux commandes de montage suivantes :
mount home0:/disk0/fred /home/fred -o fsc,rsize=230
mount home0:/disk0/jim /home/jim -o fsc,rsize=231
Dans ce cas, /home/fred et /home/jim ne partageront pas le super bloc car leurs paramètres d'accès réseau sont différents, et ceux-ci font partie de la clé du Niveau 2. La même chose est valable pour la séquence de montage suivante :
mount home0:/disk0/fred /home/fred1 -o fsc,rsize=230
mount home0:/disk0/fred /home/fred2 -o fsc,rsize=231
Ici, le contenu des deux sous-arborescences (/home/fred1 et /home/fred2) seront mis en cache deux fois.
Une autre manière d'éviter le partage de superblocs est de le supprimer de manière explicite avec le paramètre nosharecache. Voici un exemple :
mount home0:/disk0/fred /home/fred -o nosharecache,fsc
mount home0:/disk0/jim /home/jim -o nosharecache,fsc
Dans ce cas, un superbloc seulement aura la permission d'utiliser le cache puisque rien ne permettra de distinguer les clés de Niveau 2 de home0:/disk0/fred et home0:/disk0/jim. Pour répondre à ce problème, veuillez ajouter un identifiant unique sur un des montages au moins, c-a-d fsc=unique-identifier. Par exemple :
mount home0:/disk0/fred /home/fred -o nosharecache,fsc
mount home0:/disk0/jim /home/jim -o nosharecache,fsc=jim
Ici, l'identifiant unique jim sera ajouté à la clé de Niveau 2 utilisée dans le cache pour /home/jim.

9.3.2. Limitations des caches avec NFS

Ouvrir un fichier à partir d'un système de fichiers partagé pour des E/S directes contournera automatiquement le cache. Cela se produit car ce type d'accès doit être effectué directement sur le serveur.
Ouvrir un fichier à partir d'un système de fichiers partagé pour écriture ne fonctionnera pas sur NFS version 2 et 3. Les protocoles de ces versions n'offrent pas suffisamment d'informations sur la gestion de la cohérence pour que le client puisse détecter une écriture simultanée sur le même fichier, mais provenant d'un autre client.
Ainsi, ouvrir un fichier à partir d'un système de fichiers partagé pour des E/S directes ou pour écriture videra la copie du cache du fichier. FS-Cache ne mettra pas le fichier en cache à nouveau jusqu'à ce qu'il ne soit plus ouvert pour des E/S directes ou des écritures.
En outre, cette version de FS-Cache met uniquement en cache les fichiers NFS normaux. FS-Cache ne mettra pas en cache les répertoires, liens symboliques, fichiers périphériques, FIFO et sockets.