【发布时间】:2020-06-12 17:38:14
【问题描述】:
我正在运行一个 VxWorks 6.9 OS 嵌入式系统,我需要看看我什么时候饿死了低优先级的任务。理想情况下,我希望按任务计算 CPU 利用率,这样我就知道是什么占用了我所有的 CPU 时间。
我知道这是许多操作系统的内置功能,但到目前为止还无法在 VxWorks 6.9 中找到它。
如果我不能按任务衡量,我至少想看看 CPU 空闲时间的百分比。 为此,我一直在尝试创建一个优先级最低的任务,该任务将运行下面的函数,并尝试间接测量它。
float Foo::IdleTime(Foo* f)
{
bool inIdleTask;
float timeIdle;
float totalTime;
float percentIdle;
while(true)
{
startTime = _time(); //get time before before measurement starts
inIdleTask = true;
timeIdle = 0;
while(inIdleTask) // I have no clue how to detect when the task left and set this to false
{
timeIdle += (amount_of_time_for_inner_loop); //measure idle time
}
returnTime = _time(); //get time after you return to IdleTime task
totalTime = ( returnTime - startTime );
percentIdle = ( timeIdle / totalTime ) * 100; //calculate percentage of idle time
//logic to report percentIdle
}
这个概念的最大问题是我不知道如何检测这个任务何时被留给更高优先级的任务。
【问题讨论】:
标签: c++ performance monitoring vxworks