Что следует учитывать при написании упреждающего планировщика потоков на уровне пользователя в приложении DPDK

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

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

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

Я вижу функцию будильника (в rte_alarm), которая имитирует прерывания таймера на основе опроса. Однако вам нужен еще один pthread для выполнения опроса, и в настоящее время pthread опроса — это тот, который запускает функцию обратного вызова (тогда как я хочу, чтобы pthread, который изначально установил таймер, запускал функцию обратного вызова).

Я не понимаю, почему DPDK реализует абстракцию lthread, которая не поддерживает вытеснение, когда можно зарегистрироваться для прерываний реального таймера из ОС. Возможно, вам придется быть более осторожным при использовании определенных объектов, таких как кольцевые буферы без блокировки, но это решаемо.

Может ли кто-нибудь дать разъяснения относительно того, что поддерживает DPDK?


person Jack Humphries    schedule 23.04.2017    source источник


Ответы (1)


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

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

DPDK поддерживает вытеснение lcore с помощью планировщика ОС, см. аргумент командной строки --lcores:

http://dpdk.org/doc/guides/testpmd_app_ug/run_app.html

С некоторыми компромиссами производительности вы можете использовать DPDK из динамически созданных потоков pthreads, как описано здесь:

http://dpdk.org/doc/guides/prog_guide/env_abstraction_layer.html#non-eal-pthread-support

person Andriy Berestovskyy    schedule 05.05.2017