Zagadnienia dotyczące przypinania procesów
Dlaczego przypinanie procesów i wątków?
Zawsze przypinaj procesy do określonych rdzeni, aby ułatwić osiągnięcie maksymalnej wydajności i uzyskanie bardziej spójnej wydajności od uruchomienia do uruchomienia.
Przypinanie procesu:
Maksymalizuj przepustowość pamięci, umieszczając lub przypinając procesy w lokalizacjach, które używają wszystkich kanałów pamięci i równomiernie dystrybuują wszystkie kanały pamięci między rdzeniami.
Poprawia wydajność zmiennoprzecinkowa, gwarantując, że każdy proces jest na własnym rdzeniu. Eliminuje to możliwość, że dwa procesy wylądowały na tym samym rdzeniu.
Optymalizuje przenoszenie danych między procesami, umieszczając procesy komunikujące się w węzłach domeny NUMA (Non-Uniform Memory Access). Gwarantuje to, że mają najmniejsze opóźnienia i najwyższą przepustowość.
Zmniejsza obciążenie systemu operacyjnego i zapewnia bardziej spójne wyniki, ponieważ system operacyjny nie może przenosić procesów do różnych rdzeni ani domen NUMA.
Gdzie przypinasz procesy i wątki?
Aby określić, gdzie należy przypiąć procesy i wątki, należy zrozumieć topologię procesora i pamięci, a w szczególności liczbę i lokalizację domen NUMA.
Narzędzie lstopo-no-graphics (z hwloc RPM) i Intel Memory Latency Checker (MLC) są przydatne narzędzia do określania topologii procesora i pamięci. Na przykład: ile domen NUMA ma maszyna wirtualna? Które rdzenie są członkami każdej domeny NUMA? Jakie jest opóźnienie i przepustowość procesów w każdej domenie NUMA podczas komunikowania się ze sobą?
Na poniższej ilustracji przedstawiono mapę opóźnienia domeny HB120_v2 NUMA wygenerowaną przez funkcję Intel MLC. Im mniejsze opóźnienie między domenami NUMA, tym szybciej jest między nimi komunikacja. Ilustracja wyraźnie pokazuje, że HB120_v2 ma 30 domen NUMA i domen NUMA, na których znajdują się gniazda. Pokazuje również, które domeny NUMA można zgrupować w celu osiągnięcia najmniejszego opóźnienia transferu danych i komunikacji.
Procesory Intel mają sześć kanałów pamięci, a procesory AMD EPYC mają osiem kanałów pamięci. Upewnij się, że używasz wszystkich kanałów pamięci, aby zmaksymalizować dostępną przepustowość pamięci. W tym celu równomierne rozłożenie procesów równoległych między domenami węzłów NUMA. W przypadku hybrydowych aplikacji równoległych należy zachować grupowanie procesów/wątków w tych samych domenach NUMA, najlepiej współużytkując tę samą pamięć podręczną L3. Upewnij się, że łączna liczba wątków nie przekracza całkowitej liczby rdzeni.
Na poniższej ilustracji przedstawiono jednostkę SKU HC44 z 2 domenami NUMA i 44 rdzeniami.
Na poniższej ilustracji przedstawiono jednostkę SKU HB60 z 15 domenami NUMA i 60 rdzeniami.
Aplikacje powiązane z przepustowością pamięci
Jeśli masz aplikację powiązaną z przepustowością pamięci, możesz uzyskać lepszą wydajność na maszynie wirtualnej, zmniejszając liczbę równoległych procesów i wątków w każdej domenie węzła NUMA. Może to zapewnić większą przepustowość pamięci na proces i ewentualnie skrócić czas zegara ściany.
Jeśli na przykład używasz jednostki SKU HB120_v2 z 30 domenami węzłów NUMA, możesz spróbować uruchomić 1, 2 i 3 procesy i wątki na domenę węzła NUMA (na przykład 30, 60 i 90 procesów i wątków na maszynę wirtualną). Następnie możesz sprawdzić, która konfiguracja zapewnia najlepszą wydajność.