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

How to trace the list of PIDs running on a specific core?

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

其他进程,如中断处理程序、内核线程、服务进程,也可能偶尔在专用内核上运行。我想禁用尽可能多的此类进程。要做到这一点,我需要首先确定可以在专用核心上运行的进程列表。

我的问题是:

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

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


肮脏的黑客解决方案。

免责声明:有时停止工作"列:行太长":。-/

复制到:core-pids.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/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"#
">> lastPIDs; done
  cp CPU_PIDs aux
  paste lastPIDs aux > CPU_PIDs
  column -t CPU_PIDs > CPU_PIDs.humanfriendly.tsv
  sleep 1
done

然后

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

然后用你最喜欢的编辑器打开cpu-pids.humanfriendly.tsv,然后?检查!

键在"ps-o cpuid,pid"位中,有关详细信息,请评论。D

解释

无限循环

  • ps-o cpuid,pid tail-n+2 sort xargs-n 2 grep-e"^$target cpu"awk'print$2'>lastpids
    • PS AX-O CPU ID,PID
      • 显示与CPU关联的PID
    • 尾-n+ 2
      • 删除页眉
    • 分类
      • 按CPUID排序
    • XARGS—N 2
      • 乞讨时去掉空白
    • grep-e"^$target_cpu"
      • 按CPU ID筛选
    • awk'打印$2'
      • 获取PID列
    • LaSTPIDs
      • 输出以将目标CPU ID的las pid归档
  • 对于i i n 1..10 do printf"">>lastpids;完成
    • 用"columns-t"命令对pretty.tsv进行hack打印
  • 计算机辅助编程语言
    • cpu-pids保存整个时间轴,我们将其复制到aux文件中,以允许下一个命令将其用作输入和输出。
  • 粘贴lastpids aux>cpu-pids
    • 将lastpids列附加到整个时间线文件cpu-pids
  • 列-t cpu-pids>cpu-pids.humanfriendly.tsv
    • 漂亮的打印整个时间轴cpu-pids文件

归因

  • stackoverflow回答:Linux中的ps实用程序(procps),如何检查使用的CPU
    • 米克尔
  • stackoverflow答案:bash prints literal中的echo换行符
    • 通过某物
  • stackoverflow答案:grep regex中的shell变量
    • David W.
  • 超级用户的答案是:对齐Unix命令输出中的列
    • 詹妮·皮卡莱宁
  • nixcraft文章:howto:unix for loop 1 to 100 numbers

获得你想要的东西的最佳方法是如下操作:

  • 使用isolcpus=linux内核引导参数从linux调度器"释放"一个内核
  • 禁用irqbalance守护进程(如果正在执行)
  • 通过在/proc/irq//smp_affinity上手动写入CPU掩码,设置IRQ与其他核心的关联性。
  • 最后,通过taskset命令运行设置与专用核心的关联性的程序。
  • 在这种情况下,这样的核心只会执行您的程序。要进行检查,您可以键入ps -eLF并查看PSR列(指定CPU号)。


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