《奔跑吧linux内核》3.3笔记,不足之处还望大家批评指正

根据实际物理属性,CPU域分类如图1所示。

图1 CPU域分类

问题一:一个4核处理器中的每个物理CPU拥有独立L1 cache且不支持超线程技术,分成两个簇cluster0和cluster1,每个簇包含两个物理CPU核,簇中的CPU核共享L2cache。请画出该处理器在Linux内核里调度域和调度组的拓扑关系图。

  4核处理器关系图如图2所示,在不支持超线程技术的情况下,每个CPU核心只有一个执行线程,所以4核处理器没有SMT属性。cluster由两个CPU物理核组成,这两个CPU是MC层级且是兄弟关系。整个处理器可以看作DIE级别,因此该处理器只有两个层级,即MC和DIE。根据上述原则,画图图3所示上述4核处理器的调度域和调度组的拓扑关系图。

图2 4核处理器示意图

图3 4核处理器调度域和调度组的拓扑关系图

问题二:假设CPU0和CPU1同属于一个调度域中且它们都不是idle CPU,那么CPU1可以做负载均衡吗?

  CPU1不可以做负载均衡,默认约定优先由调度域中第一个CPU做负载均衡。此时,只有CPU0能做负载均衡,或者当CPU0不是空闲CPU,CPU1处于idle状态,CPU1才可以做负载均衡。

问题三:如何查找出一个调度域里最繁忙的调度组?

  在find_busiest_group()函数中,简单归纳步骤如下:

  1)首先遍历该调度域中每个调度组,计算各个调度组中的平均负载等相关信息;

  2)根据平均负载,找出最繁忙的调度组;

  3)获取本地调度组的平均负载(avg_load)和最繁忙调度组的平均负载,以及该调度域的平均负载;

  4)本地调度组的平均负载大于最繁忙组的平均负载,或者本地调度组的平均负载大于调度域的平均负载,说明不适合做负载均衡,退出此次负载均衡处理;

  5)根据最繁忙组的平均负载、调度域的平均负载和本地调度组的平均负载来计算该调度域的需要迁移的负载不均衡值。

问题四:如果一个调度域负载不平衡,请问如何计算需要迁移多少负载量呢?

  计算方式如图4所示。当最繁忙的调度组合本地调度组都出现group_overloaded的情况下才会计算load_above_capacity,busiest.gcf指最繁忙调度组里的group_capacity_factor。公式查看最繁忙调度组的平均负载(组里每个CPU的平均负载,不是组的总负载)和本地调度组的平均负载,以及整个调度域的平均负载的差值来计算该调度域的负载不均衡值(env->imbalance)。最后如果计算出来的不均衡值比最繁忙域里的每个进程平均负载小,那么调用fix_small_imbalance()函数,该函数计算最小的不均衡值。(SCHED_CAPACITY_SCALE为1024)

图4 需要迁移的负载量的计算方式

问题五:使用内核提供的唤醒进程API,比如wake_up_process()来唤醒一个进程,那么进程唤醒后应该在哪个CPU上运行呢?是调用wake_up_process()的那个CPU,还是该进程之前运行的那个CPU,或者其他CPU呢?

  唤醒CPU记作wakeup CPU,上次运行的CPU称为prev CPU。

  如果设置了SD_BALANCE_WAKE,在select_idle_sibling()函数中,优先选择idle CPU。如果没有idle CPU,就只能选择wakeup CPU和prev CPU。当找到一个具有亲和性的调度域且wakeup CPU和prev CPU不是一个CPU,wake_affine()函数会重新计算wakeup CPU和prev CPU的负载情况,如果wakeup CPU的负载加上被唤醒进程的负载比prev CPU小,那么wakeup CPU可以唤醒进程,否则选择prev CPU。

  对于没有设置SD_BALANCE_WAKE的情况,变量sd指系统调度域中和sd_flag有相同标志位的调度域,然后开始向下遍历查找最悠闲的调度组和最悠闲的CPU唤醒进程。

