Ten post został pierwotnie napisany przez Abhijita Khande i Vineetha V Acharyę z zespołu inżynierów systemu Windows firmy Dell.
Komentarze są mile widziane! Aby zasugerować temat lub zgłosić inne uwagi, skontaktuj się z WinServerBlogs@dell.com.
Wraz z systemem operacyjnym Microsoft® Windows Server® 2012 Beta firma Microsoft wprowadziła obsługę wielu funkcji w przestrzeni sieciowej. Jedną z takich znaczących i interesujących funkcji jest
Wirtualizacja we/wy z jednym elementem głównym (SR-IOV), która umożliwia maszynom wirtualnym współużytkowanie jednego urządzenia PCI-e. Ten wpis zawiera podstawowe omówienie funkcji SR-IOV w systemie Windows Server 2012 Beta oraz sposobu, w jaki drastycznie zmniejsza ona wykorzystanie procesora w środowisku zwirtualizowanym podczas sieciowej operacji we/wy.
Interfejs SR-IOV jest rozszerzeniem specyfikacji PCI Express (PCIe). Funkcja SR-IOV umożliwia pojedynczemu urządzeniu PCIe, takiemu jak karta sieciowa, zapewnienie wielu lekkich powierzchni sprzętowych na magistrali PCI i oddzielenie dostępu do jej zasobów między różnymi instancjami. Osiąga się to poprzez zastosowanie wielu funkcji wirtualnych (VF) oprócz (zwykłej) funkcji fizycznej (PF). Ponieważ jest to zależne od sprzętu, urządzenie PCIe i platforma muszą obsługiwać tę funkcję.
Tradycyjnie, pakiet przeznaczony dla maszyny wirtualnej jest odbierany przez fizyczną kartę sieciową (za pomocą funkcji fizycznej) obecnej w systemie operacyjnym hosta. Ten pakiet jest obsługiwany przez moduł sterownika NDIS (Network Driver Interface Specification for NICs). Pakiet jest następnie dostarczany do przełącznika funkcji Hyper-V, który przetwarza pakiet (np. routing, filtrowanie sieci VLAN) i przesyła dalej pakiet do docelowej maszyny wirtualnej za pośrednictwem rozwiązania VMBus, jak pokazano na rysunku 1. Ścieżka odwrotna będzie wykonywana, gdy maszyna wirtualna będzie musiała wysłać pakiet.
W przypadku SR-IOV maszyna wirtualna może używać funkcji wirtualnej (VF) do wysyłania i odbierania pakietów bezpośrednio do fizycznej karty sieciowej z całkowitym pominięciem tradycyjnej ścieżki, jak pokazano na rysunku 1. To nie tylko zwiększa wydajność sieciowych operacji we/wy, ale także zmniejsza obciążenie procesora komputera hosta.
Rysunek 1: Ścieżka danych z SR-IOV i bez niego
Migracja na żywo i SR-IOV
W systemie Windows Server 2012 Beta migrację na żywo można przeprowadzić z SR-IOV używanym przez maszynę wirtualną. Jeśli systemy źródłowy i docelowy obsługują SR-IOV, a obiekt docelowy ma dostępną funkcję VF, maszyna wirtualna będzie korzystać z funkcji wirtualnej. Jeśli nie, maszyna wirtualna powróci do tradycyjnej ścieżki (VM-Bus).
Każda karta sieciowa z obsługą funkcji SR-IOV uwidacznia stałą liczbę funkcji wirtualnych, które można uzyskać, uruchamiając polecenie PowerShell "Get-NetAdapterSriov".
Analiza wydajności
Przeprowadziliśmy kilka testów w naszym laboratorium, aby porównać wydajność z SR-IOV i bez niego. Środowisko testowe składa się z jednego serwera testowego (na którym wykonywane są testy) oraz jednego serwera plików. Serwer testowy to Dell PowerEdge™ R710 II z® kartą Intel X520 Ethernet 10 GB i systemem operacyjnym Windows Server 2012 Beta. Serwer plików obsługuje wiele udziałów SMB i jest podłączony do serwera testowego za pomocą sieci 10 Gb za pośrednictwem przełącznika Dell PowerConnect™ 8024.
Przechwyciliśmy dane dotyczące wydajności procesora używanego przez DPC (Deferred Procedure Call) zaplanowane przez różne moduły sterowników biorące udział w transferze danych sieciowych. Te dane zostały przechwycone zarówno w systemie operacyjnym gościa, jak i hosta, zgodnie z opisem w poniższych scenariuszach. Serwer testowy ma 4 identyczne maszyny wirtualne z systemem Windows Server 2012 Beta jako systemem operacyjnym gościa. Te 4 maszyny wirtualne są połączone z siecią 10 GB za pośrednictwem przełącznika wirtualnego. Tę konfigurację testową przedstawiono na rysunku 2.
Rysunek 2: Konfiguracja
testu Zanim zaprezentujemy dane dotyczące wydajności, należy wprowadzić bardzo krytyczny parametr używany w tych testach. W
Microsoft Windows Istnieje mechanizm systemowy o nazwie Deferred Procedure Call (DPC), który umożliwia wykonywanie zadań o wysokim priorytecie (np.
Procedura obsługi przerwań), aby odłożyć zadania o wymaganym, ale niższym priorytecie do późniejszego wykonania. Dzięki temu sterowniki urządzeń i inni odbiorcy zdarzeń niskiego poziomu mogą szybko wykonać część przetwarzania o wysokim priorytecie i zaplanować dodatkowe przetwarzanie niekrytyczne do wykonania o niższym priorytecie.
Scenariusz 1 — wyniki wydajności w maszynie wirtualnej (system operacyjny gościa):
W tym scenariuszu użyliśmy czterech maszyn wirtualnych (VM od 1 do VM 4). Włączyliśmy funkcję SR-IOV na maszynie wirtualnej 1 i maszynie wirtualnej 2 (przez zaznaczenie opcji "Włącz SR-IOV" w ustawieniach maszyny wirtualnej) oraz wyłączyliśmy funkcję SR-IOV na maszynach wirtualnych 3 i 4 (przez usunięcie zaznaczenia tej samej opcji). W związku z tym maszyny wirtualne 1 i 2 będą korzystać z funkcji wirtualnej (udostępnianej przez kartę Intel), podczas gdy maszyny wirtualne 3 i 4 będą używać ścieżki syntetycznej (VMBus) do dowolnej komunikacji sieciowej, jak pokazano na rysunku 2.
Zaczęliśmy kopiować dane (o rozmiarze 20 GB) z jednego udziału SMB do maszyn wirtualnych i przechwyciliśmy dzienniki użycia procesora systemowego w systemie operacyjnym gościa.
Rysunek 3: Użycie procesora DPC w maszynie
wirtualnej Na rysunku 3 SR-IOV odnosi się do średniego użycia procesora DPC w maszynach wirtualnych-1 i VM-2, a non-SR-IOV odnosi się do średniego użycia procesora DPC w maszynach wirtualnych-3 i VM-4. Jeśli spojrzymy na wykres, zobaczymy, że nie ma dużej różnicy w użyciu procesora między tymi dwoma przypadkami, ale nie uwzględniliśmy jeszcze użycia procesora CPU na komputerze hosta.
Scenariusz 2 — wynik wydajności na maszynie hosta (system operacyjny hosta):
W tym scenariuszu użyliśmy jednej maszyny wirtualnej. Zaczęliśmy kopiować dane (o rozmiarze 20 GB) z udziału SMB do maszyny wirtualnej i przechwyciliśmy użycie procesora DPC przez 2 moduły, NDIS i VMBUS, które są używane w sieciowych operacjach we/wy.
Rysunek 4: Użycie procesora DPC na komputerze
hosta Wyniki przedstawiono na rysunku 4. Zgodnie z oczekiwaniami istnieje ogromna różnica w użyciu procesora między tymi dwoma przypadkami (SR-IOV i Non-SR-IOV). Użycie procesora jest rzędu 102 w przypadku SR-IOV i rzędu 103-104 w przypadku wersji bez SR-IOV. Dzieje się tak głównie dlatego, że w przypadku SR-IOV maszyna wirtualna komunikuje się bezpośrednio z fizyczną kartą sieciową za pośrednictwem funkcji wirtualnej. Dlatego cykle procesora hosta nie są wykorzystywane do przetwarzania żadnych pakietów sieciowych. W przypadku konfiguracji innej niż SR-IOV (jak pokazano na rysunku 1) system operacyjny gościa komunikuje się z systemem operacyjnym hosta za pośrednictwem magistrali maszyny wirtualnej, która z kolei przetwarza pakiety i wysyła je za pośrednictwem fizycznej karty sieciowej. W związku z tym moduły takie jak VM Bus i NDIS są szeroko stosowane.
Przy obliczaniu całkowitego użycia procesora zauważamy, że wykorzystanie procesora podczas sieciowej operacji we/wy jest znacznie mniejsze w przypadku korzystania z SR-IOV. Dlatego system Windows Server 2012 Beta z włączoną funkcją SR-IOV pomoże klientom zmniejszyć obciążenie procesora podczas operacji we/wy sieci, a tym samym poprawić ogólną wydajność systemu.
Konfigurowanie SR-IOV przy użyciu programu PowerShell
Za pomocą następujących poleceń programu PowerShell można utworzyć nowy przełącznik wirtualny z włączoną funkcją SR-IOV i podłączyć przełącznik wirtualny do wirtualnej karty sieciowej istniejącej maszyny wirtualnej.
UWAGA: Przed uruchomieniem poniższych poleceń w systemie BIOS należy włączyć następujące opcje:
- Technologia wirtualizacji
- Globalne włączenie SR-IOV
(Przy założeniu, że podłączono tylko jedną kartę sieciową (Intel X520))
$NetAdap = Get-NetAdapter | Gdzie-obiekt { $_. Status -eq "Up"}
(Przełącznik -EnableIov służy do włączenia SR-IOV w przełączniku wirtualnym)
New-VMSwitch -Name "Przełącznik SRIOV" -NetAdapterName $NetAdap.Name -AllowManagementOS $True -Notes "Przełącznik SRIOV na X520" -EnableIov $True
$VMSw = Get-VMSwitch
Dodanie nowej karty sieciowej do VM-1 i podłączenie jej do przełącznika wirtualnego.
Add-VMNetworkAdapter -SwitchName $VMSw.Name -VMName VM-1 -Name "Adapter SRIOV"UWAGA:
Aby to polecenie działało, maszyna wirtualna musi być wyłączona)
Możesz również użyć już istniejącej karty sieciowej maszyny wirtualnej, używając następujących poleceń)
$VMNet = Get-VMNetworkAdapter -VMName VM-1
Connect-VMNetworkAdapter -VMName VM-1 -SwitchName $VMSw.Name -Name $VMNet.Name
Każda karta sieciowa maszyny wirtualnej ma dwie właściwości, IovWeight i VmqWeight, które odpowiadają odpowiednio SR-IOV i VMQ. Regulacja tych wag włącza lub wyłącza te funkcje.