设置进程的 cpu 亲和性可通过 taskset 命令实现,具体包括三个操作:1. 查看当前进程的 cpu 亲和性使用 taskset -p ;2. 启动新进程时指定 cpu 使用 taskset -c ;3. 修改已有进程的 cpu 亲和性使用 taskset -p -c 。此外,需注意 cpu 编号从 0 开始、掩码格式的选择、性能影响评估以及容器中的权限限制等细节。

设置进程的 CPU 亲和性,说白了就是告诉系统“这个进程只能在哪些 CPU 上运行”。这在多核服务器上特别有用,比如你想让某个程序只跑在一个或几个特定核心上,避免资源争抢或者提高缓存命中率。taskset 命令就是用来干这事的,简单但很实用。

下面我们就从几个常见使用场景出发,讲讲怎么用 taskset 设置进程的 CPU 亲和性。

查看当前进程的 CPU 亲和性
如果你已经有一个正在运行的进程,想看看它被绑定了哪些 CPU,可以用:
taskset -p
比如:

taskset -p 1234
输出会是类似这样的内容:
pid 1234's current affinity mask: f
这里的 f 是十六进制,表示允许运行在前 4 个 CPU(0~3)。如果你想把它转换成二进制,可以看到 f 就是 1111,每一位代表一个 CPU 核心是否允许运行。
这样你可以知道当前进程有没有被限制过 CPU 使用范围。
启动新进程时指定 CPU 亲和性
启动一个新的程序时就指定它运行在哪几个 CPU 上,语法如下:
taskset -c
比如你想让 myprogram 只能在 CPU 1 和 CPU 3 上运行:
豆包AI编程
豆包推出的AI编程助手
483 查看详情
taskset -c 1,3 ./myprogram
也可以写成连续的范围:
taskset -c 0-3 ./myprogram
这表示允许运行在 CPU 0 到 3 上。
这种方式适合你在执行程序的时候就想控制它的调度位置,比如做一些性能测试、隔离关键服务等。
修改已有进程的 CPU 亲和性
有时候你想修改一个已经在跑的进程,不让它随便切换 CPU,可以这样做:
taskset -p -c
例如把 PID 为 5678 的进程绑定到 CPU 2 上:
taskset -p -c 2 5678
注意:不是所有进程都能随意更改 CPU 亲和性,比如内核线程或者某些特权进程可能不支持,这时候会报错。
这种操作常用于线上环境临时优化性能,或者调试问题时排除多核切换带来的干扰。
几个小细节要注意
掩码格式:除了 -c 这种按 CPU 编号写的格式,你还可以用十六进制掩码,比如 -c 0,1 等价于 0x3。不过一般推荐用 -c,更直观。CPU编号从0开始:系统里 CPU 编号是从 0 开始的,别搞错了。影响性能不一定好:虽然绑定了 CPU 能减少上下文切换,但也可能导致负载不均。绑之前最好先评估一下是不是真的需要。容器中使用需注意:如果你是在 Docker 或者 Kubernetes 容器里运行 taskset,要确保容器本身有权限访问对应 CPU,并且宿主机没有做限制。
基本上就这些。taskset 不复杂,但很容易忽略一些小细节,比如掩码格式、运行时权限这些。只要记住你想控制哪个进程、想让它跑在哪几个 CPU 上,然后按照上面的方法选对应的命令就行。
以上就是如何设置进程CPU亲和性 taskset命令使用详解的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/474998.html
微信扫一扫
支付宝扫一扫