美文网首页
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 的亲和性

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