syncronistation du cache NFS entre plusieurs clients et serveurs
3 réponses
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...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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?
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?
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?
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
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...