CN1324477C - 一种检测实时操作系统cpu占用率的方法 - Google Patents

一种检测实时操作系统cpu占用率的方法 Download PDF

Info

Publication number
CN1324477C
CN1324477C CNB2004100264097A CN200410026409A CN1324477C CN 1324477 C CN1324477 C CN 1324477C CN B2004100264097 A CNB2004100264097 A CN B2004100264097A CN 200410026409 A CN200410026409 A CN 200410026409A CN 1324477 C CN1324477 C CN 1324477C
Authority
CN
China
Prior art keywords
time
cpu usage
cpu
variable
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CNB2004100264097A
Other languages
English (en)
Other versions
CN1664789A (zh
Inventor
邱静
陈爱民
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ZTE Corp
Original Assignee
ZTE Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ZTE Corp filed Critical ZTE Corp
Priority to CNB2004100264097A priority Critical patent/CN1324477C/zh
Publication of CN1664789A publication Critical patent/CN1664789A/zh
Application granted granted Critical
Publication of CN1324477C publication Critical patent/CN1324477C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明的一种检测实时操作系统CPU占用率的方法,其包括以下步骤:在系统启动时初始化相关的变量;进行CPU处理速度检测,获得基准值;启动空闲任务开始运行无限循环,并记录循环次数;在定时任务时间到时,检查是否到了所述CPU占用率的计算点,没有则执行其他事务;到所述CPU占用率计算点时,根据下述公式进行测算:1000-((总循环执行时间*空闲任务执行循环次数)/(总循环次数*统计时间))*1000计算出所述CPU占用率。本发明方法不需要任何其他复杂的额外的操作,实现的代码非常简短,通用性强,并作为一个独立的单元,可随时加入系统或从系统中剥离,简单易懂、易用、灵活性高。

Description

一种检测实时操作系统CPU占用率的方法
技术领域
本发明涉及一种采用任务调度机制的实时操作系统进行通讯软件开发的领域,尤其涉及一种基于实时操作系统的CPU占用率的检测方法。
背景技术
在嵌入式软件开发过程中,当多个任务运行在一块目标板上时,各个任务需要根据一定的规则占用CPU运行,因此通过对CPU占用率的检测,可以检测出系统在某一时间段内的忙闲情况,从而调整任务自身的属性、减少任务间的相互影响,最终使系统达到较为理想的吞吐量值;而且当系统发生某些故障时,通过对CPU占用率的检测也能达到查错的目的。
目前普遍使用的CPU占用率检测方法是与实时操作系统密切结合的统计任务执行次数法,此方法要对任务进行运行计数,而要对任务进行运行计数就需要实时操作系统内核提供任务切换时的钩子函数,由于实时操作系统的实现的多样性,如果它没有提供这样的切入内核的方法,就无法实现CPU占用率的统计。
现有技术还有一种方法是利用实时操作系统自身提供的CPU占用率检测方法,如:vxworks系统提供的spy功能。但实践中表明使用该功能会在系统中额外增加一个优先级非常高的任务,同时其在显示指定时间段内系统执行情况的信息量过多,而且比较复杂难懂,其中包含了中断和内核切换的时间数统计等数值。并且当统计的时间点正处于内核切换过程中时,所检测到的CPU占用率值与其它情况下的值相差很大,而应用者一般往往只需要知道应用本身的CPU占用率情况。因此现有技术存在上述缺陷,有待于进一步改进。
发明内容
本发明的目的在于提供一种检测实时操作系统CPU占用率的方法,针对目前广泛应用于嵌入式开发的各种实时操作系统环境,提出一种基于该环境的CPU占用率检测方法,该方法不影响实时操作系统自身的运行,其通过计算出具体CPU的处理速度就可以实现检测CPU的占用率。
本发明的技术方案如下:
一种检测实时操作系统CPU占用率的方法,其包括以下步骤:
a)在系统启动时初始化相关的变量;
b)进行CPU处理速度检测,获得基准值;
c)启动空闲任务开始运行无限循环,并记录循环次数;
d)在定时任务时间到时,检查是否到了所述CPU占用率的计算点,没有则执行其他事务;
e)到所述CPU占用率计算点时,根据下述公式:
CPU占用率=1000-((总循环执行时间*空闲任务执行循环次数)/(总循环次数*统计时间))*1000,其中,所述总循环是系统初始化的最初位置所进行的CPU测速循环,所述总循环次数是总循环所执行的循环次数,所述统计时间是定时任务定时精度的倍数,由系统预先设置,计算出所述CPU占用率。
所述的方法,其中,所述方法还包括所述系统在执行循环时增加保护机制,进行关中断;在循环次数到的判断前开中断,取消保护,以使系统时钟中断得以处理。
所述的方法,其中,所述CPU占用率值可以通过与历史值的比较,获得系统运行至今的CPU占用率峰值。
所述的方法,其中,所述系统还设置有一输出CPU占用率情况的时间,在该时间到时将所述CPU占用率信息值输出到对应显示设备上。
所述的方法,其中,所述系统启动时初始化相关的变量包括总循环时间变量、空闲任务循环计数变量、统计时间变量、当前CPU占用率值变量和CPU占用率峰值变量。
本发明所提供的一种检测实时操作系统CPU占用率的方法,由于使用者只需要在第一次时根据需要调整好总循环次数的值,并在系统的定时任务中添加计算处理就可以了,不需要任何其他复杂的额外的操作;而且本发明方法实现的代码非常简短,通用性强,适用于各种采用任务调度的实时操作系统;本发明方法作为一个独立的单元,可随时加入系统或从系统中剥离,其计算过程对整个系统性能的影响较小。本发明方法具有简单、灵活性高的优点。
附图说明
图1a为本发明方法的系统初始化时的检测原理示意图;
图1b为本发明方法系统运行中的检测原理图;
图2为本发明方法的主流程示意图;
图3为本发明方法的CPU处理速度计算流程图;
图4为本发明方法的空闲任务执行流程示意图;
图5为本发明方法的CPU占用率计算流程示意图。
具体实施方式
下面结合附图,通过具体实施例对本发明方法加以详细描述:
首先说明使用本发明方法检测CPU占用率的原理。
在实时操作系统中,单位时间内的CPU处理能力是一定的,根据这点就可以在系统初始化的最初位置对CPU处理速度进行测定,并通过一个衡量值来表示之。如图1a所示的,计算当时CPU处理指定总循环次数的有限次数循环所使用的时间,即:执行了指定总循环次数的有限次数循环,得到总循环执行时间T,该时间的衡量单位就是该实时操作系统的计时单位(时钟节拍),也即计时基准值。总循环次数/总循环执行时间就可以表示单位时间内CPU全部忙碌时的处理速度,且表明在总循环执行时间内,CPU最多处理总循环次数次循环。一般情况下,要求得到的总循环执行时间为一秒,并根据这个要求来设置总循环次数的值。对于不同CPU,由于其处理速度的不同,总循环次数的值应相应改变。CPU处理速度越快,该值就越大。
实时操作系统中的空闲任务是在CPU相对较闲时被调度运行的。在该任务中可统计无限循环执行的次数。这样,在定时任务近似于总循环执行时间的CPU占用率统计时间,如图1b中的所示的时间T1,到时,空闲任务此时执行的循环次数的值就表明了该任务在统计时间段内的执行比例,如图1b所示。通过比例式:
(总循环次数*CPU空闲比例)/总循环执行时间=
                     空闲任务执行循环次数/统计时间    (式1)的计算,就可以得到在统计时间内CPU空闲的比例为:
