Возможно ли получение пакетов UDP с нулевой копией в Linux?

Я хотел бы, чтобы UDP-пакеты копировались непосредственно из адаптера Ethernet в мой буфер пространства пользователя

Некоторые подробности о моей настройке:

Я получаю данные от пары гигабитных сетевых камер. В совокупности я получаю 28800 пакетов UDP в секунду (1 пакет на линию * 30 кадров в секунду * 2 камеры * 480 строк). У меня нет возможности переключиться на гигантские кадры, и я уже изучаю настройку прерываний на уровне драйвера для снижения загрузки ЦП. После этого я уменьшу количество копий этого потока данных ~40 МБ / с.

Это лучший источник, который я нашел по этому поводу, но я надеялся, что была более полная ссылка или доказательство того, что такой подход сработал на практике.

2 ответа

Решение

Эта статья может быть полезна:

http://yusufonlinux.blogspot.com/2010/11/data-link-access-and-zero-copy.html

Ваши лучшие пути recvmmsg и увеличение объединения RX-прерываний.

http://lwn.net/Articles/334532/

Вы можете переместиться ниже и выбрать режим работы Wireshark/tcpdump, но бесполезно пытаться выполнить какую-либо серьезную обработку над ним, декодируя все самостоятельно.

При скорости только 30 000 пакетов в секунду я бы не стал слишком беспокоиться о копировании пакетов, эти проблемы возникают при работе с 3 000 000 сообщений в секунду.

Другие вопросы по тегам