gpt4 book ai didi

linux - 为什么perf显示sleep占用所有内核?

转载 作者:太空宇宙 更新时间:2023-11-04 10:21:03 24 4
gpt4 key购买 nike

我正在尝试熟悉 perf 并针对我编写的各种程序运行它。

当我针对 100% 单线程的程序启动它时,perf 显示它在机器上占用两个内核(任务时钟事件)。这是示例输出:

perf stat  -a --per-core python3 test.py

Performance counter stats for 'system wide':

S0-C0 1 19004.951263 task-clock (msec) # 1.000 CPUs utilized (100.00%)
S0-C0 1 5,582 context-switches (100.00%)
S0-C0 1 19 cpu-migrations (100.00%)
S0-C0 1 3,746 page-faults
S0-C0 1 <not supported> cycles
S0-C0 1 <not supported> stalled-cycles-frontend
S0-C0 1 <not supported> stalled-cycles-backend
S0-C0 1 <not supported> instructions
S0-C0 1 <not supported> branches
S0-C0 1 <not supported> branch-misses
S0-C1 1 19004.950059 task-clock (msec) # 1.000 CPUs utilized (100.00%)
S0-C1 1 6,752 context-switches (100.00%)
S0-C1 1 25 cpu-migrations (100.00%)
S0-C1 1 935 page-faults
S0-C1 1 <not supported> cycles
S0-C1 1 <not supported> stalled-cycles-frontend
S0-C1 1 <not supported> stalled-cycles-backend
S0-C1 1 <not supported> instructions
S0-C1 1 <not supported> branches
S0-C1 1 <not supported> branch-misses

19.004688019 seconds time elapsed

它甚至表明简单的 sleep 命令在我的计算机上占用了两个内核,我无法解释这一点。我知道操作系统调度程序可以为任何进程重新分配事件核心,但在这种情况下,CPU 利用率会反射(reflect)这一点。

谁能解释一下?

最佳答案

根据 perf stat 的手册页子命令,你有-a配置完整系统的选项: http://man7.org/linux/man-pages/man1/perf-stat.1.html

   -a, --all-cpus
system-wide collection from all CPUs (default if no target is
specified)

在这个“全系统”模式下perf stat (和 perf record too )将计算系统中所有 CPU 上的事件(或 record 的配置文件)。在没有附加参数 command 的情况下使用时, perf 将运行直到被 Ctrl-C 中断。参数为 command , perf 将计数/分析直到命令起作用。典型用法是

perf stat -a sleep 10      # Profile counting every CPU for 10 seconds
perf record -a sleep 10 # Profile with cycles every CPU for 10 seconds to perf.data

要获取单个命令的统计信息,请使用单个进程分析(不带 -a 选项)

perf stat python3 test.py

为了分析(perf record),您可以在没有 -a 选项的情况下运行;或者您可以使用 -a 然后在 perf report 中进行一些手动过滤,仅关注应用程序的 pids/tids/dsos(如果要分析的命令对其他守护进程使用一些进程间请求来完成大量 CPU 工作,这将非常有用)。

--per-core, -A, -C <cpulist>, --per-socket选项仅适用于系统范围 -a模式。尝试 --per-thread-p pid附加到进程选项。

关于linux - 为什么perf显示sleep占用所有内核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43894497/

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