storiq logo

La traînée de poudre

Le blog StorIQ

 

Jeudi, 22 novembre 2012

Petit guide de paramétrage de NFS

Afin d’optimiser les performances de votre serveur NAS StorIQ voici un petit guide d’optimisation des partages NFS.

Nombre de démons nfsd en attente

Le premier point à vérifier est le nombre de démons nfsd en attente de connexion défini dans le fichier /etc/defaults/nfs-kernel-server:

  # Number of servers to start up
  RPCNFSDCOUNT=8

. Dans l’idéal on aura à peu près autant de démons que de clients simultanés, de préférence dans une limite raisonnable autour de 4 démons par coeur de processeur (soit 16 à 64 en général).

Paramètres des ports

Le règle de base: si vous ne savez pas trop à quoi ça sert, n’y touchez pas. Les réglages par défaut sont bons: vous pourrez toujours saturer très aisément un lien gigabit ( environ 110 à 120 Mo/s utiles). Laissez donc les rsize, wsize tranquilles! La plupart des guides les mentionnant sur le net sont antédiluviens, et s’appliquent uniquement si vous avez un réseau 10 BaseT, et que votre serveur est une SparcStation 20.

Par contre, un problème classique se pose avec les systèmes BSD, donc Mac OS X: ils utilisent les ports réservés (inférieurs à 1024). Votre export doit donc avoir le paramètre “insecure” pour pouvoir fonctionner avec un Mac!

Paramètres des écritures

Oui, le mode synchrone est plus sûr. Cependant le risque d’utiliser le mode asynchrone reste raisonnable au vu de la fiabilité générale des systèmes actuels, et peut donner un gain significatif en performance. Particulièrement si on utilise un contrôleur RAID avec cache et batterie.

Paramétrage réseau

L’utilisation de “jumbo frame” ne fait plus guère de différence sur le matériel actuel sauf sur du réseau InfiniBand. Si vous utilisez du Gigabit Ethernet, il n’y a rien à gagner: vous devez aisément saturer un port à 110 ou 120 Mo/s en NFS3 comme en NFS4.

Par contre, l’utilisation du bonding est intéressante et souvent oubliée. Si vous voulez en savoir plus sur le bonding, je vous conseille la lecture de la page de manuel de l’outil StorIQ “bonding_cli”.

N’oubliez pas que quel que soit le mode d’agrégation des liens, une connexion IP transitera toujours par un seul câble physique. Si vous avez besoin de plus de débit entre deux machines seulement, le 10 Gigabit Ethernet s’impose, et n’est plus très cher.

Paramétrage des disques

La partie probablement la plus méconnue et la plus souvent oubliée. Il faut savoir que les réglages par défaut des systèmes linux sont curieusement optimisés plus pour des systèmes bureautiques que des serveurs, et ce alors qu’il y a sans doute plus de serveurs Linux que de postes clients.

Les différents éléments à passer en revue sont les suivants : l’ordonnanceur (IO scheduler), les files d’attente de disques, l’antélecture de disque.

Depuis quelques années l’ordonnanceur par défaut des systèmes Linux est “cfq” “Completely Fair Scheduler”. Il est plutôt efficace quand vous n’avez qu’un seul disque dur; par contre, si votre serveur utilise un contrôleur RAID matériel, celui-ci embarque son propre ordonnanceur qui sera toujours plus efficace car au fait de la configuration matérielle. Donc si vous utilisez un contrôleur RAID de quelque type que ce soit, configurez votre ordonnanceur comme “noop”. Il y a plusieurs manières de procéder dépendant des distributions; on peut le configurer lors de la compilation du noyau, sur la ligne de commande du chargeur de démarrage (GRUB ou LILO), ou en cours d’éxécution:

echo noop > /sys/block/sda/queue/scheduler

De même, la file d’attende disque par défaut convient pour un disque simple, mais pas du tout pour une grappe RAID doté d’un cache significatif. On peut également l’augmenter sensiblement. La valeur la plus adaptée dépend bien sûr du modèle de contrôleur, type de grappe RAID, etc:

echo 512 > /sys/block/sda/queue/nr_requests 

L’antélecture de disque (“readahead”) est également essentielle. La valeur par défaut du noyau Linux est probablement optimisée pour un disque IDE de 8 Go: 128 Ko. Il existe deux façons de le modifier, soit via la commande “blockdev”, soit comme précédemment via le pseudo-filesystem /sys:

echo 16384 > /sys/block/sda/queue/read_ahead_kb 

Là encore, il faudra expérimenter différentes valeurs pour obtenir la meilleure performance. Sur un serveur doté d’une grappe RAID assez grande, une valeur minimale se calcule en fonction de la largeur de bande de la grappe et du nombre de disques de données. Par exemple, une grappe RAID-6 de 12 disques comporte 10 disques de données et une largeur de bande de 64 Ko; la valeur minimale d’antélecture doit être 640 Ko. En pratique sur une machine rapide, on obtiendra une performance optimale en lecture séquentielle avec des valeurs beaucoup plus grandes (plusieurs mégaoctets).

Pour finir, le choix du système de fichier: la situation est heureusement assez simple. À mon sens, un seul système de fichier convient pour les volumes de grande taille, et c’est xfs.

Si vous partez d’une installation par défaut d’une distribution courante avec un volume partagé en ext3 et que vous appliquez tous ces conseils, vous pourrez aisément augmenter les performances de 100 à 500%.

posté à: 19:33 permalink