Linux内核——进程管理之SMP负载均衡(基于版本4.x)的更多相关文章

  1. Linux内核——进程管理与调度

    进程的管理与调度 进程管理 进程描写叙述符及任务结构 进程存放在叫做任务队列(tasklist)的双向循环链表中.链表中的每一项包括一个详细进程的全部信息,类型为task_struct,称为进程描写叙 ...

  2. Linux内核——进程管理之CFS调度器(基于版本4.x)

    <奔跑吧linux内核>3.2笔记,不足之处还望大家批评指正 建议阅读博文https://www.cnblogs.com/openix/p/3262217.html理解linux cfs调 ...

  3. Linux内核 ——进程管理之进程诞生(基于版本4.x)

    <奔跑吧linux内核>3.1笔记,不足之处还望大家批评指正 进程是Linux内核最基本的抽象之一,它是处于执行期的程序.它不仅局限于一段可执行代码(代码段),还包括进程需要的其他资源.在 ...

  4. linux内核 进程管理

    进程和线程 进程不单单包含可执行代码(代码段),好包含打开的文件,挂起的信号,处理器状态,虚拟内存地址等. 线程:从内核的角度来说,它并没有线程这个概念.Linux把所有线程都当做进程来实现.内核并没 ...

  5. linux内核——进程管理

    在讲进程之前先说一下进程的堆栈的吧: 1.进程的堆栈 内核在创建进程的时候,在创建task_struct的同一时候,会为进程创建对应的堆栈.每一个进程会有两个栈,一个用户栈.存在于用户空间,一个内核栈 ...

  6. Linux内核电源管理综述

    资料:http://blog.csdn.net/bingqingsuimeng/article/category/1228414http://os.chinaunix.net/a2006/0519/1 ...

  7. Linux操作系统的进程管理

    Linux操作系统的进程管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程相关概念 1>.进程概述 内核的功用: 进程管理.文件系统.网络功能.内存管理.驱动程序. ...

  8. linux 系统管理--进程管理

    目录 linux 系统管理--进程管理 一.进程基本概述 二.监控进程状态 三.进程的优先级[进阶] 四.企业案例,Linux假死是怎么回事 五.后台进程管理 六.系统平均负载[进阶] linux 系 ...

  9. Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx)

    Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx) 一丶集群和Nginx反向代理 ...

随机推荐

  1. bzoj 1477: 青蛙的约会【exgcd】

    列出式子是\( mx+s1\equiv nx+s2(mod L) (m-n)x+Ly=s2-s1 \),注意如果n-m<0的话,就把ac都乘-1变成正数,然后exgcd求解,最后注意x为负的话要 ...

  2. Apereo CAS Server服务端搭建教程

    不说废话了,直接看搭建过程吧. 首先到下载源码,https://github.com/apereo/cas-overlay-template/tree/4.2 附上地址,本次版本为4.2,下载源码后如 ...

  3. PJzhang:漏洞渗透测试框架“天使之剑(AngelSword)”

    猫宁!!! 参考链接: www.phpinfo.cc/?post=42 https://www.freebuf.com/sectool/149883.html 同事介绍了一款渗透测试框架AngelSw ...

  4. 安装kibana

    下载kibana5.1.1或者5.1.2版本的deb包,然后用dpkg命令安装 安装后启动位置在 /usr/share/kibana/bin中,在该目录下运行 ./kibana 即可启动 启动前应该先 ...

  5. ArrayList和LinkedList的共同点和区别

    ArrayList和LinkedList的相同点和不同点 共同点:都是单列集合中List接口的实现类.存取有序,有索引,可重复 不同点: 1.底层实现不同: ArrayList底层实现是数组,Link ...

  6. 跟我一起玩Win32开发(12):使用控件——单选按钮

    今天,咱们还是接着玩“控件斗地主”,这是我原创的超级游戏,有益身心健康,玩一朝,十年少. 哦,对,脑细胞极速运动了一下,想起了一个问题,这个破问题虽然网上有很多种解决方案,但是,并没有让所有人都解决问 ...

  7. Queue Sequence HDU - 4441

    码力不行啊... 错误记录: 171行后面对find2的使用错误,原来写的是p=find2(rt,p1),然后再加上一句能过样例但很假的特判 事实上,现在是要寻找最大的j,使得d2[1..j-1]=p ...

  8. 在idea启动tomcat出现The JAVA_HOME environment variable is not defined correctly的解决

    情况:某套代码是用jdk 1.6编译,然后电脑的JAVA_HOME系统变量配的是jdk1.7的,在tomcat启动时报错 The JAVA_HOME environment variable is n ...

  9. Deprecated: Assigning the return value of new by reference is deprecated in报错

    出现了Deprecated: Assigning the return value of new by reference is deprecated in wwwroot\common.inc.ph ...

  10. PMP项目管理学习笔记(10)——范围管理之收集需求

    一个星期没看书,没记录笔记,没能坚持下来,感觉好罪过.现在我要重新上路! 收集需求 收集需求就是与项目的所有干系人坐在一起,得出他们的需求是什么,这就是收集需求过程中要做的事情.你的项目要想成功,你就 ...