Максимальна пропускна здатність агрегації ланок (LACP / 802.3ad)


10

Я бачу деяку заплутану поведінку щодо пов’язаних інтерфейсів під Linux, і я хотів би викинути ситуацію там, сподіваючись, що хтось зможе мені це розяснити.

У мене є два сервери: Сервер 1 (S1) має 4-кратний 1 Гбіт Ethernet-з'єднання; Сервер 2 (S2) має 2x 1Gbit Ethernet-з'єднання. На обох серверах працює Ubuntu 12.04, хоча і з ядром 3.11.0-15 (з пакета lts-saucy linux-generic).

Обидва сервери мають усі відповідні мережеві інтерфейси, об'єднані в єдиний інтерфейс bond0 із такою конфігурацією (в /etc/network/interfaces):

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

Між серверами є пара комутаторів HP, які (я думаю) правильно налаштовані для LACP на відповідних портах.

Тепер посилання працює - мережевий трафік радісно протікає на та з обох машин. І всі відповідні інтерфейси використовуються, тож не схоже, що агрегація повністю виходить з ладу. Однак мені потрібно якомога більше пропускної спроможності між цими двома серверами, і я не отримую ~ 2 Гбіт / с, який би я очікував.

Під час мого тестування я можу зауважити, що, здається, кожен сервер виділяє кожне TCP-з'єднання (наприклад, iperf, scp, nfs, що завгодно) одному інтерфейсу підлеглого. По суті, все здається обмеженим максимумом 1 гігабіт.

Встановивши bond-xmit-hash-policy layer3+4, я можу використовувати iperf -c S1 -P2для надсилання на два підлеглого інтерфейси, але на стороні сервера прийом все ще відбувається лише на одному підлеглому інтерфейсі, і загальна пропускна здатність обмежена на рівні 1 Гбіт / с, тобто клієнт показує ~ 40-50 МБ / с. на двох ведених інтерфейсах сервер показує ~ 100 Мб / с на одному підлеглому інтерфейсі. Без налаштування bond-xmit-hash-policyнадсилання також обмежується одним веденим інтерфейсом.

У мене склалося враження, що LACP повинен дозволити такий тип з'єднання, дозволяючи, наприклад, однією передачею scp використовувати всі доступні інтерфейси між двома хостами.

Чи моє розуміння LACP неправильне? Або я десь пропустив параметри конфігурації? Будь-які пропозиції або підказки для розслідування були б вдячні!

Відповіді:


18

Швидке і брудне пояснення полягає в тому, що одна лінія зв'язку за допомогою LACP не розділить пакети на кілька інтерфейсів. Наприклад, якщо у вас є одне потокове з'єднання TCP-з'єднань від HostA до HostB, воно не буде охоплювати інтерфейси для відправки цих пакетів. Останнім часом я багато дивився на LACP, щоб знайти рішення, над яким ми працюємо, і це поширена помилка, що "зв'язування" або "обрізання" декількох мережевих інтерфейсів з LACP дає вам "пропускну здатність" комбінованих інтерфейсів. Деякі постачальники створили власні драйвери, які здійснюватимуть маршрутизацію через декілька інтерфейсів, але стандарт LACP - це не те, що я прочитав. Ось посилання на гідну схему та пояснення, які я знайшов від HP під час пошуку подібних питань: http://www.hp.com/rnd/library/pdf/59692372.pdf


1
Це все має сенс. Я поняття не маю, чому я не виявив своє неправильне уявлення раніше; Я, мабуть, щойно перебирав потрібні сторінки пошуку та документації. Здається, що в залежності від мережевого обладнання ми можемо змінити режим хешування src-dest і удачу в пропускній здатності між інтерфейсами, але я думаю, що на цьому етапі я просто буду задоволений тим, що ми маємо. Дякуємо за ваші роз’яснення та дуже корисне посилання.
Zetten

Радий допомогти. Останнім часом я багато читав про це, намагаючись отримати роз’яснення щодо термінології, що стосується транкінгування та зв’язування, що використовується різними постачальниками. Я виявив, що за межами конкретних стандартів, таких як визначені постачальниками IEEE, як правило, деякі терміни використовують взаємозамінно ...
Майк Нейлор

6
Документ більше не доступний за оригінальною URL-адресою, але він все ще доступний через Інтернет-архів: web.archive.org/web/20030324105208/http://www.hp.com/rnd/…
smbear

3

bond-xmit-hash-policy layer3+4встановлює балансування навантаження від вашого вихідного сервера до комутатора. Він не встановлює алгоритм балансування навантаження з вашого перемикача на другий сервер. Це майже напевно все ще шар-2 або шар-3 збалансований, тобто зовсім не є.


2

Ну, по-перше, коли ви використовуєте драйвер для спільної роботи, це створить накладні витрати та знизить очікувану максимальну пропускну здатність, що становить ~ 940 Мб / с на адаптері 1 ГБ, на ~ 10%.

Я не впевнений, який у вас адаптер, але якщо ви використовуєте вхідні драйвери, налаштування, ймовірно, не ідеально підходить для максимальної пропускної здатності. Ви можете розглянути можливість додавання черг до 4, оскільки одна черга на адаптері, ймовірно, не може досягти швидкості проводів.

Інша думка, полягає в тому, що одна нитка iperf, ймовірно, не збирається отримати максимальну швидкість. Для 1 Гб, 2-6 потоків, мабуть, більш ідеально, ви можете використовувати простий скрипт bash для запуску декількох потоків одночасно.

Для Intel NIC, але RSS і апаратне забезпечення RSC можуть впливати на пропускну здатність, на Broadcom переконайтеся, що TOE працює.

Першим кроком було б видалити мітки LAG і просто спробувати тестувати 1 порт трафіку в кожній системі, щоб побачити, скільки пропускної здатності він отримує, зробіть це з усіма портами, а потім спробуйте 2. LACP - це непоганий звір, який потрібно налаштувати. правильно, і я ніколи не намагався налаштувати його на перемикач HP, тільки Force10 (перед Dell).

Крім того, чому є пара перемикачів?


Як було описано в іншій відповіді, основна проблема полягала в тому, що я розумів LACP, але просто для заповнення картини: поля linux використовують драйвер зв'язку ядра. Кожен інтерфейс окремо може підштовхнути пропускну здатність майже максимальної гігабітової частоти (мабуть, приблизно 110-117 МБ / с залежно від іншого трафіку), тому я справді просто прагну збільшити цю пропускну здатність, а не налаштувати окремі сетеві мережі. Що стосується комутаторів, у нас є багатофункціональний сайт, і на шляху є перемикачі транкінгу з волоконним mux / demux та різними іншими бітами та бобами. У мене були обидва сервери на одному комутаторі HP 2920-48G для тестування.
Zetten

iperf має --parallelпараметр, який контролює кількість паралельних потоків клієнтів для запуску
8.8.8.8
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.