ZFS lieber mit PVE oder FreeNAS VM?

SyntaxError

Active Member
Nov 6, 2018
43
2
28
28
Germany
Hi Leute,

eine kleine Frage zu ZFS. Ich nutze ein Supermicro Board das in der Lage ist seinen internen SATA Controller durchreichen zu können mittels VTd. Die Frage ist, ob es besser ist eine FreeNAS VM aufzubauen die sich dann um das ZFS kümmert und dann über iSCASI an PVE weitergibt oder das Proxmox machen zu lassen.

Mein Clusterchen:

Node1: um den gehts
CPU: i7 6850K
RAM: 128GB
HDDS: 6x 1TB WD RED für ZFS (nur für VMs)
SSDs: 1TB Samsung XFS (nur für Proxmox)
(Für Workloads)

Node2: der ist egal aber nur zur Info
CPU: G4560
RAM: 32GB
SSD: 1 TBXFS (Proxmox und VMs)
(Für Infrastruktur und Monitoring sowie Firewall)

Ich habe 6 Festplatten für ein RAIDZ1 vorgesehen. Proxmox läuft selber über eine NVME SSD an einem anderen Controller was das durchreichen möglich machen sollte. Ich habe derzeit aus Einfachheit diese 6 HDDs in einem Proxmox ZFS am laufen. Die Perfomance lässt zu wünschen übrig, ich habe die Blocksize auf 128K angehoben was meine Schreibleistung verdoppelt hat. Eine Drive schafft um die 120MBs. Nun schafft das ganze RAID gerade mal 150MBs.... Klar die ersten Sekunden durch das ARC natürlich krass hohe Werte. Ach ja der ARC darf sich bis zu 20 GB RAM nehmen was er auch tut. L2ARC über ne SSD hab ich nicht geplant. Ich möchte lediglich von einer RAW Leistung von 6x120 MBs -> 720 MBs gerade einmal 300MBs abrufen das würde reichen, aber die 150 MBs sind ein Witz.

Wie würdet ihr das Anstellen. Proxmox hat auch nicht so coole Möglichkeiten das ZFS zu administrieren wie FreeNAS, mal geht was über die GUI mal eben nicht das ist doof. Ich bin so viel auf der CLI unterwegs das ich mal froh bin wenn etwas die GUI für mich abstrahiert.

FreeNAS vs Proxmox ZFS was meint ihr?

LG Syntax
 
Last edited:
Ich habe 6 Festplatten für ein RAIDZ1 vorgesehen.
Raidz1 ist echt nicht ideal wenn du darauf VMs laufen lassen willst. Gerade wenn du HDDs und keine SSDs nutzt, wo dann ja die IOPs schnell an die Grenzen kommen. Raidz1 liefert dir keine sonderlich erhöhte Schreibleistung oder IOPS. Mit einem Stripped Mirror (ala Raid10) hättest du da die mehrfache Performance was IOPS und Schreiben angeht. Außerdem müsstest du die Volblocksize bei Raidz ziemlich erhöhen. Dann läuft der Pool z.B. mit 64K Blockgröße statt den normalen 8K und das sorgt dann für ordentlich Write Amplification, wenn da deine VMs mit Dateisystem mit 4K Blockgröße versuchen auf ein zvol mit 64K Blockgröße zu schreiben. Erhöhst du die Volblocksize nicht, dann verlierst du rund 50% der Gesamtkapazität wegen Padding Overhead und hättest dann auch nicht mehr Kapazität als in einem normalen Mirrored Setup.

Wenn dir der Pool zu langsam ist solltest du echt überlegen es da statt mit raidz1 mal mit einem Stripped Mirror zu versuchen, auch wenn du dann nur 3 statt 5TB Kapazität hast.

Ich persönlich würde ja eher die VMs auf einer SSD laufen lassen und die HDDs dann mit dem Controller in eine FreeNAS-VM durchreichen und dann den VMs über SMB/NFS Platz auf den HDDs für das Speichern von Nutzerdaten geben. Dann hättest du das was schnell sein muss auf den schnellen SSDs und alles was lahm sein kann auf den langsamen HDDs. Dann wäre es auch egal, wenn die HDDS nur raidz1 wären für etwas mehr Kapazität, wenn die eh nicht mehr so schnell sein müssen.
 
Last edited:
Hi,

die Volblocksize läuft bereits auf 128K, der Umstieg von 8K hat die Schreibleistung verdoppelt. Aber erst mal vielen Dank für deinen Ratschlag. So wie es sich für mich anhört scheinst du auch nicht so viel vom Proxmox ZFS Management zu halten, wenn du dazu rätst es FreeNAS zu überlassen. Meine Sorge dabei nur Performance durch die Netzwerkschicht zu verlieren auch wenn Virtio. Was meinst du dazu?

Mein Gedanke war es die SSDs soweit möglich vom Schreiben rauszuhalten. Die Samsung SSD im zweiten Node hat nur mit 5 VMs an Board die eigentlich nur für die Infrastruktur da sind einschließlich opnsense hat bereits laut SMART 10 % runter. Wenn dann noch influxdb, SQL und haufenweiße Kubernetes Container dazu kommen fürchte ich schnell die SSD wegwerfen zu müssen. Wenn mir die SSDs egal wären könnte ich auch gleich L2ARC benutzen und hätte richtig Dampf richtig? Wie du raushörst ZFS Neuling ^^ Auf ZFS Ratschläge würde ich mich also sowieso freuen. Wie kann ich weiter die Performance erhöhen ohne SSDs? Mit den RAW 720 MBs Lesen/schreiben der HDDs wird sich doch was machen lassen mit nur einem Paritätsbit. Die CPU ist auch unbeeindruckt wenn ich Schreibtests mache. Oder brauche ich mehr HDDs oder einfach alle HDDs neu mit mehr Schreibleistung auf Lager?
 
Hi,

die Volblocksize läuft bereits auf 128K, der Umstieg von 8K hat die Schreibleistung verdoppelt.
Nein, eigentlich ist eine höhere Volblocksize etwas schlechtes. Die möchte man normal so klein wie möglich haben. Warum auch immer dir eine Erhöhung die Leistung verbessert... :D
Wenn etwas mit größerer Blocksize auf etwas mit kleiner Blocksize schreibt, dann ist das normal kein Problem. Beispiel:
MySQL will in 16K Blöcken auf eine ext4 Partition oder in den RAM schreiben. Kein Ding weil RAM und ext4 nutzen beide feste 4K Blocksize. Müssen also nur 4x 4K Blöcke geschrieben werden und es gibt keinen Overhead.
Dann müssen diese 4x 4K von der ext4 Partition Über den virtio SCSI controller auf die virtuelle HDD geschrieben werden. Der virtio SCSI nutzt aber 512B als Blocksize. Auch kein Dinge, dann werden die 4x 4K halt zu 32x 512B.
So und jetzt kommt es zum Problem. Der virtio SCSI mit 512B Blockgröße will auf deine Zvol schreiben und die hat dann 128K als Blockgröße. Weil die Blockgröße vom Zvol größer als die vom virtio SCSI ist kann nicht einfach in ganzen Blöcken geschrieben werden. Da muss dann erst 128K von dem Zvol in den RAM geladen werden. Dann werden da im RAM 32x 512B geschrieben und der 128K Block ist nur zu 1/8 gefüllt. Dann muss dieser veränderte 128K Block wieder vom RAM auf die Zvol geschrieben werden.
Du willst also nur 16K Schreiben und erzeugst damit 128K die erst gelesen und danach noch einmal 128K die geschrieben werden müssen.
Die 16K verursachen also 256K Lese-/Schreiblast. Wäre deine Volblocksize kleiner als die 16K wären das nur 16K Schreiblast. Wird also unnötig 16x so viel getan.
Aber erst mal vielen Dank für deinen Ratschlag. So wie es sich für mich anhört scheinst du auch nicht so viel vom Proxmox ZFS Management zu halten, wenn du dazu rätst es FreeNAS zu überlassen. Meine Sorge dabei nur Performance durch die Netzwerkschicht zu verlieren auch wenn Virtio. Was meinst du dazu?
ZFS Management mache ich eigentlich nur über die CLI. Da tut sich dann ja nicht viel was Proxmox und FreeNAS angeht. FreeNAS ist aber 100x komfortabler wenn es darum geht Freigaben und Datasets zu verwalten. So richtig als NAS wäre mir Proxmox da zu umständlich. Und FreeNAS kann man als Hypervisor in die Tonne treten.
Ich hab mein FreeNAS als NAS und mein Proxmox als Hypervisor. Sollen sie halt beide am besten das machen, was sie am besten können.
Mein Gedanke war es die SSDs soweit möglich vom Schreiben rauszuhalten. Die Samsung SSD im zweiten Node hat nur mit 5 VMs an Board die eigentlich nur für die Infrastruktur da sind einschließlich opnsense hat bereits laut SMART 10 % runter. Wenn dann noch influxdb, SQL und haufenweiße Kubernetes Container dazu kommen fürchte ich schnell die SSD wegwerfen zu müssen.
Ja, meine SSDs schreiben hier auch bald 1TB Daten am Tag obwohl eigentlich überhaupt nichts schreibintensives läuft. Ich meine ich lade da nichts runter oder kopiere auch nichts auf den Server. Die 1TB am Tag sind alles nur Daten wie Logs, Metrics etc die der Server selbst aus dem nichts erzeugt. Ist halt immer so das Problem mit der Write Amplification.
HDDs waren bei mir aber auch keine Lösung. Die waren einfach immer ausgelastet und haben alles gebremst, weil sie wegen den vielen IOPS nicht mehr hinterhergekommen sind. Hab mir dann gebrauchte Enterprise SSDs zugelegt und die sollten jetzt ein paar Jahre halten. Die 1.2 TB SSDs bei mir im Server sollten 24300 TB aushalten. Die bekommt man dann selbst mit 1 TB pro Tag nicht so schnell tot.
Wenn mir die SSDs egal wären könnte ich auch gleich L2ARC benutzen und hätte richtig Dampf richtig? Wie du raushörst ZFS Neuling ^^
L2ARC nutzt man eigentlich nicht, außer es passen nicht mehr RAM-Riegel in den Rechner^^
Auf ZFS Ratschläge würde ich mich also sowieso freuen. Wie kann ich weiter die Performance erhöhen ohne SSDs? Mit den RAW 720 MBs Lesen/schreiben der HDDs wird sich doch was machen lassen mit nur einem Paritätsbit. Die CPU ist auch unbeeindruckt wenn ich Schreibtests mache. Oder brauche ich mehr HDDs oder einfach alle HDDs neu mit mehr Schreibleistung auf Lager?
Wie gesagt, Raidz ist nichts wenn man Leistung möchte. Das opfert Performance für eine bessere Kapazitätsausbeute. Willst du die dreifache Performance nimm ein Stripped Mirror anstatt raidz1.
 
