GNU/Linux >> Znalost Linux >  >> Linux

Získejte rychlost připojení síťového adaptéru virtio-net

Virtio je paravirtualizovaný ovladač, což znamená, že operační systém a ovladač si uvědomují, že se nejedná o fyzické zařízení. Ovladač je ve skutečnosti API mezi hostem a hypervizorem, takže jeho rychlost je zcela odpojena od jakéhokoli fyzického zařízení nebo standardu Ethernet.

To je dobrá věc, protože je to rychlejší než hypervizor, který předstírá, že je fyzickým zařízením a používá na tok libovolný koncept „rychlosti spojení“.

VM pouze ukládá rámce na sběrnici a je úkolem hostitele, aby se vypořádal s fyzickými zařízeními; není potřeba, aby VM věděl nebo se staral, jaká je rychlost připojení fyzických zařízení hostitelů.

Jednou z výhod toho je, že když se pakety pohybují mezi 2 VM na stejném hostiteli, mohou posílat pakety tak rychle, jak je CPU hostitele může přesunout z jedné sady paměti do druhé, nastavení „rychlosti linky“ zde pouze vloží nepotřebné omezení rychlosti.

To také umožňuje hostiteli vytvořit týmový adaptér a rozložit provoz na více linek, aniž by musel být každý virtuální počítač explicitně konfigurován, aby získal plnou šířku pásma nastavení.

Pokud chcete vědět, jak rychle můžete skutečně přenášet data z vašeho VM do jiného umístění, musíte provést skutečné testy propustnosti pomocí nástrojů jako iperf .


Abych to trochu rozvedl, protože jsem do toho nedávno přišel a byl jsem také částečně zmaten nedostatkem podrobností o rychlosti při spuštění ethtool na virtuálním počítači:

$ ethtool eth0
Settings for eth0:
    Link detected: yes

Když jsem se podíval do lshw výstup:

$ 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

To nám říká, že ovladač zařízení používaný pro tento virtuální počítač je virtualizovaný, v tomto případě se jedná o virtuální počítač běžící na KVM, takže virtuální počítač používá ovladače virtio_* pro všechny své interakce s "hardwarem".

$ 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

Tyto moduly jádra jsou dostupné pro určité operační systémy (Linux, BSD a Windows). S těmito ovladači nainstalovanými ve vašem VM má jádro ve vašem VM speciální přístup k základnímu hardwaru prostřednictvím jádra, které běží na vašem hypervisoru.

Pamatujte, že hypervizory existují 2 různé typy. ESX/vsphere jsou považovány za typ 1. Připomenutí typů:

  • Hypervizory typu 1, nativní nebo kovové hypervizory
  • Hypervizory typu 2 nebo hostované hypervizory

KVM je více podobný typu 2, ale má některé prvky, jako je virtio_*, díky kterým se chová a funguje více jako typ 1 tím, že vystavuje virtualizaci základní linuxové jádro hypervizoru takovým způsobem, že virtuální počítače může k němu mít polopřímý přístup.

Rychlost mého NIC?

Vzhledem k tomu, že používáte paravirtualizovaný hypervizor, musíte přejít na skutečný hypervizor a zjistit teoretickou rychlost vašeho NIC pomocí ethtool . Místo toho to lze zjistit pouze tím, že uděláte něco jako pomocí iperf porovnat NIC pod zatížením a experimentálně zjistit, jaká je rychlost NIC.

Například zde mám 2 servery, které běží na 2 různých hypervizorech. Pomocí iperf na obou serverech:

$ sudo yum install iperf

Poté spusťte jeden server jako iperf server na hostiteli 1 VM:

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

Poté na klientském virtuálním počítači 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

Na výstupu hostitele1 uvidíte toto:

$ 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

Zde můžeme vidět, že NIC dokázalo dosáhnout rychlosti až 8,60 Gbit/s.


Linux
  1. Začněte s NetworkManagerem v systému Linux

  2. Získejte náš linuxový síťový cheat sheet

  3. Jak diagnostikovat vadný (integrovaný) síťový adaptér?

  1. Linux – Zakázat bezdrátový síťový adaptér v Arch?

  2. Pomalá rychlost na hotspotu vytvořeném z Ubuntu 16.04 s bezdrátovým síťovým adaptérem Rtl8723be?

  3. Síťový adaptér Ralink Rt2870?

  1. Shell Script pro zjištění stavu a rychlosti propojení síťového rozhraní (CentOS/RHEL)

  2. Jak získat rychlost hodin procesoru ARM v Linuxu?

  3. Jak ověřím rychlost mé NIC?