Kernel Scheduler学习之六:RT Throttle

  1. Overview
    RT Throttle被触发的时机
    RT Throttle是如何被触发的
    RT Throttle在什么情况下解除
     
  2. 源码阅读
    RT Throttle触发的时机
    阅读源码发现:

    在如下的时机会去更新rt task或者runqueue有执行相关的时间:
    a. dequeue task,因为某些情况下往往是当前task,要进入sleep,才会被dequeue掉,所以,在这个task离开队列之前要对loading进行结算
    b. put_prev_task, put prev其实这个prev大多数指current task,也要重新计算
    c. timer tick到来的时候,主要的task loading更新的地方。
    在update_curr_rt当中:
    /*
     * Update the current task's runtime statistics. Skip current tasks that
     * are not in our scheduling class.
     */
    static void update_curr_rt(struct rq *rq)
    {
    	struct task_struct *curr = rq->curr;
    	struct sched_rt_entity *rt_se = &curr->rt;
    	u64 delta_exec;
    	u64 now;
    
    	if (curr->sched_class != &rt_sched_class)
    		return;
    
    	now = rq_clock_task(rq);
    	delta_exec = now - curr->se.exec_start; //执行的时间
    	if (unlikely((s64)delta_exec <= 0))
    		return;
    
    	schedstat_set(curr->se.statistics.exec_max,
    		      max(curr->se.statistics.exec_max, delta_exec));
    
    	curr->se.sum_exec_runtime += delta_exec; //当前task总的执行时间
    	account_group_exec_runtime(curr, delta_exec);
    
    	curr->se.exec_start = now;  //重新开始计时
    	cgroup_account_cputime(curr, delta_exec);
    
    	if (!rt_bandwidth_enabled()) //如果当前throttle机制被关闭,那么就不用后面的判断。
    		return;
    
    	for_each_sched_rt_entity(rt_se) { //假定没有CONFIG_RT_GROUP_SCHED,这个地方就是单独task自身。为了简化就理解为一个task的状况,不考虑group的状况。
    		struct rt_rq *rt_rq = rt_rq_of_se(rt_se);
    
    		if (sched_rt_runtime(rt_rq) != RUNTIME_INF) {
    			raw_spin_lock(&rt_rq->rt_runtime_lock);
    			rt_rq->rt_time += delta_exec;//将当前task 执行的时间累加到rq当中。注意这个地方的变量名叫rt_time,这是保存在rt_rq当中用来记录rq rt线程总执行时间的变量。还有一个变量叫rt_run time,这个变量记录rt rq允许执行的时间。
    			if (sched_rt_ru
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值