我需要找出特定时间内执行的CPU核心数量,例如1秒左右?
这必须从C程序(或可能是C ++)完成。我知道perf表示cpu-migrations
的数量。
我需要知道CPU核心交换的数量以及该进程使用的核心。 我假设我首先必须获取进程执行的线程,然后查看线程运行的内核。
我得到的信息用于计算进程的CPU负载。当只在一个CPU核心中运行时,我知道该怎么做并且有一个可行的解决方案。但是,处理多个CPU内核时,由多个线程组成的进程在不同时间在一个或多个CPU内核中运行会使其变得更难。有没有解决方案或提示可以解决任何人可以指出的问题?
答案 0 :(得分:1)
我没有明确的答案,但这是我发现的。我使用stress -c 1 -t 1(在一秒钟内运行一个sqrt +循环过程)。
我认为这可以回答您的第一个问题(了解在执行流程期间发生的迁移次数)。
$ 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
接下来我发现了一个有趣的跟踪点:
perf stat -e sched:sched_migrate_task stress -c 1 -t 1
并且它发生sched_migrate_task has a dest_cpu argument,我不知道如何追踪。
答案 1 :(得分:0)
试用kernelshark工具。它提供了更好的多核系统可视化表示,亲和力以及可以帮助收集信息的更多功能。