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

Часы дрейфуют на виртуальной машине, ничего не помогает

У меня на vmware очень быстрый дрейф времени.

-241587 20:38
-241587 20:39
-241587 20:40
-241587 20:41
-241587 20:42
-0.014 20:02
-0.025 20:03
-0.056 20:04
-0.093 20:05
-0.093 20:06
-68996. 20:07
-68996. 20:08
12.923 20:07
12.923 20:08
20.371 20:09
21.734 20:10
21.734 20:11
-67965. 20:12
-67941. 20:13
-67915. 20:14
-67906. 20:15
-67906. 20:16
-67897. 20:17
2.508 20:16
2.508 20:17
37.491 20:18
40.774 20:19
40.774 20:20
40.774 20:21
-67927. 20:22
-67912. 20:23
-67912. 20:24
-67897. 20:25

NTP пытается с этим справиться, но, как вы можете видеть, возникают проблемы. Я тоже пробовал vmware-tools, но они явно уступают NTP. Мой NTP настроен с частым интервалом синхронизации и сопротивлением панике:

tinker panic 0
restrict 127.0.0.1
restrict default kod nomodify notrap
server 10.0.0.3 iburst minpoll 4 maxpoll 6

Итак, я понял, что лучше найти причину заносов. Я обнаружил, что временной сдвиг зависит от загрузки процессора. Чем выше загрузка процессора - тем больше дрейф. Кража процессора и памяти не влияет на дрейф. Изолирую одну виртуальную машину на одном хосте - дрифты продолжаются. Я пробовал разные источники часов. hpet, tsc, acpi_pm. - дрифты продолжаются. Я отключал / включал их на уровне гостя в настройках ядра и на уровне VMware в настройках vmkernel.boot. - ничего не работало.

cat /proc/interrupts | grep timer; sleep 10; cat /proc/interrupts | grep timer
  0:         46          0          0          0          0          0          0          0   IO-APIC   2-edge      timer
LOC:     109263     298456     176209     142493     237279     126348     113116     104975   Local timer interrupts
  0:         46          0          0          0          0          0          0          0   IO-APIC   2-edge      timer
LOC:     109499     299498     176782     142786     237786     126769     113417     105206   Local timer interrupts

Гостевая ОС: Ubuntu 16.04.1 VMware 5.5

Вы можете включить периодическую синхронизацию с помощью следующего параметра файла конфигурации .vmx:

tools.syncTime = true

Установите период на очень низкое значение, например каждые 20 секунд:

tools.syncTime.period = 20

Чтобы это работало, вам необходимо установить инструменты VMWare в гостевой ОС.

Видеть http://www.vmware.com/pdf/vmware_timekeeping.pdf Чтобы получить больше информации