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

kurihara shinji shinji.kurihara @ aist.go.jp
2010年 7月 6日 (火) 15:07:45 JST


松坂様

栗原です。

早速ご確認頂き、有難うございます。

> この部分に関して、非アクティブ状態ではそもそもループを回さない方が良いと思うのですが、
> このような実装になっているのは何か理由があるのでしょうか?
RTMでは、一つのExecutionContextで複数のRTCを駆動する事が可能となっております。
仮に、非アクティブ状態でループを回さないようにした場合、一つのECに複数のRTC
が関連付けられてる状況において、一つの RTC が非アクティブ状態の時に、他のアク
ティブ状態のRTCまでも駆動関数(on_execute)が実行されないといった事になってしまい
ます。

上記のような理由もあり、ExecutionContextのループは、RTCの状態に関わらずループ
する仕様となっております。


以上、宜しくお願い致します。



On Tue, 6 Jul 2010 14:07:05 +0900
Yosuke Matsusaka <yosuke.matsusaka @ aist.go.jp> wrote:

> 栗原さん
> 
> 松坂です。いつもお世話になっています。
> 
> 2010/7/6 kurihara shinji <shinji.kurihara @ aist.go.jp>:
> > 1msecでコンポーネントを実行する必要が無い場合は、お手数ですが、rtc.confファイル
> > に以下の一行を追記して、ご確認頂けますでしょうか。
> >
> >  exec_cxt.periodic.rate: 10 # 10Hzです。
> 
> 上記の変更でかなり負荷が軽減されることを確認しました。
> 
> > これは、RTCの実行コンテキスト(PeriodicExecutionContext)がwhileループを回してい
> > るためでして、whileループ内ではデフォルトで 0.001 秒の sleep が入りますが、0.001
> > 秒の sleepでは cpu負荷が少々高くなるようです。
> > sleep時間を0.01秒にする事で負荷は約半分に軽減される事を確認しました。
> > # sleepが無い場合は、CPUは90%近くなります。
> 
> この部分に関して、非アクティブ状態ではそもそもループを回さない方が良いと思うのですが、
> このような実装になっているのは何か理由があるのでしょうか?
> #私がRTMの規格を誤解していたらすみません。
> 
> -- 
> 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



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