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

TheRouter, NAT, DPDK, 6Mpps

А что кстати на тему поддержки NAT helpers для ftp, sip и pptp?

ftp и sip никому не сдались.

вот pptp нужен. Когда дойдет до боевого применения я напишу. Сейчас другие задачи.

 

реассемблинга IPv4 фрагментов?

Сообщение отредактировал pavel.odintsov: Сегодня, 03:50

сборка пакетов есть.

Share this post


Link to post
Share on other sites

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

что в сочетании со spinlock реализацией влияет, но не думаю, что критично на производительность, иначе бы тесты warp17 не проходили. А в них скорость создания сессий была приличная.

CPS - это один из ключевых параметров NAT. Не столь дорога работа с десятками млн сессий, как скорость создания и удаления этих сессий.

Насколько я помню, раньше в DPDK каждый mutex стоил 400ns, с вытекающими последствиями для воркеров.

Если я не ошибаюсь, в том же линуксе, в свежих версиях достаточно замороченный механизм добавления записей, через rhashtable, очень схожий с тем, что описал Ivan_83, там так сделано не в целях повышения производительности NAT forwarding, имхо этого все равно недостаточно для высокого CPS.

 

Исходя из этого, чтобы избежать гонок (race/contention) во время добавления сессии, вместо одного списка нужно использовать N списков, где N количество рабочих потоков (lcore).

Каждый поток будет сохранять свои сессии в свой список. Таким образом race/contention будет исключен, т.к. потоки не будут соперничать за один и тот же список.

Что-то мне подсказывает, что это не самый удачный подход, но чтоб основательно аргументировать - это надо прокрутить в мозгах все худшие варианты.

 

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

Share this post


Link to post
Share on other sites

Что то далеко от темы ушли все. Я же лично думаю, что процессоры замерли в своей производительности, а сетевые потребности растут. Любая новая идея и продукт требует как минимум внимания. А дальнейшая разработка, поддержка и оплата, это уже дело автора, ну и в конце концов любой код станет опенсорсом или кто-то догадается повторить тоже самое в опен сорс, те же китайцы :)

Если я не ошибаюсь, в том же линуксе, в свежих версиях достаточно замороченный механизм добавления записей, через rhashtable, очень схожий с тем, что описал Ivan_83, там так сделано не в целях повышения производительности NAT forwarding, имхо этого все равно недостаточно для высокого CPS.

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

Все, почему то прицепились к хашам ната, он не требовательный, посмотрите перф топ. Глобальная проблема как мне кажется все-таки отправка пакетов и разброс их в qdisc в очереди, вот если этот процесс избавить от локов, тогда и роутинг и фул стейты заживут (в текущем линуксе), а да, как раз фул стейты кушают процессорное время по более поиска и всего остального, а избавится от них можно отказавшись от фулстейт и только. Возможно превратить контрак в разные инстансы на процессоры с прибиваниям к очередям и есть альтернативное решение, но опять же исходники кто видел, знает, проще написать с нуля, а если это будет работать, то pptp и другие плюшки вопрос только времени.

Edited by nshut

Share this post


Link to post
Share on other sites

А я бы заплатил (вменяемую сумму) за Софт-Брас который умеет все тоже самое как SmartEdge :) Без шуток :)

Разумеется с производительностью на уровне возможностей железа.

Но все пилят роутеры и Наты.

Share this post


Link to post
Share on other sites

CPS - это один из ключевых параметров NAT. Не столь дорога работа с десятками млн сессий, как скорость создания и удаления этих сессий.

А можете поделиться этими цифрами, я у себя на сети такую статистику не собираю, но тоже включу.

 

Насколько я помню, раньше в DPDK каждый mutex стоил 400ns

DPDK здесь не причем. Все что часть NPF - это обычная библиотека. Я включил использование spinlock везде где используются блокировки. Там совсем другие

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

 

Если я не ошибаюсь, в том же линуксе, в свежих версиях достаточно замороченный механизм добавления записей, через rhashtable, очень схожий с тем, что описал Ivan_83, там так сделано не в целях повышения производительности NAT forwarding, имхо этого все равно недостаточно для высокого CPS.

Вот вы начали сравнивать теплое с мягким: механизм добавления conntrack сессии в главную базу для последующего поиска - в линуксе это классический hash, где бакет - это линкованный список и NPF второстепенный механизм добавления сессии в список, который даже не используется в поиске и почти в работе.

 

Чтобы сравнивать корректно, смотрите в NPF код работы с сессиями, как они ищутся, как добавляются. Это совсем другой код. Так ключевой момент cuckoo hash.

Edited by kisa

Share this post


Link to post
Share on other sites

А я бы заплатил (вменяемую сумму) за Софт-Брас который умеет все тоже самое как SmartEdge :) Без шуток :)

Разумеется с производительностью на уровне возможностей железа.

Но все пилят роутеры и Наты.

 

Движение в сторону простых функций софт браса было у меня как один из вариантов развития.

А какой список минимальных фич для вас это уже брас?

 

Раутер - это база, без которой дальше не продвинуться.

Share this post


Link to post
Share on other sites

Все, почему то прицепились к хашам ната, он не требовательный, посмотрите перф топ

 

Вот top.

Это warp17 прогоняет миллион сессий через linux. Сессий не просто 1M, они постоянно создаются и умирают.

К сожалению CPS не скажу, вот не записал. Но судя по всему очень приличный, т.к. размер tcp сессии был 64 байта.

Т.е. фактические открытие чуть чуть данных и сразу закрытие.

 

Это ровно тот же тест, который я у себя описал для the_router.

Все конфиги у меня на странице. Лабу легко повторить.

 

   PerfTop:   23344 irqs/sec  kernel:99.8%  exact:  0.0% [4000Hz cycles],  (all, 6 CPUs)
-----------------------------------------------------------------------------------------------------------------------------------------------------

   19.83%  [kernel]       [k] __nf_conntrack_find_get
    6.80%  [kernel]       [k] _raw_spin_lock
    6.77%  [kernel]       [k] fib_table_lookup
    4.31%  [kernel]       [k] nf_iterate
    3.59%  [kernel]       [k] ipt_do_table
    3.45%  [kernel]       [k] nf_nat_ipv4_fn
    3.06%  [ixgbe]        [k] ixgbe_clean_rx_irq
    3.02%  [kernel]       [k] swiotlb_sync_single
    2.96%  [kernel]       [k] __inet_lookup_established

 

Так вот - поиск по хэшу ключевой момент. Если не оптимизировать длину хэша, то начинался ужас ужас.

Но даже с оптимальной длиной бакета, когда в нем всего несколько записей (в идеале парочка) вот такая картина.

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

 

С cuckoo же hashaми в the_router картинка абсолютно другая. Там хэш постоянно сам себе перестраивает, оптимально распределяя данные

по бакетам.

Share this post


Link to post
Share on other sites

Движение в сторону простых функций софт браса было у меня как один из вариантов развития.

А какой список минимальных фич для вас это уже брас?

Раутер - это база, без которой дальше не продвинуться.

просто опишу, что нужно для замены smartedge:

- создание сессии по разным событиям, l2/l3 dhcp (mac/opt82), unkonw ip address, vlan.

- ну соответственно терминация/маршрутизация l2 клиентов (vlan, qinq vlan)

- dhcp сервер, с выдачей адреса клиенту по radius-аттрибутам

- резалка скорости

- l4 редирект, причем по url а не next-hop

- acl на сессию

ну и разумеется управление всем этим через radius

Share this post


Link to post
Share on other sites

О многом говорить рано, вдруг действительно mutex не проблема и даже хеш будет работать хорошо.

очень рано, тем более тесты подтверждают это.

 

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

Вот вы тестите linux новые ядра, находите что они падают и не стабильны. Другие делают тоже самое - и все сумасшедшие? Не нужно тестировать сразу на тысячах пользователей,

я вот на днях соберу тазик с the_router и поставлю вместо домашнего микротика, приятно будет чуствовать, что под капотом 6Mpps, стоя в интернет пробке.

Share this post


Link to post
Share on other sites

просто опишу, что нужно для замены smartedge:

- создание сессии по разным событиям, l2/l3 dhcp (mac/opt82), unkonw ip address, vlan.

- ну соответственно терминация/маршрутизация l2 клиентов (vlan, qinq vlan)

- dhcp сервер, с выдачей адреса клиенту по radius-аттрибутам

- резалка скорости

- l4 редирект, причем по url а не next-hop

- acl на сессию

ну и разумеется управление всем этим через radius

 

Принято. Спасибо.

Share this post


Link to post
Share on other sites

просто опишу, что нужно для замены smartedge:

- создание сессии по разным событиям, l2/l3 dhcp (mac/opt82), unkonw ip address, vlan.

- ну соответственно терминация/маршрутизация l2 клиентов (vlan, qinq vlan)

- dhcp сервер, с выдачей адреса клиенту по radius-аттрибутам

- резалка скорости

- l4 редирект, причем по url а не next-hop

- acl на сессию

ну и разумеется управление всем этим через radius

accel-ppp

Share this post


Link to post
Share on other sites

Вот вы тестите linux новые ядра, находите что они падают и не стабильны. Другие делают тоже самое - и все сумасшедшие? Не нужно тестировать сразу на тысячах пользователей,

я вот на днях соберу тазик с the_router и поставлю вместо домашнего микротика, приятно будет чуствовать, что под капотом 6Mpps, стоя в интернет пробке.

Ядро - классический опенсорс с огромным коммьюнити, с очень детальным changelog и историей изменений в git. Более того, там присутствует проверка всех патчей мейнтейнерами, есть какое-никакое тестирование, и всегда можно подождать до первой версии -stable, где пофиксят возникшие в первом релизе серьезные проблемы. И я всегда могу откатится на другое ядро или же откатить нестабильные коммиты, если мне нужен какой-то другой функционал из нового ядра.

