Перейти к содержимому
Калькуляторы

Как мы 10Gigabit на Linux роутере маршрутизировали

Материал:

Когда я впервые увидел описание Intel Ethernet-контроллера на 10 гигабит, с его аппаратной возможностью распараллеливать входящий поток на несколько очередей приема, еще тогда закралась мысль: вот где можно применить многоядерные системы. Но так, как на те времена программная структура ядра Linux, еще не совсем была готова к приему пакетов с разных очередей, не говоря уже про распараллеливание отправки пакетов в сетевую плату, идея была отложена в долгий ящик. И вот, как-то, проводя очередной софт-апгрейд одного из серверов (не помню уже, что делал этот сервер), решил задержать свой взгляд на сетевой части ядра Linux - а что же сменилось там?

 

Полный текст

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Гость Кужукеев Рустем www.mcn.ru

прям ностальгия детства напала, когда мы активно перепрошивали eeprom и пользовались бездисковыми терминалами )) конечно PC based маршрутизация, это все-таки пушка для воробьев, но все же, описанное выше, это действительно важно. Спасибо автору.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А можно по-подробнее о конфигурации сервера и его стоимости?

Изменено пользователем sdy_moscow

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

... конечно PC based маршрутизация, это все-таки пушка для воробьев...

Обоснуйте пожалуйста, в контексте статьи. Просто интересно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Гость vitalay

А вы не пробовали пользоватся Mikrotik Router OS на PC based routers? Просто интерестно как она себя на таких нагрузках поведет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Гость Uno

У Микротика до сих пор большие проблемы с использованием многоядерности. Поддержка чисто формальная.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А можно по-подробнее о конфигурации сервера и его стоимости?
Если тема интересна, то напишу на днях продолжение, о найденных интересных особенностях и тестированию и на других процессорах и на интел платформе последней топовой, нам сказали предоставят сервер.

Про конфигурацию:

Tyan B8236G24V4H Dual G34 barebone

Intel 10 Gigabit Dual Port Server Adapter X520-SR2 {E10G42BFSR}

DDR3-1333 2048MB unbuffered ECC Kingston {KVR1333D3E9S/2G}

Ну процессоры от АМД разные ставили, лучше всего показал себя как я и предполагал в первой статье - это CPU AMD Opteron 8-core 6136 {OS6136WKT8EGO}

 

Еще нашли как проводить стрес тесты мелкими пакетами, тоже опишу что мы получили. И еще на следующей недели ожидаем топовый интел на тест где будет 2 ксеона на 6 ядер по 3.33 ГГц каждое, тоже интересно сравнить с амд платформой топовой.

 

Стоимость сервера точно не скажу, но до 5 тыс у.е., и есть еще что уменьшать, например, память по гигу планки и сетевая, можно купить без оптических модулей в наборе, что тоже будет дешевле существенно. Просто пока тестировали что было в наличии.

Изменено пользователем JMan

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вообще интересно, пока скорее с теоретической точки зрения, но кто знает, может где пригодится :)

Спасибо за статью, очень интересно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А как насчет под фрей потестировать?
Честно, в Фре ядре я 0, в линухе я то смог полностью проанализировать стек сети и понять как будет идти пакет и что где надо подкрутить абы производительность поднять.

Ибо для реальной сети прошлось капитально подкрутить фаст роут кеш ибо вы же читали сколько фловов там шло. Также оказалось что с учетом того что архитектура памяти НУМА, то лучше этот кеш между всеми НУМА узлами разделить, что тоже дало свои бонусы и устранило узкое место что все ядра лезли в один канал ОЗУ. Как такое реализовать во Фре честно не знаю. И еще надо было для реальной сети, сменить как ядро хранит таблицу маршрутизации, по умолчанию там многомерный масив хешей (отдельный хеш под каждую маску подсети типа /31 /30 /29 и т.п.). Алгоритм хранения и выборки маршрута в таблице маршрутизации был заменен на бинарное дерево. Причем все было сделано из стандартных модулей и настроек ядра, единственную строчку кода что я поменял, это я описал в статье, в драйвере ВЛАНов. То есть, я только конфигурацию ядра подогнал под реальную задачу, и задал нужные параметры запуска ядра, и сменил лишь одно место исходного кода.

