Ho notato che un piccolo programma di test che chiama nanosleep sta mostrando un'enorme differenza nell'utilizzo della CPU quando viene eseguito su macchine Linux con un kernel più recente di 2.6.22.utilizzo della CPU ad alta nanosleep?
#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;
}
(Sì, mi rendo conto che questo programma non fa nulla)
Se compilo questo ed eseguirlo su una macchina di openSUSE 10.3 (2.6.22.19-0.2-default), il programma non ha nemmeno presentarsi sulla lista dei processi generata da "top", indicando che sta usando pochissimo tempo di CPU. Se lo eseguo su una macchina openSUSE 11.1 (default 2.6.27.23-0.1), la parte superiore mostra il programma che impiega il 40% del tempo della CPU. In esecuzione su Fedora 9 (2.6.25-14.fc9.i686) e Fedora 10 hanno mostrato lo stesso elevato utilizzo della CPU in "top".
C'è stato un cambiamento nel kernel che influisce su questo?