taskset 命令CPU 核绑定
taskset 命令:CPU 核绑定使用方法
taskset 是 Linux 系统中用于 设置或查询进程的 CPU 亲和性(CPU Affinity) 的工具,可以将进程绑定到指定的 CPU 核心上运行,避免进程在不同核心之间切换,提高缓存命中率和性能。
1. 基本语法
1 | |
常用选项
选项说明-p, –pid操作已存在的进程(需指定 PID)-c, –cpu-list使用 CPU 编号列表(如 0,2,4)代替掩码-a, –all-tasks绑定进程的所有线程
2. 使用方法
(1)启动新进程并绑定 CPU
语法:
1 | |
示例:
1 | |
(2)修改已运行进程的 CPU 绑定
语法:
1 | |
示例:
1 | |
(3)查看进程当前的 CPU 绑定
语法:
1 | |
示例:
1 | |
输出示例:
1 | |
3. CPU 掩码(Mask)与 CPU 列表
(1)CPU 掩码(十六进制/二进制)
0x1 = 0001(绑定到 CPU 0)
0x3 = 0011(绑定到 CPU 0 和 1)
0xF = 1111(绑定到 CPU 0、1、2、3)
示例:
1 | |
(2)CPU 列表(更直观)
0 → 仅 CPU 0
0,2 → CPU 0 和 2
1-3 → CPU 1、2、3
示例:
1 | |
4. 绑定所有线程(多线程进程)
如果进程是多线程的(如 Nginx、Java),可以使用 -a 绑定所有线程:
1 | |
5. 典型使用场景
(1)高性能计算(HPC)
1 | |
(2)数据库优化(MySQL)
1 | |
(3)实时任务(低延迟)
1 | |
6. 注意事项
taskset 不影响进程的子进程
- 如果父进程被绑定到 CPU 0,子进程默认继承该绑定,但可以手动修改。
isolcpus 内核参数优先级更高
- 如果某些 CPU 被 isolcpus 隔离,taskset 无法将普通进程绑定到这些核心。
cgroups 更强大
- 如果需要更精细的控制(如限制 CPU 使用率),建议使用 cgroups(cset 或 systemd)。
7. 结合 numactl 优化 NUMA 架构
如果服务器是 NUMA 架构(多 CPU 插槽),建议配合 numactl 使用:
1 | |
总结
场景推荐命令启动新进程并绑定 CPUtaskset -c 0,1
适用场景:
高性能计算(HPC)
数据库优化(MySQL/PostgreSQL)
实时任务(DPDK/低延迟应用)
通过合理使用 taskset,可以显著提高 CPU 缓存命中率,减少进程切换开销,优化系统性能。