Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
2.3. Diskdevstat 與 netdevstat
Diskdevstat 與 netdevstat 都屬於 SystemTap 工具組,用來蒐集系統上所有應用程式存取磁碟與網路的詳盡資料。這些工具的靈感來自 PowerTOP,顯示了每個應用程式對 CPU 的喚醒次數(詳情請參閱 節 2.2, “PowerTOP”)。這些工具所蒐集的統計數據能讓您找出最耗電的應用程式,其中以大量的小筆 I/O 運作為最,而不是少量大筆的運作。其它只能衡量傳輸速度的監控工具,並無法分辨這方面的用量。
以
root
身份透過下列指令來以 SystemTap 安裝這些工具:
yum install systemtap tuned-utils kernel-debuginfo
請以此指令執行這些工具:
diskdevstat
或是:
netdevstat
兩個指令都可以接受三個參數,分別是:
diskdevstat update_interval total_duration display_histogram
netdevstat update_interval total_duration display_histogram
- update_interval
- 每次更新畫面的時間間隔,單位為秒。預設值為
5
- total_duration
- 整個執行時間,單位為秒。預設值為
86400
(一天) - display_histogram
- 旗標值,表示在執行結束時,是不是要將所有資料以直方圖列出。
螢幕列出的資料來自 PowerTOP。以下是在 Fedora 10 搭配 KDE 4.2 的系統上,執行 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
- 應用程式的程序 ID
- UID
- 執行應用程式的使用者 ID
- DEV
- 發生 I/O 的裝置
- WRITE_CNT
- 寫入的總數
- WRITE_MIN
- 兩次連續寫入的最短時間(單位為秒)
- WRITE_MAX
- 兩次連續寫入的最長時間(單位為秒)
- WRITE_AVG
- 兩次連續寫入的平均時間(單位為秒)
- READ_CNT
- 讀取的總數
- READ_MIN
- 兩次連續讀取的最短時間(單位為秒)
- READ_MAX
- 兩次連續讀取的最長時間(單位為秒)
- READ_AVG
- 兩次連續讀取的平均時間(單位為秒)
- COMMAND
- 程序的名稱
在這範例中,有三個應用程式特別突出:
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
這三個應用程式的
WRITE_CNT
都大於 0
,表示在評量期間,它們都有寫入資料。其中 plasma 的數值特別高:它進行了大部分的寫入動作,當然寫入之間的平均時間也最低。如果您想找出最不省電的應用程式,自然 Plasma 就成為最值得觀察的對象。
請藉由追蹤特定程序 ID 的系統呼叫,使用 strance 與 ltrace 指令來進一步檢視應用程式。就以目前的範例來說,您可以執行:
strace -p 2789
在這範例中,
strace
的運作模式為每 45 秒開啟 KDE 的圖示快取檔案,寫入資料後又馬上關閉檔案。這導致不必要的硬碟寫入,因為檔案的 meta 資訊(更準確的說,是修改時間)有所改變。最終的修正是為了避免這些不必要的呼叫,因為圖示沒有任何改變。