Jump to content
Калькуляторы

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

Материал:

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

 

Полный текст

Share this post


Link to post
Share on other sites
Guest Кужукеев Рустем www.mcn.ru

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

Share this post


Link to post
Share on other sites

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

Edited by sdy_moscow

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
Guest vitalay

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

Share this post


Link to post
Share on other sites
Guest Uno

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

Share this post


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

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

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 тыс у.е., и есть еще что уменьшать, например, память по гигу планки и сетевая, можно купить без оптических модулей в наборе, что тоже будет дешевле существенно. Просто пока тестировали что было в наличии.

Edited by JMan

Share this post


Link to post
Share on other sites

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

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

Share this post


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

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

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

Share this post


Link to post
Share on other sites
Guest Сbon

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
А как насчет под фрей потестировать?
Разницы не будет особой.

 

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

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

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

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

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

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

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

 

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

Share this post


Link to post
Share on other sites
Еще хотелось бы проверить 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.

Share this post


Link to post
Share on other sites
Guest Dark Angel

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

Share this post


Link to post
Share on other sites
Guest Олесь

интересно как себя такая система поведёт в роли PPPoE терминатора?

Share this post


Link to post
Share on other sites
А как насчет под фрей потестировать?

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

Share this post


Link to post
Share on other sites
Guest nag-f

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
<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 в линухе может работать только на одном проце и лочит отправку всех очередей, я писал в статье нарезка скорости стандартными средствами не работает на всех ЦПУ. Есть у меня одна идея как это можно обойти но слишком костыльный метод.

Share this post


Link to post
Share on other sites
<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

Share this post


Link to post
Share on other sites
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(), то не лочить очередь - оно уже залочено (надо будет это проверить :) )

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this