Migration ESX -> PVE, extrem langsame VM-Performance

Mar 9, 2022
17
2
3
44
Guten Morgen Zusammen,
nach mehreren Wochen Recherche habe ich mich nun dazu entschlossen mein HomeLab (3x Intel NUC10i7, 64GB RAM, 1x 500GB M.2 NVME, 1x 2TB SSD, 10GBE-TB Adapter) von einer VMware vSphere 7 Installation (mit vSAN) auf eine Proxmox-Umgebung mit CEPH umzustellen.
Im Vorfeld habe ich diverse Tests durchgeführt, z.B. Proxmox nested auf vSphere sowie auf KVM. Alles soweit zufriedenstellend.
Nun habe ich gestern die vSphere-Umgebung gelöscht und Proxmox VE 7.1 aufgesetzt, Community-Subscriptions gekauft, Cluster erstellt, Ceph installiert und... bin enttäuscht, VMs laufen sowas von langsam!
Jetzt ist Problemsuche angesagt... Über Eure Hilfe würde ich mich sehr freuen!

So schaut meine Umgebung aus:
Die drei NUCs haben jeweils eine verbaute 1Gbe-NIC als auch je einen 10Gbe-Thunderbolt-Adapter von QNAP (Aqc107 Treiber).
An den 1Gbe NICs liegen zwei VLANs an, ein VMNetz und ein Management-Netz für die Hosts.
An den 10Gbe-NICs kommen insgesamt 4 VLANs an, Cluster-Backend, Ceph Public, Ceph-Backend und Backup-Netz für den Backup-Server (noch nicht aufgebaut)
Zum Setup:
Leider läuft Proxmox nicht vom USB-Stick, wie ESX, sonst hätte ich die 500GB M.2 als Cache definiert, daher habe ich Proxmox VE auf die 500GB M.2 NVME Disk installiert. (Samsung EVO 970 Plus)
Die 2TB SSD (Crucial MX500) wird ausschliesslich für Ceph verwendet.

Ich habe bereits einige VMs auf die neue Umgebung migriert, aber die Gastsystem laufen sowas von langsam, da benötige ich jetzt bitte Beistand.

Hier einige Tests:

root@pve10:~# pveperf
CPU BOGOMIPS: 38399.04
REGEX/SECOND: 4894859
HD SIZE: 95.95 GB (/dev/mapper/pve-root)
BUFFERED READS: 2831.62 MB/sec
AVERAGE SEEK TIME: 0.03 ms
FSYNCS/SECOND: 363.54
DNS EXT: 23.53 ms
DNS INT: 49.41 ms

Ceph Pool Benchmark:
root@pve10:~# rados -p VM-Pool bench 10 write --no-cleanup
hints = 1
Maintaining 16 concurrent writes of 4194304 bytes to objects of size 4194304 for up to 10 seconds or 0 objects
Object prefix: benchmark_data_pve10_600885
sec Cur ops started finished avg MB/s cur MB/s last lat(s) avg lat(s)
0 0 0 0 0 0 - 0
1 16 16 0 0 0 - 0
2 16 16 0 0 0 - 0
3 16 16 0 0 0 - 0
4 16 32 16 15.9949 16 3.1603 3.1601
5 16 32 16 12.7955 0 - 3.1601
6 16 32 16 10.6628 0 - 3.1601
7 16 48 32 18.2795 21.3333 3.2443 3.19978
8 16 48 32 15.9944 0 - 3.19978
9 16 48 32 14.2172 0 - 3.19978
10 16 64 48 19.193 21.3333 3.12835 3.17496
11 16 64 48 17.4485 0 - 3.17496
12 16 64 48 15.9947 0 - 3.17496
Total time run: 12.7556
Total writes made: 64
Write size: 4194304
Object size: 4194304
Bandwidth (MB/sec): 20.0695
Stddev Bandwidth: 8.94126
Max bandwidth (MB/sec): 21.3333
Min bandwidth (MB/sec): 0
Average IOPS: 5
Stddev IOPS: 2.12489
Max IOPS: 5
Min IOPS: 0
Average Latency(s): 3.1871
Stddev Latency(s): 0.0468339
Max latency(s): 3.2443
Min latency(s): 3.12116

