前言

记录一个问题点,三个action;

本文主要记录linux 负载均衡策略的发展:

  1. EAS 概念说明
  2. 为什么需要,或者说之前的框架遇到了什么问题,所以才需要新的内容?
  3. 框架变化

即linux中对于TASK调度、负载跟踪和调节的处理;

1. EAS

EAS 即 Energy Aware Scheduling:
EAS is an enhancement to Linux power management, placing CPU power control directly under the Linux scheduler. When enabled, EAS uses the task load and a CPU Energy Model to select the most efficient CPU to run on, taking advantage of power and performance of Arm big.LITTLE and Arm DynamIQ-based systems.

  1. linux电源管理的增强处理,根据linux调度器来控制CPU的power;
  2. 会根据task load和CPU energy model来选择合适的CPU(core以及频率),均衡性能和功耗;

1.1 版本支持:

  1. linux 5.0以后添加了对EAS的支持,5.4完整功能支持,Contains full product EAS based on linux-5.4
  2. For Android use, EAS is available as part of AOSP Common Kernel. AOSP Common Kernel contains a small number of additional Android-specific patches on top of the Linux kernel EAS.
    1. Android中对应kernel版本3.18、4.4、4.9都是支持EAS的

2. 为什么需要

  1. linux的调度策略:CFS 、SMP主要是为服务器设计,最大限度的将TASK均分给到各个CPU,以提高吞吐量,也就是说主要考虑的性能,而没有考虑功耗;
  2. arm 支持大小核的异构方案,此前的版本中没有针对于此方案做优化;
    本质上来说,早期版本主要考虑性能指标,而非功耗,随着arm的各种新技术的发展,各种移动设备需要在功耗和性能上达到一个平衡,所以就需要一种新的方案;

2.1 负载调节历代方案演变

演变过程中的几个方案:

接下来具体来看:

2.1.1 SMP:保证各个core task处于均衡状态


此时的task分配主要基于linux 2.6 中的调度策略的CFS,SMP是基于该调度策略平均的balance各个core的负载;

2.1.2 HMP:高通提出来的,用于动态调节big和little core,相对于SMP(CFS)对于big-little core有更好的适应

  • sd: sched_domain
  • sg: sched_group
    简单理解就是将低优先级的任务放在little core上进行,重要任务放在big core上进行,按照规则分配,安全且高效;

从这里来看,该机制是基于可以独立控制大小core的电压值:

图片来自于linaro介绍EAS的资料:https://www.linaro.org/blog/energy-aware-scheduling-eas-progress-update/

  1. 每个工作域独立控制电压和频率;
  2. 则可以根据负载、task内容等分别控制各个域;

2.1.3 EAS:linux 针对优化,在所有核之间分配;


相对于HMP,添加功耗感知模块,可以动态调节负载情况,达到通过更少的消耗满足更顺滑的效果;

2.2 设计思路

将当前系统中调度、负载、调节等功能统合起来作为系统性能、功耗平衡的使用

  1. 根据当前TASK的类别和每个CPU的负载情况来分配到不同的CPU上;
  2. 根据负载情况配置CPU core和freq的DVFS、cpu hotplug机制,通过CPUFreq来管理;
    1. CFS
    2. CPUIdle:如下图示中说明cluster 0 为on,其中cpu0 有在做事情,CPU1 为ilde状态,则新创建的TASK会分配到CPU1上,cluster 1为 off

2.2.1 task分类

Task 分为四个cgroup(将task分类,根据类别不同使用不同的core和频率):

  1. top-app:最高优先级
  2. foreground:
  3. system-background:与4具有相同优先级,可以访问更多的core
  4. background:
    根据应用场景的不同,决定使用的核、频率(本质上与调度策略是一回事,这里添加一个功耗的输入条件);
//在init.rc中会对不同的group设置为不同的cpu
write /dev/cpuset/top-app/cpus 0-3
write /dev/cpuset/foreground/cpus 0-2
write /dev/cpuset/background/cpus 0
write /dev/cpuset/system-background/cpus 0-2

2.2.2 负载跟踪

在linux 3.8之后基于CFS的机制,负载跟踪策略更加细化

  1. PELT(per-entry load tracing):

    1. 统计CPU的负载,将负载的计算从RQ细化到了entity;
    2. 通过对过去负载的计算来决定后续的分配情况;
    3. 计算为1ms作为一个时间段,根据其运行的物理时间以及过去的load值来计算当前值;
    4. 则主要用来表达趋势
  2. WALT(window-assisted load tracing):更具有突发性,峰值很高
    1. 参考网站:https://lwn.net/Articles/704903/
2.2.2.1 策略中存在的缺陷
  1. 采样周期长,导致反应慢
  2. 平均负载过低导致整体负载忽高忽低,不平滑
2.2.2.2 对比

3. 目前对于框架的理解(后续研究code时随时更新)

4. 参考资料:

https://www.linaro.org/blog/energy-aware-scheduling-eas-progress-update/
https://lwn.net/Articles/704903/
https://developer.arm.com/tools-and-software/open-source-software/linux-kernel/energy-aware-scheduling

