Proxmox - Truenas VM mit ZFS optimieren

bbott

Experte
Thread Starter
Mitglied seit
23.03.2015
Beiträge
497
Hallo,

ich bin gerade am optimieren von Proxmox. Beginnend bei TrueNAS

Zur Hardware:
  • Gigabyte MC12-LE0 (F18)
  • AMD Ryzen Pro 5650G
  • 2x 32GB DDR4 3200
  • Mellanox ConnectX-3 PCIe x4 (an 1x PCIe 3.0 - sollte für ca. 950Gbit/s reichen)
  • Proxmox OS auf USB 3.0
  • Samsung 970 EVO Plus (VMs)
  • 2x Kingston PCIe 4.0 SSD (für TrueNAS via PCIe-passthrough)
Quelllaufwerk:
  • PCIe 4.0 SSD WD SN850X (knapp 8GB/s)
  • USB 3.0 SSD (~450MB/s)

TrueNAS Scale 24.10:
  • sechs CPU Kerne
  • 4GB min - bis 16GB
  • 2x PCIe 4.0 SSD an 4x PCIe 3.0 (für TrueNAS via PCIe-passthrough)
    • ZFS Mirror
    • SMB Dataset
    • Verschlüsselt
  • PCI Device
    • All Funktion: Disabled
    • ROM-Bar: Disabled
    • LAN vmbr0 - VirtIO - MTU 9000 - Firewall: enable
Bisherige Erkenntnisse:
  1. Upload bei knapp 20MB/s
    1. zwei CPU Kerne
    2. 8GB RAM
  2. Nach folgenden Änderungen - Upload knapp 80MB/s
    1. RAM erhöht von ursprünglich 8 auf 16G -> keine Besserung
    2. CPU von zwei auf vier - obwohl die CPU last bei zwei Kernen kaum über 50% lag, bei vier lag diese bei etwa 70%?!
  3. Verdacht das AES nicht genutzt wird - nach Ursachen Behebung: gut 200MB/s
    1. AES-IN wurde in Host und VM erkannt
    2. vCPU Einstellung von amd x64-86 v2-AES256 auf Host geändert -> CPU last ist auf 7-14% gesunken bei ziemlich stabilen 200MB/s
  4. ZFS Performancetest mit
    1. Komprimierung: keine Einfluss
    2. Komprimierung plus Deduplizierung (SHA): kaum einen Unterscheid, nicht ganz so stabile 200MB/s
    3. Komprimierung plus Deduplizierung (VERIFY): Performance sank auf etwa 180MB/s
  5. LAN Performancetest mit iperf
    1. MTU 1500 (Standard) - 2,6x GBit/s (~325 MB/s)
    2. MTU 9000 (Proxmox, TrueNAS_VM und Cleint) - 3,1x GBit/s (~387,5 MB/s)
    3. MTU 1500 (Standard) - 2,6x GBit/s)

      1x PCIe 3.0 schafft bis zu 0,97GB/s ~8GBit/s, da müsste noch deutlich Luft nach oben sein. Das erklärt allerdings noch nicht die Limitierung auf rund 270MB/s. Ich hatte hier im Frum schon Leute gesehen welche etwa 6GBit/s erreicht haben.
  6. Weitere Optimierungen und vorgehen:
    • LAN - vmbr: Firewall - disabled
    • fixed RAM (8/16GB)
    • vCPU Einstellung amd x64-86 v3 statt Host testen
    • CPUs wieder auf vier (zwei) reduzieren
    • Temperatur liegt bei 43°C und max. 47 - ergo im grünen Bereich.
    • Bisher keine weiteren Ideen, mir fällt auch kein vernünftiger Grund ein was oder warum noch limitiert?
    • Was mir auffällt ist 140k IOs dies erscheint mir bei 160MB/s etwas viel?! Ich habe mal pausiert und die IOs sind laut Proxmox kaum gesunken?!
Ich freuen mich auf Ideen und hoffe die Bremsen zu identifizieren und zu lösen. Danke.
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Hellou!

ich kann dir bei deinem Problem nicht viel weiterhelfen, allerdings was ich Performancetechnisch immer bevorzuge ist Host bei der CPU - die "emulierten" CPUs bringen nur Vorteile wenn du im Cluster mit unterschiedlichen CPUs arbeitest. Was du dir denke ich auch sparen kannst, ist der Punkt "fixed RAM" - soweit ich weiss ist der, sobald du Device Passthrough aktivierst immer fest, also wird das Balloning so oder so deaktiviert.

