Since 2008, instead of applying leap seconds to our servers using clock steps, we have "smeared" the extra second across the hours before and after each leap. The leap smear applies to all Google services, including all our APIs.
Our proposed standard smear
Many organizations use smeared clocks, and it would be helpful if the smears were the same. After all, the purpose of clocks is to read the same time in different places.
We encourage anyone smearing leap seconds to use a 24-hour linear smear from noon to noon UTC.
This smear combines the features that experience has shown to work well for many distributed computing applications:
- The long duration keeps the frequency change small. The change for the smear is about 11.6 ppm. This is within the manufacturing and thermal errors of most machines' quartz oscillators, and well under NTP's 500 ppm maximum slew rate.
- Centering the smear on the leap second, instead of having it begin or end at the leap second, minimizes the maximum offset.
- Compared to a cosine smear, the linear smear is simpler, easier to calculate, and minimizes the maximum frequency change.
- The 24-hour duration has been widely adopted by others implementing smears. We previously used a 20-hour smear duration, but changed to align with this more popular noon-to-noon interval.
Example of the standard smear
In this example, we will suppose there is a leap second at the end of December 2019, although the actual schedule has not yet been announced.
The smear period starts at 2019-12-31 12:00:00 UTC and continues through 2020-01-01 12:00:00 UTC. Before and after this period, smeared clocks and time service agree with clocks that apply leap seconds.
At the beginning of the leap second, smeared time is just under 0.5 s behind UTC. UTC inserts an additional second, while smeared time continues uninterrupted. This causes smeared time to become just under 0.5 s ahead of UTC when the leap second ends.
By continuing to run the clocks at the same slowed rate, the ongoing smear reduces this offset over the next twelve hours. By 12:00:00, smeared and leaping clocks agree again.
|TAI||Unsmeared UTC||Smeared time|
|2019-12-31 12:00:36.000000||2019-12-31 11:59:59.000000||2019-12-31 11:59:59.000000|
|2019-12-31 12:00:37.000000||2019-12-31 12:00:00.000000||2019-12-31 12:00:00.000000|
|2019-12-31 12:00:38.000012||2019-12-31 12:00:01.000012||2019-12-31 12:00:01.000000|
|2020-01-01 00:00:35.499977||2019-12-31 23:59:58.499977||2019-12-31 23:59:58.000000|
|2020-01-01 00:00:36.499988||2019-12-31 23:59:59.499988||2019-12-31 23:59:59.000000|
|2020-01-01 00:00:37.000000||2019-12-31 23:59:60.000000||2019-12-31 23:59:59.500006|
|2020-01-01 00:00:37.500000||2019-12-31 23:59:60.500000||2020-01-01 00:00:00.000000|
|2020-01-01 00:00:38.000000||2020-01-01 00:00:00.000000||2020-01-01 00:00:00.499994|
|2020-01-01 00:00:38.500012||2020-01-01 00:00:00.500012||2020-01-01 00:00:01.000000|
|2020-01-01 00:00:39.500023||2020-01-01 00:00:01.500023||2020-01-01 00:00:02.000000|
|2020-01-01 12:00:36.999988||2020-01-01 11:59:58.999988||2020-01-01 11:59:59.000000|
|2020-01-01 12:00:38.000000||2020-01-01 12:00:00.000000||2020-01-01 12:00:00.000000|
|2020-01-01 12:00:39.000000||2020-01-01 12:00:01.000000||2020-01-01 12:00:01.000000|
Over the 86,401 SI seconds of the smear, the stretch in the 86,400 indicated seconds adds up to the one additional SI second required by the leap.
A negative leap second, if one were ever to occur, would be smeared by speeding up clocks over the 86,399 SI seconds from noon to noon.
Several other smears have been proposed or implemented.
- UTC-SLS is a linear smear over 1,000 s before the leap (23:43:20 to 00:00:00).
- Google's 2008 smear was a 20-hour cosine smear before the leap (04:00:00 to 00:00:00). This was the only time we used a cosine smear.
- Google's second leap smear was a 20-hour linear smear centered on the leap. We used this in 2012, 2015, and 2016.
- Bloomberg's smear is a linear smear over 2,000 s after the leap (00:00:00 to 00:33:20).
- Meinberg has implemented a cosine smear of configurable duration.