Плюс наработал кучу своих патчей, которые в mainline наврядли когда-то примут, они им там не нужны.

С опенсорсным путем у вас такая же перспектива думаю есть, особенно если будут зарубежные пользователи.

 

А вместо микротика даже закрытая - вполне пойдет, Микротик вот именно та самая коробка, которую ставить может только небольшая сеть, у которой на другое просто нет денег. Ибо с каждой новой версией у них новые глюки, и подобрать что-то стабильно работающее крайне сложно, везде какие-то плюхи. В итоге приходится разносить функционал и нагружать по минимуму, тогда более-менее сносно работает. Ну и классический пример отвратительного саппорта, любой трудноотлавливаемый баг будет висеть месяцами.

Только вот нужно понимать, что пользователи Микротика за каждую копейку удавятся :)

Share this post


Link to post
Share on other sites

А вместо микротика даже закрытая - вполне пойдет, Микротик вот именно та самая коробка, которую ставить может только небольшая сеть, у которой на другое просто нет денег. Ибо с каждой новой версией у них новые глюки, и подобрать что-то стабильно работающее крайне сложно, везде какие-то плюхи. В итоге приходится разносить функционал и нагружать по минимуму, тогда более-менее сносно работает. Ну и классический пример отвратительного саппорта, любой трудноотлавливаемый баг будет висеть месяцами.

Только вот нужно понимать, что пользователи Микротика за каждую копейку удавятся :)

Да я о том, что я тестировать начну, а не о микротике (на месте микротика дома у меня бывают другие железки), да вообще не о нем речь.

И я о том, что вот с такого тестирования мне хотелось начать: один два, десяток пользователей, постепенно увеличивая нагрузку.

Share this post


Link to post
Share on other sites
реассемблинга IPv4 фрагментов

Зачем это нату и роутеру?

Share this post


Link to post
Share on other sites

Да я о том, что я тестировать начну, а не о микротике (на месте микротика дома у меня бывают другие железки), да вообще не о нем речь.

И я о том, что вот с такого тестирования мне хотелось начать: один два, десяток пользователей, постепенно увеличивая нагрузку.

Ну, даже у меня наверное найдется клиент, который пойдет на какую-то долю риска ради экономии, из небольших. Правда только вспомнилось, у них куда не глянь r8169, multiqueue сетевухи днем с огнем не найти.

Но я участвую только в opensource. Платный/закрытый софт только по нужде, и бизнес необходимости.

Share this post


Link to post
Share on other sites
реассемблинга IPv4 фрагментов

Зачем это нату и роутеру?

Раутеру не обязательно. А nat, если не это простая статика, выполняется на основе отслеживания состояния сессий (tcp, udp или каких-либо еще). Фрагмент невозможно отнести к сессии, в нем только ip заголовок.

Share this post


Link to post
Share on other sites

просто опишу, что нужно для замены smartedge:

- создание сессии по разным событиям, l2/l3 dhcp (mac/opt82), unkonw ip address, vlan.

- ну соответственно терминация/маршрутизация l2 клиентов (vlan, qinq vlan)

- dhcp сервер, с выдачей адреса клиенту по radius-аттрибутам

- резалка скорости

- l4 редирект, причем по url а не next-hop

- acl на сессию

ну и разумеется управление всем этим через radius

 

 

А если рассмотреть совсем минимальную версию, пускай еще не боевую с полным набором фич на все случаи,

но для замены какую-нибудь конкретной инсталляции или специально созданной новой тестовой инсталляции:

 

>> - создание сессии по разным событиям, l2/l3 dhcp (mac/opt82), unkonw ip address, vlan.

какой из эти вариантов самый распространенный?

можно начать с самого простого unclassified ip address или vlan?

 

>> - dhcp сервер, с выдачей адреса клиенту по radius-аттрибутам

т.е. dhcp сервер общается с базой по радиусу и где-то есть radius сервер один

или несколько, объединенных в кластер.

тогда, самым простым решением, на мой взгляд, было бы добавить dhcp relay на брас и отдельное

dhcp решение для сервера, живущее в кластере рядом с radius.

 

- l4 редирект, причем по url а не next-hop

а почему по url, чем плох next-hop?

 

- acl на сессию

насколько сложный нужен acl?

базовые протоколы и порты? или что-нибудь аля лимита сессий в ед. времени? лимита определенных

пакетов в ед.времени?

 

>> ну и разумеется управление всем этим через radius

dhcp через радус, ааа через радиус, а еще что через радиус, acl?

 

вы используете nat на брасах?

или nat где-то отдельно.

 

какой вариант экспорта статистики, netflow?

Share this post


Link to post
Share on other sites

А можете поделиться этими цифрами, я у себя на сети такую статистику не собираю, но тоже включу.

Около 15-18k, но сейчас уже где-то 50% от ЧНН и нет никаких экстремальных нагрузок (бывает выходят кривые приложения и т.п., которые могут пофлудить на нат)

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