Kernel
sucjhwaxp
这个作者很懒,什么都没留下…
展开
-
Kernel Scheduler学习之八:loading tracking
loading如何 tracking原创 2020-10-09 23:25:08 · 321 阅读 · 0 评论 -
Kernel Scheduler学习之七:关于want affine
参考文章:https://kernel.taobao.org/2017/08/Reconsidering-the-schedulers-wake_wide-heuristic/https://blog.csdn.net/gatieme/article/details/106315848原创 2020-09-22 23:15:36 · 550 阅读 · 0 评论 -
Kernel Scheduler学习之七:CFS调度器之选核流程
Overview 本博客研究cfs调度器选核的目标,搞清楚如下问题: a. 选核的流程是什么 b.选核的规则是什么 内容记录 /* * select_task_rq_fair: Select target runqueue for the waking task in domains * that have the 'sd_flag' flag set. In practice, this is SD_BALANCE_WAKE, * SD_BALANCE_FORK,...原创 2020-09-18 10:34:17 · 1940 阅读 · 0 评论 -
Kernel Scheduler学习之七:CFS调度器之虚拟时间
Overview cfs调度器被称作是完全公平调度器,那么如何体现公平的呢?是否有绝对的公平呢?本博客主要回答如下的问题: vruntime的原理是什么? vruntime如何更新的? Vtime的原理 Linux抽象出来一个调度实体,在这个实体当中保存了了一个叫vruntime的变量,如下所示: struct sched_entity { /* For load-balancing: */ struct load_weight load; unsigned long runna.原创 2020-09-03 23:36:56 · 389 阅读 · 0 评论 -
Kernel Scheduler学习之七:CFS调度器之pick_next_task
Overview 根据Kernel Scheduler学习之七:CFS调度器之task管理知道cfs调度器采用红黑树的方式按照虚拟runtime(vruntime)进行排序。本次博客主要搞清如下的问题: 1.如何获取下一个task 如何获取下一个task cfs调度器选出一个task出来执行的函数为pick_next_task_fair static struct task_struct *pick_next_task_fair(struct rq *rq, struct task_struc原创 2020-08-29 19:47:49 · 600 阅读 · 0 评论 -
Kernel Scheduler学习之六:RT Throttle
Overview RT Throttle被触发的时机 RT Throttle是如何被触发的 RT Throttle在什么情况下解除 源码阅读 RT Throttle触发的时机 阅读源码发现: 在如下的时机会去更新rt task或者runqueue有执行相关的时间: a. dequeue task,因为某些情况下往往是当前task,要进入sleep,才会被dequeue掉,所以,在这个task离开队列之前要对loading进行结算 b. put_prev_task, put prev其.原创 2020-07-08 00:06:01 · 2178 阅读 · 0 评论 -
Kernel Scheduler学习之五:RT 调度器
Overview 什么样的task属于RT task RT task如何管理 如何为RT task选择CPU 如何从一个Runqueue中选择一个task出来执行 RT thottle机制,如何触发,触发之后,会做哪些事情? 什么样的task属于RT task原创 2020-06-12 00:11:21 · 1779 阅读 · 1 评论 -
Scheduler学习之四:deadline之Load balance
Overview 本文主要分析deadline的loadbalance相关,主要包含如下问题: a.load balance的方式 b. load balance的时机 c.load balance的结果 Load balance的方式 方式一:push task /* * See if the non running -deadline tasks on this rq * can be sent to some other CPU where they can preempt *原创 2020-06-07 15:47:19 · 381 阅读 · 0 评论 -
Scheduler学习之四:dl_sched_class之选核策略
Overview 本章内容主要回答如下的问题: 选核的策略是什么? dl_sched_class的loading均衡如何进行? 选核的策略 选核策略主要是在select_task_rq_dl中进行的。如下的函数所示: static intselect_task_rq_dl(struct task_struct *p, int cpu, int sd_flag, int flags){ struct task_struct *curr; struct rq *rq; if (sd_f原创 2020-06-03 00:30:32 · 511 阅读 · 0 评论 -
Scheduler 学习之二:主调度器_schedule函数
Flow static void __sched notrace __schedule(bool preempt){ struct task_struct *prev, *next; unsigned long *switch_count; struct rq_flags rf; struct rq *rq; int cpu; cpu = smp_processor_id(); rq = cpu_rq(cpu); prev = rq->curr;//现在的将变成过往 .原创 2020-05-15 23:55:05 · 1404 阅读 · 0 评论 -
Scheduler学习之零:Kernel cpupri研究
最近开始详细研究scheduler中的RT调度器,其中有看到一个cpupri,作为选核的一部分,有必要先研究一下这个。其位于:kernel/sched/cpupri.h,内容如下所示。/* SPDX-License-Identifier: GPL-2.0 */#define CPUPRI_NR_PRIORITIES (MAX_RT_PRIO + 2)#define CPUPRI_INVALID -1#define CPUPRI_IDLE 0#define CPUPRI_NOR原创 2020-05-15 00:30:46 · 810 阅读 · 0 评论