|
|
  |
Слегка "навороченная" 1-10Gbit Сетевая карта на ПЛИС, Легко ли реализуется? |
|
|
|
Nov 15 2016, 11:57
|
Профессионал
    
Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368

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

Группа: Участник
Сообщений: 21
Регистрация: 7-12-05
Пользователь №: 11 941

|
Про эмуляцию стандартной карты - не думаю, что это простой путь. Обычно их производители не раскрывают внутреннюю структуру и исходный код драйвера и следовательно повторить их будет не просто.
Обработка на уровне MAC не сложна, но с интерфейсом чип PHY-FPGA не всё так просто. Если опыта нет, то время потратите. Это я про 1G. С 10G не работал.
Как я понимаю стандарта на межпортовое взаимодействие сетевых карт в Виндовс нет. Каждый делает как хочет. Драйвер для PCIe на таких скоростях потребует поддержки DMA, что сильно усложняет дизайн как в FPGA так и в драйвере.
Успехов!
|
|
|
|
|
Nov 16 2016, 06:32
|
Знающий
   
Группа: Свой
Сообщений: 726
Регистрация: 14-09-06
Из: Москва
Пользователь №: 20 394

|
Посмотрите проект White Rabbit на ohwr.org для примера. Там есть и разбор траффика, и выделение отдельных фреймов с обработкой, и "прозрачная" передача. Но для 1G.
|
|
|
|
|
Nov 16 2016, 07:29
|
Местный
  
Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842

|
Цитата(Igor657 @ Nov 15 2016, 22:45)  Про эмуляцию стандартной карты - не думаю, что это простой путь. Обычно их производители не раскрывают внутреннюю структуру и исходный код драйвера и следовательно повторить их будет не просто. Под Linux драйвер для Интела - полностью открыт, считается одним из лучших драйверов сетевых карт. Цитата(Igor657 @ Nov 15 2016, 22:45)  Обработка на уровне MAC не сложна, но с интерфейсом чип PHY-FPGA не всё так просто. Если опыта нет, то время потратите. Это я про 1G. С 10G не работал. У ТС нет чипов PHY - там SFP+. Работает сразу, только надо помнить, что Xilinx не поддерживает модули LR. А даже и если был бы чип - что ж там сложного? DMA надо, к сожалению у Xilinx нет бесплатного (в новых Виртексах вроде есть аппаратное встроенное в PCIe), надо использовать что-то подобное http://nwlogic.com/packetdma/, кстати там сразу и нарисована схема того, что Вы ищете :-). Коммерческое, но на фоне лицензии на 10G не сильно дорого :-) В эмуляцию стандартного контроллера я бы не игрался, разве что действительно очень надо.
|
|
|
|
|
Nov 16 2016, 12:38
|

фанат Linux'а
    
Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008

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

Группа: Участник
Сообщений: 53
Регистрация: 27-04-05
Из: Spb, Russia
Пользователь №: 4 544

|
Цитата(syoma @ Nov 15 2016, 14:57)  Здравствуйте. Интересует мнение экспертов в правильном ли я направлении думаю. Есть FPGA PCIe карточка на Virtex-6 или 7, у которой есть 4-8шт 10Gbit SFP+ Портов. Через SFP порты карточка подключается к Ethernet. Хотелось бы сделать из нее нечто вроде "продвинутой" сетевой карты. "Продвинутость" должна заключаться в том, что ПЛИС должна выделять из сетевого трафика отдельные MAC фреймы и обрабатывать из локально, чтобы получить более быструю реакцию на определенные события в сети. Весь остальной трафик должен тупо передаваться на CPU по PCIe для дальнейшей обработки процессором, в таком виде, как это обычно делает обычная сетевая карта. Это стандартная задача для ПЛИС. Не сказал бы, что легко, но решается. Цитата Я так понимаю, что на уровне PCIe ПЛИС должна эмулировать какой-либо из стандартных Intelовских сетевых контроллеров типа i82xxx, чтобы она работала со стандартным драйвером со стороны процессора. Это так? Чем эмулировать чужую аппаратуру, проще написать свой драйвер Цитата Ну и собственно основной вопрос - так вообще делают? Просто мы с таким в своих проектах не сталкивались, мы с PCIe больше дружим, а Ethernet только под свои нужды использовали. Выглядит не сильно сложно, но насколько это нетривиальная задача по реализации? В сети читаю, что так борются с DDoS атаками, а также делают майнинг. Да, так делают. Только правильно оцените свою квалификацию и затраты (время и деньги).
|
|
|
|
|
Nov 17 2016, 09:50
|

Гуру
     
Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904

|
Цитата(syoma @ Nov 17 2016, 12:29)  MAC корку в FPGA уже запустили - программист ждет с нетерпением пока приедут SFP модули, чтобы протестировать нашу сетку. Будьте готовы, что с SFP типа SGMII<->RJ45 будут приключения по части инициализации, т.к. мало кто из производителей детализирует, что за PHY стоит внутри. В большинстве, по моему опыту, стоит Marvell 88E1111, но встречается и Broadcom. Для Marvell примеры инициализации есть, но и тут могут быть нюансы, т.к. у некоторых модулей TX_DIS идет не на вход сброса PHY, а на управление питанием внутренних источников SFP-модуля (например, у Zyxel), т.к. требования к этому сигналу несколько иные, чем у простого сигнала сброса. С гигабитной оптикой я проблем не помню.
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
|
Nov 18 2016, 12:48
|
Местный
  
Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842

|
Цитата(syoma @ Nov 18 2016, 10:44)  Я имел ввиду в плане "эмуляции" сетевой карты на PCIe. Работать с PCIe мы умеем. Извините, тогда думаю сюда https://www.xilinx.com/products/intellectua...ty/axi_dma.htmlЧерез AXI-Stream к нему будет приходить пакет который надо передать на хост и оно используя дескрипторы (предварительно заполненные драйвером) будет через PCIe записывать данные прямо в память хоста. А дальше дело драйвера.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|