링크 집계 (LACP / 802.3ad) 최대 처리량


10

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

답변:


18

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


1
그게 말이 되네요 나는 왜 내 오해를 더 빨리 발견하지 못했는지 전혀 모른다. 올바른 검색어와 설명서 페이지를 둘러 본 적이 있어야합니다. 네트워크 하드웨어에 따라 src-dest 해싱 모드를 변경하고 다중 인터페이스 처리량을 조정할 수있는 것처럼 보이지만이 단계에서 나는 우리가 가진 것에 만족할 것이라고 생각합니다. 설명과 매우 유용한 링크에 감사드립니다.
Zetten

기쁘다. 나는 다른 벤더들이 다르게 사용하는 트렁킹 및 본딩을 다루는 용어에 대한 설명을 얻기 위해 최근에 이것을 많이 읽었습니다. IEEE 벤더가 정의한 표준과 같은 특정 표준 이외의 용어는 상호 교환 적으로 일부 용어를 사용하는 경향이 있음을 발견했습니다.
Mike Naylor

6
이 문서는 더 원래의 URL에 이상 사용할 수 없습니다,하지만 인터넷 아카이브를 통해 여전히 액세스 : web.archive.org/web/20030324105208/http://www.hp.com/rnd/...
smbear

3

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


2

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

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

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

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

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

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


다른 답변이 설명했듯이 근본적인 문제는 LACP에 대한 나의 이해였습니다. 그러나 그림을 채우는 것만으로도 Linux 박스는 커널의 본딩 드라이버를 사용하고 있습니다. 각 인터페이스는 개별적으로 최대 기가비트 처리량 (다른 트래픽에 따라 약 110-117MB / s)을 푸시 할 수 있으므로 개별 NIC를 조정하는 대신 대역폭을 늘리려 고합니다. 스위치에 관해서는 멀티 오피스 사이트가 있으며 파이버 멀티플렉서 / 디 먹스 및 다양한 기타 비트 및 밥을 가진 트렁킹 스위치가 있습니다. 테스트를 위해 두 대의 서버를 하나의 HP 2920-48G 스위치에 두었습니다.
Zetten

iperf에는 --parallel실행할 병렬 클라이언트 스트림 수를 제어하는 ​​매개 변수가 있습니다.
8.8.8.8
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.