Vor der ganzen ZFS Geschichte hatte ich mdadm mit Raid 5 am Start, war flott unterwegs und davor einen Hardware Raid Controller, bis der eben gestorben ist (möge er in frieden ruhen) auch Raid 5 und auch flott unterwegs. Raidz1 ist doch das gleiche wie Raid 5 wie kann es sein, dass hier die Performance so grotten schlecht ist? Der Typ hier https://icesquare.com/wordpress/zfs-performance-mirror-vs-raidz-vs-raidz2-vs-raidz3-vs-striped/ zeigt das sein ZFS bei 8 Platten mit raidz1 mit knapp über 600 MBs abrockt. Ich bin mit knappen 200MBs mit 6 Platten unterwegs und wenns mal mehrere Minuten ins Schreiben geht können es auch kurz 80MBs sein. Da kann doch was nicht stimmen?

Ich würde gerne Kapazität und Performance in der Waage halten. Ich erwarte daher jetzt keine 800MBs oder super fette IOPS sondern lediglich normale ZFS Geschwindigkeiten wie sie andere auch erhalten. Das heißt so ganz möchte ich noch nicht das Raidz1 aufgeben, sondern am besten optimieren. Um Freigaben kümmern sich Applikationen innerhalb VMs, deinen Ratschlag nach zu urteilen gibt es also keinen Grund für mich für einen FreeNAS Workaround oder? Der würde ja nichts an der Performance verbessern?

Was ich anscheinend aber falsch gemacht habe ist also die volblocksize die absurd hoch bei mir steht. Um das zu fixen VM für VM woanderst hin schubsen und dann ZFS eine kleinere Volblocksize von 8K zurück unterjubeln und dann die Disks zurück schieben damit die 8K greifen. Wobei ob das die recordsize auch zurück auf 8K bringt ist halt fraglich :D die steht auch auf 128K
 
