【RotorHazard】microSDストレージのベンチマーク測定とSanDisk Ultra 16GBの結果

# 23. ベンチマークは漢(おとこ)のロマン！

この記事はFPVドローン ラップ計測システム【RotorHazard】をRaspberry Piで作成するにあたってのTipsをまとめたものです。ですが一般的なラズパイ構築方法としても参考になるかと思いますので、ぜひご活用ください。

### 23-1. ラズパイ向ベンチマーク測定の前準備

やっぱりロマンですよね？ベンチマークってｗ
どうしてもクロックアップやパフォーマンスを少しで向上させようとしてしまうのが我々ヲタク道の常なのであります。今回参考とさせてもらったサイトは下記となります。ラズパイ界隈では有名な下記サイトですが、ベンチマーク情報が充実していて私も少なからず参考にしております。

https://www.fabshop.jp/%E3%80%90-%E7%B6%9A%E5%A0%B1-%E2%91%A2-%E3%80%91raspberry-pi-3-model-b%E3%81%A7%E3%81%AE%E5%90%84%E7%A8%AE%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%E5%88%A5%E3%83%99%E3%83%B3%E3%83%81%E3%83%9E/

https://www.fabshop.jp/%e3%80%90-%e7%b6%9a%e5%a0%b1-%e7%95%aa%e5%a4%96%e7%b7%a8-part3-%e3%80%91%e3%81%aa%e3%81%97%e3%81%aeraspberry-pi-3%e3%82%9216gb%e3%81%aemicrosd%e3%81%a7%e8%b5%b7%e5%8b%95%e3%81%97%e3%81%a6/

様々な結果が見れて面白いっすね。上記リンクはストレージのベンチマークのページの最初と最後になりますが、一通り眺めてみてください。そしてワイも同じように測定をしてみようかと思います。
近い条件での測定ができればとは思いますが、まずはまねっこして最初から入っていない2つのソフトをインストールして進めていきます。

```
sudo apt update

sudo apt install cpufrequtils
sudo apt install sysbench

sudo /etc/init.d/cpufrequtils restart
```
※ **sudo reboot** もしくは **sudo shutdown -r now** でOS再起動しても良いですが、何か都合悪い場合にはサービス再起動を一度実施すると良いかと思います。今回はラズパイ3B全体のベンチマーク測定ということでなく、あくまでもストレージの読み書きの速度の指標を取りたいと思っていますので、そこに特化して説明します。
まず、現在のmicroSDの製品情報がラズパイ側でどのように見えているかを確認します。

```
sudo parted -l

Model: SD SL16G (sd/mmc)
Disk /dev/mmcblk0: 15.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
 1      4194kB  273MB   268MB   primary  fat32        lba
 2      273MB   15.9GB  15.7GB  primary  ext4
```

ストレージの状態が確認できます。
microSDはモデル名として **【 SL16G 】** というものに見えたのですが、SanDisk Ultra 16GB (Class10)です。※以前は結構高級なmicroSDでした。ある程度の耐久性もあるかと思います。これらの情報はベンチマーク結果としてメモに残しておきましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/500291/4a676bf3-5d47-6994-f239-bb121821e352.png)

```
cpufreq-info –p
600000 1200000 ondemand
※ここで ondemand / performance / powersave かを確認

cpufreq-info –f
600000
```
次にベンチマーク準備としてCPUクロック数を固定します。最初のコマンドは確認のためのもので、現在のCPUの設定状態を示します。 **ondemand** は負荷により可変するデフォルト設定の状態です。これをCPUクロック数をMAX値に常に保つよう **performance** へ変更します。

```
sudo cpufreq-set –g performance

cpufreq-info –p
600000 1200000 performance

cpufreq-info –f
1200000
```

これによりCPUクロックをMAX値である **1.2GHzへ固定** することができました。

### 23-2. sysbenchを用いたベンチマーク測定

そして実際にベンチマーク測定を進めていきます。

```
sysbench --test=fileio prepare

sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)

128 files, 16384Kb each, 2048Mb total
Creating files for the test...
Extra file open flags: (none)
Creating file test_file.0
Creating file test_file.1
～～ 省略 ～～
Creating file test_file.126
Creating file test_file.127
2147483648 bytes written in 206.77 seconds (9.90 MiB/sec).
```
こんな感じで、128個のテストファイルを作成し、読み書きの速度を **MiB/sec** にて表します。私のSanDisk Ultra 16GBの平均は、 **9.5～10.2 MiB/sec** ぐらいでした。至って普通と言いますか必要十分な値かと思います。他のmicroSDメディアで試してみますとTeam社のものは **6.5～7.8 MiB/sec** を確認しました。

**1MiB=1.049MB (1MB=0.954MiB)**

なので、10.0MiB/sec ⇒ 10.49MB/secの計算となりますが、まあなんとなくそんなもんだって事で認識しておけば良いかもしれません。単位の違いについては下記が参考になるものと思います。

https://academy.gmocloud.com/wp/keywords/20170510/4314

ディスクIO全体のベンチマークはこんな感じで測定します。
(上記リンクとバージョンが大きく異なっている為、MB/sec表示ではなくなりました。)
```
sysbench fileio run --threads=4 --file-test-mode=rndrw
```

下記の値を他のメディアと比べてどういった部分に性能差があるかを見てみましょう。
以前のバージョンでは、ここで明確に〇〇〇MB/secのように表示項目があったのですが、現行のバージョンはどうもないようです。なので、先ほどのprepareで直接ファイル作成した結果が近似値となるのではと考えます。
```
sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 4
Initializing random number generator from current time

Extra file open flags: (none)
128 files, 16MiB each
2GiB total file size
Block size 16KiB
Number of IO requests: 0
Read/Write ratio for combined random IO test: 1.50
Periodic FSYNC enabled, calling fsync() each 100 requests.
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing random r/w test
Initializing worker threads...

Threads started!


File operations:
    reads/s:                      11.69
    writes/s:                     7.64
    fsyncs/s:                     72.42

Throughput:
    read, MiB/s:                  0.18
    written, MiB/s:               0.12

General statistics:
    total time:                          10.5997s
    total number of events:              461

Latency (ms):
         min:                                    0.00
         avg:                                   87.60
         max:                                 1093.68
         95th percentile:                      580.02
         sum:                                40383.21

Threads fairness:
    events (avg/stddev):           115.2500/4.44
    execution time (avg/stddev):   10.0958/0.00
```

これもメモ等で取り置きしておいて、最後にテスト用ファイルを削除しましょう。
```
sysbench --test=fileio cleanup
```

[以前説明したSD Card Copier](
https://qiita.com/tmac116/items/4c372e476ddbb36b561b#21-%E5%AE%89%E5%BF%83%E5%AE%89%E5%85%A8%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E3%82%92%E5%8F%96%E3%81%A3%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%BE%E3%81%97%E3%82%87%E3%81%86)を使い、お手元のmicroSDのメディアへRaspberry Pi OSをマルっとコピーして上記と同様に比較することで、そのメディアの性能を比較できると思います。ぜひやってみてください。

ラズパイ構築編のつづきはこちら

https://qiita.com/tmac116/items/e08bc4efbeca0f0ec806?1