おそらくバージョン 3.3 前後の arago ディストリビューションを使用して、組み込み Linux プロジェクトに取り組んでいます。
ミリ秒ごとにプロセスをウェイクアップする高解像度の Linux タイマーを構成しました。これは問題なく動作しますが、タイミングに関して 2 つの問題があります。
- 起床時間のジッター
- プロセスによって実行される処理が一定であるにもかかわらず、起きているときの処理時間の変動性。
これらの問題は、Linux のリアルタイム性に欠けるパフォーマンスに起因すると考えています。しかし、リアルタイムのパフォーマンスを改善する方法を調査する必要があります。
カーネルがリアルタイムに適した CONFIG_PREEMPT カーネル オプションで構成されていることを確認しました。
また、プロセスに SCHED_FIFO スケジューリング クラスを適用しました。
struct sched_param schedparm;
memset(&schedparm, 0, sizeof(schedparm));
schedparm.sched_priority = 1; // lowest rt priority
sched_setscheduler(0, SCHED_FIFO, &schedparm);
しかし、それは違いはありませんでした。
PREEMPT_RT パッチをカーネル ビルドに適用するのが論理的な手順だと思いますが、その方法はまだ特定できていません。
ジッター/持続時間の変動性を改善するために他にできることはありますか?
または、PREEMPT_RT パッチの適用方法に関するアクセス可能なチュートリアルを提案できる人はいますか?