6 votes

Mauvaises performances en écriture d'un réseau RAID10 logiciel de 8 disques SSD

J'ai un serveur avec une carte mère Supermicro X10DRW-i et une matrice RAID10 de 8 SSD KINGSTON SKC400S ; le système d'exploitation est CentOS 6.

  # cat /proc/mdstat 
Personalities : [raid10] [raid1] 

md2 : active raid10 sdj3[9](S) sde3[4] sdi3[8] sdd3[3] sdg3[6] sdf3[5] sdh3[7] sdb3[1] sda3[0]
      3978989568 blocks super 1.1 512K chunks 2 near-copies [8/8] [UUUUUUUU]
      bitmap: 9/30 pages [36KB], 65536KB chunk

-

  # mdadm --detail /dev/md2                
    /dev/md2:
            Version : 1.1
      Creation Time : Wed Feb  8 18:35:14 2017
         Raid Level : raid10
         Array Size : 3978989568 (3794.66 GiB 4074.49 GB)
      Used Dev Size : 994747392 (948.67 GiB 1018.62 GB)
       Raid Devices : 8
      Total Devices : 9
        Persistence : Superblock is persistent

      Intent Bitmap : Internal

        Update Time : Fri Sep 14 15:19:51 2018
              State : active 
     Active Devices : 8
    Working Devices : 9
     Failed Devices : 0
      Spare Devices : 1

             Layout : near=2
         Chunk Size : 512K

               Name : ---------:2  (local to host -------)
               UUID : 8a945a7a:1d43dfb2:cdcf8665:ff607a1b
             Events : 601432

        Number   Major   Minor   RaidDevice State
           0       8        3        0      active sync set-A   /dev/sda3
           1       8       19        1      active sync set-B   /dev/sdb3
           8       8      131        2      active sync set-A   /dev/sdi3
           3       8       51        3      active sync set-B   /dev/sdd3
           4       8       67        4      active sync set-A   /dev/sde3
           5       8       83        5      active sync set-B   /dev/sdf3
           6       8       99        6      active sync set-A   /dev/sdg3
           7       8      115        7      active sync set-B   /dev/sdh3

           9       8      147        -      spare   /dev/sdj3

J'ai remarqué que la vitesse d'écriture est tout simplement terrible, pas même proche des performances des SSD.

# dd if=/dev/zero of=/tmp/testfile bs=1G count=1 oflag=dsync      
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 16.511 s, 65.0 MB/s

La vitesse de lecture est cependant bonne

# hdparm -tT /dev/md2

/dev/md2:
 Timing cached reads:   20240 MB in  1.99 seconds = 10154.24 MB/sec
 Timing buffered disk reads: 3478 MB in  3.00 seconds = 1158.61 MB/sec

Après avoir fait quelques recherches sur le problème, j'ai découvert que j'avais probablement mal configuré le stockage au départ : Le X10DRW-i est équipé d'un Intel C610 qui possède deux contrôleurs SATA séparés, un SATA à 6 ports et un sSATA à 4 ports. Les disques de la matrice sont donc connectés à des contrôleurs différents, et je pense que c'est la cause principale des mauvaises performances. Je n'ai qu'une seule idée pour résoudre ce problème : installer un contrôleur SAS PCIe (probablement AOC-S3008L-L8E) et y connecter des disques SSD.

Je voudrais donc confirmer ce qui suit :

Ai-je raison sur la cause première, ou dois-je revérifier quelque chose ?

Ma solution fonctionnera-t-elle ?

Si je reconnecte les disques au nouveau contrôleur, mon RAID et mes données survivront-ils ? Mes recherches montrent que oui, car les UUID des partitions resteront les mêmes, mais je veux juste être sûr.

Merci à tous par avance.

UPD : iostat -x 1 en effectuant le test dd : https://pastebin.com/aTfRYriU

# hdparm /dev/sda                                    

/dev/sda:
 multcount     = 16 (on)
 IO_support    =  1 (32-bit)
 readonly      =  0 (off)
 readahead     = 256 (on)
 geometry      = 124519/255/63, sectors = 2000409264, start = 0

-

# cat /sys/block/md2/queue/scheduler                 
none

Bien que le planificateur AFAIK soit défini sur les disques physiques :

# cat /sys/block/sda/queue/scheduler 
noop anticipatory [deadline] cfq 

-

smartctl -a (sur les périphériques, pas sur les partitions) : https://pastebin.com/HcBp7gUH

