gpt4 book ai didi

c - 如何获取程序在 Linux 中执行的内核数和 CPU 负载

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:55:16 25 4
gpt4 key购买 nike

我需要找出给定进程在特定时间(例如 1 秒左右)内执行了多少个 CPU 内核?这必须从 C 程序(或可能是 C++)中完成。我知道 perf 显示了 cpu-migrations 的数量。

我需要知道 CPU 核心交换的数量以及进程使用了​​哪些核心。我假设我首先必须获取进程在哪些线程中执行,然后查看线程在哪些内核上运行。

我得到的信息将用于计算进程的 CPU 负载。当只在一个 CPU 内核中运行时,我知道该怎么做并且有一个可行的解决方案。然而,处理多个 CPU 内核,即一个进程由多个线程组成,这些线程在不同时间在一个或多个 CPU 内核中运行,这使得它变得更加困难。这里的任何人都可以指出任何解决方案或解决方案的提示吗?

最佳答案

我没有明确的答案,但这是我发现的。我使用 stress -c 1 -t 1(在一秒钟内运行 sqrt+loop 进程)。

我认为这回答了您的第一个问题(找出在您的流程执行期间发生了多少次迁移)。

$ perf stat -e migrations stress -c 1 -t 1
stress: info: [4159] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
stress: info: [4159] successful run completed in 1s
Performance counter stats for 'stress -c 1 -t 1':
2 migrations

接下来我发现了一个有趣的tracepoint:

perf stat -e sched:sched_migrate_task stress -c 1 -t 1

碰巧 sched_migrate_task has a dest_cpu argument我不知道如何追踪。

关于c - 如何获取程序在 Linux 中执行的内核数和 CPU 负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26731216/

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