J'ai deux machines connectées avec Ethernet 10Gbit. Laissez l'un d'eux être un serveur NFS et un autre sera un client NF.
Tester la vitesse du réseau sur TCP avec un iperf
débit ~ 9,8 Gbit / s dans les deux sens, le réseau est donc OK.
Test des performances du disque du serveur NFS:
dd if=/dev/zero of=/mnt/test/rnd2 count=1000000
Le résultat est ~ 150 Mo / s, donc le disque fonctionne bien pour l'écriture.
Le serveur /etc/exports
est:
/mnt/test 192.168.1.0/24(rw,no_root_squash,insecure,sync,no_subtree_check)
Le client monte ce partage sur son emplacement local /mnt/test
avec les options suivantes:
node02:~ # mount | grep nfs
192.168.1.101:/mnt/test on /mnt/test type nfs4 (rw,relatime,sync,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.102,local_lock=none,addr=192.168.1.101)
Si j'essaie de télécharger un fichier volumineux (~ 5 Go) sur la machine cliente à partir du partage NFS, j'obtiens des performances de ~ 130 à 140 Mo / s qui sont proches des performances du disque local du serveur, donc c'est satisfaisant.
Mais lorsque j'essaie de télécharger un fichier volumineux sur le partage NFS, le téléchargement commence à ~ 1,5 Mo / s, augmente lentement jusqu'à 18-20 Mo / s et cesse d'augmenter. Parfois, le partage "se bloque" pendant quelques minutes avant le début du téléchargement, c'est-à-dire que le trafic entre les hôtes devient proche de zéro et si j'exécute ls /mnt/test
, il ne revient pas pendant une minute ou deux. Ensuite, la ls
commande revient et le téléchargement commence à sa vitesse initiale de 1,5 Mbit / s.
Lorsque la vitesse de téléchargement atteint son maximum (18-20 Mo / s), je cours iptraf-ng
et cela montre un trafic de ~ 190 Mbit / s sur l'interface réseau, donc le réseau n'est pas un goulot d'étranglement ici, ainsi que le disque dur du serveur.
Ce que j'ai essayé:
1.
Configurez un serveur NFS sur un troisième hôte qui était connecté uniquement avec une carte réseau Ethernet 100 Mbits. Les résultats sont analogiques: DL affiche de bonnes performances et une utilisation presque complète du réseau à 100 Mbit, le téléchargement ne fonctionne pas plus rapidement que des centaines de kilo-octets par seconde, ce qui laisse une utilisation du réseau très faible (2,5 Mbit / s selon iptraf-ng
).
2. J'ai essayé de régler certains paramètres NFS:
sync
ouasync
noatime
non
hard
rsize
etwsize
sont maximales dans mes exemples, j'ai donc essayé de les diminuer en plusieurs étapes jusqu'à 8192
3. J'ai essayé de changer de machine client et serveur (configurer le serveur NFS sur l'ancien client et vice versa). De plus, il y a six autres serveurs avec la même configuration, j'ai donc essayé de les monter les uns aux autres dans différentes variantes. Même résultat.
4. MTU = 9000, MTU = 9000 et agrégation de liens 802.3ad, agrégation de liens avec MTU = 1500.
5. réglage sysctl:
node01:~ # cat /etc/sysctl.conf
net.core.wmem_max=16777216
net.core.rmem_max=16777216
net.ipv4.tcp_rmem= 10240 873800 16777216
net.ipv4.tcp_wmem= 10240 873800 16777216
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.core.netdev_max_backlog = 5000
Même résultat.
6. Montez depuis l'hôte local:
node01:~ # cat /etc/exports
/mnt/test *(rw,no_root_squash,insecure,sync,no_subtree_check)
node01:~ # mount -t nfs -o sync localhost:/mnt/test /mnt/testmount/
Et ici, j'obtiens le même résultat: le téléchargement depuis /mnt/testmount/
est rapide, le téléchargement vers /mnt/testmount/
est très lent, pas plus rapide que 22 Mo / s et il y a un petit délai avant que le transfert ne commence réellement. Cela signifie-t-il que la pile réseau fonctionne parfaitement et que le problème est dans NFS?
Tout cela n'a pas aidé, les résultats ne différaient pas de manière significative de la configuration par défaut. echo 3 > /proc/sys/vm/drop_caches
a été exécuté avant tous les tests.
MTU de tous les NICS sur les 3 hôtes est de 1500, aucun réglage de réseau non standard effectué. Le commutateur Ethernet est Dell MXL 10 / 40Gbe.
Le système d'exploitation est CentOS 7.
node01:/mnt/test # uname -a
Linux node01 3.10.0-123.20.1.el7.x86_64 #1 SMP Thu Jan 29 18:05:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Quels sont les paramètres qui me manquent? Comment faire écrire NFS rapidement et sans blocages?
Operation not permitted
j'essaie de joindre une strace au processus NFS.