Debian buster/sid で玄人志向の USB3.1 インタフェースボードを動かしてみる[性能編]

前のエントリーから、時間が空いてしまいましたが、簡単にパフォーマンステストをしてみた結果をまとめておきます。

測定対象の HDD について

まず、内蔵 SATA インターフェースに繋がっている方。

root@vhost01:~# smartctl --info /dev/sda -d sat
smartctl 6.6 2016-05-31 r4324 [x86_64-linux-4.17.0-rc7-amd64] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family: Hitachi Deskstar E7K1000
Device Model: Hitachi HDE721010SLA330
Serial Number: STN****S0UWL1K
LU WWN Device Id: 5 000cca 35ecbc4d1
Firmware Version: ST6OA3AA
User Capacity: 1,000,204,886,016 bytes [1.00 TB]
Sector Size: 512 bytes logical/physical
Rotation Rate: 7200 rpm
Device is: In smartctl database [for details use: -P show]
ATA Version is: ATA8-ACS T13/1699-D revision 4
SATA Version is: SATA 2.6, 3.0 Gb/s
Local Time is: Thu Jul 19 22:50:48 2018 JST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

今回増設した USB3.1 インタフェースボード経由で接続した HDD 増設スタンドに挿した方が、こちら。

root@vhost01:~# smartctl --info /dev/sdb -d sat
smartctl 6.6 2016-05-31 r4324 [x86_64-linux-4.17.0-rc7-amd64] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family: Hitachi Ultrastar 7K3000
Device Model: Hitachi HUA723020ALA640
Serial Number: MK0****FJ4XZVA
LU WWN Device Id: 5 000cca 223de6d56
Firmware Version: MK7OAA10
User Capacity: 2,000,398,934,016 bytes [2.00 TB]
Sector Size: 512 bytes logical/physical
Rotation Rate: 7200 rpm
Form Factor: 3.5 inches
Device is: In smartctl database [for details use: -P show]
ATA Version is: ATA8-ACS T13/1699-D revision 4
SATA Version is: SATA 2.6, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is: Thu Jul 19 22:50:41 2018 JST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

どちらも、回転数 7200rpm 、セクタサイズ 512byte のもので、違いは容量と SATA のリンクスピード。
測定を厳密にやるのであれば、同じ型番の HDD 2 台用意して、内蔵 SATA と USB3.1 にそれぞれを繋ぐのが良いのでしょうけど、機材を揃える時間もなかったので、大体の傾向だけつかめれば良いことにします。


測定方法

今回測定に使用したツールは、fio というもので Windows でよく使われる CrystalDiskMark のような測定ができるもの。と言っても、細かくオプションをしていてコマンドラインから実行するものなのですけど。
今回は、バッファサイズを 4KB 、 32KB 、 256KB 、 2MB 、16MB と変化させて、内蔵 SATA 側と USB3.1 側をそれぞれ測定するようにしました。

複数回テストを実行したり、何度もテストを行う機会があるような場合は、テストの共通パラメータをファイルに記述して置くことができるので、それを storage_check-20180719.job というファイル名で作成。内容は、以下の通り。

soukaku@vhost01:[~]$ more ./storage_check-20180719.job
[[base_parms01]
runtime=120 # テストの継続時間。120秒を指定。
ioengine=libaio # テストに利用するI/O方式。libaioを指定。
direct=1 # non-bufferd I/Oを有効化。
size=128M # テストに利用するファイルのザイズを指定。128MBを指定。
name=testfiles # テストに利用するファイルの名称。testfilesを指定。
numjobs=16 # テスト時のプロセス/スレッド数を指定。
group_reporting # numjobsで指定した並列処理の結果を集約して表示。
unit_base=8 # 結果の単位を指定。8(Byte)を指定。

各オプションの詳細は "man fio" で確認してもらうとして、このファイルを読み込んで fio を 多重ループでぶん回すというシェルスクリプトを用意。

soukaku@vhost01:[~]$ more HDD_perf.sh
#!/bin/bash

# 全体を20回ループ
for loop in {1..20} ; do
# テストパターン別
for i in read write ; do
# バッファサイズ別
for j in 4 32 256 2048 16384 ; do
# インターフェース別
for k in SATA USB3 ; do
# インターフェース別にディレクトリを指定
case "${k}" in
"SATA" ) testDir="/tmp" ;;
"USB3" ) testDir="/backup/TM01/timemachine";;
esac
fio ./storage_check-20180719.job --rw=${i} --bs=${j}k --output=./fio_results/${k}-`date +%Y%m%d-%H%M`-${j}k -directory=$testDir 2>&1 > /dev/null
sleep 30
done
done
done
done

あとは、これが終わるのを待てば良い、というわけです。

測定結果

で、上のスクリプトぶん回して取得した測定した結果から、秒あたりのデータ転送量を抜き出して集計した結果が、以下のもの。各パターン 20 回実行した結果の平均値になっています。)

あああああ

上の表をグラフ化したのが、こちら。

いいいいい’

見てもらえばわかるのですが、 バッファサイズに関係なく USB3.1 側の HDD のほうが秒あたりのデータ転送量が多いという結果になりました。

気になるのは、 USB3.1 、バッファサイズ 256KB の read のパターンで、転送量に落ち込みが見えること。20 回分のデータを個々に見ても、ほぼ平均値通りなので、計測ミスという言うこともなさそうなので、インターフェースボードの問題なのか、 HDD 自体の特性なのか…。

とりあえずは、USB3.1 インタフェースのほうがパフォーマンス的には良さそう、ということがわかったので、今回はここまで。
機会があったら、測定対象を揃えたり、バッファサイズも細かく変化させて、測定してみましょうかね。

なお、 fio の使い方については、以下を参考にしています。

トラックバック(0)

コメントする