Глава 11. Управление временем виртуальных машин KVM
KVM использует счетчик тактов процессора TSC (Time Stamp Counter). Некоторые процессоры не поддерживают постоянную частоту счетчика, что негативно скажется на работе виртуальных машин на основе KVM. Неточности могут привести к замедлению или, наоборот, ускорению работы сетевых приложений, что изменить скорость работы самой виртуальной машины.
Потенциальные проблемы, связанные с неточностью часов и счетчиков процессора:
Нарушение синхронизации часов может привести к несвоевременному завершению сеансов и сказаться на работе сети;
Виртуальные машины с замедленными часами могут столкнуться с проблемами при миграции;
Возможен сбой виртуальных машин.
Эти проблемы существуют и на других платформах виртуализации, поэтому настоятельно рекомендуется тестировать счетчики и часы.
NTP
В размещающей и гостевых системах должен быть активен сетевой протокол NTP (Network Time Protocol). Команда запуска:
# service ntpd start
Добавьте службу ntpd в последовательность загрузки:
# chkconfig ntpd on
В большинстве случаев служба ntpd
поможет минимизировать последствия расхождения часов.
Наличие постоянного счетчика TSC подтверждается флагом constant_tsc
. Чтобы узнать, есть ли флаг constant_tsc
:
$ cat /proc/cpuinfo | grep constant_tsc
Непустой вывод команды подтверждает наличие бита constant_tsc
. Если же вывод пуст, обратитесь к приведенным ниже инструкциям.
Для процессоров, не поддерживающих постоянную частоту счетчика TSC, потребуется дополнительная настройка. Возможности управления питанием для виртуальных машин потребуется отключить, так как они отрицательно сказываются на синхронизации времени с KVM.
Note
Эти инструкции применимы только для процессоров AMD F.
В случае отсутствия бита
constant_tsc
отключите все возможности управления питанием (
BZ#513138). Каждая система обладает несколькими таймерами, которые используются для синхронизации. В размещающей системе частота счетчика TSC может колебаться вследствие изменений
cpufreq
, перехода в Deep C-состояние или миграции на узел с более быстрым TSC. Для отключения Deep C-состояния остановите счетчик, добавьте
processor.max_cstate=1
в строку параметров grub на узле:
term Fedora (vmlinuz-2.6.29.6-217.2.3.fc11)
root (hd0,0)
kernel /vmlinuz-vmlinuz-2.6.29.6-217.2.3.fc11 ro root=/dev/VolGroup00/LogVol00 rhgb quiet processor.max_cstate=1
Отключите cpufreq
(только если отсутствует бит constant_tsc
). Для этого в файле /etc/sysconfig/cpuspeed
измените значения переменных MIN_SPEED
и MAX_SPEED
на максимально возможное значение частоты. Диапазоны частот можно найти в файлах /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_frequencies
.
В некоторых гостевых системах Red Hat Enterprise Linux потребуется настроить дополнительные параметры ядра. Их можно добавить в конец строки /kernel
файла /boot/grub/grub.conf
, расположенного в гостевой системе.
Приведенная ниже таблица содержит перечень версий Red Hat Enterprise Linux и параметров ядра, необходимых для виртуальных машин в системах, не поддерживающих постоянную частоту счетчика TSC.
Red Hat Enterprise Linux | Дополнительные параметры ядра виртуальной машины |
---|
5.4 AMD64/Intel 64 с паравиртуализированными часами | Дополнительные параметры не нужны |
5.4 AMD64/Intel 64 без паравиртуализированных часов | divider=10 notsc lpj=n |
5.4 x86 с паравиртуализированными часами | Дополнительные параметры не нужны |
5.4 x86 без паравиртуализированных часов | divider=10 clocksource=acpi_pm lpj=n |
5.3 AMD64/Intel 64 | divider=10 notsc |
5.3 x86 | divider=10 clocksource=acpi_pm |
4.8 AMD64/Intel 64 | notsc divider=10 |
4.8 x86 | clock=pmtmr divider=10 |
3.9 AMD64/Intel 64 | Дополнительные параметры не нужны |
3.9 x86 | Дополнительные параметры не нужны |
Параметры загрузки Windows расположены в файле boot.ini. Следующий параметр позволяет использовать таймер PM-TIMER вместо счетчика TSC.
/use pmtimer