gpt4 book ai didi

perf 报告多个计划 :sched_stat_sleep event for a single sleep

转载 作者:行者123 更新时间:2023-12-04 06:07:36 32 4
gpt4 key购买 nike

我正在尝试分析示例应用程序

#include<stdio.h>
#include<unistd.h>

int calculate() {
int i=0, ret;
for(i=0;i<10000000;i++) {
ret +=i;
}
return ret;
}

int main(int argc, char ** ch) {
int loop;
for(loop=0; loop<5; loop++){
sleep(1);
calculate();
}
}

我使用 perf record 进行分析。

perf record -e sched:sched_stat_sleep -e sched:sched_switch -o perfnoallcpu.data -g ./loop

我看到每个开关都有 4 个 sched:sched_stat_sleep 报告。

 swapper     0/0     [000]   222.777113:    1269841 sched:sched_stat_sleep: comm=perf pid=2927 delay=1269841 [ns]
swapper 0/0 [000] 222.777116: 1269841 sched:sched_stat_sleep: comm=perf pid=2927 delay=1269841 [ns]
swapper 0/0 [000] 222.777117: 1269841 sched:sched_stat_sleep: comm=perf pid=2927 delay=1269841 [ns]
swapper 0/0 [000] 222.777118: 1269841 sched:sched_stat_sleep: comm=perf pid=2927 delay=1269841 [ns]
loop 2927/2927 [001] 222.777651: 1 sched:sched_switch: prev_comm=loop prev_pid=2927 prev_prio=120 prev_state=S ==> next_comm=swapper/1 next_pid=0 next_prio=120
swapper 0/0 [001] 223.777227: 999577599 sched:sched_stat_sleep: comm=loop pid=2927 delay=999577599 [ns]
swapper 0/0 [001] 223.777230: 999577599 sched:sched_stat_sleep: comm=loop pid=2927 delay=999577599 [ns]
swapper 0/0 [001] 223.777231: 999577599 sched:sched_stat_sleep: comm=loop pid=2927 delay=999577599 [ns]
swapper 0/0 [001] 223.777232: 999577599 sched:sched_stat_sleep: comm=loop pid=2927 delay=999577599 [ns]
loop 2927/2927 [001] 223.803313: 1 sched:sched_switch: prev_comm=loop prev_pid=2927 prev_prio=120 prev_state=S ==> next_comm=swapper/1 next_pid=0 next_prio=120
swapper 0/0 [001] 224.802882: 999568643 sched:sched_stat_sleep: comm=loop pid=2927 delay=999568643 [ns]
swapper 0/0 [001] 224.802884: 999568643 sched:sched_stat_sleep: comm=loop pid=2927 delay=999568643 [ns]
swapper 0/0 [001] 224.802885: 999568643 sched:sched_stat_sleep: comm=loop pid=2927 delay=999568643 [ns]
swapper 0/0 [001] 224.802885: 999568643 sched:sched_stat_sleep: comm=loop pid=2927 delay=999568643 [ns]
loop 2927/2927 [001] 224.814909: 999483089 sched:sched_stat_sleep: comm=kworker/1:1 pid=65 delay=999483089 [ns]
loop 2927/2927 [001] 224.814913: 1 sched:sched_switch: prev_comm=loop prev_pid=2927 prev_prio=120 prev_state=R ==> next_comm=kworker/1:1 next_pid=65 next_prio=120
loop 2927/2927 [001] 224.828492: 1 sched:sched_switch: prev_comm=loop prev_pid=2927 prev_prio=120 prev_state=S ==> next_comm=swapper/1 next_pid=0 next_prio=120
swapper 0/0 [001] 225.828066: 999572687 sched:sched_stat_sleep: comm=loop pid=2927 delay=999572687 [ns]
swapper 0/0 [001] 225.828069: 999572687 sched:sched_stat_sleep: comm=loop pid=2927 delay=999572687 [ns]
swapper 0/0 [001] 225.828070: 999572687 sched:sched_stat_sleep: comm=loop pid=2927 delay=999572687 [ns]
swapper 0/0 [001] 225.828071: 999572687 sched:sched_stat_sleep: comm=loop pid=2927 delay=999572687 [ns]
loop 2927/2927 [001] 225.829873: 301152896 sched:sched_stat_sleep: comm=compiz pid=1723 delay=301152896 [ns]
loop 2927/2927 [001] 225.829877: 1 sched:sched_switch: prev_comm=loop prev_pid=2927 prev_prio=120 prev_state=R ==> next_comm=compiz next_pid=1723 next_prio=120
loop 2927/2927 [001] 225.853764: 1 sched:sched_switch: prev_comm=loop prev_pid=2927 prev_prio=120 prev_state=S ==> next_comm=swapper/1 next_pid=0 next_prio=120
swapper 0/0 [001] 226.853341: 999576357 sched:sched_stat_sleep: comm=loop pid=2927 delay=999576357 [ns]
swapper 0/0 [001] 226.853343: 999576357 sched:sched_stat_sleep: comm=loop pid=2927 delay=999576357 [ns]
swapper 0/0 [001] 226.853344: 999576357 sched:sched_stat_sleep: comm=loop pid=2927 delay=999576357 [ns]
swapper 0/0 [001] 226.853345: 999576357 sched:sched_stat_sleep: comm=loop pid=2927 delay=999576357 [ns]
loop 2927/2927 [001] 226.878867: 1 sched:sched_switch: prev_comm=loop prev_pid=2927 prev_prio=120 prev_state=S ==> next_comm=swapper/1 next_pid=0 next_prio=120
swapper 0/0 [001] 227.878442: 999573760 sched:sched_stat_sleep: comm=loop pid=2927 delay=999573760 [ns]
swapper 0/0 [001] 227.878443: 999573760 sched:sched_stat_sleep: comm=loop pid=2927 delay=999573760 [ns]
swapper 0/0 [001] 227.878444: 999573760 sched:sched_stat_sleep: comm=loop pid=2927 delay=999573760 [ns]
swapper 0/0 [001] 227.878445: 999573760 sched:sched_stat_sleep: comm=loop pid=2927 delay=999573760 [ns]

sched_stat_sleep 的数量随着 cpu 数量的增加而增加。这使应用程序看起来休眠了更多时间。

如果我在执行 perf 记录时指定 -a 选项,问题就消失了,我们每次 sleep 只会看到一个 sched_stat_sleep 事件。

最佳答案

这是一个 bug在内核中,这也会影响其他事件(来自 chengjian (D) 的 message 表明它影响 sched:sched_stat_sleep)。显然,事件被计算的次数与 CPU 的数量相同 (nrcpus)。根据this diff,该修复程序包含在内核版本 4.18.17 中(这确保事件仅针对发生它的 CPU 进行计数。

关于perf 报告多个计划 :sched_stat_sleep event for a single sleep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56126819/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com