Gast-VM:

root@pve12:~# qm config 100
agent: 1,fstrim_cloned_disks=1
boot: order=sata0;ide2
cores: 4
ide2: none,media=cdrom
memory: 8192
meta: creation-qemu=6.1.1,ctime=1647365134
name: ipa.peerone.tech
net0: virtio=12:8C:22:10:1E:70,bridge=vmbr1,firewall=1
numa: 0
ostype: l26
sata0: VM-Pool:vm-100-disk-1,size=50G
scsihw: virtio-scsi-pci
smbios1: uuid=69f2ffd4-972f-4f2b-a87a-a63a21b06e2e
sockets: 2
vmgenid: 34279125-f009-4809-afc0-2fdfc2421456

Herzlichen Dank für Eure Unterstützung

Thorsten
 
Verstehe ich das richtig, es handelt sich um einen 3 Node Ceph Cluster mit 10G Netzwerk und jeweils einer Consumer SSD als OSD?
Ceph wird erst mit mehr OSDs wirklich performant, und benötigt Datacenter SSDs für die Performance.

Wie sieht die Performance auf dem Local Storage, also auf der NVMe, aus?
 
  • Like
Reactions: KaiS
Hallo Thorsten,
in deinem Ceph Pool kommt keine Performance raus, ich habe festgestellt, ceph benötigt ein paar Disks um vernünftig skalieren zu können.
Eventuell sind die Einstellungen auch nicht optimal.

Bei der VM, bitte kein sata in der VM nutzen. Am besten immer virtio nutzen.
 
Verstehe ich das richtig, es handelt sich um einen 3 Node Ceph Cluster mit 10G Netzwerk und jeweils einer Consumer SSD als OSD?
Ceph wird erst mit mehr OSDs wirklich performant, und benötigt Datacenter SSDs für die Performance.

Wie sieht die Performance auf dem Local Storage, also auf der NVMe, aus?
Hallo Mira,
Danke für Deine Antwort. Also VM auf der M.2 installieren und betreiben, funktioniert wunderbar flott.
 
Hallo Thorsten,
in deinem Ceph Pool kommt keine Performance raus, ich habe festgestellt, ceph benötigt ein paar Disks um vernünftig skalieren zu können.
Eventuell sind die Einstellungen auch nicht optimal.

Bei der VM, bitte kein sata in der VM nutzen. Am besten immer virtio nutzen.
Hi SkyDiver,
erstmal Dankeschön. Kann ich optimale Einstellungen irgendwo nachlesen?
Ich habe eine VM von ESX nach PVE migriert. Wenn ich die Platte als VirtIO Gerät einhänge, bootet die VM nicht. Ist aber auch egal, ich hab schon eine Test-VM mit VirtIO Platte installiert, das macht von der Performance keinen Unterschied. Aber trotzdem Danke für diesen Tipp.
 
Wir empfehlen grundsätzlich (VirtIO) SCSI für die Disken. Dies benötigt natürlich Treiber, welche unter Linux bereits vorhanden sind, unter Windows jedoch nachinstalliert werden müssen [0].
Dazu empfiehlt es sich eine kleine (z.b. 1GB) Disk als SCSI hinzuzufügen zur VM und dann unter Windows im Gerätemanager den passenden Treiber installieren. Danach können dann alle anderen Disken ebenfalls auf SCSI geändert werden.


[0] https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers
 
  • Like
Reactions: ITT
Wir empfehlen grundsätzlich (VirtIO) SCSI für die Disken. Dies benötigt natürlich Treiber, welche unter Linux bereits vorhanden sind, unter Windows jedoch nachinstalliert werden müssen [0].
Dazu empfiehlt es sich eine kleine (z.b. 1GB) Disk als SCSI hinzuzufügen zur VM und dann unter Windows im Gerätemanager den passenden Treiber installieren. Danach können dann alle anderen Disken ebenfalls auf SCSI geändert werden.


