Linux、macOSなどのUnix環境でディスク速度(読み込み、書き込み)を測定するベンチマーク用シェルスクリプト(バッチ処理プログラム) ~RHEL、CentOS、Fedora、Ubuntu、macOS、Cygwinなどに対応したディスクスピードテストのベンチマークツール~
以前の下記の記事でLinux、macOSなどのUnix環境でサーバやクライアントの性能を評価する指標の一つであるCPUのベンチマークを行うシェルスクリプト(バッチ処理プログラム)について紹介しました。
今回はCPUの他に重要な位置づけである性能評価指標の一つディスクアクセス速度をLinuxのddコマンドを用いて計測するシェルスクリプト(バッチ処理プログラム)を備忘として紹介します。
Linux、macOSなどのUnix環境でディスク速度(読み込み、書き込み)を測定するベンチマーク用シェルスクリプト(バッチ処理プログラム) ~RHEL、CentOS、Fedora、Ubuntu、macOS、Cygwinなどに対応したディスクスピードテストのベンチマークツール~
シェルスクリプト(バッチ処理プログラム)の基本方針としてはddコマンドによる書き込み、読み込みを行ってその際のディスク速度及び計測時間を出力します。
ddコマンドは「oflag=direct」オプションで書き込み時、「iflag=direct」オプションで読み込み時のキャッシュを使用しない指定をすることができます。
そのため、「キャッシュ無しの書き込み」、「キャッシュ無しの読み込み」、「キャッシュ有りの書き込み」、「キャッシュ有りの読み込み」の4パターンを計測するようにしています。
Linux、macOSなどのUnix環境でディスク速度(読み込み、書き込み)を測定するベンチマーク用シェルスクリプト(バッチ処理プログラム)
実装したシェルスクリプトには引数でテストデータのMB単位の容量(bs=1Mに対するcountの値)を指定できるようにしています(デフォルト値は1024)。
「キャッシュ無しの書き込み」、「キャッシュ無しの読み込み」のテストを行った後、テストデータを削除し、再度「キャッシュ有りの書き込み」、「キャッシュ有りの読み込み」について計測するようになっています。
vim disk_speed_test.sh
#!/bin/bash COUNT=$1 if [ "${COUNT}" = "" ]; then COUNT=1024 fi echo "Disk Writing Speed (No Cache)" echo "time dd bs=1M count=${COUNT} if=/dev/zero of=/tmp/disktest oflag=direct" time dd bs=1M count=${COUNT} if=/dev/zero of=/tmp/disktest oflag=direct echo "Disk Reading Speed (No Cache)" echo "time dd bs=1M count=${COUNT} if=/tmp/disktest of=/dev/null iflag=direct" time dd bs=1M count=${COUNT} if=/tmp/disktest of=/dev/null iflag=direct rm -f /tmp/disktest echo "Disk Writing Speed (Cached)" echo "time dd bs=1M count=${COUNT} if=/dev/zero of=/tmp/disktest" time dd bs=1M count=${COUNT} if=/dev/zero of=/tmp/disktest echo "Disk Reading Speed (Cached)" echo "time dd bs=1M count=${COUNT} if=/tmp/disktest of=/dev/null" time dd bs=1M count=${COUNT} if=/tmp/disktest of=/dev/null rm -f /tmp/disktest
Linux、macOSなどのUnix環境でディスクアクセス速度を測定するベンチマーク用シェルスクリプト(バッチ処理プログラム)の実行例
作成したスクリプトの実行例は下記のようになります。
[magtranetwork@localhost ~]# chmod 755 disk_speed_test.sh [magtranetwork@localhost ~]# ./disk_speed_test.sh Disk Writing Speed (No Cache) time dd bs=1M count=1024 if=/dev/zero of=/tmp/disktest oflag=direct 1024+0 レコード入力 1024+0 レコード出力 1073741824 バイト (1.1 GB) コピーされました、 4.22216 秒、 254 MB/秒 real 0m4.223s user 0m0.003s sys 0m0.279s Disk Reading Speed (No Cache) time dd bs=1M count=1024 if=/tmp/disktest of=/dev/null iflag=direct 1024+0 レコード入力 1024+0 レコード出力 1073741824 バイト (1.1 GB) コピーされました、 4.19186 秒、 256 MB/秒 real 0m4.193s user 0m0.005s sys 0m0.099s Disk Writing Speed (Cached) time dd bs=1M count=1024 if=/dev/zero of=/tmp/disktest 1024+0 レコード入力 1024+0 レコード出力 1073741824 バイト (1.1 GB) コピーされました、 0.714099 秒、 1.5 GB/秒 real 0m0.715s user 0m0.003s sys 0m0.711s Disk Reading Speed (Cached) time dd bs=1M count=1024 if=/tmp/disktest of=/dev/null 1024+0 レコード入力 1024+0 レコード出力 1073741824 バイト (1.1 GB) コピーされました、 0.199486 秒、 5.4 GB/秒 real 0m0.200s user 0m0.000s sys 0m0.200s [magtranetwork@localhost ~]# ./disk_speed_test.sh 2048 Disk Writing Speed (No Cache) time dd bs=1M count=2048 if=/dev/zero of=/tmp/disktest oflag=direct 2048+0 レコード入力 2048+0 レコード出力 2147483648 バイト (2.1 GB) コピーされました、 42.6873 秒、 50.3 MB/秒 real 0m42.688s user 0m0.003s sys 0m0.618s Disk Reading Speed (No Cache) time dd bs=1M count=2048 if=/tmp/disktest of=/dev/null iflag=direct 2048+0 レコード入力 2048+0 レコード出力 2147483648 バイト (2.1 GB) コピーされました、 42.6635 秒、 50.3 MB/秒 real 0m42.665s user 0m0.004s sys 0m0.250s Disk Writing Speed (Cached) time dd bs=1M count=2048 if=/dev/zero of=/tmp/disktest 2048+0 レコード入力 2048+0 レコード出力 2147483648 バイト (2.1 GB) コピーされました、 1.12603 秒、 1.9 GB/秒 real 0m1.127s user 0m0.001s sys 0m1.127s Disk Reading Speed (Cached) time dd bs=1M count=2048 if=/tmp/disktest of=/dev/null 2048+0 レコード入力 2048+0 レコード出力 2147483648 バイト (2.1 GB) コピーされました、 0.434828 秒、 4.9 GB/秒 real 0m0.436s user 0m0.000s sys 0m0.435sReference: Tech Blog citing related sources