Bug 26730

Summary: Не пишется время в RTC при завершении работы
Product: Sisyphus Reporter: Andrey Liakhovets <a.o.liakh>
Component: startupAssignee: Alexey Gladkov <legion>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: dd1email, evg, glebfm, ldv, legion
Version: unstable   
Hardware: all   
OS: Linux   

Description Andrey Liakhovets 2011-12-19 19:22:53 MSK
При выключении или перезагрузке компьютера текущее время не записывается в RTC.
При этом такая команда
# /etc/rc.d/init.d/clock sync
работает.
На мой взгляд, виновата эта строка в /etc/rc.d/init.d/clock для stop:
 if is_yes "$HWCLOCK_SET_AT_HALT" && clock_unsynced; then
По-моему, проверка clock_unsynced должна быть инвертирована.
Во всяком случае, я не понимаю, зачем надо записывать в RTC несинхронизированное
время. В исходниках ядра (kernel/time/ntp.c) вроде бы такая же позиция.

Информация о системе:

startup-0.9.8.31-alt1

$ egrep -v '^(#|$)' /etc/sysconfig/clock 
HWCLOCK_SET_TIME_AT_START=true
HWCLOCK_SET_AT_HALT=true
HWCLOCK_ADJUST=false
UTC=true
ZONE=Europe/Moscow

Время синхронизируется при помощи ntp:
$ /usr/sbin/ntpq -nc rv
assID=0 status=0684 leap_none, sync_ntp, 8 events, event_peer/strat_chg,
version="ntpd 4.2.4p7@1.1607 Tue May 19 14:54:01 UTC 2009 (1)",
processor="i686", system="Linux/3.1.5-un-def-alt0.M60P.1", leap=00,
stratum=2, precision=-20, rootdelay=7.316, rootdispersion=42.341,
peer=19195, refid=195.2.64.5,
reftime=d299c9d0.dceaebad  Mon, Dec 19 2011 18:33:52.862, poll=10,
clock=d299ce50.79c52abe  Mon, Dec 19 2011 18:53:04.475, state=4,
offset=-3.215, frequency=-29.903, jitter=1.262, noise=1.239,
stability=0.130

$ /bin/clock_unsynced ; echo $?
1

На Сизифе должно быть то же самое, т.к. startup и clock_unsynced.c такие же.
Comment 1 Dmitry V. Levin 2012-01-17 20:03:18 MSK
clock_unsynced возвращает EXIT_SUCCESS если и только если adjtimex(2) возвращает статус STA_UNSYNC.  По идее, только в этом случае время нужно синхронизировать вручную.

Что у вас, кстати, показывает
$ strace -eadjtimex clock_unsynced
Comment 2 Andrey Liakhovets 2012-01-17 23:22:52 MSK
(В ответ на комментарий №1)
> clock_unsynced возвращает EXIT_SUCCESS если и только если adjtimex(2)
> возвращает статус STA_UNSYNC.  По идее, только в этом случае время нужно
> синхронизировать вручную.

То есть это именно так и задумано?
Только несинхронизированное системное время может быть записано в RTC при
выключении?
Предполагается, что синхронизированное время и так периодически записывается в
RTC, как сказано в документации ядра (rtc.txt)?

На указанной машине время почти всегда синхронизировано через NTP, но в RTC
ничего не менялось. Поэтому и возник этот баг.
Или ядро пишет в RTC только минуты и секунды? (встретил такое на сайте ntp.org,
код не смотрел)

> Что у вас, кстати, показывает
> $ strace -eadjtimex clock_unsynced

adjtimex({modes=0, offset=20914, freq=-1964601, maxerror=179152, esterror=379,
status=STA_PLL|0x2000, constant=8, precision=1, tolerance=32768000,
time={1326818814, 27600648}, tick=10000, ppsfreq=0, jitter=0, shift=0,
stabil=0, jitcnt=0, calcnt=0, errcnt=0, stbcnt=0}) = 0 (TIME_OK)
+++ exited with 1 +++
Comment 3 Dmitry V. Levin 2012-01-18 02:15:50 MSK
(In reply to comment #2)
> (В ответ на комментарий №1)
> > clock_unsynced возвращает EXIT_SUCCESS если и только если adjtimex(2)
> > возвращает статус STA_UNSYNC.  По идее, только в этом случае время нужно
> > синхронизировать вручную.
> 
> То есть это именно так и задумано?
> Только несинхронизированное системное время может быть записано в RTC при
> выключении?
> Предполагается, что синхронизированное время и так периодически записывается в
> RTC, как сказано в документации ядра (rtc.txt)?

Да, в то время, когда был реализован нынешний механизм с clock_unsynced, ядро именно так себя и вело: если ntpd снимал флаг STA_UNSYNC, то ядро само периодически синхронизировало системное время с RTC.

> На указанной машине время почти всегда синхронизировано через NTP, но в RTC
> ничего не менялось. Поэтому и возник этот баг.
> Или ядро пишет в RTC только минуты и секунды? (встретил такое на сайте ntp.org,
> код не смотрел)

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

> > Что у вас, кстати, показывает
> > $ strace -eadjtimex clock_unsynced
> 
> adjtimex({modes=0, offset=20914, freq=-1964601, maxerror=179152, esterror=379,
> status=STA_PLL|0x2000, constant=8, precision=1, tolerance=32768000,
> time={1326818814, 27600648}, tick=10000, ppsfreq=0, jitter=0, shift=0,
> stabil=0, jitcnt=0, calcnt=0, errcnt=0, stbcnt=0}) = 0 (TIME_OK)
> +++ exited with 1 +++

STA_PLL|STA_NANO, вроде бы ничего особенного.