【问题标题】:Monitor task CPU utilization in VxWorks while program is running在程序运行时监控 VxWorks 中的任务 CPU 利用率
【发布时间】: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


    【解决方案1】:

    如果您正在寻找在开发期间完成的一次性测量,那么spyLib 就是您要找的。只需从命令行调用 spy 即可以 10 秒的间隔获取每个任务的 CPU 使用情况报告。致电spyHelp 了解如何配置间谍。 (如果尚未包含,可能需要将 spyLib 包含到内核中。)

    如果您想加倍努力,taskHookLib 就是您所需要的。简单地说,你挂钩一个函数,在每个任务切换中调用。 Call 为您提供进出 CPU 的任务的TASK_IDs。您可以简单地监控低优先级任务的饥饿状态,也可以采取行动并暂时提高其优先级。

    根据经验,spy 会增加一点性能开销,尤其是当 stdout 面临慢速 I/O(例如 9600 波特串行)时,但相当容易使用。如果您不立即在终端上打印结果,taskHook'ing 几乎不会增加任何开销,但需要一些编程才能使其运行。

    另一件可能感兴趣的事情是 WindRiver 的远程调试器。没有亲自使用过,想象一下它需要正确设置工作台和目标。

    【讨论】:

    • spyLib,正是我想要的。当我查看 spyLib.h 时,我发现函数签名是 void spyReportCommon(FUNCPTR printRtn);如何传入可用于解析输出的函数?
    • 我不认为有一个界面供用户获取间谍输出,因为它是一个 CLI 实用程序。据我所知,没有像 Linux 和 Windows 中那样可以发出 CLI 命令并获取输出的函数。获取写入标准输出的消息的一种方法是使用ioLibs ioTaskStdSet 将输出转移到文件中。但这样做会滥用间谍的功能。使用taskHookLib 可能更容易做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多