23. ベンチマークは漢(おとこ)のロマン!
この記事はFPVドローン ラップ計測システム【RotorHazard】をRaspberry Piで作成するにあたってのTipsをまとめたものです。ですが一般的なラズパイ構築方法としても参考になるかと思いますので、ぜひご活用ください。
23-1. ラズパイ向ベンチマーク測定の前準備
やっぱりロマンですよね?ベンチマークってw
どうしてもクロックアップやパフォーマンスを少しで向上させようとしてしまうのが我々ヲタク道の常なのであります。今回参考とさせてもらったサイトは下記となります。ラズパイ界隈では有名な下記サイトですが、ベンチマーク情報が充実していて私も少なからず参考にしております。
様々な結果が見れて面白いっすね。上記リンクはストレージのベンチマークのページの最初と最後になりますが、一通り眺めてみてください。そしてワイも同じように測定をしてみようかと思います。
近い条件での測定ができればとは思いますが、まずはまねっこして最初から入っていない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でした。ある程度の耐久性もあるかと思います。これらの情報はベンチマーク結果としてメモに残しておきましょう。
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の計算となりますが、まあなんとなくそんなもんだって事で認識しておけば良いかもしれません。単位の違いについては下記が参考になるものと思います。
ディスク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を使い、お手元のmicroSDのメディアへRaspberry Pi OSをマルっとコピーして上記と同様に比較することで、そのメディアの性能を比較できると思います。ぜひやってみてください。
ラズパイ構築編のつづきはこちら