VMXNET3 odbiera rozmiar bufora i zużycie pamięci

12

tło

Mieliśmy incydent, w którym klaster pracy awaryjnej systemu Windows doznał przerwy. Sekcja zwłok wykazała, że węzeł został „usunięty”, jak opisano w tym artykule .

Dopiero niedawno przeprowadziliśmy pełną migrację tego klastra do naszego środowiska VMware i wygląda na to, że opisane powyżej zdarzenie mogło być przyczyną awarii.

Powiązany artykuł VMware KB na ten temat mówi o zwiększeniu Small Rx Buffersi Rx Ring #1ustawieniach, ale ostrzega, że ​​zbyt duże zwiększenie tych wartości może drastycznie zwiększyć obciążenie pamięci na hoście.

Po audycie Network Interface\Packets Received Discardedliczników wydajności naszych ~ 150 maszyn wirtualnych z systemem Windows, 22 vNIC na 16 gości miało kilka odrzuconych pakietów.

Wystarczająco mała kwota, że ​​nie martwię się o opodatkowanie hostów dodatkowym użyciem pamięci, ale chcę zrozumieć, w jaki sposób pamięć jest wykorzystywana dla tych ustawień i skąd ta pamięć pochodzi.

pytania

  1. Jaki jest związek między liczbą buforów a rozmiarem pierścienia?
  2. Jak obliczyć ilość pamięci używanej dla danych wartości tych ustawień?
  3. Ponieważ te ustawienia dotyczą samej karty sieciowej w systemie-gościu, zakładam, że są to ustawienia sterownika. To sprawia, że ​​myślę, że używana pamięć RAM może być pulą stronicowaną lub niestronicowaną.
    1. Czy to jest poprawne?
    2. Jeśli tak, czy powinienem się tym martwić?
  4. Czy są jakieś obawy, których tutaj nie biorę pod uwagę?

Staramy się ustalić, czy wady tych maszyn wirtualnych są inne niż wykorzystanie pamięci hosta VMware. Jeśli na przykład zwiększamy ryzyko wyczerpania pamięci puli u gościa, jesteśmy bardziej skłonni zacząć od małego.

Niektóre (być może wszystkie) z tych pytań mogą nie być specyficzne dla VMware lub wirtualizacji.

briantist
źródło
Widziałem naprawdę niestabilne rzeczy, gdy silnik odciążający TCP fizycznej karty sieciowej działał nieprawidłowo, a maszyny wirtualne wykazywały dziwne zachowanie, co może być potencjalnym tropem.
SpacemanSpiff,
@SpacemanSpiff warto to sprawdzić, ale tylko 16 maszyn wirtualnych na ponad 150 wykazuje takie zachowanie. Te 16 jest rozmieszczonych w 12-węzłowym klastrze i wszyscy otrzymują od czasu do czasu duże impulsy ruchu, co wydaje się być tym, co wyzwala objawy opisane w artykule KB. Niektóre z nich to klastry Windows, więc nie poruszają się z DRS, w przeciwnym razie mógłbym sprawdzić, czy wszyscy dotknięci goście pokazali upuszczone pakiety na określonym hoście, zanim zostaną odrzuceni. Sprawdzę jeszcze raz i sprawdzę, czy mogę znaleźć jakieś korelacje. Dzięki.
briantist
Mikroburstowanie, jaki to sprzęt?
SpacemanSpiff,
@SpacemanSpiff Serwery IBM, kilka różnych modeli i wersji, również nie jestem pewien, które karty sieciowe, mogę sprawdzić szczegóły jutro.
briantist

Odpowiedzi:

5

Jaki jest związek między liczbą buforów a rozmiarem pierścienia?

Są spokrewnieni, ale niezależni. „Pierścień” rx odnosi się do zestawu buforów w pamięci, które są używane jako kolejka do przekazywania przychodzących pakietów sieciowych od hosta (hiperwizora) do gościa (VM systemu Windows). Pamięć zostaje zarezerwowana w sterowniku przez gościa i zamapowana w pamięci hosta.

