Datenverkehr zwischen VM und Array auf einem Host - so schnell wie möglich


MDN

Recommended Posts

hi,

ich habe eine Fragen zum dem Weg, den Datenverkehr von einer Windows VM zu einem SMB Share nimmt, die auf dem gleichen Host laufen.

 

Hier ist was ich vor habe:
- Ich erstelle ein SMB Share auf dem Array
- Ich erstelle eine Windows VM auf dem gleichen Host
- Ich mappe das SMB Share in der Windows VM als Netzwerklaufwerk

Die VM nutzt den gleichen Netzwerkadapter im gebrückten Modus und mit einer eigenen IP Adresse.

 

Wo geht jetzt der Traffic hin? Aus dem Netzwerkadapter raus, über den Switch zum gleichen Adapter zurück? Oder wird hier der Netzwerkadapter komplett übergangen?

 

Meine Idee mag auch falsch sein, deswegen hier noch, was ich damit bezwecke: Ich möchte gern zu schnell wie möglich auf mein Unraid Array zugreifen können, ohne 10G oder 25G Netzwerkadapter zu kaufen.
Außerdem möchte ich gern von 2 Geräten (Windows PC und Unraid Server) auf nur noch ein Gerät konsolidieren.

 

Vielen Dank für eure Hilfe!

Link to comment

 

Wenn die IP des unRaid Host auf der Bridge liegt und Du in der VM einen virtio Treiber nutzt, der auch auf der gleichen Bridge liegt und im gleichen IP-Netz liegt, dann sollte die mögliche Bandbreite maximal sein...in der Regel die der CPU.

 

Natürlich schluckt das ganze CPU-Leistung,,,ein bischen Bumms sollte die CPU also haben....und das System genug / reichlich RAM für beide "Hosts".

Die Netzwerk-Bandbreite kannst Du mit iperf testen. SMB ist single threaded und kostet weitere CPU-Ressourcen.

...das Share sollte auf dem Cache oder einem SSD-Pool, gebaut aus Pcie-NVMe liegen....sonst limitiert die Technologie der Disk, die unter dem share liegt.

 

...probieren geht über studieren ;-)...hast Du den unraid Host schon? -> mach einen Test, erstmal mit iperf.

  • Thanks 1
Link to comment

Danke @Ford Prefect! Diese Antwort ergibt Sinn.

Ich bin noch in der Planung des Servers. Aktuell haben ich eine Stromsparechner mit einer A10 CPU für Unraid. Der verbraucht nur 40W, inkl. 3 Docker Container, 2 SSD und 2 HDD - aber da lass ich keine VM drauf laufen. 

 

Ich werde jetzt mal Tests mit einem anderen Rechner machen und auch berichten.

Sehr gespannt bin ich auf multichannel SMB, was ja schon angekündigt wurde. 

Link to comment
18 minutes ago, MDN said:

Ich bin noch in der Planung des Servers. Aktuell haben ich eine Stromsparechner mit einer A10 CPU für Unraid. Der verbraucht nur 40W, inkl. 3 Docker Container, 2 SSD und 2 HDD - aber da lass ich keine VM drauf laufen. 

Ich werde jetzt mal Tests mit einem anderen Rechner machen und auch berichten.

Du kannst zum Test eine Linux Live-ISO nehmen, die schon virtuelle Treiber dabei hat....probiere Ubuntu oder Fedora...2GB RAM sollten erstmal reichen.

Auch eine A10 sollte dann schon ein paar 10Gbps schaffen.

Iperf3 für unraid findest Du im Nerd-Pack.

 

in der fedora-34 live ISO installierst Du iperf3 (via user root -> sudo -i) einfach mit "dnf install iperf3".

 

Auf meinem i3-8100 (8GB unraid und VM mit fedora live, virtio-net, 2GB) kommt dann das raus:

 

image.thumb.png.f18d3e4516ba1df631e71622a30ba50e.png

 

...übrigens braucht der nur 17W ;-)

 

18 minutes ago, MDN said:

Sehr gespannt bin ich auf multichannel SMB, was ja schon angekündigt wurde. 

Tja dann los... ;-)

 

 

Link to comment

Heute habe ich Ähnliches gemacht. Ubuntu Server in eine VM und dann Richtung Host iperf getestet.

Als Schnittstelle habe ich virtio-net und virtio getestet und bin dabei auf folgende Unterschiede gekommen:

grafik.png.8f84ed25fe0381705d5691b9f8fd1ecc.png

 

Also, mit der schwachen A10 CPU und ohne CPU Pinning kommen immer noch 7,56Gbits/s zustande. Das ist ein sehr erfreuliches Ergebnis. Deine Ergebnisse auf dem i3 bestätigen den guten Eindruck. Das sollte dann auf dem Core i7 Zielsystem - was ich erst noch kaufen muss - noch mal eine ganze Ecke besser sein.

 

Warum allerdings zwischen virtio-net und virtio so ein krasser Unterschied besteht konnte ich nicht herausfinden. Auf diesen Post hier gab es auch noch keine Antwort:

 

Link to comment
26 minutes ago, MDN said:

Heute habe ich Ähnliches gemacht. Ubuntu Server in eine VM und dann Richtung Host iperf getestet.

Als Schnittstelle habe ich virtio-net und virtio getestet und bin dabei auf folgende Unterschiede gekommen:

 

