Hohe CPU-Auslastung im Nanoschlaf?
Mir ist aufgefallen, dass ein kleines Testprogramm, das nanosleep aufruft, einen großen Unterschied in der CPU-Auslastung zeigt, wenn es auf Linux-Computern mit einem neueren Kernel als 2.6.22 ausgeführt wird.
#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;
}
(Ja, mir ist klar, dass dieses Programm nichts tut)
Wenn ich dies kompiliere und auf einem openSUSE 10.3-Computer (2.6.22.19-0.2-Standard) ausführe, wird das Programm nicht einmal in der von "top" generierten Prozessliste angezeigt, was mir anzeigt, dass es sehr wenig CPU-Zeit verbraucht . Wenn ich es auf einem openSUSE 11.1-Computer ausführe (2.6.27.23-0.1-Standard), zeigt oben, dass das Programm 40% der CPU-Zeit beansprucht. Unter Fedora 9 (2.6.25-14.fc9.i686) und Fedora 10 wurde die gleiche hohe CPU-Auslastung auch in "top" angezeigt.
Gab es eine Änderung im Kernel, die dies betrifft?