未来ロボット技術研究センターの清水です。
横やり&手前味噌ですいません。
RTMのRT_PREEMPT Linux環境下でのリアルタイム化については、すでに、0.4の時代に
実現されており、ソースコード、論文なども公開しております。
https://sites.google.com/site/roboticstools/HOME/RTM/RealTimeRTM
清水 正晴, 戸田 健吾, 林原 靖男, 大和 秀彰, 古田 貴之, “Linux標準機能を利用
したRTミドルウェア周期実行機能のリアルタイム化 -ハプティックジョイスティック
による全方位移動電動車椅子操縦システムへの適用-”, 計測自動制御学会論文集,
Vol. 46, No. 1, pp. 16-23, 2010.
#サイトにもありますが、産総研の方々が公開してくださったソースコードを元にし
ています。ありがとうございます。
これをうけて?
RTM1.0では、標準でリアルタイム実行コンテキストが実装されているはずです。<安
藤さんフォローお願いします
管さんのWEBにも有りますが、Ubuntuを利用すると、標準リポジトリにリアルタイム
対応のカーネルがあるので、簡単に試せて良い時代です。
ここから、RTMというかLinuxのリアルタイム化の話で、すこし、本MLとは話題がずれ
てしまうので簡単にしますが、
管さんのWEBで5msのジッターとの記述がありましたが、ページフォルトの可能性もな
きしもあらずですが、SMIの影響をを疑ってみたらいいです。
SMIは、OSから無効にする以外に対処できない割り込みなので、マザーボードのBIOS
の作り等により、大きな時間、OSに処理が戻ってこないことがあるためです。
BIOSでSMIで無効にするオプションがあるか、SMIを無効にするドライバモジュールを
読み込むことで対処できます。
後者のドライバモジュールでは、BIOSで対象レジスタが書き込み不可になっていると
効果がありませんが。
ただし、SMIは、System management interruptsの略でですが、読んで字のごとくの
機能を提供しているので、無効にすると、いろいろな影響が出るかもしれないことを
記しておきます。
#IBM製のPCは、この辺意識していてい、SMIが大きな時間、処理をOSからとらないよ
うに設計されていたりするらしいです。
後、最近のx86のCPUはマルチコアがほとんどなので、リアルタイムのプロセスのみ
を、特定のコアに割り付ける方法(CPUアフィニティ)も良くとられます。
https://access.redhat.com/site/documentation/ja-JP/Red_Hat_Enterprise_MRG/2/
html/Realtime_Tuning_Guide/sect-Realtime_Tuning_Guide-General_System_Tuning-
Interrupt_and_Process_Binding.html
というわけで、まとめるとRT_PREEMPT Linux環境下でのリアルタイム処理は、
1,SMIを適切に処理する
2,アプリケーションをPOSIXのRT APIを使って適切に書く
3,リアルタイム化したいプロセスのみ特定のCPUコアに割り付ける(CPUアフィニ
ティ)
をおこなうと、所謂、ハードリアルタイムを実現でできるところまで、来ています。
#ジッター性能は、さらに専用にチューニング・リアルタイム化されたLinuxの方が
性能が良い場合が多いですが
以上、参考になればとおもいます。
岡田です.
お世話になります.菅さんのFBで素晴らしい記事を見つけました.
ぜひ使ってみたいので,メインストーリームにはいるといいな,と思います.
http://mohammedari.blogspot.jp/2013/10/openrtm-aist.html?m=1