首页 > 其他分享 >【WALT】update_window_start() 代码详解

【WALT】update_window_start() 代码详解

时间:2023-07-01 23:55:06浏览次数:38  
标签:窗口 rq u64 update WALT start window delta

目录

【WALT】update_window_start()代码详解

代码版本:Linux4.9 android-msm-crosshatch-4.9-android12

代码展示

static u64
update_window_start(struct rq *rq, u64 wallclock, int event)
{
	s64 delta;
	int nr_windows;
	u64 old_window_start = rq->window_start;

	delta = wallclock - rq->window_start;
	/* If the MPM global timer is cleared, set delta as 0 to avoid kernel BUG happening */
	if (delta < 0) {
		delta = 0;
		WARN_ONCE(1, "WALT wallclock appears to have gone backwards or reset\n");
	}

	if (delta < sched_ravg_window)
		return old_window_start;

	nr_windows = div64_u64(delta, sched_ravg_window);
	rq->window_start += (u64)nr_windows * (u64)sched_ravg_window;
	rq->cum_window_demand = rq->walt_stats.cumulative_runnable_avg;
		
	return old_window_start;
}

代码逻辑

  1. delta = wallclock - rq->window_start;
    wallclock 是进入 WALT 算法时的时间,rq->window_start 是运行队列当前所在窗口的开始时间。
    通过 wallclock - rq->window_start ,得到从窗口开始到现在所经过的时间。
  2. if (delta < sched_ravg_window) return old_window_start;
    sched_ravg_window 是自定义的 WALT 算法的窗口的大小。
    如果从窗口开始到现在所经过的时间不到一个窗口的大小,说明窗口还未翻滚,还没有得到新的窗口开始时间,就直接返回久的窗口开始时间。
  3. nr_windows = div64_u64(delta, sched_ravg_window);
    如果执行到此处,说明窗口已经翻滚,计算从 rq 当前所在窗口的开始时间到现在一共经过了 nr_windows 个完整窗口。
  4. rq->window_start += (u64)nr_windows * (u64)sched_ravg_window;
    rq 新窗口的开始时间就是旧窗口开始时间加上 nr_windows 个完整窗口的时间。
  5. rq->cum_window_demand = rq->walt_stats.cumulative_runnable_avg;
    更新 rq 的累积的 demand,rq->walt_stats.cumulative_runnable_avg 详细计算将在详解 update_task_demand() 中介绍。
  6. return old_window_start;
    就算更新了 rq 的窗口开始时间,也先返回久的窗口开始时间。

标签:窗口,rq,u64,update,WALT,start,window,delta
From: https://www.cnblogs.com/cyrusandy/p/17520193.html

相关文章

  • qt this application failed to start because it could notfoind orloadthe Qt pla
    qt程序报错:thisapplicationfailedtostartbecauseitcouldnotfoind orloadtheQt platform ===================================C:\Users\lenovo>C:\Users\lenovo>C:\Users\lenovo>cdD:\software\Qt\install\Qt5_12_12\5.12.12\msvc2015_64\b......
  • 启动mysql时报错Failed to start mysqld.service: Unit not found
    问题描述:启动mysql时报错Failedtostartmysqld.service:Unitnotfound,如下所示:数据库:mysql5.7.42系统:rhel7.31、问题重现--mysql安装过程[root@leo-mysql-master~]#yumlocalinstallhttps://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm[root@leo......
  • 51.pyinstaller打包后,打开exe程序提示SyntaxError: Non-UTF-8 code starting with '\
    最后开发了一款小工具,然后确定一切测试没有问题,想通过pyinstaller将其打包成exe,像类似的打包以前也经常打包的,复杂一点的也都是打包成功的,但这里感觉程序很简单,打包居然出现了以下错误。我的python版本是3.8.9,然后pyinstaller版本是5.9.0,不知道会不会是版本不兼容的问题,看网上哪......
  • 使用火焰图分析.NET的 start-up 期间花费的时间
    本文将告诉你从“dotnetrun”到“helloworld”,如何使用PerfView来分析.NET运行时在启动期间所花费的时间。代码示例在这个示例中,我故意只关注.NET运行时在程序启动(start-up)过程中的操作,以确保运行的用户代码最少,因此只有以下的“HelloWorld”:usingSystem;namespace......
  • MySQL批量新增或修改时出现异常: Lock wait timeout exceeded; try restarting transact
    标题:解决MySQL批量新增或修改时出现"nestedexceptionisjava.sql.SQLException:Lockwaittimeoutexceeded;tryrestartingtransaction"异常摘要在使用MySQL数据库进行批量新增或修改操作时,有时候会遇到"nestedexceptionisjava.sql.SQLException:Lockwaittimeoutexcee......
  • oracle startup命令及lsnrctl命令
    启动一个数据库需要三个步骤:1、创建一个Oracle实例(非安装阶段)2、由实例安装数据库(安装阶段)3、打开数据库(打开阶段)在Startup 命令中,可以通过不同的选项来控制数据库的不同启动步骤。  Oracle数据库的完整启动过程分为3个步骤完成的启动实例–>加载数据库–>打开数据库;数......
  • AWS Certificate SAA - Course 1 Getting started with AWS
    AWSCoulduseCasesAWSenablesyoutobuildsophisticated,scalableapplicationsApplicabletoadiversesetofindustriesUsecasesincludeEnterpriseIT,Backup&Storage,BigDataanalyticsWebsitehosting,Mobile&SocialAppsGamingAWS......
  • SpringBoot自定义starter
    1、先来一个简单的案例非常简单的工程结构controllerpackagecom.ly.demo.controller;importcom.ly.demo.service.MyStarterService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.GetMapping;import......
  • TreeSaver 使用教程整理——Step 1: Getting Started
    TreeSaver介绍Treesaver是一个开源的JavaScript框架,用来创建杂志风格的网页布局。 为何要整理这个系列的文章下面的教程整理自:https://github.com/Treesaver/treesaver/wiki/Walkthrough,也许是这个框架目前才刚刚起步,它的文档很成问题,文档中一些链接不能下载,源代码中欠缺一......
  • Hack The Box-Starting Point-Appointment
    答案任务1:WhatdoestheacronymSQLstandfor?StructuredQueryLanguage任务2:WhatisoneofthemostcommontypeofSQLvulnerabilities?Sqlinjection任务3:WhatdoesPIIstandfor?Personallyidentifiableinformation任务4:Whatisthe2021OWASP......