Systemtap examples, DISK IO - 3 Track Cumulative IO
背景 例子来自traceio.stp 脚本, 该脚本通过事件vfs.read.return和vfs.write.return统计进程的累计读写调用情况. 输出读写前10的进程信息以及累计的读, 写的字节数信息. 注意原始的例子中没有对devname做过滤, 所以读写包含了cache的操作, 也没有对retur...
背景 例子来自traceio.stp 脚本, 该脚本通过事件vfs.read.return和vfs.write.return统计进程的累计读写调用情况. 输出读写前10的进程信息以及累计的读, 写的字节数信息. 注意原始的例子中没有对devname做过滤, 所以读写包含了cache的操作, 也没有对retur...
背景 例子来自iotime.stp 脚本, 该脚本用以监控每个进程对文件的读写字节数以及耗费的时间. 注意syscall.read和syscall.write还提供了请求读写字节数的上下文变量($count), 脚本中没有, 我增加了请求读写字节数的输出. 修改后的脚本内容以及注解 : [root@d...
背景 本文开始给大家讲一下linux系统中disk io相关的跟踪范例. 例子来自disktop.stp 脚本, 该脚本作者的用意是输出系统中IO请求字节数前10的进程信息以及对应的块设备信息. 但是这个脚本存在一个严重的BUG, 输出时对应的设备名其实是没有意义的, 它只是当时的设备号, 因为一个进程可...
背景 我们知道内核trace event可以使用stap -l或-L查看, 而trace的源代码则可以在/usr/src/debug/kernel-2.6.32-358.el6/linux-2.6.32-358.el6.x86_64/include/trace/events中查找到. (关注你的内核版本. 目...
背景 例子来自dropwatch.stp脚本, 可用于分析网络协议栈中丢包的确切位置. 确切的位置是使用symname或者symdata将内存地址翻译出来的函数信息, 翻译必须使用stap --all-modules选项以便加载所有的模块的符号表. --all-modules ...
背景 例子来自tcpdumplike.stp脚本, 当tcp.receive事件触发后, 取出类似tcpdump输出的源ip, 目的ip, 源端口, 目的端口, 以及6个tcp包的控制比特位信息. tcp.receive alias实际上包含2个内核函数, 分别代表ipv4和ipv6. kernel.f...
背景 例子来自tcp_connections.stp脚本, 当有新的tcp连接建立时, 输出用户id, 本地命令名, 进程id, 本地端口, 源ip. 用到两个内核函数探针 kernel.function("tcp_accept").return ? kernel.function("inet_cs...
背景 这个例子来自socket-trace.stp 脚本, 跟踪内核中函数在net/socket.c代码中的调用和返回, 帮助用户从内核层面了解进程和网络的交互情况. 脚本内容以及注解 [root@db-172-16-3-150 network]# cd /usr/share/systemtap/test...
背景 systemtap-testsuite包收集了大量的stp脚本, 可直接用于跟踪以下分类的内容 : = AUDIT = = AUTOFS = = BACKTRACE = = CALLGRAPH = = CPU = = DEVICE = = DISK = = FILE = ...
背景 System.map文件中包含了符号以及对应的在内存中的地址表信息. 例如 [root@db-172-16-3-150 ~]# less /boot/System.map-$(uname -r) [root@db-172-16-3-150 ~]# uname -r 2.6.32-358.el...