1KBのダミーファイルを1万個作成する(/tmp/testreadに作成)
・以下のコマンドでディレクトリを作成
mkdir -p /tmp/testread
・以下のコードでパッチファイルを作成する。
for i in $(seq -w 1 10000); do
dd if=/dev/urandom of=/tmp/testread/file_$i bs=1K count=1 status=none
done
・ファイルが作成されたか確認
find /tmp/testread -type f | wc -l
10000のリターンがあれば作成完了
ファイルの読み取り速度の測定
・以下のコードでパッチファイルを作成する(1ファイルずつ読み込んだ後に、ディレクトり配下の読み取り速度の平均と最大、最小値が返ります)
#!/bin/bash
DIR="/tmp/testread"
FILES=$(find "$DIR" -type f)
total_throughput=0
count=0
min=999999
max=0
echo "各ファイルの読み取りスループット:"
for f in $FILES; do
START=$(date +%s.%N)
cat "$f" > /dev/null
END=$(date +%s.%N)
elapsed=$(echo "$END - $START" | bc -l)
# スループット計算(1KB / 秒 → MB/s)
throughput=$(echo "scale=6; 1 / $elapsed" | bc -l)
echo "$f: ${throughput} MB/s"
total_throughput=$(echo "$total_throughput + $throughput" | bc)
((count++))
# min/max 更新
min=$(echo "$throughput < $min" | bc -l | awk '{if($1==1) print "'$throughput'"; else print "'$min'"}')
max=$(echo "$throughput > $max" | bc -l | awk '{if($1==1) print "'$throughput'"; else print "'$max'"}')
done
# 平均スループット
average=$(echo "scale=6; $total_throughput / $count" | bc)
# 結果表示
echo "----------------------------------------"
echo "読み取りスループット統計(MB/s):"
echo "ファイル数 : $count"
echo "平均 (average) : $average"
echo "最大 (max) : $max"
echo "最小 (min) : $min"
ディスクキャッシュのクリア
・再実行したい場合にはキャッシュファイルが邪魔な場合があるのでクリアする方法
以下のコマンドでキャッシュクリア(root権限必要)
sync
echo 3 | sudo tee /proc/sys/vm/drop_caches
読み取り速度の測定(実行したディレクトリに1GBのファイルが作成されるので事前に注意)
dd if=/dev/zero of=testfile bs=1M count=1024 conv=fdatasync status=progress
・if=/dev/zero:ゼロデータ(空データ)を入力元に
・of=testfile:出力ファイル名
・bs=1M count=1024:1MBを1024回 → 1GB 書き込み
・conv=fdatasync:書き込み完了をディスクに同期(キャッシュ無視)
・status=progress:進捗表示
1kbファイル1万個の書き込み速度の測定(/tmp/testwriteディレクトリを作成しておく)
#!/bin/bash
DIR="/tmp/testwrite"
mkdir -p "$DIR"
count=10000
bs=1024 # 1KB
# 開始時刻
start=$(date +%s.%N)
for i in $(seq -w 1 $count); do
dd if=/dev/zero of="$DIR/file_$i" bs=$bs count=1 status=none
done
# 終了時刻
end=$(date +%s.%N)
# 経過時間・速度計算
elapsed=$(echo "$end - $start" | bc)
total_kb=$(($count * 1))
mbps=$(echo "scale=3; $total_kb / 1024 / $elapsed" | bc)
echo "書き込み完了: $count ファイル"
echo "合計サイズ : ${total_kb}KB"
echo "経過時間 : ${elapsed} 秒"
echo "書き込み速度 : ${mbps} MB/s"
ご参考まで