Linuxホスト上でマイクロ秒の精度でタスクを実行することは可能ですか?つまり、特定の時点でタスクを実行したいのです。Linuxはリアルタイムシステムではありませんが、Linuxで最適なソリューションを探しています。
これまで、カーネルモジュールを作成し、hrtimerをセットアップし、コールバック関数が入力されたときのジッターを測定しました(実際の遅延についてはあまり気にしません。重要なのはジッターです)、約20〜50usです。これは、ユーザースペースでtimerfdを使用するよりも大幅に優れているわけではありません(プロセスにリアルタイムの優先度を使用してみましたが、実際には何も変わりませんでした)。
Linux 3.5.0を実行しています(ほんの一例です。2.6.35から3.7までのさまざまなカーネルを試しました)。/proc/timer_listはhrtimer_interruptを示し、hrtimer機能を無効にするフェイルセーフモードで実行していません。さまざまなCPU(IntelAtomからCorei7)で試してみました。
これまでの私の最善のアイデアは、hrtimerをndelay/udelayと組み合わせて使用することです。これは本当にそれを行うための最良の方法ですか?マイクロ秒の精度でタスクをトリガーすることは不可能だとは信じられません。モジュールとしてカーネル空間でコードを実行することは許容されますが、コードが他のタスクによって中断されていない場合は素晴らしいでしょう。システムの残りの部分についてはあまり気にしません。タスクは1秒間に数回しか実行されないため、タスクを実行するたびにmdelay/ndelayを使用してCPUを数マイクロ秒焼きます。とはいえ、私はもっとエレガントな解決策を好みます。
質問が明確で、タイマーの精度に関する多くのトピックが見つかりましたが、その問題に対する本当の答えはありません。