
EAS-调度器学习
悟空明镜
做一个快乐和健康的人。
mail:samarxie@126.com
展开
-
[scheduler]九. EAS如何根据能效为进程选择目标CPU
一、概述之前在讲解新创建进程和idle进程被wakeup之后如何被调度器调度的原理,有两个点没有分析的很清楚,就是在这个调度的过程中,如何选择一个cpu来执行调度实体。现在单独拎出来详细分析:如果EAS feature启用的话,执行函数流:select_energy_cpu_brute如果EAS feature没有启用的话,执行传统的函数流:find_idlest_cpu简单的流...原创 2020-01-16 07:08:19 · 5887 阅读 · 1 评论 -
[scheduler]11. 主调度器(__schedule()函数)如何工作的
一 概述我们经常在创建线程执行函数/worker执行函数,定时器执行函数等等情况下,会经常看到schedule函数的调用,这是进程上下文,还有中断上下文的调度,即preempt_schedule_irq.另外我们在进程调度的时候会看到是否需要设置重新调度的标识,这时候1.1 schedule()这个函数是最常使用的调度函数:static inline void sched_submit_w...原创 2020-01-16 07:08:00 · 8571 阅读 · 1 评论 -
[scheduler]六. fork/clone等方式创建的进程如何被调度的
从kernel/fork.c里面,我们能够看到,无论是userspace还是kernel space在创建进程的时候最后的调用路径都是相同的,最后都走到_do_fork函数,我们看看源码:/* For compatibility with architectures that call do_fork directly rather than * using the syscall e...原创 2020-01-16 07:07:47 · 2227 阅读 · 0 评论 -
[scheduler]十. 不考虑能效是如何为task选择合适的cpu?
一 概述之前在讲解新创建进程和idle进程被wake_up_process之后如何被调度器调度的原理,有两个点没有分析的很清楚,就是在这个调度的过程中,如何选择一个cpu来执行调度实体。现在单独拎出来详细分析:如果EAS feature启用的话,执行函数流:select_energy_cpu_brute如果EAS feature没有启用的话,执行传统的函数流:find_idlest_cpu...原创 2020-01-16 07:07:10 · 3051 阅读 · 0 评论 -
Linux Kernel调度器学习路线图
按照本人最近的学习路线图,如下:scheduler若干个基础结构体简介scheduler初始化CFS调度算法基本思想CFS调度算法 bandwidth throttlecpu拓扑和调度域调度组的建立和初始化fork/clone等方式创建的进程如何被调度的被wake_up_process之后的进程是如何被调度的CFS调度算法怎么计算进程(PELT算法)/cpu/系统 利用率的EA...原创 2020-01-16 07:05:53 · 6105 阅读 · 1 评论 -
【cpufreq governor】cpu util 和 cpu margin怎么计算的
在计算cpu的util(函数sugov_get_util)期间需要使用margin来补偿util(在看schedutil governor的时候,不仅仅有cpu 的util margin,还有freq margin),得到最终的util+=margin 那么这个margin怎么计算的呢? sugov_update_shared–>sugov_get_util–>boosted_cp...原创 2019-04-26 18:31:09 · 5380 阅读 · 0 评论 -
WALT Window Assisted Load Tracking的思想和实现原理
1.主要是计算如下几个结构体的元素:struct rq { /*必须尽快明白这几个参数的含义*/ ………………………………………………………….#ifdef CONFIG_SCHED_WALT u64 cumulative_runnable_avg; u64 window_start; u64 curr_runnable_sum; u...原创 2019-04-26 18:31:03 · 6752 阅读 · 5 评论 -
[cpufreq governor] scale_freq_capacity/scale_cpu_capacity怎么计算的
定义的地方#ifdef CONFIG_CPU_FREQ #define arch_scale_freq_capacity cpufreq_scale_freq_capacity extern unsigned long cpufreq_scale_freq_capacity(struct sched_domain *sd, int cpu); extern unsigned l...原创 2019-04-26 18:30:48 · 1984 阅读 · 0 评论 -
[cpufreq governor] schedutil governor解析
1.schedutil governor相关的结构体说明struct sugov_policy { struct cpufreq_policy *policy; /*cpu freq的policy*/ struct sugov_tunables *tunables; /*tunable结构体,根据用户需求改变*/ struct list_head tuna...原创 2019-04-26 18:30:38 · 13508 阅读 · 0 评论 -
[scheduler]调度器如何判断cpu_overutilized?
计算过程如下:static bool cpu_overutilized(int cpu) { return __cpu_overutilized(cpu, 0, NULL); } static bool __cpu_overutilized(int cpu, int delta, struct task_struct *p) { struct rq ...原创 2019-04-26 18:30:14 · 2549 阅读 · 0 评论 -
[scheduler]cfs调度算法如何判断task是否是Misfit task?
什么是Misfit task,满足如下几个条件的task就是Misfit task,是做负载均衡的一个条件当前cpu的capacity不是系统最大的cpu capacity当前task的util(修正后的)不超过当前cpu的capacity的90%调度器什么时候检测Misfit task?当pick next task时候,检测是否有Misfit task当更新task gr...原创 2019-04-26 18:29:59 · 1934 阅读 · 2 评论 -
ARM调度域/调度组之概念理解
CPU拓扑结构存在下面三种:SMT Level 超线程处理器的一个核心MC Level 多核CPU的一个核心DIE Level 一个物理CPU的晶片(注意不是package,package是封装好了的,肉眼看到的CPU处理器)cpu最小级别的就是超线程处理器的一个smt核,次小的一级就是一个多核cpu的核,然后就是一个物理cpu封装,再往后就是cpu阵列,根据这些cpu级别的不同,...原创 2019-04-26 18:29:21 · 5208 阅读 · 1 评论 -
[cpufreq governor]sched governor解析
前有schedutil governor来调节cpu频率,现有schedfreq governor来调节cpu频率,现在来讲解它的来龙去脉。 源代码参考AOSP kernel的这个分支:remotes/origin/android-msm-wahoo-4.4-pie,kernel version:4.4.116。源代码下载地址:https://aosp.tuna.tsinghua.edu.cn/...原创 2018-08-22 19:31:50 · 6475 阅读 · 2 评论