一种在多任务实时操作系统中检测CPU占用率的方法 【技术领域】
本发明属于计算机领域,尤其涉及多任务实时操作系统。
背景技术
VxWorks是windriver公司的一种嵌入式商用操作系统产品,也是目前应用比较广泛的高性能多任务实时操作系统内核,具有先进的网络功能,支持多种不同的处理器上软件的开发研制。在嵌入式软件开发过程中,多个任务运行在一块目标板上,各个任务根据一定的规则占用CPU运行。
VxWorks系统中CPU忙闲情况如图1所示,任务间进行切换时需要VxWorks内核处理,内核处理会占用CPU执行时间。同时由于实时系统的特征,会有外部中断请求打断任务执行的情况发生,这部分时间也应该算在CPU忙的时间中。空闲任务指的是在VxWorks任务优先级范围内,相对其它所有应用任务的优先级较低的一个任务,以估计CPU相对较闲的时间。
根据在实际采用的摩托罗拉PowerPC芯片系列-PowerPC850、PowerPC860和PowerPC8260芯片的目标板上运行实验的结果和参考VxWorks的在线帮助等技术文档中关于CPU使用情况统计方面地描述,由于VxWorks提供的统计任务在指定时间段内执行情况的信息量过多,包含了中断和内核切换的时间数统计,比较复杂难懂,而且不可更改。当采样的时间点正处于内核切换过程中时,得到的CPU占用率值与其它情况下的值相差很大。应用者一般只需要简单明了的知道大概的CPU占用率情况即可,不必进行这么多的统计工作,浪费计算机宝贵的资源。
【发明内容】
本发明所要解决的技术问题是,适应一般应用者的需要,在VxWorks内核驻留的系统中,简化检测CPU占用率方法。
一种在多任务实时操作系统中检测CPU占用率的方法,包括:
首先在系统初启时初始化本方法相关的统计空闲任务出入时间的数组,将统计空闲任务运行时间的函数作为钩子函数添加到VxWorks任务切换系统调用中,并启动空闲任务开始运行。
在系统中维护一个与系统时钟同步变化的全局变量,将操作系统本身定义的计时单位,设置为对CPU占用率检测统计的时间间隔基准。
当CPU相对闲时,操作系统内核切换到空闲任务执行,记录进入空闲任务的当前系统时间。
当CPU开始忙时,系统内核切换到其它应用任务执行,记录退出空闲任务的当前系统时间。
定义CPU占用率检测统计采样时间。
计算CPU占用率的值,统计CPU占用率的峰值,并打印对CPU占用率的检测统计结果。
有益效果
采用本发明所述技术方案,在嵌入式开发的多任务实时操作系统环境中,与多任务实时操作系统内核紧密结合,利用多任务实时操作系统提供的系统调用、任务管理和中断定时来实现对CPU占用率的检测统计,提高了系统的灵活性,克服了现有技术中多任务实时操作系统自身提供的对CPU占用率检测统计方法复杂和不可更改的缺陷,且统计的结果与VxWorks本身提供的检测工具得出的结果基本一致。
并且采用所述方法编写的程序代码非常短,实现的代码不超过200行,通用性强:作为一个独立的单元,可随时加入系统或从系统中剥离,节约了使用多任务实时操作系统提供工具时的较大额外空间开销,通常使用VxWorks提供的方法会使最终生成的版本增加100K左右,其计算过程对整个系统性能的影响较小,不会在内核切换时打印信息从而降低执行效率。
【附图说明】
图1实时系统CPU忙闲情况
图2空闲任务执行时间统计流程
图3CPU占用率计算流程
【具体实施方式】
下面结合附图,以多任务实时操作系统内核VxWorks为例,对实施本发明所述的技术方案进行详细描述。
VxWorks系统的CPU忙闲情况如图1所示,任务间进行切换时需要VxWorks内核处理,内核处理会占用CPU执行时间。同时由于实时系统的特征,会有外部中断请求打断任务执行的情况发生,这部分时间也应该算在CPU忙的时间中。空闲任务指的是在VxWorks任务优先级范围内,相对其它所有应用任务的优先级较低的一个任务,以估计CPU相对较闲的时间。
采用本发明所述方法,在VxWorks系统中检测CPU占用率的操作步骤如下:
1、首先在VxWorks系统初启时初始化本方法相关的统计空闲任务出入时间的数组,将统计空闲任务运行时间的函数作为钩子函数添加到VxWorks任务切换系统调用中,并启动空闲任务开始运行。
2、在VxWorks系统中维护一个与系统时钟同步变化的全局变量,将操作系统VxWorks本身定义的计时单位,设置为对CPU占用率检测统计的时间间隔基准。
3、当CPU相对闲时,即在CPU无其它应用任务执行时,VxWorks系统内核切换到空闲任务执行,记录进入空闲任务的当前系统时间。
在空闲任务中,只执行无限循环。在循环中执行读取当前系统时间的VxWorks系统调用。
当CPU开始忙时,即在开始执行其它应用任务或处理中断等情况下,VxWorks系统内核切换到其它应用任务执行,记录退出空闲任务的当前系统时间。
4、根据实际需要自定义CPU占用率检测统计采样时间。
5、计算CPU占用率的值,统计CPU占用率的峰值,并打印对CPU占用率的检测统计结果。
若采样时间未到,则退出计算CPU占用率:
采样时间到时,根据记录的进入和退出空闲任务的系统时间计算出在该采样时间段内空闲任务执行的时间数。
由此可间接得到CPU忙时的总执行时间数,按比率公式1000-(空闲任务执行时间/总执行时间数)*1000可得出CPU占用率的值,此处以1000表示100.0%,即计算的值精确到小数点后1位。
打印对CPU占用率的检测统计结果。
在应用设置的打印信息时间间隔到时,打印出该时间点的CPU占用率和系统运行至今的累计CPU占用率峰值。打印信息时间间隔一般为采样时间间隔的整数倍。
采用所述的基于VxWorks系统中对CPU占用率的检测统计方法,在VxWorks内核驻留的系统中,可以实现检测系统中CPU在某一时间段内忙闲情况的功能,从而调整任务自身的属性、减少任务间的相互影响,使系统达到理想的吞吐量值。
在具体项目中,试用本发明所述的对CPU占用率的检测统计方法和VxWorks自身提供的检测工具进行比较,在采用相同采样时间时,两者得到的CPU忙闲情况值基本相同,说明使用本发明所述的对CPU占用率检测统计方法能够比较真实的反映出CPU的使用情况。由于采用所述方法编制计算CPU占用率的程序代码量不到200行,对设备也没有提出额外的要求,通常使用VxWorks提供的方法会使最终生成的版本增加100K左右,不会在内核切换时打印信息从而降低执行效率,作为独立的代码易于使用和维护。