나는 이것을 신뢰한다. 적절한 이 질문에 대한 장소. 프로그래밍과 관련이 없거나 대신 Stackoverflow에 질문했을 수도 있습니다. 그럼에도 불구하고 여기에 질문이 있습니다. 네트워크 처리량을 벤치마킹하고 있습니다. 두 개의 40GbE NIC가 현재 대역폭을 직접 확인하고 있습니다. (이를 위해, 나는 iperf3 ).
내 테스트 시스템은 듀얼 제온 E5 2667 (from / proc / cpuinfo model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz
) 24 개의 논리 프로세서를 표시합니다. 이있다 NUMA 하이퍼 큐브 두 개의 노드에 프로세서 절반이 각각 연결되어 있습니다. 비 ECC DDR3의 형태로 32GB의 RAM이 있습니다. 각각의 경우 40GbE NIC는 NUMA 노드 0에 연결된 PCIe Gen 3 x8 슬롯에 연결됩니다.
최소의 옵션 (기본적으로 내 용도로 충분한 기본값 사용)으로 iperf3을 사용하여 테스트를 수행 할 때 21.x Gbps 이상의 TCP 테스트 상승 대역폭을 볼 수 없습니다. (가끔은 21보다 높습니다. 하지만 대개 21.x입니다.) 그러나 iperf3를 사용하면 -A n
제한하는 옵션 iperf3
프로세서에 <n>
, ~ 36 Gbps를 보았는데 기대했던 것보다 훨씬 낫습니다. 이유를 알고 싶습니다.
나는 몇 가지 실험을 해왔다. numactl
메모리 할당, 프로세서 노드 및 물리적 프로세서를 iperf3
. 이상하게도 동일한 처리량을 얻을 수 없습니다. numactl
내가 사용함에 따라 iperf3
'에스 -A
선택권. 다양한 물건들 / 옵션들을 만지작 거리다. numactl man 페이지 더 많은 것을 위해), 주로 --physcpubind=<n>
, --cpunodebind=<n>
과 --membind=<n>
나는이 시험에서 ~ 31Gbps 이상을 달성 할 수 없다. 이유를 알고 싶습니다.
이를 위해 나는 perf
패키지 linux가 제공합니다. 그러나 필자는 리눅스 나 인텔에서 제공되는 PMU의 사용 가능한 문서에 대해서는별로 알지 못한다. 오, 그것을 실행하는 방법을 설명하지만, 실제로 무슨 뜻인지 . 예로서, bus-cycles
"Hardware Events"와 "Kernel PMU Events"모두에 나타납니다. 차이점이 뭐야? perf list
감시 될 수있는 "사건"을 묘사한다; 길다. 내가 Xeon E5 2667 용으로 Intel에서 찾은 문서 (Haswell 설치라고 생각합니다)는 다양한 NUMA 관련 작업이 지원된다는 것을 보여줍니다. perf list
쇼 uncore_imc_0/cas_count_read/
과 uncore_qpi_0/drs_data/
(많은 다른 사람들과) 관련이 있어야합니다. 그러나 내가 달릴 때 iperf3
이 모니터를 시도하면 지원되지 않습니다. 예 :
$ 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/
그러나 문서에 나와 있어야합니다. 프로그램을 실행하지 않고서 만 프로세서가 지원하는 것이 무엇인지 알아내는 방법이 있습니까? 불일치를 이해하는 데 중요한 메트릭스에 대한 제안 사항이 있습니까? (RHEL이 솔루션의 대상 플랫폼이기 때문에 태그가 붙어 있습니다.)