From 8c03d37688a6163bdd0a7a6379b18f8c3c7a501b Mon Sep 17 00:00:00 2001 From: Philipp Reinkemeier Date: Wed, 28 Jan 2015 14:53:07 +0100 Subject: [PATCH] timesyncd: Make saving clock to disk on NTP fix optional This introduces a new property "SaveClockOnNtpFix" in the timesyncd.conf configuration file. It takes a boolean value. If we get an NTP, the clock is saved to disk depending on that value. Previously, the clock was saved on every NTP fix. This commit preserves this default behavior. If "SaveClockOnNtpFix" is disabled, then the clock is only saved during shutdown of systemd-timesyncd. This can be useful if one wants to keep disk accesses at a minimum (save power, prevents disk spin-ups to improve their lifetime). --- man/timesyncd.conf.xml | 14 ++++++++++++++ src/timesync/timesyncd-gperf.gperf | 7 ++++--- src/timesync/timesyncd-manager.c | 5 ++++- src/timesync/timesyncd-manager.h | 2 ++ src/timesync/timesyncd.conf.in | 1 + 5 files changed, 25 insertions(+), 4 deletions(-) diff --git a/man/timesyncd.conf.xml b/man/timesyncd.conf.xml index 1a56c2c..9a93737 100644 --- a/man/timesyncd.conf.xml +++ b/man/timesyncd.conf.xml @@ -105,6 +105,20 @@ used instead. + + SaveClockOnNtpFix= + Takes a boolean value. If enabled + (the default), then everytime an NTP fix is acquired, + the new clock value is written to disk (the file + /var/lib/systemd/clock is touched). + The date of that file is used upon startup of + systemd-timesyncd to initialize + the system clock (useful for systems that lack an RTC). + If not enabled, then the clock value is only written + to disk upon shutdown of + systemd-timesyncd. + + diff --git a/src/timesync/timesyncd-gperf.gperf b/src/timesync/timesyncd-gperf.gperf index 29a2cfe..03dc828 100644 --- a/src/timesync/timesyncd-gperf.gperf +++ b/src/timesync/timesyncd-gperf.gperf @@ -14,6 +14,7 @@ struct ConfigPerfItem; %struct-type %includes %% -Time.NTP, config_parse_servers, SERVER_SYSTEM, 0 -Time.Servers, config_parse_servers, SERVER_SYSTEM, 0 -Time.FallbackNTP, config_parse_servers, SERVER_FALLBACK, 0 +Time.NTP, config_parse_servers, SERVER_SYSTEM, 0 +Time.Servers, config_parse_servers, SERVER_SYSTEM, 0 +Time.FallbackNTP, config_parse_servers, SERVER_FALLBACK, 0 +Time.SaveClockOnNtpFix, config_parse_bool, 0, offsetof(Manager, save_clock_on_ntp_fix) diff --git a/src/timesync/timesyncd-manager.c b/src/timesync/timesyncd-manager.c index bc35662..cf05a20 100644 --- a/src/timesync/timesyncd-manager.c +++ b/src/timesync/timesyncd-manager.c @@ -378,7 +378,8 @@ static int manager_adjust_clock(Manager *m, double offset, int leap_sec) { if (r < 0) return r; - touch("/var/lib/systemd/clock"); + if (m->save_clock_on_ntp_fix) + touch("/var/lib/systemd/clock"); m->drift_ppm = tmx.freq / 65536; @@ -1118,6 +1119,8 @@ int manager_new(Manager **ret) { RATELIMIT_INIT(m->ratelimit, RATELIMIT_INTERVAL_USEC, RATELIMIT_BURST); + m->save_clock_on_ntp_fix = true; + r = manager_parse_server_string(m, SERVER_FALLBACK, NTP_SERVERS); if (r < 0) return r; diff --git a/src/timesync/timesyncd-manager.h b/src/timesync/timesyncd-manager.h index c7efdc5..4cc1a31 100644 --- a/src/timesync/timesyncd-manager.h +++ b/src/timesync/timesyncd-manager.h @@ -40,6 +40,8 @@ struct Manager { LIST_HEAD(ServerName, link_servers); LIST_HEAD(ServerName, fallback_servers); + bool save_clock_on_ntp_fix; + RateLimit ratelimit; bool exhausted_servers; diff --git a/src/timesync/timesyncd.conf.in b/src/timesync/timesyncd.conf.in index fc3c6c4..0e5d5fc 100644 --- a/src/timesync/timesyncd.conf.in +++ b/src/timesync/timesyncd.conf.in @@ -13,3 +13,4 @@ [Time] #NTP= #FallbackNTP=@NTP_SERVERS@ +#SaveClockOnNtpFix=yes -- 2.2.2