美文网首页
CPU 的亲和性

CPU 的亲和性

作者: 勤奋的大头怪 | 来源:发表于2020-03-06 15:42 被阅读0次

先给一个官方的解释: 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来控制掩码设置,这个在以后再说。

相关文章

  • 亲和性和隔离CPU

    一 亲和性 高性能的应用有个技巧就是做任务和cpu核心的绑定, 即设置CPU亲和性,绑定之后就可以让这个任务尽可...

  • cpu亲和性

    0、准备知识 超线程技术(Hyper-Threading):就是利用特殊的硬件指令,把两个逻辑内核(CPU cor...

  • CPU 的亲和性

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

  • Java CPU亲和性

    最近在项目中碰到整个进程的CPU占用率极低,分析了很久,才排查到是CPU亲和性相关的问题,因为在项目启动配置过程中...

  • Kubernetes 亲和性调度

    原文链接: Kubernetes 亲和性调度 亲和性有分成节点亲和性(nodeAffinity)和 Pod 亲和性...

  • ceph 14 后 ceph adm支持自动配置numa

    全局开启osd 使用numa自动绑定osd进程和cpu(内存)的亲和性指定numa亲和开关,由程序自动判断。(ce...

  • Linux 进程、线程和CPU的关系,cpu亲和性

    (一)、CPU知识: 1、物理CPU数:机器主板上实际插入的cpu数量,比如说你的主板上安装了一块8核CPU,那么...

  • k8s 亲和性和反亲和性

    亲和性和反亲和性 node 亲和性 node亲和性策略表示pod部署到符合某些条件的node上. 上面的这个例子表...

  • 线程与CPU核绑定

    线程与CPU核绑定 不管是线程还是进程,都是通过设置亲和性(affinity)来达到目的。对于进程的情况,一般是使...

  • K8S之节点亲和性调度

    节点亲和性规则: required(硬亲和性,不能商量,必须执行) 、preferred(软亲和性,可以商量,选择...

网友评论

      本文标题:CPU 的亲和性

      本文链接:https://www.haomeiwen.com/subject/eomvrhtx.html