Linux下进程与cpu绑定,可以有效缓解延迟问题,如下图:(延迟较小的原因是对Linux进行了实时性修改,Preempt Rt补丁包组入,下图在同负载情况下测试,利用stress工具,CPU 99%负载,MEM 65%负载。)
Linux下进程与CPU绑定方法:
1、在代码中设置:
参考:https://blog.youkuaiyun.com/listener51/article/details/82426128
#define _GNU_SOURCE
#include <sched.h>
#include <unistd.h>
#include <sys/syscall.h>void setAffinity_CPU(pid_t tid, int coreindex) {
cpu_set_t cst;
CPU_ZERO(&cst);
CPU_SET(coreindex, &cst);
sched_setaffinity(tid, sizeof(cst), &cst);
}void main(int argc, char **argv) {
int coreindex = 3;
pid_t tid = null;coreindex = atoi(argv[0]); tid = syscall(SYS_gettid); setAffinity_CPU(tid, coreindex); }
2、命令设置:
参考:https://zhidao.baidu.com/question/2078642319114620948.html
#taskset
-p, 设定一个已存在的pid,而不是重新开启一个新任务
-c, 指定一个处理,可以指定多个,以逗号分隔,也可指定范围,如:2,4,5,6-8。
1,切换某个进程到指定的cpu上
taskset -cp 3 13290
2,让某程序运行在指定的cpu上
taskset -c 1,2,4-7 tar jcf test.tar.gz test
需要注意的是,taskset -cp 3 13290在设定一个已经存在的pid时,子进程并不会继承父进程的,
因此像tar zcf xxx.tar.gz xxx这样的命令,最好在启动时指定cpu,如果在已经启动的情况下,则需要指定tar调用的gzip进程。