Gdy na hoście przychodzą nowe pakiety sieciowe, są one umieszczane w następnym dostępnym buforze w ringu. Następnie host wyzwala IRQ w gościu, na które odpowiada sterownik gościa, zdejmując pakiet z pierścienia i wysyłając go do stosu sieciowego systemu gościa, który prawdopodobnie wysyła go do aplikacji gościa, aby go odebrać. Zakładając, że pakiety nadchodzą wystarczająco wolno, a sterownik gościa przetwarza je wystarczająco szybko, zawsze powinno być wolne miejsce na ringu. Jeśli jednak pakiety przychodzą zbyt szybko lub gość przetwarza je zbyt wolno, pierścień może się zapełnić, a pakiety mogą zostać odrzucone (jak widzieliśmy w twojej sytuacji).

Zwiększenie rozmiaru pierścienia może pomóc w złagodzeniu tego problemu. Jeśli go zwiększysz, na ringu będzie dostępnych więcej miejsc na raz. Pokazuje to drugie ustawienie, „Small Rx Buffers”, czyli całkowita liczba dostępnych buforów, które można wykorzystać do wypełnienia szczelin w pierścieniu. Musi być co najmniej tyle buforów, ile miejsc w ringu. Zazwyczaj chcesz więcej. Gdy gość zdejmuje bufor z pierścienia, aby przekazać go stosowi sieci gościowi, nie zawsze może on zostać natychmiast zwrócony z powrotem do sterownika. Jeśli tak się stanie, posiadanie zapasowych buforów do wypełnienia pierścienia oznacza, że ​​możesz pracować dłużej bez upuszczania pakietów.

Rx Ring # 1 / Small Rx Buffers są używane do ramek innych niż jumbo. Jeśli masz domyślną konfigurację karty sieciowej, będzie to jedyny używany pierścień.

Jak obliczyć ilość pamięci używanej dla danych wartości tych ustawień?

Zakładając, że mówisz o ramkach innych niż jumbo, każdy bufor musi być wystarczająco duży, aby pomieścić cały pakiet sieciowy, około 1,5 KB. Więc jeśli masz 8192 dostępnych buforów, to zużyłoby 12 MB. Większy pierścień zużyje również więcej pamięci, ale deskryptory są małe (bajty), więc tak naprawdę to bufory, o które musisz się martwić.

Ponieważ te ustawienia dotyczą samej karty sieciowej w systemie-gościu, zakładam, że są to ustawienia sterownika. To sprawia, że ​​myślę, że używana pamięć RAM może być pulą stronicowaną lub niestronicowaną.

Tak, to pula niestronicowana. Gdyby bufory pierścieniowe były stronicowane, prawdopodobnie spowodowałoby to odrzucenie pakietów podczas buforowania z powrotem stronicowania.

Czy są jakieś obawy, których tutaj nie biorę pod uwagę?

Nie jestem pewien, czy ma to związek z twoją sytuacją, ale warto zauważyć, że większy pierścień zwiększy rozmiar pamięci podręcznej ścieżki rx sieci. W mikrodrukach zobaczysz, że większy pierścień zwykle szkodzi wydajności. To powiedziawszy, w rzeczywistych aplikacjach, jeśli pakiet zostanie upuszczony, zwykle jest to większa sprawa niż niewielki wzrost wydajności w szybkich seriach.

Źródło: Pracowałem w VMware.

