L'opération mkfs prend très longtemps sur Linux Software Raid 5

9

J'ai mis en place un raid logiciel Linux niveau 5 composé de disques 4 * 2 To. La baie de disques a été créée avec une taille de bande de 64 Ko et aucun autre paramètre de configuration. Après la reconstruction initiale, j'ai essayé de créer un système de fichiers et cette étape prend très longtemps (environ une demi-heure ou plus). J'ai essayé de créer un système de fichiers xfs et ext3, les deux ont pris beaucoup de temps, avec mkfs.ext3 j'ai observé le comportement suivant, qui pourrait être utile:

  • l'écriture des tables d'inode s'exécute rapidement jusqu'à ce qu'elle atteigne 1053 (~ 1 seconde), puis elle écrit environ 50, attend deux secondes, puis les 50 suivantes sont écrites (selon l'affichage de la console)
  • lorsque j'essaie d'annuler l'opération avec Control + C, elle se bloque pendant une demi-minute avant d'être vraiment annulée

Les performances des disques individuellement sont très bonnes, j'ai exécuté bonnie ++ sur chacun séparément avec des valeurs d'écriture / lecture d'environ 95/110 Mo / s. Même lorsque j'exécute bonnie ++ sur chaque lecteur en parallèle, les valeurs ne sont réduites que d'environ 10 Mo. J'exclus donc la planification du matériel / des E / S en général comme source de problème.

J'ai essayé différents paramètres de configuration pour stripe_cache_size et readahead size sans succès, mais je ne pense pas qu'ils soient pertinents pour l'opération de création de système de fichiers.

Les détails du serveur:

  • Serveur Linux 2.6.35-27-générique # 48-Ubuntu SMP x86_64 GNU / Linux
  • mdadm - v2.6.7.1

Quelqu'un at-il une suggestion sur la façon de déboguer davantage cela?

Elmar Weber
la source

Réponses:

4

Je suis d'accord, que cela peut être lié à l'alignement des rayures. D'après mon expérience, la création de XFS non alignés sur 3 * 2 To RAID-0 prend environ 5 minutes, mais s'il est aligné sur la taille de la bande, il prend environ 10 à 15 secondes. Voici une commande pour aligner XFS sur une taille de bande de 256 Ko:

mkfs.xfs -l internal,lazy-count=1,sunit=512 -d agsize=64g,sunit=512,swidth=1536 -b size=4096 /dev/vg10/lv00

BTW, la largeur de bande dans mon cas est de 3 unités, ce qui sera la même chose pour vous avec 4 disques mais en raid-5.

De toute évidence, cela améliore également les performances de FS, vous devriez donc mieux les aligner.

dtoubelis
la source
Salut, cela n'a fait aucune différence, j'ai essayé: time mkfs.xfs -l sunit=128 -d agsize=64g,sunit=128,swidth=512 -b size=4096 /dev/md0 -fce qui prenait à peu près le même temps que mkfs sans aucun paramètre
Elmar Weber
J'utilise bonnie ++ alors voyez si cela fait une différence de performance pendant le fonctionnement. btw: y a-t-il une raison pour le paramètre agsize? J'ai lu la page de manuel mais je n'ai pas pu déduire l'avantage de la définir sur une valeur.
Elmar Weber
(btw: la commande ci-dessus était fausse, la largeur correcte était de 384)
Elmar Weber
Je n'ai pas eu d'amélioration des performances sur mkfs, mais les performances globales mesurées avec bonnie ++ sont bien meilleures: les opérations de création / suppression de fichiers sont environ 4 fois meilleures qu'auparavant et la vitesse d'écriture séquentielle d'environ 15%. Merci beaucoup.
Elmar Weber
2
agsize n'est pas vraiment nécessaire ici - mkfs le calculera automatiquement (divisant également la taille du volume par le nombre de CPU logiques). C'est un reste de ma propre configuration - j'ai créé ce volume avec une certaine attente pour un changement de configuration futur.
dtoubelis
6

Je soupçonne que vous rencontrez le petit problème d'écriture RAID5 typique. Pour les écritures inférieures à la taille d'une bande, il doit effectuer une lecture-modification-écriture pour les données et la parité. Si l'écriture a la même taille que la bande, elle peut simplement écraser la parité, car elle sait quelle est la valeur et n'a pas à la recalculer.

malcolmpdx
la source
Serait-il logique, est-ce que je vois cela correctement?: Selon la sortie mkfs.ext3, il écrit environ 25 tables d'inode par seconde, je suppose qu'elles sont plus petites que 64k lors de la création initiale, donc une bande de 64k est écrite. Cela signifierait une écriture de 16 Ko sur chaque disque, donc ensemble 25 écritures aléatoires de 16 Ko par seconde, avec une taille de secteur de 4 Ko, cela signifie 100 opérations d'E / S aléatoires par seconde, ce qui est à peu près ce que bonnie ++ a montré.
Elmar Weber
Correspond au résultat de bonnie ++ sur le raid réel, 335 Mo en lecture et 310 Mo en écriture, mais la création et la suppression de fichiers ne représentent que 1/4 des performances d'un seul disque.
Elmar Weber
3

Vos performances mkfs et système de fichiers ultérieures pourraient s'améliorer si vous spécifiez la largeur de foulée et de bande lors de la création du système de fichiers. Si vous utilisez les blocs 4k par défaut, votre foulée est de 16 (bande RAID de 64k divisée par bloc de système de fichiers de 4k) et votre largeur de bande est de 48 (foulée de système de fichiers de 16 multipliée par les 3 disques de données de votre baie).

mkfs.ext3 -E stride=16 stripe-width=48 /dev/your_raid_device
sciurus
la source