UPD2 :

# dd if=/dev/zero of=/tmp/testfile bs=1M count=1024 oflag=direct
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 14.389 s, 74.6 MB/s

UPD3 :

Je viens de courir fstrim sur la partition / et j'ai obtenu un peu de En effet, la vitesse d'écriture reste trop faible : 227 Mo/s, 162 Mo/s, 112 Mo/s, 341 Mo/s, 202 Mo/s lors de cinq tests consécutifs.

1 votes

Bonjour, pouvez-vous s'il vous plaît exécuter iostat -x 1 pendant que vous exécutez le dd un test de référence ? Nous serons en mesure de voir où se trouve le goulot d'étranglement.

0 votes

Pouvez-vous afficher le hdparm d'un des disques durs ? Inclure la sortie de cat /sys/block/md2/queue/scheduler Ajouter for x in {a..h}; do smartctl -a /dev/sd${x}3 ; done

0 votes

@mircea-vutcovici merci pour votre réponse ! J'ai mis à jour mon post

13voto

shodanshok Points 42743

Les faibles performances mesurées sont le résultat de différents facteurs :

  • Après la création, la matrice est entièrement synchronisée, ce qui entraîne l'allocation de la plupart (sinon de toutes) les pages de données flash sur la moitié des SSD. Cela mettra les SSD dans un état de faible performance jusqu'à ce qu'un effacement sécurisé / trim "libère" toutes/la plupart/quelques pages. Ceci explique l'augmentation des performances après un fstrim ;
  • la taille des morceaux (par défaut) de 512 Ko est trop importante pour des performances maximales en matière de séquentiel/streaming (comme l'a montré l'évaluation avec dd ). Avec une matrice de tous les SSD, je choisirais une taille de chunk de 64 Ko et, probablement (mais cela doit être confirmé par un test réel), avec une disposition "far". Veuillez noter que la diminution de la taille des morceaux, bien que bénéfique pour les accès en continu, peut pénaliser les lectures/écritures aléatoires. C'est principalement un problème avec les disques durs, mais même les disques SSD peuvent être quelque peu affectés ;
  • par défaut, le noyau linux émet au maximum des E/S de 512 Ko. Cela signifie que, même en demandant à dd pour utiliser des blocs de 1 Go (comme dans votre première commande), ceux-ci seront divisés en une myriade de requêtes de 512 Ko. Couplé à votre bloc de 512 Ko, cela engagera une un seul SSD par demande d'écriture En fait, les performances d'écriture en continu sont limitées au niveau d'un seul disque dur, ce qui empêche toute augmentation potentielle de la vitesse grâce au RAID. Bien que vous puissiez utiliser le max_sectors_kb tunable (trouvé dans /sys/block/sdX/queue/max_sectors_kb ), les valeurs supérieures à 512 Ko peuvent (dans certaines versions de la configuration/du noyau) être ignorées ;
  • enfin, bien qu'intéressant et un premier arrêt obligatoire, dd est un mauvais benchmark : il ne teste les performances du streaming qu'à une profondeur de file d'attente faible (1). Même avec la configuration actuelle de votre tableau, un test plus complet comme fio montrerait une augmentation significative des performances par rapport à un scénario à un seul disque, au moins pour les entrées/sorties aléatoires.

Que pouvez-vous faire pour corriger la situation actuelle ? Tout d'abord, vous doit accepter d'effacer les disques/la matrice ; évidemment, vous besoin de de prendre des sauvegardes comme première étape. Ensuite :

  • arrêter et supprimer le tableau ( mdadm -S /dev/md2 )
  • garniture todo blocs de données sur tout disque ( blkdiscard /dev/sdX3 )
  • recréer le tableau avec des morceaux de 64 Ko et avec l'attribut nettoyer drapeau ( mdadm --create /dev/md2 --level=10 --raid-devices=8 --chunk=64 --assume-clean /dev/sdX3 )
  • re-bench avec dd y fio ;
  • si tout semble bon, restaurez votre sauvegarde.

Une dernière remarque à propos de votre configuration SATA : la division du disque de cette manière devrait clairement être évitée pour obtenir des performances maximales. Cela dit, votre vitesse d'écriture est si faible que je ne blâmerais pas votre contrôleur SATA. Je recréerais vraiment la matrice selon les instructions ci-dessus avant d'acheter quelque chose de nouveau.

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