c++ - 如何通过 Linux 的调度程序测量线程从繁忙的核心迁移的延迟?

标签 c++ linux multithreading scheduler perf

我的任务是在用 C 或 C++ 编写的程序中测量 Linux 中线程的迁移时间。

我在一个空闲核心上运行一个线程(没有关联),然后为了强制调度程序负载平衡和迁移线程,我在同一个核心上固定了第二个线程。我们知道,一旦创建新线程/进程,调度程序就会平衡线程,导致第一个线程从那个核心迁移到最不忙的那个(因为第二个线程被固定到那个核心)。

我想用高分辨率计时器测量这个线程迁移时间。我试过 perf sched 但它只跟踪迁移事件。澄清一下,我所说的延迟是指在核心上创建第二个线程的时间与第一个线程完全迁移到新核心的时间之间的差异。

我如何衡量这种延迟?

最佳答案

Kernelshark 是您完成这项任务的好 helper 。看看The Graph Window ,尤其是任务图(大约一半)。您必须将正确的选项编译到您的内核中(首先是 FTRACE),并且需要一定程度的精细度来控制数据捕获,以便它包含您想要的事件,但是您可以获得非常详细的信息在整个机器中进行。

基本上,您可以看到系统中每个线程的全部命运,它在哪个 CPU 上运行,何时,为什么等等。这似乎是一个有用的教程 here

这种工具非常适合准确查看系统中发生的事情。其他的东西也出现了,比如 CPU 时钟速度电源模式开关(一切都可以无缘无故停止库存)等。

关于c++ - 如何通过 Linux 的调度程序测量线程从繁忙的核心迁移的延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71653853/

相关文章:

c++ - Tensorflow C++ 内存泄漏 - Valgrind

Linux libffi-3.0.11 安装问题

静态变量上的 Java 同步方法

java - 在 AsyncTask 中调用多个 AsyncTask,然后在必要时停止外部任务是否安全?

c++ - 画出这个形状

c++ - 奇怪的错误,错误 : invalid conversion from ‘const char*’ to ‘char’ [-fpermissive]

python - 如何设置默认的python库路径

c# - RestSharp 异步后台线程

c++ - 使用贪婪方法寻找熄灯游戏的解决方案(回溯)

linux - ip 未被拒绝 - iptables