性能分析-磁盘:Linux监测虚拟磁盘和物理磁盘性能的方法

磁盘性能对照值: https://blog.tongqing.asia/detail/275/

Linux 中如何区分 虚拟磁盘性能物理磁盘性能,并知道性能瓶颈到底来自哪里。

这是运维和性能调优中非常关键的技能。



🧩 关键结论(先讲结论)

要分辨虚拟磁盘 vs 物理磁盘性能,你要:

  1. 识别磁盘类型(dm、loop、LVM、md、NVMe 等)
  2. 检查虚拟层(dm/RAID/LVM/loop)本身是否成为瓶颈
  3. 查看 I/O 实际落到哪个物理设备上
  4. 分别对虚拟层、真实层做性能测试(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-0nvme0n1结论
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 IOPSnvme0n1 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 分别测试两层

一测就知道是不是虚拟层掉性能。

4. loop → 绝对不是高性能盘

5. RAID5/6、thin-LVM、加密 → 常见性能瓶颈




文章标签:

评论(0)