Roger Jacobson
źródło
1
Dzięki, Roger, doskonała pierwsza odpowiedź. Od jakiegoś czasu nie pracuję w tej firmie, więc ten problem był daleko od mojego radaru, ale dla kompletności, czy istnieje problem z wykorzystaniem pamięci, aby ustawić je na maksimum? Artykuł KB brzmi, jakbyś mógł w ten sposób zużyć dużo pamięci, ale wygląda na to, że ilość byłaby niewielka. Pytam o to, ponieważ nie jest również jasne, jak zmienić te wartości poza próbą i błędem, więc może być najłatwiej ustawić je na maksimum, jeśli nie ma żadnych / małych wad.
briantistka
1
Re: użycie pamięci, dwie rzeczy, które chciałbym zauważyć: 1) Jeśli nie używasz dużych ramek, zgadzam się, ilość pamięci przy maksymalnym ustawieniu jest nadal dość mała. Jeśli używasz ramek typu jumbo, rozmiar bufora wynosi około 9 KB, więc używasz więcej pamięci. 2) Ilość pamięci dostępnej w puli niestronicowanej jest mniejsza niż całkowita ilość pamięci na hoście. Nie jestem tutaj ekspertem, ale ten link ma dość obszerne podsumowanie sposobu obliczania dostępnej pamięci: blogs.technet.microsoft.com/markrussinovich/2009/03/10/…
Roger Jacobson
Wielkie dzięki. Mam nadzieję, że ta odpowiedź pomoże komuś w przyszłości (może nawet będę ja, jeśli znów na to
wpadnę
0

Nie mam odpowiedzi na punkt 1-2-3, ale możesz sprawdzić u swojego wirtualnego inżyniera konfigurację hosta Vmware. Jeśli jest VCP, zrozumie rzeczy :)

Naprawdę musisz sprawdzić hosta, ponieważ problemy z systemem Windows mogą występować na hoście, a nie w gościu.

Istnieje wiele funkcji sprzętowych, które mogą wyjaśnić problemy, directpath io, rss, vcpu, schemat zarządzania energią ...

Mogę podać link, który pomoże Twojemu wirtualnemu zespołowi lub Tobie :)

Ten link dotyczy tuningu hosta http://buildvirtual.net/tuning-esxi-host-networking-configuration/

I ten gruby pdf:

http://www.vmware.com/pdf/Perf_Best_Practices_vSphere5.0.pdf

A ten dotyczy rss:

http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2008925

YuKYuK
źródło
Dzięki za odpowiedź, ale jestem VCP. Tak naprawdę wcale nie chodzi o konfigurację hosta. Artykuł Microsoft, do którego podłączyłem, wyjaśnia, że ​​licznik wydajności, o którym mowa, nie powinien być wyższy niż 0 i dotyczy kilku maszyn wirtualnych. Próbuję uzyskać zrozumienie ustawień vNIC poza tym, co wyjaśniono w artykule bazy wiedzy VMware.
briantist
-1

Nie jestem w stanie w pełni wyszukać i skierować Cię na właściwe strony: więc proszę, abyś sam szukał szczegółów ... (przepraszam)

W trybie Fail over Cluster dostępne są 4 ustawienia, które można modyfikować; i nie będą miały wpływu na bufory, stronicowane lub niestronicowane ... Zmienia to sposób, w jaki Failover Cluster decyduje o uznaniu węzła za „usunięty”. Te ustawienia to:

SameSubnetDelay SameSubnetThreshold CrossSubnetDelay CrossSubnetThreshold

Mogą nie rozwiązać twojego problemu, ale ich ulepszenie może w tej chwili wydostać się z kłopotów ...

Kiedy wrócę w poniedziałek, wrócę do tego postu, jeśli masz dodatkowe pytania

HTH, Edwin.

Edwin van Mierlo
źródło
PS: czy możesz poinformować nas o wersji systemu Windows, z której korzystasz?
Edwin van Mierlo
To był Windows 2008. Otrzymałem odpowiedź od VMware (po tylu miesiącach), ale nie jestem nawet w firmie, w której byłem, kiedy to się stało. Odpowiedź nie jest prosta i chciałem przeczytać ich odpowiedź i opublikować coś, ale nie miałem czasu. Doceniam twoje wskazówki dotyczące klastra, ale nie mogę ich teraz wypróbować.
briantistka
Zauważyłem tylko, że oryginalny post ma kilka miesięcy, co nie było zbyt jasne w aplikacji na Androida ... następnym razem przyjrzę się bliżej ... tymczasem moja odpowiedź jest nadal ważna dla innych użytkowników, którzy mogą wyszukiwać dla podobnych doświadczeń.
Edwin van Mierlo