​​taskset 命令CPU 核绑定

​​​taskset 命令:CPU 核绑定使用方法​

taskset 是 Linux 系统中用于 ​​设置或查询进程的 CPU 亲和性(CPU Affinity)​​ 的工具,可以将进程绑定到指定的 CPU 核心上运行,避免进程在不同核心之间切换,提高缓存命中率和性能。

data-ad-format="fluid" data-ad-layout-key="-7k+ex-4a-9w+4a">

​​1. 基本语法​​

1
2
taskset &#91;options] <mask> <command>  # 启动新进程并绑定 CPU
taskset &#91;options] -p <mask> <PID> # 修改已运行进程的 CPU 绑定

​​常用选项​​

选项说明-p, –pid操作已存在的进程(需指定 PID)-c, –cpu-list使用 CPU 编号列表(如 0,2,4)代替掩码-a, –all-tasks绑定进程的所有线程

​​2. 使用方法​​

​​(1)启动新进程并绑定 CPU​​

​​语法​​:

1
taskset -c <CPU列表> <命令>

​​示例​​:

1
taskset -c 0,1 stress -c 2  # 将 stress 进程绑定到 CPU 0 和 1

​​(2)修改已运行进程的 CPU 绑定​​

​​语法​​:

1
taskset -pc <CPU列表> <PID>

​​示例​​:

1
taskset -pc 2,3 1234  # 将 PID=1234 的进程绑定到 CPU 2 和 3

​​(3)查看进程当前的 CPU 绑定​​

​​语法​​:

1
taskset -p <PID>

​​示例​​:

1
taskset -p 1234

输出示例:

1
pid 1234's current affinity mask: 3  # 二进制 11(表示绑定到 CPU 0 和 1)

​​3. CPU 掩码(Mask)与 CPU 列表​​

​​(1)CPU 掩码(十六进制/二进制)​​

  • 0x1 = 0001(绑定到 CPU 0)

  • 0x3 = 0011(绑定到 CPU 0 和 1)

  • 0xF = 1111(绑定到 CPU 0、1、2、3)

​​示例​​:

1
taskset 0x1 sleep 60  # 绑定到 CPU 0

​​(2)CPU 列表(更直观)​​

  • 0 → 仅 CPU 0

  • 0,2 → CPU 0 和 2

  • 1-3 → CPU 1、2、3

​​示例​​:

1
taskset -c 1-3 stress -c 3  # 绑定到 CPU 1、2、3

​​4. 绑定所有线程(多线程进程)​​

如果进程是多线程的(如 Nginx、Java),可以使用 -a 绑定所有线程:

1
taskset -ac 0,1 <PID>  # 将 PID 的所有线程绑定到 CPU 0 和 1

​​5. 典型使用场景​​

​​(1)高性能计算(HPC)​​

1
taskset -c 2,3 ./compute_job  # 绑定到 CPU 2 和 3

​​(2)数据库优化(MySQL)​​

1
taskset -c 4-7 mysqld  # 将 MySQL 绑定到 CPU 4-7

​​(3)实时任务(低延迟)​​

1
taskset -c 0 irqbalance  # 将中断处理绑定到 CPU 0

​​6. 注意事项​​

​​taskset 不影响进程的子进程​​

  • 如果父进程被绑定到 CPU 0,子进程默认继承该绑定,但可以手动修改。

​​isolcpus 内核参数优先级更高​​

  • 如果某些 CPU 被 isolcpus 隔离,taskset 无法将普通进程绑定到这些核心。

​​cgroups 更强大​​

  • 如果需要更精细的控制(如限制 CPU 使用率),建议使用 cgroups(cset 或 systemd)。

​​7. 结合 numactl 优化 NUMA 架构​​

如果服务器是 ​​NUMA 架构​​(多 CPU 插槽),建议配合 numactl 使用:

1
numactl --cpunodebind=0 --physcpubind=0-3 <command>  # 绑定到 NUMA 节点 0 的 CPU 0-3

​​总结​​

场景推荐命令​​启动新进程并绑定 CPU​​taskset -c 0,1 ​​修改已运行进程的绑定​​taskset -pc 2,3 ​​绑定所有线程​​taskset -ac 0,1 ​​查看当前绑定​​taskset -p ​​NUMA 优化​​numactl –physcpubind=0-3

​​适用场景​​:

  • 高性能计算(HPC)

  • 数据库优化(MySQL/PostgreSQL)

  • 实时任务(DPDK/低延迟应用)

通过合理使用 taskset,可以显著提高 CPU 缓存命中率,减少进程切换开销,优化系统性能。

data-ad-format="auto" data-full-width-responsive="true">