Linuxでframetestという映像向けベンチマーク

ストレージ向けのベンチマークはいろいろあるけど、映像専用の物もあるらしい。
という事で早速入れてみたのでメモ。

#
1, frametestをダウンロード
2, 32Bitのglibcインストール
3, 実行
4, 結果
#

# 1, frametestをダウンロード

こちらからダウンロード
https://support.dvsus.com/hc/en-us/articles/212925466-How-to-use-frametest
ただし、64Bit版は無いようなので、32bit版を使います。
ダウンロードするとパッケージというよりは実行ファイルその物のような形でダウンロードするのでセキュリティの警告が出るけど、**勿論無視。**
ダウンロードしたら実行権を与えておきます。
```
#chmod +x frametest
```

# 2, 32Bitのglibcインストール
デフォルトのUbuntu 22.04(64Bit)のままだと32Bitプログラムなので動かない。
glibc-i686が必要と書いてありますが、Ubuntuだとピンポイントではインストール出来ないっぽい。
よって、ライブラリーごとバサッと入れちゃう。
```
#apt install gcc-multilib
```
これでOK!

# 3, 実行
リンクにある通りにやってみる。
実行すると連番ファイルが大量に生成されるので、テスト用のディレクトリを作った方が消すときに楽です。
Syntaxは
#./frametest [options]
 Options:
   -w size  Perfrom write test with 'size' KB frames or "sd", "hd", "2k", "4k"
   -e       Perform write test with empty frames (open/close test)
   -r       Perform read test using existing frames (default)
   -s       Perform streaming test to/from a single file
   -n num   Number of frames to read or write (default = 1800)
   -a num   Use async I/O with 'num' overlapped operations (default is sync)
   -t num   Use multithreading I/O, with 'num' threads at one time
   -o       Handle completed I/Os out-of-order (not used in read and sync IO)
   -f rate  Limit speed to 'rate' frames per second
   -q num   Maximum 'num' of queued buffers before a frame is dropped
   -b num   Pre-buffer 'num' frames before starting "playback" (default = 5)
   -v       Create/access files in reverse order
   -m       Create/access files in a random pattern
   -l num   Number of frames to loop (default = 0: don't loop)
   -i num   Number of I/Os per frame (default = 1, ignored in async mode)
   -z size  Specifies a custom 'size' for read or write test in KB
   -d num   Use directories, with 'num' files per directory
   -p secs  Pause 'secs' before starting test
   -c perc  Crop mode, read middle 'perc'% of frame (ignored in write test)
   -u secs  Display update interval in seconds (default = 1s)
   -h secs  Histogram displays last 'secs' worth of info (default = all)
   -x file  Export detailed timing to a file (comma separated), append '.csv'

まずは、DPX 2Kを想定した書き込みなので、-w 2kにしてフレーム数はデフォルトは1800ですが9000枚に。
またログを取っておきたいので-x でファイル名.csvを指定。
最後に出力先で、今回はHDD x12本のSoftware RAIDをマウントしてあるディレクト先に書いてみます。
ちなみに、**１回目のテストはReadが混ざるので２回目以降の方がリアルな結果になるらしい。**
```
#mkdir /data/set1
#./frametest -w 2k -t 4 -n 9000 -x DPX_write.csv /data/set1

Test parameters:      -w12512 -n9000 -t4 
Test duration:        142 secs
Frames transferred:   8977 (109687.719 MB)
Fastest frame:        8.324 ms (1467.96 MB/s)
Slowest frame:        650.225 ms (18.79 MB/s)

Averaged details:
              Open        I/O         Frame      Data rate   Frame rate
  Last 1s:   0.033 ms    66.82 ms    17.24 ms   708.67 MB/s   58.0 fps
       5s:   0.026 ms    62.94 ms    16.85 ms   725.22 MB/s   59.4 fps
      30s:   0.026 ms    60.36 ms    16.54 ms   738.95 MB/s   60.5 fps
  Overall:   0.028 ms    57.67 ms    15.86 ms   770.21 MB/s   63.0 fps

Histogram of frame completion times:
   20% |                                                                     
       |                                       *                             
       |                                      **                             
       |                                      ***                            
       |                                     ****                            
       |                                     *****                           
       |                                    ******                           
       |                                   ********                          
       |                                  **********               **        
       |                               *********************      ****       
       +|----|-----|----|----|-----|----|----|-----|----|----|-----|----|
  ms  <0.1  .2    .5    1    2     5   10   20    50   100  200   500  >1s


  Overall frame rate .... 63.12 fps (808663695 bytes/s)

  Average file time ...... 57.630 ms
  Shortest file time ..... 8.324 ms
  Longest file time ...... 650.225 ms

  Average create time .... 0.028 ms
  Shortest create time ... 0.004 ms
  Longest create time .... 5.511 ms

  Average write time ..... 57.6 ms
  Shortest write time .... 8.3 ms
  Longest write time ..... 650.2 ms

  Average close time .... 0.008 ms
  Shortest close time ... 0.001 ms
  Longest close time .... 0.409 ms

Writing log file...

```

# 4, 結果
なんかクリスマスツリーみたいでかわいいけど、これはレイテンシーの分布ですね。
スループットは 770.21 MB/sで、フレームレートは63.0 fps。
良いのか悪いのか判断が解りませんが、連番で60fps出てるよって事かな。だとしたらGoodだと思いたい。

連番ではなくシングルファイルの時は以下のようにシンプルに。
```
書き込み
#./frametest -s -w 8192 /data/set1/testfile1  
読み出し
#./frametest -s -z 8192 -r /data/set1/testfile1
```

以上、まずは簡単にやってみたレベルですが、いつか誰かの役に立ちますように。