3.10.1 存储性能指标与基线建立

3.10.1 存储性能指标与基线建立#

建立可复现的存储性能基线,用于对比容量扩展、内核升级或业务变化后的性能差异,快速判断“是否变慢、慢在何处、慢了多少”。

一、指标体系与关系
- 延迟(Latency):单次 I/O 完成时间,关注平均、P95、P99。
- IOPS:每秒 I/O 次数,受块大小与随机程度影响。
- 吞吐量(Throughput):MB/s,顺序读写更敏感。
- 队列深度/等待(Queue Depth/Await):排队过长通常意味着瓶颈。
- 利用率(Utilization):磁盘忙碌程度,持续 80%+ 需警惕。
- 读写比例/访问模式:随机/顺序、同步/异步、块大小。

原理草图:基线建立的分层路径

文章图片

二、基线建立流程(带示例)

1)安装与准备工具(fio/iostat)

# Debian/Ubuntu
apt-get update
apt-get install -y fio sysstat

# RHEL/CentOS
yum install -y fio sysstat

2)确认测试盘与挂载参数

# 查看块设备与文件系统
lsblk -f

# 查看调度器(以 sda 为例)
cat /sys/block/sda/queue/scheduler

# 查看挂载参数(以 /data 为例)
mount | grep /data

命令解释:
- lsblk -f:确认设备名、文件系统类型与挂载点。
- scheduler:确认 I/O 调度器(如 mq-deadline、none)。
- mount:核对挂载参数是否一致,避免测试条件不统一。

3)基线测试(fio 统一参数)

# 进入测试目录
cd /data

# 4K 随机读写(IOPS 与延迟为主)
fio --name=rand4k --filename=./fio_rand4k.dat \
    --size=4G --bs=4k --rw=randrw --rwmixread=70 \
    --iodepth=32 --numjobs=4 --direct=1 --time_based \
    --runtime=120 --group_reporting

# 1M 顺序读写(吞吐为主)
fio --name=seq1m --filename=./fio_seq1m.dat \
    --size=8G --bs=1m --rw=readwrite --rwmixread=50 \
    --iodepth=8 --numjobs=2 --direct=1 --time_based \
    --runtime=120 --group_reporting

命令解释:
- --direct=1:绕过页缓存,更接近存储真实能力。
- --iodepth/--numjobs:控制并发与队列深度,需固定。
- --time_based --runtime=120:固定时间,便于多次对比。

4)采集系统层指标

# 每 1 秒输出一次,共 120 次
iostat -x 1 120 > /tmp/iostat_baseline.log

关键字段:
- await:平均等待时间(ms)
- svctm:设备服务时间(仅参考)
- %util:设备忙碌率

5)整理基线输出模板

# 基线记录模板(示例)
cat > /data/baseline_2024q2.md <<'EOF'
# 存储基线记录
- 设备:/dev/sda
- 文件系统:ext4
- 内核版本:$(uname -r)
- 调度器:$(cat /sys/block/sda/queue/scheduler)
- fio 配置:rand4k / seq1m
- 测试时间:2024-06-30

## rand4k 结果摘要
- 读 IOPS:xxxx
- 写 IOPS:xxxx
- 平均延迟:x ms
- P95/P99:x/x ms

## seq1m 结果摘要
- 读吞吐:xxx MB/s
- 写吞吐:xxx MB/s

## iostat 观察
- await:x ms
- %util:xx%
EOF

三、排错与验证(示例)
- 现象:IOPS 明显低于基线
1. 检查调度器是否变更:
bash cat /sys/block/sda/queue/scheduler
2. 检查是否启用写缓存/直写:
bash hdparm -W /dev/sda
3. 检查是否被限速(cgroup/blkio):
bash systemctl status docker # 容器环境 cat /sys/fs/cgroup/blkio/blkio.throttle.read_bps_device

  • 现象:延迟升高但吞吐正常
    1. 查看队列与等待:
    bash iostat -x 1 5
    2. 检查混合负载:
    bash lsof | grep /data

四、练习与实操任务
1. 使用 fio 分别测试 4K 随机读、1M 顺序读,记录 IOPS 与吞吐。
2. 修改 --iodepth 为 64,对比延迟变化,写出结论。
3. 将测试目录从 ext4 换到 xfs(新分区或新挂载点),对比基线差异。
4. 记录一次内核升级前后的基线,并计算差异百分比。

五、基线维护建议
- 关键变更后复测:扩容、RAID/LVM 调整、文件系统参数变更、内核升级。
- 建议季度复测,并维护历史基线表用于趋势分析与容量规划。