警告:mraa
の経験はありません。私はしかし、それはおよそ何を見て超えて、レポのクローンを作成し、「schedの」のソースをgrepするなど「素敵」されたのは何
私が見つけた唯一のものは、このmraa_set_priority()
APIです:
https://github.com/intel-iot-devkit/mraa/blob/master/api/mraa/common.h#L153
SCHED_RR
用ですが、より積極的かつ確定的なSCHED_FIFO
や最新の詳細SCHED_DEADLINE
用のAPIはありません。
ので:
は決定論 行動やタイムリーな応答イベントや割り込みを確保するためにスケジューリング保証を提供libmraaしていますか?
(このSCHED_RR
APIの比較的軽微な例外を除いて)いいえ。
そして、それないので当然、以来「Libmraaは、C/C++のライブラリである[...]ガリレオ、エジソン&他のプラットフォーム上のIOを使用して、インターフェイスに」、およびスケジューリングポリシーは、それとは何の関係もありません。 スケジューリング方針は、アプリケーション固有および/またはシステム統合全体(他のプロセスを考慮して)設計決定およびセットアップです。他の実行中のプロセスや、カーネルに組み込まれているschedポリシーメカニズム(カーネル構成の選択)を考慮せずに、特定のスケジュールスキームをアプリケーションにハードコードすることは、ほとんどの場合(いくつかの例外があります)は賢明ではありません。、彼らは 経由でアプリに使用
メイク標準ツールの使用(またはAPI
ベンチマークシステム(カーネル+アプリ+他のプロセス):
それはの仕事ですビルドまたはランタイム設定オプション)、またはカーネルを に設定すると、新しいスケジュールオプションを利用できるようになります。
ベンチマークをもう一度、すすぎ、繰り返します。このため
標準ツールは以下のとおりです。
...と、このようなsched_set/getaffinityとして、彼らが使用する標準API、 、sched_set/getschedulerなど(shchedutils/
ソースディレクトリを見てくださいutil-linux
package)。
カーネルのスケジューリングオプションについては、scheduler/
subdirのthe docを参照してください。また、CPU cgroupコントローラを見て、カーネルのバージョンに応じてcgroup-v2.txt
またはcgroup-v1/
サブディレクトリを見てください。
これらの代替案を使用して組み込み製品のベンチマークテストを行い、最終的にはCPUのcgroupコントローラからCPU共有に移行することにしました。なぜなら、これは「スマートな自己適応型」であり、ケース(リアルタイム対ノンリアルタイムのミックス、製品の機能性とロギングなどの低優先度タスクの重要性)。私はではありませんでした。はcgroupsのcpusetを検討/テストしました。デュアルコア組み込みシステムやピリオド/クォータの設定にはあまり意味がありません。
もちろん、上記の技術の組み合わせを使用することができます。
libmraaは愛好家のためのツールであり、実際の埋め込みシステムには便利です システム?
また、経験はありません。しかし、インテルオープンソースの経験(e10000イーサネットドライバから)と私にとっては、インテルは深刻であり、野生のいくつかの情報源を捨てずに忘れてしまいます。非常に"prototypesque" projectの場合でも。 mraa
の場合、githubを見ると、最小限のwikiがあり、いくつかの問題を示す問題追跡は確かに修正されています。
私は本当の組み込みシステムのためにそれを信頼する傾向があります。コミュニティーは小さいかもしれませんが、それは無視できない要素です。
PS:
すべてのことの中で最も重要なものは次のとおりです。ベンチマーク、ベンチマーク、ベンチマーク...
EDIT:
およびLinux対「本当のRTOS」のためとして:
私もそれにいくつかの経験を持っている、とはいても、技術的にこれはあなたが記述アプリケーションのための合理的な選択となり、あなたが時間(=お金)を持っていて、締め切りが間に合わなかった場合、誰かを傷つけたり殺したり、何かを破壊したり(あなた自身のハードウェア、無人機など)破壊したり、ミッションクリティカルなジョブ。防衛、航空宇宙、健康/医療機器を考えてください。
Linuxの開発サイクル(コード - >ビルド - >フラッシュ/インストール - >デバッグ、リピート)とリアルタイムOSはLinuxで高速になります(ハードウェアなしでPC上で多くのことをプロトタイプできますまだまだ)、libs/appsのエコシステムはより豊かになり、コミュニティはより幅広く、より少ない特別な技術トレーニングが必要になります。
「致命的なイベントはない」と考えられる場合、実際の埋め込み型RT OSへの移行は、製品信頼性に関するBOM(Bill of Material:フラッシュ/ RAM/CPUパワーの低下)または時には法的責任の問題です。
@LPsの回答のポイントは、Linuxでハードリアルタイムが可能(必ずしもユーザーランドではない)です。