Я прочитал хороший кусок документации DPDK, но я не понимаю, поддерживает ли она прерывания или поощряет их. В документации прямо говорится, что DPDK не использует прерывания, но я все еще могу регистрироваться для прерываний и успешно их получать.
В частности, я изучаю, могу ли я написать планировщик упреждающих потоков на уровне пользователя для приложения DPDK. Чтобы создать это, мне нужно было бы зарегистрироваться для прерываний таймера. В документации сказано, что DPDK не поддерживает планировщики.
Я вижу, что DPDK имеет абстракцию lthread, но его реализация планировщика требует, чтобы каждый отдельный lthread вручную передал управление планировщику, а не автоматически возвращал управление планировщику на основе прерывания таймера.
Я вижу функцию будильника (в rte_alarm), которая имитирует прерывания таймера на основе опроса. Однако вам нужен еще один pthread для выполнения опроса, и в настоящее время pthread опроса — это тот, который запускает функцию обратного вызова (тогда как я хочу, чтобы pthread, который изначально установил таймер, запускал функцию обратного вызова).
Я не понимаю, почему DPDK реализует абстракцию lthread, которая не поддерживает вытеснение, когда можно зарегистрироваться для прерываний реального таймера из ОС. Возможно, вам придется быть более осторожным при использовании определенных объектов, таких как кольцевые буферы без блокировки, но это решаемо.
Может ли кто-нибудь дать разъяснения относительно того, что поддерживает DPDK?