Comment améliorer les performances de mon disque serveur

10

J'ai un HP Microserver exécutant Ubuntu 10.04 LTS. C'est un serveur basse consommation avec 5 baies de disques internes. Je l'utilise pour sauvegarder mes serveurs distants, VPS et ordinateurs portables locaux sur le réseau. Je veux obtenir les meilleures performances des disques, mais je ne sais pas si la configuration est optimale, alors je recherche des conseils.

Mon serveur exécute rsnapshot plusieurs fois par jour pour sauvegarder les hôtes distants. La partie de sauvegarde incrémentielle réelle prend très peu de temps. Le temps important est passé à faire des choses comme: -

/bin/cp -al /srv/rsnapshot/hourly.0 /srv/rsnapshot/hourly.1

Ce qui prend environ 2 heures. Je me rends compte qu'il y a un bazillion de minuscules fichiers là-dedans.

$ sudo du -hs hourly.1
659G    hourly.1

Lorsque rsnapshot supprime également une ancienne sauvegarde, cela peut prendre du temps: -

/bin/rm -rf /srv/rsnapshot/daily.6/

Ce qui prend environ une demi-heure.

Mes questions sont les suivantes, la configuration du serveur et certaines statistiques IO sont détaillées ci-dessous. Je peux bien sûr fournir plus d'informations de débogage si nécessaire: -

Comment identifier les goulots d’étranglement?

Est-ce que j'atteins les limites de ce qui est capable (IO) avec cette boîte?

Y a-t-il des améliorations à apporter en termes de performances?

Dois-je utiliser un niveau RAID différent?

Est-il judicieux d'échanger deux des disques RAID internes (la moitié de chaque miroir) avec deux "autres moitiés de l'autre miroir" sur la baie externe?

Note: Je ne suis pas du tout disposé à faire des choses comme compiler mon propre noyau. Idéalement, je voudrais rester sur 10.04 LTS, à moins qu'il y ait de la magie dans les versions ultérieures qui rend tout cela beaucoup plus rapide.

En interne, le serveur dispose de 1 disque de démarrage SATA de 160 Go et de disques de 4 x 2 To: -

Disk /dev/sde: 160.0 GB, 160041885696 bytes
Disk /dev/sdf: 2000.4 GB, 2000398934016 bytes
Disk /dev/sdh: 2000.4 GB, 2000398934016 bytes
Disk /dev/sdi: 2000.4 GB, 2000398934016 bytes
Disk /dev/sdg: 2000.4 GB, 2000398934016 bytes

Les quatre disques internes de 2 To sont dans une configuration logicielle MD RAID10: -

md0 : active raid10 sdg1[3] sdh1[0] sdi1[2] sdf1[1]
      3907023872 blocks 64K chunks 2 near-copies [4/4] [UUUU]

De plus, j'ai un boîtier de disque externe EDGE10 connecté via une carte PCI-E eSATA et contenant quatre disques supplémentaires de 500 Go: -

Disk /dev/sda: 500.1 GB, 500107862016 bytes
Disk /dev/sdb: 500.1 GB, 500107862016 bytes
Disk /dev/sdc: 500.1 GB, 500107862016 bytes
Disk /dev/sdd: 500.1 GB, 500107862016 bytes

Ceci est également configuré comme une matrice MD RAID10

md1 : active raid10 sdb1[1] sda1[0] sdd1[3] sdc1[2]
      976767872 blocks 64K chunks 2 near-copies [4/4] [UUUU]

md0 et md1 sont combinés pour former un gros LVM. Remarque: je n’ai ajouté que récemment le tableau externe, c’est donc plutôt vide, je ne pense pas qu’il y ait des blocs là-dessus pour le moment.

Ceci est présenté comme un volume LVM: -

--- Logical volume ---
LV Name                /dev/data/data
VG Name                data
LV UUID                amZCgU-sQLi-R363-dUFx-Bcdf-iwlt-ZNnDp8
LV Write Access        read/write
LV Status              available
# open                 1
LV Size                4.54 TiB
Current LE             1190134
Segments               2
Allocation             inherit
Read ahead sectors     auto
- currently set to     512
Block device           251:0

Qui est formaté en EXT4 et monté en tant que / srv: -

/dev/mapper/data-data on /srv type ext4 (rw)

Il y a beaucoup d'espace libre.

/dev/mapper/data-data
                      4.5T  2.2T  2.1T  51% /srv

Autres informations pouvant être utiles: -

$ uname -a
Linux ubuntuserver 2.6.32-32-server #62-Ubuntu SMP Wed Apr 20 22:07:43 UTC 2011 x86_64 GNU/Linux

.

00:11.0 SATA controller: ATI Technologies Inc SB700/SB800 SATA Controller [AHCI mode] (rev 40)
02:00.0 RAID bus controller: Silicon Image, Inc. SiI 3132 Serial ATA Raid II Controller (rev 01)

