KVM+Suspend (отставание времени на гостевой OC)

Модератор: Модераторы разделов

Ответить
Аватара пользователя
Amper13
Сообщения: 551
ОС: Fedora 26, CentOS 7

KVM+Suspend

Сообщение Amper13 »

Имеется сервачек с KVM. На нем вертятся 6 гостей, 3 Linux и 3 Windows. Если настраивать так, чтобы при выключении или перезагрузки домашней OC гости уходили в suspend, то при выходе гостя из сна время на нем начинает отставать. Отстает оно ровно на столько, сколько гостевая ОС прибывала во сне. Если перезагрузить гостевую ОС то время становится правильным.
Пробовал использовать shutdown вместо suspend (мне в общем то не принципиально), но возникает загвоздка с офтопиком. Win2003 имеет привычку засыпать на экране приветствия и в этом состоянии shutdown игнорирует, т.е. корректного завершения работы не получается, libvirt по истечению времени выделенного на завершение работы гостя попросту шлет гостю с win destroy.
Собственно как сделать так чтобы при выходе гостя из сна время на нем было правильным?

P.S.
Ну и вопрос не по адресу, но может быть кто знает. Как в 2003офтопике отключить засыпание на экране приветствия? (если удастся это сделать то вполне можно использовать shutdown).
Спасибо сказали:
Аватара пользователя
vr13
Сообщения: 876
ОС: gentoo

Re: KVM+Suspend

Сообщение vr13 »

нужно, чтобы гостевая система использовала rtc-timer. по-умолчанию - используется tsc (который "не тикает", когда машина спит). как этому научить винду, спросите google - он точно знает
Спасибо сказали:
Аватара пользователя
Amper13
Сообщения: 551
ОС: Fedora 26, CentOS 7

Re: KVM+Suspend

Сообщение Amper13 »

как этому научить винду, спросите google - он точно знает

Я вот уже час как гуглю, и чего то не могу найти как научить этому linux. Может подскажете? Ну или ссылочкой поможете.
Спасибо сказали:
Аватара пользователя
vr13
Сообщения: 876
ОС: gentoo

Re: KVM+Suspend

Сообщение vr13 »

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

на всякий случай, это (про tsc) догадка, у меня виртуальной винды нет
Спасибо сказали:
Аватара пользователя
Amper13
Сообщения: 551
ОС: Fedora 26, CentOS 7

Re: KVM+Suspend

Сообщение Amper13 »

по заданным критериям, сразу нашлось это.

Ну это я тоже нашел, только там на сколько я понял tsc описывается...
...linux, кстати, учить не надо...

Проблема с тем что таймер во сне не тикает, актуальна и для гостей с linux.
Вообще, если я правильно понимаю, когда я посылаю команду из virsh, suspend vm0, libvirt делает дамп работающего гостя после чего выключает его. Если это так, то мне совсем не понятно где должен тикать таймер...
Что то я совсем запутался...
Спасибо сказали:
Аватара пользователя
vr13
Сообщения: 876
ОС: gentoo

Re: KVM+Suspend

Сообщение vr13 »

в linux проблем нет, поскольку pm-utils имеет набор соответствующих хуков (hooks), которые срабатывают и восстанавливают системное время из cmos при пробуждении. понятно, что и c-states, и cmos - виртуальные. но в реальной жизни точно также: на моем старинном и медленном ноутбуке при выходе из suspend видно, что время сначала - левое, которое спустя ~секунду становится актуальном

винда тоже дает некоторую свободу действий путем добавления в boot.ini /use pmtimer (или /usepmtimer - не знаю, как правильно). для новых версий (w7,w8 итп), тоже есть способы, которые описаны в обсуждаемой федорной документации

проблема синхронизации времени гостей в kvm - актуальная тема: в документации ядра есть статья, см Documentaion/virtual/kvm/timekeeping.txt. в ней, по поводу "просыпаний" в частности, говорится:

...
3.4) TSC and C-states

C-states, or idling states of the processor, especially C1E and deeper sleep
states may be problematic for TSC as well. The TSC may stop advancing in such
a state, resulting in a TSC which is behind that of other CPUs when execution
is resumed. Such CPUs must be detected and flagged by the operating system
based on CPU and chipset identifications.

The TSC in such a case may be corrected by catching it up to a known external
clocksource.
...

я понял, что гости linux делают как написано в последнем предложении, остальным - предлагается не использовать TSC
Спасибо сказали:
Аватара пользователя
Amper13
Сообщения: 551
ОС: Fedora 26, CentOS 7

Re: KVM+Suspend

Сообщение Amper13 »

гости linux делают как написано в последнем предложении, остальным - предлагается не использовать TSC

Вот с этого момента и начинается то самое не понятное...
Как я уже писал, после просыпания, время на любом госте (не важно Linux это или Windows) отстаёт ровно на столько, сколько гость прибывал во сне, и до перезагрузки готся время не изменяется, оно так и идет неправильно.
На сколько я понимаю, сам гость к режиму сна имеет самое посредственное отношение. За засыпание и пробуждение гостя отвечает libvirt, засыпание происходит путем создания дампа этого самого гостя, соответственно, пробуждение происходит путем восстановления этого самого дампа. Вот мне и не понятно куда копать... то ли копать в сторону таймеров, используемых в доме, то ли менять что то в госте...
Я так понимаю, гость при пробуждение должен синхронизировать свои часы по часам cmos, Вопрос тогда только в одном, как гость узнает что он спал если сном и пробуждением занимается libvirt, а точнее демон libvirt-guests?

P.S. Вообще я уже довольно давно обратил внимание на эту проблему, просто до этого серьезно win2003 в гостях не использовал. В W2008S есть настройка благодаря которой можно отключить засыпание на экране приветствия, а Linux и так вполне адекватно реагирует на shutdown. Но вот с suspend проблема есть в любой гостевой, и как это исправить (хотя бы для гостей с Linux) я понять не могу.
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable
Контактная информация:

Re: KVM+Suspend

Сообщение Portnov »

Крайняя мера — поставить на хост ntp-сервер, а на гостях — настроить ntp-клиенты :)
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
Ответить