Ralentissement des performances de transfert NFS des petits fichiers


12

J'utilise Openfiler 2.3 sur des disques HP ML370 G5, Smart Array P400, SAS combinés en utilisant RAID 1 + 0.

J'ai installé un partage NFS à partir de la partition ext3 en utilisant la configuration Web d'Openfiler et j'ai réussi à monter le partage à partir d'un autre hôte. Les deux hôtes sont connectés à l'aide d'un lien gigabit dédié.

Benchmark simple utilisant dd:

 $ dd if=/dev/zero of=outfile bs=1000 count=2000000
 2000000+0 records in
 2000000+0 records out
 2000000000 bytes (2.0 GB) copied, 34.4737 s, 58.0 MB/s

Je vois qu'il peut atteindre une vitesse de transfert modérée (58,0 Mo / s).

Mais si je copie un répertoire contenant de nombreux petits fichiers ( .phpet .jpgenviron 1 à 4 Ko par fichier) de taille totale ~ 300 Mo, le cpprocessus se termine en environ 10 minutes.

NFS n'est-il pas adapté au transfert de petits fichiers comme dans le cas ci-dessus? Ou y a-t-il des paramètres qui doivent être ajustés?


Est-ce que cela répond à votre question? Mauvaise performance d'écriture NFS
Aleksandr Dubinsky

Réponses:


7

Il existe de nombreuses raisons pour lesquelles le transfert de nombreux petits fichiers sera toujours plus lent que le transfert d'un seul gros fichier. Pour une lecture, les fichiers sont plus susceptibles d'être dispersés autour du disque, ce qui nécessite des recherches partout pour les obtenir. Comme Evan l'a mentionné, il existe également des métadonnées impliquées dans le cas de NFS (ou de tout autre système de fichiers d'ailleurs!), Ce qui complique également les choses.

Vous pouvez essayer d'augmenter vos paramètres rsizeet wsizeau montage NFS et voir si cela améliorera un peu les performances. Consultez également cette question sur le réglage de NFS pour une latence minimale car il contient de nombreux conseils utiles qui vous aideront dans le cas de nombreux transferts de petits fichiers.


8

Je n'ai pas beaucoup d'expérience NFS, mais mon expérience avec d'autres protocoles de partage de fichiers réseau indique que les performances souffrent dans le scénario "beaucoup de petits fichiers" presque universellement. Vous subissez une latence aller-retour et sur un grand groupe de fichiers, cette latence s'additionne.


4

Avez-vous essayé avec un système de fichiers différent, comme XFS? Il a résolu tous mes problèmes lors de l'exécution de quantités extrêmes de petits transferts de blocs iSCSI. Je ne sais pas pourquoi.

De plus, iSCSI / NFS est généralement configuré pour des trames de données assez volumineuses (trames jumbo, etc.), cela peut vous blesser si vous copiez de petits fichiers un par un. Peut-être tarer puis transférer vous aiderait.


1
Oui, mon test a montré une amélioration en utilisant XFS par rapport à ext3 (~ 8 minutes vs ~ 14 minutes).
Arie K

1
Certains? Je dirais que c'est une très grosse amélioration :)
pauska

1

Vérifiez que vous utilisez une connexion TCP ( mount -t nfs -o tcp host: / mount / target ). Les performances sur les systèmes modernes ne seront pas affectées, mais les petites E / S peuvent s'améliorer considérablement si votre réseau est chargé.

Et vous devriez également essayer un autre système de fichiers; ext3 est fondamentalement le plus lent de tous. C'est solide, bien connu, mais c'est tout à fait inapproprié pour un serveur de fichiers. XFS est bien meilleur, et reiserfs est également bien meilleur pour les petites E / S.


1

Si vous souhaitez transférer une grande arborescence de répertoires de petits fichiers sur NFS et que vous pouvez vous connecter au serveur, la meilleure façon de le faire est de créer un fichier tar qui est automatiquement extrait sur le client, comme suit:

tar c mon répertoire | ssh user @ host tar -xf - -C destdir

De cette façon, un seul "fichier" est transféré sur le réseau et vous avez immédiatement tous vos fichiers sur l'hôte.


0

Juste pour ajouter à la réponse d'Evan, vous avez également tous les frais généraux de création des métadonnées (entrées de répertoire, etc.) pour chaque fichier que vous copiez.


0

Une solution similaire à la réponse de Chris serait de synchroniser régulièrement vos fichiers avec les clients. Si vous souhaitez apporter des modifications bidirectionnelles, vous pouvez également utiliser l'unisson.


0

Le problème est que votre partage est exporté avec l' syncoption (par défaut). Utilisez asyncpour accélérer considérablement les écritures. Voir nfs.sourceforge.net/nfs-howto/ar01s05.html

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.