我试图在Linux上的 专用 核心上运行程序。 (我知道Jailhouse是一个很好的方法,但我必须使用现成的Linux。:-()
其他进程(例如中断处理程序,内核线程,服务进程)也可能偶尔在专用核心上运行。我想尽可能多地禁用这样的进程。为此,我需要先确定可能在 专用 核心上运行的进程列表。
我的问题是:
是否有任何现有工具可用于跟踪在一段时间间隔内在特定核心上运行的PID或进程列表?
非常感谢您在这个问题上的时间和帮助!
答案 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
<强>解释强>
无限循环
<强>归因强>
答案 1 :(得分:1)
获得所需内容的最佳方式是按以下方式操作:
irqbalance
守护程序(如果正在执行)/proc/irq/<irq_number>/smp_affinity
taskset
命令将亲缘关系设置为专用核心。在这种情况下,这样的核心只会执行你的程序。要进行检查,您可以键入ps -eLF
并查看PSR
列(指定CPU编号)。
答案 2 :(得分:0)
不是问题的直接答案,但我通常使用perf
上下文切换软件事件来识别我的基准测试中系统或其他过程的扰动