Linux系统中/proc/diskstats文件字段解析

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 空间回收的主要分区,整体性能稳定,无异常。

相关推荐
xiaoxiangsiyan2 小时前
企业网络运维自动化与管理协议深度指南
linux·运维·服务器·网络·学习·自动化
我是小灰灰吖2 小时前
Ubuntu22.04,OpenCV 4.5.5 环境搭建
linux·qt·ubuntu
七仔啊2 小时前
windows server 2022 安装 Linux Docker
linux·windows·docker
AIgorithmGEEK2 小时前
Linux 进程控制完全指南:fork、wait、exec 三部曲
linux·运维·多进程·进程创建·进程等待·进程终止·exec家族
2301_777998342 小时前
网络基础(一):协议与网络传输基本流程
linux·网络
小张同学a.3 小时前
zabbix企业级监控平台4——分布式监控与grafana数据可视化
linux·运维·数据库·分布式·信息可视化·zabbix·grafana
Darkwanderor3 小时前
线程概念和Linux线程
linux·c语言·c++
酷可达拉斯3 小时前
自动化运维-从零开始编写ansible剧本(二)
linux·运维·服务器·centos·自动化
Darkwanderor3 小时前
Linux线程控制
linux·c语言·c++