Linux dropped与磁盘性能有关
小樊
41
2026-01-11 07:12:30
Linux dropped与磁盘性能的关系
一、概念澄清
- 在 Linux 性能语境中,dropped通常出现在两类统计里:
- 网络接口的 RX/TX dropped(如 ifconfig/ethtool 显示的 dropped 计数);
- 块设备层的一些计数(如某些驱动或监控工具展示的 dropped I/O)。
- 其中,网络 dropped 与磁盘并无直接因果关系,它更多与 网卡 Ring Buffer、CPU 中断处理、驱动队列、带宽拥塞 等因素相关;而块设备层的 dropped(若工具展示)才可能与 I/O 饱和、队列溢出、设备错误 有关。因此,看到“dropped”先要分清是网络还是磁盘,再决定排查路径。
二、网络 dropped 与磁盘性能的关系
- 间接影响是可能的:当 磁盘 I/O 高占用 导致系统整体负载升高、CPU 软中断/硬中断处理不及时 或发生 内存紧张引发 swap 时,网卡 Ring Buffer 可能来不及被内核取走,从而出现 RX dropped。这类现象的本质是资源竞争与调度延迟,而非磁盘直接丢包。排查要点:
- 用 ifconfig/ethtool -S 观察 RX dropped / RX overruns 的增长;
- 用 iostat -x 1 检查 %util、await、svctm 是否长期接近饱和;
- 用 vmstat 1 关注 si/so(swap 活动);
- 必要时用 top/htop 看软/硬中断集中情况,检查 中断亲和性 与 RPS/XPS 配置。
结论:网络 dropped 多由网络栈与 CPU/内存瓶颈引起,磁盘 I/O 只是可能的“间接触发因素”。
三、磁盘相关的 dropped 与性能瓶颈
- 若“dropped”来自块设备或 I/O 工具(例如某些监控项显示 I/O dropped),通常与以下磁盘问题相关:
- 设备/队列饱和:iostat -x 1 中 %util≈100% 且 await 明显升高,说明后端已无法及时服务新请求,队列可能溢出,表现为 I/O 超时/失败或工具计数增长;
- I/O 调度器不匹配:SSD/NVMe 更适合 none/kyber,而 HDD 更适合 mq-deadline,错误的调度器会放大延迟与抖动;
- 文件系统与挂载选项:如未启用 noatime/nodiratime 会增加写放大,未启用 discard/TRIM 的 SSD 长期会掉速,极端场景会放大 I/O 延迟波动;
- 写回压力与脏页阈值:不合理的 vm.dirty_ratio / vm.dirty_background_ratio 会导致突发写回风暴,叠加慢盘时更易出现超时与失败。
优化要点:
- 选型与调度:SSD/NVMe 用 none/kyber,HDD 用 mq-deadline;
- 挂载:使用 noatime,nodiratime,SSD 启用 discard(或定期 fstrim),在具备掉电保护时再考虑 data=writeback/barrier=0;
- 内核参数:适度降低 vm.dirty_background_ratio / vm.dirty_ratio,降低写回突发;
- 硬件侧:优先 SSD/NVMe,并关注 SMART 健康与 温度(NVMe 过热会触发限速)。
上述做法可显著降低 I/O 饱和与抖动,减少因后端拥塞导致的“dropped/超时”类现象。
四、快速判断与排查步骤
- 第一步:确认“dropped”归属
- 网络:运行 ifconfig/ethtool -S ,看 RX dropped / RX overruns;
- 磁盘:运行 iostat -x 1,看 %util、await、svctm 与设备错误计数。
- 第二步:关联负载与资源
- 运行 vmstat 1,关注 si/so(是否因内存压力引发 swap);
- 运行 top/htop,观察 si/hi(软/硬中断)是否集中在某些 CPU。
- 第三步:定位 I/O 饱和与队列问题
- 若 %util≈100% 且 await 高,说明后端饱和;结合 iostat 按设备与分区定位热点进程(配合 iotop)。
- 第四步:针对性优化
- 存储类型匹配 I/O 调度器;
- 调整 脏页阈值 平滑写回;
- 启用 noatime/nodiratime/TRIM;
- 检查 SMART/温度 与硬件健康。
- 第五步:若确认是网络 dropped
- 优化 中断亲和性/RPS/XPS、队列与驱动参数,排查带宽拥塞与配置错误。
以上步骤能在分钟级定位“dropped”是网络栈问题还是磁盘 I/O 瓶颈,并给出对应优化方向。