Optimiser NFS

logo beeznest

Voici quelques pistes pour améliorer les performances de NFS sous Linux (du moins en
environnement peu chargé). On fera directement attention aux points suivants:

1. Performances réelles du serveur

Est-ce que les disques/contrôleurs qu’on utilise sont réellement plus rapides que le réseau?
Des petits coups de « dd » et de « bonnie » nous le diront.

2. Vitesse du réseau

Est-ce que le réseau est capable de transférer les informations rapidement entre les clients et le serveur? On utilisera pour cela un protocole réseau minimaliste, comme FTP par exemple. Mais évidemment, on pourrait probablement obtenir déjà des informations intéressantes avec tout autre protocole. Si la vitesse de transfert est déjà mauvaise, inutile d’aller plus loin.
De même, tracker les erreurs sur l’interface réseau (output d’ifconfig) sur le client et le serveur est intéressant.

3. Résolution de noms

Si on voit apparaître des délais (freeze) particulièrement quand on commence à accéder à la ressource réseau, il y a de fortes chances que ce soit lié à la résolution de noms, du client ou du serveur (les deux sont importants), et ce dans les deux sens. Les outils suivants nous y aideront: « ping », « dig » et « host ».

4. Configuration propre au protocole NFS

De nos jours, on veillera à utiliser NFSv3 au moins, et ce en TCP (et non pas en UDP, pourtant par défaut sous Linux, à moins d’être sur un réseau local vraiment « propre » et totalement dédié à NFS).
Pour vérifier cela, on fera des transferts par NFS, et on vérifiera ensuite ce que l’output de « nfsstat » nous dit à propos de ce qui est passé (on verra de cette façon la version de NFS réellement utilisée ainsi que le transport TCP ou UDP, et des erreurs éventuelles).
Ensuite, en fonction du type de données transférées (petits fichiers, gros fichiers accédés séquentiellement ou de manière aléatoire), on jouera avec la taille des blocs (« rsize » et « wsize », ainsi que « sync », « async », etc…).

5. Gestion des locks

Pour garantir la validité des données lors de l’accès en écriture simultané de plusieurs clients NFS, celui-ci utilise un « lock manager ». Dans certains cas, ce « lock manager » ne fonctionne pas bien (problème de
communication entre implémentations, …) et peut sévèrement affecter les performances. Dès lors, il faut être attentif à cela, surtout dans les environnements hétérogènes (y compris entre les versions d’une distribution GNU/Linux).