Назад | Перейти на главную страницу

Предотвращение работы часов виртуальной машины быстрее, чем следовало бы

У меня есть сервер unRAID 6.6.5 с совершенно правильным временем и несколькими виртуальными машинами Linux, которые также идеально синхронизировались. Я перезагрузил одну из своих виртуальных машин, и внезапно часы идут вдвое быстрее, чем hwclock. Я легко могу это увидеть, выполнив эти 2 цикла на 2 разных терминалах:

while true; do date; sleep 1; done;
while true; do hwclock --show; sleep 1; done;

Если это важно, за сервером unRAID стоит оборудование Intel Xeon E3-1245 V6 на E3C236D2I с ОЗУ ECC. Кроме того, все мои виртуальные машины в настоящее время работают под управлением CentOS 7. По умолчанию CentOS 7 поставляется с установленным chronyd. Выполнение любой из этих двух команд синхронизирует часы, но поскольку часы в любом случае идут в два раза быстрее, они сразу же рассинхронизируются после:

hwclock --localtime --hctosys
chronyc makestep

Я также пробовал использовать ntpd. Результат точно такой же, я могу выполнить синхронизацию, но часы все равно идут слишком быстро. Кроме того, все мои виртуальные машины настроены одинаково:

[root@vm ~]# cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc acpi_pm
[root@vm ~]# cat /sys/devices/system/clocksource/clocksource0/current_clocksource
tsc

Я также пытался переключиться на acpi_pm в прошлом, но не заметил никаких улучшений. Сервер unRAID также работает с TSC:

root@server:~# cat /sys/devices/system/clocksource/clocksource0/current_clocksource
tsc
root@server:~# cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc hpet acpi_pm

Что мне не хватает? Я провел обширное исследование по этому поводу и пока не нашел ни одного работающего решения.

Пока ваша система работает, аппаратные часы не используются. Системные часы, поддерживаемые ядром, - единственное, что имеет значение. Ядро в любом случае будет автоматически синхронизировать аппаратные часы с системным временем каждые 11 минут, но это только для того, чтобы избежать полного завершения работы.

Вопросы, которые следует задать:

  1. Точно ли системное время, показываемое вашим хостом виртуальной машины? (т.е. делать date и chronyc -n tracking показывает правильное время и делает chronyc -n sources показать, что ваша система достаточно близко к своим источникам?)
  2. Точно ли системное время отображается на ваших виртуальных машинах? (Используйте те же проверки, что и выше.)
  3. После перезагрузки, достаточно ли быстро ваш хост виртуальных машин и его виртуальные машины возвращаются к правильному времени? (Сканирование системы терять или выигрывать значительное время во время перезагрузки из-за разницы между аппаратными и системными часами, которую вы видите.)

Если ответы на эти вопросы положительные, значит, ваша система поступает правильно. Игнорируйте аппаратные часы, пока ваша система работает.