Может ли время на компьютере идти вспять?

Что: 0995cc9cf92cb41b2f25532c6d806ecf3f69ca22

Когда: 2020-11-03 21:47:06+03:00

Темы: time

Может ли время на компьютере идти вспять?

Вот только что:

    ~|0|0-% fdm -a XXX fetch
    stcnet: 0 messages processed in -0.252 seconds

проверило сообщения ещё до вызова команды.

оставить комментарий

комментарий 0:

From: kmeaw
Date: 2020-11-04 01:27:40Z

CLOCK_REALTIME может, а CLOCK_MONOTONIC не может. Но в Linux есть time
namespace, который позволяет виртуализировать CLOCK_MONOTONIC и добавить
к нему (возможно отрицательное) смещение, так что в редких случаях всё
равно может.

Самая частая причина скачков CLOCK_REALTIME это работа клиента
сихронизации времени с внешним источником.

В большинстве реализаций ntp есть код для плавной подстройки часов
(adjtimex), чтобы такого не происходило.

К сожалению, не все знают про CLOCK_MONOTONIC, и до сих пор часто пишут
код, который измеряет прошедшее время между двумя точками через разность
CLOCK_REALTIME.

В Go про это подумали, и засунули и те, и другие часы в time.Time:
https://golang.org/pkg/time/#hdr-Monotonic_Clocks

fdm, как несложно догадаться, использует CLOCK_REALTIME:
https://github.com/nicm/fdm/blob/eabdf3beb623aba8e5905c9d5d2cb3eed8c6a780/fdm.c#L79-L87
https://github.com/nicm/fdm/blob/eabdf3beb623aba8e5905c9d5d2cb3eed8c6a780/child-fetch.c#L321

комментарий 1:

From: Sergey Matveev
Date: 2020-11-04 08:16:06Z


>Самая частая причина скачков CLOCK_REALTIME это работа клиента
>сихронизации времени с внешним источником.

Я как-раз на тот момент перезагрузил систему (точнее забыл подключить к
питанию и не заметил что аккумулятор сел) и наверное NTP на тот момент
решил подкрутить время. Хотя я думал что NTP в BSD из коробки именно
управляет скоростью хода времени и оно никогда не может идти не в перёд,
Но также слышал что в момент первого запуска он может и жёстко выставить
его -- думаю это и произошло. Надо бы конечно не гадать, а взять и
посмотреть, чтобы понимать работу компьютера, а не на слухах жить, но...
лень :-)

>К сожалению, не все знают про CLOCK_MONOTONIC, и до сих пор часто пишут
>код, который измеряет прошедшее время между двумя точками через разность
>CLOCK_REALTIME.

Я вообще не знал про эти штуки. Честно говоря, думал что из-за NTP,
которые управляют скоростью хода часов, а не жёстко выставляют, можно
всегда предполагать что часы идут только вперёд и поэтому можно
безопасно вызывать "обычный" CLOCK_REALTIME (что всю жизнь и делал,
получается). Только при загрузке ОС допустимо делать что-нибудь типа
ntpdate, до запуска, грубо говоря, любых других программ. А кто
синхронизирует время по cron этой командой -- сам дурак и сам виноват :-).
А если NTP не используется, то тоже часы идут только вперёд.
Эх, век живи -- век учись!

Сгенерирован: SGBlog 0.34.0