[0] https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers
Dankeschön. 99% meiner VMs sind RHEL Gastsysteme...
 
Mit welcher MTU ist das 10G Netz konfiguriert? Sofern der Switch das kann, würde ich die mal auf das Maximum von 9000 setzen. Dadurch hast du ein deutlich besseres Verhältnis von Nutzdaten zu Protokoll Overhead.

Da bei Ceph für jedes Lesen und Schreiben das Netzwerk involviert ist, gilt es hier, die Latenz auch so niedrig wie möglich und die nutzbare Bandbreite so hoch wie möglich zu halten.

Wie gut die 10G NICs über thunderbolt weiß ich nicht, da ich damit keine Erfahrung hab.

Aber du kannst, nur um sicherzugehen, auch mal mit iperf (evtl noch mit apt install iperf installieren) testen, ob du da eh sehr gut an die 10Gbit dran kommst.
Auch wie die Latenz zwischen den Nodes ist, wäre interessant. Sollte im sub millisekunden Bereich sein.
 
Mit welcher MTU ist das 10G Netz konfiguriert? Sofern der Switch das kann, würde ich die mal auf das Maximum von 9000 setzen. Dadurch hast du ein deutlich besseres Verhältnis von Nutzdaten zu Protokoll Overhead.

Da bei Ceph für jedes Lesen und Schreiben das Netzwerk involviert ist, gilt es hier, die Latenz auch so niedrig wie möglich und die nutzbare Bandbreite so hoch wie möglich zu halten.

Wie gut die 10G NICs über thunderbolt weiß ich nicht, da ich damit keine Erfahrung hab.

Aber du kannst, nur um sicherzugehen, auch mal mit iperf (evtl noch mit apt install iperf installieren) testen, ob du da eh sehr gut an die 10Gbit dran kommst.
Auch wie die Latenz zwischen den Nodes ist, wäre interessant. Sollte im sub millisekunden Bereich sein.
Hi Aaron,

besten Dank, die MTU hab ich zwischenzeitlich auch angepasst, nachdem ich die Einstellung in der GUI gefunden hab ;-)
Dabei ist mir ein interessantes Verhalten aufgefallen, sobald ich alle Hosts durchstarte und den den Benchmark laufen lasse, schaut das so aus:
root@pve10:~# rados -p VM-Pool bench 10 write --no-cleanup
hints = 1
Maintaining 16 concurrent writes of 4194304 bytes to objects of size 4194304 for up to 10 seconds or 0 objects
Object prefix: benchmark_data_pve10_8496
sec Cur ops started finished avg MB/s cur MB/s last lat(s) avg lat(s)
0 0 0 0 0 0 - 0
1 16 16 0 0 0 - 0
2 16 16 0 0 0 - 0
3 16 16 0 0 0 - 0
4 16 33 17 16.9959 17 0.0536306 3.73721
5 16 129 113 90.3808 384 0.16535 0.695616
6 16 225 209 139.307 384 0.162931 0.452604
7 16 322 306 174.826 388 0.154138 0.361129
8 16 419 403 201.464 388 0.0537763 0.313149
9 16 531 515 228.85 448 0.155536 0.278487
10 16 627 611 244.361 384 0.159951 0.260152
Total time run: 10.0872
Total writes made: 627
Write size: 4194304
Object size: 4194304
Bandwidth (MB/sec): 248.632
Stddev Bandwidth: 203.252
Max bandwidth (MB/sec): 448
Min bandwidth (MB/sec): 0
Average IOPS: 62
Stddev IOPS: 50.8436
Max IOPS: 112
Min IOPS: 0
Average Latency(s): 0.257381
Stddev Latency(s): 0.601088
Max latency(s): 3.97155
Min latency(s): 0.0517709

Warte ich dann einige Minuten fällt die Performance ab:

