In meinem ersten Artikel habe ich gezeigt die man die Disk-Performence mit iostat misst.

Es kann aber auch sein das die Performance Probleme mit der Datenstruktur, Memoryauslastung und Fragmentierung des ZBV Pools zutun hat.

Diese erweiterten Statistiken kann man mit zdb aus ZFS auslesen:

zdb -b
Zeigen Sie Statistiken zu Anzahl, Größe (logisch, physisch und zugeordnet) und Deduplizierung von Blöcken an.
Durchquere alle Blöcke, um die Prüfsummen zu überprüfen und zu überprüfen, ob nichts durchgesickert ist ...
zdb -b

Traversing all blocks to verify nothing leaked ...

loading concrete vdev 0, metaslab 173 of 174 ...
9.70T completed (6841MB/s) estimated time remaining: 0hr 00min 00sec
No leaks (block sum matches space maps exactly)

bp count: 86372140
ganged count: 0
bp logical: 8189332243968 avg: 94814
bp physical: 7767080585216 avg: 89925 compression: 1.05
bp allocated: 10663598383104 avg: 123461 compression: 0.77
bp deduped: 0 ref>1: 0 deduplication: 1.00
Normal class: 10663598383104 used: 89.18%

additional, non-pointer bps of type 0: 1972747
Dittoed blocks on same vdev: 1133304

space map refcount mismatch: expected 186 != actual 178

zdb -m
Bei zweimaliger Angabe werden auch Informationen zum Histogramm für den freien Speicherplatz auf der Festplatte angezeigt, das jedem Metaslab zugeordnet ist. Bei dreimaliger Angabe werden der maximale zusammenhängende freie Speicherplatz, das Histogramm für den internen freien Speicherplatz und der Prozentsatz des freien Speicherplatzes in jeder Speicherplatzzuordnung angezeigt. Wenn viermal angegeben, wird jeder Raumkartendatensatz angezeigt.

zdb -m tank
Metaslabs:
vdev 0
metaslabs 174 offset spacemap free
--------------- ------------------- --------------- ------------
metaslab 0 offset 0 spacemap 6640 free 3.13G
space map object 6640:
smp_length = 0x475d0
smp_alloc = 0xf376d8000
metaslab 1 offset 1000000000 spacemap 6656 free 600M
space map object 6656:
smp_length = 0xae08
smp_alloc = 0xfda7fe000
metaslab 2 offset 2000000000 spacemap 61 free 111M
space map object 61:
smp_length = 0x7c38
smp_alloc = 0xff915c000
metaslab 3 offset 3000000000 spacemap 6287 free 1.58G

space map object 6286:
smp_length = 0xea98
smp_alloc = 0xf6b6ee000
metaslab 173 offset ad000000000 spacemap 3184 free 862M
space map object 3184:
smp_length = 0x160d0
smp_alloc = 0xfca19e000

zdb -M
Zeigen Sie den Versatz, die Raumkarte und den freien Speicherplatz jedes Metaslabs an.

vdev 0 metaslabs 174 fragmentation 34%
13: 1545063 ****************************************
14: 892639 ************************
15: 626555 *****************
16: 579083 ***************
17: 954873 *************************
18: 392923 ***********
19: 434552 ************
20: 234617 *******
21: 27223 *
22: 8955 *
23: 3266 *
24: 1487 *
25: 470 *
26: 134 *
27: 32 *
28: 4 *
pool tank fragmentation 34%
13: 1545063 ****************************************
14: 892639 ************************
15: 626555 *****************
16: 579083 ***************
17: 954873 *************************
18: 392923 ***********
19: 434552 ************
20: 234617 *******
21: 27223 *
22: 8955 *
23: 3266 *
24: 1487 *
25: 470 *
26: 134 *
27: 32 *
28: 4 *
space map refcount mismatch: expected 186 != actual 178

Was ist aktuell nicht weiss ist, ob 34% Fragmentierung und die Zahlen bei den Metaslabs gut sind. Ich mache aber ein Update wenn ich mehr weiss.