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 <command> [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 <mask> <pid>

$ 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来控制掩码设置,这个在以后再说。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 2017年年初以来,随着Redis产品的用户量越来越大,接入服务越来越多,再加上美团点评Memcache和R...
    SithCait阅读 712评论 0 0
  • 所谓cpu绑定,其实就是对进程或线程设置相应的cpu亲和力(affinity),确保进程或线程只会在设置了相应标志...
    songleo阅读 3,147评论 1 4
  • ****1. 为什么需要 CPU 虚拟化**** X86 操作系统是设计在直接运行在裸硬件设备上的,因此它们自动认...
    51reboot阅读 4,280评论 0 8
  • 今天家里一下子多了两位小主人,苗苗和豆豆。 早晨正在做饭,只听得一声声猫咪的叫唤声,开门一看,两只小猫就在门外,一...
    潇湘月潇湘月阅读 437评论 1 13
  • 安装Nginx 如果已经安装了apache,则需要手动删除。 然后再进行安装Nginx 输入服务器,查看是否Ngn...
    王宝花阅读 805评论 0 2