Zauważyłem, że mały program testowy, który wywołuje nanoseleep, wykazuje ogromną różnicę w wykorzystaniu procesora, gdy jest uruchomiony na maszynach Linux z jądrem nowszym niż 2.6.22.nanosleep użycia wysokiego 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;
}
(Tak, zdaję sobie sprawę, ten program nie robi nic)
Gdybym to skompilować i uruchomić go na openSUSE 10.3 maszyny (2.6.22.19-0.2 domyślny), program nie pojawi się nawet na liście procesów generowanych przez "top", wskazując mi, że używa bardzo mało czasu procesora. Jeśli uruchomię go na maszynie openSUSE 11.1 (2.6.27.23-0.1-default), góra pokazuje program zajmujący 40% czasu procesora. Uruchamianie w Fedorze 9 (2.6.25-14.fc9.i686) i Fedorze 10 również pokazało to samo wysokie użycie procesora w "top".
Czy nastąpiła zmiana w jądrze, która ma na to wpływ?