首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >纳米睡眠高cpu使用率?

纳米睡眠高cpu使用率?
EN

Stack Overflow用户
提问于 2009-07-14 13:13:58
回答 2查看 13.7K关注 0票数 6

我注意到,当在内核高于2.6.22的Linux机器上运行时,一个名为nanosleep的小测试程序在CPU使用率上显示出巨大的差异。

代码语言:javascript
复制
#include <time.h>
int main (void)
{
    struct timespec sleepTime;
    struct timespec returnTime;
    sleepTime.tv_sec = 0;
    sleepTime.tv_nsec = 1000;
    while (1)
    {
      nanosleep(&sleepTime, &returnTime);
    }
    return 0;
}

(是的,我意识到这个程序什么也做不了)

如果我编译这个程序并在openSUSE 10.3机器上运行它(2.6.22.19-0.2-默认),程序甚至不会出现在由"top“生成的进程列表中,这表明它占用的CPU时间非常少。如果我在openSUSE 11.1机器上运行它(2.6.27.23-0.1-默认),top显示程序占用了40%的CPU时间。运行在Fedora 9 (2.6.25-14.fc9.i686)和Fedora 10上的"top“也显示出相同的高CPU使用率。

内核中有没有影响这一点的变化?

EN

回答 2

Stack Overflow用户

发布于 2009-07-30 05:43:25

这是由于在主线调度器中引入了NO_HZ。

以前,你的1,000 ns睡眠通常是睡眠一整刻度-- 1,000,000 ns。现在,当机器处于空闲状态时,它实际上只是在按照您的要求休眠。因此,它运行while()循环和syscall的频率要高出1000倍-因此CPU使用率要高得多。如果您增加CPU,您应该会看到tv_nsec使用率的降低。

票数 22
EN

Stack Overflow用户

发布于 2009-07-14 14:28:56

我没有一个明确的答案...但我首先要看的是内核编译时使用的配置选项:

代码语言:javascript
复制
cat /boot/config-`uname -r`

我认为可能相关的选项是CONFIG_HZCONFIG_HPET_TIMERCONFIG_HIGH_RES_TIMERS。也许这些在你的内核中是不同的。或许能帮你缩小范围。

过去,如果在实时调度策略(SCHED_FIFOSCHED_RR,请参阅nanosleep man page)下运行,nanosleep会在2.4内核上忙碌-等待低于2ms的等待,但由于所有内核都是2.6,这似乎不是一个因素。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1125297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档