Diskdevstat と
netdevstat は、システム上で稼働しているすべてのアプリケーションのディスク活動とネットワーク活動の詳細情報を収集する
SystemTap ツールです。これらのツールは、あらゆるアプリケーションで引き起こされる CPU のウェイクアップ回数を秒単位で示す
PowerTOP から発想を得ています (
「PowerTOP」 を参照)。これらのツールが収集する統計により、小規模な I/O 動作を数多く行なうことで電力を無駄にしているアプリケーションを特定することができるようになります。転送速度のみを測定する他の監視ツールでは、このタイプの使用量を特定できません。
SystemTap のこれらのツールをインストールするには、root
で以下のコマンドを実行します。
yum install systemtap tuned-utils kernel-debuginfo
yum install systemtap tuned-utils kernel-debuginfo
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
次のコマンドでツールを実行します。
diskdevstat
diskdevstat
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
あるいは、以下のコマンドを実行します。
netdevstat
netdevstat
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
これらコマンドは両方とも以下のように、最大 3 つのパラメータを取ります。
diskdevstat update_interval total_duration display_histogram
netdevstat update_interval total_duration display_histogram
- update_interval
表示が更新される秒単位の間隔。デフォルト: 5
- total_duration
実行完了にかかる秒単位の時間。デフォルト: 86400
(1 日)
- display_histogram
実行完了時に全収集データによる度数分布図 (柱状グラフ) を作成するかどうかを指定するフラグ。
以下の出力は PowerTOP の出力に似ています。以下に KDE 4.2 を稼働している Fedora 10 システム上の長期の 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
15494 0 sda1 0 0.000 0.000 0.000 758 0.000 0.012 0.000 0logwatch
15520 0 sda1 0 0.000 0.000 0.000 140 0.000 0.009 0.000 perl
15549 0 sda1 0 0.000 0.000 0.000 140 0.000 0.009 0.000 perl
15585 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
15429 0 sda1 0 0.000 0.000 0.000 62 0.009 0.009 0.000 crond
15379 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond
15473 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond
15415 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond
15433 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond
15425 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond
15375 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond
15477 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond
15469 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond
15419 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond
15481 0 sda1 0 0.000 0.000 0.000 61 0.000 0.001 0.000 crond
15355 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
15575 0 sda1 0 0.000 0.000 0.000 16 0.000 0.000 0.000 cat
15581 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl
15582 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl
15579 0 sda1 0 0.000 0.000 0.000 12 0.000 0.001 0.000 perl
15580 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl
15354 0 sda1 0 0.000 0.000 0.000 12 0.000 0.170 0.014 sh
15584 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl
15548 0 sda1 0 0.000 0.000 0.000 12 0.001 0.014 0.001 perl
15577 0 sda1 0 0.000 0.000 0.000 12 0.001 0.003 0.000 perl
15519 0 sda1 0 0.000 0.000 0.000 12 0.001 0.005 0.000 perl
15578 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl
15583 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl
15547 0 sda1 0 0.000 0.000 0.000 11 0.000 0.002 0.000 perl
15576 0 sda1 0 0.000 0.000 0.000 11 0.001 0.001 0.000 perl
15518 0 sda1 0 0.000 0.000 0.000 11 0.000 0.001 0.000 perl
15354 0 sda1 0 0.000 0.000 0.000 10 0.053 0.053 0.005 lm_lid.sh
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
15494 0 sda1 0 0.000 0.000 0.000 758 0.000 0.012 0.000 0logwatch
15520 0 sda1 0 0.000 0.000 0.000 140 0.000 0.009 0.000 perl
15549 0 sda1 0 0.000 0.000 0.000 140 0.000 0.009 0.000 perl
15585 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
15429 0 sda1 0 0.000 0.000 0.000 62 0.009 0.009 0.000 crond
15379 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond
15473 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond
15415 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond
15433 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond
15425 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond
15375 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond
15477 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond
15469 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond
15419 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond
15481 0 sda1 0 0.000 0.000 0.000 61 0.000 0.001 0.000 crond
15355 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
15575 0 sda1 0 0.000 0.000 0.000 16 0.000 0.000 0.000 cat
15581 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl
15582 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl
15579 0 sda1 0 0.000 0.000 0.000 12 0.000 0.001 0.000 perl
15580 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl
15354 0 sda1 0 0.000 0.000 0.000 12 0.000 0.170 0.014 sh
15584 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl
15548 0 sda1 0 0.000 0.000 0.000 12 0.001 0.014 0.001 perl
15577 0 sda1 0 0.000 0.000 0.000 12 0.001 0.003 0.000 perl
15519 0 sda1 0 0.000 0.000 0.000 12 0.001 0.005 0.000 perl
15578 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl
15583 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl
15547 0 sda1 0 0.000 0.000 0.000 11 0.000 0.002 0.000 perl
15576 0 sda1 0 0.000 0.000 0.000 11 0.001 0.001 0.000 perl
15518 0 sda1 0 0.000 0.000 0.000 11 0.000 0.001 0.000 perl
15354 0 sda1 0 0.000 0.000 0.000 10 0.053 0.053 0.005 lm_lid.sh
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
各コラムの表示内容は、以下のとおりです。
- PID
アプリケーションのプロセス ID
- UID
アプリケーションの実行元となるユーザー ID
- DEV
I/O が発生したデバイス
- WRITE_CNT
書き込み動作回数の合計
- WRITE_MIN
2 回の連続書き込みに要した最短時間 (秒)
- WRITE_MAX
2 回の連続書き込みに要した最長時間 (秒)
- WRITE_AVG
2 回の連続書き込みに要した平均時間 (秒)
- READ_CNT
読み込み動作回数の合計
- READ_MIN
2 回の連続読み込みに要した最短時間 (秒)
- READ_MAX
2 回の連続読み込みに要した最長時間 (秒)
- READ_AVG
2 回の連続読み込みに要した平均時間 (秒)
- COMMAND
プロセスの名前
この例には、非常に目立つアプリケーションが 3 つあります。
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
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
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
これらの3つのアプリケーションには、0
以上の WRITE_CNT
があり、これは測定中になんらかの書き込みを実行したことを意味します。その中でも、plasma が他と大差をつけて一番高い数値を示しています。最多の書き込み動作を実行しているため、当然書き込みの平均時間は最短となります。そのため、電力効率の悪いアプリケーションに懸念がある場合には、Plasma が調査の最大のターゲットとなります。
strace コマンドと ltrace コマンドを使用して、所定のプロセス ID のすべてのシステムコールを追跡することによりアプリケーションをもっと詳しく検査できます。この例では、以下を実行することが可能です。
strace -p 2789
strace -p 2789
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
この例では、strace
の出力には、ユーザーの KDE アイコンのキャッシュファイルを書き込みのため開き、直後にそのファイルを再び閉じるという動作が 45 秒毎に繰り返されるパターンが含まれていました。これにより、ファイルのメタデータ (特に修正時間) が変更されたため、それに必要な物理的な書き込みがハードディスクに行なわれました。最終的な修正では、アイコンに更新が加えられなかった場合には、こうした不要なコールが発生しないようになりました。