性能分析-磁盘:Linux监测虚拟磁盘和物理磁盘性能的方法
已于 2025年11月20日 09:56 修改
访问次数:0
磁盘性能对照值: https://blog.tongqing.asia/detail/275/
Linux 中如何区分 虚拟磁盘性能 与 物理磁盘性能,并知道性能瓶颈到底来自哪里。
这是运维和性能调优中非常关键的技能。
🧩 关键结论(先讲结论)
要分辨虚拟磁盘 vs 物理磁盘性能,你要:
- 识别磁盘类型(dm、loop、LVM、md、NVMe 等)
- 检查虚拟层(dm/RAID/LVM/loop)本身是否成为瓶颈
- 查看 I/O 实际落到哪个物理设备上
- 分别对虚拟层、真实层做性能测试(iostat、fio)
下面分步骤讲。
🥇 第一步:识别你的虚拟磁盘由什么组成(最关键)
用:
lsblk -o NAME,TYPE,FSTYPE,MOUNTPOINT
示例输出:
nvme0n1 disk
└─nvme0n1p2 part
└─dm-0 lvm /
或:
loop0 loop /var/lib/docker
或:
md0 raid1
└─dm-0 lvm
清楚知道:
- dm-0 → LVM 虚拟逻辑卷
- md0 → 软件 RAID
- loop0 → 镜像文件
- nvme0n1 → 真实 NVMe
- sda → 真实 SATA SSD
只有物理磁盘(disk)才能代表真实性能。
虚拟磁盘(dm、loop、md)都只是上层的抽象。
🥈 第二步:查看虚拟磁盘和物理磁盘的 I/O 分别如何
非常重要!!!
监控虚拟磁盘:
iostat -x 1 dm-0
监控真实磁盘:
iostat -x 1 nvme0n1
核心指标:
| 指标 | 说明 |
|---|---|
r/s, w/s | 每秒 IOPS |
rkB/s, wkB/s | 吞吐量 |
svctm(服务时间) | 虚拟层是否慢 |
await(整体延迟) | 虚拟层 + 物理层延迟 |
%util | 是否跑满 |
🔍 如何判断瓶颈是虚拟层还是物理层?
| dm-0 | nvme0n1 | 结论 |
|---|---|---|
| await 高 | await 低 | LVM / 加密 / RAID 层有问题 |
| await 高 | await 高 | 真实磁盘 I/O 已经慢 |
| dm-0 util 高 | nvme util 低 | dm 上有队列阻塞 |
| both util 高 | 真实磁盘满载 |
🥉 第三步:检查 dm / RAID / loop 是否有特殊开销
1. LVM(dm)性能分析
dmsetup status
dmsetup table
检查是否:
- 使用 thin pool(thin 设备常常比较慢)
- 使用 snapshot(snapshot 会显著降低性能)
- 是否有 dm-crypt(加密带来 CPU 开销)
2. 软件 RAID(md)
cat /proc/mdstat
查看:
- RAID 是否正常(degraded 会严重变慢)
- RAID5/6 重建中速度会减半
3. loop 设备性能通常很差
losetup -a
loop 性能慢常见场景:
- Docker 镜像存储
- 用 loop 挂载文件作为磁盘
- 文件系统碎片严重
🏅 第四步:用 fio 分别测试虚拟磁盘与物理磁盘的性能
测试虚拟磁盘(如 dm-0)
fio --name=test --filename=/dev/dm-0 --rw=randread --bs=4k --numjobs=1 --size=1G --iodepth=32
再测试物理磁盘(如 nvme0n1)
fio --name=test --filename=/dev/nvme0n1 --rw=randread --bs=4k --numjobs=1 --size=1G --iodepth=32
如何判断虚拟层是否成为瓶颈?
| dm-0 IOPS | nvme0n1 IOPS | 结论 |
|---|---|---|
| 明显更低 | 更高 | LVM / RAID / loop 限制性能 |
| 差不多 | 差不多 | 性能限制由物理磁盘决定 |
| dm-crypt 较低 | 无加密高 | 加密开销 |
🧭 第五步:总结判断技巧(很重要)
下面是直观判断:
1. 用 lsblk 看 dm-0、md0、loop 是不是虚拟盘
虚拟盘不会显示 disk 类型
真实盘显示 disk
2. 用 iostat 看 await / svctm 的差异
- dm-0 await 高,但物理盘 await 低 → 虚拟层慢
- 两者 await 都高 → 真实磁盘慢
3. fio 分别测试两层
一测就知道是不是虚拟层掉性能。
评论(0)