目录
一、目的
某个进程需要较高的运行效率时,就有必要考虑将其绑定到单独的核上运行,以减小由于在不同的核上调度造成的开销。
把某个进程/线程绑定到特定的cpu核上后,该进程就会一直在此核上运行,不会再被操作系统调度到其他核上。但绑定的这个核还是可能会被调度运行其他应用程序的。
二、命令绑定
1、查看绑定情况
查看进程pid现在的绑核情况
taskset -p pid
pid 2726's current affinity mask: 6
显示的十进制数字6--->转换为2进制是110,每个1对应一个cpu,所以进程运行在#1,#2cpu上(cpu从0开始)
2、启动时绑定
#启动时绑定到第二个cpu
taskset -c 1 ./dgram_servr&
#启动时绑定到第1个cpu,第3个cpu
taskset -c 0,2 ./dgram_servr&
(cpu从0开始)
3、启动后绑定
2.1 按CPU数直接绑核
taskset -cp 1,2,5,11 9865 将进程9864绑定到#1、#2、#5、#11号核上面。
taskset -cp 1,2,5-11 9865 将进程9864绑定到#1、#2、#5~#11号核上面。
注意,cpu的标号是从0开始的,所以cpu1表示第二个cpu(第一个cpu的标号是0)。
taskset -cp cpu-list pid
其中cpu-list是数字化的cpu列表,从1开始。多个不连续的cpu可用逗号连接,连续的可用短现连接,比如1,2,5-11等。
2.2 掩码形式绑核
taskset -p mask pid
按照二进制形式,从最低位到最高位代表物理CPU的#1、#2、……、#n号核。
比如:0x00000001代表CPU的0号核,0x00000003代表CPU的0号和3号核。
需要注意的是,并非掩码中给出的CPU核就一定会存在,比如0x00000400理论上代表CPU的第10号核,但是该核在真正的计算机上面并不一定是存在的。而且,如果我们试图将物理上并不存的核绑定给某个进程时,会返回错误。掩码形式的绑核命令为:
taskset -p mask pid
三、代码绑定
(原文: