10.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 10.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.
10.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 10.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
.