SR-IOV – jak działa wirtualizacja kart sieciowych
Wirtualizacja

SR-IOV – jak działa wirtualizacja kart sieciowych

SR-IOV – jak działa wirtualizacja kart sieciowych

SR-IOV (Single Root I/O Virtualization) to technologia PCIe pozwalająca jednej fizycznej karcie sieciowej udostępnić wiele wirtualnych funkcji (Virtual Functions, VF) bez konieczności pełnej emulacji urządzenia przez hypervisor.

To jedna z kluczowych technologii zwiększających wydajność sieci w środowiskach:

  • Hyper-V
  • KVM/QEMU
  • VMware
  • Proxmox VE
  • OpenStack
  • Kubernetes

Problem bez SR-IOV

W klasycznej wirtualizacji sieć może wyglądać tak:

                    Physical NIC
                         |
                         v
                      Host OS
                         |
                    Virtual Switch
                         |
              +----------+----------+
              |                     |
             VM1                   VM2
              |                     |
            vNIC                  vNIC

Pakiety przechodzą przez dodatkowe warstwy oprogramowania.

Przykładowo:

VM
 ↓
vNIC
 ↓
Hypervisor
 ↓
Virtual Switch
 ↓
Physical NIC
 ↓
Network

To działa bardzo dobrze, ale generuje dodatkowy narzut CPU.


SR-IOV zmienia architekturę

Karta obsługująca SR-IOV może udostępnić wiele Virtual Functions.

                  Physical NIC
                       |
                 Physical Function
                       |
          +------------+------------+
          |            |            |
         VF1          VF2          VF3
          |            |            |
         VM1          VM2          VM3

Każda VM może otrzymać własną VF.


PF i VF

To dwa najważniejsze pojęcia.

PF – Physical Function

PF reprezentuje fizyczną funkcję urządzenia.

Physical NIC
     |
     v
    PF

PF odpowiada za zarządzanie urządzeniem i konfigurację SR-IOV.

VF – Virtual Function

VF to lekka, wirtualna funkcja PCIe.

Physical NIC
     |
 +---+---+---+
 |   |   |   |
VF1 VF2 VF3 VF4

Każda VF może zostać przypisana do konkretnej maszyny wirtualnej.


Jak wygląda ruch?

Bez SR-IOV:

VM
 |
 v
vNIC
 |
 v
Virtual Switch
 |
 v
Hypervisor
 |
 v
NIC

Z SR-IOV:

VM
 |
 v
VF
 |
 v
Physical NIC
 |
 v
Network

Mniej pracy wykonuje software hypervisora.


Dlaczego SR-IOV jest szybsze?

Ponieważ część funkcji związanych z obsługą sieci może zostać przeniesiona do sprzętu.

Schemat:

             WITHOUT SR-IOV

VM
 ↓
vNIC
 ↓
Virtual Switch
 ↓
Hypervisor
 ↓
NIC


             WITH SR-IOV

VM
 ↓
VF
 ↓
NIC

Może to oznaczać:

  • mniejsze zużycie CPU,
  • mniejsze opóźnienia,
  • większy throughput,
  • większą liczbę pakietów na sekundę.

SR-IOV a PCIe

SR-IOV jest rozszerzeniem standardu PCI Express.

System operacyjny widzi VF jako funkcję PCIe:

PCIe Device
    |
    +-- PF
    |
    +-- VF
    |
    +-- VF
    |
    +-- VF

Dzięki temu VF może być przekazana do VM podobnie jak inne urządzenie PCIe.


SR-IOV w Hyper-V

W środowisku Microsoft Hyper-V SR-IOV pozwala VM korzystać z Virtual Function fizycznej karty sieciowej.

Schemat:

              Hyper-V Host
                   |
            Physical NIC
                   |
          +--------+--------+
          |        |        |
         PF       VF       VF
                   |        |
                  VM1      VM2

VM nadal może posiadać wirtualną kartę sieciową, ale ruch danych może być obsługiwany przez VF.


Co dzieje się podczas awarii?

To ciekawy element architektury.

Jeżeli VF przestanie być dostępna:

VM
 |
 VF
 |
 X

system może przełączyć ruch na klasyczną ścieżkę przez virtual switch.

VM
 |
 vNIC
 |
Virtual Switch
 |
Physical NIC

Dzięki temu SR-IOV nie musi oznaczać całkowitej utraty sieci w przypadku problemu z VF, zależnie od platformy i konfiguracji.


SR-IOV w KVM/QEMU

W Linux/KVM możemy wykorzystać SR-IOV w połączeniu z VFIO.

              Physical NIC
                   |
                  PF
                   |
              +----+----+
              |         |
             VF1       VF2
              |         |
            VFIO       VFIO
              |         |
             VM1       VM2

KVM zapewnia wirtualizację CPU, a VFIO umożliwia bezpośrednie przypisanie urządzenia PCIe do VM.


SR-IOV + VFIO

Bardzo ważny zestaw:

SR-IOV
→ tworzy Virtual Functions

VFIO
→ przekazuje VF do VM

Czyli:

Physical NIC
      |
      v
     SR-IOV
      |
 +----+----+
 |         |
 VF1      VF2
 |         |
 v         v
VFIO      VFIO
 |         |
VM1       VM2

SR-IOV w Proxmox

W Proxmox można wykorzystać SR-IOV w środowiskach, w których karta sieciowa i sprzęt obsługują tę technologię.

Schemat:

Proxmox
   |
  KVM
   |
QEMU VM
   |
 VF
   |
NIC

Jest to szczególnie interesujące dla:

  • firewalli w VM,
  • routerów,
  • NFV,
  • dużych serwerów,
  • storage networking,
  • wysokowydajnych aplikacji.

SR-IOV i DPDK

SR-IOV może być również używany w środowiskach NFV i network acceleration razem z technologiami takimi jak DPDK.

Przykładowa architektura:

Physical NIC
      |
     SR-IOV
      |
      VF
      |
     DPDK
      |
Application

Pozwala to budować bardzo wydajne rozwiązania sieciowe.


SR-IOV w Kubernetes

SR-IOV jest również wykorzystywany w Kubernetes, szczególnie w środowiskach telco, 5G i NFV.

Architektura może wyglądać tak:

Physical NIC
      |
     PF
      |
 +----+----+
 |         |
 VF1      VF2
 |         |
Pod       Pod

Kubernetes może przydzielać VF konkretnym workloadom.

Często wykorzystuje się do tego SR-IOV Network Device Plugin.

 

SR-IOV – jak działa wirtualizacja kart sieciowych
SR-IOV – jak działa wirtualizacja kart sieciowych

SR-IOV vs virtio-net

To bardzo ważne porównanie.

Virtio

VM
 |
virtio-net
 |
Virtual Switch
 |
Host
 |
NIC

SR-IOV

VM
 |
VF
 |
Physical NIC
Cecha virtio-net SR-IOV
Wydajność wysoka bardzo wysoka
Elastyczność bardzo wysoka mniejsza
Virtual Switch ograniczona ścieżka danych
CPU overhead większy mniejszy
Wymaga sprzętu SR-IOV
Migracja VM łatwiejsza bardziej skomplikowana
Izolacja software hardware + software

Największa wada SR-IOV

SR-IOV nie jest rozwiązaniem idealnym.

Największym problemem jest mniejsza elastyczność.

Jeżeli VM otrzyma:

VF1

to jest ona związana z fizycznym urządzeniem.

W przypadku migracji:

HOST-A
  |
 VF1
  |
 VM
  |
  | Live Migration
  v
HOST-B

host B również musi posiadać odpowiednie możliwości sprzętowe.

Dlatego SR-IOV może komplikować:

  • live migration,
  • HA,
  • scheduling,
  • konfigurację sieci,
  • zarządzanie sprzętem.

SR-IOV a Live Migration

To jeden z najważniejszych kompromisów.

Klasyczna VM:

Host A
  |
 VM
  |
  | Live Migration
  v
Host B

jest stosunkowo prosta.

VM wykorzystująca fizyczną VF:

Host A
 |
 VF
 |
 VM
 |
 | Migration
 v
Host B
 |
 VF ?

Host B musi zapewnić kompatybilne zasoby.

Dlatego w środowiskach, gdzie live migration jest priorytetem, czasami lepiej użyć VirtIO niż SR-IOV.


SR-IOV i izolacja

VF zapewniają również izolację między funkcjami urządzenia.

NIC
 |
 +-- VF1 → VM1
 |
 +-- VF2 → VM2
 |
 +-- VF3 → VM3

Jednak bezpieczeństwo nadal zależy od:

  • firmware NIC,
  • sterowników,
  • hypervisora,
  • IOMMU,
  • konfiguracji VF,
  • mechanizmów izolacji sieciowej.

IOMMU

W środowiskach wirtualizacyjnych SR-IOV często współpracuje z:

Intel VT-d
AMD IOMMU

Schemat:

VM
 |
 VF
 |
IOMMU
 |
Physical NIC

IOMMU kontroluje, do jakich obszarów pamięci urządzenie może uzyskać dostęp.


SR-IOV a SmartNIC / DPU

SR-IOV wpisuje się również w rozwój nowoczesnych kart sieciowych.

