Delay accounting
延時統計
任務在執行時等待某個內核資源會意外遇到延遲,例如可運行的任務正在等待空閑CPU,
per-task的延時統計功能測量下列情況下任務經歷的延遲:
- 正在等待CPU,waiting for a CPU (while being runnable)
- 同步塊I/O的完成,completion of synchronous block I/O initiated by the task
- 正在頁面內交換,swapping in pages
- 記憶體回收,memory reclaim
- 占滿頁面快取,thrashing page cache
- 直接壓縮,direct compact
- 寫保護拷貝,write-protect copy
這些統計功能通過taskstats介面提供給用戶空間使用,
這些延遲給設定CPU優先級,IO優先級和合適的RSS限制提供了反饋,重要任務的長期延遲可以作為一個觸發器來提高它的優先級,
這個功能,通過使用taskstats介面,也為所有的執行緒組(傳統的UNIX行程)中的任務或者執行緒提供了延時統計,這種收集比內核收集更有效,
用戶空間的應用,特別是資源管理應用程式,也能收集延遲統計到任意分組,要使能這個功能,任務的延遲統計能在整個生存周期內和退出時都可用,需要保證連續的和完全的監測,
介面
延遲統計使用的taskstats介面在本目錄下的檔案中被詳細地描述,Taskstats給用戶空間回傳一個per-pid和per-tgid統計的通用資料結構,延遲統計功能計算這個結構中的具體資料域,參看include/uapi/linux/taskstats.h中的與延遲統計有關的資料域描述,
它一般以計數器的形式回傳累計延遲(for cpu, sync block I/O, swapin, memory reclaim, thrash page cache, direct compact, write-protect copy等),
獲取任務計數器(cpu_delay_total)的兩個連續讀數的差異,由于等待這個間隔內的相關資源也會帶來任務延遲,
當任務退出時,per-task統計的記錄被發送給用戶空間,如果它是執行緒組中最后退出的任務,per-tgid統計也會被發送,更多細節由taskstats介面描述給出,
在tools/accounting目錄下的用戶空間程式getdelays.c允許運行簡單的命令和顯示相關的延遲統計資訊,它也用作taskstats的簡單示例,
使用
編譯內核:
CONFIG_TASK_DELAY_ACCT=y
CONFIG_TASKSTATS=y
延遲統計啟動時默認是禁止的,要使能它,增加delayacct到內核啟動選項,要么使用sysctl kernel.task_delayacct在運行時來切換狀態,注意只要在使能之后啟動任務,它就有delayacct資訊,
系統系統之后,使用跟getdelays.c相似的程式來訪問任務或者任務組(tgid)相關的延遲,應用程式也允許執行命令和查看相關的延遲,
getdelays命令的一般格式:
getdelays [-dilv] [-t tgid] [-p pid]
獲取自系統啟動以來PID 10的延遲:
# ./getdelays -d -p 10
(output similar to next case)
獲取自系統啟動以來tgid 5中所有pid的延遲總和:
# ./getdelays -d -t 5
print delayacct stats ON
TGID 5
CPU count real total virtual total delay total delay average
8 7000000 6872122 3382277 0.423ms
IO count delay total delay average
0 0 0ms
SWAP count delay total delay average
0 0 0ms
RECLAIM count delay total delay average
0 0 0ms
THRASHING count delay total delay average
0 0 0ms
COMPACT count delay total delay average
0 0 0ms
WPCOPY count delay total delay average
0 0 0ms
獲取pid1的IO統計:
# ./getdelays -i -p 1
printing IO accounting
linuxrc: read=65536, write=0, cancelled_write=0
上述命令可以使用-v來獲取等多除錯資訊,
英文原文:
https://www.kernel.org/doc/html/latest/accounting/delay-accounting.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/491522.html
標籤:Linux
