産業用機械制御/ロボット工学などに最適なリアルタイム特性を持つようにLinuxコンテナ(cgroups/名前空間分離プロセスツリーなど)を構成する方法はありますか?
おそらくコンテナとは何の関係もなく、常に単一のプロセスにリアルタイム機能を提供するのでしょうか? OTOH、これらのコンテナには完全に異なる(RT?)Linuxディストリビューションを含めることができ、マルチコアプロセッサの1つのコアに排他的にアクセスできますか?
現時点では具体的なユースケースはありません。私はLinuxが置き換えることができるのか/どのように置き換えることができるのか疑問に思います。PLC。
答え1
可能ですが、要件によってはそうでない場合があります。
「リアルタイム」とは、低レイテンシの概念を意味する。つまり、理論上は「遅延時間なし」を意味しますが、実際にはいいえ結局のところ、待ち時間は不可能です。入力が一部の出力を生成する前に常に発生する必要がある処理があるため、常に発生します。一部ただ1つのクロックサイクルでも遅延します。
しかし、遅延があり、遅延があり、7つあります;-)
プロセスまたはそのディスパッチキューの優先順位を変更したり、レイテンシの短いCライブラリに切り替えることで、Linuxシステムでレイテンシを短縮できます。これはすでに次の要件を満たしています。一部「ライブ」設定の一形態です。それがすべてであれば、もちろんコンテナを使用すると、システムの遅延時間が短い部分を残りの部分から分離できます(そのコンテナのプロセスが一定の優先順位を変更できるようにする場合)。大きな違いをご覧ください。
しかし、より多くの作業を行う必要があるかもしれません。待ち時間を修正するためのより多くの方法があります。 「最も少ない作業」から「最も多くの作業」までの順番で次のことを知っています。
- ほとんどのデフォルト展開カーネルでは、スケジューラの動作方法を変更するいくつかの起動時間オプションを設定することで待ち時間を短縮できます(平均待ち時間はパフォーマンス苦しむかもしれません)
- 設定できるコンパイル時間オプションもたくさんあります(現在、多くのオプションがブート時間オプションに変更されましたが、まだいくつか残っています)。
- より厳しいリアルタイム要件を満たす遅延時間の短いパッチがたくさんあります(または少なくとも私が最後に確認したとき)。
これらのいずれかが必要な場合、コンテナはまだシステムの残りの部分と同じカーネルを使用するため、コンテナは役に立ちません。
そういえば、場合によっては可能同じシステム上の他のアプリケーションと一緒にコンテナでライブアプリケーションを実行する場合は、これに反対することをお勧めします。同じシステムで複数のタスクを実行すると、システムで実行されているアプリケーションが遅延する可能性が高いため、コンテナーが必要なタスクを実行できるようにしても、システムはそれに追いつくことができません。