root@pve10:~# rados -p VM-Pool bench 10 write --no-cleanup
hints = 1
Maintaining 16 concurrent writes of 4194304 bytes to objects of size 4194304 for up to 10 seconds or 0 objects
Object prefix: benchmark_data_pve10_23613
sec Cur ops started finished avg MB/s cur MB/s last lat(s) avg lat(s)
0 0 0 0 0 0 - 0
1 16 16 0 0 0 - 0
2 16 16 0 0 0 - 0
3 16 16 0 0 0 - 0
4 16 32 16 15.9959 16 3.2885 3.2856
5 16 32 16 12.7964 0 - 3.2856
6 16 48 32 21.3276 32 2.64293 2.89763
7 16 48 32 18.281 0 - 2.89763
8 16 48 32 15.9956 0 - 2.89763
9 16 64 48 21.3276 21.3333 2.77128 2.8997
10 16 64 48 19.1949 0 - 2.8997
11 16 64 48 17.45 0 - 2.8997
12 16 64 48 15.9961 0 - 2.8997
Total time run: 12.3404
Total writes made: 64
Write size: 4194304
Object size: 4194304
Bandwidth (MB/sec): 20.7448
Stddev Bandwidth: 11.0145
Max bandwidth (MB/sec): 32
Min bandwidth (MB/sec): 0
Average IOPS: 5
Stddev IOPS: 2.71221
Max IOPS: 8
Min IOPS: 0
Average Latency(s): 3.07962
Stddev Latency(s): 0.420006
Max latency(s): 3.63951
Min latency(s): 2.4886

Frage an die Experten, könnte ich PVE nicht auf einem USB-Drive installieren und die drei internen M.2 NVMe's als Ceph-Caches nutzen?
Ich hab an den Hosts je drei 6Swissbit 4GB-USB-Drives dran (verfügen über MLC Speicher)

Danke
 
Meiner Meinung nach musst du die SSD nicht tauschen. Ich habe in meinen Rechnern je 4 WD Green (langsamste Consumer SSDs) wovon je 3 im Ceph Pool sind.
Ich komme auf folgende Werte:
Code:
root@srv1:~# rados -p RBD-Pool bench 10 write --no-cleanup 
hints = 1
Maintaining 16 concurrent writes of 4194304 bytes to objects of size 4194304 for up to 10 seconds or 0 objects
Object prefix: benchmark_data_srv1_15463
  sec Cur ops   started  finished  avg MB/s  cur MB/s last lat(s)  avg lat(s)
    0       0         0         0         0         0           -           0
    1      16       134       118   471.968       472    0.129597    0.128719
    2      16       241       225   449.953       428   0.0759569    0.133518
    3      16       361       345   459.955       480    0.237009    0.138088
    4      16       476       460   459.956       460   0.0361857     0.13494
    5      16       575       559   447.159       396   0.0475853     0.13854
    6      16       637       621   413.962       248    0.332633    0.148824
    7      16       659       643   367.395        88   0.0307211     0.15519
    8      16       699       683   341.469       160   0.0914448    0.185285
    9      16       790       774   343.969       364    0.145175    0.182154
   10      16       915       899   359.568       500   0.0424413     0.17681
Total time run:         10.0411
Total writes made:      915
Write size:             4194304
Object size:            4194304
Bandwidth (MB/sec):     364.503
Stddev Bandwidth:       144.916
Max bandwidth (MB/sec): 500
Min bandwidth (MB/sec): 88
Average IOPS:           91
Stddev IOPS:            36.2291
Max IOPS:               125
Min IOPS:               22
Average Latency(s):     0.175377
Stddev Latency(s):      0.20939
Max latency(s):         2.12229
Min latency(s):         0.0216971

Wie sieht denn deine CPU Auslastung aus? Wenn ich viel CPU Last habe, wird der Pool auch etwas langsamer.
Ich habe letztens auf High performance Hardware getestet, da hatte ich je 4 Enterprise NVMe welche je 1Mio Iops können und hatte im Ceph Pool mur einige hunderttausend I/O lesend und 70k schreibend. Bei einem 7 knoten Cluster mit je 24 x 7.2k HDDs habe ich im schreiben über 100k.
Also wenn Ceph verteilen kann kommt immer mehr raus. Mit den NVME hatte ich auch ZFS Raid10 getestet und hatte da 2,4 Mio I/O schreibend. ;)