В следующей части я опишу более подробно какие настройки делались. А про Фрю честно надо другой специалист, иначе тут будут не равные условия тестирования.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Автору респект за проделанную работу, обязательно надо писать мануал с конфигами, не стесняясь переводить на буржуйский и лезть на какой нибудь импортный сайт. Чем больше людей узнают и проверят, тем быстрее все отладится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

JMan: можете написать поподробнее про оптимизацию?

+1 ОЧЕНЬ интересно!!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Автору респект за проделанную работу, обязательно надо писать мануал с конфигами, не стесняясь переводить на буржуйский и лезть на какой нибудь импортный сайт. Чем больше людей узнают и проверят, тем быстрее все отладится.

Постараюсь как можно подробнее описать во второй части. Перевести на буржуйский не особая проблема, неужто оно так будет интересно буржуям? А что отлаживать, я ничего экспериментального принципиально не включал в ядре, а ту правку что я сделал в ВЛАН драйвере, это лишь убирание лишнего лока, который в виртуальном устройстве точно не надо, пример взял с устройства bond с линуха.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А как насчет под фрей потестировать?
Разницы не будет особой.

 

Автору респект за тест. Но есть вопросы:

1. Размер таблицы маршрутизации какой реально был ? Т.е. с fv все понятно, а сколько маршрутов "во внутрь" ?

2. Размер фаервола: сколько правил в FORWARD ? Какие правила ? Есть ли ipset ?

3. Какой драйвер igb: стоковый из ядра или тот, что у intel на сайте лежит ?

4. Какие параметры в interrupt moderation ?

5. Как реагирует роутер на резкое изменение таблицы маршрутизации (когда 10к маршрутов, например, пропадает) ? Меняется ли латентность ?

6. Сколько реально было neighbor-ов у роутера (размер таблицы arp) ?

 

Да, и все таки, что в ядре правилось ? И что за баг в vlan_dev_hwaccel_hard_start_xmit (можно просто в виде unified diff ) ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Еще хотелось бы проверить NAT и нарезку скорости
На конфигурации Dual Xeon CPU X5650 + Dual Port 10G Ethernet 82598EB удалось достичь 800 Kpps (3/3.5 Gbps вход/исход) NAT+Forwarding-трафика (без BGP) при 50-60% загрузке всех 24 ядер. После этой границы загрузка процессоров нелинейно возрастала до 100%. В случае использования HTB-шейпера, при исходящем трафике больше ~275 Kpps (~2.3 Gbps) наблюдалось падение его скорости на разницу превышения входящим трафиком 250 Kpps (~2 Gbps).

 

Однако, это всё оказалось не столь важно, начиная с ядер 2.6.28-f11 и вплоть до 2.6.32-el6 использовать NAT на скоростях больше 1 Gbps практически не было возможности, ошибка в модуле nf_nat валит ядро до двух раз в сутки. Более того, ни одного правила в таблице NAT может и не быть, достаточно загруженного модуля nf_nat даже без iptable_nat.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Гость Dark Angel

2Iva: а если использовать хешированные фильтры HTB спасает ситуацию? 275Кpps для 24-х ядер - слышком мало, даже с натом, форвардингом и даже если бы у вас была генерация флова.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А как насчет под фрей потестировать?

А зачем ? Оно там и так работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

2Гость_nag-f_*: а что, HT может давать такую деградацию? В 11 раз? Что-то мне кажется дело не в HT.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

2Iva: кошмар, какие 24 ядра :) HT отключите! И получите свои 3Мpps как минимум.

IMHO отключать не надо, просто обработку прерываний прибить к реальным ядрам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