CPU空闲比例=(总循环执行时间*空闲任务执行循环次数)/
                     (总循环次数*统计时间)
如果设统计时间内CPU运行状态为1,则CPU忙碌的比例即为:
CPU忙碌比例=1-CPU空闲比例
最后就可以近似的计算出CPU占用率为:
CPU占用率=1000-((总循环执行时间*空闲任务执行循环次数)/
                     (总循环次数*统计时间))*1000    (式2)
此公式中为了减小误差和基于通讯用CPU的特性(如有些CPU没有浮点运算功能)考虑,将得到的值放大了1000倍,即保留了计算结果值的4位有效位。
通过上面的描述,可以看出为了使计算结果更精确,就必须使总循环执行时间的值尽量与统计时间的值接近。因此根据CPU的不同,需要在系统调试初期对总循环次数进行校正。
本发明方法的主要流程图如图2所示,由于实时操作系统并发处理的特殊性,此流程图显示的是个不连续的处理过程。
首先系统启动运行后,在初始化阶段,对计算CPU占用率要使用的总循环时间变量、空闲任务循环计数变量、统计时间变量、当前CPU占用率值变量和CPU占用率峰值变量等变量进行初始化;然后计算CPU处理速度,并保存总循环时间;启动空闲任务。之后,将控制权交给实时操作系统,由操作系统调度优先级较高的任务运行。当系统空闲时,会运行优先级最低的空闲任务,执行无限循环计数。当系统时钟定时到时,会运行定时任务,如果CPU占用率的统计时间到了,就进行CPU占用率的计算。
以下说明主要步骤的流程图:
1、计算CPU处理速度
此时需要注意的是系统可能由于受到外界的干扰,如中断等,造成计算的结果异常。此时必须在执行循环时增加保护机制,如关中断;在循环次数到的判断前开中断,取消保护,以使系统时钟中断得以处理。这样即可以保证前后两次记录系统时间的正确性,也可以保证整个循环计数的过程不受外界的干扰。
如图3所示,为本发明方法的所述CPU处理过程,首先循环计数清零,开始循环计数,并记录当前系统时间;然后开始执行循环,每循环一次,所述循环计数加1,直至预定循环次数到;结束循环,并记录结束时的系统时间;将先后得到的系统时间相减得到循环所用时间,并换算为以时钟节拍为单位的时间值;最后对该时间值根据系统开销进行修正后得到总循环执行时间。
所述根据系统开销修正得到的总循环执行时间,是指在整个计算CPU处理速度时记录系统时间、开关中断保护等的额外处理所占用的时间。修正的方法是在得到的总循环执行时间上减去一个值,该值需要根据实时操作系统的系统调用处理时间来定,具体可以参考该实时操作系统的手册。
2、启动空闲任务
在空闲任务中执行的无限循环,其循环方式必须与计算CPU处理速度时的循环方式一致,以保证得到的循环次数值的可比性。如图4所示的,空闲任务时执行无限循环直至中断开或高优先级的任务抢占CPU。
3、计算CPU占用率
系统定时任务的定时精度是根据系统应用的需要而定的,在实时软件开发应用中一般设置为10毫秒到100毫秒之间,太快则所述CPU负担过重,太慢则不符合快速响应的要求。这样,CPU占用率的统计时间就一般是该定时精度的倍数,通过在定时任务中计数就可以得到CPU占用率的计算点,也就是统计时间。
如图5所示的,本发明方法对CPU占用率的计算流程为:系统定时任务定时到时,计算时间计数加1;然后对计算时间进行检测是否到时,如未到,则等待下一次系统定时认为定时到;如到,则进行计算所述CPU的占用率,然后可以通过该值与历史值的比较,获得系统运行至今的CPU占用率峰值。
为了满足系统调试等的需要,可以设置一个输出CPU占用率情况的时间,在该时间到时将所述CPU占用率信息值输出到对应显示设备上,如打印机或显示屏。
如果有循环计算的要求的话,可以在得到当前CPU占用率值和峰值后,将空闲任务循环计数变量、统计时间变量清零,这样就可以在下次定时任务时间到时,按图5的流程进行下一轮的计算。
应当理解的是,本发明所述的检测实时操作系统CPU占用率的方法,在上述具体实施例中进行了详细描述,然而对本领域普通技术人员来说,可以根据本发明的技术方案及其构思进行各种可能的改进或替换,而所有这些改进或替换都应属于本发明所附权利要求的保护范围。

