2017-09-08 3 views
2

Dell PowerEdge 서버에 연결된 Intel x520 및 x540 이중 포트 NIC를 사용하고 있습니다. 모든 NIC 포트는 10Gbps에서 작동 할 수 있으므로 총 40Gbps입니다. 이 시스템에는 Xeon E5-2640 v3 CPU (Haswell Microarchitecture)가 포함 된 2 개의 소켓이 있습니다.PCIe 및 DMA를 벤치마킹하는 방법은 무엇입니까?

내가 직면하고있는 많은 문제가 있으며 PCIe 및 DMA 벤치마킹을 사용하여 해결할 수 있습니다. 그러나, 나는 똑같이하는 적절한 방법을 찾을 수 없습니다. DPDK 기반 드라이버 및 라이브러리 (64 바이트 패킷 포함)에서도 40Gbps 처리량을 달성 할 수 없습니다. 실험을 64 바이트 크기로 수행해야하며 패킷 크기를 변경할 수 없습니다.

DPDK-pktgen을 사용하여 패킷을 생성하고 Intel-PCM, ./pcm-pci.x를 사용하여 이벤트를 계산합니다. 그러나 카운팅은 한 가지 방법입니다. 즉, 이벤트의 수를 계산 중이며 시스템에서 지원할 수있는 각 이벤트의 최대 수를 알 수 없습니다. PCM-pci.x의 결과는 :

Skt PCIeRdCur RFO  CRd  DRd  ItoM PRd WiL 
0  73 M  3222 K 784 K 63 M  52 M  0 2791 K 

내 NIC는 0을 소켓에 연결하고 내가 소켓 1 개 결과를두고 있지 않다 이유입니다.

PCIe 버스 및 DMA 엔진을 벤치마킹 할 수있는 방법이 있습니까? 그리고 패킷 처리를 위해 IO 하위 시스템 (각 레벨에서)에서 정확한 대기 시간을 얻는 방법이 있습니까 (rdtsc()를 사용하여 하드웨어 수준 대기 시간을 측정 할 수는 없습니까)?

답변

0

CPU 코어가 100 % 사용률로 실행 중인지 언급하지 않았습니까? 최대 용량으로 실행 중이고 회선 속도가 40Gbps가되지 않으면 소프트웨어 관련 문제 일 수 있습니다.

SystemTap을 살펴보십시오. 커널 이벤트 및 기능의 실행 시간, 대기 시간 및 지터 (히스토그램 작성)를 디버그하고 기록하는 데 사용할 수 있습니다. 이 블로그 게시물에 대한 좋은 예가 있습니다 : https://blog.cloudflare.com/revenge-listening-sockets/

실제로 이것은 정확히 요구 한 것이 아니지만 테스트에서 병목 현상을 줄이기 위해 사용할 수 있습니다. SystemTap을 사용하여 커널 함수 호출 횟수, 실행 시간 (대기 시간) 및 지터를 모니터링 할 수 있으며 Linux에서의 성능 또한 시스템 성능 모니터링 (컨텍스트 스위치, 분기 누락 등 herehere 참조)에 유용하므로 함께 사용하면 도움이됩니다. 소프트웨어의 병목 현상을 줄일 수 있습니다.

이이 같은 하드웨어와 직접 상호 작용하는 기능에 당신을 이끌 수 http://elixir.free-electrons.com/linux/latest/source/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c#L8000

^설명 :

writel가 I/O 주소 매핑 메모리에 "긴"을 씁니다. 이 경우 주소는 tx_ring-> tail (하드웨어 주소)이고 쓸 값 은 i입니다. 이 장치에 대한 쓰기는 장치 을 트리거하여 추가 데이터가 RAM에서 DMA 될 준비가되었으며 네트워크에 이 기록되었음을 알립니다.

또는 이러한 도구를 사용하면 대기 시간을 초래하는 소프트웨어 기능으로 연결될 수 있습니다. 예를 들어 현금 누락 율이 높을 수도 있습니다.

편집는 :

또한 그것은 당신이를 사용하고 있는지, DPDK 좋은 성능을 내 경험에 매우 중요합니다 당신에게 OS 버전, 커널 버전, NIC 드라이버 및 펌웨어 버전 등을 언급하지 않았다 최신 NIC 펌웨어, 드라이버 및 최근 커널 빌드.

관련 문제