[openrtm-users 00346] Re: OutPort のバッファリングについて

Akio Uda uda-axa @ necst.nec.co.jp
2008年 1月 30日 (水) 11:09:26 JST


To: 産総研 安藤様

いつも御世話になります。宇田@NECシステムテクノロジーです

早速のご回答をどうもありがとうございます。

> 宇田様
> 
> 安藤です
> 
> いつもお世話になっております。
> 
> > OpenRTM-aist-0.4.1のOutPortのバッファリングについてご教授下さい。
> >
> > OutPortにおいて、ブロックモードでのデータ書き込みを行いたいのですが、
> > OutPort.hを拝見しますと、write()メソッドの中で
> >
> > virtual bool write(const DataType& value)
> > {
> >  ...
> >  while (m_writeBlock && this->isFull())
> >  {
> >    /* フル状態解消待ち */
> >  }
> >  ...
> > }
> >
> > のようにバッファフルの解消待ちをされているものの、RingBuffer.h では
> > isFull()が常にfalseを返すように見受けられるのですが、0.4.1 ではまだ
> > ブロックモードには対応されていないのでしょうか?
> 
> RingBuffer.hで定義されているバッファはフル状態にならないバッファですので、
> ブロッキングをONに設定してもブロッキングされません。
> 
> OutPort(とInPort)はテンプレートの引数として、バッファを取ることができ、
> これにより、コンポーネント開発者は独自の機能を持つバッファを
> OutPortもしくはInPortで使用することができるようになっています。
> 
> ですので、BufferBaseを継承した独自のバッファがisFullでtrueを返す場合
> 一応ブロッキングされるはずです。

了解致しました。では、独自バッファでの実装も検討したいと思います。


> ただ、この機能はまだ十分にデバッグされておらず、
> 有効に機能するかどうかはこちらではちょっとわかりません。
> 
> > またバッファクリアを行いたいのですが、この場合は setReadBlock()で非
> > ブロックモードを指定した後、read() を false が返るまで繰り返せばよろ
> > しいでしょうか?(m_readTimeout はデフォルト値 0 を想定しています)
> 
> 現在のRingBufferでは、常に最新値を読むので、
> ご希望のバッファクリアに相当する動作はおそらくしないものと思われます。

この場合、OutPortのread()の使い方としては、例えば最後に書き込んだ
データの確認などを想定されていますでしょうか?


> 大変申し訳ないのですが、InPortおよびOutPortの特にバッファ周りは、
> いま一つ完成度が低く、次のバージョンでは構造的に大幅に見直す可能性があります。
> 
> 問題の一つとして、0.2.0では一つのOutPortから複数のInPortに
> つないだ場合、すべてにデータが送信されるのに対して、0.4.0では
> SubscriptionTypeの組合せによっては、うまくすべてにデータが
> 送信されないなど、バッファ周りの設計の不備による問題点が明らかになっております。
> 
> 次期バージョンでは、このあたりの問題をきちんと解決したいと考えております。
> 
> 何か、ご意見やアイディアなどございましたら、お教えいただけないでしょうか。
> よろしくお願いいたします。

了解致しました。

OutPortからInPortへのブロードキャストは多用する可能性がありますので、
対応して頂けると助かります。ただ、1つのブロードキャスト内で異なる
SubscriptionTypeを混在させるシーンは、今のところ思い浮かびません。

また、InPortでデータが引き取られたことをOutPortにフィードバックする
機構があると、ハンドシェークが行えるのでデータの取りこぼしが防げる
かもしれません(ブロードキャストの場合は難しそうですが)。

あと、次期バージョンの大まかなご予定など、もし決まっていましたら
教えて頂けますでしょうか?


zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
z  宇田 安規男                                                        z
z  NECシステムテクノロジー株式会社  システムテクノロジーラボラトリ  z
z  エキスパート                                                        z
z  神奈川県川崎市中原区下沼部 1753  NEC 玉川事業場 N棟30F              z
z  〒 211-8666   Tel: 044-431-7574  Fax: 044-431-7588                  z
z  E-mail: uda-axa @ necst.nec.co.jp  内線:  8-22-60734  社〒: 22-60600  z
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz




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