Я заметил, что небольшая тестовая программа, которая вызывает nanosleep, показывает огромную разницу в загрузке процессора при запуске на машинах Linux с ядром, более новым, чем 2.6.22.
#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», указывая мне, что он мало процессорного времени. Если я запускаю его на машине openSUSE 11.1 (2.6.27.23-0.1-default), top показывает, что программа занимает 40% процессорного времени. Работа на Fedora 9 (2.6.25-14.fc9.i686) и Fedora 10 также показала такое же высокое использование процессора в «top».
Произошло ли изменение в ядре, которое влияет на это?