Was du vll. mal noch testen könntest ist wie die Performance aussieht wenn du von einer anderen VM aus auf die TrueNAS VM zugreifst.
Und die Mellanox mal direkt an die TrueNAS VM durchreichen, damit du sicher gehen kannst das da durch die Virtualisierung kein Problem besteht.
 
# CPU "v3" statt "Host"? Warum? Was soll das bringen. "Host" ist die möglichst native Einstellung.
# welche "Kingston PCIe 4.0 SSD"? Sag bitte nicht NV2, NV3 oder Dram-less Kram. Btw, PCIe gen4 spielt da keine Rolle (schadet aber auch nicht), der 5650G kann nur v3.
# handoff von "DeDup". LZ4/ZSTD an und gut is. Dedup = ganz schnell Ram- und Performancekiller für zumindest annähernd keinen Effekt daheim.
 
lz4>zstd imho, been there, done that, hab ich wo gepostet halbwegs ausführlich, was ich getestet hab...

- zu wenig ram (würde 24gb fix machen)
- zu viel cpu / falsche, würde host machen und 2-3 cores
- "verschlüsselung" kein plan wie das genau funktioniert, würde mir das ansehen, kann natürlich der ultimative performancekiller sein

Allgemein wird hier ja zu Nas Direct on Proxmox geraten via nappit oder so... werd das selber aber auch so schnell nicht angehen, is mir too much...
Beitrag automatisch zusammengeführt:

Nachtrag:
Wenn du eh nur 1x Mirror willst, und dich mit TNS auch noch nicht so toll auskennst, würde ich mir vllt. echt das nappit vom Gea anschauen... vielleicht ist das für dich echt der einfachere Weg?
 
Zuletzt bearbeitet:
Allgemein wird hier ja zu Nas Direct on Proxmox geraten via nappit oder so... werd das selber aber auch so schnell nicht angehen, is mir too much...
Hatte einige NAS Systeme auf dem ESXi, bis ich bei napp-it gelandet bin. Ist echt super einfach und intuitiv. Ausserdem hilft da @gea immer weiter, wenn was nicht klar ist. Kannst es ja einfach mal installieren auf dem proxmox. Hatte es mit Openindiana aufgesetzt, als ich proxmox am evaluieren war. Bin jetzt aber wieder komplett auf ESXi.



Die erste Anleitung ist für ESXi, aber bis auf das importieren der ova ist das auf proxmox das selbe in Grün. Für Proxmox hatte ich es halt manuell auf Openindiana aufgesetzt. Dann kannst Du auch von Dir behaupten, mal mit einem echten UNIX was gemacht zu haben.
 
Vllt. sollte ich mich echt mal trauen...
Ja, Gea ist schon super, kann mich da nur anschließen, so hilfsbereit und freundlich immer, auch wenn die gleiche Frage das 10. Mal kommt, schon ein ziemliches Unikat (nicht nur vom Wissen, auch vom Umgang her) im Forum.

Die TNS Pools wird man ja wsl. einfach mounten können, oder? Also muss man in erster Linie die Freigaben neu machen, oder?
 
Bevor Du da einen pool mountest, würde ich es einfach mal testen mit virtuellen Platten. Dort drauf auch ruhig mal eine VM installieren. Die kannst Du danach auch wieder löschen. Aber dann siehst Du mal, wie das läuft. Ich mache solche Experimente immer paravirtuell, klappt super wenn man genug RAM und Storage hat. Mein paravirtuelles Proxmox hat 32 GB und 150 GB thin, damit kommt man schon recht weit, und kann darin auch noch ein- zwei VMs aufsetzen. Unglaublich wie gut das funktioniert.
Beitrag automatisch zusammengeführt:

Das sind meine Einstellungen der paravirtuellen Proxmox Installation:

Screenshot 2024-12-30 143411.jpg
 
Ich würde systematisch vorgehen, eventuell je mit Variation der globalen Settings z.B. RAM 8GB vs 24GB fest zugeordnet
Verschlüsselung: kostet immer Performance vor allem bei kleinen Daten, ganz extrem bei sync, da sollte man das unbedingt vermeiden.
Klassisches Dedup praktisch immer vermeiden. Das neue Fast Dedup ist viel besser, aber das auch nur nutzen wenn man einiges an Dupletten erwartet.

