- リンクを取得
- ×
- メール
- 他のアプリ
- リンクを取得
- ×
- メール
- 他のアプリ
前回まででストレージの高速読み書きが完了しました。
では一体何を持って完了とするのか?
まずは、
- ベンチマークとの乖離を出来る限り少なくする
- ストレージのスペック上の転送レートとの乖離を出来る限り少なくする
- の2つを基準にして、納得できる目標に達成したかどうかを見極めました。
一度に読み書きするデータサイズ
と、その前にデータサイズの関連を整理しておきます。
HDDにデータを書き込む際にはセクタ単位でデータを書き込みます。で、1セクタは通常 512バイトです。1バイトを書き込むのも、512バイトを書き込むのも1セクタ分の書き込み時間がかかるので、同じ時間で書き込めます。
と言うことは 1セクタで割り切れるデータ量を書き込むのが一番高速なわけです。
例えば 513バイトずつ書き込むと、2セクタ分の書き込み時間がかかるため効率が良くありません。
(※実際には OS のキャッシュなどあるから、そう簡単な計算じゃないと思うけど)
で、今回 LabVIEW で書き込むデータは U64 配列なので、
1セクタ == 512バイト == (512 / 8 (U64) ) = 64ヶ単位で U64 を書き込む
のが一番効率が良さそうです。
と言うわけで以下のベンチマークでは、1度のデータの読み書き個数を64ヶの倍数で測定しました。
RamDisk 上の転送レート
まずは高速な方から行きます。
CrystalDiskMark では私のメインマシンの RamDisk のレートは以下のようになっています。
Write で 5GB/sec 近く出ているのは驚きですね。
RamDisk 上での読み込みレート
ではこのベンチマークにどの程度近づいたでしょうか?
じゃーん。
ベンチマークを上回りました!4640.91MB/sec です!
LabVIEW 早いじゃん!
あ、ちなみにこの数値はまっとうな値じゃないです。
というのもメインマシンの RamDisk は 2GB の容量。どんどんデータを書いていったら直ぐにあふれてしまいます。
このベンチマークではデータを書いたらファイルポジションをファイルの先頭に戻しています(ファイルの位置を設定関数で) これで再帰的に書き込むことで、ディスク溢れを防止しています。
と言うわけで正確な値ではないですが、まあ良しとします。
RamDisk 上での書き込みレート
次は書き込みです。
これは 4088.54MB/sec と言うことで、ベンチマークには及びませんでしたが相当早いレートで書き込めています。
RAID 上の転送レート
いよいよ本番の RAID 上の転送レートに行きます。
今回使っている RAID は NI HDD-8264 相当品で、カタログスペック上では 600MB/sec の転送レートが出ると謳われています。
こちらがベンチマークの結果。
Read はカタログスペック通りですが Write が少し落ちています。が、かなりカタログスペックに近づいている良い値ではないでしょうか。
RAID 読み込みレート
では RAID で読み込みを試してみます。
やったー!!
カタログスペックに近い 593.97MB/sec を達成しました!ベンチマークに若干負けましたが、誤差の範囲でしょう。
RAID 書き込み
さあ書き込みはどのくらい出るでしょうか?
571.2MB/sec。ベンチマークを超える数値が出ました。
まとめ
LabVIEW でも正しくプログラミング&データサイズを指定して実行することで、カタログスペックに近い転送レートが出ることが分かりました。
今回はテスト的な VI を作成してベンチマークしましたが、実際には SCOPE から取得したデータを書き込んだり、データを加工しながら書き込んだりすると思います。
このようなときは如何に CPU 負荷を高いスレッドと、ストレージと読み書きするスレッドを分けるかが肝になると思います(あたりまえですが)
と言うわけでストレージの件、一件落着。
以上、ドルフィンシステム福島でした。
コメント
コメントを投稿