Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

syncronistation du cache NFS entre plusieurs clients et serveurs

3 réponses
Avatar
Eric Belhomme
Bonsoir,

J'ai probleme assez sérieux avec NFS, voici le contexte :
* des stations de travail Linux RHEL4u5 (amd64). Le /home de chaque
station est exporté via NFS, et chaque station a accès aux /home de ses
copines via un automontage /auto/[host]_home où host est le hostname de
la machine qui exporte.
* une grille de calcul Sun SGE 6.0u12
* un serveur de fichier (NetApp) qui exporte les outils utilisés par les
clients pour lancer leurs jobs sur la grille de calcul (compilos divers
et variés)

Mes utilisateurs lancent des jobs chainés sur la ferme de calcul. C'est
à dire que le job N°2 utilise les résultats du job N°1, etc. Les scripts
e mes utilisateurs écrivent donc conçus pour lancer des jobs via SunGrid
sur des machines de calcul (des gros octo cores avec 32Go de RAM, mais
pas de disque dur) mais les opérations de lecture/ecriture sont font sur
leur disque à eux.

Concrètement, si un utilisateur "Roger", travaille sur une station
nommée "station1", et envoie ses jobs avec une ferme de machines nommées
calcul1 à calcul20. Les accès aux données se faisant sur "station1" via
calculX.

Le problème que rencontrent mes utilisateurs, c'est que lorsqu'un job se
termine et que leurs scripts lance aussitôt un autre job dépendant du
premier, très souvent le second job échoue avec une erreur "file not
found"...
Contrètement voici ce qui ce passe :
1) un premier job exécuté sur "calcul3" (par exemple) a retourné un
résultat écrit dans le fichier /auto/station1_home/roger/resultat.txt
2) "station1" démarre aussitôt un second job via SunGrid, qui va être
attribué au gré des ressources disponibles (par exemple sur "calcul12")
3) "calcul12" essaie de faire un stat du fichier
/auto/station1_home/roger/resultat.txt car il en a besoin pour executer
sa tache, mais le serveurs NFS (en l'occurence "station1") lui répond
que le fichier n'existe pas !


Après quelques essais, je me suis rendu compte qu'il fallait parfois
plusieurs 10aines de secondes avant le le serveur NFS flushe son cache
et que les données soient visibles pour les clients qui ne sont pas à
l'origine de l'écriture (dans mon exemple, "calcul3" a une vision
instantanée de fichier créé, alors que "calcul12" doit attendre des
dizaines de secondes avant de "voir" le fichier)

J'ai épluché les manpages de nfs, et googelisé un peu sur la question,
mais hormis la solution radicale de désactiver purement et simplement le
cache NFS je n'ai pas trouvé de solution à ce problème...

quelqu'un aura peut-être une idée ?

D'avance merci !

--
Rico

3 réponses

Avatar
Luc.Habert.00__arjf
Eric Belhomme :

Après quelques essais, je me suis rendu compte qu'il fallait parfois
plusieurs 10aines de secondes avant le le serveur NFS flushe son cache
et que les données soient visibles pour les clients qui ne sont pas à
l'origine de l'écriture (dans mon exemple, "calcul3" a une vision
instantanée de fichier créé, alors que "calcul12" doit attendre des
dizaines de secondes avant de "voir" le fichier)



En fait, pour autant que je sache, le cache est au niveau des clients nfs,
c'est eux qui décident si ils vont faire une requête nfs pour répondre à
un appel système ou se contenter de ce qu'ils ont en cache.

man nfs semble dire qu'on peut jouer sur les durées du cache avec les
options suivantes :

acregmin=n The minimum time (in seconds) that the NFS client caches
attributes of a regular file before it requests fresh
attribute information from a server. If this option is
not specified, the NFS client uses a 3-second minimum.

acregmax=n The maximum time (in seconds) that the NFS client caches
attributes of a regular file before it requests fresh
attribute information from a server. If this option is
not specified, the NFS client uses a 60-second maximum.

acdirmin=n The minimum time (in seconds) that the NFS client caches
attributes of a directory before it requests fresh
attribute information from a server. If this option is
not specified, the NFS client uses a 30-second minimum.

acdirmax=n The maximum time (in seconds) that the NFS client caches
attributes of a directory before it requests fresh
attribute information from a server. If this option is
not specified, the NFS client uses a 60-second maximum.

actimeo=n Using actimeo sets all of acregmin, acregmax, acdirmin,
and acdirmax to the same value. If this option is not
specified, the NFS client uses the defaults for each of
these options listed above.

Mais c'est sous linux; ta sun n'est pas sous solaris?
Avatar
Eric Belhomme
Luc Habert a écrit :

Mais c'est sous linux; ta sun n'est pas sous solaris?



Il n'y a pas de sun dans mon réseau, seulement des stations et serveurs
linux, et l'application SunGrid (qui tourne aussi sur linux).

J'ai re-regardé la manpage de nfs, et il me semble que l'option noac
pourrait résoudre mon problème...

--
Rico
Avatar
Jonathan ROTH
Le 21.11.2008 22:01, Eric Belhomme s'exprima:
J'ai re-regardé la manpage de nfs, et il me semble que l'option noac
pourrait résoudre mon problème...



Et l'option 'sync' ?