Benchmarks (nicht nur für ZFS)
Benchmarks sind etwas was man immer braucht, entweder um Probleme zu erkennen oder
die Leistungsfähigkeit zwischen Pools oder Plattformen zu beurteilen oder zu vergleichen.
Ein Benchmark sollte dabei nicht zu lange laufen (ca 2-30min) und nur wenige Basis Parameter haben, damit man ohne Informatikstudium etwas damit anfangen kann. Er sollte iops, sequential performance, sync write, concurrent read/write, single user vs 5 user und steady write (min 30min write) ermitteln können. Damit das auf jedem OS läuft, mache ich die Tests in Perl. Bei ultraschnellem Storage kann man dabei an Grenzen stossen, die werden als tool limited gekennzeichnet.
Das Tool ist in napp-it 4ai enthalten, läuft aber einfach auf jedem OS inkl. Windows, Linux, Unix
via
perl ./benchmark_worker.pl pool=tank profile=basic
mit profilen quick|basic|database|fileserver|mediaserver|mailserver|steadywrite|individual
download:
https://github.com/guenther-alka/cs-scripts/tree/main/benchmark
z.B Proxmox mit basic profil auf Pool nvme (single Optane)
perl /opt/csweb-gui/data/menues/_lib/scripts/bench/benchmark_worker.pl pool=nvme profile=basic
testfile: /nvme/csbench_auto_20261012_154528/bench_file.dat cap=2048MB
phase: create 4k test file (recordsize=4K)
phase: 4k random read (single stream)
phase: 4k random sync write (sync=always, recordsize=4K)
phase: create test file (recordsize=128K)
phase: sequential read (1MB, single stream, linear sweep)
phase: sync write (1MB blocks, sync=always)
phase: async write (1MB blocks, sync=standard) -- cache indicator
phase: concurrent read+write (5 readers + 5 writers)
phase: multiuser read (4k, 1 vs 5 streams)
Pool : nvme (dataset, nvme/csbench_auto_20261012_154528)
Profile : basic, 2048 MB test file, 5 streams, 143 s
File create
4k file : 1449.9 MB/s
Main file : 5423.6 MB/s
4k random read (1 stream)
IOPS : 79458
Throughput : 310.4 MB/s
Latency p50/p99 : 50 / 50 us
Class : partial
4k random sync write (1 stream)
IOPS : 16999
Throughput : 66.40 MB/s
Latency p50/p99 : 100 / 250 us
Class : storage-bound
Sequential read (1 stream)
Throughput : 2276.5 MB/s
Latency p99 : 2000 us
Class : storage-bound
Sync write (1 MB blocks)
Throughput : 1111.0 MB/s
IOPS : 1111
Latency p99 : 2.0 ms
Class : storage-bound
Async write (1 MB blocks, cache indicator)
Throughput : 1391.1 MB/s
IOPS : 1391
Class : cache-influenced
Concurrent read+write (5 readers + 5 writers)
Read : 375.6 MB/s (p99 100 us)
Write : 5.8 MB/s (p99 32.0 ms)
Class : storage-bound
Multiuser read (4k, 1 vs 5 streams)
1 stream : 310.4 MB/s
5 streams : 525.7 MB/s
5 streams : 134590 IOPS
Scaling : 1.69 x
Class : tool-limited
Verdict : partial
sync write 1111 MB/s p99 2.0 ms (storage-bound)
4k write 16999 IOPS p99 250 us (storage-bound)
4k read 79458 IOPS p99 50 us (partial)
seq read 2277 MB/s (storage-bound)
BENCH_DONE ok (142.721115112305s) log=/opt/csweb-gui/data/menues/_lib/scripts/bench/last_benchmark.log
root@pve:~#