Comprendre les statistiques NFSD sous Linux

Les statistiques du serveur NFS sont accessibles dans le fichier /proc/net/rpc/nfsd ; c’est ce fichier qu’il faut lire si vous avez votre propre programme de monitoring et qu’il vous faut les valeurs « brutes ». Si c’est pour une lecture par un humain, l’utilitaire nfsstat est là pour ça. Petit tour d’aperçu des deux outils

Commençons par le fichier source des statistiques (en effet, nfsstat se contente de lire ce fichier).

Informations dans /proc/net/rpc/nfsd

Exemple :

rc 52603 2106994613 989994491 fh 4 0 0 0 0 io 390118560 2479849292 th 512 549429 97890.216 29560.756 6016.820 1743.004 851.868 419.216 239.144 173.020 131.476 355.180 ra 1024 1554405721 0 0 0 0 0 0 0 0 0 923683645 net 3158986943 0 3158896106 4484 rpc 3149953922 2 2 0 0 proc3 22 1746 1055191401 195469818 34714069 722236051 618167 2478122396 1681654973 90492213 2315234 377 1 82213841 1538965 53357411 127 37630038 229128479 197374 2592 0 773272877 proc4 2 0 0 proc4ops 40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

chaque ligne correspond à des informations différentes :

  • rc : reply cache stats
  • fh : file handle cache : gestion du cache des descripteurs de fichiers
  • io : I/O effectuées (lectures / écritures)
  • th : threads NFS
  • ra : read ahead cache
  • net : statistiques réseau
  • rpc : Informations RPC
  • proc3 : appels NFS dans le protocole 3
  • proc4 : statistiques générales NFS v4
  • proc4ops : appels NFS dans le protocole 4 (équivalent de la ligne proc3 mais en nfsv4)

Décrivons ensuite chaque champ de chaque ligne :

rc – read ahead cache

  • hits : signifie qu’une retransmission a eu lieu (mauvais signe)
  • Misses : une opération requiert du cache
  • Nocache : une opération ne requiert pas de cache

fh – file handle cache

Petite explication sur le fonctionnement de NFS : 
Chaque client va d’abord faire un appel lookup() avec un nom de fichier. Le serveur NFS va retourner un filehandle (FH), et c’est ce file handle qui sera ensuite utilisé par le client. 
Le serveur a donc évidemment un cache de file handle afin de ne pas chercher de correspondances à chaque fois.
  • stale : supposé être le nombre d’erreur de file handle (pas bon signe)
  • total lookup
  • anon lookup
  • dir not in cache
  • nodir not in cache
Ces 4 dernières variables semblent inutilisées (valeur toujours à 0).

io – I/O effectuées

  • lectures (en octets) sur disque
  • écritures (en octets) sur disque

th – threads NFS

nombre de threads NFS ; Puis histogramme de l’utilisation des threads.

Le serveur NFS lance X threads au démarrage (X == premier argument de cette ligne, réglable dans votre config NFSD). Pour assigner les tâches, il fait ça de manière simple : il essaie d’assigner au 1er thread. Si celui-ci est occupé, il essaie d’assigner au 2e, et ainsi de suite jusqu’au dernier.

Le 2e paramètre de cette ligne correspond au nombre de fois où tous les threads ont été occupés. C’est très mauvais si cette valeur est supérieure à 0, cela veut dire que le serveur NFS n’a pas pu répondre au client car il était surchargé par les autres demandes en cours.
Suit alors 10 valeurs correspondant aux tranches d’utilisation : 0-10% ; 10-20%, etc.

Pour en déduire si vous avez ajusté correctement le nombre de threads NFS, regarder dans quelle tranche se situe le premier 0 (ce qui correspond donc au pourcentage jamais atteint).

ra – read ahead cache

  • taille du cache en Kilo-octets
  • histogramme d’utilisation, comme pour ‘th’, mais cette fois avec les valeurs dans cet ordre : <0-10%> <10-20%> … <100%>
  • dernier chiffre : not-found ; requêtes non trouvées dans le cache

net : statistiques réseau

  • ‘netcnt’ : compte chaque lecture
  • nombre de paquets UDP reçu
  • nombre de fois où le serveur a reçu des données d’une connexion TCP
  • Nombre de connexions TCP établies
Un client établit une session TCP avec le serveur une seule fois (sauf déconnexion ou autre action spécifique). Vous devez donc avoir un nombre de connexions TCP faible.

rpc – Informations RPC

proc3 : appels NFS dans le protocole 3

La norme nfsv3 offre un nombre restreint d’appels. Toutes les opérations sont résumées en 22 calls NFS qui sont comptabilisés comme suit dans l’ordre (explication en anglais, je vais pas traduire ça …) : 
  • NULL – Do nothing 
  • GETATTR – Get file attributes 
  • SETATTR – Set file attributes 
  • LOOKUP – Lookup filename 
  • ACCESS – Check Access Permission 
  • READLINK – Read from symbolic link 
  • READ – Read From file 
  • WRITE – Write to file 
  • CREATE – Create a file 
  • MKDIR – Create a directory 
  • SYMLINK – Create a symbolic link 
  • MKNOD – Create a special device 
  • REMOVE – Remove a File 
  • RMDIR – Remove a Directory 
  • RENAME – Rename a File or Directory 
  • LINK – Create Link to an object 
  • READDIR – Read From Directory 
  • READDIRPLUS – Extended read from directory 
  • FSSTAT – Get dynamic file system information 
  • FSINFO – Get static file system Information 
  • PATHCONF – Retrieve POSIX information 
  • COMMIT – Commit cached data on a server to stable storage 

proc4 : statistiques générales NFS v4

Juste trois compteurs : premier inconnu ; 2e: ‘null’ ; 3e: ‘compound’; Ce découpage est basé sur la RFC 3530 qui explique NFSv4 : 

proc4ops : appels NFS dans le protocole 4

Comme pour proc3, il s’agit des appels de base du protocole, soit dans l’ordre : 
  • null
  • read
  • write
  • commit
  • open
  • open_conf
  • open_noat
  • open_dgrd
  • close
  • setattr
  • fsinfo
  • renew
  • setclntid
  • confirm
  • lock
  • lockt
  • locku
  • access
  • getattr
  • lookup
  • lookup_root
  • remove
  • rename
  • link
  • symlink
  • create
  • pathconf
  • statfs
  • readlink
  • readdir
  • server_caps
  • delegreturn
  • setacl
  • fs_locations.
Ce n’est pas le même ordre que dans la RFC contrairement à NFSv3 … Si vous avez un doute, n’hésitez pas à m’en faire part.

Programme nfsstat

Comme toujours, je vous encourage à lire attentivement la doc du logiciel, tout est bien expliqué et je ne ferais que de la paraphrase :
Quelques exemples :
nfsstat -o all -34
Affiche toutes les informations (client/serveur) pour les versions 3 et 4 de NFS.
nfsstat –verbose -34
Identique.
nfsstat -o all
Affiche toutes les informations NFS (client/serveur) sur la version en cours d’utilisation de NFS.
nfsstat –nfs –server -3
Affiche les statistiques serveurs uniquement pour  NFS version 3.
nfsstat -m
Affiche des informations sur les montages NFS (fonctionnement en mode client uniquement).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *