Jump to content

netmap и будущее софтовых маршрутизаторов


Recommended Posts

Когда-то мы уже обсуждали маршрутизацию на тазиках на базе netmap/dpdk. С тех пор прошло много времени, на свет появилось несколько интересных проектов. Всем стало понятно, что старым сетевым стэкам freebsd и linux пора на пенсию.

Коммерческие стэки на базе dpdk, типа 6wind, показали увеличение производительности на порядок. Даже vyatta интегрировала стэк на базе dpdk в коммерческую версию своего продукта - vyatta 5600.

 

Но нас интересует open source. И похоже здесь первым кандидатом в полноценные роутеры будет ни что-нибудь, а pfSense! О чем пишет Джим в блоге: https://blog.pfsense.org/?p=1866

Начиная с версии 3.0 в pfSense планируется внедрение стэка на базе netmap (ранее планировалось dpdk в 2.3, но от идеи отказались в пользу netmap). Для этого разработчиками pfSense был начат проект netmap-fwd, который на данный момент является простенькой drop-in заменой ядерного роутера для FreeBSD и может форвардить 1 млн PPS на атоме на одном ядре, т.е. пятикратное увеличение производительности. Никаких оптимизаций пока не делалось. BGPD тоже пока нет, но все в планах.

 

В общем следите за pfSense, пробуйте netmap-fwd, старые стэки уже не подходят для 10G.

Edited by ttttt
Link to post
Share on other sites

а о чем говорить если пока кроме фреймворков толком ничего  нету....

поставят это на рельсы - будет что тестировать и обсуждать

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

Edited by Lynx100
Link to post
Share on other sites

Для продакшена сыро.

Когда появится поддержка Реалтека! тогда и будем тестить :)

ну типа интелы уже .... :)  но да очень сыро пока, хотя некоторые проекты на них уже делают вроде как

Link to post
Share on other sites

Когда появится поддержка Реалтека! тогда и будем тестить :)

Его нетмап поддерживает, как и другие карты: cxgbe, em, igb, ixgbe, ixl, lem, re

 

Вот слайды из презентации, по ним лучше понять, что такое netmap-fwd и как он работает:

https://github.com/NetgateUSA/netmap-fwd/raw/master/netmap-fwd.pdf

Link to post
Share on other sites

 

Когда появится поддержка Реалтека! тогда и будем тестить :)

Его нетмап поддерживает, как и другие карты: cxgbe, em, igb, ixgbe, ixl, lem, re

 

Вот слайды из презентации, по ним лучше понять, что такое netmap-fwd и как он работает:

https://github.com/NetgateUSA/netmap-fwd/raw/master/netmap-fwd.pdf

 

в линуксе вроде риалтек не поддерживается

 

"This is a preliminary version supporting the ixgbe and e1000/e1000e driver. Patches for other devices (igb, r8169, forcedeth) are untested and probably not working yet.

Link to post
Share on other sites

но в любом случае это будет маршрутизация (коммутация) через память (trouch memory switching).

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

если интересно - можем обсудить.

Link to post
Share on other sites

но в любом случае это будет маршрутизация (коммутация) через память

ну почему, есть же DDIO в xeon'ах, кому нужно много-много форвардить, там через кэш уже

 

Но в общем выкладывайте, все интересно.

Link to post
Share on other sites
Общий смысл в том, что-бы не таскать маршрутизируемые данные дальше (контроллера) сетевого интерфейса (группы сетевых интерфейсов) к процессору общего назначения. 

 

В целом задачу L3 маршрутизации можно разделить на две основных задачи пересылка данных между интерфейсами – forwarding и поиск маршрутов в таблице маршрутизации (lookup)

 

В своих экспериментах, которые я проводил пару лет назад, еще до войны я использовал ПЛИС ALTERA Cyclone-1 на 5К элементов и подключенный к нему MII Ethernet PHY (RTL8201BL) а также ИС SSRAM IDT71V546S 128Kx36 в качестве пакетного буфера. Древнесть элементной базы (12-15 лет) обусловлена ее наличием и принципом протянул руку до полки.

Особенности применяемой SSRAM позволяли эмулировать в ПЛИС ее работу как двухпортовой (временное разделение). Также для экономии ног между ПЛИС ипользовались только 8 линий данных SSRAM – т.е. фактическая конфигурация 128Кх8 (для этих тестов все-равно более чем избыточна).

 

В качастве lookup engine использовал простую затычку на FPGA (отдельный корпус) – 8 статических записей.

Физический интерфейс Ethernet всего один , и маршрутизация выполняется между  VLAN.

 

Общий алгоритм работы следующий:

  1. RXU принимается пакет в пакетный буфер, во время приема сразу подсчитывается контрольная сумма Ethernet, извлекается Ethernet и IP заголовок.
  2. Если FCS корректна – запись в буфере помечается как готовая к лукапу и заголовок передается в lookup engine иначе запись используется для приема следующего пакета.
  3. Lookup engine возвращает «паттерн преобразования» - новый DMAC, VID, и пакет в буфере помечается как готовый к передаче.
  4. TXU передает пакет производя преобразования с использованием паттерна преобразования на лету и вычисляя новую Ethernet FCS
  5. по завершении передачи TXU отмечает запись в пактном буфере как свободную.   
 

Ограничения в тестовом окружении:

  • Ststic ARP
  • Обрабатываются только тегированные 802.1q VLAN 
  • Не декрементируется поле TTL IP пакета. 
  • Hardcoded lookup table (routing table)
 

Обоснованно предполагается что на ИС семейства Cyclone 5 возможно реализовать форвардер для 10Г интерфейсов 

Что же касается Lookup Engine – отдельно тестировался в симуляции LE на 16M IPv4 роутов (максимально теоретически возможный BGP full View вследствии полной разагрегации сетей до /24) 

 

Link to post
Share on other sites

 

Общий смысл в том, что-бы не таскать маршрутизируемые данные дальше (контроллера) сетевого интерфейса (группы сетевых интерфейсов) к процессору общего назначения. 
 
В целом задачу L3 маршрутизации можно разделить на две основных задачи пересылка данных между интерфейсами – forwarding и поиск маршрутов в таблице маршрутизации (lookup)
 
В своих экспериментах, которые я проводил пару лет назад, еще до войны я использовал ПЛИС ALTERA Cyclone-1 на 5К элементов и подключенный к нему MII Ethernet PHY (RTL8201BL) а также ИС SSRAM IDT71V546S 128Kx36 в качестве пакетного буфера. Древнесть элементной базы (12-15 лет) обусловлена ее наличием и принципом протянул руку до полки.
Особенности применяемой SSRAM позволяли эмулировать в ПЛИС ее работу как двухпортовой (временное разделение). Также для экономии ног между ПЛИС ипользовались только 8 линий данных SSRAM – т.е. фактическая конфигурация 128Кх8 (для этих тестов все-равно более чем избыточна).
 
В качастве lookup engine использовал простую затычку на FPGA (отдельный корпус) – 8 статических записей.
Физический интерфейс Ethernet всего один , и маршрутизация выполняется между  VLAN.
 
Общий алгоритм работы следующий:
  1. RXU принимается пакет в пакетный буфер, во время приема сразу подсчитывается контрольная сумма Ethernet, извлекается Ethernet и IP заголовок.
  2. Если FCS корректна – запись в буфере помечается как готовая к лукапу и заголовок передается в lookup engine иначе запись используется для приема следующего пакета.
  3. Lookup engine возвращает «паттерн преобразования» - новый DMAC, VID, и пакет в буфере помечается как готовый к передаче.
  4. TXU передает пакет производя преобразования с использованием паттерна преобразования на лету и вычисляя новую Ethernet FCS
  5. по завершении передачи TXU отмечает запись в пактном буфере как свободную.   
 
Ограничения в тестовом окружении:
  • Ststic ARP
  • Обрабатываются только тегированные 802.1q VLAN 
  • Не декрементируется поле TTL IP пакета. 
  • Hardcoded lookup table (routing table)
 
Обоснованно предполагается что на ИС семейства Cyclone 5 возможно реализовать форвардер для 10Г интерфейсов 
Что же касается Lookup Engine – отдельно тестировался в симуляции LE на 16M IPv4 роутов (максимально теоретически возможный BGP full View вследствии полной разагрегации сетей до /24) 

 

:) если пойти дальше - получится Juniper

Link to post
Share on other sites

эту конструкцию не обязательно применять как бордер, думаю вполне можно использовать как агрегатор vlan-per-customer с большим количеством q-in-q интерфейсов (в теории 16М, т.е. полный диапазон q-in-q). я думаю возможен даже ip unnumbered. но при этом конечно потребуется модифицировать логику lookup engine.

 

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

Link to post
Share on other sites

Ну это все наверное будет иметь смысл ближе к 100G.

Тут вон проблема, что мало желающих банально под архитектуру современных процессоров переписать стэк, чтобы лайнрейт 10G тянуть, а вы о FPGA :)

Edited by ttttt
Link to post
Share on other sites

fpga для такой задачи дешевле чем ксеон. и жрет меньше.

основные затраты в разработке - но я вот этим занимаюсь вообще для развлекухи за бесплатно.

Link to post
Share on other sites

 

Общий алгоритм работы следующий:
  1. RXU принимается пакет в пакетный буфер, во время приема сразу подсчитывается контрольная сумма Ethernet, извлекается Ethernet и IP заголовок.
  2. Если FCS корректна – запись в буфере помечается как готовая к лукапу и заголовок передается в lookup engine иначе запись используется для приема следующего пакета.
  3. Lookup engine возвращает «паттерн преобразования» - новый DMAC, VID, и пакет в буфере помечается как готовый к передаче.
  4. TXU передает пакет производя преобразования с использованием паттерна преобразования на лету и вычисляя новую Ethernet FCS
  5. по завершении передачи TXU отмечает запись в пактном буфере как свободную.   
 
Ограничения в тестовом окружении:
  • Ststic ARP
  • Обрабатываются только тегированные 802.1q VLAN 
  • Не декрементируется поле TTL IP пакета. 
  • Hardcoded lookup table (routing table)
 
Обоснованно предполагается что на ИС семейства Cyclone 5 возможно реализовать форвардер для 10Г интерфейсов 
Что же касается Lookup Engine – отдельно тестировался в симуляции LE на 16M IPv4 роутов (максимально теоретически возможный BGP full View вследствии полной разагрегации сетей до /24) 

 

 

свичинг и форвардинг это конечно хорошо, но для полноценного бордера не хватает еще шейпера. Можно ли его реализовать на этом ПЛИС-е ?

Edited by Чучундра
Link to post
Share on other sites

 

 

Общий алгоритм работы следующий:
  1. RXU принимается пакет в пакетный буфер, во время приема сразу подсчитывается контрольная сумма Ethernet, извлекается Ethernet и IP заголовок.
  2. Если FCS корректна – запись в буфере помечается как готовая к лукапу и заголовок передается в lookup engine иначе запись используется для приема следующего пакета.
  3. Lookup engine возвращает «паттерн преобразования» - новый DMAC, VID, и пакет в буфере помечается как готовый к передаче.
  4. TXU передает пакет производя преобразования с использованием паттерна преобразования на лету и вычисляя новую Ethernet FCS
  5. по завершении передачи TXU отмечает запись в пактном буфере как свободную.   
 
Ограничения в тестовом окружении:
  • Ststic ARP
  • Обрабатываются только тегированные 802.1q VLAN 
  • Не декрементируется поле TTL IP пакета. 
  • Hardcoded lookup table (routing table)
 
Обоснованно предполагается что на ИС семейства Cyclone 5 возможно реализовать форвардер для 10Г интерфейсов 
Что же касается Lookup Engine – отдельно тестировался в симуляции LE на 16M IPv4 роутов (максимально теоретически возможный BGP full View вследствии полной разагрегации сетей до /24) 

 

 

свичинг и форвардинг это конечно хорошо, но для полноценного бордера не хватает еще шейпера. Можно ли его реализовать на этом ПЛИС-е ?

 

шейпер на бордере?

ничего не перепутали?

Link to post
Share on other sites

Для продакшена сыро.

Когда появится поддержка Реалтека! тогда и будем тестить :)

 

А ралтек даст 1 млн pps? :)

 

фича в том что стоимость самого железа весьма низка. нужный циклон 5 - порядка 100у.е. 

 

:facepalm:

 

Фича в том, что стоимость ПЛИС для построения TCAM BGP full view будет стоить порядка 1000 у.е. Для того, чтобы роутить 1-н пакет за 1-н такт - нужно построить регистровую память, где 1-н БИТ - это триггер (два транзистора). А построить нужно МЕГАБАЙТЫ такой памяти.

Edited by NEP
Link to post
Share on other sites

 

 

Для того, чтобы роутить 1-н пакет за 1-н такт - нужно построить регистровую память, где 1-н БИТ - это триггер (два транзистора). А построить нужно МЕГАБАЙТЫ такой памяти.

SRAM есть готовая же, не проблема.

 

Ну и да, для простого бгп ipv4 роутинга достаточно всего 16М памяти (ну по 1 байту на /24 подсеть)... Правда для меньших подсетей придется городить еще что-то...

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
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...