CPU负载均衡之EAS相关推荐

  1. 一文读懂 | CPU负载均衡实现

    在<一文读懂 | 进程怎么绑定 CPU>这篇文章中介绍过,在 Linux 内核中会为每个 CPU 创建一个可运行进程队列,由于每个 CPU 都拥有一个可运行进程队列,那么就有可能会出现每个 ...

  2. 查看linux cpu负载均衡,关于linux内核cpu进程的负载均衡

    2.6内核中进程调度模块的负载均衡行为分为"拉"和"推",推这里不考虑,关于拉均衡有一篇文章特别好,具体出处就不记得了,我当时用的百度快照,那篇文章我认为最精彩 ...

  3. linux内核死锁检测机制 | oenhan,Linux内核CPU负载均衡机制 | OenHan

    还是神奇的进程调度问题引发的,参看Linux进程组调度机制分析,组调度机制是看清楚了,发现在重启过程中,很多内核调用栈阻塞在了double_rq_lock函数上,而double_rq_lock则是lo ...

  4. linux进程网络均衡,linux多CPU进程负载均衡解析

    在linux中,支持对称smp的处理器模型,在多处理器的情况下,每个处理器都有自己的一个运行队列,这样就存在着分配不均的情况,有的cpu运行队列很多进程,导致一直很忙,有的cpu运行队列可能很少的进程 ...

  5. 高并发应用场景下的负载均衡与故障转移实践,AgileEAS.NET SOA 负载均衡介绍与实践...

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  6. Linux schedule 4、负载均衡

    4.负载均衡 4.1.SMP负载均衡 4.1.1.Scheduling Domains 4.1.1.1.Scheduling Domains概念 借用Linux Scheduling Domains的 ...

  7. linux在多核处理器上的负载均衡原理

    原文出处:http://donghao.org/uii/ [原理] 现在互联网公司使用的都是多CPU(多核)的服务器了,Linux操作系统会自动把任务分配到不同的处理器上,并尽可能的保持负载均衡.那L ...

  8. 【Linux进程、线程、任务调度】四多核下负载均衡 中断负载均衡,RPS软中断负载均衡 cgroups与CPU资源分群分配 Linux为什么不是硬实时 preempt-rt对Linux实时性的改造

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 上一篇文章(点击链接:点击链接阅读上一篇文章)讲了: CPU/IO消 ...

  9. 云计算之路-阿里云上:4000IOPS的RDS+16核CPU的负载均衡

    继续向大家汇报,上周在阿里云的帮助下我们重点解决的是以下两个问题: 1. 在专门跑博客站点的负载均衡中,如果单台云服务器处理的并发请求高(比如超过200 Get Requests/s),CPU有时会出 ...

  10. 多事之秋-最近在阿里云上遇到的问题:负载均衡失灵、服务器 CPU 100%、被 DDoS 攻击...

    昨天 22:00~22:30 左右与 23:30~00:30 左右,有1台服役多年的阿里云负载均衡突然失灵,造成通过这台负载均衡访问博客站点的用户遭遇 502, 503, 504 ,由此给您带来麻烦, ...

最新文章

  1. 多年后的同学聚会,程序员混得最差?
  2. 网购时碰到这种卖家操作,一定要记得,否则损失很大
  3. 牛客练习赛85 数学家的迷题 (带修莫队/线段树)
  4. unix环境高级编程-进程间通信
  5. 如何看Cortex-M系列处理器差异与共性?技术老司机Joseph带你飞
  6. pcb设计实战与应用智能手机_机构强烈推荐+突破临界点+全球第一大PCB厂商=鹏鼎控股...
  7. 后端:C#操作Mongodb用法笔记
  8. 【VB.NET】测验题目Quiz3
  9. C++ Socket通信类的封装(还有点小bug)
  10. 投篮机投篮有技巧吗_卡梅伦·约翰逊:投篮高效,跑位积极,会是太阳队外线新答案吗?...
  11. 雷林鹏分享:PHP 实例 - AJAX 与 XML
  12. ms17-010 php版本,HOWTO: 解决 MS17-010 安全更新安装失败的故障问题
  13. python中的计数函数_Python Numpy统计函数
  14. Java代码练习1 智能开关灯
  15. 半丸子头java教程视频教程_半丸子头怎么扎?半丸子头扎发视频教程
  16. CentOS8安装后切换桌面
  17. Markdown语法文档,Markdown教程,Markdown语法大全,
  18. 【第24篇】YOLOR:多任务的统一网络
  19. Android AssetManager 1
  20. 一个基于 Spring Boot 的开源社区

热门文章

  1. 使用Jmeter对API进行性能测试
  2. 洛谷 P1040 加分二叉树
  3. JavaScript中B继承A的方法
  4. - 动规讲解基础讲解一——01背包(模板)
  5. 通天之潜水(洛谷 1759)
  6. 网页加密编码的几种常见方法
  7. vue base64加密对象_想加密JavaScript怎么办,试试这款加密库!
  8. 利用分类模型学习特征权重
  9. Spark性能优化指南——基础篇【1】
  10. 分享几个Python小技巧函数里的4个小花招 1