Lustre

From CC Doc
Jump to: navigation, search
This page is a translated version of the page Tuning Lustre and the translation is 100% complete.

Other languages:
English • ‎français

Système de fichiers Lustre

Lustre est un système de fichiers distribué de haute performance, permettant aux utilisateurs de réaliser des opérations d'entrée-sortie en parallèle avec un fort débit. Il y a cependant quelques précautions à prendre si on veut obtenir un rendement maximal.

stripe count et stripe size

Pour chaque fichier ou répertoire, il est possible de modifier les paramètres stripe size et stripe count.

  • stripe size est la quantité de données qui est ajoutée à la fois à un fichier lorsqu'on a besoin d'allouer plus d'espace;
  • stripe count est le nombre de disques sur lesquels les données sont réparties.

Il est possible de connaître la valeur de ces paramètres pour un fichier ou un répertoire donné avec la commande

[nom@serveur $] lfs getstripe ''path/to/file''

De même, il est possible de modifier les paramètres pour un répertoire donné avec la commande

[nom@serveur $] lfs setstripe -c ''count'' -s ''size'' ''/path/to/dir''

Par exemple, si count=8 et size=4m, alors le fichier sera réparti sur huit disques différents et grossira par incréments de 4Mo chaque fois que cela sera nécessaire.

Il n'est pas possible de changer le stripe count ou le stripe size d'un fichier existant; il faut le copier (et non le déplacer) vers un répertoire avec des paramètres différents. Pour créer un fichier vide avec un stripe count et un stripe size donnés sans modifier les paramètres du répertoire, vous pouvez exécuter un lfs setstripe sur un fichier non existant : le fichier sera créé vide, avec les paramètres spécifiés.

Augmenter le stripe count peut augmenter les performances d'un programme parallèle, mais rend aussi le fichier plus vulnérable aux défaillances matérielles.

Lorsqu'un programme parallèle a besoin de lire un petit fichier (< 1Mo), par exemple un fichier de configuration, il est plus efficace de placer ce fichier sur un seul disque (stripe count=1), de le lire avec le processus maître (master rank), et ensuite de l'envoyer aux autres processus à l'aide de MPIMessage Passing Interface_Broadcast ou MPIMessage Passing Interface_Scatter.

Lorsque l'on manipule de gros fichiers de données, il est préférable d'utiliser un stripe count aussi grand que le nombre de processus MPIMessage Passing Interface. Quant au stripe size, il sera habituellement de la même taille que le tampon de données qui est lu ou écrit par chaque processus. Par exemple, si chaque processus lit 1Mo de données à la fois, alors un stripe size de 1Mo sera probablement l'idéal. Si vous n'avez pas de bonne raison de modifier cette taille, nous vous recommandons de la laisser à sa valeur par défaut, qui a été optimisée pour des fichiers de grande taille. Notez qu'il ne faut jamais utiliser un stripe size qui ne soit pas un multiple entier de 1Mo.

De manière générale, il faut réduire au maximum les ouvertures et fermetures de fichiers. Il sera donc préférable d’agglomérer toutes les données dans un seul fichier plutôt que d'écrire une multitude de petits fichiers. Il sera aussi grandement préférable d'ouvrir le fichier une seule fois au début de l'exécution et de le fermer à la fin, plutôt que de l'ouvrir et de le fermer chaque fois que l'on veut y ajouter de nouvelles données, à l'intérieur d'une même exécution.

Pour plus d'information