Вы должны попытаться выяснить, почему приложение «не может получить данные достаточно быстро».
Ваша пропускная способность памяти, вероятно, значительно превосходит пропускную способность Типичного Ethernet, поэтому даже при передаче данных от драйвера кприложение включает в себя копирование.
Если ссылка udp не достаточно быстра в пространстве пользователя, она не будет быстрее в пространстве ядра.Что вам нужно сделать, это:
- понять, почему ваше приложение недостаточно быстрое, может быть, по его распределению.
- реализовать организацию очереди в пользовательском пространстве.
Вероятно, вы можете разделить ваше приложение на два потока, разделяя список буферов
поток A ожидает, пока драйвер получит доступные данные, и помещает его в конец списка.
поток B считывает данные из заголовка списка и отправляет их через UDP.Если по какой-то причине поток B занят ожиданием отправки конкретного буфера, fifo заполняется немного, но пока полоса пропускания канала UDP превышает скорость передачи данных из DSP, у вас все будет в порядке.
Перемещение чего-либо в ядро не делает вещи волшебно быстрыми, просто НАМНОГО сложнее кодировать, отлаживать и отслеживать.