Claims (5)

1、一种检测实时操作系统CPU占用率的方法,其包括以下步骤:
a)在系统启动时初始化相关的变量;
b)进行CPU处理速度检测,获得基准值;
c)启动空闲任务开始运行无限循环,并记录循环次数;
d)在定时任务时间到时,检查是否到了所述CPU占用率的计算点,
没有则执行其他事务;
e)到所述CPU占用率计算点时,根据下述公式:
CPU占用率=1000-((总循环执行时间*空闲任务执行循环次数)/(总循环次数*统计时间))*1000,计算出所述CPU占用率,
其中,所述总循环是系统初始化的最初位置所进行的CPU测速循环,所述总循环次数是总循环所执行的循环次数,所述统计时间是定时任务定时精度的倍数,由系统预先设置。
2、根据权利要求1所述的方法,其特征在于,所述方法还包括所述系统在执行循环时增加保护机制,进行关中断;在循环次数到的判断前开中断,取消保护,以使系统时钟中断得以处理。
3、根据权利要求2所述的方法,其特征在于,所述CPU占用率值可以通过与历史值的比较,获得系统运行至今的CPU占用率峰值。
4、根据权利要求3所述的方法,其特征在于,所述系统还设置有一输出CPU占用率情况的时间,在该时间到时将所述CPU占用率信息值输出到对应显示设备上。
5、根据权利要求1~4任一权项所述的方法,其特征在于,所述系统启动时初始化相关的变量包括总循环时间变量、空闲任务循环计数变量、统计时间变量、当前CPU占用率值变量和CPU占用率峰值变量。
CNB2004100264097A 2004-03-04 2004-03-04 一种检测实时操作系统cpu占用率的方法 Expired - Fee Related CN1324477C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2004100264097A CN1324477C (zh) 2004-03-04 2004-03-04 一种检测实时操作系统cpu占用率的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2004100264097A CN1324477C (zh) 2004-03-04 2004-03-04 一种检测实时操作系统cpu占用率的方法

Publications (2)

Publication Number Publication Date
CN1664789A CN1664789A (zh) 2005-09-07
CN1324477C true CN1324477C (zh) 2007-07-04

Family

ID=35035893

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2004100264097A Expired - Fee Related CN1324477C (zh) 2004-03-04 2004-03-04 一种检测实时操作系统cpu占用率的方法

Country Status (1)

