Last active
December 31, 2024 09:01
-
-
Save ivmm/19dd451d02db77ea386971cec7462079 to your computer and use it in GitHub Desktop.
disk.sh
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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