Jump to content

    
Sign in to follow this  
syoma

Слегка "навороченная" 1-10Gbit Сетевая карта на ПЛИС

Recommended Posts

Здравствуйте.

Интересует мнение экспертов в правильном ли я направлении думаю.

Есть FPGA PCIe карточка на Virtex-6 или 7, у которой есть 4-8шт 10Gbit SFP+ Портов. Через SFP порты карточка подключается к Ethernet. Хотелось бы сделать из нее нечто вроде "продвинутой" сетевой карты. "Продвинутость" должна заключаться в том, что ПЛИС должна выделять из сетевого трафика отдельные MAC фреймы и обрабатывать из локально, чтобы получить более быструю реакцию на определенные события в сети. Весь остальной трафик должен тупо передаваться на CPU по PCIe для дальнейшей обработки процессором, в таком виде, как это обычно делает обычная сетевая карта.

Я так понимаю, что на уровне PCIe ПЛИС должна эмулировать какой-либо из стандартных Intelовских сетевых контроллеров типа i82xxx, чтобы она работала со стандартным драйвером со стороны процессора. Это так?

 

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

Ну и вопрос, как такая карточка должна определяться со стороны CPU? Как свитч и несколько "виртуальных" endpoints?

Share this post


Link to post
Share on other sites

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

 

Обработка на уровне MAC не сложна, но с интерфейсом чип PHY-FPGA не всё так просто. Если опыта нет, то время потратите. Это я про 1G. С 10G не работал.

 

Как я понимаю стандарта на межпортовое взаимодействие сетевых карт в Виндовс нет. Каждый делает как хочет. Драйвер для PCIe на таких скоростях потребует поддержки DMA, что сильно усложняет дизайн

как в FPGA так и в драйвере.

 

Успехов!

 

Share this post


Link to post
Share on other sites

Все правильно, основные сложности лежат в области сопряжения MAC с хостом через эффективную реализацию обмена с помощью DMA + реализация доп.функций, разгружающих ЦП хоста (TCP Offload и т.п.). Причём если первая часть относительно не сложная на скоростях до 1 Гбит/с, то вот вторая часть требует значительных усилий и в железе, и в софте (драйвера).

Share this post


Link to post
Share on other sites

Посмотрите проект White Rabbit на ohwr.org для примера.

Там есть и разбор траффика, и выделение отдельных фреймов с обработкой, и "прозрачная" передача. Но для 1G.

 

Share this post


Link to post
Share on other sites
Про эмуляцию стандартной карты - не думаю, что это простой путь. Обычно их производители не раскрывают внутреннюю структуру и исходный код драйвера и следовательно повторить их будет не просто.

Под Linux драйвер для Интела - полностью открыт, считается одним из лучших драйверов сетевых карт.

 

Обработка на уровне MAC не сложна, но с интерфейсом чип PHY-FPGA не всё так просто. Если опыта нет, то время потратите. Это я про 1G. С 10G не работал.

У ТС нет чипов PHY - там SFP+. Работает сразу, только надо помнить, что Xilinx не поддерживает модули LR.

А даже и если был бы чип - что ж там сложного?

 

DMA надо, к сожалению у Xilinx нет бесплатного (в новых Виртексах вроде есть аппаратное встроенное в PCIe), надо использовать что-то подобное http://nwlogic.com/packetdma/, кстати там сразу и нарисована схема того, что Вы ищете :-).

Коммерческое, но на фоне лицензии на 10G не сильно дорого :-)

 

В эмуляцию стандартного контроллера я бы не игрался, разве что действительно очень надо.

Share this post


Link to post
Share on other sites
Про эмуляцию стандартной карты - не думаю, что это простой путь. Обычно их производители не раскрывают внутреннюю структуру и исходный код драйвера и следовательно повторить их будет не просто.
Что? Назовите хоть одну сетевую карту, исходный код которой закрыт для ОС Linux.

 

Считаю что автору темы не нужно страдать и пытаться мимикрировать под существующие сетевые карты какого-то производителя, а написать свой драйвер самому. Примеров множество http://lxr.free-electrons.com/source/drivers/net/ethernet/

 

Например этот простой: http://lxr.free-electrons.com/source/drive...linx_emaclite.c Видно что там по большей части подробные комментарии а не код, вся протокольная часть это забота ядра Linux, а драйвер туда сюда пакеты гоняет и прерывания пасёт. Lite примечателен еще тем, что там как раз урезанная версия, что подходит если надо сделать специализированную сетевуху, работающую в заведомо ограниченном окружении без вариаций.

 

Да, в этом примере http://lxr.free-electrons.com/source/drive...ethernet/xilinx нет PCI, тут показана именно сторона как из устройства засовывать в сетевой стек. PCIe драйвер это немного отдельно, но тоже важно.

 

Драйвер для PCIe на таких скоростях потребует поддержки DMA, что сильно усложняет дизайн
На каких же скоростях сетевой контроллер не требует поддержки DMA? И как это усложняет, если DMA есть почти в любом простом драйвере? Как это усложнит дизайн стороны FPGA если без DMA проект бессмысленный.

Share this post


Link to post
Share on other sites
Здравствуйте.

Интересует мнение экспертов в правильном ли я направлении думаю.

Есть FPGA PCIe карточка на Virtex-6 или 7, у которой есть 4-8шт 10Gbit SFP+ Портов. Через SFP порты карточка подключается к Ethernet. Хотелось бы сделать из нее нечто вроде "продвинутой" сетевой карты. "Продвинутость" должна заключаться в том, что ПЛИС должна выделять из сетевого трафика отдельные MAC фреймы и обрабатывать из локально, чтобы получить более быструю реакцию на определенные события в сети. Весь остальной трафик должен тупо передаваться на CPU по PCIe для дальнейшей обработки процессором, в таком виде, как это обычно делает обычная сетевая карта.

 

Это стандартная задача для ПЛИС. Не сказал бы, что легко, но решается.

 

Я так понимаю, что на уровне PCIe ПЛИС должна эмулировать какой-либо из стандартных Intelовских сетевых контроллеров типа i82xxx, чтобы она работала со стандартным драйвером со стороны процессора. Это так?

Чем эмулировать чужую аппаратуру, проще написать свой драйвер

 

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

Да, так делают. Только правильно оцените свою квалификацию и затраты (время и деньги).

Share this post


Link to post
Share on other sites

Спасибо за советы. Забыл уточнить, что пока на 10G не замахиваемся вообще. 1G - наше все. Также есть возможность покупать корки у Xilinx - я смотрю, они для нас по цене подъемные.

MAC корку в FPGA уже запустили - программист ждет с нетерпением пока приедут SFP модули, чтобы протестировать нашу сетку.

Про драйвер более мене понятно. Осталось разобраться, что делать с PCIe со стороны ПЛИС - ДМА мы уже делали, если это не сильно отличается, то должно работать.

Немного добавлю про задачи такой карты - хотим сделать поддержку PRP на аппаратном уровне, а также вычленять GOOSE сообщения из трафика. Все по МЭК-61850

Share this post


Link to post
Share on other sites
MAC корку в FPGA уже запустили - программист ждет с нетерпением пока приедут SFP модули, чтобы протестировать нашу сетку.

 

Будьте готовы, что с SFP типа SGMII<->RJ45 будут приключения по части инициализации, т.к. мало кто из производителей детализирует, что за PHY стоит внутри. В большинстве, по моему опыту, стоит Marvell 88E1111, но встречается и Broadcom. Для Marvell примеры инициализации есть, но и тут могут быть нюансы, т.к. у некоторых модулей TX_DIS идет не на вход сброса PHY, а на управление питанием внутренних источников SFP-модуля (например, у Zyxel), т.к. требования к этому сигналу несколько иные, чем у простого сигнала сброса. С гигабитной оптикой я проблем не помню.

 

Share this post


Link to post
Share on other sites
Осталось разобраться, что делать с PCIe со стороны ПЛИС

Начинать надо с https://www.xilinx.com/products/intellectua...y/axi_pcie.html

Для начала даже драйвера не надо - таким вот способом http://billfarrow.blogspot.com/2010/09/use...pci-memory.html можно легко инициировать транзакции на шине "по той стороне" PCIe.

Share this post


Link to post
Share on other sites
Начинать надо с https://www.xilinx.com/products/intellectua...y/axi_pcie.html

Для начала даже драйвера не надо - таким вот способом http://billfarrow.blogspot.com/2010/09/use...pci-memory.html можно легко инициировать транзакции на шине "по той стороне" PCIe.

Я имел ввиду в плане "эмуляции" сетевой карты на PCIe. Работать с PCIe мы умеем.

Share this post


Link to post
Share on other sites
Я имел ввиду в плане "эмуляции" сетевой карты на PCIe. Работать с PCIe мы умеем.

Извините, тогда думаю сюда https://www.xilinx.com/products/intellectua...ty/axi_dma.html

Через AXI-Stream к нему будет приходить пакет который надо передать на хост и оно используя дескрипторы (предварительно заполненные драйвером) будет через PCIe записывать данные прямо в память хоста. А дальше дело драйвера.

Share this post


Link to post
Share on other sites

Обновление такое - 1Гбит и 10Гбит на ПЛИС запущены и работают с SFP. Трафик гоняется, пакеты обрабатываются в ПЛИС.

Также сделан процессорный интерфейс с DMA по PCIe. Осталось дело за драйвером.

Share this post


Link to post
Share on other sites
"Продвинутость" должна заключаться в том, что ПЛИС должна выделять из сетевого трафика отдельные MAC фреймы и обрабатывать из локально, чтобы получить более быструю реакцию на определенные события в сети. Весь остальной трафик должен тупо передаваться на CPU по PCIe для дальнейшей обработки процессором, в таком виде, как это обычно делает обычная сетевая карта.

FYI: Ускоритель алгоритмов на базе ПЛИС Arriga 10 GX от Intel.

Share this post


Link to post
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this