第一步:编辑grub配置文件
sudo gedit /etc/default/grub
修改第10和11行的GRUB_CMDLINE_LINUX[_DEFAULT]
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash ioslcpus=0,1,2,3"
GRUB_CMDLINE_LINUX="ioslcpus=0,1,2,3"
如果GRUB_CMDLINE_LINUX内容本来不为空,则在原来的内容后面加上一个空格,再写"ioslcpus=0,1,2,3"。
这里的意思是隔离cpu0,1,2,3,也就是系统不会把线程调度到这4个cpu中。除非用户指定。
保存修改
第二步:更新grub
sudo update-grub
或
sudo grub-mkconfig -o /boot/grub/grub.cfg
这两个命令执行一个就行,当然都执行也不会有问题。
第三步:重启并验证是否成功
查看当前启动命令
cat /proc/cmdline
查看进程1的可运行CPU
taskset -cp 1
把线程搬运到指定cpu的方法(可以是被隔离的cpu)
c++代码
编译时,要加上编译参数 -lpthread
/*
把当前线程绑定到@cpu_num中。cpu_num从0开始引索
*/
void tie_self_thread_to_cpu(int cpu_num)
{
cpu_set_t mask;
CPU_ZERO(&mask);
CPU_SET(cpu_num, &mask); //指定该线程使用的CPU
if (pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask) < 0)
{
perror("pthread_setaffinity_np");
}
}