簡體   English   中英

perf:如何檢查在特定CPU上運行的進程

[英]perf : How to check processess running on particular cpu

perf中是否可以選擇查看在特定cpu / core上運行的進程,以及每個進程占用了該內核多少百分比。

參考鏈接會有所幫助。

我知道perf不是正確的方法,盡管您可以限制每個CPU的perf ,例如使用perf record -C <cpulist>甚至是perf stat -c <cpulist>

您將要看到的結束是context-switch事件,但是,這根本不會為您提供應用程序名稱。

我認為您將需要更強大的功能,如systemtap。

perf旨在進行性能分析,不適合您的情況。 您可以嘗試對/proc/sched_debug進行采樣(如果它是在內核中編譯的)。 例如,您可以檢查哪個進程當前正在CPU上運行:

egrep '^R|cpu#' /proc/sched_debug 
cpu#0, 917.276 MHz
R          egrep  2614     37730.177313 ...
cpu#1, 917.276 MHz
R           bash  2023    218715.010833 ...

通過使用其PID作為鍵,您可以檢查它消耗了多少CPU時間(以毫秒為單位):

grep se.sum_exec_runtime /proc/2023/sched
se.sum_exec_runtime                          :        279346.058986

但是,正如@BrenoLeitão所述, SystemTap對您的腳本非常有用。 這是您任務的腳本。

global cputimes;
global cmdline;
global oncpu;

global NS_PER_SEC = 1000000000;

probe scheduler.cpu_on {
    oncpu[pid()] = local_clock_ns();
}

probe scheduler.cpu_off {
    if(oncpu[pid()] == 0)
        next;

    cmdline[pid()] = cmdline_str();
    cputimes[pid(), cpu()] <<< local_clock_ns() - oncpu[pid()];

    delete oncpu[pid()];
}

probe timer.s(1) {
    printf("%6s %3s %6s %s\n", "PID", "CPU", "PCT", "CMDLINE");
    foreach([pid+, cpu] in cputimes) {
        cpupct = @sum(cputimes[pid, cpu]) * 10000 / NS_PER_SEC;

        printf("%6d %3d %3d.%02d %s\n", pid, cpu, 
            cpupct / 100, cpupct % 100, cmdline[pid]);
    }

    delete cputimes;
}

它通過附加到scheduler.cpu_onscheduler.cpu_off探針來跟蹤進程在CPU上運行的時刻,並在該時刻停止執行(由於遷移或睡眠)。 第二個探針計算這些事件之間的時間差,並將其與進程命令行參數一起保存到cputimes聚合中。

timer.s(1)每秒觸發一次-它遍歷聚合並計算百分比。 這是bash運行無限循環的Centos 7的示例輸出:

     0   0 100.16 
    30   1   0.00 
    51   0   0.00 
   380   0   0.02 /usr/bin/python -Es /usr/sbin/tuned -l -P
  2016   0   0.08 sshd: root@pts/0 "" "" "" ""
  2023   1 100.11 -bash
  2630   0   0.04 /usr/libexec/systemtap/stapio -R stap_3020c9e7ba76838179be68cd2390a10c_2630 -F3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM