Zagadnienia dotyczące przypinania procesów

Ukończone

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.

Obraz przedstawiający mapę opóźnienia domeny HB120_v2 NUMA.

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.

Obraz przedstawiający domeny NUMA HC44.

Na poniższej ilustracji przedstawiono jednostkę SKU HB60 z 15 domenami NUMA i 60 rdzeniami.

Obraz przedstawiający domeny NUMA HB60.

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