- 博客(14)
- 资源 (33)
- 收藏
- 关注
原创 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 646
原创 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 2147
原创 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 419
原创 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 690
原创 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 2489
原创 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 1907 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 425
原创 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 553
原创 Scheduler学习之四:dl_sched_class(上)
Flow const struct sched_class dl_sched_class = { .next = &rt_sched_class, .enqueue_task = enqueue_task_dl, .dequeue_task = dequeue_task_dl, .yield_task = yield_task_dl, .check_preempt_curr = check_preempt_curr_dl, .pick_next_task = pick
2020-05-26 23:55:42 1033
原创 Scheduler 学习之三:stop_sched_class
Context 在Scheduler 学习之二:主调度器_schedule函数文章中,提到目前kernel主要有5个调度器,class的优先顺序为:stop_sched_class >dl_sched_class >rt_sched_class >fair_sched_class >idle_sched_class。接下来按照优先顺序学习。今天主要学习优先级最高的stop_sched_class。 Summary 1. stop class不能被抢占,不能被切换,不会主...
2020-05-18 00:12:56 1354
原创 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 1499
原创 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 876
VITA65规范
2016-09-27
ds1820的温度测量与控制
2010-05-30
VC连接SQL Server(\VC连接SQL Server)
2009-12-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人