<br />2Гость_nag-f_*: а что, HT может давать такую деградацию? В 11 раз? Что-то мне кажется дело не в HT.<br />
<br /><br /><br />

На интеле тестировали НТ дает деградацию в 30-40% при загрузке свыше 55%. Подтверждаю проверено.

 

<br />2Iva: а если использовать хешированные фильтры HTB спасает ситуацию? 275Кpps для 24-х ядер - слышком мало, даже с натом, форвардингом и даже если бы у вас была генерация флова.<br />
<br /><br /><br />

HTB в линухе может работать только на одном проце и лочит отправку всех очередей, я писал в статье нарезка скорости стандартными средствами не работает на всех ЦПУ. Есть у меня одна идея как это можно обойти но слишком костыльный метод.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

<br />
А как насчет под фрей потестировать?
<br />Разницы не будет особой.<br /><br />Автору респект за тест. Но есть вопросы: <br />1. Размер таблицы маршрутизации какой реально был ? Т.е. с fv все понятно, а сколько маршрутов "во внутрь" ?<br />2. Размер фаервола: сколько правил в FORWARD ? Какие правила ? Есть ли ipset ?<br />3. Какой драйвер igb: стоковый из ядра или тот, что у intel на сайте лежит ? <br />4. Какие параметры в interrupt moderation ?<br />5. Как реагирует роутер на резкое изменение таблицы маршрутизации (когда 10к маршрутов, например, пропадает) ? Меняется ли латентность ?<br />6. Сколько реально было neighbor-ов у роутера (размер таблицы arp) ?<br /><br />Да, и все таки, что в ядре правилось ? И что за баг в vlan_dev_hwaccel_hard_start_xmit (можно просто в виде unified diff ) ?<br />
<br /><br /><br />

1. Размер таблицы 337236 маршрутов

2. FORWARD пустой это просто пограничный маршрутизатор был.

3. igb с интела ибо ядровый не понимал команду отключения хеша флов привязки к ядру, с ней дико тормозило и теряло пакеты. Хеш таблица очень маленькая, в чипе памяти мало 512 КБайт всего.

4.interrupt moderation по умолчанию с драйвера, динамический.

5. Пробовали ложить один из фуль вью, и перестроило более 100 тыс маршрутов на латентность не влияло, ибо маршрутизация в ядре, а перестройка таблицы из юзер спейса идет (команды) и всегда меньше приоритет имеет чем BH потоки ядра. Время перестроения точно не засекали но на глаз пару сек.

6. Арп таблица была в районе 194 записей и до 270 иногда подымалась.

 

Про драйвер ВЛАН diff прицепил. Там фикс по очередям и убрал глобальный лок при отправке в в влан пакетов ибо это логическое устройство зачем он нужен (у него и дисплины то нету абы положить в очередь пакет, елси один проц уже занял отправку) пусть уже на уровне реальной сетевой это делает.

vlan_dev.c.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

4.interrupt moderation по умолчанию с драйвера, динамический.
А сколько прерываний в секунду оно генерировало ?

 

Про драйвер ВЛАН diff прицепил. Там фикс по очередям и убрал глобальный лок при отправке в в влан пакетов ибо это логическое устройство зачем он нужен (у него и дисплины то нету абы положить в очередь пакет, елси один проц уже занял отправку) пусть уже на уровне реальной сетевой это делает.
Посмотрел я патч, вроде бы да, lock на отправке в vlan не нужен, но у вас он все равно есть, где счетчики пакетов прибавляются. Тогда смысл ? lock-lock ... unlock-unlock будет то же по времени, что lock .. unlock lock +++ unlock . Ну последний lock-unlock кусок будет меньше по времени. Правильней бы в dev_queue_xmit() (а лучше вообще в HARD_TX_LOCK) проверять, что если текущий txq->xmit_lock_owner == smp_processor_id(), то не лочить очередь - оно уже залочено (надо будет это проверить :) )

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.