• Linux CPU affinity


    在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忙起来即可):

    #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

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

    通过top, 输入“1”查看系统cpu状况:



    如图所示:
    Cpu1空闲,Cpu0使用100%

    继续测试,将pid为18057的test迁移到CPU1上运行,执行:
    $ taskset -pc  1 18057
    pid 18057's current affinity list: 0
    pid 18057's new affinity list: 1

    观察CPU状况:

    如图所示:
    Cpu0及Cpu1都进入忙碌状态了!


    继续测试!将pid为18210的test也迁移到Cpu1上运行,执行:

    如图所示:
    Cpu0闲着,Cpu1忙碌起来了!

    Reference:

    Processor affinity
    管理处理器的亲和性
    榨干服务器:让进程运行在指定的CPU

  • 相关阅读:
    深入理解Guava Cache的refresh和expire刷新机制
    单机、分布式、集群的区别与联系
    理解Word2Vec
    Struts2 XML配置详解
    目标检测中的数据增强方法(附详细代码讲解)
    做笔记就用印象笔记,支持录音做笔记( 附剪藏 插件下载,一键将网页内容保存笔记中进行编辑)
    教你用OpenCV 和 Python给证件照换底色(蓝底 <->红底->白底)
    一招教你如何用Word直接打开PDF进行编辑,无需下载转换软件
    小白也能弄得懂的目标检测YOLO系列之YOLOv1网络训练
    小白也能弄懂的目标检测YOLO系列之YOLOV1
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3199096.html
Copyright © 2020-2023  润新知