[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 メーリングリストの案内