2017-04-23 72 views
0

我已閱讀了很多DPDK文檔,但我對它是否支持或鼓勵中斷感到困惑。該文件表明,DPDK不使用中斷,但我仍然能夠註冊中斷併成功接收它們。在DPDK應用程序中編寫搶先式用戶級線程調度程序時的注意事項

具體而言,我正在研究是否可以爲DPDK應用程序編寫用戶級別的搶佔線程調度程序。爲了創建這個,我需要註冊定時器中斷。該文件說DPDK不支持調度程序。我看到DPDK有一個lthread抽象,但是它的調度程序實現要求每個單獨的lthread手動地將調度控制權交給調度程序,而不是根據定時器中斷自動轉移回調度程序。

我看到了警報功能(在rte_alarm中),它基於輪詢來模擬定時器中斷。但是,您需要另一個pthread來執行輪詢,並且當前輪詢pthread是運行回調函數的那個​​(而我想要最初設置計時器的pthread運行回調函數)。

我不明白爲什麼DPDK可以實現一個不支持搶佔的lthread抽象,當它可以註冊來自操作系統的實時定時器中斷時。使用某些物體時,您可能必須更加小心,例如無鎖環形緩衝區,但這是可以管理的。

有人可以提供什麼DPDK支持的澄清?

回答

0

DPDK支持來自UIO映射設備的中斷,但目前它們主要用於鏈接狀態更改或看門狗。

編寫用戶級搶佔式線程調度器可能是可能的,但DPDK的一個要點是避免中斷和上下文切換。

DPDK不使用操作系統調度支持L核心搶佔,請參閱該--lcores命令行參數:

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

隨着一些性能權衡,你可以使用DPDK從動態創建的並行線程描述這裏:

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

相關問題