Когда я запускаю свою виртуальную машину с Gentoo в качестве гостя, я обнаружил, что из tick_periodic
есть значительные накладные расходы. (Это функция, которая выполняется при каждом прерывании таймера.) Эта функция обновляет глобальный jiffy
с помощью write_seqlocks
, что приводит к накладным расходам.
Здесь содержится grep HZ
и соответствующий материал в файле конфигурации ядра.
[email protected]:~$ cat /boot/config | egrep 'HZ|TIME'
# CONFIG_RCU_FAST_NO_HZ is not set
CONFIG_NO_HZ=y
# CONFIG_HZ_100 is not set
# CONFIG_HZ_250 is not set
# CONFIG_HZ_300 is not set
CONFIG_HZ_1000=y
CONFIG_HZ=1000
# CONFIG_MACHZ_WDT is not set
CONFIG_TIMERFD=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_X86_CYCLONE_TIMER=y
CONFIG_HPET_TIMER=y
Ясно, что он установил конфигурацию в 1000, но когда я делаю sysconf(_SC_CLK_TCK)
, я получаю 100 в качестве частоты таймера. Итак, какова частота моего системного таймера?
Что я хочу сделать, так это снизить частоту до 100, даже если это возможно. Хотя это может повлиять на интерактивность и точность сегмента времени poll
/select
и планировщика, я готов пожертвовать этими вещами для меньшего прерывания таймера, так как это ускорит работу виртуальной машины.
Когда я попытался выяснить, что нужно сделать, я прочитал в некотором месте, что вы можете сделать это, изменив конфигурационный файл, еще где я прочитал, что добавление divider = 10 к параметру загрузки выполняет задание, иначе Я читал, что ничто из этого не требуется, если вы можете установить CONFIG_HIGH_RES_TIMERS
на слабые таймеры с малой задержкой, даже не увеличивая частоту таймера, и это возможно с помощью системы без тэгов CONFIG_NO_HZ
.
Я очень запутался в правильном подходе.
Все, что я хочу, - это максимально сократить прерывание таймера.
Могу ли я знать правильный способ сделать это?