Ich möchte meinen ceph Pool nicht missen, aber für High End Performance muss man dann doch auf etwas anderes zurückgreifen.
 
Was mir gerade Auffällt, die min Latency geht bei dir auch hoch. Das kommt in der Regel nicht von der Disk, sondern eher von CPU oder Netzwerk.
Also CPU-seitig ist idle angesagt, selbst bei laufender VM auf dem Ceph-Store sind es 1 - 8 % CPU. Netzseitig kann ich keinerlei Fehler finden welche 3ms Latency hervorbringen könnten...
 
Ich hab glaube ich noch einen kleinen Fehler gefunden und behoben... In den VLAN-Settings gibt es nochmals eine Einstellung für die MTU. Ich hatte nur die MTU am Interface selbst auf 9000 geändert, nicht aber für die einzelnen VLAN-Adapter. Habs geändert.
 
Hab ich. gleich nach Änderung:

root@pve10:~# rados -p VM-Pool bench 10 write --no-cleanup
hints = 1
Maintaining 16 concurrent writes of 4194304 bytes to objects of size 4194304 for up to 10 seconds or 0 objects
Object prefix: benchmark_data_pve10_72948
sec Cur ops started finished avg MB/s cur MB/s last lat(s) avg lat(s)
0 0 0 0 0 0 - 0
1 16 16 0 0 0 - 0
2 16 16 0 0 0 - 0
3 16 16 0 0 0 - 0
4 16 96 80 79.9799 80 0.15582 0.776277
5 16 208 192 153.566 448 0.150849 0.413351
6 16 304 288 191.96 384 0.154528 0.329881
7 16 405 389 222.244 404 0.149574 0.283336
8 16 497 481 240.456 368 0.163391 0.261249
9 16 595 579 257.289 392 0.155479 0.244921
10 16 692 676 270.355 388 0.177817 0.232513
Total time run: 10.0115
Total writes made: 692
Write size: 4194304
Object size: 4194304
Bandwidth (MB/sec): 276.482
Stddev Bandwidth: 197.281
Max bandwidth (MB/sec): 448
Min bandwidth (MB/sec): 0
Average IOPS: 69
Stddev IOPS: 49.3203
Max IOPS: 112
Min IOPS: 0
Average Latency(s): 0.231349
Stddev Latency(s): 0.46919
Max latency(s): 3.27935
Min latency(s): 0.0227208

Bissl Abwarten:

root@pve10:~# rados -p VM-Pool bench 10 write --no-cleanup
hints = 1
Maintaining 16 concurrent writes of 4194304 bytes to objects of size 4194304 for up to 10 seconds or 0 objects
Object prefix: benchmark_data_pve10_87437
sec Cur ops started finished avg MB/s cur MB/s last lat(s) avg lat(s)
0 0 0 0 0 0 - 0
1 16 16 0 0 0 - 0
2 16 16 0 0 0 - 0
3 16 16 0 0 0 - 0
4 16 32 16 15.9943 16 3.18043 3.17827
5 16 32 16 12.7953 0 - 3.17827
6 16 32 16 10.6627 0 - 3.17827
7 16 48 32 18.2794 21.3333 3.27213 3.22529
8 16 48 32 15.9943 0 - 3.22529
9 16 48 32 14.2171 0 - 3.22529
10 16 64 48 19.1931 21.3333 3.17584 3.20787
11 16 64 48 17.4482 0 - 3.20787
12 16 64 48 15.9945 0 - 3.20787
Total time run: 12.9023
Total writes made: 64
Write size: 4194304
Object size: 4194304
Bandwidth (MB/sec): 19.8415
Stddev Bandwidth: 8.94126
Max bandwidth (MB/sec): 21.3333
Min bandwidth (MB/sec): 0
Average IOPS: 4
Stddev IOPS: 2.12489
Max IOPS: 5
Min IOPS: 0
Average Latency(s): 3.22513
Stddev Latency(s): 0.0504223
Max latency(s): 3.30216
Min latency(s): 3.14943

Ich kapiers ned :-/
 

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!