2013-08-02 4 views
3

고성능 컴퓨팅에 사용 된 2 개의 Intel Xeon CPU E5-2620 (Sandy Bridge)과 10Gbps 82599 NIC (2 포트)가있는 서버가 있습니다. PCI 친 화성에서부터, 나는 10G NIC가 CPU1에 연결되어 있음을 알았다. 실험을 수행하기 위해 여러 개의 패킷 수신 스레드를 시작했으며, 스레드는 패킷을 수신하고 IP/UDP 구문 분석을 수행하며 버퍼로 복사합니다. 10G NIC에 사용 된 드라이버는 IOEngine PacketShader/Packet-IO-Engine입니다. · GitHub로컬 CPU가 패킷 수신시 원격 CPU 성능이 저하 될 수 있습니다.

Q1! 2 개 스레드 CPU1에 결합되는 경우 유휴 CPU1은 1 또는 2 또는 4 스레드 CPU0에 결합하는 경우 CPU0 패킷 성능

1.1)를 수신 저하 모든 스레드 overal 성능은 약 2.6-3.2Gbps 1.2) 인 오버런 성능은 16.XGbps입니다. 1.3 CPU1에 4 개의 스레드가 결합 된 경우 오버런 성능은 19.XGbps입니다 (2 * 10G 포트에서 최대).

CPU0는 NIC와 직접 연결되어 있지 않으므로 CPU0의 최대 수신 속도는 2.6-3.2Gbps입니다. 그러나 일부 연산 집약적 인 프로세스가 CPU1에서 실행되면 패킷을 수신하는 패킷이 CPU0에서 15.XGbps로 2 개의 스레드로, 19.XGbps에서 4 개의 스레드로 증가하는 것으로 나타났습니다.

전원 관리 때문입니까? CPU1이 유휴 상태이면 절전 모드로 실행됩니까? 그렇다면 CPU1이 어떻게 CPU0의 성능에 영향을 미칠 수 있습니까? QPI에 대해 모르는 뭔가가 있습니까?

Q2! 오버로드 된 CPU1이 모든 패킷 수신 성능을 저하시킵니다.

2.1) 패킷 수신 스레드가 CPU0에서 실행되고 패킷 수신 스레드가 CPU1에서 실행되는 경우 오버런 성능은 10Gbps입니다. 각 스레드의 성능은 5.X Gbps와 거의 같습니다. 2.2) 2 개의 패킷 수신 스레드가 CPU0에서 실행되고 2 개의 패킷 수신 스레드가 CPU1에서 실행되는 경우 초과 성능은 13Gbps입니다. 간단히 말해서 각 스레드의 성능은 거의 동일합니다. 2.1, 1.2 및 1.3보다 낮은 3.X Gbps입니다.

즉, CPU0과 CPU1 모두에서 실행중인 스레드를 수신하면 모든 스레드가 최대 성능 및 성능이 거의 같습니다.

NUMA와 QPI에 대해 많이 알지 못합니다. 아무도 제가 설명 할 수 있도록 도와 줄 수 있습니까? 감사합니다

답변

0

Q1 : 예, 전원 관리로 인한 것 같습니다. QPI는 저전력 상태뿐 아니라 각 프로세서 소켓, CPU 코어 및 프로세서 전체에 직접 매달려있는 PCIe 슬롯도 있습니다. 여기 세부 정보 : https://software.intel.com/en-us/articles/power-management-states-p-states-c-states-and-package-c-states

BIOS에 액세스 할 수있는 경우 QPI L- 상태, PEG PCIe L- 상태 및 CPU C- 상태를 해제하십시오. 문제가 해결되면 성능 저하에 가장 많은 책임을지는 설정을 찾아 낼 수 있습니다.

Q2는 : 인텔은 주문 규칙에 some details를 제공하고 관련이있을 수의 PCIe 흐름 제어를하지만, 그들이 존재 알고 및 성능을 제한 할 수있는 다른 것보다 그들에게 응답 할 많은 일을하기 어렵다. 공개적으로 문서화되지 않은 두 소켓 중 하나의 언 코어에는 유사한 제약 조건이있을 수 있습니다. 이 중 하나가 해당되는 경우 이 VTune을 더 파고 들어서 어떤 리소스가 고갈되었는지 확인할 수 있습니다.

NIC 드라이버에서 사용되는 동기화 구성표에서 테이블의 성능이있을 수도 있습니다.VTune의 동시성 (Concurrency) 및 잠금 및 대기 (Locks and Waits) 분석 유형은 이러한 문제점을 식별하고 안내하는 데 도움이 될 수 있습니다.