4 votes

Mauvaises performances avec le logiciel Linux raid-10

J'ai une machine équipée d'une puce contrôleur SAS3008 LSI à 8 canaux, et les tests individuels des disques montrent que je peux écrire sur n'importe quel disque ou sur tous les disques à une vitesse comprise entre 174 Mo/sec et 193 Mo/sec avec une vitesse d'écriture soutenue :

Voici le résultat de la commande dd if=/dev/zero of=/dev/mapper/mpath?p1 bs=1G count=100 oflag=direct run in parallèle aux 12 disques :

107374182400 bytes (107 GB) copied, 556.306 s, 193 MB/s
107374182400 bytes (107 GB) copied, 566.816 s, 189 MB/s
107374182400 bytes (107 GB) copied, 568.681 s, 189 MB/s
107374182400 bytes (107 GB) copied, 578.327 s, 186 MB/s
107374182400 bytes (107 GB) copied, 586.444 s, 183 MB/s
107374182400 bytes (107 GB) copied, 590.193 s, 182 MB/s
107374182400 bytes (107 GB) copied, 592.721 s, 181 MB/s
107374182400 bytes (107 GB) copied, 598.646 s, 179 MB/s
107374182400 bytes (107 GB) copied, 602.277 s, 178 MB/s
107374182400 bytes (107 GB) copied, 604.951 s, 177 MB/s
107374182400 bytes (107 GB) copied, 605.44 s, 177 MB/s

Cependant, lorsque je réunis ces disques en un dispositif Raid 10 logiciel, j'obtiens une vitesse d'écriture d'environ 500 Mo/sec. Je m'attendais à obtenir environ le double, puisqu'il n'y a pas de pénalité pour accéder à ces disques en même temps.

J'ai remarqué que le processus md10_raid10 qui, je suppose, fait le raid logiciel lui-même, est proche de 80%, et qu'un cœur est toujours à 100% de temps d'attente, et 0% d'inactivité. Le noyau en question change cependant.

De plus, les performances baissent encore plus lorsque l'on utilise le cache de la mémoire tampon pour écrire dans le système de fichiers EXT4 monté plutôt que d'utiliser oflag=direct pour contourner le cache. Les disques signalent un taux d'occupation de 25% (selon la surveillance munin), mais les disques ne sont clairement pas en surchauffe, mais je crains que le périphérique md10 lui-même ne le soit.

Des suggestions sur la suite à donner à cette affaire ? Je tente une configuration matérielle de raid 10 pour comparer, bien que je ne puisse construire qu'une unité de 10 disques, semble-t-il - cela dit, j'espère obtenir 900 Mo/sec en écriture soutenue. Je mettrai à jour cette question au fur et à mesure que j'en découvrirai davantage.

Edit 1 :

Si j'utilise un dd dans une boucle serrée écrivant sur une partition ext4 montée sur ce périphérique, et que je n'utilise pas le buffer cache (oflag=direct), je peux obtenir jusqu'à 950 Mo/sec en pointe et 855 Mo/sec en continu avec quelques modifications des drapeaux de montage.

Si je lis également avec iflag=direct au même moment, je peux obtenir 480 Mo/sec en écriture et 750 Mo/sec en lecture maintenant.

Si j'écris sans oflag=direct, donc en utilisant le buffer cache, j'obtiens 230 Mo/sec en écriture et 1,2 Mo/sec en lecture, mais la machine semble très lente.

La question est donc de savoir pourquoi l'utilisation du cache de la mémoire tampon affecte si gravement les performances. J'ai essayé diverses stratégies de mise en file d'attente des disques, y compris l'utilisation de 'noop' au niveau du lecteur et la mise en place de 'deadline' ou 'cfq' sur le périphérique dm multivoie approprié, ou deadline sur tous, ou aucun sur le dm et deadline sur le lecteur de secours. Il semble que le disque de sauvegarde ne devrait pas avoir de date et que le périphérique multivoie devrait être celui que je veux, mais cela n'affecte pas du tout les performances, du moins dans le cas du cache de la mémoire tampon.

4voto

the-wabbit Points 40039

Edita:

Votre dd oflag=direct Les observations peuvent être dues à des problèmes de gestion de l'énergie. Utilisez PowerTOP pour voir si les états C de votre CPU passent trop souvent au-dessus de C1 sous une charge d'écriture. Si c'est le cas, essayez de modifier PM pour vous assurer que le CPU ne se met pas en veille et relancez les benchmarks. Reportez-vous à la documentation de votre distribution pour savoir comment faire - dans la plupart des cas, il s'agira de l'outil de réglage de PM. intel_idle.max_cstate=0 paramètre bootline du noyau, mais YMMV.

La grande différence de performance entre un O_DIRECT et une écriture en mémoire tampon peut être due à :

  • lorsque l'on utilise O_DIRECT, l'unité centrale n'est pas mise en sommeil C3+ ou
  • le CPU est envoyé en C3+, mais cela n'a pas autant d'importance en raison du traitement considérablement simplifié lors de l'utilisation de O_DIRECT - le simple fait de pointer vers une zone mémoire mise à zéro et d'émettre une demande d'écriture DMA nécessite moins de cycles que le traitement en mémoire tampon et sera moins sensible à la latence

réponse obsolète :

Cela ressemble beaucoup à un goulot d'étranglement causé par le seul fil d'exécution de l'opération. md .

Raisonnement

  • el fiche technique du contrôleur promet un débit de 6 000
  • votre parallèle dd L'exécution montre 170MB /s + par lecteur, de sorte que le chemin n'est pas limité par la bande passante PCIe de connexion.
  • vous voyez des taux d'utilisation élevés, proches de 100% pour md10_raid10

Correctifs pour le calcul multithread des checksum RAID5 se sont engagés à mdraid en 2013, je ne trouve rien sur des améliorations similaires de RAID1 / RAID10, donc il se peut qu'elles ne soient tout simplement pas là.

Choses à essayer

  • plus qu'un seul fil d'écriture avec dd juste pour voir si ça change quelque chose
  • une implémentation RAID10 différente - LVM RAID 10 vient à l'esprit, mais vous pourriez aussi regardez le ZFS 1 qui a été conçu exactement pour ce cas d'utilisation (beaucoup de disques, pas de contrôleurs RAID matériels).
  • éventuellement une version plus récente du noyau

Pour information, vous verrez rarement (voire jamais) les performances d'écriture atteindre leur maximum (surtout avec un système de fichiers non-CoW) sur la bande passante avec des supports de stockage mécaniques. La plupart du temps, vous serez limité par les temps de recherche, donc la bande passante de pointe ne devrait pas être une grande préoccupation, tant qu'elle répond à vos exigences minimales.


1 si vous faire ZFS, vous devez affiner votre méthode de test car l'écriture de blocs entièrement nuls dans un ensemble de données ZFS peut être arbitrairement rapide. Les zéros ne sont pas écrits sur les disques mais simplement liés au bloc tout-zéro si la compression est activée pour l'ensemble de données.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X