CPU 亲和性 affinity

先给一个官方的解释: https://en.wikipedia.org/wiki/Processor_affinity

CPU affinity的作用就是将一个进程绑定到一个或者一组CPU上。
这个绑定的概念是从出现SMP(Symmetric Multi-Processing)开始,为了是能保证指定的进程运行在指定的CPU上,而不是被调度的其他的CPU上。

查看某一个进程当前运行在哪一个CPU上:

$ ps -eo pid,comm,args,psr | grep firefox
   2652 firefox         /usr/lib64/firefox/firefox    0
   2773 WebExtensions   /usr/lib64/firefox/firefox    4
   2835 Web Content     /usr/lib64/firefox/firefox    3
   2889 RDD Process     /usr/lib64/firefox/firefox    6
   2905 Web Content     /usr/lib64/firefox/firefox    7
   3077 Web Content     /usr/lib64/firefox/firefox    2
   3233 Web Content     /usr/lib64/firefox/firefox    3
   3286 Web Content     /usr/lib64/firefox/firefox    7
   4459 Web Content     /usr/lib64/firefox/firefox    1
   7042 Web Content     /usr/lib64/firefox/firefox    3
   8001 Web Content     /usr/lib64/firefox/firefox    7

从结果里看到我们firefox有很多的进程,第一个2652是主进程,其他的都是负责不同功能的进程,并且可以看到每一个运行的CPU Number.

这里taskset命令可以设置或者检查进程的亲和性
例如查看firefox进程2652的affinity

$ taskset -p 2652
pid 2652's current affinity mask: ff

注意这里得到的掩码为16进制,ff就表示1111 1111,次进程亲和当前系统所有CPU 0-7。(测试机8个CPUs)

我们平时最常用的一个taskset是 $ taskset -c 1 [options]
例如:taskset -c 3 top
获取top的pid和psr

$ ps -eo pid,comm,psr | grep top
   2096 xdg-desktop-por   1
   2184 xdg-desktop-por   2
  17471 top               3
$ taskset -p 17471
pid 17471's current affinity mask: 8

可以看到目前的affinity掩码是8, 翻译为系统识别掩码1000,表明亲和的CPU Number是3。

将16进制的掩码8转换二进制为1000,每一位表示一个CPU,低位的代表CPU0,1000就代表CPU3。

  • 8 -> 1000

修改进程运行CPU: $ taskset -cp

$ ps -eo pid,comm,psr | grep top
   2096 xdg-desktop-por   3
   2184 xdg-desktop-por   6
  17672 top               3
$ taskset -cp 5 17672
pid 17672's current affinity list: 3
pid 17672's new affinity list: 5
$ ps -eo pid,comm,psr | grep top
   2096 xdg-desktop-por   3
   2184 xdg-desktop-por   6
  17672 top               5
$ taskset -p 17672
pid 17672's current affinity mask: 20

可以看到进程17672运行CPU被设置为5,掩码为20,翻译系统识别掩码为00100000,表明亲和的CPU Number是5。

  • 20 -> 10 0000

操作系统也给了可编程的API来控制掩码设置,这个在以后再说。

你可能感兴趣的:(CPU 亲和性 affinity)