4つのコア(Intel I5など)と1000mAのCPUがある場合は、Linuxスケジューラによって中断されず、そのコアでのみプロセスが数ミリ秒間実行されるようにする必要があります。
私は何をすべきですか?
この質問に加えて研究をして理論ができました。
- 私が望むコアを除外するようにプロセスCPUの好みを設定します。これらのコアを防ぐために、他のすべてのプロセスを設定します。
- プロセスのFIFOポリシーを使用するようにLinuxスケジューラを設定します。つまり、CPUが解放されてもプロセスは停止しません。
- FIFOポリシーと競合したくない場合は、他のすべてのプロセスをアイドル状態に設定してください。
- カーネルがこれらのCPUコアを使用しないようにするには、isolcpusカーネルオプションを設定します。
Linuxスケジューラについて知っていることがあれば、プロセスがCPUコアを排他的にしないようにプロセスを一時停止するように設計されているため、プロセスが停止するのを防ぐことができるかどうかはわかりません。
一部の研究および科学アプリケーションでは、リアルタイムアプリケーションをカプセル化する仮想マシンを実行する必要があるため、この問題は重要です。したがって、Linuxがプロセスのリストを確認したり、CPUコアを別のプロセスにリリースするために仮想マシンを停止したりすると、そのアプリケーションも停止します。
答え1
数ミリ秒でさえ、Linuxスケジューラの邪魔にならず、これらのコアでのみプロセスを実行し続ける必要があります。
これは不可能です(ユーザーエリアアプリケーションの場合)。 Linux(最も一般的なオペレーティングシステムと同様)は、次のものを使用します。先制攻撃スケジュール。
ただし、次の内容をよくお読みください。リアルタイムLinux&ジェノマイ
(もちろんカーネル部分は非線点型の傾向がありますが、そのような目的でカーネルモジュールを作成したくないでしょう)
実際、ベンチマークの目標と比較してプリエンプションを無視できるようにシステムを構成できると確信しています。スケジューリングオーバーヘッドは、ミリ秒ではなくマイクロ秒単位であることができます(またはそのように構成できます)。
(そうでなければLinuxの使用を放棄します)
バラより予約(7)