LabVIEW で高速にストレージに書き込む (2)

前回で "自作ベンチマークソフト" で RAMDISK に 388MB/sec の書き込みが出来ましたが、なんだか遅いような気がするのでさらに調べてみます。

サンプルの 1 つめ (2-Multi-ch RF MIMO RecPlay demo)

このサンプルは RFSA から 2ch のデータをストレージに保存する物です。

RF Record & Playback を見てみると、

 →RF Record & Playback.lvproj

  →Recorder.vi

   →Stream NI-Scope.vi

で NI-Scope から取得したデータをファイルに保存する、P-C パターンが実装されており、ここがデータ取得→ファイルに保存のコア部分のようです。

RFSA は PXIe-5673 が前提。85MHz ~ 6.6GHz 対応の RF モジュールですね。

clip_image001[6]

Recorder.vi を見ると、

  1. NI-RFSA の初期化とオープン (RF周波数、IQ レート、帯域、LO など) を行い
  2. 同時に RF周波数などの設定値を記録する ini ファイルの準備をし
  3. Stream NI-Scope.vi を開いて、VI 上の制御器に値を設定し ( Invoke ノードで)
  4. Stream NI-Scope.vi を実行(Run)

Stream NI-Scope.vi 内部では、

  1. NI-SCOPEバイナリ 16 をフェッチ.vi から波形を取得、
  2. 波形をファイル書き込み用 Consumer ループにキューで送信(→ファイルに保存)と
    もう一つ分岐した波形を、チャンネル番号などをバンドルした SMT(wfm) に入れて SMT キューに向けて送信しています。
  1. SMT キューに入れられたデータは Recorder.vi の右上のブロックで受信し、

周波数領域・パワーに変換したものがグラフと Graph Unit に、dBm や impedance 等が数値で表示されます。

  1. 終了時は、
    1. wfm info を取得(?)
    2. ファイルのクローズ
    3. NI-RFSA のクローズが行なわれて終了です。
    この流れを見ると、とりあえず NI-SCOPE から取得したデータをファイルに保存するなら、Stream NI-Scope.vi を流用するのが良さそうです。

サンプル 2つめ (4-NI RF Record Playback (NI5672)v2.1)

このサンプルは RFSA から 4ch のデータをストレージに保存する物です。

4-NI RF Record Playback (NI5672)v2.1 は、

Record & Playback UI.lvproj

  →NI Record & Playback Main.vi

   →Configure & Record data.vi

    →Set RFSA Record Settings.vi

     →niRFSA Simple Record.vi

で 1つめのサンプルと同じく NI-RFSA からのデータをファイルに保存しています。Simple というだけあって 1つめよりもだいぶシンプル。

RFSA は、PXIe-5672 が前提。250kHz~2.7GHz 対応の RFモジュール。

niRFSA Simple Record.vi 一つのファイル内で、RFSA 設定からファイルの保存まで行なっています。

設定値の記録は、Configure & Record data.vi 内部で XML に保存。

RF 関連の設定は Set RFSA Record Settings.vi で行なうという流れ。

細かなところは 1つめと同じなので割愛。

clip_image002[6]

サンプル 3つめ (Basic FlexRIO Streaming)

こちらのサンプルは2つと違い、FlexRIO 空のデータをファイルに保存するもの。

いわゆる FlexRIO シリーズの、

NI PXIe-7961R

Virtex5 SX50T

NI PXIe-7962R

Virtex5 SX50T, 512MB DDR2

NI PXIe-7965R

Virtex5 SX95T, 512MB DDR2

に対応しています。

弊社が保有しているのは NI PXIe-7965R なので、そのまま動くはずです。

このサンプルにはプロジェクトが2種類含まれていて、

Basic Streaming(under development)

Benchmark

の2種類。

まずは Basic Streaming で、FlexRIO からストレージに書き込みを行なってみます。

clip_image003[6]

under development と言うだけあって、VI を実行して直ぐに終了してしまう場合がありますが、こりずに Run ボタンをクリックするとデータ転送が開始されます。

ポイントは "Data Rate" 制御器。

ここに 600MB/sec 等と入れておくと、FlexRIO から指定したデータレートで創出してくるので、それを TDMS ファイルに書き込みます。

このサンプル + FlexRIO PXIe-7965R + RAID ストレージ(NI HDD-8265) の組み合わせで、600MB/sec で安定した転送(FPGA Overflow しない) が行えました。

まとめ

前回の自作ベンチマークソフトでは 388MB しかストレージへの書き込みが出来なかったですが、ストレージに送り込むデータ次第では転送レートを上げることが出来るようです。

当たり前と言えば当たり前なのですが、PXIe-8130 搭載の CPU AMD Turion では 388MB/sec が上限だったという事なのでしょう。

次は、FlexRIO のサンプルを改造して、デジタイザ→FlexRIO の転送を P2P で行なってみることにします。

コメント