Команда dmesg считывает буфер printk ядра, используя режим доступа к пространству пользователя через /dev/kmsg. Каждая запись имеет монотоновую метку времени в микросекундах, которая устанавливается при создании записи журнала.
Таким образом, вопрос не может быть, какая временная метка dmesg (или ядро) будет регистрироваться, но должна быть, когда ядро создаст запись в журнале для конкретного действия.
Как я полагаю, это может отличаться от действия к действию. Когда произойдет событие с ядром, то есть подключите USB-устройство, ядро будет регистрировать это, как только оно будет иметь полезную информацию. Когда ядро выполняет запланированную задачу, имеет смысл регистрировать результаты при выполнении задания. Если это сложная работа, возможно, она создает некоторые записи журнала во время ее запуска, но, как я полагаю, в целом после того, как что-то интересное произошло, или немного времени ушло.
Как вы можете получить доступ к принтеру ядра буфера объясняется здесь.
Итак, если вы специально хотите знать, зарегистрирована ли какая-либо запись в начале или в конце действия, вам нужно посмотреть в коде с интерфейсом kernel- или module-sorce при вызове программы log-функция.
Таким образом, похоже, что с источником времени Hyv-V hv_util возникла известная проблема. Также, когда мы перезапустили виртуальную машину, 20-секундный дрейф вовремя ушел, поэтому вполне вероятно, что аппаратные часы работают, но возникают проблемы с обновлением системных часов.
Наша виртуальная машина использовала ядро 4.4.0-47, и вышеупомянутая проблема была исправлена в 4.4.0-87.110. После запуска sudo apt-get update && sudo apt-get upgrade и перезапуска виртуальной машины мы теперь имеем ядро 4.4.0-104. Я буду следить за дрейфом, но мне все же интересно, есть ли способ подтвердить, что hv_utils обновляет системные часы.
Обновление: пока это похоже на исправление проблемы. Раньше мы видели около 1 мс дрейфа за 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
Обновление: [ ! d4] В течение следующих 24 часов мы увидели, что он продолжает дрейфовать от -200мс до + 2904 мс. Похоже, что вышеприведенный патч заключался в устранении конфликта между встроенными настройками времени и пользовательским пространством 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, мы можем видеть эти часы на виртуальной машине (обратите внимание, что это также включает службу 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.
Таким образом, похоже, что с источником времени Hyv-V hv_util возникла известная проблема. Также, когда мы перезапустили виртуальную машину, 20-секундный дрейф вовремя ушел, поэтому вполне вероятно, что аппаратные часы работают, но возникают проблемы с обновлением системных часов.
Наша виртуальная машина использовала ядро 4.4.0-47, и вышеупомянутая проблема была исправлена в 4.4.0-87.110. После запуска sudo apt-get update && sudo apt-get upgrade и перезапуска виртуальной машины мы теперь имеем ядро 4.4.0-104. Я буду следить за дрейфом, но мне все же интересно, есть ли способ подтвердить, что hv_utils обновляет системные часы.
Обновление: пока это похоже на исправление проблемы. Раньше мы видели около 1 мс дрейфа за 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
Обновление: [ ! d4] В течение следующих 24 часов мы увидели, что он продолжает дрейфовать от -200мс до + 2904 мс. Похоже, что вышеприведенный патч заключался в устранении конфликта между встроенными настройками времени и пользовательским пространством 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, мы можем видеть эти часы на виртуальной машине (обратите внимание, что это также включает службу 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.