Megosztás a következőn keresztül:


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.

Megjegyzés:

This article contains references to the term slave, a term that Microsoft no longer uses. 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 SLAVEkö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éldául:

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 Csatlakozás X-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 eth1nevezte 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éldául:

$ 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.

További lépések