1. lokale Pool Performance (lokaler Benchmark, dd, time mit großer Datei)
2. Netz Performance (iperf)

3. wenn beides "wie zu erwarten", dann über SMB testen wieviel davon noch ankommt.
SMB mit SAMBA over ip ist bis ca 500 MB/s ok, bis ca 1500 MB/s wirds schon schwieriger mit hoher CPU Last und Latenz

Schneller sind kernel SMB z.B. Solaris/Illumos oder ksmbd direkt unter Proxmox, vor allem mit geringerer Latenz und CPU Last
(ksmbd scheint aktuell ein Problem mit ZFS Freigaben zu haben), damit geht etwas mehr als mit SAMBA bei geringerer Last

Am schnellsten over ip ist natürlich SMB und -NFS direkt unter Proxmox. Die 8-24GB der Storage VM (Full Debian ontop Full Debian) kann man dann direkt für Proxmox/ZFS verwenden. Auch fällt die nic Virtualisierung weg.

Richtig schnell geht SMB mit SMB Direct/Rdma. Da sind 3-10 GByte/s mit geringster CPU Last drin.
Das geht aber derzeit nur mit einem Windows Server und Windows 11 Clients richtig gut. Ksmbd soll rdma können, ich habe aber noch von keinem gehört der das hinbekommen hat.
 
Verschlüsselung: kostet immer Performance vor allem bei kleinen Daten, ganz extrem bei sync, da sollte man das unbedingt vermeiden.
Wie macht man das eigentlich am besten auf openZFS / TrueNAS?
Ich hätte jetzt gefühlt dazu tendiert nicht das Pool sondern nur ein Dataset verschlüsselt anzulegen...
 
Würde ich auch so machen und den Pool selber nicht verschlüsseln sondern nur datasets bei Bedarf.
Dann kann man noch unverschlüsselte datasets z.B. als VM Storage anlegen bei denen man sync möchte ohne dass die Performance unterirdisch schlecht wird.
 
Gibts die Verschlüsselung betreffend irgendwelche Optionen, die relevant sind?
 
Die Verschlüssellung auf default (aes-256-gcm) lassen.
Wichtiger ist es sich Gedanken um die Schlüsselverwaltung zu machen (Pompt, File, https, keysplit etc)
 
Das geht aber derzeit nur mit einem Windows Server und Windows 11 Clients richtig gut. Ksmbd soll rdma können, ich habe aber noch von keinem gehört der das hinbekommen hat.

KSMBD hatte ich probiert, das hatte bei Proxmox (8.3) überhaupt nicht geklapt weil beim Lesezugriff das "gastgebende" Mountingverzeichnis geliefert wurde, beim Schreiben aber das ZFS-Dateisystem.
Sprich, beim Schreiben wurden Dateien vom Client kommend zwar abgelegt, aber sofort "unsichtbar" weil selbst das Directory des Mountingverzeichnis zurückgeliefert wurde (also leer war).
 
Das Problem mit ksmbd habe ich mit 8.3 auch.
Bis das gefixt ist, zurück auf SAMBA.
 
Ich habe den Pool neu aufgesetzt und auf die Verschlüsselung verzichtet. Die Performance ist nicht besser geworden. Solange AES Beschleunigung läuft merkt man kaum einen Unterscheid. RAM hatte ich schon von 8GB auf 16GB erhöht ohne Verbesserung. Auf 24GB dürfe auch nicht wirklich etwas bringen. Da sonst die ersten 8GB schneller laufen würden und danach die Performance sinkt sobald der RAM voll ist.
Das Abschalten der Firewall hat keinen Unterschied ausgemacht. Vielleicht muss ich die VM noch mal Neustarten. Weil ich kann mir nicht vorstellen das es gar keinen Impact hat. :unsure:

Die SSDs sind Kingston Furys. Aber selbst die langsamsten SSDs sollten deutlich über 200MB/s schreiben schaffen (muss mir nochmal die Dauerleistungen anschauen). Beim Scrub schaffen die knapp 4GB/s, dass geht bei dem Pool echt schnell :LOL: Aber von einen Data Set zum anderen wer ich beim Verschlüsselten bei ~40MB/s, werde es nochmal unverschlüsselt probieren
 
... und wie ists ganz ohne Verschlüsselung?
Liest sich jetzt als hättest du den Datensatz verschlüsselt statt dem Pool?
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh