抓取進程中包括其所有線程的iowait時間
阿新 • • 發佈:2018-05-30
brush aps switch text contex div alloc pro IV
perf事件是可以按照線程按照進程統計的呢,但是/proc/接口就不提供這樣的功能
hon@station6:/proc/6288$ sudo perf stat -e sched:sched_switch -p 6288 [sudo] hon 的密碼: ^C Performance counter stats for process id ‘6288‘: 473 sched:sched_switch 1.267507195 seconds time elapsed hon@station6:/proc/6288$ sudo perf stat -e sched:sched_switch -t 6291 ^C Performance counter stats for thread id ‘6291‘: 157 sched:sched_switch 1.497770188 seconds time elapsed
perf可以提供線程和進程的統計功能的,perf統計的原理是啥子呢
在perf_event_open處跟蹤pid函數,發現結果是:
hon@station6:~/codebox/pthread$ sudo stap perf_event_open.stp Begin perf: pid:6291 perf: pid:6288 perf: pid:6289 perf: pid:6290 perf: pid:6291 perf: pid:6292
這就明白是咋回事了,一個進程的線程是如何獲取的,然後進程的pid
最重要的結構體是perf_event_context和perf_event,
perf: pid:12500 group_fd:4294967295 perf perf_event_alloc perf: find_get_context.isra.82 ffff8800a770ba00 perf: pid:12932 group_fd:4294967295 perf perf_event_alloc perf: find_get_context.isra.82 0 perf: alloc_perf_context perf: pid:12931 group_fd:4294967295 perf perf_event_alloc perf: find_get_context.isra.82 0 perf: alloc_perf_context perf: pid:12932 group_fd:4294967295 perf perf_event_alloc perf: find_get_context.isra.82 ffff88013677ee00 perf: pid:12933 group_fd:4294967295 perf perf_event_alloc perf: find_get_context.isra.82 0 perf: alloc_perf_context perf: pid:12934 group_fd:4294967295 perf perf_event_alloc perf: find_get_context.isra.82 0 perf: alloc_perf_context perf: pid:12935 group_fd:4294967295 perf perf_event_alloc perf: find_get_context.isra.82 0 perf: alloc_perf_context
都是在第一次新建的時候創建的
抓取進程中包括其所有線程的iowait時間