2.3. Diskdevstat 和 netdevstat
diskdevstat 和 netdevstat 是 SystemTap 工具,可收集有关系统上运行的所有应用的磁盘活动和网络活动的详细信息。这些工具由 PowerTOP 增长,它显示每个应用程序每秒的 CPU 唤醒数量(请参阅 第 2.2 节 “PowerTOP”)。通过这些工具收集的统计数据,您可以识别具有许多小 I/O 操作(而非更少的大操作)的功能。仅测量传输速度的其他监控工具有助于识别此类使用情况。
以
root
身份使用以下命令使用 SystemTap 安装这些工具:
~]# yum install tuned-utils-systemtap kernel-debuginfo
使用以下命令运行工具:
~]# diskdevstat
或者命令:
~]# netdevstat
这两个命令最多可取三个参数,如下所示:
diskdevstat update_interval total_duration display_histogram
netdevstat update_interval total_duration display_histogram
- update_interval
- 显示更新间隔的时间(以秒为单位)。默认:
5
- total_duration
- 整个运行的时间(以秒为单位)。默认:
86400
(1 天) - display_histogram
- 标记是否在运行结束时所有收集的数据的直方图。
输出类似于 PowerTOP。以下是较长的 diskdevstat 运行的输出示例:
PID UID DEV WRITE_CNT WRITE_MIN WRITE_MAX WRITE_AVG READ_CNT READ_MIN READ_MAX READ_AVG COMMAND 2789 2903 sda1 854 0.000 120.000 39.836 0 0.000 0.000 0.000 plasma 5494 0 sda1 0 0.000 0.000 0.000 758 0.000 0.012 0.000 0logwatch 5520 0 sda1 0 0.000 0.000 0.000 140 0.000 0.009 0.000 perl 5549 0 sda1 0 0.000 0.000 0.000 140 0.000 0.009 0.000 perl 5585 0 sda1 0 0.000 0.000 0.000 108 0.001 0.002 0.000 perl 2573 0 sda1 63 0.033 3600.015 515.226 0 0.000 0.000 0.000 auditd 5429 0 sda1 0 0.000 0.000 0.000 62 0.009 0.009 0.000 crond 5379 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 5473 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 5415 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 5433 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 5425 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond 5375 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 5477 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond 5469 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond 5419 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 5481 0 sda1 0 0.000 0.000 0.000 61 0.000 0.001 0.000 crond 5355 0 sda1 0 0.000 0.000 0.000 37 0.000 0.014 0.001 laptop_mode 2153 0 sda1 26 0.003 3600.029 1290.730 0 0.000 0.000 0.000 rsyslogd 5575 0 sda1 0 0.000 0.000 0.000 16 0.000 0.000 0.000 cat 5581 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl 5582 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl 5579 0 sda1 0 0.000 0.000 0.000 12 0.000 0.001 0.000 perl 5580 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl 5354 0 sda1 0 0.000 0.000 0.000 12 0.000 0.170 0.014 s h 5584 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl 5548 0 sda1 0 0.000 0.000 0.000 12 0.001 0.014 0.001 perl 5577 0 sda1 0 0.000 0.000 0.000 12 0.001 0.003 0.000 perl 5519 0 sda1 0 0.000 0.000 0.000 12 0.001 0.005 0.000 perl 5578 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl 5583 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl 5547 0 sda1 0 0.000 0.000 0.000 11 0.000 0.002 0.000 perl 5576 0 sda1 0 0.000 0.000 0.000 11 0.001 0.001 0.000 perl 5518 0 sda1 0 0.000 0.000 0.000 11 0.000 0.001 0.000 perl 5354 0 sda1 0 0.000 0.000 0.000 10 0.053 0.053 0.005 lm_lid.sh
列是:
- PID
- 应用程序的进程 ID
- UID
- 运行应用程序的用户 ID
- DEV
- I/O 发生的设备
- WRITE_CNT
- 写入操作的总数
- WRITE_MIN
- 连续两个写入需要的最低时间(以秒为单位)
- WRITE_MAX
- 连续两个写入的最大时间(以秒为单位)
- WRITE_AVG
- 两个连续写入的平均时间(以秒为单位)
- READ_CNT
- 读取操作的总数
- READ_MIN
- 连续两个读取所需的最低时间(以秒为单位)
- READ_MAX
- 连续两个读数的最大时间(以秒为单位)
- READ_AVG
- 连续两个读取的平均时间(以秒为单位)
- 命令
- 进程的名称
在这个示例中,三个非常明显的应用程序代表:
PID UID DEV WRITE_CNT WRITE_MIN WRITE_MAX WRITE_AVG READ_CNT READ_MIN READ_MAX READ_AVG COMMAND 2789 2903 sda1 854 0.000 120.000 39.836 0 0.000 0.000 0.000 plasma 2573 0 sda1 63 0.033 3600.015 515.226 0 0.000 0.000 0.000 auditd 2153 0 sda1 26 0.003 3600.029 1290.730 0 0.000 0.000 0.000 rsyslogd
这三个应用具有大于
0
的 WRITE_CNT
,这意味着它们在测量期间执行某种形式的写入。在这些方面,plasma 是一大水准的先行者:它执行最多的写入操作,而在写入之间的平均时间最低。因此,如果您关注节能应用程序,Plasma 将是调查的最佳候选者。
通过追踪给定进程 ID 的所有系统调用,使用 strace 和 ltrace 命令检查应用程序。在目前示例中,您可以运行:
~]# strace -p 2789
在本例中,strace 的输出包含一次重复模式,每个 45 秒打开用户的 KDE 图标缓存文件,以便再次写入,然后立即关闭该文件。这会导致在文件元数据(特别是修改时间)时对硬盘进行必要的物理写入。最终的修复是防止没有发生对图标的更新时进行不必要的调用。