Как я удостоверяюсь, что hv_utils обновляет системные часы в Azure

Мы имеем Ubuntu 16.04 VMs, работающий в Azure, и заметили, что часы дрейфовали ~20 секунд. Система использует универсальное Изображение Ubuntu (Управляемый нашим отделом ИТ, не уверенным в любых изменениях/модификациях, которые были сделаны), и НЕ имеет доступа к Интернету или любым общедоступным пулам NTP. Также в нашем регионе Azure нет никаких серверов NTP, но я вижу, что это пытается достигнуть конфигурации по умолчанию ntp.ubuntu.com:

$ cat /etc/systemd/timesyncd.conf
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See timesyncd.conf(5) for details.

[Time]
#NTP=
#FallbackNTP=ntp.ubuntu.com

$ sudo systemctl status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization
   Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/systemd-timesyncd.service.d
           └─disable-with-time-daemon.conf
   Active: active (running) since Tue 2017-12-05 15:59:12 UTC; 1 weeks 6 days ago
     Docs: man:systemd-timesyncd.service(8)
 Main PID: 957 (systemd-timesyn)
   Status: "Idle."
    Tasks: 2
   Memory: 560.0K
      CPU: 17.173s
   CGroup: /system.slice/systemd-timesyncd.service
           └─957 /lib/systemd/systemd-timesyncd

Dec 18 23:52:54 VMNAME systemd-timesyncd[957]: Timed out waiting for reply from 91.189.91.157:123 (ntp.ubuntu.com).
Dec 18 23:53:04 VMNAME systemd-timesyncd[957]: Timed out waiting for reply from 91.189.89.199:123 (ntp.ubuntu.com).

Это - мое понимание, что недавние изображения Ubuntu исходно поддерживают созданный в Синхронизации времени Гиперпротив Действительно, я вижу, что hv_utils модуль ядра был загружен, но я не вижу сообщений для него в системном журнале

$ lsmod | grep hv
hv_balloon             24576  0
hv_storvsc             20480  2
hv_netvsc              40960  0
scsi_transport_fc      61440  1 hv_storvsc
hv_utils               24576  2
hv_vmbus               73728  7 hv_balloon,hyperv_keyboard,hv_netvsc,hid_hyperv,hv_utils,hyperv_fb,hv_storvsc

$ dmesg
[    2.706739] clocksource: hyperv_clocksource_tsc_page: mask: 0xffffffffffffffff max_cycles: 0x24e6a1710, max_idle_ns: 440795202120 ns
[    2.709052] Floppy drive(s): fd0 is 1.44M
[    2.735624] FDC 0 is an 82078.
[    2.737857] clocksource: Switched to clocksource hyperv_clocksource_tsc_page
[    2.748059] hv_vmbus: Hyper-V Host Build:14393-10.0-0-0.230; Vmbus version:4.0
[    2.757269] hv_vmbus: Unknown GUID: f8e65716-3cb3-4a06-9a60-1889c5cccab5
[    2.761412] hv_vmbus: Unknown GUID: 3375baf4-9e15-4b30-b765-67acb10d607b
[    2.766081] hv_vmbus: Unknown GUID: 276aacf4-ac15-426c-98dd-7521ad3f01fe
[    2.775497] hv_vmbus: registering driver hyperv_fb
[    2.779440] hyperv_fb: Screen resolution: 1152x864, Color depth: 32
[    2.786286] Console: switching to colour frame buffer device 144x54
[    2.807248] hv_vmbus: registering driver hyperv_keyboard
[    2.812765] hv_utils: Registering HyperV Utility Driver
[    2.815236] hv_vmbus: registering driver hv_util
[    2.819533] hidraw: raw HID events driver (C) Jiri Kosina
[    2.825316] AVX2 version of gcm_enc/dec engaged.
[    2.827788] AES CTR mode by8 optimization enabled
[    2.831632] hv_vmbus: registering driver hid_hyperv
[    2.834734] input: Microsoft Vmbus HID-compliant Mouse as /devices/0006:045E:0621.0001/input/input4
[    2.839602] hid 0006:045E:0621.0001: input: <UNKNOWN> HID v0.01 Mouse [Microsoft Vmbus HID-compliant Mouse] on
[    2.845660] hv_vmbus: registering driver hv_storvsc
[    2.849843] scsi host2: storvsc_host_t
[    2.853512] scsi 2:0:0:0: Direct-Access     Msft     Virtual Disk     1.0  PQ: 0 ANSI: 5
[    2.857949] hv_vmbus: registering driver hv_netvsc

