2017-04-23 3 views
0

DPDKのドキュメントをよく読んだことがありますが、割り込みをサポートするのか混乱を助長するのか混乱しています。ドキュメントのフラットアウトには、DPDKは割り込みを使用しないと言いますが、割り込みを登録して正常に受信することができます。DPDKアプリケーションにプリエンプティブユーザーレベルのスレッドスケジューラを書き込む際の考慮

具体的には、DPDKアプリケーション用のユーザーレベルのプリエンプティブスレッドスケジューラを作成できるかどうかを調べています。これを作成するために、私はタイマー割り込みのために登録する必要があります。 DPDKはスケジューラをサポートしていません。

DPDKにはlthread抽象化がありますが、スケジューラの実装では、タイマー割り込みに基づいて自動的にスケジューラに制御が戻されるのではなく、個々のスレッドが手動でスケジューラに制御を渡す必要があります。

ポーリングに基づくタイマー割り込みをシミュレートするアラーム機能(rte_alarm)があります。しかし、ポーリングを行うためには別のpthreadが必要です。現在、ポーリングpthreadはコールバック関数を実行しています(最初はコールバック関数を実行するタイマーを設定したpthreadが必要です)。

OSからのリアルタイマー割り込みに登録できるときに、DPDKがプリエンプションをサポートしないlthread抽象化を実装する理由を理解できません。ロックレスリングバッファーなどの特定のオブジェクトを使用する場合は注意が必要な場合がありますが、それは管理しやすいものです。

誰かがDPDKがサポートしていることを明確にすることはできますか?

答えて

0

DPDKは、UIOでマップされたデバイスからの割り込みをサポートしていますが、ほとんどの場合、リンク状態の変更やウォッチドッグを想定していました。

ユーザレベルのプリエンプティブスレッドスケジューラを書くことは可能かもしれませんが、DPDKの主なポイントの1つは、割り込みやコンテキストスイッチを避けることです。

DPDKは、OSのスケジューラを使用してlcoreプリエンプションをサポートし、--lcoresコマンドライン引数をご参照くださいん

:説明するようにいくつかのパフォーマンスのトレードオフで

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

を、あなたが動的に作成したのpthreadsからDPDKを使用することができますここに:

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

関連する問題