【问题标题】:CPU usage measurment on arm bare metal systemarm 裸机系统上的 CPU 使用率测量
【发布时间】:2013-07-12 13:16:47
【问题描述】:

我正在开发一个ARM cortex M4 评估板,它是一个bare metal 应用程序,上面没有运行任何操作系统。

现在我想测量CPU 给定进程/算法的使用情况,最好的方法是什么?

我是否应该实施一个操作系统来测量具有此类需求功能的CPU 使用情况?

【问题讨论】:

  • 您需要实时测量 CPU 使用率吗?
  • 为什么要 CPU 使用率?在这样的控制器上,您通常需要实时行为,即某些任务必须在给定的时间范围内以足够快的速度完成。

标签: c++ c embedded arm bare-metal


【解决方案1】:

这个问题几乎可以自己回答。当您的裸机应用程序不在该进程/算法中时,它在做什么?测量一个或另一个或两者。如果你有一个裸机应用程序没有完全消耗这个算法中的 cpu,那么你已经有一个操作系统来管理这个应用程序/函数的时间。您可以在相对于计时器的循环中使用简单计数器中的多种方法来查看当算法获得时间片时每个循环有多少计数。您可以简单地为算法本身计时,等等。

我假设当您说 CPU 时,您的意思是整个系统,因为您的性能在很大程度上取决于您的代码和它正在与之交谈的内容。如果根据时钟频率从 cortex-m4 上的闪存运行,您可能会烧毁处理器周期,只是等待指令或数据(并且当算法不是烧毁时钟时,很容易得到算法的处理器性能的错误概念)。缓存掩盖/操纵该性能,如果您不小心并意识到它们在做什么,它们很容易极大地影响性能。作为一个 C++ 问题,您的编译器在性能和代码方面发挥着重要作用,当然,可以很容易地使代码运行速度快或慢几倍,而对命令行或代码的更改最少。

如果算法是 isr 的一部分,则处理器进入睡眠状态,否则,您可以使用 gpio 引脚和示波器技术来了解运行与睡眠的比率。

【讨论】:

    【解决方案2】:

    实现一个操作系统来测量 CPU 的空闲时间对我来说似乎有点过度设计。据我所知,Cortex-M4 包含一个调试单元 (DWT),可让您对cycle counter 进行快照。但最简单的方法是将引脚连接到示波器,并在算法的进入和退出时切换它。

    【讨论】:

    • 但是拍摄寄存器快照对我有什么帮助?据我了解,我唯一能得到的就是自流程开始以来的周期数。
    • 我已经在使用这个循环计数器来测量我的进程的时间,我如何使用它来测量 CPU 使用率?
    • 您会得到 CPU 自启动以来执行的周期数。在进入和退出时拍摄快照可以让您计算通过的周期增量,从而获得您的算法使用的周期数。你有类似“空闲”任务的东西吗?
    • 并通过将这个周期乘以我的周期时间(以纳秒为单位),我将获得运行时间,但不是 CPU 使用率,对吗?
    • 是的,这允许您计算算法的运行时间,并将其与您的测量周期或在您重新输入算法之前经过的周期与您的算法使用的周期数之间的比率进行比较。
    【解决方案3】:

    首先,为了衡量性能,实现一个操作系统是不切实际的,甚至是不可能的。因此,一种可能的方法是保留一个计数变量,该变量将记录在该持续时间内发生的滴答次数。并在定时器中断时增加该变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-31
      • 1970-01-01
      • 2018-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多