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

TheRouter, NAT, DPDK, 6Mpps

Привет!

 

Год назад, прослушав интервью с Luke Gorrie и решив, что не боги горшки обжигают, начал

пилить свой машрутизатор. Правда, по дороге snabbswitch отвалился, зато нашелся DPDK и

Русикевичус с NPF. В итоге хочу поделиться своей игрушкой. Очень очень альфа. Можно

поиграться в качестве домашнего раутера. Поддерживает динамическую маршрутизацию, NAT,

разные ethernet инкапсуляции, пережевывает на хорошем десктопном железе 6Mpps с включенным

натом и 1 миллионом трансляций. Возможно и больше, пока выжал из statefull генератора WARP17

на простых core i5 только по 3Mpps в кажду стороную.

 

Пока не решил, как быть дальше, поэтому исходники самого раутера пока не даю,

выложил собранную версию под 4 сore cpu. Кому не страшно в песочнице можно запустить.

 

https://github.com/alexk99/the_router

 

P.S.

зачем все это пишу? хочется найти или не найти стимулов куда-то с этим хозяйством

отправиться дальше или решить, что фан закончился, технологии изучены, хватит.

Share this post


Link to post
Share on other sites

Хорошая тема) Вопрос в качестве и цене. Но линукс легко роутит десятки гигабит без проблем. Так что 6 mpps - это мало.

Edited by pavel.odintsov

Share this post


Link to post
Share on other sites

6Mpps - это при среднем размере (800 байт) пакета 40 гбит/с. Я делал нагрузочные тесты, все подробности которых описаны по ссылке. В этих тестах линукс начинал терять пакеты где-то на 3Mpps на том же железе. Это все с натом. Без ната это практически wire speed, но совершенно не интересно - это территория коммутаторов.

 

Я как раз хотел создать отдельную тему о тестировании NAT в linux c помощью warp17. Идеальный инструмент ведь для таких целей. создает огромные нагрузки и не просто пакетами, а настоящии tcp сессиями. Можно отдельно простестировать влияние любого параметра на результвт и очень быстро.

Edited by kisa

Share this post


Link to post
Share on other sites

очень интересно если бесплатно или недорого :-)

Ни о какой речи о деньгах я не веду. Это не готовое для продакшена решение. Нет логгирования сессий, нет дополнительных нат алгоритмов вроде pptp. Но, это все несложно сделать.

Share this post


Link to post
Share on other sites

1. на дпдк можно сильно больше.

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

Вон скат - суть тоже самое, или rdp.ru барыжит натилками и пр на тех же принципах которые уже по 110г на таз пропускают.

Share this post


Link to post
Share on other sites

1. на дпдк можно сильно больше.

можно, я привел цифры для десктопного железа. С серверами за 20$k будет сильно больше и более лучше.

 

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

Вон скат - суть тоже самое, или rdp.ru барыжит натилками и пр на тех же принципах которые уже по 110г на таз пропускают.

весь вопрос в цене, бесплатных решений или хотя бы с ценником меньше 5 нулей я не видел.

Буду рад если поделитесь.

Share this post


Link to post
Share on other sites

Так искать надо, я скорее сочувствующий теме и поэтому просто помню что часто всплывают упоминания что то там на нетмапе то тут на дпдк то ещё где на пфринг пишут очередной улучшатель кармы интернета на своей или ещё какой то либе.

Share this post


Link to post
Share on other sites
Но линукс легко роутит десятки гигабит без проблем. Так что 6 mpps - это мало.

роутить и натить не одно и то же. десятки гигабит и десятки mpps совсем разные вещи.

Я не часто на форуме, но только и вижу, как у всех работают наты на целеронах, но ни одного практического результата толком не видел.

 

Автор молодец! я лично тоже не нашел готового решения, а искал прилично. Уже ушел на ваш гит, пробовать тестить.

Share this post


Link to post
Share on other sites

Уже ушел на ваш гит, пробовать тестить.

Сейчас выложена версия, собранная под 4 ядра. Если нужно больше - напишите, я соберу под нужное.

 

Еще из моментов по производительности, если кто будет тестить именно ее. Я не делал никаких тестов на многопроцессорных машинах, у меня их просто нет.

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

 

Ну и сами сетевухи, в идеале интелловские. Я тестил на x520.

Edited by kisa

Share this post


Link to post
Share on other sites

можно собрать на 8 ядер?

хочется попробовать поставить на бордер 4х 10г интерфейса 2 фулл вью, скажите а два порта в бондинг можно объединить(lacp)?

Share this post


Link to post
Share on other sites

можно собрать на 8 ядер?

хочется попробовать поставить на бордер 4х 10г интерфейса 2 фулл вью, скажите а два порта в бондинг можно объединить(lacp)?

на боевой бордер, в перспективе или сейчас? Если сейчас, пожалуйста, не делайте этого. Это же первый билд, там багов наверное.

сейчас бондинга нет, но в DPDK такая фича есть. И в моих планах на следующую версию он тоже есть.

 

про версию под 8 ядер я дам знать.

Share this post


Link to post
Share on other sites

без бондинга смысла нет, подождем...

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

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

 

Я, например, не тестировал заливку реальных таблиц маршрутизации. Я только делал синтетические тесты, заливая архивы full table через bgpsimple.

Share this post


Link to post
Share on other sites

Я к тому, что стратегия дождаться хорошей работающей версии замечательна, но в случае the_router можно и не дождаться,

т.к. просто новые версии не увидят свет, меня ведь никто не спонсирует, армии тестировщиков у меня тоже нет.

 

Т.е. бесплатная версия она не может быть бесплатной, так или иначе кто-то за нее в том или ином виде должен

заплатить, тестированием, участием, железками или еще чем-то.

Share this post


Link to post
Share on other sites

https://wiki.fd.io/view/VPP

 

Тоже на DPDK. В каком-то виде используется в софтовых цисковских роутерах. В том, что отдали в open source есть NAT и ipfix неизвестного уровня стабильности.

 

В части интеграции с userspace можно посмотреть этот проект из SB:

 

https://wiki.fd.io/view/VPP_Sandbox/router

Share this post


Link to post
Share on other sites

https://github.com/Gandi/packet-journey

 

Бондинг можно легко дописать. Его умеет сам DPDK.

Более того, похоже, что можно попробовать даже ничего не писать. А обойтись созданием bond интерфейса через EAL command line параметры.

В DPDK документации по бондингу (9.3.2. Using Link Bonding Devices from the EAL Command Line) http://dpdk.org/doc/guides/prog_guide/link_bonding_poll_mode_drv_lib.html сказано, что созданные таким образом порты для приложения должны быть неотличимы от обычных портов и любое приложение dpdk можно запустить на bond устройствах.

Share this post


Link to post
Share on other sites

VPP - очень крутой проект. Но в их доках черт ногу сломит. Такой аккуратности и доступной документации как у DPDK там, к сожалению, даже близко нет.

Используют DPDK только для доступа к железу, высокоуровневые DPDK библиотеки типа LPM вообще не используют.

 

Очень интересная про них статья тут http://blogs.cisco.com/sp/a-bigger-helping-of-internet-please

Share this post


Link to post
Share on other sites

высокоуровневые DPDK библиотеки типа LPM вообще не используют.

Да, все верно. Идея batching-а пакетов для оптимизации использования D- и I- кеша процессора появилась в недрах Cisco задолго до DPDK.

 

У Dave Barach даже патент есть, он кстати и руководит open source проектом. https://www.google.ch/patents/US7961636

Share this post


Link to post
Share on other sites

высокоуровневые DPDK библиотеки типа LPM вообще не используют.

Да, все верно. Идея batching-а пакетов для оптимизации использования D- и I- кеша процессора появилась в недрах Cisco задолго до DPDK.

 

У Dave Barach даже патент есть, он кстати и руководит open source проектом. https://www.google.ch/patents/US7961636

Патенты вещь мутная. Вот интересно, software pipelining https://en.wikipedia.org/wiki/Software_pipelining благодаря

которому он утверждает, что победил memory latency и может обрабатывать сколько угодно большие таблицы вроде arp, fib и т.п. уж точно

до них появились, это тоже часть их патента?

Share this post


Link to post
Share on other sites

Интересно будет взглянуть на исходники. Спасибо за ссылку.

Как быстро он решил проблему c ARP, просто все в линукс отправляет.

Я честно реализовал свой arp движок. В качестве бонуса я могу создавать тысячи виртуальных интерфейсов, не напрягая ядро linux.

И как следствие в качестве возможного направления развития думал о простом брасе: прикрутить аля cisco dhcp helper, raduis для авторазиции и резалку скорости.

Share this post


Link to post
Share on other sites

В качестве бонуса я могу создавать тысячи виртуальных интерфейсов, не напрягая ядро linux.

Достаточно усилий приложено в последние годы, чтобы масштабировать ядро для работы с тысячими интерфейсов (речь шла, насколько я помню, о скорости их создания/удаления, изначально с этим были большие проблемы).

 

Мне кажется, что наиболее правильно делает 6WIND со своим коммерческим Virtual Accelerator. Он максимально прозрачен для ядра и остального userspace. В стиле: вот у тебя настроенный Linux-роутер, который пропускает около 8 Mpps в секунду в режиме forwarding, и вот ты запускаешь их решение и он уже позволяет пропустить 80 Mpps. Красота.

 

В демонстрации можно увидеть идею, если присмотреться

Share this post


Link to post
Share on other sites

В качестве бонуса я могу создавать тысячи виртуальных интерфейсов, не напрягая ядро linux.

Достаточно усилий приложено в последние годы, чтобы масштабировать ядро для работы с тысячими интерфейсов (речь шла, насколько я помню, о скорости их создания/удаления, изначально с этим были большие проблемы).

Одно дело быстро создавать, совсем другое гонять в них данные из юзер спейса.

 

В демонстрации можно увидеть идею, если присмотреться

Конечно идея красивая. Но спускаясь на землю, в этом демо, похоже, просто форвардинг. Про NAT у них написано, что поддерживается.

Но я верю тестам. С появлением WARP17 протестировать сколько может выжать NAT или просто conntrack стало элементарно и наглядно: вот кол-во одновременных сессий, вот скорость их создания, вот общий пакетрейт.

 

У кого-нибудь реально использует их акселератор? Какие впечатления?

Share this post


Link to post
Share on other sites

Virtual Accelerator - это не вещь для конечных пользователей. 6WIND производит софт для... производителей ПО! То есть они своего рода сугубо вендор библиотеки, на которой в свою очередь сильные мира сего пишут свое ПО. Подозреваю, цена там заоблачная, так как в свое время без личной встречи её называть отказались.

 

Если же интересно, сколько на таком можно заработать, то просто возьмите цену Б/У MX80 или чего-либо из цисок, это именно тот класс дивайсов, с которым вы пытаетесь конкурировать. А они я скажу очень фичастые.

Edited by pavel.odintsov

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