Lors de l'exécution de la commande cp pendant rsnapshot, je vois ce qui suit dans iostat: -

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.55    0.00    5.47   66.14    0.00   27.85

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdc               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdd               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sde               0.00     0.00    0.10    0.00     0.80     0.00     8.00     0.00    0.00   0.00   0.00
sdf               0.00   407.50    0.00   66.80     0.00  3790.40    56.74   124.86 1524.88  13.55  90.50
sdh               0.00   406.90    0.00   66.90     0.00  3790.40    56.66    92.89 1230.52  13.21  88.40
sdi               0.00   407.80    5.50   70.20    44.00  3824.00    51.10   113.83 1333.84  12.34  93.40
sdg               0.00   406.80    6.10   71.60    48.80  3827.20    49.88    64.32  787.68  11.69  90.80
md0               0.00     0.00   11.50 1484.60    92.00 11876.80     8.00     0.00    0.00   0.00   0.00
dm-0              0.00     0.00   11.50 1484.70    92.00 11877.60     8.00  5331.18  471.91   0.63  94.70
md1               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

Donc, fondamentalement, beaucoup d'écritures, beaucoup d'IO attendent.

Alors maintenant, la boîte est inactive, j'ai suspendu tous les travaux.

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdc               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdd               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sde               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdf               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdh               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdi               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdg               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
md0               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
md1               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

Regarde la pêche!

$ sudo hdparm -T -t /dev/sd[a-i]

/dev/sda:
 Timing cached reads:   2532 MB in  2.00 seconds = 1265.95 MB/sec
 Timing buffered disk reads:  270 MB in  3.02 seconds =  89.53 MB/sec

/dev/sdb:
 Timing cached reads:   2516 MB in  2.00 seconds = 1258.07 MB/sec
 Timing buffered disk reads:  264 MB in  3.02 seconds =  87.37 MB/sec

/dev/sdc:
 Timing cached reads:   2442 MB in  2.00 seconds = 1220.80 MB/sec
 Timing buffered disk reads:  272 MB in  3.00 seconds =  90.60 MB/sec

/dev/sdd:
 Timing cached reads:   2520 MB in  2.00 seconds = 1259.64 MB/sec
 Timing buffered disk reads:  272 MB in  3.02 seconds =  90.07 MB/sec

/dev/sde:
 Timing cached reads:   2524 MB in  2.00 seconds = 1261.48 MB/sec
 Timing buffered disk reads:  306 MB in  3.01 seconds = 101.56 MB/sec

/dev/sdf:
 Timing cached reads:   2366 MB in  2.00 seconds = 1183.28 MB/sec
 Timing buffered disk reads:  388 MB in  3.01 seconds = 128.88 MB/sec

/dev/sdg:
 Timing cached reads:   2536 MB in  2.00 seconds = 1267.52 MB/sec
 Timing buffered disk reads:  400 MB in  3.00 seconds = 133.12 MB/sec

/dev/sdh:
 Timing cached reads:   2538 MB in  2.00 seconds = 1269.08 MB/sec
 Timing buffered disk reads:  426 MB in  3.00 seconds = 141.90 MB/sec

/dev/sdi:
 Timing cached reads:   2538 MB in  2.00 seconds = 1268.57 MB/sec
 Timing buffered disk reads:  402 MB in  3.01 seconds = 133.69 MB/sec
    
posée popey 16.06.2011 - 12:38
la source

1 réponse

3

Malheureusement, le cache stripe ne s’applique qu’à RAID5 et 6 - il n’existe pas d’équivalent pour RAID 0/1/10.

Les performances de vos disques individuels (selon hdparm ) semblent correctes - ils fonctionnent tous comme prévu pour les disques de cette classe.

Mes suggestions:

  1. Vérifiez que AHCI est activé dans le BIOS et que les lecteurs installés en interne n’utilisent pas le mode IDE hérité. Il existe un BIOS piraté pour le MicroServer qui active également AHCI pour le port eSATA (voir ce lien pour plus d'informations) - il peut être utile d'étudier les disques dans le boîtier externe, même s'ils sont toujours limités par un multiplicateur de ports.
  2. Activer NCQ pour tous les lecteurs et voir si cela fait une différence (cela pourrait ne pas être le cas).
  3. Assurez-vous que les paramètres du système de fichiers sont optimisés (heure de montage, nodiratime). Vous pouvez également désactiver les barrières d’écriture , mais cela peut être trop risqué.
  4. Vérifiez si le basculement du programmateur d’E / S présente un avantage (noop peut vous aider ici).
  5. Ajustez le tampon de lecture anticipée pour les périphériques md et LVM: blockdev --setra <size> /dev/md1 par exemple (où <size> correspond à des secteurs de 512 octets). Cela aidera seulement à lire si.

Deux autres facteurs peuvent avoir un impact sur les performances: l’alignement des partitions et les paramètres de création du système de fichiers (stride, etc.), mais comme vous utilisez des outils modernes, cela ne devrait pas poser de problème.

    
réponse donnée mjturner 16.06.2011 - 15:09
la source

Lire d'autres questions sur les étiquettes