Wie verbessere ich die Leistung meiner Serverfestplatte?

10

Ich habe einen HP Microserver mit Ubuntu 10.04 LTS. Es ist ein Server mit geringem Stromverbrauch und 5 internen Laufwerksschächten. Ich verwende es, um meine Remote-Server, VPSs und lokalen Laptops über das Netzwerk zu sichern. Ich möchte die beste Leistung von den Festplatten erzielen, weiß aber nicht, ob sie optimal eingerichtet sind, und suche daher nach Ratschlägen.

Mein Server führt rsnapshot mehrmals täglich aus, um Remote-Hosts zu sichern. Der eigentliche inkrementelle Sicherungsteil nimmt sehr wenig Zeit in Anspruch. Die bedeutende Zeit wird damit verbracht, Dinge zu tun wie:

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

Was ungefähr 2 Stunden dauert. Mir ist klar, dass dort eine Unmenge winziger Akten sind.

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

Auch wenn rsnapshot ein altes Backup löscht, kann dies lange dauern: -

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

Das dauert ungefähr eine halbe Stunde.

Meine Fragen lauten wie folgt: Die Konfiguration des Servers und einige E / A-Statistiken sind unten aufgeführt. Ich kann natürlich bei Bedarf weitere Debug-Informationen bereitstellen: -

Wie kann ich feststellen, wo die Engpässe liegen?

Erreiche ich mit dieser Box die Grenzen dessen, was (E / A) möglich ist?

Gibt es Leistungsverbesserungen, die ich vornehmen könnte?

Sollte ich einen anderen RAID-Level verwenden?

Wäre es sinnvoll, zwei der internen RAID-Festplatten (die Hälfte jedes Spiegels) gegen zwei "andere Hälften des anderen Spiegels" auf dem externen Array auszutauschen?

Hinweis: Ich bin nicht geneigt, Dinge wie das Kompilieren meines eigenen Kernels zu tun. Idealerweise würde ich gerne bei 10.04 LTS bleiben, es sei denn, in späteren Versionen steckt etwas Magie, die das alles viel schneller macht.

Intern verfügt der Server über 1x160 GB SATA-Bootdiskette und 4x2 TB Festplatten: -

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

Die vier internen 2-TB-Festplatten befinden sich in einem Software-MD-RAID10-Setup: -

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

Zusätzlich habe ich ein externes EDGE10-Laufwerksgehäuse, das über eine PCI-E-eSATA-Karte angeschlossen ist und vier weitere Laufwerke mit 500 GB enthält: -

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

Dies ist auch als MD RAID10-Array eingerichtet

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

md0 und md1 werden zu einem großen LVM kombiniert. Hinweis: Ich habe das externe Array erst kürzlich hinzugefügt, daher ist es ziemlich leer. Ich glaube, es befinden sich derzeit keine Blöcke darauf.

Dies wird als LVM-Band dargestellt: -

--- 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

Welches als EXT4 formatiert und als / srv gemountet ist: -

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

Es gibt viel freien Platz.

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

Weitere nützliche Informationen: -

$ 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)

Wenn ich den Befehl cp während rsnapshot ausführe, sehe ich in iostat Folgendes: -

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

Also im Grunde viele Schreibvorgänge, viele IO-Wartezeiten.

Im Moment ist die Box also inaktiv. Ich habe alle Jobs ausgesetzt.

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

Sieht pfirsichfarben aus!

$ 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
Papst
quelle
Hmm. Ich hasse es, Festplattenstrukturen auf verschiedene Hardware aufzuteilen, weil es so schwierig ist, solche Probleme zu beheben. Normalerweise würde ich vorschlagen, so etwas wie bonnie++auf jedem Array separat auszuführen, damit Sie grundlegende Geschwindigkeitsbenchmarks für sie haben. Ich habe nicht viel Erfahrung mit LVM, daher bin ich mir nicht sicher, ob eine Entkopplung jetzt möglich ist.
Oli
Das externe Array ist wirklich kein Problem. Es gibt keine Blöcke darauf. Es ist die interne Festplattenleistung, von der ich hoffe, dass sie Sound liefert.
Popey

Antworten:

3

Leider gilt der Stripe-Cache nur für RAID5 und 6 - für RAID 0/1/10 gibt es kein Äquivalent.

Die Leistung Ihrer einzelnen Laufwerke (gemäß hdparm) sieht gut aus - sie funktionieren alle wie erwartet für Laufwerke dieser Klasse.

Meine Vorschläge:

  1. Stellen Sie sicher, dass AHCI im BIOS aktiviert ist und dass die intern installierten Laufwerke nicht den Legacy-IDE-Modus verwenden. Für den MicroServer ist ein gehacktes BIOS verfügbar, das auch AHCI für den eSATA-Port aktiviert ( weitere Informationen finden Sie unter diesem Link ). Möglicherweise lohnt es sich, die Laufwerke im externen Gehäuse zu untersuchen, obwohl sie immer noch eingeschränkt sind, da sie sich hinter einem befinden Port-Multiplikator.
  2. Aktivieren Sie NCQ für alle Laufwerke und prüfen Sie, ob dies einen Unterschied macht (möglicherweise nicht).
  3. Stellen Sie sicher, dass die Dateisystemeinstellungen optimiert sind (Mounting Noatime, Nodiratime). Sie können auch Schreibbarrieren deaktivieren, dies ist jedoch möglicherweise zu riskant.
  4. Überprüfen Sie, ob der Wechsel des E / A-Schedulers Vorteile bringt (noop kann hier hilfreich sein).
  5. Passen Sie den Vorauslesepuffer sowohl für das md- als auch für das LVM-Gerät an: blockdev --setra <size> /dev/md1Beispiel (wobei <size>512-Byte-Sektoren vorhanden sind). Das hilft aber nur beim Lesen.

Zwei weitere Faktoren, die sich auf die Leistung auswirken können, sind die Parameter für die Partitionsausrichtung und die Erstellung von Dateisystemen (Schritt usw.). Da Sie jedoch moderne Tools verwenden, sollte dies kein Problem sein.

mjturner
quelle
Die Festplatten-HDPARM-Zeiten wurden hinzugefügt und fstab bearbeitet (und erneut bereitgestellt), um noatime und nodiratime zu verwenden. Werde es 24 Stunden so lassen.
Papst