Возможно ли получение пакетов UDP с нулевой копией в Linux? - PullRequest
7 голосов
/ 17 сентября 2011

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

Некоторые сведения о моей настройке:

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

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

Ответы [ 2 ]

6 голосов
/ 17 сентября 2011

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

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

3 голосов
/ 17 сентября 2011

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

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

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

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

...