링크 집계 (LACP / 802.3ad) 최대 처리량 인터페이스와 관련하여 혼란스러운 동작을보고 있으며

Linux에서 본딩 된 인터페이스와 관련하여 혼란스러운 동작을보고 있으며 누군가가 나를 위해 그것을 해결할 수 있기를 바랍니다.

두 대의 서버가 있습니다. 서버 1 (S1)에는 4x 1Gbit 이더넷 연결이 있습니다. 서버 2 (S2)에는 2x 1Gbit 이더넷 연결이 있습니다. 두 서버 모두 커널 3.11.0-15 (lts-saucy linux-generic 패키지에서)로 우분투 12.04를 실행하고 있습니다.

두 서버 모두 각각의 네트워크 인터페이스가 다음 구성 (in /etc/network/interfaces) 으로 단일 bond0 인터페이스에 번들로 제공됩니다 .

bond-mode 802.3ad
bond-miimon 100
bond-lacp-rate fast
bond-slaves eth0 eth1 [eth2 eth3]

서버 사이에는 문제의 포트에서 LACP에 대해 올바르게 구성된 두 개의 HP 스위치가 있습니다.

이제 링크가 작동하고 있습니다. 네트워크 트래픽이 두 시스템간에 행복하게 흐릅니다. 그리고 모든 해당 인터페이스가 사용되므로 집계가 완전히 실패하는 것과 다릅니다. 그러나이 두 서버 사이에 가능한 한 많은 대역폭이 필요하며 ~ 2Gbit / s를 얻지 못합니다.

필자의 테스트에서 각 서버는 각 TCP 연결 (예 : iperf, scp, nfs 등)을 단일 슬레이브 인터페이스에 할당하는 것으로 보입니다. 본질적으로 모든 것이 최대 1 기가비트로 제한되어있는 것 같습니다.

을 설정 bond-xmit-hash-policy layer3+4하면 iperf -c S1 -P2두 개의 슬레이브 인터페이스를 보낼 수 있지만 서버 측에서는 여전히 하나의 슬레이브 인터페이스에서만 수신이 발생하므로 총 처리량은 1Gbit / s로 제한됩니다. 즉, 클라이언트는 ~ 40-50MB / s를 표시합니다 두 개의 슬레이브 인터페이스에서 서버는 하나의 슬레이브 인터페이스에서 ~ 100MB / s를 표시합니다. bond-xmit-hash-policy전송을 설정하지 않으면 하나의 슬레이브 인터페이스로 제한됩니다.

LACP가 이러한 종류의 연결 번들링을 허용해야한다는 인상을 받았습니다. 예를 들어 단일 scp 전송으로 두 호스트간에 사용 가능한 모든 인터페이스를 사용할 수 있습니다.

LACP에 대한 나의 이해가 잘못 되었습니까? 아니면 어딘가에서 일부 구성 옵션을 놓쳤습니까? 조사에 대한 제안이나 단서는 대단히 감사하겠습니다!



답변

LACP를 사용하는 단일 통신 회선은 여러 인터페이스로 패킷을 분할하지 않습니다. 예를 들어 HostA에서 HostB로 패킷을 스트리밍하는 단일 TCP 연결이있는 경우 해당 패킷을 전송하기 위해 인터페이스를 확장하지 않습니다. LACP를 최근에 우리가 작업하고있는 솔루션에 대해 많이 살펴 봤는데 이는 LACP와의 여러 네트워크 인터페이스를 ‘본딩’또는 ‘트렁킹’하면 결합 된 인터페이스의 “처리량”을 제공한다는 일반적인 오해입니다. 일부 공급 업체는 여러 인터페이스를 통해 라우팅 할 독점 드라이버를 만들었지 만 LACP 표준은 내가 읽은 내용과 다릅니다. 다음은 비슷한 문제를 검색하는 동안 HP에서 찾은 알맞은 다이어그램과 설명에 대한 링크입니다. http://www.hp.com/rnd/library/pdf/59692372.pdf


답변

bond-xmit-hash-policy layer3+4소스 서버에서 스위치로로드 밸런싱을 설정합니다. 스위치에서 두 번째 서버로로드 밸런싱 알고리즘을 설정하지 않습니다. 그것은 거의 확실히 레이어 2 또는 레이어 3 밸런스입니다.


답변

우선, 팀 구성 드라이버를 사용하는 경우 약간의 오버 헤드가 발생하고 1GB 어댑터의 경우 최대 940MB / s 인 10 %까지 예상 최대 처리량이 줄어 듭니다.

어떤 종류의 어댑터가 있는지 잘 모르겠지만 기본 제공 드라이버를 사용하는 경우 설정이 최대 처리량에 적합하지 않을 수 있습니다. 어댑터의 단일 큐가 유선 속도에 도달 할 수 없으므로 최대 4 개의 큐를 추가하는 것을 고려할 수 있습니다.

또 다른 고려 사항은 iperf의 한 스레드가 최고 속도를 얻지 못할 것입니다. 1GB, 2-6 스레드가 더 이상적 일 수 있습니다. 간단한 bash 스크립트를 사용하여 동시에 여러 스레드를 시작할 수 있습니다.

Intel NIC의 경우 RSS 및 하드웨어 RSC가 처리량에 영향을 줄 수 있지만 Broadcom에서 TOE가 작동하는지 확인하십시오.

그러나 1 단계는 LAG를 제거하고 각 시스템에서 트래픽 포트 1 개를 테스트하여 처리량을 확인하고 모든 포트에서이를 수행 한 다음 2를 시도해보십시오. 맞습니다. 저는 HP 스위치에서 Force10 (사전 Dell)에서만 설정을 시도하지 않았습니다.

또한 왜 몇 개의 스위치가 있습니까?