Les performances Linux RAID-0 n'augmentent pas plus de 1 Go / s

8

J'ai du mal à obtenir le débit maximal de ma configuration. Le matériel est le suivant:

  • Processeur double quadricœur AMD Opteron (tm) 2376
  • 16 Go de RAM DDR2 ECC
  • deux contrôleurs RAID Adaptec 52245
  • 48 disques SATA de 1 To configurés en 2 baies RAID-6 (bande de 256 Ko) + pièces de rechange.

Logiciel :

  • Plain vanilla 2.6.32.25 kernel, compilé pour AMD-64, optimisé pour NUMA; Espace utilisateur Debian Lenny.
  • tests de performances: disktest, bonnie ++, dd, etc. Tous donnent les mêmes résultats. Aucune différence ici.
  • ordonnanceur io utilisé: noop. Ouais, pas de truc ici.

Jusqu'à présent, je supposais essentiellement que le striping (RAID 0) de plusieurs périphériques physiques devrait augmenter les performances de manière à peu près linéaire. Mais ce n'est pas le cas ici:

  • chaque matrice RAID atteint environ 780 Mo / s en écriture, soutenue et 1 Go / s en lecture, soutenue.
  • l'écriture sur les deux matrices RAID simultanément avec deux processus différents donne 750 + 750 Mo / s, et la lecture sur les deux donne 1 + 1 Go / s.
  • cependant, lorsque je segmente les deux tableaux ensemble, en utilisant soit mdadm soit lvm, les performances sont d'environ 850 Mo / s en écriture et 1,4 Go / s en lecture. au moins 30% de moins que prévu!
  • l'exécution de deux processus d'écriture ou de lecture parallèles contre les tableaux rayés n'améliore pas les chiffres, en fait, elle dégrade encore plus les performances.

Alors qu'est-ce qui se passe ici? Fondamentalement, j'ai exclu les conflits de bus ou de mémoire, car lorsque j'exécute dd sur les deux lecteurs simultanément, la vitesse d'écriture cumulée atteint en fait 1,5 Go / s et la vitesse de lecture dépasse 2 Go / s.

Ce n'est donc pas le bus PCIe. Je suppose que ce n'est pas la RAM. Ce n'est pas le système de fichiers, car j'obtiens exactement les mêmes chiffres en comparant le périphérique brut ou en utilisant XFS. Et j'obtiens également exactement les mêmes performances en utilisant soit l'entrelacement LVM soit l'entrelacement md.

Qu'est-ce qui ne va pas? Qu'est-ce qui empêche un processus d'atteindre le débit maximal possible? Le striping Linux est-il défectueux? Quels autres tests pourrais-je exécuter?

wazoox
la source
Je ne comprends pas pourquoi vous optez pour RAID 6 + 0 ici, pourquoi le feriez-vous alors que vous pouvez simplement utiliser RAID 1 + 0 normal?
Chopper3
Cela ne résoudra pas le problème. md / lvm partagent le même comportement lors de l'agrégation de baies RAID-10. Je m'occupe du manque général de performances, pas d'une configuration particulière. Il s'agit d'un système de test, pas d'une machine de production.
wazoox
5
votre raid 0 stripes s'aligne-t-il sur votre raid 6 stripes? En général, le RAID en couches est une zone très précaire et il n'est pas acceptable de supposer qu'un RAID donné agira comme s'il s'agissait d'un seul disque dur de la même vitesse.
JamesRyan
1
avez-vous essayé de configurer les cartes Adaptec en JBOD et de faire du RAID-10 uniquement dans le logiciel (md)? cela ne me surprendrait pas si la fonction RAID du contrôleur est gérée par les pilotes, annulant tout avantage de performance une fois que vous avez entrelacé deux RAID différents. md, d'autre part, tentera d'optimiser l'accès à chaque lecteur indépendamment, en approchant des temps théoriques (s'il n'y a pas d'autre goulot d'étranglement, bien sûr)
Javier
1
Cela ne semble pas être une enquête facile. À première vue, je préférerais la possibilité que le stripingprogramme ne puisse pas fonctionner via un algorithme multi-threading. Puisque vous utilisez le soft RAID de mdadm, je vous suggère de jeter un œil à la source.
e2-e4

Réponses:

3

Avez-vous essayé d'exécuter latencytop tout en faisant des tests de performances? pourrait être utile pour voir quel syscall linux est le coupable (le cas échéant).

Andika Triwidada
la source
2

C'est une carte x8 PICe Gen 1 pour autant que je sache - le débit de données maximal absolu qu'elle pourrait prendre en charge est de 2 Go / s en supposant zéro surcharge. Adaptec prétend uniquement que les cartes peuvent supporter au mieux 1,2 Go / s et que vous dépassez cela.

Équipés de la technologie RAID sur puce (RoC) double cœur de pointe, de la connectivité PCI Express x8 et de 512 Mo de cache DDR, ils fournissent plus de 250 000 E / S et 1,2 Go / s.

Je suppose que puisque vous êtes en mesure de dépasser considérablement leurs performances déclarées avec deux ensembles RAID 0 agissant indépendamment de la charge supplémentaire, petite et tout est possible, cette répartition ajoute à cela une surcharge des processeurs RAID, ou peut-être du sous-système RAM sur le contrôleur, à des charges GByte / sec.

Helvick
la source
1
Je ne comprends pas très bien ... Comme le dit OP, il me semble qu'il a 2 contrôleurs RAID, chacun gérant une matrice RAID6. Ensuite, il RAID 0 est les deux matrices RAID 6 dans le logiciel, à savoir. en utilisant le noyau RAID intégré de Linux. Dans ce cas, chaque contrôleur ne doit gérer que la moitié de la charge, il suffit donc à chaque contrôleur de faire 780 Mo / s en écriture et 1 Go / s en lecture. Les contrôleurs ont déjà prouvé qu'ils pouvaient le faire (avant l'ajout du RAID logiciel). Donc, le bus PCI-Express / contrôleur RAID lui-même ne devrait pas être le facteur limitant?
Jesper M
Bon point - a raté le commentaire du contrôleur double (et la partie lvm \ md qui a souligné cela). Son point sur le fait qu'il ne s'agit pas d'une limitation de bus \ IO est à peu près prouvé alors.
Helvick