【问题标题】:Increasing CPU Utilization and keep it at a certain level using C code使用 C 代码提高 CPU 利用率并保持在一定水平
【发布时间】:2012-03-01 08:38:55
【问题描述】:

我正在编写一个 C 代码(在 Linux 上),它在运行时需要消耗一定数量的 CPU。我正在进行一项实验,在达到某个 CPU 阈值时触发某些操作。因此,一旦利用率达到某个阈值,我需要将其保持在该状态 30 秒,直到我完成实验。我正在使用 top 命令监控 CPU 利用率。

所以我的问题是 - 1. 如何将 CPU 利用率提高到给定值(如果可能,以确定的方式)? 2. 一旦达到阈值,有没有办法在预先定义的时间内将其保持在该水平?

top 命令的示例输出(第 9 列是“top”进程使用的 CPU)- 19304 abcde 16 0 5448 1212 808 R 0.2 0.0 0:00.06 顶部

与上面类似,我将查看顶部的行,它显示了我的二进制文件的利用率。

任何帮助将不胜感激。另外,如果您需要更多详细信息,请告诉我。

谢谢!

编辑: 以下代码行让我可以很好地控制 CPU 利用率 - 在以下情况下,我有 2 个选项 - 将其保持在 50% 以上并保持在 50% 以下 - 经过一些试验和错误后,我确定了给定的睡眠值.

endwait = clock() + ( seconds * CLOCKS_PER_SEC );
while( clock() < endwait ) {}
if (cpu_utilization > 50)
    usleep(250000); 
else
    usleep(700000);

希望这会有所帮助!

【问题讨论】:

  • 结合使用 sleep 和忙循环、sleep、busy loop、sleep、busy loop 等,以实现您想要的任何 CPU 利用率。
  • 虽然繁忙的循环显然会将报告的 CPU 利用率保持在最低水平,但您可能希望在其中抛出一些未对齐的内存访问以保持 CPU 繁忙。

标签: c linux cpu utilization


【解决方案1】:

cpuburn 已知会使 CPU 利用率如此之高,以至于将其温度提高到最高水平。 好像没有更多的官方网站,但是你仍然可以通过Debian packagegooglecode访问源代码。 它是在 asm 中实现的,因此您必须制作一些胶水才能在 C 中与之交互。

【讨论】:

    【解决方案2】:

    在我看来,这类东西应该具有恒定的 CPU 利用率: md5sum /urandom

    【讨论】:

    • 您好,感谢您在问题旁边提供答案。您确定 urandom 不会在某些时候阻塞,因为它要求重新播种吗?在我看来,简单地对已知数据执行哈希同样有效,并且阻塞的机会更少。
    • /dev/urandom 不会阻止,而 /dev/random 会。但是,使用其中任何一个的数据都会减少熵池,并且可能会减慢未来的某些操作(例如 ssh/ssl 中的密码学)。散列 /dev/zero 应该给你相同的 CPU 消耗,而没有额外的风险。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 2013-08-26
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多