[openrtm-users 02434] Re: RTCの処理測定について

Ando Noriaki n-ando @ aist.go.jp
2012年 2月 9日 (木) 11:57:19 JST


安藤です

> 安藤さん
>
> お早い返信ありがとうございます。
> また、返信が夜遅くになりまして、申し訳ございません。
>
>>八幡さんがやりたい事というのは、operationのリクエストの到達から実際に
>>operationがdispatchされるまでの時刻を計測したいということでよろしいでしょうか?
>
> はい、そのとおりです。
>
> お教えいただいた
>
>      omniInterceptors::serverReceiveRequest_T::info_T info(*this);
>
> については、まだどのような動作をするのか分からないので調べて
> 利用してみようと思います。

omniinterceptorについてはこちらに書いてあります
http://omniorb.sourceforge.net/omni40/omniORB/omniORB010.html

> ご質問なのですが、GIOP_S.ccのファイルが
> OpenRTM-aist-1.1.o-RC3_vc9.msiを用いてインストールを行ったところ、
> OpenRTM-aist\1.1\omniORB\4.1.4\内に存在しなかったのですが、
> 利用するには、GIOP_S.ccのファイルを入れればいいのでしょうか?
> また、omniORB\4.1.5だとGIOP_S.cppファイルが確認できました。

OpenRTMの配布パッケージにはomniORBのバイナリとヘッダしか
含まれていません。(ソースは必要ありませんので。)

また、もしomniORBのソースを書き換えて時間を計測したいのでしたら、
omniORBを再コンパイルする日通用がありますよ。

>>ただ、ちょっと気になってomniORBのコード(GIOP_S.cc)を眺めていたら、
>>omniInterceptors::serverReceiveRequest_T の呼び出しが、
>>アンマーシャルのあとに行われているので、このインターセプタで
>>時刻を計測すると、アンマーシャル後の
>>・オブジェクトテーブル検索の時間
>>・スタブでの引数の展開と実オペレーション関数の呼び出し
>>の時間だけを計測することになりそうです。
> 加えて上記については
>    {
>      omniInterceptors::serverReceiveRequest_T::info_T info(*this);
>      omniInterceptorP::visit(info);
>    }
> をomniInterceptors::serverReceiveRequest_Tと入れ替えると、
> 上手く動作しなくなるのでしょうか?
>
> 知識足らずな質問で申し訳ございません。

これは、八幡さんがやりたい事に依存します。
どこからどこまでの時間を測りたいかによってomniinterceptorが
使える場合と使えない場合がある、という意味です。

示していただいた論文では、オペレーションリクエスト開始、アンマーシャル、ディスパッチ
までの時間を図っていたようですが、intercctptorの場所を見るかぎり、
アンマーシャルの後に、serverreceiveRequestのinterceptor呼び出しがあるので、
アンマーシャルを含めた時間が測れないのではないかと推測します。

impl()->unmarshalRequestHeader(this); // アンマーシャル

omniInterceptors::serverReceiveRequest_T::info_T info(*this);
omniInterceptorP::visit(info); // interceptor呼び出し

上記のWebページにも以下のように書かれているので、たぶんこの
推測も正しいかと思います。
(行われているのはリクエストヘッダのアンマーシャルだけのようですが。。。)

serverReceiveRequest
Called when the server receives a request, just after unmarshalling
the request header. See the getCodeSetServiceContext() function in
src/lib/omniORB/orbcore/cdrStream.cc for an example.



