[英]linux kernel/sched.c - find_process_by_pid - how to use it from a c application code
[英]How to find the kernel latency for an application?
經過我自己的長期研究,我來到這里尋求幫助。
我想測量應用程序 kernel 的延遲。
例如,我有一個基於 C 的應用程序,當我運行它時,我想測量 kernel 調度它所花費的時間。
我在我的 C 應用程序中使用了 time.h 庫,但它告訴我執行該應用程序所花費的時間,而不是 kernel 安排它所花費的時間。
PS:我一直在使用 PREEMPT_RT 補丁,我的 kernel 已經是 PREEMPTIVE,如果該信息對您的回答有用的話。
bcc 工具 ( https://github.com/iovisor/bcc ) 具有報告調度程序延遲的 runqlat 工具。 它可以報告整個系統或每個進程的調度程序延遲。
這是一個例子:
# ./runqlat
Tracing run queue latency... Hit Ctrl-C to end.
^C
usecs : count distribution
0 -> 1 : 233 |*********** |
2 -> 3 : 742 |************************************ |
4 -> 7 : 203 |********** |
8 -> 15 : 173 |******** |
16 -> 31 : 24 |* |
32 -> 63 : 0 | |
64 -> 127 : 30 |* |
128 -> 255 : 6 | |
256 -> 511 : 3 | |
512 -> 1023 : 5 | |
1024 -> 2047 : 27 |* |
2048 -> 4095 : 30 |* |
4096 -> 8191 : 20 | |
8192 -> 16383 : 29 |* |
16384 -> 32767 : 809 |****************************************|
32768 -> 65535 : 64 |*** |
要獲取進程的調度程序延遲,需要指定 -p 開關。 -m 開關指定毫秒而不是微秒。
# ./runqlat -mp 4505 1
Tracing run queue latency... Hit Ctrl-C to end.
msecs : count distribution
0 -> 1 : 1 |* |
2 -> 3 : 2 |*** |
4 -> 7 : 1 |* |
8 -> 15 : 0 | |
16 -> 31 : 25 |****************************************|
32 -> 63 : 3 |**** |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.