sys: drop frequency scaling in Linux driver

Since the kernel USER_HZ constant was introduced and the internal HZ
can't be reliably detected in user-space, the frequency scaling constant
used with older kernels is just a random guess.

Remove the scaling completely and let the closed loop compensate for the
error. To prevent thrashing between two states when the system's
frequency error is close to a multiple of USER_HZ, stick to the current
tick value if it's next to the new required tick. This is used only on
archs where USER_HZ is 100 as the frequency adjustment is limited to 500
ppm.

The linux_hz and linux_freq_scale directives are no longer supported,
but allowed by the config parser.
This commit is contained in:
Miroslav Lichvar
2014-05-22 16:28:20 +02:00
parent 14687d003d
commit e147f2f11e
4 changed files with 45 additions and 164 deletions

View File

@@ -1141,8 +1141,6 @@ the configuration file is ignored.
* initstepslew directive:: Trim the system clock on boot-up
* keyfile directive:: Specify location of file containing keys
* leapsectz directive:: Read leap second data from tz database
* linux_freq_scale directive:: Define a non-standard value to compensate the kernel frequency bias
* linux_hz directive:: Define a non-standard value of the kernel USER_HZ constant
* local directive:: Allow unsynchronised machine to act as server
* lock_all directive:: Require that chronyd be locked into RAM
* log directive:: Make daemon log certain sets of information
@@ -1818,38 +1816,6 @@ $ TZ=right/UTC date -d 'Dec 31 2008 23:59:60'
Wed Dec 31 23:59:60 UTC 2008
@end example
@c }}}
@c {{{ linux_freq_scale
@node linux_freq_scale directive
@subsection linux_freq_scale
(This option only applies to Linux).
This option sets a scale factor needed to control the frequency of the clock by
the @code{adjtimex()} system call exactly. By default, the value is determined
by the version of the running kernel. In recent kernels it is always 1.0 (i.e.
no scaling is needed).
An example of the command is
@example
linux_freq_scale 0.99902439
@end example
@c }}}
@c {{{ linux_hz
@node linux_hz directive
@subsection linux_hz
(This option only applies to Linux).
This option defines the value of the kernel @code{USER_HZ} constant, which is
needed to use the @code{adjtimex()} system call correctly. By default, its
value is determined from the running kernel automatically and there should
rarely be a need to use this option.
An example of the command is
@example
linux_hz 100
@end example
@c }}}
@c {{{ local
@node local directive