[systemd-devel] [PATCH] timesyncd: Make saving clock to disk on NTP fix optional

Zbigniew Jędrzejewski-Szmek zbyszek at in.waw.pl
Sat Jan 31 20:34:04 PST 2015


Kay, Lennart,
comments?

Zbyszek

On Thu, Jan 29, 2015 at 09:27:38AM +0100, Philipp Reinkemeier wrote:
> Hi.
> 
> Since it has bothered me that systemd-timesyncd unconditionally writes
> the current clock value to disk everytime it got an NTP fix i filed a
> BUG report (https://bugs.freedesktop.org/show_bug.cgi?id=86292).
> Zbigniew asked me to send a patch to this mailing list. So here it
> is. I also attached it to the BUG report mentioned above.
> 
> Philipp
> -- 
> Dipl.-Inform. Philipp Reinkemeier
> OFFIS e.V.
> Escherweg 2, D-26121 Oldenburg, Germany
> Phone: +49 441 9722-400
> E-Mail: philipp.reinkemeier at offis.de
> PGP: 0x2DA75A6F or 0xCCB2AF14

> From 8c03d37688a6163bdd0a7a6379b18f8c3c7a501b Mon Sep 17 00:00:00 2001
> From: Philipp Reinkemeier <philipp.reinkemeier at offis.de>
> 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.</para></listitem>
>                          </varlistentry>
>  
> +                        <varlistentry>
> +                                <term><varname>SaveClockOnNtpFix=</varname></term>
> +                                <listitem><para>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
> +                                <filename>/var/lib/systemd/clock</filename> is touched).
> +                                The date of that file is used upon startup of
> +                                <command>systemd-timesyncd</command> 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
> +                                <command>systemd-timesyncd</command>.</para></listitem>
> +                        </varlistentry>
> +
>                  </variablelist>
>          </refsect1>
>  
> 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
> 




> _______________________________________________
> systemd-devel mailing list
> systemd-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/systemd-devel



More information about the systemd-devel mailing list