如何找出线程正在哪个核心上运行?

如何找出线程正在哪个核心上运行?

假设我们有一个名为的 CPU 密集型应用程序multi-threaded-application.out,它运行在 Ubuntu 上,PID 为 10000。它有 4 个线程,tid 分别为 10001、10002、10003 和 10004。我想知道,在任何给定时间,哪个线程核心这些线程中的每一个都被调度?

我尝试过/proc/<pid>/tasks/<tid>/status,但找不到有关负责运行给定线程的核心 ID 的任何信息。

这个问题在某种程度上是相关的到这个

任何帮助将非常感激。

答案1

下面的命令就达到了目的:

ps -mo pid,tid,%cpu,psr -p <main process ID>

选项解释:

  • -m- 在进程之后显示线程
  • -o- 用户定义的格式,显示进程 ID、“代表可分派实体的唯一编号”(线程 ID)、CPU 利用率以及进程所在的处理器现在分配给
  • -p对于给定的进程 ID

以上ps仅适用于 Linux,不适用于 macOS/BSD。

答案2

如果top您点击h获取帮助菜单,它会解释...

  • F对于字段
  • 带有 的内容*是标记为要显示的内容
  • 寻找P哪个是最后使用的 CPU (SMP)
    • 使用键盘上的向下箭头键将突出显示向下移动,然后按空格键将其P添加到*
  • 点击 escape 返回到运行顶部显示,注意P与 cpu 核心编号相对应的新列
  • H切换线程开关
  • s要更新显示延迟,我喜欢 1 秒而不是默认的 3 秒,如果您愿意,可以选择 0.1
  • i 打开/关闭空闲进程;u对用户进行过滤;o自定义过滤器
  • W保存此 top 配置,以便P从现在开始运行 top 时该列显示。

相关内容