UDP отправить от водителя - PullRequest
0 голосов
/ 22 апреля 2011

У меня есть драйвер, который должен:

  1. получение данных от ПЛИС
  2. Данные DMA на другое другое устройство (DSP) для кодирования
  3. отправка закодированных данных через UDP на внешний хост

Первоначально планировалось, чтобы приложение обрабатывало шаг 3, но приложение не заставляет процессор вовремя обрабатывать данные до того, как следующий набор данных поступит из ПЛИС.

Есть ли способ заставить планировщик (из драйвера) запустить мое приложение?

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

Есть идеи?

1 Ответ

0 голосов
/ 22 апреля 2011

Вы должны попытаться выяснить, почему приложение «не может получить данные достаточно быстро».

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

Если ссылка udp не достаточно быстра в пространстве пользователя, она не будет быстрее в пространстве ядра.Что вам нужно сделать, это:

  • понять, почему ваше приложение недостаточно быстрое, может быть, по его распределению.
  • реализовать организацию очереди в пользовательском пространстве.

Вероятно, вы можете разделить ваше приложение на два потока, разделяя список буферов

  • поток A ожидает, пока драйвер получит доступные данные, и помещает его в конец списка.

  • поток B считывает данные из заголовка списка и отправляет их через UDP.Если по какой-то причине поток B занят ожиданием отправки конкретного буфера, fifo заполняется немного, но пока полоса пропускания канала UDP превышает скорость передачи данных из DSP, у вас все будет в порядке.

Перемещение чего-либо в ядро ​​не делает вещи волшебно быстрыми, просто НАМНОГО сложнее кодировать, отлаживать и отслеживать.

...