Hogyan működik a gyorsított hálózat Linux és FreeBSD VM-ekben?
Amikor virtuális gépet (VM-et) hoz létre az Azure-ban, a konfigurációban lévő összes virtuális hálózati adapterhez létrehoz egy szintetikus hálózati adaptert. A szintetikus interfész egy VMbus-eszköz, és a netvsc illesztőprogramot használja. A szintetikus interfészt használó hálózati csomagok az Azure-gazdagép virtuális kapcsolóján és az adatközpont fizikai hálózatán keresztül áramlanak.
Ha a virtuális gép gyorsított hálózatkezeléssel van konfigurálva, a rendszer minden konfigurált virtuális hálózati adapterhez létrehoz egy második hálózati adaptert. A második interfész egy SR-IOV virtuális függvény (VF), amelyet a fizikai hálózat hálózati adaptere kínál az Azure-gazdagépen. A VF-felület PCI-eszközként jelenik meg a Linux-vendégben. A Linuxban a Mellanox mlx4 vagy mlx5 illesztőprogramot használja, mivel az Azure-gazdagépek a Mellanox fizikai hálózati adaptereit használják.
A legtöbb hálózati csomag közvetlenül a Linux-vendég és a fizikai hálózati adapter között fut anélkül, hogy bejárja a virtuális kapcsolót vagy a gazdagépen futó egyéb szoftvereket. A hardverhez való közvetlen hozzáférés miatt a hálózati késés alacsonyabb és kevesebb processzoridőt használ a hálózati csomagok feldolgozásához, összehasonlítva a szintetikus adapterrel.
A különböző Azure-gazdagépek a Mellanox fizikai hálózati adapter különböző modelljeit használják. A Linux automatikusan meghatározza, hogy az mlx4 vagy az mlx5 illesztőprogramot használja-e. Az Azure-infrastruktúra szabályozza a virtuális gép elhelyezését az Azure-gazdagépen. A virtuális gépek központi telepítéséhez használt fizikai hálózati adapter megadására szolgáló ügyfélbeállítás nélkül a virtuális gépeknek mindkét illesztőprogramot tartalmazniuk kell. Ha egy virtuális gépet leállítottak vagy felszabadítanak, majd újraindítanak, előfordulhat, hogy újra üzembe helyezik a hardveren a Mellanox fizikai hálózati adapter másik modelljével. Ezért használhatja a másik Mellanox illesztőprogramot.
Ha egy virtuálisgép-rendszerkép nem tartalmaz illesztőprogramot a Mellanox fizikai hálózati adapterhez, a hálózati képességek továbbra is a virtuális hálózati adapter lassabb sebességével működnek. A portálon, az Azure CLI-ben és az Azure PowerShellben engedélyezve jelenik meg a gyorsított hálózatkezelés funkció.
A FreeBSD ugyanazt a támogatást nyújtja a gyorsított hálózatkezeléshez, mint a Linux, amikor az Azure-ban fut. A cikk további része a Linuxot ismerteti, és Linux-példákat használ, de ugyanez a funkció elérhető a FreeBSD-ben is.
Feljegyzés
Ebben a cikkben szerepel a slave (alárendelt) kifejezés, amelyet a Microsoft már nem használ. Ha ezt a kifejezést eltávolítjuk a szoftverből, eltávolítjuk a jelen cikkből.
Kötés
A szintetikus hálózati adapter és a VF-adapter automatikusan párosítva van, és egyetlen interfészként működik az alkalmazások által használt legtöbb szempontból. A netvsc sofőr végzi a kötést. A Linux-disztribúciótól függően az udev szabályok és szkriptek segíthetnek a VF-felület elnevezésében és a hálózat konfigurálásában.
Ha a virtuális gép több virtuális hálózati adapterrel van konfigurálva, az Azure-gazdagép egyedi sorozatszámot biztosít mindegyikhez. Lehetővé teszi a Linux számára, hogy az egyes virtuális hálózati adapterekhez megfelelő módon párosítsa a szintetikus és a VF-interfészeket.
A szintetikus és a VF-interfészek MAC-címe megegyezik. Ezek együttesen egyetlen hálózati adaptert alkotnak más hálózati entitások szempontjából, amelyek csomagokat cserélnek a virtuális gép virtuális hálózati adapterével. Más entitások nem hajtanak végre semmilyen különleges műveletet, mivel a szintetikus interfész és a VF interfész is létezik.
Mindkét felület látható a Linuxban a ifconfig
parancson keresztül ip addr
. Íme egy példakimenet ifconfig
:
U1804:~$ ifconfig
enP53091s1np0: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether 00:0d:3a:f5:76:bd txqueuelen 1000 (Ethernet)
RX packets 365849 bytes 413711297 (413.7 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9447684 bytes 2206536829 (2.2 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.1.19.4 netmask 255.255.255.0 broadcast 10.1.19.255
inet6 fe80::20d:3aff:fef5:76bd prefixlen 64 scopeid 0x20<link>
ether 00:0d:3a:f5:76:bd txqueuelen 1000 (Ethernet)
RX packets 8714212 bytes 4954919874 (4.9 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9103233 bytes 2183731687 (2.1 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
A szintetikus felületnek mindig van egy neve az űrlapon eth\<n\>
. A Linux-disztribúciótól függően előfordulhat, hogy a virtuális gép felületének neve szerepel az űrlapon eth\<n\>
. Vagy lehet, hogy más néven enP\<n\>
van, mert egy átnevezést nem okozó udev szabály.
Az interfész által használt eszközillesztőt megjelenítő rendszerhéj parancssorával meghatározhatja, hogy egy adott interfész a szintetikus vagy a VF-interfész-e:
$ ethtool -i <interface name> | grep driver
Ha a vezető az hv_netvsc
, az a szintetikus felület. A VF-illesztőnek van egy "mlx" elemet tartalmazó illesztőprogram-neve. A VF-felület azért is azonosítható, mert a mezője flags
tartalmazza a SLAVE
következőket: . Ez a jelző azt jelzi, hogy az azonos MAC-címmel rendelkezik a szintetikus felület felügyelete alatt.
Az IP-címek csak a szintetikus felülethez vannak hozzárendelve. Ennek a különbségnek a kimenete ifconfig
vagy ip addr
azt is mutatja.
Alkalmazáshasználat
Az alkalmazások csak a szintetikus felülettel kommunikálhatnak, ugyanúgy, mint bármely más hálózati környezetben. A kimenő hálózati csomagokat a rendszer a netvsc-illesztőről továbbítja a VF-illesztőnek, majd a VF-felületen keresztül továbbítja.
A bejövő csomagok fogadása és feldolgozása a VF-felületen történik, mielőtt a szintetikus felületre kerülnek. Kivételt képeznek a bejövő TCP SYN-csomagok és a csak a szintetikus interfész által feldolgozott szórási/csoportos küldési csomagok.
Ellenőrizheti, hogy a csomagok a VF-felületen haladnak-e át a kimenetből ethtool -S eth\<n\>
. Azokat a kimeneti sorokat, amelyek a VF-interfészen keresztüli forgalmat jelenítik vf
meg. Példa:
U1804:~# ethtool -S eth0 | grep ' vf_'
vf_rx_packets: 111180
vf_rx_bytes: 395460237
vf_tx_packets: 9107646
vf_tx_bytes: 2184786508
vf_tx_dropped: 0
Ha ezek a számlálók a parancs egymást követő végrehajtásakor ethtool
növekednek, a hálózati forgalom a VF-felületen halad át.
A parancs használatával lspci
ellenőrizheti, hogy a VF-felület PCI-eszköz-e. Az 1. generációs virtuális gépen például az alábbi kimenethez hasonló kimenet jelenhet meg. (A 2. generációs virtuális gépek nem rendelkeznek az örökölt PCI-eszközökkel.)
U1804:~# lspci
0000:00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (AGP disabled) (rev 03)
0000:00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 01)
0000:00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
0000:00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 02)
0000:00:08.0 VGA compatible controller: Microsoft Corporation Hyper-V virtual VGA
cf63:00:02.0 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx Virtual Function] (rev 80)
Ebben a példában az utolsó kimeneti sor azonosít egy virtuális gépet a Mellanox ConnectX-4 fizikai hálózati adapterről.
A ethtool -l
vagy ethtool -L
parancs (az üzenetsorok számának lekéréséhez és beállításához) kivételt képez a felülettel eth<n>
való interakcióra vonatkozó útmutatás alól. Ezt a parancsot közvetlenül a VF-felületen használhatja a VF-felület üzenetsorainak számának szabályozásához. A VF-interfész üzenetsorainak száma független a szintetikus interfész várólistáinak számától.
Indítási üzenetek értelmezése
Az indítás során a Linux számos üzenetet jelenít meg a VF-felület inicializálásával és konfigurációval kapcsolatban. A szintetikus felülettel való kötéssel kapcsolatos információkat is megjeleníti. Ezeknek az üzeneteknek a megértése hasznos lehet a folyamat esetleges problémáinak azonosításában.
Íme a dmesg
parancs példakimenete, amely csak a VF-felület szempontjából releváns sorokra van vágva. A linuxos kernel verziójától és a virtuális gép disztribúciójától függően az üzenetek kissé eltérhetnek, de a teljes folyamat ugyanaz.
[ 2.327663] hv_vmbus: registering driver hv_netvsc
[ 3.918902] hv_netvsc 000d3af5-76bd-000d-3af5-76bd000d3af5 eth0: VF slot 1 added
A netvsc-illesztő eth0
regisztrálva van.
[ 6.944883] hv_vmbus: registering driver hv_pci
A VMbus virtuális PCI-illesztő regisztrálva van. Ez az illesztőprogram alapvető PCI-szolgáltatásokat biztosít egy Linux rendszerű virtuális gépen az Azure-ban. A VF-felület észlelése és konfigurálása előtt regisztrálnia kell.
[ 6.945132] hv_pci e9ac9b28-cf63-4466-9ae3-4b849c3ee03b: PCI VMBus probing: Using version 0x10002
[ 6.947953] hv_pci e9ac9b28-cf63-4466-9ae3-4b849c3ee03b: PCI host bridge to bus cf63:00
[ 6.947955] pci_bus cf63:00: root bus resource [mem 0xfe0000000-0xfe00fffff window]
[ 6.948805] pci cf63:00:02.0: [15b3:1016] type 00 class 0x020000
[ 6.957487] pci cf63:00:02.0: reg 0x10: [mem 0xfe0000000-0xfe00fffff 64bit pref]
[ 7.035464] pci cf63:00:02.0: enabling Extended Tags
[ 7.040811] pci cf63:00:02.0: 0.000 Gb/s available PCIe bandwidth, limited by Unknown x0 link at cf63:00:02.0 (capable of 63.008 Gb/s with 8.0 GT/s PCIe x8 link)
[ 7.041264] pci cf63:00:02.0: BAR 0: assigned [mem 0xfe0000000-0xfe00fffff 64bit pref]
A rendszer észlelte a felsorolt GUID azonosítóval rendelkező (az Azure-gazdagép által hozzárendelt) PCI-eszközt. A rendszer egy PCI-tartományazonosítót (ebben az esetben 0xcf63) rendel hozzá a GUID alapján. A PCI-tartományazonosítónak egyedinek kell lennie a virtuális gépen elérhető összes PCI-eszközön. Ez az egyediségi követelmény a többi Mellanox VF-adapterre, GPU-ra, NVMe-eszközre és a virtuális gépen esetleg megtalálható egyéb eszközökre is kiterjed.
[ 7.128515] mlx5_core cf63:00:02.0: firmware version: 14.25.8362
[ 7.139925] mlx5_core cf63:00:02.0: handle_hca_cap:524:(pid 12): log_max_qp value in current profile is 18, changing it to HCA capability limit (12)
[ 7.342391] mlx5_core cf63:00:02.0: MLX5E: StrdRq(0) RqSz(1024) StrdSz(256) RxCqeCmprss(0)
Az mlx5 illesztőprogramot használó Mellanox VF-et észleltünk. Az mlx5 illesztőprogram megkezdi az eszköz inicializálását.
[ 7.465085] hv_netvsc 000d3af5-76bd-000d-3af5-76bd000d3af5 eth0: VF registering: eth1
[ 7.465119] mlx5_core cf63:00:02.0 eth1: joined to eth0
A netvsc-illesztőt használó megfelelő szintetikus felület egy megfelelő virtuális gépet észlelt. Az mlx5 illesztőprogram felismeri, hogy a szintetikus interfészhez van kötve.
[ 7.466064] mlx5_core cf63:00:02.0 eth1: Disabling LRO, not supported in legacy RQ
[ 7.480575] mlx5_core cf63:00:02.0 eth1: Disabling LRO, not supported in legacy RQ
[ 7.480651] mlx5_core cf63:00:02.0 enP53091s1np0: renamed from eth1
A Linux kernel kezdetben a VF-felületet eth1
nevezte el. Egy udev-szabály átnevezte, hogy elkerülje a szintetikus felületeknek adott nevek összetévesztését.
[ 8.087962] mlx5_core cf63:00:02.0 enP53091s1np0: Link up
A Mellanox VF-felület most már működik.
[ 8.090127] hv_netvsc 000d3af5-76bd-000d-3af5-76bd000d3af5 eth0: Data path switched to VF: enP53091s1np0
[ 9.654979] hv_netvsc 000d3af5-76bd-000d-3af5-76bd000d3af5 eth0: Data path switched from VF: enP53091s1np0
Ezek az üzenetek azt jelzik, hogy a összekapcsolt pár adatútvonala a VF-felület használatára váltott. Körülbelül 1,6 másodperccel később visszaáll a szintetikus felületre. Az ilyen kapcsolók az indítási folyamat során kétszer vagy háromszor is előfordulhatnak, és a konfiguráció inicializálásakor normális működést jelentenek.
[ 9.909128] mlx5_core cf63:00:02.0 enP53091s1np0: Link up
[ 9.910595] hv_netvsc 000d3af5-76bd-000d-3af5-76bd000d3af5 eth0: Data path switched to VF: enP53091s1np0
[ 11.411194] hv_netvsc 000d3af5-76bd-000d-3af5-76bd000d3af5 eth0: Data path switched from VF: enP53091s1np0
[ 11.532147] mlx5_core cf63:00:02.0 enP53091s1np0: Disabling LRO, not supported in legacy RQ
[ 11.731892] mlx5_core cf63:00:02.0 enP53091s1np0: Link up
[ 11.733216] hv_netvsc 000d3af5-76bd-000d-3af5-76bd000d3af5 eth0: Data path switched to VF: enP53091s1np0
Az utolsó üzenet azt jelzi, hogy az adatútvonal a VF-felület használatára váltott. Ez a virtuális gép normál működése során várható.
Azure-gazdagépek karbantartása
Az Azure-gazdagépek karbantartása során előfordulhat, hogy az összes VF-adapter ideiglenesen el lesz távolítva a virtuális gépről. Ha a karbantartás befejeződött, a VF-interfészek visszakerülnek a virtuális géphez. A normál művelet folytatódik. Míg a virtuális gép a VF-adapterek nélkül működik, a hálózati forgalom továbbra is a szintetikus interfészen halad át anélkül, hogy az alkalmazások zavarják.
Ebben az összefüggésben az Azure-gazdagépek karbantartása magában foglalhatja az Azure hálózati infrastruktúra összetevőinek frissítését vagy az Azure-gazdagép hipervizor szoftverének teljes körű frissítését. Az ilyen karbantartási események olyan időközönként történnek, amelyek az Azure-infrastruktúra működési igényeitől függnek. Ezek az események általában több alkalommal történnek egy év során.
A VF-felület és a szintetikus interfész közötti automatikus váltás biztosítja, hogy a karbantartási események ne zavarják a számítási feladatokat, ha az alkalmazások csak a szintetikus interfészt használják. Ezekben az időszakokban a késések és a processzorterhelés magasabb lehet a szintetikus interfész használata miatt. Az ilyen időszakok időtartama általában körülbelül 30 másodperc, de néha akár néhány perc is lehet.
A virtuális gép felületének eltávolítása és olvasása karbantartási esemény során látható a dmesg
virtuális gép kimenetében. Az alábbi jellemző kimenet:
[ 8160.911509] hv_netvsc 000d3af5-76bd-000d-3af5-76bd000d3af5 eth0: Data path switched from VF: enP53091s1np0
[ 8160.912120] hv_netvsc 000d3af5-76bd-000d-3af5-76bd000d3af5 eth0: VF unregistering: enP53091s1np0
[ 8162.020138] hv_netvsc 000d3af5-76bd-000d-3af5-76bd000d3af5 eth0: VF slot 1 removed
Az adatelérési út el lett váltva a VF-adapterről, és a VF-felület regisztrációja nem történt meg. Ezen a ponton a Linux eltávolította a VF-felület összes ismeretét, és úgy működik, mintha a gyorsított hálózatkezelés nem lett volna engedélyezve.
[ 8225.557263] hv_netvsc 000d3af5-76bd-000d-3af5-76bd000d3af5 eth0: VF slot 1 added
[ 8225.557867] hv_pci e9ac9b28-cf63-4466-9ae3-4b849c3ee03b: PCI VMBus probing: Using version 0x10002
[ 8225.566794] hv_pci e9ac9b28-cf63-4466-9ae3-4b849c3ee03b: PCI host bridge to bus cf63:00
[ 8225.566797] pci_bus cf63:00: root bus resource [mem 0xfe0000000-0xfe00fffff window]
[ 8225.571556] pci cf63:00:02.0: [15b3:1016] type 00 class 0x020000
[ 8225.584903] pci cf63:00:02.0: reg 0x10: [mem 0xfe0000000-0xfe00fffff 64bit pref]
[ 8225.662860] pci cf63:00:02.0: enabling Extended Tags
[ 8225.667831] pci cf63:00:02.0: 0.000 Gb/s available PCIe bandwidth, limited by Unknown x0 link at cf63:00:02.0 (capable of 63.008 Gb/s with 8.0 GT/s PCIe x8 link)
[ 8225.667978] pci cf63:00:02.0: BAR 0: assigned [mem 0xfe0000000-0xfe00fffff 64bit pref]
Ha a VF-felületet a karbantartás befejezése után olvassa be, a rendszer egy új, a megadott GUID azonosítóval rendelkező PCI-eszközt észlel. Ugyanaz a PCI-tartományazonosító (0xcf63) van hozzárendelve, mint korábban. Az olvasási VF-felület kezelése olyan, mint a kezdeti indítás során.
[ 8225.679672] mlx5_core cf63:00:02.0: firmware version: 14.25.8362
[ 8225.888476] mlx5_core cf63:00:02.0: MLX5E: StrdRq(0) RqSz(1024) StrdSz(256) RxCqeCmprss(0)
[ 8226.021016] hv_netvsc 000d3af5-76bd-000d-3af5-76bd000d3af5 eth0: VF registering: eth1
[ 8226.021058] mlx5_core cf63:00:02.0 eth1: joined to eth0
[ 8226.021968] mlx5_core cf63:00:02.0 eth1: Disabling LRO, not supported in legacy RQ
[ 8226.026631] mlx5_core cf63:00:02.0 eth1: Disabling LRO, not supported in legacy RQ
[ 8226.026699] mlx5_core cf63:00:02.0 enP53091s1np0: renamed from eth1
[ 8226.265256] mlx5_core cf63:00:02.0 enP53091s1np0: Link up
Az mlx5 illesztő inicializálja a VF-felületet, és az interfész már működik. A kimenet hasonló a kezdeti indítás során megadott kimenethez.
[ 8226.267380] hv_netvsc 000d3af5-76bd-000d-3af5-76bd000d3af5 eth0: Data path switched to VF: enP53091s1np0
Az adatelérési út vissza lett kapcsolva a VF-felületre.
Gyorsított hálózatkezelés letiltása vagy engedélyezése nem futó virtuális gépeken
Az Azure CLI használatával letilthatja vagy engedélyezheti a gyorsított hálózatkezelést egy virtuális hálózati adapteren egy nem futó virtuális gépen. Példa:
$ az network nic update --name u1804895 --resource-group testrg --accelerated-network false
A vendég virtuális gépen engedélyezett gyorsított hálózatkezelés letiltása kimenetet dmesg
hoz létre. Ez ugyanaz, mint amikor a VF-felületet eltávolítják az Azure-gazdagépek karbantartásához. A gyorsított hálózatkezelés engedélyezése ugyanazt dmesg
a kimenetet eredményezi, mint amikor a VF-adaptert az Azure-gazdagép karbantartása után olvassa be a rendszer.
Ezekkel az Azure CLI-parancsokkal szimulálhatja az Azure-gazdagépek karbantartását. Ezután ellenőrizheti, hogy az alkalmazások nem helytelenül függenek-e a VF-felülettel való közvetlen interakciótól.
Következő lépések
- Megtudhatja, hogyan hozhat létre gyorsított hálózatkezeléssel rendelkező virtuális gépet a PowerShellben.
- Megtudhatja, hogyan hozhat létre gyorsított hálózatkezelést használó virtuális gépet az Azure CLI használatával.
- Az Azure közelségi elhelyezési csoportjával javíthatja a késést.