Возможно ли получение пакетов 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 сообщений в секунду.