Ich habe gerade ein Test-ZFS-Setup verglichen, um genau diese Frage in Bezug auf die Leistung zu beantworten (auf einem Paar alter staubiger Server, die aus ihrer Asche wiederbelebt wurden).
Mein Setup ist:
2x Intel Xeon L5640 CPU bei 2,27 GHz (insgesamt: 12 Kerne; HT deaktiviert)
96 GB DDR3-RAM bei 1333 MHz
Adaptec 5805Z-Controller, der alle Festplatten als JBODs exportiert (mit aktiviertem Schreibcache dank batteriegepuffertem NVRAM des Controllers)
12 x 15 kRPM 146 GB SAS-Festplatten (Seagate ST3146356SS)
DRBD-Replikation pro Platte (Protokoll C) über IP-over-Infiniband (20 Gbit / s Mellanox MT25204)
ZFS 0.7.6 unter Debian / Stretch
zpool create -o ashift = 12 ... / dev / drbd {...} (Hinweis: DRBD arbeitet mit einer Replikationsgröße von 4 KB)
zfs create -o recordsize = 128k -o atime = aus -o Komprimierung = aus -o Primärcache = Metadaten ... (die letzten beiden nur für Benchmarking-Zwecke)
Unterhalb der bonnie ++ - Ergebnisse für alle möglichen interessanten Kombinationen von RAIDz2 und RAIDz3 ( gemittelt über 5 Läufe von 12 synchronisierten bonnie ++ - Prozessen):
TEST: # data bandwidth
bonnie++ -p <threads>
for n in $(seq 1 <threads>); do
bonnie++ -r 256 -f -s 1024:1024k -n 0 -q -x 1 -y s &
done
# create/stat/delete operations
bonnie++ -p <threads>
for n in $(seq 1 <threads>); do
bonnie++ -r 256 -f -s 0 -n 128:0:0:16 -q -x 1 -y s &
done
CASE: 1*RAIDz2(10d+2p+0s), ashift:12(4k), recordsize:128k, threads:12, runs:5(data)/3(ops)
MiB/s: WR=278273, RW=150845, RD=487315
ops/s: SCr=132681, SDl=71022, RCr=133677, RDl=71723
CASE: 1*RAIDz3(9d+3p+0s), ashift:12(4k), recordsize:128k, threads:12, runs:5(data)/3(ops)
MiB/s: WR=276121, RW=158854, RD=480744
ops/s: SCr=132864, SDl=71848, RCr=127962, RDl=71616
CASE: 1*RAIDz2(9d+2p+1s), ashift:12(4k), recordsize:128k, threads:12, runs:5(data)/3(ops)
MiB/s: WR=260164, RW=151531, RD=541470
ops/s: SCr=137148, SDl=71804, RCr=137616, RDl=71360
CASE: 1*RAIDz3(8d+3p+1s), ashift:12(4k), recordsize:128k, threads:12, runs:5(data)/3(ops)
MiB/s: WR=269130, RW=184821, RD=672185
ops/s: SCr=134619, SDl=75716, RCr=127364, RDl=74545
CASE: 1*RAIDz2(8d+2p+2s), ashift:12(4k), recordsize:128k, threads:12, runs:5(data)/3(ops)
MiB/s: WR=255257, RW=135808, RD=509976
ops/s: SCr=136218, SDl=74684, RCr=130325, RDl=73915
CASE: 2*RAIDz2(4d+2p+0s), ashift:12(4k), recordsize:128k, threads:12, runs:5(data)/3(ops)
MiB/s: WR=379814, RW=225399, RD=586771
ops/s: SCr=120843, SDl=69416, RCr=122889, RDl=65736
DATA: WR = Sequential Write
RW = Sequential Rewrite
RD = Sequential Read
SCr = Sequential Create
SDl = Sequential Delete
RCr = Random Create
RDl = Random Delete
In Bezug auf Aufführungen:
Wie diese Ergebnisse zu interpretieren / zu erklären sind; meine 1-Pennies:
8 Datenfestplatten teilen die 128k-Datensatzgröße genau auf. Dies könnte erklären (?), Warum sie immer 9 oder 10 Datenfestplatten übertreffen (vorausgesetzt, der Test wird mit einer Blockgröße von 1024k ausgeführt, die genau auf allen Festplatten ausgerichtet ist).
Ich würde erwarten, dass RAIDz3 schlechter abschneidet als RAIDz2, aber der Fall 1 * RAIDz3 (8d + 3p + 1s) widerspricht dem sehr seltsam
Die deutlich kleinere VDEV-Größe des 2 * RAIDz2-Falls (4d + 2p + 0s) könnte erklären (?), warum die Leistung beim Schreiben erheblich besser ist
BEARBEITEN 1
Als Antwort auf den Kommentar von @AndrewHenle finden Sie unten zusätzliche Benchmarks mit unterschiedlichen "Chunk" -Größen. Leider erlaubt bonnie ++ keine anderen Blockgrößen als die Potenz von 2; Also kehrte ich zu ( 5 gemittelte Läufe ) von dd : PS zurück: Denken Sie daran, dass der ZFS-Lesecache (ARC) deaktiviert ist
TEST: # WR: Sequential Write
rm /zfs/.../dd.*
for n in $(seq 1 <threads>); do
dd if=/dev/zero of=/zfs/.../dd.${n} bs=<chunk> count=<count> &
done
# RD: Sequential Read
for n in $(seq 1 <threads>); do
dd of=/dev/null if=/zfs/.../dd.${n} bs=<chunk> count=<count> &
done
CASE: 1*RAIDz2(10d+2p+0s), ashift:12(4k), recordsize:128k, threads:12, runs:5
chunk: 1280k 1152k 1024k 128k 4k
count: 1024 (n/a) 1024 10240 327680(32768 for RD)
MiB/s: WR 418.64 (n/a) 434.56 404.44 361.76
RD 413.24 (n/a) 469.70 266.58 15.44
CASE: 1*RAIDz3(9d+3p+0s), ashift:12(4k), recordsize:128k, threads:12, runs:5
chunk: 1280k 1152k 1024k 128k 4k
count: 1024 1024 1024 10240 327680(32768 for RD)
MiB/s: WR 428.44 421.78 440.76 421.60 362.48
RD 425.76 394.48 486.64 264.74 16.50
CASE: 1*RAIDz3(9d+2p+1s), ashift:12(4k), recordsize:128k, threads:12, runs:5
chunk: 1280k 1152k 1024k 128k 4k
count: 1024 1024 1024 10240 327680(32768 for RD)
MiB/s: WR 422.56 431.82 462.14 437.90 399.94
RD 420.66 406.38 476.34 259.04 16.48
CASE: 1*RAIDz3(8d+3p+1s), ashift:12(4k), recordsize:128k, threads:12, runs:5
chunk: 1280k 1152k 1024k 128k 4k
count: 1024 (n/a) 1024 10240 327680(32768 for RD)
MiB/s: WR 470.42 (n/a) 508.96 476.34 426.08
RD 523.88 (n/a) 586.10 370.58 17.02
CASE: 1*RAIDz2(8d+2p+2s), ashift:12(4k), recordsize:128k, threads:12, runs:5
chunk: 1280k 1152k 1024k 128k 4k
count: 1024 (n/a) 1024 10240 327680(32768 for RD)
MiB/s: WR 411.42 (n/a) 450.54 425.38 378.38
RD 399.42 (n/a) 444.24 267.26 16.92
CASE: 2*RAIDz2(4d+2p+0s), ashift:12(4k), recordsize:128k, threads:12, runs:5
chunk: 1280k 1152k 1024k 128k 4k
count: 1024 (n/a) 1024 10240 327680(32768 for RD)
MiB/s: WR 603.64 (n/a) 643.96 604.02 564.64
RD 481.40 (n/a) 534.80 349.50 18.52
Was meine 1-Pennies betrifft:
ZFS optimiert Schreibvorgänge offensichtlich intelligent genug (auch für Blockgrößen unterhalb der Datensatzgröße), und / oder (?) Der Adaptec-Controller - Cache ( nichtflüchtig , 512 MB) hilft in dieser Hinsicht erheblich
Offensichtlich ist das Deaktivieren des ZFS-Lesecaches (ARC) für Blockgrößen nahe oder unterhalb der Datensatzgröße sehr nachteilig. und es scheint, dass der Adaptec-Controller-Cache (überraschenderweise?) nicht zum Lesen verwendet wird. Fazit: Das Deaktivieren von ARC für Benchmark-Zwecke ermöglicht Einblicke in "rohe, niedrige" Leistungen, ist jedoch für die Verwendung in der Produktion nicht ratsam (abgesehen von bestimmten Fällen wie einer selten verwendeten Bibliothek mit großen Dateien).
Das Anpassen der Blockgröße an die Größe der VDEVs scheint keine positive Rolle zu spielen [FALSCHE ANNAHME; siehe BEARBEITEN 2]
BEARBEITEN 2
Informationen zu RAIDz und Blockgröße (Ashift) und Datensatzgröße (ZFS-Dateisystem):
Und eine WARNUNG:
BOTTOM LINE
(Bestätigung dessen, was bereits in anderen Antworten gesagt wurde)
(Striping) kleinere VDEVs - mit weniger Datenfestplatten - bieten eine bessere Leistung als große; Das Berechnen / Überprüfen der Parität ist offensichtlich eine kostspielige Operation, die über die Menge der Datenplatten schlechter als linear wächst (vgl. 8d 2- 4d-Fälle).
VDEVs gleicher Größe mit mehr Paritätsdatenträgern bieten eine bessere Leistung als weniger Paritätsdatenträger und Hot-Spare- Datenträger und bieten einen besseren Datenschutz
Verwenden Sie Hot Spare (s), um die Bedenken "Wecken Sie mich nicht mitten in der Nacht auf" zu beheben, wenn Sie nach der Bevorzugung von Paritätsdatenträgern noch Festplatten haben [WARNUNG! siehe BEARBEITEN 2]
POST SCRIPTUM
Mein letztendlicher Anwendungsfall ist das Hosten einer (langfristigen) Zeitreihendatenbank (stetige mittelgroße Schreibvorgänge und möglicherweise sehr große sporadische Lesevorgänge), für die ich nur sehr wenig detaillierte Dokumentation zu den E / A-Mustern habe (abgesehen von einer "optimierten für") SSD "Empfehlung), ich persönlich werde mich für 1 * RAIDz2 (8d + 3p + 1s) entscheiden: maximale Sicherheit, etwas weniger Kapazität, (2.) beste Leistung