[openrtm-users 01345] Re: high CPU load when deactivate python component

Masayuki Shimizu masayuki.shimizu @ aist.go.jp
2010年 7月 6日 (火) 14:54:52 JST


栗原様
皆様

静岡大の清水です。

議論になっているECの件ですが、以前から気になってました。

一つお聞きしたいのですが、EC内の全てのRTCが
INACTIVEであれば、ECをstopしてしまうという実装は
RTC仕様の違反に当たるのでしょうか。

もし仕様違反でなければ、次のような実装はどうでしょうか。

- RTCのdeactivate時に、そのRTCに関連付けられている
各ECに含まれる全てのRTCの状態をチェックし、
もし全てのRTCがINACTIVEならそのECをstopしてしまう。

- RTCのactivate時に、そのRTCに関連付けられている
ECの状態をチェック(is_running)し、
もしstop状態であればstartさせる。

# 要は、ECをポーリングタイプではなく、
イベントドリブンタイプにしてしまうということです。

上記の実装はユーザRTCの中でもできますが、
OpenRTM-aistの標準実装としてしまえばよいのではと思います
。この実装で不都合な状況はありますでしょうか。

よろしくご検討ください。

清水

--- kurihara shinji <shinji.kurihara @ aist.go.jp> wrote:

> 金広様
> 
> お世話になっております。
> 栗原です。
> 
> 先程の「INACTIVE状態ではACTIVE状態に比べCPU負荷が高く
なっておりました」
> という内容には補足が抜けておりました。
> こちらで確認しましたコンポーネントは、ConsoleIn.pyでし
て、ACTIVE状態で
>
は標準入力からの入力待ちとなるため、INACTIVE状態ではACTIVE
状態よりもCPU
> 負荷が高いと表現致しました。
> 誤解を招く表現をしてしまい、申し訳ございません。
> 
> ご指摘の通り、実際は、onExecute()にて何らかの処理を実
装している場合、
> INACTIVE状態よりもACTIVE状態の方が負荷は高くなります。
> 
> ConsoleIn.pyのonExecute()にて、すぐに"return
> RTC.RTC_OK"にて何も処理を
>
行わないように変更し確認しましたところ、INACTIVE状態とACTIVE
状態とでは
> 負荷はほぼ同じでした。
> 
> 
> 以上、宜しくお願い致します。
> 
> 
> On Tue, 6 Jul 2010 14:18:51 +0900
> Fumio Kanehiro <f-kanehiro @ aist.go.jp> wrote:
> 
> > 栗原様,
> > 
> > 金広@産総研です.
> > 
> >
> 参考までになぜINACTIVE状態の方がACTIVE状態よりもCPU負
荷が高くなるのか教えて
> > いただけないでしょうか.
> >
> ExecutionContextはRTC内のステートマシンの状態によらず
動作しているため,RTCが
> >
> INACTIVEでもCPUを食うのはわかるのですが,ACTIVE状態の
ほうがonExecute()を
> > 実行する分だけ負荷が高くなるように思えるのですが.
> > 
> > 2010/7/6 kurihara shinji
> <shinji.kurihara @ aist.go.jp>:
> > > 松坂様
> > >
> > > お世話になっております。
> > > 栗原です。
> > >
> > > ご連絡、有難うございます。
> > >
>
こちらで確認しましたところ、ご指摘頂きましたように、INACTIVE
状態ではACTIVE状態に
> > > 比べCPU負荷が高くなっておりました。
> > >
> > >
> これは、RTCの実行コンテキスト(PeriodicExecutionContext)
がwhileループを回してい
> > > るためでして、whileループ内ではデフォルトで
> 0.001 秒の sleep が入りますが、0.001
> > > 秒の sleepでは cpu負荷が少々高くなるようです。
> > >
> sleep時間を0.01秒にする事で負荷は約半分に軽減される事
を確認しました。
> > > # sleepが無い場合は、CPUは90%近くなります。
> > >
> > >
> 1msecでコンポーネントを実行する必要が無い場合は、お手
数ですが、rtc.confファイル
> > >
> に以下の一行を追記して、ご確認頂けますでしょうか。
> > >
> > >  exec_cxt.periodic.rate: 10 # 10Hzです。
> > >
> > >
> > > 以上、宜しくお願い致します。
> > >
> > >
> > > On Tue, 6 Jul 2010 11:22:05 +0900
> > > Yosuke Matsusaka <yosuke.matsusaka @ aist.go.jp>
> wrote:
> > >
> > >> OpenRTM-aist開発者の皆様
> > >>
> > >> 産総研の松坂です。
> > >>
> > >>
> Python版のOpenRTM-aistに特有の問題ですが、コンポーネン
トがアクティブ状態にないときに
> > >> CPU負荷が上昇する現象に遭遇しています。
> > >>
> 私の環境だけかもしれませんが、確認してみていただけます
でしょうか?
> > >>
> > >> 以下、再現方法です。
> > >>
> 1.適当なPythonコンポーネントを起動(私は添付のスクリ
プトを使用しましたがそれ以外でも再現します)
> > >>
> 2.コンソールでtopコマンドを入力(この時点でPythonコ
ンポーネントの負荷が10%程度に上昇しているのが確認できま
す)
> > >>
>
3.RTSystemEditor上でコンポーネントをアクティベート(Python
コンポーネントの負荷が数%に低下)
> > >>
> 4.RTSystemEditor上でコンポーネントをデアクティベート
(Pythonコンポーネントの負荷が10%程度に上昇)
> > >>
> > >> 私の開発環境の詳細です。
> > >> VMWare使用
> > >> ホストPC:MacOS X (snow leopard)
> > >> ゲストPC:Ubuntu 10.4
> > >> OpenRTM:1.00-release (debパッケージ)
> > >>
> > >> もし何かわかりましたら教えてください。
> > >>
> > >> --
> > >> Yosuke Matsusaka, Ph.D 
> <yosuke.matsusaka @ aist.go.jp>
> > >>   Interaction Modeling Group /
> > >>   National Institute of Advanced Industrial
> Science and Technology (AIST)
> > >>   Tel: 029-862-6726  Web:
> http://staff.aist.go.jp/yosuke.matsusaka/
> > >>
> > >
> > >
> > > --
> > > ----------
> > > 栗原 眞二 <shinji.kurihara @ aist.go.jp>
> > >
> > > 独立行政法人産業技術総合研究所
> > >  知能システム研究部門 統合知能研究グループ
> > >  〒305-8568
> > >  茨城県つくば市梅園1-1-1 中央第2
> > >
> > >  TEL: 029-861-5956
> > >
> > >
> > 
> 
> 
> -- 
> ----------
> 栗原 眞二 <shinji.kurihara @ aist.go.jp>
> 
> 独立行政法人産業技術総合研究所
>   知能システム研究部門 統合知能研究グループ
>   〒305-8568
>   茨城県つくば市梅園1-1-1 中央第2
> 
>   TEL: 029-861-5956
> 
> 




openrtm-users メーリングリストの案内