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

Что происходит, когда вы синхронизируете аппаратные часы на виртуальной машине?

Эта мысль пришла мне в голову, и, хотя это не настоящая проблема, мне любопытно узнать. Когда виртуальная машина синхронизирует свои часы с аппаратными часами, синхронизирует ли это аппаратные часы хоста? Изменить на программные часы хоста? Сохраняется ли разница во времени между хостом и программным обеспечением в файле виртуальной машины? Вообще ничего не происходит?

Я знаю, что это случайный и, казалось бы, бессмысленный вопрос, но мне нравится понимать, что происходит под капотом всех моих систем. Прямым вариантом использования для меня является SYNC_HWCLOCK NTPD в виртуальной машине Linux Xen, но мне также интересно узнать о других платформах виртуализации, поскольку все они работают по-разному.

В VMWare, по крайней мере, аппаратные часы, которые видит ОС виртуальной машины, не более точны, чем ее собственные программные часы, поскольку эти часы основаны на подсчете прерываний и тиков виртуального оборудования, поэтому они подвержены перекосу, когда виртуальная машина или ее хост находятся под нагрузка.

Clock-sync инструментов VMWare не синхронизируется с аппаратными часами, представленными как часы на виртуальном оборудовании - он общается через границу виртуальной машины / хоста с частями хоста VMWare (которые синхронизируют его с часами ОС на хосте, а не аппаратные часы).

Конечно, другие решения виртуализации будут работать иначе. Я недостаточно использовал Xen, чтобы точно знать, как он ведет себя в этой области. Некоторые решения виртуальных машин (включая схемы пользовательского режима, такие как UML, и механизмы, которые разделяют существующее ядро, а не фактически виртуализируют оборудование) будут использовать часы ОС хоста в качестве часов виртуальной машины, поэтому все, что вам нужно сделать, это синхронизировать часы хоста.

В общем, даже на физическом оборудовании я бы не хотел, чтобы NTP использовал аппаратные часы в качестве эталона.

Кроме того, если вы используете NTP внутри виртуальной машины, убедитесь, что у вас есть «tinker panic 0» в верхней части вашего ntp.conf, чтобы демон ntp не сдавался и не пытался переместить часы в нужное место, когда он видит большой сдвиг тактовой частоты, вызванный недавним переизбытком нагрузки на виртуальную машину / хост.

Изменить: немного пропустил ... Кроме того, если вы используете Linux на своих виртуальных машинах, убедитесь, что вы используете современное ядро ​​без тиков - они, как говорят, гораздо менее подвержены проблемам смещения часов. Большинство современных выпусков Linux в любом случае используют этот параметр ядра по умолчанию, так как он может снизить энергопотребление процессора.

Я думаю, это "аппаратные" часы ВМ; он будет смоделирован вместе с остальной материнской платой. В инструментах VMWare есть отдельная опция для синхронизации аппаратных часов виртуальной машины с тактовой частотой их хоста, которую я бы рекомендовал вам использовать, а также для синхронизации хостов с внешним сервером NTP, так как это избавит от необходимости настраивать NTP на всех ваших виртуальных машинах. Я не знаю, только ли это мы, но мы не сделали этого, когда реализовали нашу среду VMWare, и страдали от всевозможных проблем, связанных со временем, и общих странностей, прежде чем мы разобрались с этим.

Нет, он не синхронизирует аппаратные или программные часы хоста. Аппаратные часы виртуальной машины являются виртуальными и синхронизируются (по крайней мере, с ESX) с хостом во время загрузки. После этого виртуальная машина поддерживает свое время. Для VMware лучше всего запускать ntpd на виртуальной машине, для Xen я не знаю, но предполагаю, что это то же самое.