zoukankan      html  css  js  c++  java
  • Linux CPU 亲和性

    在Linux中,我们知道可以通过nice、renice命令改变进程的执行优先级,优先级高的进程优先执行,从而一定程度上保证重要任务的运行。

    除了nice、renice外,可以通过CPU affinity指定进程在哪些处理器上运行。CPU affinity表示进程要在某个给定的 CPU 上尽量长时间地运行而不被迁移到其他处理器的倾向性。
    2.6 版本的Linux内核,实现了CPU affinity的接口,
    需要说明的说:应用程序显示指定了CPU affinity的话,表示应用程序只会在指定的处理器上运行,就算其他处理器空闲,也不会切换到别的处理器上运行。

    以下两种情况有可能需要使用自定义进程CPU affinity:

    1. 保证高优先级任务
      如有存在一些优先级高的任务,可以将其他任务都分配到指定的处理器执行,这个高优先级任务设定CPU affinity到其他处理器,避免非重要任务对高优先级任务的干扰。
      一个比较好的case是,在分布式计算系统中,在凌晨常常会进行一些数据/索引merge或者导数据的工作,为了避免对服务进程的影响,可以将这些任务都放到一个处理器上执行
    2. 测试复杂程序
      对于号称scale out的程序,在资源受限的情况下进行测试,可以通过定义进程的cpu affinity,逐步测试在提供不同数量处理器的情况下,程序的处理能力!

    linux下可以通过taskset(需安装schedutils)显示指定进程的cpu affinity
    taskset功能如下:

    $ taskset -help
    Usage: taskset [options] [mask | cpu-list] [pid|cmd [args...]]
    
    Options:
     -a, --all-tasks         operate on all the tasks (threads) for a given pid
     -p, --pid               operate on existing given pid
     -c, --cpu-list          display and specify cpus in list format
    ......
    

    实例:

    编写一个简单的C程序(让CPU忙起来即可):

    #cat test.c
    #include <stdio.h>
    
    void main(int argc, char** argv)
    {
            for(int i = 0; i<=10000000000000; i++)
            {
                    if(i == 100000000)
                    {
                            i = 0;
                            printf("program is running!
    ");
                    }
            }
    }
    

    生成可执行文件:gcc -o test test.c -std=c99

    启动1个实例,将进程都绑定到Cpu0:
    taskset -c 0 ./test

    启动第一个实例,发现跑满第一个cpu0

    #mpstat -P ALL 1  2
    Linux 3.10.0-327.ali2000.alios7.x86_64 (jiangyi01.sqa.zmf) 	10/18/2016 	_x86_64_	(24 CPU)
    
    11:11:24 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
    11:11:25 AM  all    5.91    0.00    3.08    0.00    0.00    0.00    0.00    0.00    0.00   91.00
    11:11:25 AM    0  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
    11:11:25 AM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:11:25 AM    2    1.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.00
    11:11:25 AM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:11:25 AM    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:11:25 AM    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:11:25 AM    6    0.99    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.01
    11:11:25 AM    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:11:25 AM    8    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:11:25 AM    9    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:11:25 AM   10    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:11:25 AM   11    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:11:25 AM   12    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:11:25 AM   13    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:11:25 AM   14    0.00    0.00    0.99    0.00    0.00    0.00    0.00    0.00    0.00   99.01
    11:11:25 AM   15   36.63    0.00   63.37    0.00    0.00    0.00    0.00    0.00    0.00    0.00
    11:11:25 AM   16    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:11:25 AM   17    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:11:25 AM   18    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:11:25 AM   19    1.98    0.00    2.97    0.00    0.00    0.00    0.00    0.00    0.00   95.05
    11:11:25 AM   20    1.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.00
    11:11:25 AM   21    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:11:25 AM   22    1.00    0.00    2.00    0.00    0.00    0.00    0.00    0.00    0.00   97.00
    11:11:25 AM   23    1.00    0.00    3.00    0.00    0.00    0.00    0.00    0.00    0.00   96.00
    
    
    top - 11:12:17 up 60 days, 14:47,  2 users,  load average: 1.93, 1.48, 1.47
    Tasks: 564 total,   3 running, 561 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  5.8 us,  3.1 sy,  0.0 ni, 91.1 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem : 98795000 total,  3829944 free,  1281404 used, 93683648 buff/cache
    KiB Swap:  2097148 total,  2093876 free,     3272 used. 96585224 avail Mem
    
       PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
     30027 root      20   0    4172    364    280 R  99.7  0.0   1:40.67 test
     14533 root      20   0  990000  21192   6340 S   0.7  0.0 430:19.81 staragent-core
     33662 root      20   0  146564   2540   1444 R   0.7  0.0   0:00.05 top
       152 root      20   0       0      0      0 S   0.3  0.0   1:32.77 rcuos/14
      4913 root      20   0  120944   7776   1800 S   0.3  0.0  17:57.85 bash
    

    启动第二个实例,发现两个程序各占50%跑满第一个cpu0

    top - 11:14:12 up 60 days, 14:48,  3 users,  load average: 2.72, 1.85, 1.60
    Tasks: 572 total,   4 running, 568 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  5.8 us,  3.1 sy,  0.0 ni, 91.0 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem : 98795000 total,  3822612 free,  1288476 used, 93683912 buff/cache
    KiB Swap:  2097148 total,  2093876 free,     3272 used. 96578080 avail Mem
    
       PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
     36925 root      20   0    4172    364    280 R  50.3  0.0   0:22.60 test
     30027 root      20   0    4172    364    280 R  49.7  0.0   3:12.82 test
    
    #mpstat -P ALL 1 12
    Linux 3.10.0-327.ali2000.alios7.x86_64 (jiangyi01.sqa.zmf) 	10/18/2016 	_x86_64_	(24 CPU)
    
    11:14:38 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
    11:14:39 AM  all    5.71    0.00    3.12    0.08    0.00    0.00    0.00    0.00    0.00   91.09
    11:14:39 AM    0  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
    11:14:39 AM    1    0.00    0.00    0.00    2.02    0.00    0.00    0.00    0.00    0.00   97.98
    11:14:39 AM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:14:39 AM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:14:39 AM    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:14:39 AM    5    0.00    0.00    0.99    0.00    0.00    0.00    0.00    0.00    0.00   99.01
    11:14:39 AM    6   33.00    0.00   67.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
    11:14:39 AM    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:14:39 AM    8    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:14:39 AM    9    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:14:39 AM   10    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:14:39 AM   11    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:14:39 AM   12    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:14:39 AM   13    1.01    0.00    2.02    0.00    0.00    0.00    0.00    0.00    0.00   96.97
    11:14:39 AM   14    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:14:39 AM   15    0.99    0.00    2.97    0.00    0.00    0.00    0.00    0.00    0.00   96.04
    11:14:39 AM   16    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:14:39 AM   17    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:14:39 AM   18    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:14:39 AM   19    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:14:39 AM   20    0.00    0.00    0.99    0.00    0.00    0.00    0.00    0.00    0.00   99.01
    11:14:39 AM   21    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:14:39 AM   22    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:14:39 AM   23    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    

    继续测试,将pid为18057的test迁移到CPU1上运行,执行:

    [root@jiangyi01.sqa.zmf /home/ahao.mah]
    #ps au x| grep test
    root      30027 75.1  0.0   4172   364 pts/0    R    11:10   4:14 ./test
    root      36925 49.9  0.0   4172   364 pts/3    R+   11:13   1:23 ./test
    root      43502  0.0  0.0 112652   968 pts/4    S+   11:16   0:00 grep --color=auto test
    

    迁移PID到CPU1

    [root@jiangyi01.sqa.zmf /home/ahao.mah]
    #taskset -pc 1 30027
    pid 30027's current affinity list: 0
    pid 30027's new affinity list: 1
    
    top - 11:16:56 up 60 days, 14:51,  3 users,  load average: 3.12, 2.39, 1.85
    Tasks: 572 total,   4 running, 568 sleeping,   0 stopped,   0 zombie
    %Cpu(s): 10.0 us,  3.1 sy,  0.0 ni, 87.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem : 98795000 total,  3818960 free,  1291464 used, 93684576 buff/cache
    KiB Swap:  2097148 total,  2093876 free,     3272 used. 96574880 avail Mem
    
       PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
     30027 root      20   0    4172    364    280 R 100.0  0.0   4:46.70 test
     36925 root      20   0    4172    364    280 R 100.0  0.0   1:56.45 test
    

    CPU0 CPU1都开始忙碌

    [root@jiangyi01.sqa.zmf /home/ahao.mah]
    #mpstat -P ALL 1 12
    Linux 3.10.0-327.ali2000.alios7.x86_64 (jiangyi01.sqa.zmf) 	10/18/2016 	_x86_64_	(24 CPU)
    
    11:17:09 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
    11:17:10 AM  all   10.00    0.00    3.00    0.00    0.00    0.00    0.00    0.00    0.00   87.01
    11:17:10 AM    0  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
    11:17:10 AM    1  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
    11:17:10 AM    2    1.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.00
    11:17:10 AM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:17:10 AM    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:17:10 AM    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:17:10 AM    6   36.00    0.00   64.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
    11:17:10 AM    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    11:17:10 AM    8    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    

    管理处理器的亲和性(affinity)

  • 相关阅读:
    新项目反思
    nei网访问
    react
    css沉默
    沉默
    node准备
    C++学习(八):删除文件
    利用工具格式化日期文本
    PageHelper 记录总条数不正确问题处理
    tk.mybatis 多个or条件拼接
  • 原文地址:https://www.cnblogs.com/muahao/p/5972610.html
Copyright © 2011-2022 走看看