phc2sys - synchronize two or more clocks
] [ -r
] [ options ]
[ -d pps-device
] [ -s device
] [ -O offset
] [ -w
] [ options
is a program which synchronizes two or more clocks in the system.
Typically, it is used to synchronize the system clock to a PTP hardware clock
(PHC), which itself is synchronized by the ptp4l
With the -a
option, the clocks to synchronize are fetched from the
daemon and the direction of synchronization automatically
follows changes of the PTP port states.
Manual configuration is also possible. When using manual configuration, two
synchronization modes are supported, one uses a pulse per second (PPS) signal
provided by the source clock and the other mode reads time from the source
clock directly. Some clocks can be used in both modes, the mode which will
synchronize the slave clock with better accuracy depends on hardware and
- Read the clocks to synchronize from running ptp4l
and follow changes in the port states, adjusting the synchronization
direction automatically. The system clock (CLOCK_REALTIME) is not
synchronized, unless the -r option is also specified.
- Only valid together with the -a option. Instructs
phc2sys to also synchronize the system clock (CLOCK_REALTIME). By
default, the system clock is not considered as a possible time source. If
you want the system clock to be eligible to become a time source, specify
the -r option twice.
- -d pps-device
- Specify the PPS device of the master clock (e.g.
/dev/pps0). With this option the PPS synchronization mode is used instead
of the direct mode. As the PPS signal does not specify time and only marks
start of a second, the slave clock should be already close to the correct
time before phc2sys is started or the -s option should be
used too. With the -s option the PPS signal of the master clock is
enabled automatically, otherwise it has to be enabled before
phc2sys is started (e.g. by running echo 1 >
/sys/class/ptp/ptp0/pps_enable). This option can be used only with the
system clock as the slave clock. Not compatible with the -a
- -s device
- Specify the master clock by device (e.g. /dev/ptp0) or
interface (e.g. eth0) or by name (e.g. CLOCK_REALTIME for the system
clock). When this option is used together with the -d option, the
master clock is used only to correct the offset by whole number of
seconds, which cannot be fixed with PPS alone. Not compatible with the
- -i interface
- Performs the exact same function as -s for
compatibility reasons. Previously enabled specifying master clock by
network interface. However, this can now be done using -s and this
option is no longer necessary. As such it has been deprecated, and should
no longer be used.
- -c device
- Specify the slave clock by device (e.g. /dev/ptp1) or
interface (e.g. eth1) or by name. The default is CLOCK_REALTIME (the
system clock). Not compatible with the -a option.
- -E servo
- Specify which clock servo should be used. Valid values are
pi for a PI controller, linreg for an adaptive controller using linear
regression, and ntpshm for the NTP SHM reference clock to allow another
process to synchronize the local clock. The default is pi.
- -P kp
- Specify the proportional constant of the PI controller. The
default is 0.7.
- -I ki
- Specify the integral constant of the PI controller. The
default is 0.3.
- -S step
- Specify the step threshold of the servo. It is the maximum
offset that the servo corrects by changing the clock frequency instead of
stepping the clock. The clock is stepped on start regardless of the option
if the offset is larger than 20 microseconds (unless the -F option
is used). It's specified in seconds. The value of 0.0 disables stepping
after the start. The default is 0.0.
- -F step
- Specify the step threshold applied only on the first
update. It is the maximum offset that is corrected by adjusting clock.
It's specified in seconds. The value of 0.0 disables stepping on start.
The default is 0.00002 (20 microseconds).
- -R update-rate
- Specify the slave clock update rate when running in the
direct synchronization mode. The default is 1 per second.
- -N phc-num
- Specify the number of master clock readings per one slave
clock update. Only the fastest reading is used to update the slave clock,
this is useful to minimize the error caused by random delays in scheduling
and bus utilization. The default is 5.
- -O offset
- Specify the offset between the slave and master times in
seconds. Not compatible with the -a option. See TIME SCALE
- -L freq-limit
- The maximum allowed frequency offset between uncorrected
clock and the system monotonic clock in parts per billion (ppb). This is
used as a sanity check of the synchronized clock. When a larger offset is
measured, a warning message will be printed and the servo will be reset.
When set to 0, the sanity check is disabled. The default is 200000000
- -M segment
- The number of the SHM segment used by ntpshm servo. The
default is 0.
- -u summary-updates
- Specify the number of clock updates included in summary
statistics. The statistics include offset root mean square (RMS), maximum
absolute offset, frequency offset mean and standard deviation, and mean of
the delay in clock readings and standard deviation. The units are
nanoseconds and parts per billion (ppb). If zero, the individual samples
are printed instead of the statistics. The messages are printed at the
LOG_INFO level. The default is 0 (disabled).
- Wait until ptp4l is in a synchronized state. If the
-O option is not used, also keep the offset between the slave and
master times updated according to the currentUtcOffset value obtained from
ptp4l and the direction of the clock synchronization. Not compatible with
the -a option.
- -n domain-number
- Specify the domain number used by ptp4l. The default is
- When a leap second is announced, don't apply it in the
kernel by stepping the clock, but let the servo correct the one-second
offset slowly by changing the clock frequency (unless the -S option
- -z uds-address
- Specifies the address of the server's UNIX domain socket.
The default is /var/run/ptp4l.
- -l print-level
- Set the maximum syslog level of messages which should be
printed or sent to the system logger. The default is 6 (LOG_INFO).
- Print messages to the standard output.
- Don't send messages to the system logger.
- Display a help message.
- Prints the software version and exits.
uses either PTP time scale or UTC (Coordinated Universal Time) time
scale. PTP time scale is continuous and shifted against UTC by a few tens of
seconds as PTP time scale does not apply leap seconds.
In hardware time stamping mode, ptp4l
announces use of PTP time scale and
PHC is used for the stamps. That means PHC must follow PTP time scale while
system clock follows UTC. Time offset between these two is maintained by
acquires the offset value either by reading it from ptp4l when
is in effect or from command line when -O
supplied. Failure to maintain the correct offset can result in local system
clock being off some seconds to domain master system clock when in slave mode,
or incorect PTP time announced to the network in case the host is the domain
Synchronize time automatically according to the current ptp4l
synchronize the system clock to the remote master.
phc2sys -a -r
Same as above, but when the host becomes the domain master, synchronize time in
the domain to its system clock.
phc2sys -a -rr
The host is a domain master, PTP clock is synchronized to system clock and the
time offset is obtained from ptp4l
to get at least one port in master or slave mode before starting
phc2sys -c /dev/ptp0 -s CLOCK_REALTIME
Same as above, time offset is provided on command line and phc2sys
not wait for ptp4l
phc2sys -c /dev/ptp0 -s CLOCK_REALTIME -O
The host is in slave mode, system clock is synchronized from PTP clock,
waits for ptp4l
and the offset is set automatically.
phc2sys -s /dev/ptp0 -w
Same as above, PTP clock id is read from the network interface, the offset is
provided on command line phc2sys
does not wait.
phc2sys -s eth0 -O -35