GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Rufen Sie die Verbindungsgeschwindigkeit eines virtio-net-Netzwerkadapters ab

Virtio ist ein paravirtualisierter Treiber, was bedeutet, dass das Betriebssystem und der Treiber wissen, dass es sich nicht um ein physisches Gerät handelt. Der Treiber ist wirklich eine API zwischen dem Gast und dem Hypervisor, sodass seine Geschwindigkeit vollständig von jedem physischen Gerät oder Ethernet-Standard getrennt ist.

Dies ist eine gute Sache, da dies schneller ist als der Hypervisor, der vorgibt, ein physisches Gerät zu sein, und ein willkürliches „Verbindungsgeschwindigkeits“-Konzept auf den Datenfluss anwendet.

Die VM wirft einfach Frames auf einen Bus und es ist die Aufgabe des Hosts, sich um die physischen Geräte zu kümmern; Die VM muss die Verbindungsgeschwindigkeit der physischen Geräte des Hosts nicht kennen oder sich darum kümmern.

Einer der Vorteile davon ist, dass Pakete, wenn sie zwischen zwei VMs auf demselben Host verschoben werden, Pakete so schnell senden können, wie die CPU des Hosts sie von einem Speichersatz zu einem anderen verschieben kann unnötige Geschwindigkeitsbegrenzung.

Dadurch kann der Host auch Adapter-Teaming durchführen und den Datenverkehr auf mehrere Links verteilen, ohne dass jede VM explizit konfiguriert werden muss, um die volle Bandbreite des Setups zu erhalten.

Wenn Sie wissen möchten, wie schnell Sie Daten tatsächlich von Ihrer VM an einen anderen Ort übertragen können, müssen Sie tatsächliche Durchsatztests mit Tools wie iperf durchführen .


Um das ein wenig zu erweitern, weil ich vor kurzem darauf gestoßen bin und auch halb verwirrt war durch das Fehlen von Geschwindigkeitsdetails beim Ausführen von ethtool auf einer VM:

$ ethtool eth0
Settings for eth0:
    Link detected: yes

Als ich in lshw schaute Ausgabe:

$ lshw -class network -short
H/W path            Device      Class          Description
==========================================================
/0/100/3                        network        Virtio network device
/0/100/3/0          eth0        network        Ethernet interface

Dies sagt uns, dass der für diese VM verwendete Gerätetreiber virtualisiert ist, in diesem Fall ist dies eine VM, die auf KVM läuft, und daher verwendet die VM die virtio_*-Treiber für alle ihre Interaktionen mit "Hardware".

$ lsmod | grep virt
virtio_rng             13019  0
virtio_balloon         13864  0
virtio_net             28096  0
virtio_console         28066  1
virtio_scsi            18453  2
virtio_pci             22913  0
virtio_ring            22746  6 virtio_net,virtio_pci,virtio_rng,virtio_balloon,virtio_console,virtio_scsi
virtio                 14959  6 virtio_net,virtio_pci,virtio_rng,virtio_balloon,virtio_console,virtio_scsi

Diese Kernel-Module sind für bestimmte Betriebssysteme (Linux, BSD und Windows) verfügbar. Wenn diese Treiber in Ihrer VM installiert sind, hat der Kernel in Ihrer VM besonderen Zugriff auf die zugrunde liegende Hardware durch den Kernel, der auf Ihrem Hypervisor ausgeführt wird.

Denken Sie daran, dass es bei Hypervisoren zwei verschiedene Typen gibt. ESX/vsphere gelten als Typ-1. Erinnerung an die Typen:

  • Typ-1, native oder Bare-Metal-Hypervisoren
  • Typ-2 oder gehostete Hypervisoren

KVM ähnelt eher einem Typ-2, verfügt jedoch über einige Elemente, wie z kann halbdirekten Zugriff darauf haben.

Die Geschwindigkeit meiner Netzwerkkarte?

Da Sie auf einem paravirtualisierten Hypervisor laufen, müssen Sie auf den eigentlichen Hypervisor gehen, um die theoretische Geschwindigkeit Ihrer NIC mit ethtool herauszufinden . Stattdessen kann man das nur herausfinden, indem man so etwas wie iperf verwendet um die Netzwerkkarte unter Last zu benchmarken und experimentell herauszufinden, wie schnell die Netzwerkkarte zu sein scheint.

Hier habe ich zum Beispiel 2 Server, die auf 2 verschiedenen Hypervisoren laufen. Mit iperf auf beiden Servern:

$ sudo yum install iperf

Dann einen Server als iperf ausführen Server auf host1 VM:

host1$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------ 

Dann auf einer Client-VM host2:

host2$ iperf -c 192.168.100.25
------------------------------------------------------------
Client connecting to 192.168.100.25, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.100.101 port 55854 connected with 192.168.100.25 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  10.0 GBytes  8.60 Gbits/sec

In der Ausgabe von host1 sehen Sie Folgendes:

$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 192.168.100.25 port 5001 connected with 192.168.100.101 port 55854
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  10.0 GBytes  8.60 Gbits/sec

Hier können wir sehen, dass die Netzwerkkarte bis zu 8,60 Gbit/s erreichen konnte.


Linux
  1. Shell-Skript zum Ermitteln des Verbindungsstatus und der Geschwindigkeit der Netzwerkschnittstelle (CentOS/RHEL)

  2. Verbindungsgeschwindigkeit programmgesteuert abrufen?

  3. Wie bekomme ich eine ARM-CPU-Taktrate unter Linux?

  4. Verbinden von Linux Mint mit dem WiFi-Netzwerk

  5. Holen Sie sich mit nmcli die Signalstärke des verbundenen Wi-Fi-Netzwerks

So überprüfen Sie die Verbindungsgeschwindigkeit in Ubuntu 20.04

7 Möglichkeiten, die Netzwerkgeschwindigkeit in Linux mit Browser und CLI zu überprüfen

So erhalten Sie die IP-Adresse des Docker-Containers

Befreien Sie sich von Netzwerkkonnektivitätsproblemen in SSH mit Mosh

So überprüfen Sie die Verbindungsgeschwindigkeit in Ubuntu

Wie überprüfe ich die Geschwindigkeit meiner Netzwerkkarte?