CPU负载均衡之EAS
前言
记录一个问题点,三个action;
本文主要记录linux 负载均衡策略的发展:
- EAS 概念说明
- 为什么需要,或者说之前的框架遇到了什么问题,所以才需要新的内容?
- 框架变化
即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.
- linux电源管理的增强处理,根据linux调度器来控制CPU的power;
- 会根据task load和CPU energy model来选择合适的CPU(core以及频率),均衡性能和功耗;
1.1 版本支持:
- linux 5.0以后添加了对EAS的支持,5.4完整功能支持,Contains full product EAS based on linux-5.4
- 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.
- Android中对应kernel版本3.18、4.4、4.9都是支持EAS的
2. 为什么需要
- linux的调度策略:CFS 、SMP主要是为服务器设计,最大限度的将TASK均分给到各个CPU,以提高吞吐量,也就是说主要考虑的性能,而没有考虑功耗;
- 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/
- 每个工作域独立控制电压和频率;
- 则可以根据负载、task内容等分别控制各个域;
2.1.3 EAS:linux 针对优化,在所有核之间分配;
相对于HMP,添加功耗感知模块,可以动态调节负载情况,达到通过更少的消耗满足更顺滑的效果;
2.2 设计思路
将当前系统中调度、负载、调节等功能统合起来作为系统性能、功耗平衡的使用
- 根据当前TASK的类别和每个CPU的负载情况来分配到不同的CPU上;
- 根据负载情况配置CPU core和freq的DVFS、cpu hotplug机制,通过CPUFreq来管理;
- CFS
- CPUIdle:如下图示中说明cluster 0 为on,其中cpu0 有在做事情,CPU1 为ilde状态,则新创建的TASK会分配到CPU1上,cluster 1为 off
2.2.1 task分类
Task 分为四个cgroup(将task分类,根据类别不同使用不同的core和频率):
- top-app:最高优先级
- foreground:
- system-background:与4具有相同优先级,可以访问更多的core
- 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的机制,负载跟踪策略更加细化
- PELT(per-entry load tracing):
- 统计CPU的负载,将负载的计算从RQ细化到了entity;
- 通过对过去负载的计算来决定后续的分配情况;
- 计算为1ms作为一个时间段,根据其运行的物理时间以及过去的load值来计算当前值;
- 则主要用来表达趋势
- WALT(window-assisted load tracing):更具有突发性,峰值很高
- 参考网站:https://lwn.net/Articles/704903/
2.2.2.1 策略中存在的缺陷
- 采样周期长,导致反应慢
- 平均负载过低导致整体负载忽高忽低,不平滑
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相关推荐
- 一文读懂 | CPU负载均衡实现
在<一文读懂 | 进程怎么绑定 CPU>这篇文章中介绍过,在 Linux 内核中会为每个 CPU 创建一个可运行进程队列,由于每个 CPU 都拥有一个可运行进程队列,那么就有可能会出现每个 ...
- 查看linux cpu负载均衡,关于linux内核cpu进程的负载均衡
2.6内核中进程调度模块的负载均衡行为分为"拉"和"推",推这里不考虑,关于拉均衡有一篇文章特别好,具体出处就不记得了,我当时用的百度快照,那篇文章我认为最精彩 ...
- linux内核死锁检测机制 | oenhan,Linux内核CPU负载均衡机制 | OenHan
还是神奇的进程调度问题引发的,参看Linux进程组调度机制分析,组调度机制是看清楚了,发现在重启过程中,很多内核调用栈阻塞在了double_rq_lock函数上,而double_rq_lock则是lo ...
- linux进程网络均衡,linux多CPU进程负载均衡解析
在linux中,支持对称smp的处理器模型,在多处理器的情况下,每个处理器都有自己的一个运行队列,这样就存在着分配不均的情况,有的cpu运行队列很多进程,导致一直很忙,有的cpu运行队列可能很少的进程 ...
- 高并发应用场景下的负载均衡与故障转移实践,AgileEAS.NET SOA 负载均衡介绍与实践...
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
- Linux schedule 4、负载均衡
4.负载均衡 4.1.SMP负载均衡 4.1.1.Scheduling Domains 4.1.1.1.Scheduling Domains概念 借用Linux Scheduling Domains的 ...
- linux在多核处理器上的负载均衡原理
原文出处:http://donghao.org/uii/ [原理] 现在互联网公司使用的都是多CPU(多核)的服务器了,Linux操作系统会自动把任务分配到不同的处理器上,并尽可能的保持负载均衡.那L ...
- 【Linux进程、线程、任务调度】四多核下负载均衡 中断负载均衡,RPS软中断负载均衡 cgroups与CPU资源分群分配 Linux为什么不是硬实时 preempt-rt对Linux实时性的改造
学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 上一篇文章(点击链接:点击链接阅读上一篇文章)讲了: CPU/IO消 ...
- 云计算之路-阿里云上:4000IOPS的RDS+16核CPU的负载均衡
继续向大家汇报,上周在阿里云的帮助下我们重点解决的是以下两个问题: 1. 在专门跑博客站点的负载均衡中,如果单台云服务器处理的并发请求高(比如超过200 Get Requests/s),CPU有时会出 ...
- 多事之秋-最近在阿里云上遇到的问题:负载均衡失灵、服务器 CPU 100%、被 DDoS 攻击...
昨天 22:00~22:30 左右与 23:30~00:30 左右,有1台服役多年的阿里云负载均衡突然失灵,造成通过这台负载均衡访问博客站点的用户遭遇 502, 503, 504 ,由此给您带来麻烦, ...
最新文章
- 多年后的同学聚会,程序员混得最差?
- 网购时碰到这种卖家操作,一定要记得,否则损失很大
- 牛客练习赛85 数学家的迷题 (带修莫队/线段树)
- unix环境高级编程-进程间通信
- 如何看Cortex-M系列处理器差异与共性?技术老司机Joseph带你飞
- pcb设计实战与应用智能手机_机构强烈推荐+突破临界点+全球第一大PCB厂商=鹏鼎控股...
- 后端:C#操作Mongodb用法笔记
- 【VB.NET】测验题目Quiz3
- C++ Socket通信类的封装(还有点小bug)
- 投篮机投篮有技巧吗_卡梅伦·约翰逊:投篮高效,跑位积极,会是太阳队外线新答案吗?...
- 雷林鹏分享:PHP 实例 - AJAX 与 XML
- ms17-010 php版本,HOWTO: 解决 MS17-010 安全更新安装失败的故障问题
- python中的计数函数_Python Numpy统计函数
- Java代码练习1 智能开关灯
- 半丸子头java教程视频教程_半丸子头怎么扎?半丸子头扎发视频教程
- CentOS8安装后切换桌面
- Markdown语法文档,Markdown教程,Markdown语法大全,
- 【第24篇】YOLOR:多任务的统一网络
- Android AssetManager 1
- 一个基于 Spring Boot 的开源社区