11

私は非常に小さなデーモンを書いています。これは、システムが深刻なストレスにさらされている場合でも、応答性を維持する必要があります。スケジューリングに関して SCHED_FIFO と SCHED_RR の違いを調べ、適切な優先順位を決定しようとしています。

小さいながらも重要な監視デーモンに適したスケジューラはどれですか?合理的に安全な優先度はどれですか? 2つの違いを理解しようとすると、まだ少しあいまいです。

私のプログラムは 3k 未満を割り当て (そして mlockall() を使用)、xenbus に約 600 バイトを書き込み、その後スリープしますが、実際にデータを書き込むのにかかる時間 (ミリ秒) を知ることは不可能です..設定ファイルに依存して書かれています。

提案/説明をよろしくお願いします。

4

4 に答える 4

10

pchdtvrデジタル TV 信号をキャプチャする悪名高いプログラムは、SCHED_FIFO何があっても TV パケットがディスクに書き込まれるようにするために使用します。古いコンピューターで Doom をプレイしながら、一度に 4 つのショーをキャプチャできます。

このプログラムは、GPL の下でリリースされ、作者がさかのぼって GPL を取り消そうとしたため、悪名高いものとなっています。この行為は、小規模な火災の嵐を引き起こしました。いずれにせよ、学習する最新バージョンはhttp://frequal.com/pmn/pchdtvr.htmlで見つけることができます。

于 2009-01-01T19:33:53.610 に答える
7

より優先度の高い別のプロセスが実行キューに表示されない限り、SCHED_FIFO を横取りする (コンテキストを別のプロセスに切り替える) ことはできません。

SCHED_RR は、タイム クォンタム (実行するプロセスに与えられた遅延) によってプリエンプトされる可能性があります。

どちらも、Linux ベースのスケジューラの「リアルタイム」優先事項です。

于 2011-02-23T00:58:59.640 に答える
2

私はスケジューリング スキームの専門家ではありませんが、

man sched_setscheduler

さまざまなスケジューリング アルゴリズムの違いを詳しく説明し、他のスケジューリング機能へのリンクを提供します。SCHED_FIFO は実際にはかなり危険に思えますが、最もアグレッシブなスケジューリングとして説明されています。

SCHED_FIFO プロセスは、I/O 要求によってブロックされるか、より優先度の高いプロセスによって横取りされるか、または sched_yield(2) が呼び出されるまで実行されます。

システムをロックしないように注意してください。私は個人的に経験的なテストを行って、どの優先順位が最適で、どのように動作するかを確認します。

于 2009-01-01T18:38:02.413 に答える
2

他のすべてのタスクが標準スケジューラを使用している場合、違いはありません。SCHED_FIFO と SCHED_RR は、これらのタスクの相互のスケジューリングにのみ影響します。

したがって、通常のシステムでは違いはありません。FIFOが最も理解しやすいので、それを使用してください。

優先度の異なる複数のタスクがある場合、すべてのタスクを実行する準備ができていれば (そして CPU コアが 1 つしかない場合)、より高いタスクのみが実行されます。

于 2009-01-04T14:21:42.433 に答える