Volblocksize lässt sich nicht ohne weiteres ändern. Kann man zwar jederzeit in Proxmox beim Pool ändern, aber wird nur einmalig angewendet, wenn man neue Zvols erstellt. Will man bei alten virtuellen HDDs die Volblocksize ändern muss man die virtuellen HDDs zerstören und leere neue virtuelle HDDs erstellen.

Raidz1 mit 6 Laufwerken ist meine ich auch nicht so der Bringer. Eigentlich sagt man 3,5 oder 7 Laufwerke für Raidz1 und 4,6 oder 8 Laufwerke für Raidz2.

Die Benchmark-Werte da aus dem von dir verlinkten Test kommen sehe für mich aber auch nicht super plausibel aus. Mal als Beispiel:
8x HDDs als striped Pool: 705/687 MB/s schreiben/lesen
8x HDD als raidz1 Pool: 604/631 MB/s schreiben/lesen

Der Striped Pool sollte eigentlich wesentlich schneller sein als der Raidz1 Pool.
 
Last edited:
Jop das hab ich so gemacht. Jetzt mit 8K die Schreibleistung auf 92MBs seq o_O Ist das ZFS von Proxmox so verbuggt?
Hast du mal deine Write Amplification angeguckt? Kann durchaus sein, dass da die HDDs 400MB/s schreiben müssen, damit 92MB/s gespeichert werden. Ich habe hier eine Write Amplification von Faktor 20 bei raidz1. Für jeden 1 MB der in der VM geschreiben wird, werden da 20MB auf den Pool geschrieben. Wenn meine HDDs 600 MB/s schreiben könnten, dann würde da bei mir auch keine VM mehr als 30MB/s schaffen.

Wie misst du die 92MB/s denn? Hast du mal mit iostat geguckt, was da wirklich auf die einzenlen HDDs geschrieben wird?
 
Last edited:
Nein ich messe das innerhalb der VMs mit dd bzw. bei Windows VMs Crystal Disk Mark. Es ist ja wichtig was bei diesem ganzen Zauberspiel hinten raus an Performance kommt. Ich lasse für die Tests immer 20 gig schreiben damit ZFS nicht mit ARC schummelt. wie kann ich mir die Write Amplification ausgeben lassen? Die sollte ja auch n-1 liegen bei raid5 fällt quasie eine weg wegen der Parität die geschrieben werden muss anstatt nutz Daten. Die anderen Disks können ja fröhlich die Daten schreiben. Die CPU kanns nicht sein die ist wenn das ZFS raucht gerade einmal 5% über der Last die die VMs verursachen.
 
Nein ich messe das innerhalb der VMs mit dd bzw. bei Windows VMs Crystal Disk Mark. Es ist ja wichtig was bei diesem ganzen Zauberspiel hinten raus an Performance kommt. Ich lasse für die Tests immer 20 gig schreiben damit ZFS nicht mit ARC schummelt. wie kann ich mir die Write Amplification ausgeben lassen? Die sollte ja auch n-1 liegen bei raid5 fällt quasie eine weg wegen der Parität die geschrieben werden muss anstatt nutz Daten. Die anderen Disks können ja fröhlich die Daten schreiben. Die CPU kanns nicht sein die ist wenn das ZFS raucht gerade einmal 5% über der Last die die VMs verursachen.
Write Amplification bekommst du z.B. durch Overhead wie schlechtes Padding wenn du Blockgrößen mischt. Und wenn du Sync writes machst wird z.B. sowieso alles doppelt auf die HDDs geschrieben.

Musst du mal sysstat auf dem Proxmox host installieren (apt install sysstat) und dann iostat für 10 Minuten auf dem Host laufen lassen, während du da in der VM deine 20 Gig schreiben lässt: iostat 600 2. Dann siehst du, was da die HDDs wirklich zu tun haben.
Danach kannst du dann die IOPS und die Schreibrate ausrechnen die dein Pool wirklich hat. Also gucken aus welchen HDDs dein Pool besteht (z.B. sda bis sdf) und dann die TPS aufsummieren für die IOPS und die kB_wrtn/s aufsummieren für die echte Schreibrate der HDDs.
Wenn die tps bei je rund 200 liegen und die kB_wrtn/s je bei rund 100000-200000 dann sind deine HDDs einfach überlastet und am limit.
 
Last edited:
Und wie schauts aus?

