基于VxWorks系统的进程CPU负荷监控方法和系统与流程

文档序号:26360785发布日期:2021-08-20 20:37阅读:775来源:国知局
基于VxWorks系统的进程CPU负荷监控方法和系统与流程

本发明涉及数据监控技术领域,具体地,涉及一种基于vxworks系统的进程cpu负荷监控方法和系统。



背景技术:

在多进程/线程系统中,监控进程/线程的cpu利用率在系统日常运行和故障分析时是非常有帮助的,有助于定位进程/线程异常,使用linux系统下的top工具,可以查看某个进程的cpu利用率,这对系统调试提供了极大的帮助。

但在vxworks系统,虽然有spylib库,可以基于spylib库实现spy功能来查看各进程的cpu负载,但spy需要系统硬件支持第二时钟,很多系统设计时没有考虑导致spy功能无法使用。

专利文献cn112540886a(申请号:cn202011349233.4)公开了一种cpu负荷值检测方法和装置,包括:当用户空间完成初始化过程后,用户空间的时钟中断线程timer_usr每隔预设时间段采集用户空间的空闲线程idle_usr的运行次数瞬时值;根据预设的所述idle_usr的运行次数的基准值、所采集的所述idle_usr的运行次数瞬时值计算cpu负荷值。



技术实现要素:

针对现有技术中的缺陷,本发明的目的是提供一种基于vxworks系统的进程cpu负荷监控方法和系统。

根据本发明提供的基于vxworks系统的进程cpu负荷监控方法,包括:

步骤1:在进程切换时,记录任务的切入时间和换出时间;

步骤2:根据任务的切入时间和换出时间,计算任务的单次运行时间和累计运行时间,其中:单次运行时间=换出时间-切入时间,累计运行时间=∑单次运行时间;

步骤3:计算进程cpu负荷,进程cpu负荷=预设时长内任务的累计运行时间/预设时长。

优选的,创建任务切换回调函数switchhook,调用vxworks系统apitaskswitchhookadd注册回调函数,用以获取每个任务的运行时间;

所述回调函数switchhook为:

voidswitchhook(wind_tcb*poldtcb,wind_tcb*pnewtcb)

其中:poldtcb为换出的原任务控制块,pnewtcb为切入的目标任务控制块,在回调函数中记录每个任务的切入时间和换出时间,获得每个任务每次运行的时长,每个任务在预设时间段内累计的时间值对比时间段的时长,得出每个任务占用的cpu负荷。

优选的,创建优先级最低的系统空闲任务,在系统没有工作时运行空闲任务,使得系统cpu负荷为100%。

优选的,创建周期为1秒的定时器并连接回调函数,根据回调函数中获得的每个任务的运行时间计算任务在1秒钟内的cpu负荷。

优选的,创建定时器在每个定时周期内根据任务的累积运行时间计算每个任务的cpu负荷。

根据本发明提供的基于vxworks系统的进程cpu负荷监控系统,包括:

模块m1:在进程切换时,记录任务的切入时间和换出时间;

模块m2:根据任务的切入时间和换出时间,计算任务的单次运行时间和累计运行时间,其中:单次运行时间=换出时间-切入时间,累计运行时间=∑单次运行时间;

模块m3:计算进程cpu负荷,进程cpu负荷=预设时长内任务的累计运行时间/预设时长。

优选的,创建任务切换回调函数switchhook,调用vxworks系统apitaskswitchhookadd注册回调函数,用以获取每个任务的运行时间;

所述回调函数switchhook为:

voidswitchhook(wind_tcb*poldtcb,wind_tcb*pnewtcb)

其中:poldtcb为换出的原任务控制块,pnewtcb为切入的目标任务控制块,在回调函数中记录每个任务的切入时间和换出时间,获得每个任务每次运行的时长,每个任务在预设时间段内累计的时间值对比时间段的时长,得出每个任务占用的cpu负荷。

优选的,创建优先级最低的系统空闲任务,在系统没有工作时运行空闲任务,使得系统cpu负荷为100%。

优选的,创建周期为1秒的定时器并连接回调函数,根据回调函数中获得的每个任务的运行时间计算任务在1秒钟内的cpu负荷。

优选的,创建定时器在每个定时周期内根据任务的累积运行时间计算每个任务的cpu负荷。

与现有技术相比,本发明具有如下的有益效果:

(1)和vxworks系统提供的spylib方式进行cpu负荷计算相比,本发明无需硬件时钟,而spylib方式需要系统有第二时钟并挂载时钟中断;

