GNU/Linux >> Linux Esercitazione >  >> Linux

Ottieni la velocità di collegamento di un adattatore di rete virtio-net

Virtio è un driver paravirtualizzato, il che significa che il sistema operativo e il driver sono consapevoli che non si tratta di un dispositivo fisico. Il driver è in realtà un'API tra il guest e l'hypervisor, quindi la sua velocità è totalmente disconnessa da qualsiasi dispositivo fisico o standard Ethernet.

Questa è una buona cosa in quanto è più veloce dell'hypervisor che finge di essere un dispositivo fisico e applica un concetto arbitrario di "velocità di collegamento" al flusso.

La VM scarica solo i frame su un bus ed è compito dell'host gestire i dispositivi fisici; non è necessario che la VM sappia o si preoccupi della velocità di collegamento dei dispositivi fisici host.

Uno dei vantaggi di ciò è che quando i pacchetti si spostano tra 2 VM sullo stesso host, possono inviare pacchetti alla stessa velocità con cui la CPU dell'host può spostarli da un set di memoria a un altro, l'impostazione di una "velocità di collegamento" qui mette solo in un limite di velocità non necessario.

Ciò consente inoltre all'host di eseguire il teaming dell'adattatore e distribuire il traffico su più collegamenti senza che ogni VM debba essere configurata in modo esplicito per ottenere l'intera larghezza di banda della configurazione.

Se vuoi sapere quanto velocemente puoi effettivamente trasferire i dati dalla tua VM a un'altra posizione, devi eseguire test di throughput effettivi con strumenti come iperf .


Per espandere un po' questo argomento perché anch'io ci sono entrato di recente ed ero anche semi-confuso dalla mancanza di dettagli sulla velocità durante l'esecuzione di ethtool su una VM:

$ ethtool eth0
Settings for eth0:
    Link detected: yes

Quando ho esaminato lshw uscita:

$ 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

Questo ci dice che il driver del dispositivo utilizzato per questa VM è virtualizzato, in questo caso si tratta di una VM in esecuzione su KVM e quindi la VM utilizza i driver virtio_* per tutte le sue interazioni con "l'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

Questi moduli del kernel sono disponibili per alcuni sistemi operativi (Linux, BSD e Windows). Con questi driver installati nella tua VM, il kernel nella tua VM ha un accesso speciale all'hardware sottostante tramite il kernel in esecuzione sul tuo hypervisor.

Ricorda che con gli hypervisor ci sono 2 tipi distinti. ESX/vsphere sono considerati di tipo 1. Promemoria sui tipi:

  • Hypervisor di tipo 1, nativi o bare metal
  • Hypervisor di tipo 2 o ospitati

KVM è più simile a un tipo 2, ma ha alcuni elementi, come virtio_*, che lo fanno comportare ed eseguire più come un tipo 1, esponendo alla virtualizzazione il kernel Linux sottostante dell'hypervisor in modo tale che le VM può avere accesso semi-diretto ad esso.

La velocità della mia scheda di rete?

Dato che stai girando su un hypervisor paravirtualizzato devi andare sull'hypervisor effettivo per scoprire la velocità teorica della tua NIC usando ethtool . Al posto di ciò, puoi scoprirlo solo facendo qualcosa come usare iperf per confrontare la NIC sotto carico e scoprire sperimentalmente quale sembra essere la velocità della NIC.

Ad esempio, qui ho 2 server in esecuzione su 2 diversi hypervisor. Usando iperf su entrambi i server:

$ sudo yum install iperf

Quindi eseguire un server come iperf server su host1 VM:

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

Quindi su un 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

Sull'output di host1 vedrai questo:

$ 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

Qui possiamo vedere che la scheda NIC è stata in grado di arrivare fino a 8,60 Gbit/sec.


Linux
  1. Script di shell per trovare lo stato e la velocità del collegamento dell'interfaccia di rete (CentOS/RHEL)

  2. Come controllare la velocità di connessione in Ubuntu

  3. Come ottenere una velocità di clock della CPU ARM in Linux?

  4. Ottieni la potenza del segnale della rete Wi-Fi connessa con nmcli

  5. Come posso verificare la velocità della mia NIC?

Come controllare la velocità di collegamento in Ubuntu 20.04

7 modi per controllare la velocità della rete in Linux con browser e cli

Come ottenere l'indirizzo IP del contenitore Docker

Elimina i problemi di connettività di rete in SSH con Mosh

Ottieni velocità di collegamento a livello di codice?

Connessione di Linux Mint alla rete Wi-Fi