- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
TIME \@ yyyy-M-d 2007-12-16
第PAGE22页, 共 NUMPAGES \* Arabic 22页
核心线程CPU占用率统计功能
TOC \o 1-3 \h \z \u CPU占用率概述 3
核心线程CPU占用率统计的实现 3
进程和多CPU情况下的考虑 3
CPU占用率概述
在操作系统的设计和实现中,对每个线程或进程的CPU占用率进行统计,是非常重要的一项工作。这样可使最终用户很清晰的看到每个线程或进程的CPU占用情况,对于故障定位、程序优化非常重要。
一般情况下,对CPU占用率的统计,是在内核层面进行的,因为只有内核,才清楚什么时刻调度了什么进程(或线程),每个线程或进程的运行时间,等等。线程或进程本身是无法统计的,因为根本不知道自己什么时候在运行,也不知道究竟实际运行了多长时间。因为线程或进程随时可能被抢占。
即使是采用非抢占方式调度的操作系统中,线程或进程本身也很难统计准确的CPU占用率。虽然线程或进程知道被调度出CPU或重新调度的时刻(一般是在系统调用的前后发生),但仍然无法预料中断的发生,而且中断的发生,对线程或进程来说是透明的。因此,在非抢占方式调度的操作系统中,线程或进程仍然难以统计自己的准确执行时间。但若把中断或异常执行时间也考虑进当前线程或进程,则可采用下列方式,大致计算自己的执行时间:
在线程或进程开始执行的时候,记录下当前时间(精确起见,可记录CPU的内部计数器);
做任何系统调用前,再次记录当前时间(CPU计数器),然后取本次记录的时间值跟前一次记录的差值,该差值就是线程或进程在本次系统调用前所运行的时间(或占用的CPU节拍);
系统调用完后,开始正常的功能操作前,重新记录当前时间。
这样把上述所有记录的时间片断累加起来,就是当前线程或进程所占用的CPU时间了(其中包含了发生在当前线程或进程中的中断处理时间)。这样可粗略估计当前线程或进行的执行时间。需要注意的是,上述统计方式,没有考虑系统调用的执行时间。
Hello China目前采用的是抢占调度方式,因此线程或进程本身无法自行统计执行时间。但Hello China的内核提供了该项功能。其实现方式,跟上面描述的思路类似,就是在线程开始执行的时候(或被重新调度执行的时候),记录一次CPU的当前计数器(记录了CPU自初始化以来到目前的节拍数量),在线程被换出CPU的时候,再记录一次CPU的计数器,然后两者相减,就得到了当前线程最近一次被调度,所占用的CPU时钟数。该数值再除以CPU的时钟频率,就可得到当前核心线程的执行时间。但更多的情况下,用户或开发人员关注的是线程或进程的CPU占用率(即线程或进程的执行时间,占CPU总运行时间的百分比),因此只要把每个线程占用的CPU时钟节拍数记录下来就可以了,通过比值就可计算出每个线程的CPU占用率,无需换算成真正的时间,因为这种换算,可能会涉及浮点运算,而目前版本的Hello China,还没有对CPU的FPU(浮点处理单元)进行初始化,尚不支持浮点运算。
在本章中,我们对Hello China实现的核心线程CPU占用率统计功能进行描述。
核心线程CPU占用率统计的实现
统计周期和统计算法
统计周期指的是对核心线程CPU占用率进行计算的时间间隔。虽然从理论上来说,核心线程的CPU占用率是任何时刻都可以统计的,但实际上在实现的时候,为了提高效率,一般选择每隔一段时间,进行一次统计,这一段时间就是统计周期。
假设统计周期为T,系统中有N个核心线程,在时间间隔(周期)T内,统计的每个核心线程的CPU占用时间分别为(T1,T2,T3,… …,Tn),则第i个核心线程的CPU占用率Ri应该为:
Ri = Ti / T × 100%
假设针对一个核心线程i,连续统计了M个统计周期(统计周期为T),这个M个周期中,该线程运行的时间分别为(Ti1,Ti2,Ti3,… …,Tim),对应的CPU占用率分别为(Ri1,Ri2,Ri3,… …,Rim)。对于该核心线程,第j个统计周期内的CPU占用率Rij应该为:
Rij = Tij / T × 100%
对M个统计周期内,该核心线程的所有CPU占用率进行累加:
Ri1 + Ri2 + Ri3 + … … + Rim
= Ti1/T + Ti2/T + Ti3/T + ... ... + Tim/T
= (Ti1 + Ti2 + Ti3 + ... ... + Tim) / T
对上述结果两边同时除以M,则得到:
(Ri1 + Ri2 + Ri3 + ... .. + Rim) / M
= (Ti1 + Ti2 + Ti3 + ... ... + Tim) / (M*T)
其中,等式的右边,刚好是在间隔为M个统计周期内,该核
您可能关注的文档
最近下载
- 外研社教学课件国际工程承包和管理实务英语第08章.pptx VIP
- 《DIC的诊断标准》课件 .ppt VIP
- VW 01110-2-2018-螺纹连接第二部分:装配和工艺保证(中文).pdf VIP
- 外研社教学课件国际工程承包和管理实务英语第05章.pptx VIP
- 2009-2017年广东省专升本(专插本)《生态学基础》考试真题合集.pdf VIP
- 2025-2026学年广东省光大联考高三上学期综合测试语文试题及答案.pdf VIP
- 国际工程承包和管理实务英语第04章.pptx VIP
- 外研社教学课件国际工程承包和管理实务英语第03章.pptx VIP
- 【房地产进入性调研】沈阳种子城市解读报告.pdf VIP
- 2025年公务员考试(时事热点)经典试题及答案汇总(海南).docx VIP
原创力文档


文档评论(0)