> 宜しくお願いいたします。
>
>
> (2012/02/09 0:39), Ando Noriaki wrote:
>> 八幡さん
>>
>> 産総研 安藤です
>>
>> 一番いいのは、著者の方がこのMLにいらして答えてくださることだと思いますが、
>> 私の分かる範囲でお答えします。
>>
>> #論文を読む限りはRTMというよりはCORBA全般に関わる
>> #事のようにも見えます。GIOPパケットに優先度情報を含めて、
>> #優先度を考慮したディスパッチを行うことで性能向上を狙うという内容ですかね?
>> #リアルタイムネットワークが使える環境でしたら面白いですね。
>>
>> 八幡さんがやりたい事というのは、operationのリクエストの到達から実際に
>> operationがdispatchされるまでの時刻を計測したいということでよろしいでしょうか?
>>
>> CORBAにはPotableInterceptorという仕組みがあって、CORBAの動作の
>> 様々な部分にInterceptorを仕掛けて、挙動を変えたりすることができます。
>>
>> ただし、もしomniORBをお使いでしたら、CORBA標準のPortableInterceptor
>> は確か実装されておらず、omniInterceptorという独自のものが利用できると記憶しています。
>>
>> で、コレを使うと、operationのrequestをフックすることができるので、ここで時刻を測り
>> あとは、呼ばれたoperationで時刻を測ればやりたい事ができるように思います。
>>
>> ただ、ちょっと気になってomniORBのコード(GIOP_S.cc)を眺めていたら、
>> omniInterceptors::serverReceiveRequest_T の呼び出しが、
>> アンマーシャルのあとに行われているので、このインターセプタで
>> 時刻を計測すると、アンマーシャル後の
>> ・オブジェクトテーブル検索の時間
>> ・スタブでの引数の展開と実オペレーション関数の呼び出し
>> の時間だけを計測することになりそうです。
>>
>>
>> GIOP_S::handleRequest() {
>>
>>   try {
>>
>>     impl()->unmarshalRequestHeader(this);
>>
>>     pd_state = RequestIsBeingProcessed;
>>
>>     {
>>       omniInterceptors::serverReceiveRequest_T::info_T info(*this);
>>       omniInterceptorP::visit(info);
>>     }
>>
>>     // Create a callHandle object
>>     omniCallHandle call_handle(this, pd_worker->selfThread());
>>
>>     // Can we find the object in the local object table?
>>     if (keysize() < 0)
>>       OMNIORB_THROW(OBJECT_NOT_EXIST,OBJECT_NOT_EXIST_NoMatch,
>>                     CORBA::COMPLETED_NO);
>>
>>     CORBA::ULong hash = omni::hash(key(), keysize());
>>
>>     omni::internalLock->lock();
>>     omniLocalIdentity* id;
>>     id = omniObjTable::locateActive(key(), keysize(), hash, 1);
>>
>>     if( id ) {
>>       id->dispatch(call_handle);
>>       return 1;
>>     }
>>
>> なので、omniinterceptorではご希望のことはできないかもしれませんね。
>> もし、研究としてこうしたCORBAの様々な処理の正確な時間を計測したいのでしたら、
>> ソースの中身をよく吟味して、CORBAのソースの希望の場所に時刻計測関数を
>> 埋め込んで地道に測るのが良いのではないでしょうか。
>>
>>
>>
>> 2012年2月8日23:43 Yawata Naofumi <hatch @ ubi.cs.ritsumei.ac.jp>:
>>> 夜分遅くに失礼致します。
>>>
>>> 立命館大学の八幡と申します。
>>>
>>> RTMについてお聞きしたいことがあり、メールさせていただきました。
>>>
>>> RT ミドルウェアのリアルタイム拡張の論文に記載されている
>>> 評価についてなのですが、同じくアンマーシャリング処理から、
>>> RTC→アンマーシャリング処理までの処理時間を測定したい
>>> のですが、調べても測定する方法が分かりませんでした。
>>>
>>> そのため、測定の方法を教えていただきたく、メールさせてい
>>> ただきました。
>>>
>>> ※図に示すと赤枠の中の時間測定を行いたいと考えてます。
>>>
>>>
>>> もし、Linux環境で無いと無理なようでしたら、VMwareを用いて
>>> 行いたいと思いますのでお願いします。
>>>
>>> お忙しいところ申し訳ございませんが、よろしくお願いいたします。
>>>
>>> -利用環境-
>>> OS:windows 7 HOME premium
>>> RTM:OpenRTM-aist 1.1 RC3 C++
>>> eclipse:Version: 3.4.2
>>>
>>> --
>>> ┏━━━━━━━━━━━━━━━━━━━━━━━
>>>>>> ┃ 立命館大学 情報理工学部 情報システム学科
>>> ┃ ユビキタス環境研究室 B4
>>> ┃ Name :八幡 尚文(Yawata Naofumi)
>>> ┃ Mail :hatch @ ubi.cs.ritsumei.ac.jp
>>>>>> ┗━━━━━━━━━━━━━━━━━━━━━━━
>>>
>>>
>>> _______________________________________________
>>> openrtm-users mailing list
>>> openrtm-users @ openrtm.org
>>> http://www.openrtm.org/mailman/listinfo/openrtm-users
>>>
>> _______________________________________________
>> openrtm-users mailing list
>> openrtm-users @ openrtm.org
>> http://www.openrtm.org/mailman/listinfo/openrtm-users
>
>
> --
> ┏━━━━━━━━━━━━━━━━━━━━━━━
>> ┃ 立命館大学 情報理工学部 情報システム学科
> ┃ ユビキタス環境研究室 B4
> ┃ Name :八幡 尚文(Yawata Naofumi)
> ┃ Mail :hatch @ ubi.cs.ritsumei.ac.jp
>> ┗━━━━━━━━━━━━━━━━━━━━━━━
>
> _______________________________________________
> openrtm-users mailing list
> openrtm-users @ openrtm.org
> http://www.openrtm.org/mailman/listinfo/openrtm-users



-- 
安藤慶昭@独立行政法人産業技術総合研究所 知能システム研究部門
    統合知能研究グループ 主任研究員, 博士(工学)
    〒305-8568 つくば市梅園1-1-1 中央第2
    e-mail: n-ando @ aist.go.jp, web: http://staff.aist.go.jp/n-ando
    OpenRTM-aist: http://www.openrtm.org

Noriaki Ando, Ph.D.
    Senior Research Scientist, RT-Synthesis R.G., ISRI, AIST
    AIST Tsukuba Central 2, Tsukuba, Ibaraki 305-8568 JAPAN
    e-mail: n-ando @ aist.go.jp, web: http://staff.aist.go.jp/n-ando
    OpenRTM-aist: http://www.openrtm.org


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