Also, mit der schwachen A10 CPU und ohne CPU Pinning kommen immer noch 7,56Gbits/s zustande. Das ist ein sehr erfreuliches Ergebnis. Deine Ergebnisse auf dem i3 bestätigen den guten Eindruck. Das sollte dann auf dem Core i7 Zielsystem - was ich erst noch kaufen muss - noch mal eine ganze Ecke besser sein.

 

Warum allerdings zwischen virtio-net und virtio so ein krasser Unterschied besteht konnte ich nicht herausfinden. Auf diesen Post hier gab es auch noch keine Antwort

 

...ganz ehrlich, da habe ich auch noch nicht drüber nachgedacht.

Im XML der VM steht auch "virtio" als Treiber für die NIC.

Allerdings - und deshalb schrieb ich oben virtio-net - sagt Fedora das hier:

image.thumb.png.3755ce1a6a58f500e6f2c8d003c3ece5.png

 

Ich nutzte aber br0 und nicht virbr0 auf Seiten unraid in der VM. Evtöl. ist auch da noch ein NAT verborgen.

Welche Host-IP hast Du auf Seiten unraid  beim iperf3 verwendet (siehe oben meinen Parameter -B <IP> beim server ).

Link to comment

Ich nutze auch "br0" und jetzt "virtio" (nicht "*-net") und bei mir wird der gleiche Treiber angezeigt:

grafik.png.b5fff2499f01b6b858d93caa28689075.png

 

Die beiden IP's (Host / VM) sind auch im gleichen /24 Subnetz, in dem auch der Rest meines Labs sind. Ein "-b" habe ich nicht gemacht, aber war auch nicht nötig. Beim Test wurden die richtigen IP Adressen angezeigt:

grafik.png.8b5556075ee00d0c92985547fde8a771.png

.11 ist der Unraid Server und .128 die VM.

 

Kannst du testweise in der VM bei Network Model "virtio-net" einstellen und noch mal testen?

 

Link to comment
32 minutes ago, MDN said:

Kannst du testweise in der VM bei Network Model "virtio-net" einstellen und noch mal testen?

 

...jupp ... in der VM wird immer noch "virtio_net" angezeigt...in unraid nun mit "virtio-net"...deutlich schlechter...bei mir ist aber virtio der Standard (bin noch auf unraid 6.8.3)

Gibt es einen Unterschied zwischen virtio und virtio-net und dem treiber in Linux der dann virtio_net (mit unter- statt Binde-Strich) heisst ???

 

image.thumb.png.d762ac0ace40ca3155a288c7a0724a9b.png

Link to comment

Ok, ich habe endlich den Unterschied herausgefunden:

 

Unraid Adaptername : virtio

QEMU Adaptername: virtio-net-pci

Treiber in VM: virtio_net

 

Unraid Adaptername : virtio-net

QEMU Adaptername virtio-net-pci

Treiber in VM: virtio_net

 

Unterschied nicht gesehen? Richtig, es gibt auch keinen. Beide sind die selben virtuellen Adapter, die mit den selben Treibern genutzt werden.

 

Der Unterschied liegt ganz woanders. QEMU erlaubt optional, dass der "virtio-net-pci" Adapter direkt über den Kernel des Host schreiben kann. Und genau diese Option namens "vhost=on" ist nur bei Unraids "virtio" aktiv, was man in den VM Logs sehen kann:

Quote

-netdev tap,fd=33,id=hostnet0,vhost=on,vhostfd=35 \
-device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:99:b8:93,bus=pci.0,addr=0x3 \

 

Und genau deswegen ist die Performance auch so viel besser. Es gibt dazu ein paar interessante Artikel:

https://insujang.github.io/2021-03-15/virtio-and-vhost-architecture-part-2/

https://www.redhat.com/en/blog/introduction-virtio-networking-and-vhost-net

 

Die Entwickler haben wohl festgestellt, dass ein paar VMs damit nicht klar kommen. Zumindest sprechen sie in der Hilfe von "stability", weshalb sie "virtio-net" als Standard voreingestellt haben, wo vhost deaktiviert ist. Wer möchte, darf das aber gerne ignorieren und "virtio" nutzen. Falls jemand eine Stellungnahme von Limetech dazu finde, welches OS hier eigentlich der Grund für diese Entscheidung war, darf sie gerne verlinken. Ich konnte jedenfalls nichts finden.

 

Da ich übrigens die Namen sehr verwirrend finde, habe ich einen Bug Report eröffnet:

 

  • Thanks 2
Link to comment
3 hours ago, mgutt said:

Unterschied nicht gesehen? Richtig, es gibt auch keinen. Beide sind die selben virtuellen Adapter, die mit den selben Treibern genutzt werden.

 

Der Unterschied liegt ganz woanders. QEMU erlaubt optional, dass der "virtio-net-pci" Adapter direkt über den Kernel des Host schreiben kann. Und genau diese Option namens "vhost=on" ist nur bei Unraids "virtio" aktiv, was man in den VM Logs sehen kann:

...Oh, Mann....OK, das erklärt, warum ich immer nur von virtio-net gesprochen habe, weil ich den Treiber in der VM angeschaut habe.

Hatte verdrängt, dass der auf Quemu-Seite Unterschiede hat.

Von unraid 4, bin ich auf KVM Hosts gewechselt und kannte es auch nie anders, als dass virtio (mit vhost=on) genutzt wird...daher habe ich es, als unraid v6 kam iund ich wieder dahin zurückgewechselt bin mmer so eigestellt...virtio...der Treiber in der VM war ja virtio-net und die Performance stimmte.

 

...und dann hab ich es einfach so gelassen und vergessen, warum es so ist ;-)

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.