ZFS NVME Performance Tuning

Vengance

Renowned Member
May 21, 2016
271
12
83
34
Hallo,

In meinem Hetzner PX61-NVME sind zwei Samsung SM961-NVME 500GB SSDs verbaut.
Laut Hersteller sind diese mit einer Schreibleistung von 1,7GB/s angegeben.

Auf dem Server läuft Proxmox auf ZFS Basis.
Ich habe nun einige KVM VMs mit Debian 9 angelegt und anschließend etwas Performance Testing betrieben.

Hier ein Benchmark bei nur einer einzigen laufenden VM
Code:
dd if=/dev/zero of=test_$$ bs=64k count=16k conv=fdatasync && rm -f test_$$

I/O speed(1st run)   : 812 MB/s
I/O speed(2nd run)   : 951 MB/s
I/O speed(3rd run)   : 882 MB/s
Average I/O speed    : 881.7 MB/s


Schon dieser Benchmark ist weit unter der Angegebenen Schreibleistung von 1,7GB/s.
Doch bei mehreren laufenden VMs, welche jedoch alle im Idle sind und keine Schreiblast erzeugen, sinkt die IO Leistung enorm.
Code:
I/O speed(1st run)   : 289 MB/s
I/O speed(2nd run)   : 1.2 GB/s
I/O speed(3rd run)   : 624 MB/s
Average I/O speed    : 713.9 MB/s
Code:
I/O speed(1st run)   : 154 MB/s
I/O speed(2nd run)   : 1.0 GB/s
I/O speed(3rd run)   : 905 MB/s
Average I/O speed    : 694.3 MB/s

Nun zur eigentlichen Frage, könnte das an ZFS liegen, bzw kann ich hier noch irgendwas optimieren oder hat jemand eine Idee was die teilweise sehr niedrige IO Leistung erklären könnte?

Das System ist eigentlich recht Potent mit einem Xeon E3 1275v6 und 64GB DDR4 RAM.


Über Hinweise würde ich mich freuen!

Danke
 
Nun zur eigentlichen Frage, könnte das an ZFS liegen, bzw kann ich hier noch irgendwas optimieren oder hat jemand eine Idee was die teilweise sehr niedrige IO Leistung erklären könnte?

Das System ist eigentlich recht Potent mit einem Xeon E3 1275v6 und 64GB DDR4 RAM.


Über Hinweise würde ich mich freuen!

Danke

Hmm - Du hast aber Deinen pool schon mit einem ashift=12 eingerichtet? Sonst wirst Du wenig Freude mit ZFS auf den SSDs haben.
 
Bei SSDs habe ich bisher noch nie Single-IO-Thread Höchstleistungen gesehen - auch ist dd kein Test, war es nie und wird es nie sein - hier bitte immer fio benutzen und dort kannst du das viel feingranularer einstellen. Mal ganz davon abgsehen, dass du nullen auf das ZFS schreibst und damit eigentlich garnicht schreibst, denn 0en werden in ZFS nie geschrieben.

Zum Thema SSD Performance kann ich nur immer wieder auf die Geniale Seite von Sebastien Han veweisen:
http://www.sebastien-han.fr/blog/20...-if-your-ssd-is-suitable-as-a-journal-device/

Dort hast du viele Performancedaten und auch Befehle um dein Setup mit den anderen zu vergleichen, einfach den fio-Aufruf kopieren und absetzen. Damit weißt du dann auf jeden Fall gleich mehr.
 
Hi,

Danke für deine Antwort.
Ich habe den Erwähnten fio Befehl mal auf einer VM laufen lassen und folgendes Ergebnis bekommen, wie würdest du das Einschätzen?

Code:
root@c6:~# fio --filename=/dev/sda --direct=1 --sync=1 --rw=write --bs=4k --numjobs=20 --iodepth=1 --runtime=60 --time_based --group_reporting --name=journal-test
journal-test: (g=0): rw=write, bs=4K-4K/4K-4K/4K-4K, ioengine=psync, iodepth=1
...
fio-2.16
Starting 20 processes
Jobs: 20 (f=20): [W(20)] [100.0% done] [0KB/18084KB/0KB /s] [0/4521/0 iops] [eta 00m:00s]
journal-test: (groupid=0, jobs=20): err= 0: pid=5890: Sun Sep 23 11:48:18 2018
  write: io=1024.6MB, bw=17475KB/s, iops=4368, runt= 60007msec
   clat (msec): min=1, max=110, avg= 4.57, stdev= 2.17
    lat (msec): min=1, max=110, avg= 4.58, stdev= 2.17
   clat percentiles (usec):
    |  1.00th=[ 2864],  5.00th=[ 2992], 10.00th=[ 3056], 20.00th=[ 3184],
    | 30.00th=[ 3312], 40.00th=[ 3504], 50.00th=[ 3760], 60.00th=[ 4128],
    | 70.00th=[ 4640], 80.00th=[ 5216], 90.00th=[ 7712], 95.00th=[ 8640],
    | 99.00th=[12096], 99.50th=[13376], 99.90th=[18816], 99.95th=[21632],
    | 99.99th=[28032]
   lat (msec) : 2=0.04%, 4=57.13%, 10=39.57%, 20=3.17%, 50=0.08%
   lat (msec) : 100=0.01%, 250=0.01%
  cpu          : usr=0.10%, sys=0.47%, ctx=529708, majf=0, minf=221
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
    submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
    complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
    issued    : total=r=0/w=262158/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
    latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
  WRITE: io=1024.6MB, aggrb=17475KB/s, minb=17475KB/s, maxb=17475KB/s, mint=60007msec, maxt=60007msec

Disk stats (read/write):
  sda: ios=2/516891, merge=0/5405, ticks=0/1148504, in_queue=1148568, util=99.99%

Samsung gibt die SSD mit einer Schreibleistung von 1,7GB/s an, weißt du ungefähr mit welchen Parametern das getestet wurde?
 
Ich habe den Erwähnten fio Befehl mal auf einer VM laufen lassen und folgendes Ergebnis bekommen, wie würdest du das Einschätzen?

Also 4368 IOPS ist sehr, sehr wenig - aber hast es ja durch die VM gemacht. Leg dir bitte ein ZFS Volume mit volblocksize 4K an und probiere es auf dem Host darauf nochmal. Generell wäre wegen der Vergleichbarkeit auch wichtig das Kommando auf dem rohen Blockgerät auszuführen, aber das zerstört dir deine Daten, also Obacht.

Samsung gibt die SSD mit einer Schreibleistung von 1,7GB/s an, weißt du ungefähr mit welchen Parametern das getestet wurde?

Die meisten Tests sind mit 4K Blocksize, aber genaueres musst du bei Samsung anfragen :-D
 
Alles klar, dann teste ich es mal auf dem Host.
Aber ich kann mir nicht vorstellen, dass durch die VM der Performanceverlust so enorm ist, oder?
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!