Есть ли что-либо еще, что я должен сделать для включения времени Драйвера Hyper-V Utilities keeping/syncronization?

0
задан 18 December 2017 в 18:22

1 ответ

Таким образом, похоже, что была недавняя известная проблема с источником времени Hyper-V hv_util. Также, когда мы перезапустили VM, 20-секундный дрейф вовремя ушел, таким образом, вероятно, что аппаратные часы работали, но имели проблемы, обновляющие системные часы.

Наша VM использовала ядро 4.4.0-47, и вышеупомянутая проблема была исправлена в 4.4.0-87.110. После выполнения sudo apt-get update && sudo apt-get upgrade и затем перезапуская VM у нас теперь есть ядро 4.4.0-104. Я буду продолжать контролировать для дрейфа, но все еще любопытен, если будет какой-либо способ подтвердить, что hv_utils обновляет системные часы.

Обновление: До сих пор это похоже на него, устранил проблему. Ранее мы занимались дрейфом ~1ms когда-либо 24 секунды (чуть более чем 3,5 дрейфа с каждый с 24 часами), и после обновления ядра, мы видим, что дельта остается ниже 200 мс.

$ sudo apt-get install iputils-clockdiff
$ clockdiff TESTNTPSERVER
.
host=VMNAME rtt=750(187)ms/0ms delta=-182ms/-182ms Tue Dec 19 03:46:43 2017

Обновление: За следующие 24 часа мы видели, что он продолжил дрейфовать от-200ms до +2904ms. Кажется, что вышеупомянутый патч должен был исправить конкуренцию между временными регулировками в ядре и пространством пользователя ntpd/systemd-timesyncd процесс, который заставил сервер продолжать дрейфовать. В нашем случае systemd-timesyncd успешно никогда не обновлял часы, так как это не может достигнуть сервера ntp по умолчанию (подтвержденный journalctl -u systemd-timesyncd сообщения об ошибках и пустое /var/lib/systemd/clock файл). Таким образом, то, что мы видим, является новым поведением в 4.4.0-87.110 ядрах, где вместо временных регулировок в ядре часы hyper-v теперь выставляются как Аппаратные часы PTP (PHC). Используя phc_ctl мы видим, это отметить время прихода на работу VM (обратите внимание, что это также включает ptp4l сервис):

$ clockdiff TESTNTPSERVER
............
host=VMNAME rtt=33(93)ms/0ms delta=2904ms/2904ms Tue Dec 19 20:59:48 2017

$ ls -la /var/lib/systemd/clock
-rw-r--r-- 1 systemd-timesync systemd-timesync 0 Feb 11  2016 /var/lib/systemd/clock

$ sudo apt-get install linuxptp
$ sudo systemctl disable ptp4l
$ sudo phc_ctl /dev/ptp0 get;echo "              date: clock time is $(date +%s.%N) or $(date)"
phc_ctl[65577.406]: clock time is 1513721576.691973400 or Tue Dec 19 22:12:56 2017
              date: clock time is 1513721574.065892000 or Tue Dec 19 22:12:54 UTC 2017

Таким образом, если мы хотим использовать созданный в синхронизации времени Hyper-V на 4.4.0-87.110 или более новом ядре, мы должны использовать процесс синхронизации времени, который поддерживает Аппаратные Часы PTP.

0
ответ дан 1 November 2019 в 00:57

Другие вопросы по тегам:

Похожие вопросы: