2013-04-30 6 views
2

Итак, у меня есть входящий поток UDP, состоящий из 272 байтовых пакетов со скоростью передачи данных около 5,12 Гбит/с (около 320 е6 пакетов в секунду). Эти данные отправляются пользовательской платой на основе FPGA. Размер пакета - это предел цифрового дизайна, поэтому, хотя теоретически можно было бы увеличить его, чтобы сделать вещи более эффективными, для этого потребуется большая работа. На принимающей стороне эти пакеты считываются и интерпретируются сетевым потоком и помещаются в круглый буфер, совместно используемый потоком буферизации, который копирует эти данные в GPU для обработки.Как справиться с 320 миллионами 272-байтовых пакетов UDP?

Вышеуказанная установка на принимающей стороне может справиться с 5.12 Гбит/с для пакета 4096 КБ (используется в другом дизайне), используя простые вызовы recv, однако с текущим размером пакета мне нелегко идти в ногу с поток пакетов, слишком много времени «теряется» при переключении контекста и копировании небольших сегментов данных из пространства ядра в пространство пользователя. Я сделал быструю тестовую реализацию, которая использует recvmmsg, однако многое не улучшилось. В среднем я могу обрабатывать около 40% входящих пакетов.

Так что мне было интересно, можно ли получить дескриптор буфера данных UDP ядра для моего приложения (стиль mmap) или использовать какое-то нулевое копирование из ядра в пользовательское пространство? Альтернативно, знаете ли вы о любом другом методе, который уменьшил бы эти накладные расходы и мог бы выполнять требуемую обработку?

Это работает на Linux-машине (ядро 3.2.0-40) с использованием кода C.

ответ

2

Существует поддержка приема пакетов mmap в Linux.

Это не так просто использовать в качестве сокетов UDP, потому что вы получите пакеты, например, из RAW-сокета.

Для получения дополнительной информации см. this.

+0

ОК, я подробно рассмотрю 'пакет_mmap' (я только проглядывал его раньше). Я сообщу позже. Спасибо – lessju

+0

'package_mmap', похоже, работает красиво. благодаря – lessju

 Смежные вопросы

  • Нет связанных вопросов^_^