Możemy mieć:

             SmartNIC / DPU
                   |
       +-----------+-----------+
       |           |           |
      PF          VF          VF
                   |
                  VM

W połączeniu z DPU część funkcji infrastruktury sieciowej może zostać przeniesiona z CPU hosta do urządzenia.


Jak sprawdzić SR-IOV w Linux?

Można sprawdzić urządzenia PCI:

lspci | grep -i ethernet

Następnie sprawdzić możliwości konkretnego urządzenia:

lspci -vv

Szukamy informacji związanych z:

Single Root I/O Virtualization
SR-IOV

Sprawdzanie VF

W Linuxie informacje o SR-IOV mogą znajdować się np. tutaj:

ls /sys/class/net/

oraz:

cat /sys/class/net/eth0/device/sriov_totalvfs

Jeżeli otrzymamy np.:

8

oznacza to, że urządzenie może udostępnić do 8 VF w danej konfiguracji.


Tworzenie VF

Na niektórych urządzeniach można ustawić liczbę VF:

echo 4 | sudo tee /sys/class/net/eth0/device/sriov_numvfs

Następnie:

ip link show

lub:

lspci

powinno pokazać dodatkowe funkcje urządzenia.

Uwaga: dokładna konfiguracja zależy od sterownika i modelu NIC.


SR-IOV – pełna architektura

                         Physical NIC
                              |
                              |
                    +---------+---------+
                    |                   |
                   PF                  Hardware
                    |                   |
             +------+------+------------+
             |      |      |
            VF1    VF2    VF3
             |      |      |
            VM1    VM2    VM3
             |      |      |
             +------+------+ 
                    |
                  Network

W środowisku KVM:

Physical NIC
      |
     PF
      |
     SR-IOV
      |
  +---+---+
  |       |
 VF1     VF2
  |       |
 VFIO    VFIO
  |       |
 VM1     VM2
  |
 KVM/QEMU

SR-IOV – gdzie ma największy sens?

Technologia szczególnie dobrze sprawdza się tam, gdzie liczą się:

✔ bardzo duży throughput
✔ niskie latency
✔ małe CPU overhead
✔ wiele VM/workloadów
✔ szybka sieć 10/25/40/100 GbE+

Przykładowe zastosowania:

NFV
5G
Telco
High Performance Computing
Storage
Network Appliances
Cloud
AI infrastructure

Najważniejszy kompromis

SR-IOV można sprowadzić do jednego wyboru:

             ELASTYCZNOŚĆ
                  ↑
                  |
        VirtIO    |
                  |
                  |
                  |
                  |        SR-IOV
                  |          ●
                  |
                  +----------------→
                         WYDAJNOŚĆ

VirtIO daje większą elastyczność i świetnie współpracuje z klasyczną wirtualizacją.

SR-IOV daje bardziej bezpośredni dostęp do sprzętu i może znacząco zwiększyć wydajność sieci, ale kosztem większych wymagań sprzętowych i bardziej skomplikowanej obsługi migracji oraz HA.

W skrócie: SR-IOV to technologia, która pozwala hypervisorowi powiedzieć VM: „dostajesz własną funkcję fizycznej karty sieciowej”, zamiast przepuszczać cały ruch przez klasyczny wirtualny switch.

Polecane wpisy
Jak sprawdzić konfigurację monitorowania wydajności środowiska wirtualnego?
Jak sprawdzić konfigurację monitorowania wydajności środowiska wirtualnego?

📊 Jak sprawdzić konfigurację monitorowania wydajności środowiska wirtualnego? Wirtualizacja to jeden z fundamentów nowoczesnej infrastruktury IT. Jednak aby działała wydajnie Czytaj dalej

Zarządzanie magazynami danych (datastore) w środowiskach wirtualnych
Zarządzanie magazynami danych (datastore) w środowiskach wirtualnych

Zarządzanie magazynami danych (datastore) w środowiskach wirtualnych W świecie wirtualizacji jednym z najważniejszych aspektów działania infrastruktury jest efektywne zarządzanie magazynami Czytaj dalej

Marek "Netbe" Lampart Inżynier informatyki Marek Lampart to doświadczony inżynier informatyki z ponad 25-letnim stażem w zawodzie. Specjalizuje się w systemach Windows i Linux, bezpieczeństwie IT, cyberbezpieczeństwie, administracji serwerami oraz diagnostyce i optymalizacji systemów. Na netbe.pl publikuje praktyczne poradniki, analizy i instrukcje krok po kroku, pomagając administratorom, specjalistom IT oraz zaawansowanym użytkownikom rozwiązywać realne problemy techniczne.