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

Yawata Naofumi hatch @ ubi.cs.ritsumei.ac.jp
2012年 2月 10日 (金) 09:52:38 JST


安藤様。

八幡です。
お早い対応をしていただいたのに、
メールの返事遅れまして申し訳ありません。

omniORBのビルドを行いたかったので一度OpenRTM-aistを
ソースコードからビルドできるかを確認していました。

ビルドに関してはこ ちら
<http://www.openrtm.org/openrtm/ja/content/%E3%82%BD%E3%83%BC%E3%82%B9
%E3%81%8B%E3%82%89%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89-windows%E7%B7%A8>
のページを参考に行ったのですが、
C:/distribution/omniORM-4.1.4/bin/ 内のファイルは変更されず
omniORBに関わる部分がビルドされているのかわかりませんでした。

加えて、上記のページのバッチファイルを用いて行うとOpenRTM-aist
全体のビルドを行なっていましたが、

    *./installer/autowix.cmd line:84〜99*

    if "x%OMNI_ROOT%" == "x" (
    echo Environment Variable "OMNI_EOOR" is not set. Abort.
    goto END
    )
    set INCLUDE_OMNIORB=YES

    if not exist omniORB_inc.wxs (
    cd omniORB
    set TMP_PYTHONPATH=%PYTHONPATH%
    set PYTHONPATH=../../bin;%PYTHONPATH%
    echo Generating omniORB_inc.wxs......
    omniwxs.py
    set PYTHONPATH=%TMP_PYTHONPATH%
    copy omniORB_inc.wxs ..
    cd ..
    )

以外をコメントアウトすることでomniORBのみビルドを行えるのでしょうか?

> 八幡さんがやりたい事というのは、operationのリクエストの到達から実際に
> operationがdispatchされるまでの時刻を計測したいということでよろしいでしょうか?
また、上記についてなのですが、もう少し詳しくお伺いさせていただきたいのですが、
あるクライアントが別PC上のサーバを呼び出す際のomniORBの動作は"GIOPパケット受信
からディスパッチ"と"ディスパッチの終わりからGIOPパケットの送信"ということで
よろしいのでしょうか?

もしそうなのであればインターセプタは

  * *clientSendRequest*
  * *clientReceiveReply*
  * *serverReceiveRequest*
  * *serverSendReply*

の4つであり、これらを利用するにはサーバコード内で*
*

    omniInterceptors* interceptors = omniORB::getInterceptors();
    interceptors->clientSendRequest.add(myInterceptorFunc); //myInterceptorFuncは呼び出したい関数名

を記述すればいいということでしょうか?

知識足らずで質問が多くなってしまい申し訳ございません。
宜しくお願いいたします。


(2012/02/09 11:57), Ando Noriaki wrote:
> 安藤です
>
>> 安藤さん
>>
>> お早い返信ありがとうございます。
>> また、返信が夜遅くになりまして、申し訳ございません。
>>
>>> 八幡さんがやりたい事というのは、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
>
>


-- 
┏━━━━━━━━━━━━━━━━━━━━━━━
┃
┃ 立命館大学 情報理工学部 情報システム学科
┃ ユビキタス環境研究室 B4
┃ Name :八幡 尚文(Yawata Naofumi)
┃ Mail :hatch @ ubi.cs.ritsumei.ac.jp
┃
┗━━━━━━━━━━━━━━━━━━━━━━━

-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://www.openrtm.org/pipermail/openrtm-users/attachments/20120210/842e5b82/attachment-0001.html>


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