Skip to content

Instantly share code, notes, and snippets.

@ivmm
Last active December 31, 2024 09:01
Show Gist options
  • Save ivmm/19dd451d02db77ea386971cec7462079 to your computer and use it in GitHub Desktop.
Save ivmm/19dd451d02db77ea386971cec7462079 to your computer and use it in GitHub Desktop.
disk.sh
#!/bin/bash
# 配置参数
DEVICE="${1:-/dev/vda}" # 磁盘设备
TEST_SIZE="1G" # 测试文件大小
BLOCK_SIZE="4k" # 块大小
NUM_JOBS=1 # 测试并发任务数
IODEPTH=16 # I/O 队列深度
DIRECT_IO=1 # 使用直接 I/O
TEST_DIR="/tmp/fio_test" # 测试文件存储的临时目录
rm -rf $TEST_DIR # 每次运行前清空测试目录
mkdir -p $TEST_DIR # 创建测试目录
# 清空上次测试结果
echo "清空上次的测试结果..."
# 初始化汇总结果文件
SUMMARY_FILE="$TEST_DIR/summary_result.txt"
> $SUMMARY_FILE
# 1. 顺序写入测试(吞吐量)
echo "开始顺序写入测试 (Seq Write)..."
fio --name=seq_write_test --ioengine=libaio --iodepth=$IODEPTH --rw=write --bs=$BLOCK_SIZE --size=$TEST_SIZE --numjobs=$NUM_JOBS --direct=$DIRECT_IO --runtime=60s --time_based --group_reporting --output-format=json --output=$TEST_DIR/seq_write_result.json --filename=$TEST_DIR/seq_write_test_file --latency_target=500000000 --latency_window=1000
# 提取汇总数据并写入汇总文件
echo "顺序写入测试 (Seq Write) 结果:" >> $SUMMARY_FILE
cat $TEST_DIR/seq_write_result.json | jq '.jobs[0].write | {bw, iops, lat_min: .lat.min, lat_avg: .lat.avg, lat_max: .lat.max}' >> $SUMMARY_FILE
rm -f $TEST_DIR/seq_write_result.json $TEST_DIR/seq_write_test_file # 清理临时文件
# 2. 随机写入测试(IOPS & 延迟)
echo "开始随机写入测试 (Rand Write)..."
fio --name=rand_write_test --ioengine=libaio --iodepth=$IODEPTH --rw=randwrite --bs=$BLOCK_SIZE --size=$TEST_SIZE --numjobs=$NUM_JOBS --direct=$DIRECT_IO --runtime=60s --time_based --group_reporting --output-format=json --output=$TEST_DIR/rand_write_result.json --filename=$TEST_DIR/rand_write_test_file --latency_target=500000000 --latency_window=1000
# 提取汇总数据并写入汇总文件
echo "随机写入测试 (Rand Write) 结果:" >> $SUMMARY_FILE
cat $TEST_DIR/rand_write_result.json | jq '.jobs[0].write | {bw, iops, lat_min: .lat.min, lat_avg: .lat.avg, lat_max: .lat.max}' >> $SUMMARY_FILE
rm -f $TEST_DIR/rand_write_result.json $TEST_DIR/rand_write_test_file # 清理临时文件
# 3. 顺序读取测试(吞吐量)
echo "开始顺序读取测试 (Seq Read)..."
fio --name=seq_read_test --ioengine=libaio --iodepth=$IODEPTH --rw=read --bs=$BLOCK_SIZE --size=$TEST_SIZE --numjobs=$NUM_JOBS --direct=$DIRECT_IO --runtime=60s --time_based --group_reporting --output-format=json --output=$TEST_DIR/seq_read_result.json --filename=$TEST_DIR/seq_read_test_file --latency_target=500000000 --latency_window=1000
# 提取汇总数据并写入汇总文件
echo "顺序读取测试 (Seq Read) 结果:" >> $SUMMARY_FILE
cat $TEST_DIR/seq_read_result.json | jq '.jobs[0].read | {bw, iops, lat_min: .lat.min, lat_avg: .lat.avg, lat_max: .lat.max}' >> $SUMMARY_FILE
rm -f $TEST_DIR/seq_read_result.json $TEST_DIR/seq_read_test_file # 清理临时文件
# 4. 随机读取测试(IOPS & 延迟)
echo "开始随机读取测试 (Rand Read)..."
fio --name=rand_read_test --ioengine=libaio --iodepth=$IODEPTH --rw=randread --bs=$BLOCK_SIZE --size=$TEST_SIZE --numjobs=$NUM_JOBS --direct=$DIRECT_IO --runtime=60s --time_based --group_reporting --output-format=json --output=$TEST_DIR/rand_read_result.json --filename=$TEST_DIR/rand_read_test_file --latency_target=500000000 --latency_window=1000
# 提取汇总数据并写入汇总文件
echo "随机读取测试 (Rand Read) 结果:" >> $SUMMARY_FILE
cat $TEST_DIR/rand_read_result.json | jq '.jobs[0].read | {bw, iops, lat_min: .lat.min, lat_avg: .lat.avg, lat_max: .lat.max}' >> $SUMMARY_FILE
rm -f $TEST_DIR/rand_read_result.json $TEST_DIR/rand_read_test_file # 清理临时文件
# 输出汇总结果到终端
echo "测试完成,开始汇总结果..."
cat $SUMMARY_FILE
echo "所有测试已完成!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment