P2P転送で起きた不可解なこと

こんにちはドルフィンシステムの笹生です。

今回は、NI P2P 転送についてよく理解できない現象があり情報を共有させて頂きたいとおもいます。
以前も NI P2P について記事にさせていただきましたが、P2P 転送とはデバイス間のデータ転送の方法の一種です。間に CPU等を介さずに直接デバイス間でデータを転送するため、高速、安定してデータを転送できる仕組みです。
今回、NI社 PXI FPGAボード製品である PXIe-7976R からPXIe-7915R へ固定長のデータ転送を実装していたところ、不可解な現象がありました。

完全にデータを転送できない?

どうしても完全に転送先に転送できず、転送元の FPGA ボードの P2P Writer FIFO にデータが残ってしまうのです
わかりにくいので少々説明します。
ざっくりした説明ですが以下の様なことをしました。
①データ転送したいサイズは固定(たとえば 4000を指定)
②次の転送までは十分に時間がある(本来 FIFO オーバーフローしない)
③転送先(受信側)では指定サイズ以上たまったら読み出しを開始し、空になるまで読み出すようにする
固定サイズデータが漏れなく転送できるように、P2P Writer 側の FIFO も P2P Reader 側の FIFO も固定サイズよりも大きいサイズを設定しています。

もし読み出さなかった場合には P2P Reader FIFO からデータが溜っていき、一杯になったら P2P Writer FIFO にデータが溜っていくもの、と思っていました。
しかし今回は、P2P Writer も Reader もどちらも固定サイズよりも大きいので、1回の転送で、P2P Reader FIFO に収まるサイズのはずでした。。。
例えば今回は、固定サイズが 4000 サンプルに対して、P2P Reader FIFO の深さが 4095 を指定しました。
固定サイズは FIFO の深さ以下なので当然全部転送でき、P2P Reader FIFO にたまると思っていました。

しかしながら、実際に P2P Reader FIFO にたまるサイズは 3200~3300前後で(これは変化するようです)残りは P2P Writer FIFO にたまったままでした。

回避策

ちなみに上記の場合固定サイズが FIFOサイズよりだいぶ小さい(3000未満など)であれば全部転送されます。つまり、実際に使用できる FIFO の深さは指定した深さよりも少し小さいという可能性が高いです。
これは仕様なのか、バグなのか。。。私の使い方が悪いのかわかりませんが、今までこんなことなかったようにも思えるので、不思議です。

まとめ

P2P Reader FIFO にデータが全部たまったら読み出そうとする処理はあまり良くないようですね。
あくまでストリーム転送なので、P2P の FIFO にはデータをためずに別途バッファを用意するのが本来の使い方かもしれません。


















0 件のコメント :

コメントを投稿