在程序运行时监视VxWorks中的任务CPU利用率

问题描述 投票:0回答:1

我正在运行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
1个回答
0
投票

如果您要在开发过程中进行一次测量,则spyLib是您要寻找的。只需从命令行调用spy,即可以10s的间隔获取每个任务的CPU使用率报告。致电spyHelp了解如何配置间谍。 (如果尚未包含,则可能需要将spyLib包含在内核中。)

如果您想加倍努力,则需要taskHookLib。简而言之,您可以挂接要在每个任务开关中调用的函数。调用使您进入和退出CPU的任务TASK_ID。您可以只监视低pri任务的饥饿状况,也可以采取措施并暂时提高其优先级。

[根据经验,间谍会增加一点性能开销,特别是如果stdout面临缓慢的I / O(例如9600波特串行)的情况,但非常易于使用。如果您不立即在终端上打印结果,则taskHook'ing几乎不会增加开销,但是需要一些编程才能使其运行。

可能感兴趣的另一件事是WindRiver的远程调试器。尚未亲自使用该工具,可以想象它需要正确设置工作台和目标。

© www.soinside.com 2019 - 2024. All rights reserved.