This is an archive of past FreeBSD releases; it's part of the FreeBSD Documentation Archive.

NFS

16.2. NFS

Contribution de John Lind .

Certaines cartes Ethernet ISA ont des limites qui peuvent poser de sérieux problèmes sur un réseau, en particulier avec NFS. Ce n'est pas une particularité propre à FreeBSD, mais elle affecte aussi les systèmes FreeBSD.

Ce problème ce produit pratiquement tout le temps quand les systèmes (FreeBSD) PC sont sur le même réseau que des stations de travail très performantes, comme celles de Silicon Graphics, Inc., et Sun Microsystems, Inc. Les montages NFS se font sans difficulté et certaines opérations réussissent, puis tout-à-coup, il semble que le serveur ne réponde pas au client, bien que les échanges avec les autres systèmes continuent à se dérouler normalement. Cela se manifeste sur la machine cliente, que ce soit un système FreeBSD ou une station de travail. Sur de nombreux systèmes, il n'y a pas moyen d'arrêter proprement le client une fois que ce problème apparaît, la seule solution est souvent de réinitialiser le client, parce que le problème NFS ne peut être résolu.

Bien que la solution ``correcte'' soit d'installer une carte Ethernet plus performante et de plus grande capacité sur le système FreeBSD, il y a une solution de contournement simple qui fournit un palliatif satisfaisant. Si le système FreeBSD est le serveur, utilisez l'option -w=1024 avec mount sur le client. Si le système FreeBSD est le client, alors montez le système de fichiers NFS avec l'option -r=1024. Vous pouvez mettre ces options dans le quatrième champ de l'entrée fstab sur le client, pour les montages automatiques, ou avec le paramètre -o de la commande mount pour les montages manuels.

Il faut noter qu'il existe un problème différent, que l'on confond parfois avec le précédent, qui peut se produire lorsque les serveurs et les clients NFS sont sur des réseaux différents. Si c'est le cas, assurez-vous que vos routeurs transmettent bien les informations UDP nécessaires, ou vous n'irez nulle part, quoi que vous fassiez par ailleurs.

Dans les exemples qui suivent, fastws est le nom de la station de travail (interface) de haute performance et freebox celui de la machine (interface) FreeBSD avec une carte Ethernet moins performante. /sharedfs est le système de fichiers NFS qui sera exporté (voyez man exports), et /project le point de montage pour ce système de fichiers exporté, sur le client. Dans tous les cas, des options supplémentaires, comme hard ou soft et bg seront peut-être nécessaires pour vos applications.

Exemple lorsque le système FreeBSD (freebox) est le client: dans /etc/fstab de freebox:

    fastws:/sharedfs /project nfs rw,-r=1024 0 0
         
commande de montage manuel sur freebox:
    # mount -t nfs -o -r=1024 fastws:/sharedfs /project


Exemple lorsque le système FreeBSD (freebox) est le serveur: dans /etc/fstab de fastws:

    freebox:/sharedfs /project nfs rw,-w=1024 0 0
           
commande de montage manuel sur fastws:
    # mount -t nfs -o -w=1024 freebox:/sharedfs /project


Presque toutes les cartes Ethernet 16-bit permettront d'utiliser les restrictions ci-dessus à la taille du tampon de lecture/écriture.

Pour ceux que cela intéresse, voici ce qui provoque le problème, ce qui explique aussi qu'il ne soit pas récupérable. NFS utilise habituellement une taille de ``bloc'' de 8k (bien qu'il arrive qu'il les fragmente en plus petits morceaux). Comme la taille maximum d'un paquet Ethernet est de 1500 bits, le block NFS est réparti sur plusieurs paquets Ethernet, bien qu'il soit toujours vu comme un ensemble par les couches supérieures du code, et doit être reçu, assemblé et ``acquitté'' comme tel. Les stations de travail performantes peuvent traiter les paquets qui composent le ``bloc'' NFS, les uns après les autres, pratiquement aussi rapidement que le standard le permet. Sur les cartes plus petites et de moindre capacité, les derniers paquets d'un même groupe écrasent les précédents, avant qu'ils aient été transmis, et l'ensemble ne peut être reconstruit et acquitté. En conséquence, le délai est dépassé sur la station de travail, et elle recommence l'opération, mais elle renvoie tous les 8k, et le phénomène se reproduit à l'infini.

En définissant la taille de ``bloc'' en deçà de la taille d'un paquet Ethernet, nous sommes sûrs que chaque paquet Ethernet entier sera acquitté individuellement, ce qui évite la situation d'inter-bloquage.

Il peut toujours y avoir écrasement lorsque des stations de travail performantes surchargent un système PC de données, mais avec les meilleures cartes, de tels écrasements ne sont pas systématiques pour les ``unités'' NFS. En cas d'écrasement, les blocs affectés sont retransmis, et il y a de fortes chances qu'ils soient reçus, assemblés et acquittés.

For questions about FreeBSD, e-mail <questions@FreeBSD.org>.
For questions about this documentation, e-mail <doc@FreeBSD.org>.