Вопрос или проблема
Я задал этот вопрос на форуме по сетевой инженерии, но, видимо, он в основном не по теме, так что надеюсь, что это будет более подходящее место.
У нас есть набор физического оборудования, который состоит из коллекции до 8 модулей, каждый из которых является SoC, объединяющим FPGA и ARM-ядро, работающее на Linux. В настоящее время все эти модули подключены к одному ПК по Ethernet, и на модуле вся связь обрабатывается с использованием обычного стека TCP/IP в Linux, при этом данные от FPGA маршрутизируются через программный уровень.
Эта система работает хорошо и надежно, и использование обычных сетевых протоколов и стандартов доказало свою эффективность. Проблема с текущей системой заключается в том, что мы производим данные от FPGA с гораздо более высокой скоростью передачи данных, чем может обработать процессор (как из-за того, что процессор недостаточно быстрый, так и из-за того, что оборудование Ethernet имеет скорость 1 Гбит/с).
Мы предлагаем создать второй поток данных от FPGA, который передается по выделенному оптическому каналу SFP+. Очевидно, есть множество способов, как это можно реализовать. В настоящее время мы думаем, что на уровне FPGA мы просто упаковываем данные в Ethernet-кадры и передаем их по оптическому каналу со скоростью 10 Гбит/с. Оптический канал каждого модуля подключается к одному из 8 портов на плате двуканального QSFP+ коммерческого сетевого оборудования.
Контроль потока затем осуществляется либо на уровне Ethernet (например, с использованием кадров паузы или PFC), либо через существующую программную ссылку TCP на уровне приложения. То есть данные отправляются только в том случае, если в NIC QSFP+ достаточно места в буферах.
Мы можем обнаруживать потерю данных, но надеемся, что это происходит крайне редко.
Вопрос в том, какие могут быть подводные камни такой архитектуры.
Передаются ли Ethernet-кадры один за одним в случае QSFP+ (т.е. каждый кадр не распределяется по 4 каналам), так что каждый из 4 каналов QSFP+ может управляться от разных модулей?
Могу ли я легко получать необработанные Ethernet-кадры на принимающей стороне, как под Linux, так и под Windows?
Есть ли определенные производители оборудования, которые лучше подходят для таких задач? Насколько широко распространена поддержка PFC?
Ответ или решение
Вопрос следует рассматривать с точки зрения передачи данных от FPGA к ПК с использованием стандартного сетевого оборудования, что обеспечивает высокую пропускную способность и эффективность. Ниже представлены основные аспекты, касающиеся данного подхода, а также возможные подводные камни.
Архитектурные Соображения
-
Структура передаваемых данных:
Использование Ethernet-кадров для передачи данных от FPGA по оптической линии через SFP+ подразумевает, что данные будут упакованы в стандартные Ethernet-кадры. Так как вы предполагаете использовать 10Gb/s, это может быть достаточно для вашего уровня генерации данных, однако стоит обратить внимание на возможную потерю данных при превышении предела буферизации на приёмной стороне. -
Передача Кадров:
Вопрос о том, передаются ли Ethernet-кадры по одному на линке QSFP+, имеет значение для вашей архитектуры. В большинстве случаев каждый QSFP+ будет передавать отдельные кадры, что позволяет каждому модулю использовать собственный канал. Это обеспечивает упрощённую и независимую передачу данных. -
Управление потоком:
Использование управления потоком, как через pause-кадры, так и через Priority Flow Control (PFC), является хорошей практикой. PFC позволяет эффективно управлять потоками данных, особенно в условиях, когда возникает риск переполнения буферов. Однако стоит проверить поддержку PFC у вашего сетевого оборудования — не все устройства обеспечивают эту функциональность.
Платформы и Программное Обеспечение
-
Работа с Linux/Windows:
Поддержка приема «сырых» Ethernet-кадров в Linux реализована достаточно хорошо через сокеты уровня 2 (raw sockets). В Windows для этого могут потребоваться дополнительные работы или библиотеки, такие как WinPcap, но это также возможно. Важно учесть задержки, возникающие из-за стека протоколов. -
Совместимость Оборудования:
Не все производители сетевого оборудования одинаково хорошо подходят для передачи данных с высокой пропускной способностью. Рекомендуется тщательно выбирать компоненты, учитывая спецификации и документацию. Производители, такие как Cisco, Mellanox (NVIDIA) и Broadcom, имеют хорошую репутацию в области высокопроизводительных сетей.
Возможные Проблемы и Рекомендации
-
Надежность соединений:
Должны быть предусмотрены механизмы для контроля целостности передаваемых данных. Это может быть реализовано через контрольные суммы и механизмы восстановления на высоком уровне. -
Производительность системы:
Убедитесь, что процессор на уровне FPGA действительно способен обработать первоначальный объем данных, прежде чем передавать их по сети. Оптимизация кода на FPGA для улучшения производительности может также помочь уменьшить нагрузку на ARM-ядро. -
Тестирование и отладка:
Перед развертыванием системы рекомендуется провести обширное тестирование для выявления узких мест и оптимизации производительности. Следует убедиться, что все компоненты взаимодействуют эффективно и что система может справляться с пиковыми нагрузками.
Заключение
Ваше решение о передаче данных от FPGA по оптической линии через стандартные сетевые интерфейсы имеет хорошие перспективы, однако требует внимательного подхода к выбору оборудования, управлению потоком и обработке данных. Рекомендуется дополнительно ознакомиться с документацией по каждому компоненту для обеспечения совместимости и выполнения всех требований к производительности.