Перейти к содержанию

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

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

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

Поделиться сообщением


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

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

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

Успехов!

Поделиться сообщением


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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Посмотрите проект White Rabbit на ohwr.org для примера.
Там есть и разбор траффика, и выделение отдельных фреймов с обработкой, и "прозрачная" передача. Но для 1G.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Igor657 @ Nov 15 2016, 22:45) <{POST_SNAPBACK}>
Про эмуляцию стандартной карты - не думаю, что это простой путь. Обычно их производители не раскрывают внутреннюю структуру и исходный код драйвера и следовательно повторить их будет не просто.

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

Цитата(Igor657 @ Nov 15 2016, 22:45) <{POST_SNAPBACK}>
Обработка на уровне MAC не сложна, но с интерфейсом чип PHY-FPGA не всё так просто. Если опыта нет, то время потратите. Это я про 1G. С 10G не работал.

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Igor657 @ Nov 16 2016, 00:45) <{POST_SNAPBACK}>
Про эмуляцию стандартной карты - не думаю, что это простой путь. Обычно их производители не раскрывают внутреннюю структуру и исходный код драйвера и следовательно повторить их будет не просто.
Что? Назовите хоть одну сетевую карту, исходный код которой закрыт для ОС 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 драйвер это немного отдельно, но тоже важно.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(syoma @ Nov 15 2016, 14:57) <{POST_SNAPBACK}>
Здравствуйте.
Интересует мнение экспертов в правильном ли я направлении думаю.
Есть FPGA PCIe карточка на Virtex-6 или 7, у которой есть 4-8шт 10Gbit SFP+ Портов. Через SFP порты карточка подключается к Ethernet. Хотелось бы сделать из нее нечто вроде "продвинутой" сетевой карты. "Продвинутость" должна заключаться в том, что ПЛИС должна выделять из сетевого трафика отдельные MAC фреймы и обрабатывать из локально, чтобы получить более быструю реакцию на определенные события в сети. Весь остальной трафик должен тупо передаваться на CPU по PCIe для дальнейшей обработки процессором, в таком виде, как это обычно делает обычная сетевая карта.


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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Спасибо за советы. Забыл уточнить, что пока на 10G не замахиваемся вообще. 1G - наше все. Также есть возможность покупать корки у Xilinx - я смотрю, они для нас по цене подъемные.
MAC корку в FPGA уже запустили - программист ждет с нетерпением пока приедут SFP модули, чтобы протестировать нашу сетку.
Про драйвер более мене понятно. Осталось разобраться, что делать с PCIe со стороны ПЛИС - ДМА мы уже делали, если это не сильно отличается, то должно работать.
Немного добавлю про задачи такой карты - хотим сделать поддержку PRP на аппаратном уровне, а также вычленять GOOSE сообщения из трафика. Все по МЭК-61850

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(syoma @ Nov 17 2016, 12:29) <{POST_SNAPBACK}>
MAC корку в FPGA уже запустили - программист ждет с нетерпением пока приедут SFP модули, чтобы протестировать нашу сетку.


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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(syoma @ Nov 17 2016, 10:29) <{POST_SNAPBACK}>
Осталось разобраться, что делать с PCIe со стороны ПЛИС

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(akorud @ Nov 17 2016, 15:58) <{POST_SNAPBACK}>
Начинать надо с https://www.xilinx.com/products/intellectua...y/axi_pcie.html
Для начала даже драйвера не надо - таким вот способом http://billfarrow.blogspot.com/2010/09/use...pci-memory.html можно легко инициировать транзакции на шине "по той стороне" PCIe.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(syoma @ Nov 18 2016, 10:44) <{POST_SNAPBACK}>
Я имел ввиду в плане "эмуляции" сетевой карты на PCIe. Работать с PCIe мы умеем.

Извините, тогда думаю сюда https://www.xilinx.com/products/intellectua...ty/axi_dma.html
Через AXI-Stream к нему будет приходить пакет который надо передать на хост и оно используя дескрипторы (предварительно заполненные драйвером) будет через PCIe записывать данные прямо в память хоста. А дальше дело драйвера.

Поделиться сообщением


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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(syoma @ Nov 15 2016, 14:57) <{POST_SNAPBACK}>
"Продвинутость" должна заключаться в том, что ПЛИС должна выделять из сетевого трафика отдельные MAC фреймы и обрабатывать из локально, чтобы получить более быструю реакцию на определенные события в сети. Весь остальной трафик должен тупо передаваться на CPU по PCIe для дальнейшей обработки процессором, в таком виде, как это обычно делает обычная сетевая карта.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
syoma
Если не секрет, для чего вычленять GOOSE из трафика?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация