Які можливі недоліки у встановленні (дуже) великого initcwnd для високопропускних з'єднань?


9

Я експериментував з параметрами TCP в Linux (з ядром 3,5). В основному щодо цього зв’язку:

Сервер: Гігабітна висхідна лінія в центрі обробки даних, фактична пропускна здатність (за рахунок спільних посилань) становить близько 70 Мб / с при тестуванні з іншого центру обробки даних.

Клієнт: Гігабітний локальний ланцюг, підключений до волокна 200 Мбіт. Отримання тестового файлу фактично досягає 20 Мб / с.

Затримка: близько 50 м в обидва кінці.

Віддалений сервер використовується як сервер файлів для файлів в діапазоні від 10 до 100 Мб. Я помітив, що на використання initcwnd 10 на час передачі цих файлів сильно впливає повільний старт TCP, для завантаження 10 Мб (3,5 максимальна швидкість досягнуто: 3,3 Мб / с) потрібно 3,5 секунди, тому що він починається повільно, а потім наростає. закінчується до досягнення максимальної швидкості. Моя мета - налаштувати мінімальний час завантаження цих файлів (тому не найвища пропускна здатність або найменша затримка в обидва кінці, я готовий пожертвувати обома, якщо це зменшує фактичний час, необхідний для завантаження файлу)

Тому я спробував простий розрахунок, щоб визначити, яким повинен бути ідеальний initcwnd, ігноруючи будь-які інші зв’язки та можливий вплив на інших. Продукт із затримкою пропускної здатності становить 200 Мбіт / с * 50 мс = 10 Мбіт або 1,310,720 байт. Зважаючи на те, що initcwnd встановлений в одиницях MSS і якщо припустити, що MSS становить близько 1400 байт, для цього знадобиться встановити: 1.310.720 / 1400 = 936

Це значення дуже далеке від типового (10 * MSS в Linux, 64kb в Windows), тому не здається гарною ідеєю встановити його так. Які очікувані недоліки конфігурації цього типу? Наприклад:

  • Чи вплине це на інших користувачів тієї ж мережі?
  • Чи може це створити неприйнятні перевантаження для інших з'єднань?
  • Затоплення маршрутизаторів-буферів десь на шляху?
  • Збільшити вплив невеликої кількості пакетних втрат?

1
Чи можете ви підтвердити, що ви говорите мегабайт / с, коли ви говорите, 70 MB/sа не мегабіти? Просто шукаю роз'яснення.
Енді Шінн

Так, мегабайти / с не мегабіти.
Томаш

Якби я був ти, я спробував би помножити його на 2 кілька разів (10, 20, 40, 80, ...) і побачити, як це покращує типовий час завантаження
mvp

Відповіді:


1

Які очікувані недоліки конфігурації цього типу? Наприклад:

Will it affect other users of the same network?

Зміна initcwnd вплине на:

  • Користувачі сервера з налаштуваннями змінюються
  • Якщо ці користувачі відповідають маршруту, налаштування зміни налаштовано на.
Could it create unacceptable congestion for other connections?

Звичайно.

Flood router-buffers somewhere on the path?

Це не має ніякого значення, але якщо вони не є вашими маршрутизаторами, я б зосередився на питаннях, які вам ближче.

Increase the impact of small amounts of packet-loss?

Звичайно, він може це зробити.

Підсумок полягає в тому, що це збільшить вартість втрат пакету, як навмисних, так і ненавмисних. Ваш сервер простіший для DOS будь-хто, хто здатний виконати тристоронній рукостискання (значні обсяги даних за низькі інвестиції (обсяг даних) у).

Це також збільшить шанси на те, що купу цих пакетів потрібно буде повторно передавати, оскільки один з перших пакетів у пакеті загубиться.


Гаразд, підводячи підсумок: Для приватного сервера з initcwnd, встановленим лише для правильних маршрутів, це хороше поліпшення інтерактивності для користувачів.
Томаш

0

Я не думаю, що я повністю розумію, про що ви просите, тому ось спроба відповісти:

Перш за все, те, що ви намагаєтеся зробити, має сенс лише на стороні, що надсилає, а не на стороні, що приймає. Тобто вам потрібно змінити файловий сервер, а не приймач. Якщо припустити, що це ви робите:

Зміна initcwnd на (наприклад) 10 означає, що 10 пакетів негайно піде. Якщо всі вони досягнуть своєї мети, ви можете виявити набагато більший вікно в першій RTT через повільний старт (експоненціальне збільшення каскаду). Однак, при втраті пакету, cwnd зменшиться вдвічі, і оскільки ви розриваєтеся на 10 пакетів, у вас буде значна кількість повторних передач, тому у вас може виникнути більше проблем, ніж ви думаєте.

Якщо ви хочете спробувати щось більш агресивне і бути якимось "грубим" для інших користувачів Інтернету, ніж ви можете замість цього змінити алгоритм контролю перевантаженості на стороні сервера. Різні алгоритми по-різному обробляють cwnd. Майте на увазі, що це вплине на всіх користувачів, якщо ваше програмне забезпечення на стороні сервера не змінить це з'єднання (у чому я дуже сумніваюся). Перевага тут полягає в тому, що алгоритм буде діяти навіть після втрати пакету, тоді як initcwnd не гратиме великої ролі.

/ proc / sys / net / ipv4 / tcp_congestion_control - це місце, де ви змінюєте алгоритм контролю заторів.

FWIW для таких невеликих RTT (50 мс) і для середніх або великих файлів initcwnd не повинен сильно впливати на вашу середню швидкість. Якщо втрати пакету не буде, то (тобто жирова труба) cwnd буде подвоюватися на кожній RTT. З RTT = 50 мс на жировій трубі, ви помістите 20 RTT за першу секунду, тобто впоратися ;-)

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