Hallo zusammen,
bei einem neuen Server kämpfe ich seit einiger Zeit mit einem Problem und komme irgendwie nicht weiter.
Der Server hat folgende Daten:
- AMD EPYC 7402P 24c/48t CPU
- 256GB ECC RAM
- 2x Samsung EVO 970 1TB m.2 NVMe SSD (on board)
- 2x Samsung PM983 2,5" U.2 NVMe SSD
- 2x 1TB 2,5" SATA HDD
- Mainboard H12SSW-NT
Was ich mir für eine Konfiguration vorstelle (bin für bessere alternativen offen):
- Proxmox 6.1
- ZFS Raid 1 auf den Samsung EVOs für VM Storage und das OS selbst
- ZFS Raid 1 auf den Samsung PM983s für VM storage
- ZFS Raid 1 auf den HDDs für VMs ohne hohe IOs sowie als log storage damit die SSDs etwas weniger Schreibzyklen abbekommen
Was ich bisher gemacht habe:
- Proxmox wie oben beschrieben in mit Standardeinstellungen installiert (8k block size, ashift12, lz4 compression)
- Eine Test Windows Server 2019 VM (150GB SCSI, VirtIO NIC, 6 Cores, 4GB RAM) installiert
- Eine größere Testdatei auf diese VM (~6GB Datei) kopiert.
- Diese Testdatei innerhalb der VM kopiert.
Das Problem:
- Während die VM die Datei kopiert geht die CPU des Servers auf 100% auf allen 24 cores / 48 threads.
- Der RAM verbrauch auf dem Server steigt auf 130+GB mit nur dieser einen VM (vermutlich ZFS cache?).
- Geschwindigkeiten für diesen Kopiervorgang betragen ~300-600MB/s . Ich weiß, dass die EVOs keine enterprise SSDs sind. Dennoch sollten sie weitaus höhere Datenraten erreichen. Zumindest tun sie das, solange auf dem Server nur ein nacktes Windows läuft. Außerdem ist es kein “gleichmäßiger” Kopiervorgang: mal 600MB/s, dann 0, dann mal 350MB/s bis der Vorgang abgeschlossen ist.
- atop sagt ebenfalls 100% busy time auf den betroffenen SSDs.
- Während des Kopiervorgangs in der VM gibt es unzählige "zvol" Prozesse die das ganze Hostsystem mehr oder weniger lahmlegen.
Was ich bisher versucht hab:
- Die max. zvol Threads auf 8 zu limitieren. Werte wurden dadurch eher schlechter.
- Mit dem maximal erlaubten RAM für ZFS caching herumprobiert was aber auch nicht wirklich geholfen hat.
- Die block size des volumes auf 128k erhöht. Dies hat insoweit geholfen, dass die CPU im selben Szenario "nur" noch bei ca. 50% war und die Transferraten auf etwa 1GB/s gestiegen sind. Der Arbeitsspeicherverbrauch zwar wieder 100+GB, aber wenn die bei Bedarf wieder freigegeben werden und solange halt fürs caching benutzt werden ist das für mich OK. Jedoch ist die Auslastung meiner Meinung nach immer noch viel zu hoch, und die Transferraten zu gering. Habe aber dadurch meine Vermutung bestärkt bekommen, dass es sich um ein Konfigurationsproblem handelt.
- LVM anstelle von ZFS habe ich testweise auch ausprobiert. Dies funktioniert wie erwartet. Schnell, fast keine CPU Last, normaler RAM verbrauch.
Nichtsdestotrotz möchte ich gerne ein offiziell supportetes ZFS Raid 1 anstelle von einem LVM/mdraid.
Ich wäre euch sehr Dankbar wenn mir jemand ein paar Ideen hätte woran es liegen könnte und im mir im Idealfall helfen kann das Problem zu beheben damit der Server so performt wie er es eigentlich sollte.
Danke euch!
Grüße,
tsoo
bei einem neuen Server kämpfe ich seit einiger Zeit mit einem Problem und komme irgendwie nicht weiter.
Der Server hat folgende Daten:
- AMD EPYC 7402P 24c/48t CPU
- 256GB ECC RAM
- 2x Samsung EVO 970 1TB m.2 NVMe SSD (on board)
- 2x Samsung PM983 2,5" U.2 NVMe SSD
- 2x 1TB 2,5" SATA HDD
- Mainboard H12SSW-NT
Was ich mir für eine Konfiguration vorstelle (bin für bessere alternativen offen):
- Proxmox 6.1
- ZFS Raid 1 auf den Samsung EVOs für VM Storage und das OS selbst
- ZFS Raid 1 auf den Samsung PM983s für VM storage
- ZFS Raid 1 auf den HDDs für VMs ohne hohe IOs sowie als log storage damit die SSDs etwas weniger Schreibzyklen abbekommen
Was ich bisher gemacht habe:
- Proxmox wie oben beschrieben in mit Standardeinstellungen installiert (8k block size, ashift12, lz4 compression)
- Eine Test Windows Server 2019 VM (150GB SCSI, VirtIO NIC, 6 Cores, 4GB RAM) installiert
- Eine größere Testdatei auf diese VM (~6GB Datei) kopiert.
- Diese Testdatei innerhalb der VM kopiert.
Das Problem:
- Während die VM die Datei kopiert geht die CPU des Servers auf 100% auf allen 24 cores / 48 threads.
- Der RAM verbrauch auf dem Server steigt auf 130+GB mit nur dieser einen VM (vermutlich ZFS cache?).
- Geschwindigkeiten für diesen Kopiervorgang betragen ~300-600MB/s . Ich weiß, dass die EVOs keine enterprise SSDs sind. Dennoch sollten sie weitaus höhere Datenraten erreichen. Zumindest tun sie das, solange auf dem Server nur ein nacktes Windows läuft. Außerdem ist es kein “gleichmäßiger” Kopiervorgang: mal 600MB/s, dann 0, dann mal 350MB/s bis der Vorgang abgeschlossen ist.
- atop sagt ebenfalls 100% busy time auf den betroffenen SSDs.
- Während des Kopiervorgangs in der VM gibt es unzählige "zvol" Prozesse die das ganze Hostsystem mehr oder weniger lahmlegen.
Was ich bisher versucht hab:
- Die max. zvol Threads auf 8 zu limitieren. Werte wurden dadurch eher schlechter.
- Mit dem maximal erlaubten RAM für ZFS caching herumprobiert was aber auch nicht wirklich geholfen hat.
- Die block size des volumes auf 128k erhöht. Dies hat insoweit geholfen, dass die CPU im selben Szenario "nur" noch bei ca. 50% war und die Transferraten auf etwa 1GB/s gestiegen sind. Der Arbeitsspeicherverbrauch zwar wieder 100+GB, aber wenn die bei Bedarf wieder freigegeben werden und solange halt fürs caching benutzt werden ist das für mich OK. Jedoch ist die Auslastung meiner Meinung nach immer noch viel zu hoch, und die Transferraten zu gering. Habe aber dadurch meine Vermutung bestärkt bekommen, dass es sich um ein Konfigurationsproblem handelt.
- LVM anstelle von ZFS habe ich testweise auch ausprobiert. Dies funktioniert wie erwartet. Schnell, fast keine CPU Last, normaler RAM verbrauch.
Nichtsdestotrotz möchte ich gerne ein offiziell supportetes ZFS Raid 1 anstelle von einem LVM/mdraid.
Ich wäre euch sehr Dankbar wenn mir jemand ein paar Ideen hätte woran es liegen könnte und im mir im Idealfall helfen kann das Problem zu beheben damit der Server so performt wie er es eigentlich sollte.
Danke euch!
Grüße,
tsoo