如何跟踪特定核心上运行的PID列表?

时间:2016-06-01 18:36:51

标签: linux performance performance-testing perf jailhouse

我试图在Linux上的 专用 核心上运行程序。 (我知道Jailhouse是一个很好的方法,但我必须使用现成的Linux。:-()

其他进程(例如中断处理程序,内核线程,服务进程)也可能偶尔在专用核心上运行。我想尽可能多地禁用这样的进程。为此,我需要先确定可能在 专用 核心上运行的进程列表。

我的问题是:

是否有任何现有工具可用于跟踪在一段时间间隔内在特定核心上运行的PID或进程列表?

非常感谢您在这个问题上的时间和帮助!

3 个答案:

答案 0 :(得分:3)

TL; DR Dirty hacky solution。

免责声明:在某些时候停止工作“列:行太长”: - /

将此复制到:core-pids.sh

#!/bin/bash

TARGET_CPU=0

touch lastPIDs
touch CPU_PIDs

while true; do
  ps ax -o cpuid,pid | tail -n +2 | sort | xargs -n 2 | grep -E "^$TARGET_CPU" | awk '{print $2}' > lastPIDs
  for i in {1..100}; do printf "#\n" >> lastPIDs; done
  cp CPU_PIDs aux
  paste lastPIDs aux > CPU_PIDs
  column -t CPU_PIDs > CPU_PIDs.humanfriendly.tsv
  sleep 1
done

然后

chmod +x core-pids.sh
./core-pids.sh

然后用您喜欢的编辑器打开CPU_PIDs.humanfriendly.tsv,然后¡检查!

密钥位于“ps -o cpuid,pid”位,有关详细信息,请发表评论。 :d

<强>解释

无限循环

  • ps -o cpuid,pid |尾巴-n + 2 |排序| xargs -n 2 | grep -E“^ $ TARGET_CPU”| awk'{print $ 2}'&gt; lastPIDs
    • ps ax -o cpuid,pid
      • 显示与CPU关联的pid
    • tail -n +2
      • 删除标题
    • 排序
      • 按cpuid排序
    • xargs -n 2
      • 在乞讨时删除空格
    • grep -E“^ $ TARGET_CPU”
      • 按CPU ID过滤
    • awk'{print $ 2}'
      • 获取pid栏
    • &GT; lastPIDs
      • 输出到目标CPU ID的文件那些las pid
  • for i in {1..10};做printf“#\ n”&gt;&gt; lastPIDs; DONE
    • 使用“columns -t”命令
    • 进行漂亮的.tsv打印
  • cp CPU_PIDs aux
    • CPU_PIDs保存整个时间轴,我们将其复制到aux文件以允许下一个命令将其用作输入和输出
  • 粘贴lastPIDs aux&gt; CPU_PIDs
    • 将lastPIDs列附加到整个时间轴文件CPU_PIDs
  • column -t CPU_PIDs&gt; CPU_PIDs.humanfriendly.tsv
    • 漂亮打印整个时间轴CPU_PIDs文件

<强>归因

答案 1 :(得分:1)

获得所需内容的最佳方式是按以下方式操作:

  1. 使用isolcpus= Linux内核启动参数来&#34;免费&#34; Linux调度程序的一个核心
  2. 禁用irqbalance守护程序(如果正在执行)
  3. 通过在/proc/irq/<irq_number>/smp_affinity
  4. 上手动编写CPU掩码,将IRQ的亲和力设置为其他核心
  5. 最后,运行程序通过taskset命令将亲缘关系设置为专用核心。
  6. 在这种情况下,这样的核心只会执行你的程序。要进行检查,您可以键入ps -eLF并查看PSR列(指定CPU编号)。

答案 2 :(得分:0)

不是问题的直接答案,但我通常使用perf上下文切换软件事件来识别我的基准测试中系统或其他过程的扰动