2016-05-02 3 views
2

優先度の高いスレッドであるSCHED_DEADLINEスケジューリングポリシーを使用してスレッドを実装しています。優先度の低いスレッドであるSCHED_FIFOポリシーを使用してスレッドを実装しています。例として は、私は次のように私の期限スレッドを定義しました:通常の振る舞いでデッドラインスレッドプリエンプションの検出

attr.sched_runtime = 0.5 * 1000000; // --> 0.5 ms 
attr.sched_deadline = 0.6 * 1000000; // --> 0.6 ms 
attr.sched_period = 1 * 1000000;  // --> 1 ms 

、以上の0.5ミリ秒を処理してはならないと、この期間ながら、それは時間にしている必要があり、私の優先度の高いスレッドその仕事を終える。

タスクが0.5 msより長く続くと、OSスケジューラは優先度の高いスレッドを優先して優先度を低くします。これは私が以前にテストした動作です。

質問:私の優先度の高いスレッドは、システムによって先取りされたことをどのように警告できますか?

+0

スレッドがプリエンプションされている場合は、再スケジュールを待つことになります。「警告することができますか」ということは、何か信号を受信することを意味しますか? – fluter

+0

まず、それが可能かどうかを知りたい。どのような仕組みがいいですか、「シグナルか何か」。 –

+0

スレッドのCPU時間がオフになっているときは、処理する信号ではなく、実行するCPU上にないため、意味をなさない。 – fluter

答えて

0

現在、SCHED_DEADLINE APIは、調整されたタスクを通知するために必要な機能を提供していません。私たちはそれが有用な機能である可能性があることを理解しており、次の将来に含めることを検討します。

唯一の選択肢は、スロットリングが発生したかどうかを理解するための時間を確認することです。