开源 I/O 追踪工具 iodump 排查 Linux 系统各种 IO 问题的利器

开发 开发工具 开源
iodump 是一个开源工具,旨在帮助 Linux 系统用户排查 I/O 相关问题。其最独特的功能是能够显示读/写文件的完整路径,这对于诊断 I/O 瓶颈非常有用。

介绍

iodump 是一个开源工具,旨在帮助 Linux 系统用户排查 I/O 相关问题。它利用内核 tracepoint 静态探针技术,捕获每个 I/O 操作(读/写)的详细信息,包括 I/O 请求大小、扇区地址、发生时间、读/写文件的完整路径、生成请求的进程、系统调用以及扩展 I/O 类型。其最独特的功能是能够显示读/写文件的完整路径,这对于诊断 I/O 瓶颈非常有用。

技术架构概览

iodump通过Linux内核的blktrace机制实现低损耗监控,其核心组件包含:

  • 内核模块:注册tracepoint回调函数
  • 用户空间daemon:解析/proc/kmsg日志
  • 路径解析器:通过inode反向查找文件路径

技术亮点:

  • 采用fnotify机制实时跟踪文件打开事件
  • 实现inode到路径的LRU缓存(默认512条目)
  • 支持EXT4/XFS/Btrfs主流文件系统

安装部署指南

二进制安装(AnolisOS 8+):

- sudo yum install iodump
+ sudo dnf install iodump-kmod --enablerepo=Plus
# 验证内核模块加载
sudo lsmod | grep iodump
  • 1.
  • 2.
  • 3.
  • 4.

源码编译安装:

git clone https://gitee.com/anolis/iodump.git
cd iodump
# 编译内核模块(需对应kernel-devel包)
make -C /lib/modules/$(uname -r)/build M=$PWD modules
# 安装用户空间工具
sudo cp iodump /usr/local/bin/
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

生产环境应用

基础监控场景:

# 监控sdb设备I/O,采样率10%(100ms窗口)
sudo iodump -p sdb --sample 10 -t 3600
  • 1.
  • 2.

高级诊断用例:

# 捕获超过1MB的写操作(需内核5.3+)
sudo iodump -p nvme0n1 -f 'iosize > 1048576 && rw == W' -o csv
  • 1.
  • 2.

性能影响测试:

# 压力测试期间监控(fio并行)
fio --name=test --ioengine=libaio --rw=randread --bs=4k &
sudo iodump -p sda -s /tmp/io.log
  • 1.
  • 2.
  • 3.

输出数据分析

典型输出结构:

timestamp,pid,comm,iosize,rw,lba,path
1630456789.312,3141,mysql,16384,R,0x38d200,/var/lib/mysql/ibdata1
  • 1.
  • 2.

数据分析方法:

import pandas as pd

df = pd.read_csv('io.log')
# 计算各进程IOPS
iops = df.groupby(['pid','comm']).size().sort_values(ascending=False)
# 识别大文件顺序写
large_writes = df[(df['iosize']>65536) & (df['rw']=='W')]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

技术限制与优化

兼容性列表:

发行版

最低内核版本

验证状态

AnolisOS 8.6

4.19.91

✅通过

CentOS 7.9

3.10.0

⚠️部分

Ubuntu 22.04

5.15.0

✅通过

已知限制:

  • 路径解析延迟:极端情况下dentry解析可能增加3-5μs延迟[^2]
  • 内存消耗:每个I/O事件约占用256B,百万IOPS需预留256MB缓存
  • 内核兼容性:路径回溯功能需kernel ≥4.2

性能优化建议:

# 调整内核缓存参数(/etc/sysctl.conf)
kernel.iodump_buffer_size = 1048576  # 1MB缓存
kernel.iodump_flush_interval = 100   # 100ms刷盘间隔
  • 1.
  • 2.
  • 3.

安全警告

本工具可能触发内核oops事件,建议在测试环境验证以下场景:

  • 高IOPS压力测试(>50k/s)
  • 长路径文件操作(路径深度>256)
  • 并发容器场景
# 崩溃后恢复命令
sudo rmmod iodump_ko && systemctl restart kdump
  • 1.
  • 2.

地址

https://github.com/os-health/iodump

责任编辑:赵宁宁 来源: IT运维技术圈
相关推荐

2016-02-23 15:18:26

开源问题追踪工具

2010-06-25 09:47:29

Linux系统监控

2011-01-14 09:25:28

LinuxIO机制

2014-07-28 16:47:41

linux性能

2011-03-28 10:03:46

Btrace

2021-02-22 17:06:58

Linux改动代码

2017-01-19 19:14:20

Linux重定向命令

2013-03-27 10:32:22

2012-08-24 10:47:33

Linux统计工具

2020-06-03 17:30:42

LinuxIO

2017-09-01 12:26:18

Linux调度器系统

2022-03-11 10:21:30

IO系统日志

2023-02-10 21:18:10

IO测试磁盘

2019-12-02 09:45:45

Linux IO系统

2022-04-23 16:30:22

Linux磁盘性能

2017-03-25 21:33:33

Linux调度器

2014-08-19 11:37:50

Linux

2014-12-15 10:06:13

linux诊断工具系统监控

2015-02-09 16:01:18

服务器

2021-01-09 13:59:49

异步IO驱动式
点赞
收藏

51CTO技术栈公众号