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;
}
(はい、私はこのプログラムが何もしないことを理解しています)
これをコンパイルしてopenSUSE10.3マシン(2.6.22.19-0.2-デフォルト)で実行すると、プログラムは「top」によって生成されたプロセスリストにも表示されず、CPU時間をほとんど使用していないことがわかります。 。openSUSE 11.1マシン(2.6.27.23-0.1-デフォルト)で実行すると、topはCPU時間の40%を費やしているプログラムを示しています。Fedora 9(2.6.25-14.fc9.i686)とFedora 10で実行すると、「トップ」でも同じ高いCPU使用率が示されました。
これに影響を与えるカーネルの変更はありましたか?