(2)本方法通过纯软件的方法,可以实现vxworks系统下的cpu负荷监控,以及实现每个任务的cpu负荷的监控,提供了在linux环境下的统计cpu负荷的功能。

附图说明

通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:

图1为计算cpu负荷的函数结构框图;

图2为计算cpu占用率的算法运行框图;

图3为cpu负荷计算结果示例图。

具体实施方式

下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。

实施例1:

根据本发明提供的基于vxworks系统的进程cpu负荷监控方法,包括:步骤1:在进程切换时,记录任务的切入时间和换出时间;步骤2:根据任务的切入时间和换出时间,计算任务的单次运行时间和累计运行时间,其中:单次运行时间=换出时间-切入时间,累计运行时间=∑单次运行时间;步骤3:计算进程cpu负荷,进程cpu负荷=预设时长内任务的累计运行时间/预设时长。

创建任务切换回调函数switchhook,调用vxworks系统apitaskswitchhookadd注册回调函数,用以获取每个任务的运行时间;所述回调函数switchhook为:voidswitchhook(wind_tcb*poldtcb,wind_tcb*pnewtcb),其中:poldtcb为换出的原任务控制块,pnewtcb为切入的目标任务控制块,在回调函数中记录每个任务的切入时间和换出时间,获得每个任务每次运行的时长,每个任务在预设时间段内累计的时间值对比时间段的时长,得出每个任务占用的cpu负荷。创建优先级最低的系统空闲任务,在系统没有工作时运行空闲任务,使得系统cpu负荷为100%。创建周期为1秒的定时器并连接回调函数,根据回调函数中获得的每个任务的运行时间计算任务在1秒钟内的cpu负荷。创建定时器在每个定时周期内根据任务的累积运行时间计算每个任务的cpu负荷。

根据本发明提供的基于vxworks系统的进程cpu负荷监控系统,包括:模块m1:在进程切换时,记录任务的切入时间和换出时间;模块m2:根据任务的切入时间和换出时间,计算任务的单次运行时间和累计运行时间,其中:单次运行时间=换出时间-切入时间,累计运行时间=∑单次运行时间;模块m3:计算进程cpu负荷,进程cpu负荷=预设时长内任务的累计运行时间/预设时长。

创建任务切换回调函数switchhook,调用vxworks系统apitaskswitchhookadd注册回调函数,用以获取每个任务的运行时间;所述回调函数switchhook为:voidswitchhook(wind_tcb*poldtcb,wind_tcb*pnewtcb),其中:poldtcb为换出的原任务控制块,pnewtcb为切入的目标任务控制块,在回调函数中记录每个任务的切入时间和换出时间,获得每个任务每次运行的时长,每个任务在预设时间段内累计的时间值对比时间段的时长,得出每个任务占用的cpu负荷。创建优先级最低的系统空闲任务,在系统没有工作时运行空闲任务,使得系统cpu负荷为100%。创建周期为1秒的定时器并连接回调函数,根据回调函数中获得的每个任务的运行时间计算任务在1秒钟内的cpu负荷。创建定时器在每个定时周期内根据任务的累积运行时间计算每个任务的cpu负荷。

实施例2:

实施例2为实施例1的优选例。

vxworks操作系统的task优先级在0-255之间,0为最高,255为最低,为了获得总的系统负荷,一般做法是创建一个空闲task,这个task的优先级比所有的工作task要低,即优先级设为255,空闲task只是用来在系统空闲时消耗cpu,这样根据空闲task在一定时间内占用的时间比例可以计算出系统其他工作task的cpu负荷大小。

vxworks操作系统提供了taskswitchhookadd函数注册了一个回调函数,此回调函数在每次进程切换时被调用。

statustaskswitchhookadd(funptrswitchhook)

此回调函数原型定义为:

voidswitchhook(wind_tcb*poldtcb,wind_tcb*pnewtcb)

poldtcb为换出的原任务控制块,pnewtcb为切入的目标任务控制块,在此回调函数中,记录每个task的切入时间以及换出时间,即可获得每个task每次运行的时长,每个task在一定时间段内累计的时间值对比时间段的时长即可得出每个task占用的cpu负荷,函数结构框图如图1所示。

根据上面计算出的任务累计时间,系统创建一个定时器在每个定时周期内根据任务的每个周期内的累积运行时间计算每个任务的cpu占用率,整个算法的运行框图如图2所示。

根据此方案的vxworks系统下的cpu负荷计算结果示例如图3所示。

上传大文件,使系统处于重负荷,再查看cpu负荷。可以看到相应的ftp任务的cpu负荷,网络传输任务的cpu负荷有了极大的变化,反应了系统负荷的变化。

本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。

以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1