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






