用taskset -p PID查看进程CPU亲和性掩码,转二进制后从右往左对应CPU0、CPU1…;加-c参数可直接显示核心编号范围;ps -o pid,psr,comm -p PID查看实际运行核;改后需watch验证psr是否稳定。

直接用 taskset -p PID 就能看到进程当前允许运行的 CPU 范围,这是判断是否需要调整亲和性的第一步。
怎么看掩码对应哪些核心
输出类似 pid 1234's current affinity mask: 0x3f,这个十六进制数要转成二进制看:0x3f = 00111111,从右往左数,bit 0 是 CPU 0,bit 1 是 CPU 1……所以这里表示允许在 CPU 0–5 上运行。掩码中每有一个 1,就代表一个可运行的核心。
- 0x1 → 只能跑在 CPU 0
- 0x5(二进制 0101)→ CPU 0 和 CPU 2
- 0xff(11111111)→ 前 8 个逻辑 CPU 全开
更直观地查 CPU 列表
加 -c 参数可跳过进制换算:taskset -cp PID,输出如 pid 1234's current affinity list: 0-3,6,8-10,直接列出允许运行的核心编号,连范围写法(如 0-3)和步长(如 8-10:2)都支持,适合快速确认实际配置。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
结合 ps 查看实时运行位置
掩码只管“允许在哪跑”,不等于“此刻正在哪跑”。要观察真实调度行为,用:
ps -o pid,psr,comm -p PID
其中 psr 列显示的是当前实际运行的逻辑 CPU 编号。如果发现 psr 频繁变动,但掩码又很宽(比如 0xff),说明内核正在多个核间均衡负载——这时缩小掩码范围才可能提升缓存局部性或降低迁移开销。
验证是否真起作用
改完亲和性后别只信 taskset -p 输出。持续运行 watch -n1 'ps -o pid,psr,comm -p PID' 看几秒,确认 psr 值稳定在你设定的范围内。若仍跳变,检查是否用了 -a 参数没生效(多线程进程需显式加 -a 才对所有线程设亲和性),或是否有更高优先级的调度策略(如 SCHED_FIFO)覆盖了亲和性限制。

















