随笔分类 - 进程调度
负载均衡(Load Balance)- active load balance
摘要:前面一篇负载均衡文章中分析了periodic load balance,主要跟踪了其代码框架和流程。其中在load_balance函数中,会进行多次task 迁移尝试,如果多次尝试后仍然失败,那么就会判断是否需要进行更加激进的balance。 而激进的balance其中就包含了active load
阅读全文
CFS buddy简析
摘要:在内存管理中,我们知道buddy伙伴系统;在进程调度中,也有一个CFS buddy的概念,但是CFS buddy与内存管理的buddy是不太一样的。这次我们就一起来简单看一下CFS buddy是什么。 代码基于CAF-kernel-4.19以及kernel-5.4,不免有错误之处,请指正。 一、数据
阅读全文
负载均衡(Load Balance)- periodic load balance
摘要:负载均衡(Load balance),是为了将执行task的工作量较平均地配分到每个cpu上,达到功耗和性能平衡的一种机制。比如很多task都只放在cpu0上执行,既不能保证节省功耗(因为负载中,需要提升cpu频率;整体执行时间长),也不能保证task及时执行,从而导致卡顿,且耗电。而有了负载均衡就
阅读全文
Schedutil调频
摘要:只写总结了,哈哈偷懒,代码以前分析的没记录: 在 各个调用cpufreq_update_util()的路径中,会带有不同的flag,并触发cpu freq调节 cpu util作为计算cpu调节target freq的重要依据,首先会从系统中获取;其原始值对应WALT中:prev_runnable_
阅读全文
如何区分cpu_scale、max_freq_scale、cpu_orig_capacity、cpu_capacity?
摘要:CPU,即中央处理器,它最有用的属性就是算力性能。通过之前的知识学习,了解了linux kernel中对cpu算力形象化的表示:cpu capacity。 1、从cpu拓扑结构、sched_doamin/sched_group的建立过程来看,就包含了对cpu capcity的初始建立。 2、而cpu
阅读全文
CPU拓扑结构和调度域/组
摘要:如今CPU的核数从单核,到双核,再到4核、8核、甚至10核。但是我们知道Android使用的多核架构都是分大小核,或者现在最新的,除了大小核以外,还有一个超大核。 区分大小核,是因为它们之间的性能(算力),功耗是不同的,而且它们又以cluster来区分(小核在一个cluster,大核在另一个clus
阅读全文
CPU负载和系统负载计算原理
摘要:调度中的负载概念,与平时熟知的cpu占用率并不是一回事,两者间有较大差别。本文分析了cpu负载和系统负载,并非CPU使用率。代码基于CAF- SM8250 - kernel 4.19。 负载计算中,其实主要分为3大部分,由小到大依次为: 1、调度实体负载:update_load_avg() PELT
阅读全文
cpu capacity、task_util、cpu_util是如何计算的?
摘要:在进程调度中使用到了一些比较关键的参数,用来作为调度、cpu调频、EAS等关键功能的前提。 并且在相关模块中经常交替出现,比较容易混淆,这里单独将这些参数拎出来,做个记录。 cpu_capacity cpu_capacity是作为cpu算力的量化体现,代表着cpu性能的大小。数字越大,性能越高。 c
阅读全文
QTI EAS学习之find_energy_efficient_cpu
摘要:Energy Awareness Scheduler是由ARM和Linaro开发的新的linux kernel调度器。 原先CFS调度器是基于policy进行调度,并有不同的吞吐量。例如,有一个新的task创建,同时也有一个idle cpu时,CFS始终会把新的task放到这个idle cpu上运行
阅读全文
Linux内核进程调度overview(1)
摘要:一、概述 决定何时、如何选择一个新进程运行的这组规则叫做:调度策略(scheduling policy)。 Linux的调度是基于分时技术(time sharing):多个进程以“时间多路复用”方式运行,因为CPU的时间呗分成“片”(slice),给每个可运行进程分配一片。如果当前运行进程的时间片或
阅读全文
Sched_Boost小结
摘要:之前遇到一个耗电问题,最后发现是/proc/sys/kernel/sched_boost节点设置异常,一直处于boost状态。导致所有场景功耗上升。 现在总结一下sched_boost的相关知识。 Sched_Boost sched_boost主要是通过影响Task placement的方式,来进行
阅读全文
SchedTune
摘要:本文仅是对kernel中的document进行翻译,便于理解。后续再添加代码分析。 1. 为何引入schedtune? schedutil是一个基于利用率驱动的cpu频率governor。它允许调度器为了cpu上运行的task选出最优的工作频率点(DVFS operating point: OPP)
阅读全文
Cpusets学习
摘要:1. cpusets 1.1 什么是cpusets cpusets基本功能是限制某一组进程只运行在某些cpu和内存节点上,举个简单例子:系统中有4个进程,4个内存节点,4个cpu.利用cpuset可以让第1,2个进程只运行在第1,2颗cpu上并且只在第1,2个内存节点上分配内存。cpuset是基于c
阅读全文
WALT(Window Assisted Load Tracking)学习
摘要:QCOM平台使用WALT(Window Assisted Load Tracking)作为CPU load tracking的方法;相对地,ARM使用的是PELT(Per-Entity Load Tracking)。 WALT的核心算法思想是:将一小段时间内的CPU loading情况计算出对应的结
阅读全文
进程调度函数scheduler_tick()的触发原理:周期PERIODIC定时器
摘要:参考文章: https://www.jb51.net/article/133579.htm https://blog.csdn.net/flaoter/article/details/77509553 https://www.cnblogs.com/arnoldlu/p/7078204.html 中
阅读全文
PELT(Per-Entity Load Tracking)
摘要:引言 对于Linux内核而言,做一款好的进程调度器是一项非常具有挑战性的任务,主要原因是在进行CPU资源分配的时候必须满足如下的需求: 1、它必须是公平的 2、快速响应 3、系统的throughput要高 4、功耗要小 其实你仔细分析上面的需求,这些目标其实是相互冲突的,但是用户在提需求的时候就是这
阅读全文