我注意到一个调用 nanosleep 的小测试程序在内核高于 2.6.22 的 Linux 机器上运行时显示出 CPU 使用率的巨大差异。
#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-default)上运行它,程序甚至不会出现在“top”生成的进程列表中,这表明它使用的 CPU 时间非常少. 如果我在 openSUSE 11.1 机器(2.6.27.23-0.1-default)上运行它,top 显示程序占用了 40% 的 CPU 时间。在 Fedora 9 (2.6.25-14.fc9.i686) 和 Fedora 10 上运行时,“top”中也显示出同样高的 CPU 使用率。
内核中是否发生了影响这一点的变化?