Country Link
CN (1) CN1324477C (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102200943B (zh) * 2010-03-25 2014-12-03 腾讯科技(深圳)有限公司 一种基于后台自动检测cpu使用率的方法和设备
CN104572414A (zh) * 2014-12-23 2015-04-29 深圳市邦彦信息技术有限公司 一种用于vxWorks的CPU占用率检测方法和系统
CN106708709A (zh) * 2015-07-30 2017-05-24 中兴通讯股份有限公司 Cpu占用率检测方法及装置
CN106897203A (zh) * 2017-03-29 2017-06-27 北京经纬恒润科技有限公司 一种cpu负载率计算方法及装置
CN107368402A (zh) * 2017-07-10 2017-11-21 中国第汽车股份有限公司 计算cpu利用率的方法
CN112559276B (zh) * 2019-09-10 2022-05-13 武汉斗鱼网络科技有限公司 一种cpu使用率监控方法及装置
CN112540886B (zh) * 2020-11-26 2024-07-05 北京和利时系统工程有限公司 Cpu负荷值检测方法和装置
CN112540885B (zh) * 2020-11-26 2024-07-09 北京和利时控制技术有限公司 基于用户空间的cpu负荷值检测方法和装置
CN112764934B (zh) * 2021-01-29 2024-01-30 上海弘积信息科技有限公司 一种负载均衡设备cpu使用率的计算方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4631363A (en) * 1981-06-01 1986-12-23 At&T Bell Laboratories Method and apparatus for incremental load simulation
US4905171A (en) * 1987-11-09 1990-02-27 International Business Machines Corporation Workstation controller performance monitor
JPH0498540A (ja) * 1990-08-17 1992-03-31 Nec Corp プロセッサ負荷監視方式
EP0697779A1 (de) * 1994-07-18 1996-02-21 Siemens Aktiengesellschaft Verfahren zur Steuerung der Lastabwehr eines Echtzeitrechners
CN1406096A (zh) * 2001-07-27 2003-03-26 三星电子株式会社 减少移动通信终端的电流消耗的方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4631363A (en) * 1981-06-01 1986-12-23 At&T Bell Laboratories Method and apparatus for incremental load simulation
US4905171A (en) * 1987-11-09 1990-02-27 International Business Machines Corporation Workstation controller performance monitor
JPH0498540A (ja) * 1990-08-17 1992-03-31 Nec Corp プロセッサ負荷監視方式
EP0697779A1 (de) * 1994-07-18 1996-02-21 Siemens Aktiengesellschaft Verfahren zur Steuerung der Lastabwehr eines Echtzeitrechners
CN1406096A (zh) * 2001-07-27 2003-03-26 三星电子株式会社 减少移动通信终端的电流消耗的方法

Also Published As

Publication number Publication date
CN1664789A (zh) 2005-09-07

Similar Documents

Publication Publication Date Title
CN1324477C (zh) 一种检测实时操作系统cpu占用率的方法
CN1098487C (zh) 用于影响数据处理器中的顺序指令处理的方法和装置
US20090287912A1 (en) System and method for branch misprediction using complementary branch predictions
EP2629197A1 (en) Simulation device, method, and program
CN1095115C (zh) 在超标量处理器中检测和执行俘获的装置
CN1265286C (zh) 预测间接分支目标地址的方法、装置和编译器
US8615742B2 (en) Autonomic hotspot profiling using paired performance sampling
CN111177733B (zh) 一种基于数据流分析的软件补丁检测方法及装置
RU2009109242A (ru) Способ и устройство для выполнения инструкций процессора на основе динамически изменяемой задержки
CN1726469A (zh) 通过硬体系结构状态的增强恢复的处理器虚拟机制
US20050216714A1 (en) Method and apparatus for predicting confidence and value
CN1287273C (zh) 用于在同步多线程处理器中改变流水线长度的方法和电路
CN1323412A (zh) 以不同等待时间调度指令
US9715377B1 (en) Behavior based code recompilation triggering scheme
US20180285107A1 (en) Branch prediction using a perceptron-based branch prediction technique
US7203826B2 (en) Method and apparatus for managing a return stack
CN101853191B (zh) 检测操作系统中任务死循环的方法及系统
CN1755614A (zh) 定时器的实现方法
CN1235142C (zh) 嵌入式软件任务死循环监控方法
CN1877545A (zh) 一种嵌入式系统模拟器中的动态软件能耗测试方法
CN1740973A (zh) 一种实时任务管理与调度方法
Gottschlag et al. Mechanism to mitigate avx-induced frequency reduction
US9495138B1 (en) Scheme for verifying the effects of program optimizations
CN1831756A (zh) 微处理器
CN1295614C (zh) 一种测试用软件计时方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20070704

Termination date: 20150304

EXPY Termination of patent right or utility model