Code:
iostat 600
Linux 5.4.98-1-pve (ich-pve1)   02/26/2021      _x86_64_        (12 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           3.71    0.00    1.40    0.50    0.00   94.39

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
nvme0n1           1.42       104.10        15.16   20671587    3010195
dm-0              0.00         0.03         0.00       5312          0
dm-1              0.63         1.56        15.51     309119    3079698
dm-2              0.00         0.00         0.00        160          4
sde              13.41        95.92       277.20   19048488   55047764
sdf              13.02        94.92       272.05   18850176   54024760
sdd              12.85        94.91       272.22   18847108   54058220
sdc              13.33        95.91       277.18   19046784   55042984
sda              13.34        95.90       277.22   19043372   55050576
sdb              12.80        94.89       272.27   18844064   54069120
 
Und wie schauts aus?

Code:
iostat 600
Linux 5.4.98-1-pve (ich-pve1)   02/26/2021      _x86_64_        (12 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           3.71    0.00    1.40    0.50    0.00   94.39

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
nvme0n1           1.42       104.10        15.16   20671587    3010195
dm-0              0.00         0.03         0.00       5312          0
dm-1              0.63         1.56        15.51     309119    3079698
dm-2              0.00         0.00         0.00        160          4
sde              13.41        95.92       277.20   19048488   55047764
sdf              13.02        94.92       272.05   18850176   54024760
sdd              12.85        94.91       272.22   18847108   54058220
sdc              13.33        95.91       277.18   19046784   55042984
sda              13.34        95.90       277.22   19043372   55050576
sdb              12.80        94.89       272.27   18844064   54069120
iostat 600 zeigt dir nur den Schnitt an, was da seit reboot passiert ist. Interessanter wäre es, wenn du für 15 Minuten richtig Schreiblast erzeugst und dann parallel dazu iostat 600 2 laufen lässt. Nach 10 Minuten (daher die 600 für 600 sek) sollte der Befehl dann fertig sein und du bekommst nochmal so eine Liste, welche dann nur die letzten 10 Minuten zusammenfast. Wichtig ist also die 2 am Ende des Befehls, denn die besagt, dass da 2x gemessen werden soll, wobei nur die zweite Messung wirklich das ausgibt, was da im 600sek Interval passiert ist.
Und am besten dann noch gucken, wie schnell da deine VM im Schnitt während dessen schreibt. Dann kannst du dir die Write Amplification ausrechnen.

Sagen wir du schreibst 15 Minuten lang mit im Schnitt 100MB/s in einer Windows VM. Und parallel dazu lässt du auf dem Host iostat 600 2 laufen. Ist iostat dann nach 10 Min durch, dann bekomsmt du ja raus was da jede der 6 HDDs über 10 Minuten geschrieben hat.
Nehmen wir mal deine Liste oben als Beispiel. Sda bis sdf sind deine HDDs. kb_wrt wäre dann wieviele kb jede einzelne HDD in den letzten 10 Minuten geschrieben hat. Dazu dann erstmal alle 6 "kB_wrtn" Werte addieren. Wäre im Beispiel dann also grob 6x 54.000.000 kb = 324.000.000 kb = 324.000 MB. 324.000 MB dividiert durch 600 Sekunden wären 540 MB/s. Wenn deine VM mit 100 MB/s geschrieben hätte aber alle deine HDDs zusammen 540 MB/s, dann hättest du eine Write Amplification vom Gast zum Host von Faktor 5,4. Je höher die Write Amplification, desto geringer natürlich auch die Leistung.

So eine WD Red 1TB sollte für sequentielles Schreiben ca 114 MB/s hinbekommen und bei 4K random writes so ca 2,5 MB/s. Im Optimalfall würdest du dann bei 6 HDDs mit 15 bis 684 MB/s Schreiben können. Hättest du eine Write Amplification von Faktor 5,4, dann würden für jeden 1 MB in der VM jeweils 5,4 MB auf die HDDs geschrieben werden müssen. Folglich wären die HDDs dann schon am Limit, wenn du da in der VM mit nur einem 5,4-tel (also 2,77 bis 126,66 MB/s) schreiben würdest.

Sind das eigentlich 3,5" oder 2,5" WD Reds? Weil die 2,5" wären noch deutlich langsamer. Die machen nur im Schnitt 1,87 bis 83,6 MB/s. Da wärst du dann bei 11,22 bis 501,6 MB/s schon am theoretischen Limit.
 
Last edited:

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!