Ufam temu odpowiedni miejsce na to pytanie. To nie jest związane z programowaniem, czy może zamiast tego zapytałem o Stackoverflow. Niemniej jednak, oto pytanie. Przeprowadzam testy porównawcze przepustowości sieci. Mam obecnie podłączone dwie karty sieciowe 40GbE, bezpośrednio weryfikujące przepustowość. (Aby to osiągnąć, używam iperf3 ).
Moje systemy testowe to podwójny Xeon E5 2667 (z / proc / cpuinfo model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
) odsłaniając 24 procesory logiczne. Tam jest NUMA hipersześcian dwóch węzłów z połową procesorów dołączonych do każdego z nich. Jest 32 GB pamięci RAM w postaci pamięci DDR3 innej niż ECC. W każdym przypadku karta sieciowa 40GbE jest podłączona do gniazda PCIe Gen 3 x8, które jest powiązane z węzłem NUMA 0.
Kiedy wykonuję test z iperf3 z minimalną liczbą opcji (zasadniczo używając ustawień domyślnych, które są wystarczające dla moich celów), nie widzę przepustowości dla testu TCP powyżej 21.x Gbps (ok, więc czasami robi się powyżej 21 ale zwykle jest to 21.x). Jeśli jednak użyję iperf3 -A n
opcja, która ogranicza iperf3
do procesora <n>
, Widzę ~ 36 Gbps, co jest bardziej podobne do tego, czego się spodziewam. Chciałbym zrozumieć dlaczego.
Eksperymentowałem z niektórymi numactl
do wiązania alokacji pamięci, węzłów procesora i procesora fizycznego iperf3
. Co dziwne, nie mogę osiągnąć takiej samej przepustowości numactl
jak używam iperf3
jest -A
opcja. Bawiąc się różnymi rzeczami / opcjami (patrz strona man numactl po więcej), głównie --physcpubind=<n>
, --cpunodebind=<n>
i --membind=<n>
Nie mogę osiągnąć więcej niż ~ 31Gbps w tym teście. Chciałbym zrozumieć dlaczego.
W tym celu zacząłem używać perf
pakiet linux zapewnia. Nie znajduję jednak zbyt wiele w dokumentacji dostępnej zarówno z Linuksa, jak i Intela na temat dostępnych urządzeń PMU. Och, wyjaśnia, jak go uruchomić, ale niewiele mówi się o nim co właściwie znaczy . Jako przykład, bus-cycles
pojawia się zarówno w „Zdarzeniach sprzętowych”, jak iw „Zdarzeniach PMU dotyczących jądra”. Co za różnica? perf list
określa „zdarzenia”, które można monitorować; jest długa. Dokumentacja znaleziona przez firmę Intel dla Xeon E5 2667 (która, jak sądzę, jest konfiguracją Haswella) pokazuje, że obsługiwane są różne rzeczy związane z NUMA i perf list
przedstawia uncore_imc_0/cas_count_read/
i uncore_qpi_0/drs_data/
(wśród wielu innych), które powinny być z tym powiązane. Ale kiedy biegnę iperf3
próbując to monitorować, rozumiem, że nie jest obsługiwany. Na przykład:
$ perf stat -e uncore_qpi_0/drs_data/ -- iperf3 -c 192.168.0.244 -A 0
.... program output ....
Performance counter stats for 'iperf3 -c 192.168.0.244 -A 0':
<not supported> uncore_qpi_0/drs_data/
Jednak dokumenty pokazują, że tak powinno być. Czy jest jakiś sposób, aby dowiedzieć się, co jest obsługiwane przez mój procesor bez uruchamiania programu, tylko po to, by dowiedzieć się, czy nie jest to posłowie? Czy ktoś miałby sugestie dotyczące wskaźników, które są ważne dla zrozumienia rozbieżności? (Tagged with RHEL, ponieważ jest to docelowa platforma dla rozwiązania).
źródło