1. 前言
/proc/diskstats 是 Linux 内核导出的虚拟文件,用于实时展示系统中所有块设备的 I/O 统计信息,是排查磁盘性能瓶颈、评估磁盘健康状态的核心工具。本文根据我电脑的 diskstats 数据,按设备类型逐行解析字段含义,结合数据特征总结磁盘整体状态,为系统优化提供参考。
2. 数据整体概览
本次提供的 diskstats 数据包含两类块设备:loop 设备(主设备号7)和 NVMe SSD 设备(主设备号259),共18行数据,其中 loop 设备16个(loop0-loop17),NVMe SSD 相关设备3个(nvme0n1、nvme0n1p1、nvme0n1p2)。NVMe SSD 为系统主要存储设备,承担了大部分读写操作。
3. Loop 设备数据逐行解析
Loop 设备是 Linux 中的虚拟块设备,通常用于挂载 ISO 镜像、虚拟磁盘文件等,其 I/O 统计反映了虚拟存储的读写情况。以下是各 loop 设备的核心数据解析(字段含义参考前文标准定义):
| 设备名 | 读完成次数 | 读扇区数 | 写完成次数 | 写扇区数 | 当前 I/O 数 | 核心特征 |
|---|---|---|---|---|---|---|
| loop0 | 14 | 34 | 0 | 0 | 0 | 仅少量读操作,无写入,完全空闲 |
| loop1 | 59 | 2136 | 0 | 0 | 0 | 读操作较少,无写入,状态健康 |
| loop2 | 437 | 13408 | 0 | 0 | 0 | 读操作略多,无写入,无 I/O 积压 |
| loop3 | 428 | 9712 | 0 | 0 | 0 | 读操作与 loop2 接近,无写入 |
| loop4 | 54 | 2148 | 0 | 0 | 0 | 少量读操作,无写入,状态正常 |
| loop5 | 1790 | 191744 | 0 | 0 | 0 | 读操作最多,读数据量较大,无写入 |
| loop6 | 55 | 2148 | 0 | 0 | 0 | 与 loop4 数据接近,少量读操作 |
| loop7 | 1965 | 49646 | 0 | 0 | 0 | 读操作较多,读数据量适中,无写入 |
| loop8 | 2043 | 82584 | 0 | 0 | 0 | 读操作略多于 loop7,无写入 |
| loop9 | 3497 | 28690 | 0 | 0 | 0 | 读操作最多,但读数据量小于 loop5/8 |
| loop10 | 964 | 86186 | 0 | 0 | 0 | 读操作适中,读数据量较大,无写入 |
| loop11 | 43 | 698 | 0 | 0 | 0 | 极少读操作,无写入,状态空闲 |
| loop12 | 222 | 6728 | 0 | 0 | 0 | 少量读操作,无写入,无 I/O 积压 |
| loop13 | 45 | 698 | 0 | 0 | 0 | 与 loop11 数据接近,极少读操作 |
| loop14 | 760 | 57344 | 0 | 0 | 0 | 读操作适中,读数据量适中,无写入 |
| loop15 | 21 | 118 | 0 | 0 | 0 | 几乎无读操作,完全空闲 |
| loop16 | 43 | 1024 | 0 | 0 | 0 | 极少读操作,无写入,状态正常 |
| loop17 | 11 | 28 | 0 | 0 | 0 | 几乎无 I/O 操作,完全空闲 |
| Loop 设备整体特征:所有 loop 设备均无写入操作,仅存在少量读操作,当前 I/O 数均为0,无 I/O 积压,整体负载极低,状态健康。其中 loop5、loop7、loop8、loop9 读操作相对较多,推测对应挂载的虚拟镜像处于活跃读取状态,其余设备多为空闲或低负载状态。 |
4. NVMe SSD 设备数据深度解析
NVMe SSD 设备(主设备号259)是系统的核心存储设备,包含整块磁盘(nvme0n1)和两个分区(nvme0n1p1、nvme0n1p2),承担了系统主要的读写、Discard、Flush 等操作,以下是逐行深度解析:
4.1 整块磁盘:nvme0n1
原始数据:259 0 nvme0n1 46153 8298 3733062 14499 46390 38537 2747210 155391 0 92487 231091 24651 0 933349112 58214 3179 2985
4.1.1 设备标识(字段1-3)
- 主设备号:259,代表 NVMe 设备(Linux 内核分配给 NVMe 控制器的固定主设备号);
- 次设备号:0,代表这是整块磁盘(非分区);
- 设备名:nvme0n1,即第一个 NVMe 控制器(nvme0)上的第一个命名空间(n1),为系统盘。
4.1.2 读 I/O 统计(字段4-7)
- 读完成次数:46153,系统启动以来成功完成的读 I/O 总次数,累计读了4.6万次;
- 读合并次数:8298,相邻读请求被内核合并的次数,合并率=8298/(46153+8298)≈15.2%,说明存在一定顺序读,但占比不高;
- 读扇区数:3733062,累计读取扇区总数(1扇区=512字节),换算后读取数据量≈3733062×512≈1.78GB;
- 读耗时:14499毫秒,所有读操作总耗时,平均每次读延迟≈14499/46153≈0.31毫秒,符合 NVMe SSD 的正常读延迟水平。
4.1.3 写 I/O 统计(字段8-11)
- 写完成次数:46390,累计写了4.6万次,与读次数基本持平,说明系统读写负载均衡;
- 写合并次数:38537,合并率=38537/(46390+38537)≈45.4%,合并率极高,说明大量写操作是顺序的或批量提交的,写入效率很高;
- 写扇区数:2747210,换算后写入数据量≈2747210×512≈1.31GB;
- 写耗时:155391毫秒,平均每次写延迟≈3.35毫秒,远高于读延迟,主要原因是写操作需等待数据落盘,且批量写入单次数据量大,耗时自然更长,属于正常现象。
4.1.4 运行状态与性能指标(字段12-14)
- 当前 I/O 数:0,此刻无正在处理的 I/O 请求,磁盘完全空闲,无积压;
- I/O 非空闲时间:92487毫秒,系统启动以来磁盘处于忙碌状态的总时间≈92.5秒;
- 加权 I/O 时间:231091毫秒,对队列长度加权的累计 I/O 时间,约为非空闲时间的2.5倍,说明平均队列深度约为2.5,I/O 负载处于合理范围。
4.1.5 Discard 操作(字段15-18)
- Discard 完成次数:24651,累计执行2.4万次 Discard 操作;
- Discard 合并次数:0,Discard 请求通常为非连续逻辑块地址,无法合并;
- Discard 扇区数:933349112,换算后丢弃数据量≈445GB,远大于实际读写量,说明系统在持续进行 SSD 空间回收(TRIM 机制);
- Discard 耗时:58214毫秒,总耗时约58.2秒,属于 SSD 正常的后台维护行为。
4.1.6 Flush 操作(字段19-20)
- Flush 完成次数:3179,累计执行3179次缓存冲刷(写入屏障);
- Flush 耗时:2985毫秒,平均每次 Flush 耗时≈0.94毫秒,次数相对温和,说明无频繁调用 fsync 的应用,系统 I/O 压力可控。
4.2 分区1:nvme0n1p1
原始数据:259 1 nvme0n1p1 175 21 10926 24 2 0 2 0 0 20 27 3 0 1034032 2 0 0
该分区为 NVMe SSD 的第一个分区,I/O 负载极低:读完成次数175次,读扇区数10926(≈5.5MB),写完成次数仅2次,无写合并,当前 I/O 数为0,无积压。Discard 扇区数1034032(≈529MB),说明该分区也参与了 SSD 空间回收,整体状态健康,无性能瓶颈。
4.3 分区2:nvme0n1p2
原始数据:259 2 nvme0n1p2 45879 8277 3718640 14463 46388 38537 2747208 155391 0 94108 228065 24648 0 932315080 58211 0 0
该分区为 NVMe SSD 的主要数据分区,承担了绝大部分读写操作:读完成次数45879次(占整块磁盘读次数的99.4%),读扇区数3718640(≈1.77GB);写完成次数46388次(占整块磁盘写次数的99.9%),写扇区数2747208(≈1.31GB),读写合并率与整块磁盘基本一致。当前 I/O 数为0,无积压,Discard 扇区数932315080(≈444GB),是 SSD 空间回收的主要分区,整体性能稳定,无异常。