《奔跑吧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. servlet重定向到jsp后样式无法正常显示

    原因是在servlet中转发时css和图片的路径变成相对于这个servlet的相对路径而非相对于web项目的路径了. 解决办法:导入css样式和图片时把css写成动态绝对路径, 如用EL表达式表示: ...

  2. 详解基于linux环境MySQL搭建与卸载

    本篇文章将从实际操作的层面,讲解基于linux环境的mysql的搭建和卸载. 1  搭建mysql 1.1  官网下载mysql压缩包 下载压缩包时,可以先把安装包下载到本地,再上传到服务器,也可以在 ...

  3. C++ multiset通过greater、less指定排序方式,实现最大堆、最小堆功能

    STL中的set和multiset基于红黑树实现,默认排序为从小到大. 定义三个multiset实例,进行测试: multiset<int, greater<int>> gre ...

  4. Discovering Gold LightOJ - 1030 || 概率与期望求法区别

    #include<cstdio>//wrong_codes #include<algorithm> using namespace std; ],anss; ],T,TT,n, ...

  5. BFS HDOJ 1242 Rescue

    题目传送门 题意:从r走到a,遇到x多走一步,问最小走到a的步数 分析:因为r有多个,反过来想从a走到某个r的最小步数,简单的BFS.我对这题有特殊的感情,去年刚来集训队时肉鸽推荐了这题,当时什么都不 ...

  6. VMware Workstation虚拟磁盘文件备份或移植

    一.备份快照 1> 1.点击虚拟机上面的快速备份按钮 2.填写快照名字和备注 快照就生成了. 2>恢复 1.点击恢复按钮,此按钮的功能是直接恢复到上一次备份的节点. 2.或者选后面一个按钮 ...

  7. C# 对象复制

    /// <summary> /// 把DataTable对象转成List<T>对象 /// </summary> /// <typeparam name=&q ...

  8. (026)[工具软件]剪切板管理:Ditto

    剪切板管理软件:Ditto官网:http://ditto-cp.sourceforge.net/

  9. SAP成都研究院安德鲁:自己动手开发一个Chrome Extension

    各位好,我叫何金鑫(He Andrew), 团队同事亲切地称呼在下为安德鲁.如果你在附近找到wifi热点名为 「安德鲁森面包房5g」,可能是我就在附近,我们可以去喝杯咖啡,聊聊最近有趣的东西. 鄙人现 ...

  10. Java从入门到放弃18---Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法

    Java从入门到放弃18—Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法01 Map集合Map集合处理键值映射关系的数据为了方便 ...