DPDK - прерывает, а не опрашивает - PullRequest
0 голосов
/ 22 декабря 2018

Можно ли настроить DPDK таким образом, чтобы сетевой адаптер отправлял прерывание всякий раз, когда принимается пакет (вместо того, чтобы отключать прерывания и проводить опрос ядра в очереди RX)?Я знаю, что это кажется нелогичным, но есть пример использования, который я хотел бы извлечь из этого.

DPDK утверждает, что позволяет использовать прерывания для очередей RX (вы можете вызвать rte_eth_dev_rx_intr_enable и передать порт /пара очереди в качестве аргументов), но при копании кода кажется, что это вводит в заблуждение.Существует поток опроса, который вызывает epoll_wait, а после получения пакета вызывает eal_intr_process_interrupts.Затем эта функция просматривает список функций обратного вызова (которые должны быть обработчиками прерываний) и выполняет каждую из них.Затем функция снова вызывает epoll_wait (т.е. она находится в бесконечном цикле).

Правильно ли мое понимание того, как DPDK обрабатывает "прерывания"?Другими словами, даже если вы включаете «прерывания», DPDK на самом деле просто опрашивает в фоновом режиме, а затем выполняет функции обратного вызова (так что прерываний нет)?

1 Ответ

0 голосов
/ 22 декабря 2018

Правильно ли я понимаю, как DPDK обрабатывает "прерывания"?

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

Таким образом, прерывания NIC обрабатываются в ядре любым способом, затем ядро ​​уведомляет пользовательское пространство, используя eventfd.Поток пользовательского пространства ожидает уведомления eventfd, используя epoll_wait.

Другими словами, даже если вы включите «прерывания», DPDK на самом деле просто выполняет опрос в фоновом режиме, а затем выполняет функции обратного вызова.(так что прерываний нет)?

Если нет данных для приема, поток опроса DPDK должен заблокировать epoll_wait.

...