# How Precision Time Protocol is being deployed at Meta

Implementing Precision Time Protocol (PTP) at Meta permits us to synchronize the methods that drive our services right down to nanosecond precision. PTP’s predecessor, Community Time Protocol (NTP), supplied us with millisecond precision, however as we scale to extra superior methods on our solution to constructing the following computing platform, the metaverse and AI, we have to be certain that our servers are preserving time as precisely and exactly as potential. With PTP in place, we’ll be capable of improve Meta’s applied sciences and packages — from communications and productiveness to leisure, privateness, and safety — for everybody, throughout time zones and around the globe.

The journey to PTP has been years lengthy, as we’ve needed to rethink how each the timekeeping {hardware} and software program function inside our servers and knowledge facilities.

We’re sharing a deep technical dive into our PTP migration and our improvements which have made it potential

## The case for PTP

Earlier than we dive into the PTP structure, let’s discover a easy use case for very correct timing, for the sake of illustration.

Think about a state of affairs by which a shopper writes knowledge and instantly tries to learn it. In massive distributed methods, likelihood is excessive that the write and the learn will land on totally different back-end nodes.

If the learn is hitting a distant duplicate that doesn’t but have the newest replace, there’s a likelihood the consumer won’t see their very own write:

That is annoying on the very least, however extra necessary is that that is violating a linearizability assure that permits for interplay with a distributed system in the identical approach as with a single server.

The everyday solution to remedy that is to problem a number of reads to totally different replicas and look forward to a quorum resolution. This not solely consumes further assets but in addition considerably delays the learn due to the lengthy community round-trip delay.

Including exact and dependable timestamps on a again finish and replicas permits us to easily wait till the duplicate catches up with the learn timestamp:

This not solely quickens the learn but in addition saves tons of compute energy.

A vital situation for this design to work is that each one clocks be in sync or that the offset between a clock and the supply of time be recognized. The offset, nevertheless, modifications due to fixed correction, drifting, or easy temperature variations. For that goal, we use the notion of a Window of Uncertainty (WOU), the place we are able to say with a excessive chance the place the offset is. On this explicit instance, the learn needs to be blocked till the learn timestamp plus WOU.

One might argue that we don’t actually need PTP for that. NTP will do exactly wonderful. Effectively, we thought that too. However experiments we ran evaluating our state-of-the-art NTP implementation and an early model of PTP confirmed a roughly 100x efficiency distinction:

There are a number of extra use instances, together with occasion tracing, cache invalidation, privateness violation detection enhancements, latency compensation within the metaverse, and simultaneous execution in AI, lots of which is able to vastly cut back {hardware} capability necessities. It will preserve us busy for years forward.

Now that we’re on the identical web page, let’s see how we deployed PTP at Meta scale.

## The PTP structure

After a number of reliability and operational opinions, we landed on a design that may be cut up into three major parts: the PTP rack, the community, and the shopper.

Buckle up — we’re going for a deep dive.

## The PTP rack

This homes the {hardware} and software program that serves time to shoppers; the rack consists of a number of crucial parts, every of which has been rigorously chosen and examined.

### The antenna

The GNSS antenna is definitely one of many least appreciated parts. However that is the place the place time originates, not less than on Earth.

We’re striving for nanosecond accuracy. And if the GNSS receiver can’t precisely decide the place, it won’t be able to calculate time. We’ve got to strongly contemplate the signal-to-noise ratio (SNR). A low-quality antenna or obstruction to the open sky may end up in a excessive 3D location normal deviation error. For time to be decided extraordinarily precisely, GNSS receivers ought to enter a so-called time mode, which usually requires a <10m 3D error.

It’s completely important to make sure an open sky and set up a stable stationary antenna. We additionally get to take pleasure in some lovely views:

Whereas we had been testing totally different antenna options, a comparatively new GNSS-over-fiber expertise bought our consideration. It’s free from nearly all disadvantages — it doesn’t conduct electrical energy as a result of it’s powered by a laser through optical fiber, and the sign can journey a number of kilometers with out amplifiers.

Contained in the constructing, it may possibly use pre-existing structured fiber and LC patch panels, which considerably simplifies the distribution of the sign. As well as, the sign delays for optical fiber are effectively outlined at roughly 4.9ns per meter. The one factor left is the delay launched by the direct RF to laser modulation and the optical splitters, that are round 45ns per field.

By conducting assessments, we confirmed that the end-to-end antenna delay is deterministic (usually about just a few hundred nanoseconds) and may simply be compensated on the Time Equipment aspect.

### Time Equipment

The Time Equipment is the center of the timing infrastructure. That is the place time originates from the info heart infrastructure standpoint. In 2021, we printed an article explaining why we developed a brand new Time Equipment and why present options wouldn’t reduce it.

However this was largely within the context of NTP. PTP, then again, brings even greater necessities and tighter constraints. Most significantly, we made a dedication to reliably help as much as 1 million shoppers per equipment with out hurting accuracy and precision. To realize this, we took a crucial have a look at most of the conventional parts of the Time Equipment and thought actually arduous about their reliability and variety.

#### The Time Card

To guard our infrastructure from a crucial bug or a malicious assault,we determined to start out diversification from the supply of time — the Time Card. Final time, we spoke loads concerning the Time Card design and some great benefits of an FPGA-based answer. Below the Open Compute Venture (OCP), we’re collaborating with distributors resembling Orolia, Meinberg, Nvidia, Intel, Broadcom, and ADVA, that are all implementing their very own time playing cards, matching the OCP specification.

##### Oscillatord

The Time Card is a crucial part that requires particular configuration and monitoring. For this goal, we labored with Orolia to develop a disciplining software, referred to as oscillatord, for various flavors of the Time Playing cards. This has turn into the default software for:

• GNSS receiver configuration: setting the default config, and adjusting particular parameters like antenna delay compensation. It additionally permits the disabling of any variety of GNSS constellations to simulate a holdover state of affairs.
• GNSS receiver monitoring: reporting variety of satellites, GNSS high quality, availability of various constellations, antenna standing, leap second, and so forth.
• Atomic clock configuration: Totally different atomic clocks require totally different configuration and sequence of occasions. For instance, it helps SA53 TAU configuration for quick disciplining, and with mRO-50, it helps a temperature-to-frequency relation desk.
• Atomic clock monitoring: Parameters resembling a laser temperature and lock need to be monitored completely, and quick choices should be made when the values are exterior of operational vary.

Successfully, the info exported from oscillatord permits us to determine whether or not the Time Equipment ought to take visitors or needs to be drained.

#### Community card

Our final purpose is to make protocols resembling PTP propagate over the packet community. And if the Time Card is the beating coronary heart of the Time Equipment, the community card is the face. Each time-sensitive PTP packet will get {hardware} timestamped by the NIC. This implies the PTP {Hardware} Clock (PHC) of the NIC should be precisely disciplined.

If we merely copy the clock values from Time Card to the NIC, utilizing the phc2sys or the same software, the accuracy won’t be almost sufficient. The truth is, our experiments present that we’d simply lose ~1–2 microseconds whereas going by PCIe, CPU, NUMA, and so forth. The efficiency of synchronization over PCIe bus will dramatically enhance with the rising Precision Time Measurement (PTM) expertise, as the event and help for varied peripherals with this functionality is in progress.

For our utility, since we use NICs with PPS-in capabilities, we employed ts2phc, which copies clock values at first after which aligns the clock edges based mostly on a pulse per second (PPS) sign. This requires a further cable between the PPS output of the Time Card and the PPS enter of the NIC, as proven within the image under.

We continuously monitor offset and ensure it by no means goes out of a ±50ns window between the Time Card and the NIC:

We additionally monitor the PPS-out interface of the NIC to behave as a fail-safe and be certain that we truly know what’s happening with the PHC on the NIC.

#### ptp4u

Whereas evaluating totally different preexisting PTP server implementations, we skilled scalability points with each open supply and closed proprietary options, together with the FPGA-accelerated PTP servers we evaluated. At finest, we might get round 50K shoppers per server. At our scale, this implies we must deploy many racks full of those gadgets.

Since PTP’s secret sauce is the usage of {hardware} timestamps, the server implementation doesn’t need to be a extremely optimized C program and even an FPGA-accelerated equipment.

We carried out a scalable PTPv2 unicast PTP server in Go, which we named ptp4u, and open-sourced it on GitHub. With some minor optimizations, we had been in a position to help over 1 million concurrent shoppers per gadget, which was independently verified by an IEEE 1588v2 licensed gadget.

This was potential by the straightforward however elegant use of channels in Go that allowed us to go subscriptions round between a number of highly effective staff.

As a result of ptp4u runs as a course of on a Linux machine, we robotically get all the advantages, like IPv6 help, firewall, and so forth., without cost.

#### c4u

The ptp4u server has many configuration choices, permitting it to go dynamically altering parameters resembling PTP Clock Accuracy, PTP Clock Class, and a UTC offset — that’s at the moment set to 37 seconds (we’re  wanting ahead this changing into a relentless) — right down to shoppers.

With a purpose to ceaselessly generate these parameters, we carried out a separate service referred to as c4u, which continuously screens a number of sources of data and compiles the lively config for ptp4u:

This offers us flexibility and reactivity if the surroundings modifications. For instance, if we lose the GNSS sign on one of many Time Home equipment, we are going to swap the ClockClass to HOLDOVER and shoppers will instantly migrate away from it. It’s also calculating ClockAccuracy from many various sources, resembling ts2phc synchronization high quality, atomic clock standing, and so forth.

We calculate the UTC offset worth based mostly on the content material of the tzdata package deal as a result of we go Worldwide Atomic Time (TAI) right down to the shoppers.

### Calnex Sentinel

We wished to verify our Time Home equipment are continuously and independently assessed by a well-established licensed monitoring gadget. Fortunately, we’ve already made plenty of progress within the NTP area with Calnex, and we had been ready to use the same strategy to  PTP.

We collaborated with Calnex to take their area gadget and repurpose it for knowledge heart use, which concerned altering the bodily kind issue and including help for options resembling IPv6.

We join the Time Equipment NIC PPS-out to the Calnex Sentinel, which permits us to observe the PHC of the NIC with nanosecond accuracy.

We are going to discover monitoring in nice element in “How we monitor the PTP structure,” under.

## The PTP community

### PTP protocol

The PTP protocol helps the usage of each unicast and multicast modes for the transmission of PTP messages. For giant knowledge heart deployments, unicast is most well-liked over multicast as a result of it considerably simplifies community design and software program necessities.

Let’s check out a typical PTP unicast movement:

A shopper begins the negotiation (requesting unicast transmission). Subsequently, it should ship:

• A Sync Grant Request (“Hey server, please ship me N Sync and Observe-Up messages per second with the present time for the following M minutes”)
• An Announce Grant Request (“Hey server, please ship me X Announce messages per second together with your standing for the following Y minutes”)
• A Delay Response Grant Request (“Hey server, I’m going to ship you Delay Requests — please reply with Delay Response packets for the following Z minutes”)
1. The server must grant these requests and ship grant responses.
2. Then the server wants to start out executing subscriptions and sending PTP messages.
• All subscriptions are unbiased of each other.
• It’s on the server to obey the ship interval and terminate the subscription when it expires. (PTP was initially multicast solely, and one can clearly see the multicast origin on this design).
• In two-step configuration, when the server sends Sync messages, it has to learn the TX {hardware} timestamp and ship a Observe-Up message containing that timestamp.
1. The shopper will ship Delay Requests inside the agreed-upon interval to find out the trail delay. The server must learn the RX {hardware} timestamp and return it to the shopper.
2. The shopper must periodically refresh the grant, and the method repeats.

Schematically (only for the illustration), it is going to seem like this:

### Clear clocks

We initially thought of leveraging boundary clocks in our design. Nevertheless, boundary clocks include a number of disadvantages and issues:

• You want community tools or some particular servers to behave as a boundary clock.
• A boundary clock acts as a time server, creating higher demand for short-term stability and holdover efficiency.
• For the reason that info has to go by the boundary clocks from the time servers right down to the shoppers, we must implement particular help for this.

To keep away from this extra complexity, we determined to rely solely on PTP clear clocks.

Clear clocks (TCs) allow shoppers to account for variations in community latency, making certain a way more exact estimation of clock offset. Every knowledge heart swap within the path between shopper and time server studies the time every PTP packet spends transiting the swap by updating a area within the packet payload, the aptly named Correction Area (CF).

PTP shoppers (additionally known as abnormal clocks, or OCs) calculate community imply path delay and clock offsets to the time servers (grandmaster clocks, or GMs) utilizing 4 timestamps (T1, T2, T3, and T4) and two correction area values (CFa and CFb), as proven within the diagram under:

• T1 is the {hardware} timestamp when the SYNC packet is shipped by the Time Server.
• T2 is the {hardware} timestamp when the OC receives the SYNC packet.
• CFa is the sum of the swap delays recorded by every swap (TC) within the path from time server to the shopper (for SYNC packet).
• T3 is the {hardware} timestamp the delay request is shipped by the Shopper.
• T4 is the {hardware} timestamp when the time server receives the delay request.
• CFb is the sum of the swap delays recorded by every swap within the path from the Shopper to the time server (for Delay Request packet).

To know the impression of only one disabled clear clock on the best way between shopper and a server, we are able to study the logs:

We are able to see the trail delay explodes, typically even changing into detrimental which shouldn’t occur throughout regular operations. This has a dramatic impression on the offset, shifting it from ±100 nanoseconds to -400 microseconds (over 4000 occasions distinction). And the worst factor of all, this offset won’t even be correct, as a result of the imply path delay calculations are incorrect.

In keeping with our experiments, fashionable switches with massive buffers can delay packets for as much as a few milliseconds which is able to end in lots of of microseconds of a path delay calculation error. It will drive the offset spikes and might be clearly seen on the graphs:

The underside line is that working PTP in datacenters within the absence of TCs results in unpredictable and unaccountable asymmetry within the roundtrip time. And the worst of all – there might be no easy solution to detect this. 500 microseconds might not sound like loads, however when prospects anticipate a WOU to be a number of microseconds, this may increasingly result in an SLA violation.

## The PTP Shopper

### Timestamps

Timestamping the incoming packet is a comparatively outdated characteristic supported by the Linux kernel for many years. For instance software program (kernel) timestamps have been utilized by NTP daemons for years. It’s necessary to grasp that timestamps will not be included into the packet payload by default and if required, should be positioned there by the consumer utility.

Studying RX timestamp from the consumer area is a comparatively easy operation. When packet arrives, the community card (or a kernel) will timestamp this occasion and embrace the timestamp into the socket control message, which is straightforward to get together with the packet itself by calling a recvmsg syscall with MSG_ERRQUEUE flag set.

 128 bits 64 bits 64 bits 64 bits Socket management message header Software program Timestamp Legacy Timestamp {Hardware} Timestamp

For the TX {Hardware} timestamp it’s a little bit extra difficult. When sendto syscall is executed it doesn’t result in an instantaneous packet departure and neither to a TX timestamp technology. On this case the consumer has to poll the socket till the timestamp is precisely positioned by the kernel. Usually we now have to attend for a number of milliseconds which naturally limits the ship charge.

{Hardware} timestamps are the key sauce that makes PTP so exact. Many of the fashionable NICs have already got {hardware} timestamps help the place the community card driver populates the corresponding part.

It’s very straightforward to confirm the help by working the ethtool command:

``````\$ ethtool -T eth0
Time stamping parameters for eth0:
Capabilities:
hardware-transmit
hardware-raw-clock
PTP {Hardware} Clock: 0
{Hardware} Transmit Timestamp Modes:
off
on
{Hardware} Obtain Filter Modes:
none
All
``````

It’s nonetheless potential to make use of PTP with software program (kernel) timestamps, however there gained’t be any sturdy ensures on their high quality, precision, and accuracy.

We evaluated this risk as effectively and even thought of implementing a change within the kernel for “faking” the {hardware} timestamps with software program the place {hardware} timestamps are unavailable. Nevertheless, on a really busy host we noticed the precision of software program timestamps jumped to lots of of microseconds and we needed to abandon this concept.

### ptp4l

ptp4l is an open supply software program able to performing as each a PTP shopper and a PTP server. Whereas we needed to implement our personal PTP server answer for efficiency causes, we determined to stay with ptp4l for the shopper use case.

Preliminary assessments within the lab revealed that ptp4l can present wonderful synchronization high quality out of the field and align time on the PHCs within the native community right down to tens of nanoseconds.

Nevertheless, as we began to scale up our setup some points began to come up.

#### Edge instances

In a single explicit instance we began to note occasional “spikes” within the offset. After a deep dive we recognized basic {hardware} limitations of one of the fashionable NICs available on the market:

• The NIC has solely a timestamp buffer for 128 packets.
• The NIC is unable to differentiate between PTP packets (which want a {hardware} timestamp) and different packets which don’t.

This finally led to the official timestamps being displaced by timestamps coming from different packets. However what made issues loads worse – the NIC driver tried to be overly intelligent and positioned the software program timestamps within the {hardware} timestamp part of the socket management message with out telling anybody.

It’s a basic {hardware} limitation affecting a big portion of the fleet which is inconceivable to repair.

We needed to implement an offset outliers filter, which modified the habits of PI servo and made it stateful. It resulted in occasional outliers being discarded and the imply frequency set in the course of the micro-holdover:

If not for this filter, ptp4l would have steered PHC frequency actually excessive, which might end in a number of seconds of oscillation and dangerous high quality within the Window of Uncertainty we generate from it.

One other problem arose from the design of BMCA. The aim of this algorithm is to pick the perfect Time Equipment when there  are a number of to select from within the ptp4l.conf. It does by evaluating  a number of attributes provided by Time Servers in Announce messages:

1. Precedence 1
2. Clock Class
3. Clock Accuracy
4. Clock Variance
5. Precedence 2
6. MAC Tackle

The issue manifests itself when all aforementioned attributes are the identical. BMCA makes use of Time ApplianceMAC deal with because the tiebreaker which implies below regular working circumstances one Time Server will entice all shopper visitors.

To fight this, we launched a so-called “sharding” with totally different PTP shoppers being allotted to totally different sub-groups of Time Home equipment from the complete pool.

This solely partially addressed the problem with one server in every subgroup taking the complete load for that grouping. The answer was to allow shoppers to precise a desire, and so we launched Priority3 into the choice standards simply above the MAC deal with tiebreaker.  Which means that shoppers configured to make use of the identical Time Home equipment can desire totally different servers.

Shopper 1:

[unicast_master_table]

UDPv6 time_server1 1

UDPv6 time_server2 2

UDPv6 time_server3 3

Shopper 2:

[unicast_master_table]

UDPv6 time_server2 1

UDPv6 time_server3 2

UDPv6 time_server1 3

This ensures we are able to distribute load evenly throughout all Time Home equipment below regular working circumstances.

One other main problem we confronted was making certain PTP labored with multi-host NICs – a number of hosts sharing the identical bodily community interface and subsequently a single PHC. Nevertheless, ptp4l has no data of this and tries to self-discipline the PHC like there aren’t any different neighbors.

Some NIC producers developed a so-called “free working” mode the place ptp4l is simply  disciplining the formulation contained in the kernel driver. The precise PHC is just not affected and retains working free. This mode leads to a barely worse precision, nevertheless it’s utterly clear to ptp4l

Different NIC producers solely help a “actual time clock” mode, when the primary host to seize the lock truly disciplines the PHC. The benefit here’s a extra exact calibration and better high quality holdover, nevertheless it results in a separate problem with ptp4l working on the opposite hosts utilizing the identical NIC as makes an attempt to tune PHC frequency don’t have any impression, resulting in inaccurate clock offset and frequency calculations.

#### PTP profile

To explain the datacenter configuration, we’ve developed and published a PTP profile, which displays the aforementioned edge instances and plenty of extra.

#### Various PTP shoppers

We’re evaluating the potential for utilizing another PTP shopper. Our major standards are:

• Help our PTP profile
• Meets our synchronization high quality necessities
• Open supply

We’re evaluating the Timebeat PTP shopper and, up to now, it appears to be like very promising.

#### Repeatedly incrementing counter

Within the PTP protocol, it doesn’t actually matter what time we propagate so long as we go a UTC offset right down to the shoppers. In our case, it’s Worldwide Atomic Time (TAI), however some individuals might select UTC. We like to consider the time we offer as a constantly incrementing counter.

At this level we’re not disciplining the system clock and ptp4l is solely used to self-discipline the NIC’s PHC.

### fbclock

Synchronizing PHCs throughout the fleet of servers is sweet, nevertheless it’s of no profit until there’s a solution to learn and manipulate these numbers on the shopper.

For this goal, we developed a easy and light-weight API referred to as fbclock that gathers info from PHC and ptp4l and exposes straightforward digestible Window Of Uncertainty info:

By way of a really environment friendly ioctl PTP_SYS_OFFSET_EXTENDED, fbclock will get a present timestamps from the PHC, newest knowledge from ptp4l after which applies math formulation to calculate the Window Of Uncertainty (WOU):

``````\$ ptpcheck fbclock
"earliest_ns":1654191885711023134,"latest_ns":1654191885711023828,"wou_ns":694
``````

As you may even see, the API doesn’t return the present time (aka time.Now()). As a substitute, it returns a window of time which incorporates the precise time with a really excessive diploma of chance On this explicit instance, we all know our Window Of Uncertainty is 694 nanoseconds and the time is between (TAI) Thursday June 02 2022 17:44:08:711023134 and Thursday June 02 2022 17:44:08:711023828.

This strategy permits prospects to attend till the interval is handed to make sure precise transaction ordering.

#### Error certain measurement

Measuring the precision of the time or (Window Of Uncertainty) implies that alongside the delivered time worth, a window (a plus/minus worth) is offered that’s assured to incorporate the true time to a excessive degree of certainty.

How sure we should be is decided by how crucial it’s that the time be right and that is pushed by the particular utility.

In our case, this certainty must be higher than 99.9999{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97} (6-9s). At this degree of reliability you’ll be able to anticipate lower than 1 error in 1,000,000 measurements.

The error charge estimation makes use of statement of the historical past of the info (histogram) to suit a chance distribution perform (PDF). From the chance distribution perform one can calculate the variance (take a root sq. and get the usual deviation) and from there it will likely be easy multiplication to get to the estimation of the distribution based mostly on its worth.

Beneath is a histogram taken from the offset measurement from ptp4l working on the abnormal clock.

To estimate the full variance (E2E) it’s essential to know the variance of the time error amassed by the point server all the best way to the top node NIC. This contains GNSS, atomic clock, and Time Card PHC to NIC PHC (ts2phc). The producer gives the GNSS error variance. Within the case of the UBX-F9T it’s about 12 nanoseconds. For the atomic clock the worth is dependent upon the disciplining threshold that we’ve set. The tighter the disciplining threshold, the smaller offset variance however decrease holdover efficiency. On the time of working this experiment, the error variance of the atomic clock has been measured to 43ns (normal deviation, std). Lastly, the software ts2phc will increase the variance by 30ns (std) leading to a complete variance of 52ns.

The noticed outcomes matches the calculated variance obtained by the “Sum of Variance Regulation.”

${679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}5Clarge{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}20{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}5Ctext{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}7BVar{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}7D{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}5Csum_{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}7Bi{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}3D1{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}7D{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}5E{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}7Bn{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}7D{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}5Cchi{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}20_{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}7Bi{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}7D{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}20{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}3D{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}20{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}5Csum_{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}7Bi{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}3D1{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}7D{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}5E{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}7Bn{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}7D{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}5Ctext{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}7BVar{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}7D{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}28{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}5Cchi{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}20_{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}7Bi{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}7D{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}29$

In keeping with the sum of variance legislation, all we have to do is so as to add all of the variance. In our case, we all know that the full observer E2E error (measured through the Calnex Sentinel) is about 92ns.

On the opposite fingers for our estimation, we are able to have the next:

Estimated E2E Variance = [GNSS Variance + MAC Variance + ts2phc Variance] + [PTP4L Offset Variance] = [Time Server Variance] + [Ordinary Clock Variance]

Plugging within the values:

Estimated E2E Variance = (12ns 2) + (43ns2) + (52ns2) + (61ns2) = 8418, which corresponds to 91.7ns

These outcomes present that by propagating the error variance down the clock tree, the E2E error variance could be estimated with an excellent accuracy. The E2E error variance can be utilized to calculate the Window Of Uncertainty (WOU) based mostly on the next desk.

Merely, by multiplying the estimated E2E error variance in 4.745 we are able to estimate the Window Of Uncertainty for the chance of 6-9s.

For our given system the chance of 6-9s is about 92ns x 4.745 = 436ns

Which means that given a reported time by PTP, contemplating a window dimension of 436ns round worth ensures to incorporate the true time by a confidence of over 99.9999{679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97}.

#### Compensation for holdover

Whereas all of the above appears to be like logical and nice, there’s a huge assumption there. The idea is that the connection to the open time server (OTS) is accessible, and all the things is in regular operation mode. A whole lot of issues can go improper such because the OTS happening, swap happening, Sync messages not behaving as they’re imagined to, one thing in between decides to get up the on-calls and so forth. In such a state of affairs the error certain calculation ought to enter the holdover mode. The identical issues apply to the OTS when GNSS is down. In such a state of affairs the system will improve the Window Of Uncertainty based mostly on a compound charge. The speed might be estimated based mostly on the steadiness of the oscillator (scrolling variance) throughout regular operations. On the OTS the compound charge will get adjusted by the correct telemetry monitoring of the system (Temperature, Vibration, and so forth). There’s a truthful quantity of labor by way of calibrating coefficients right here and attending to the perfect consequence and we’re nonetheless engaged on these wonderful tunings.

In the course of the intervals of community synchronization availability, the servo is consistently adjusting the frequency of the native clock on the shopper aspect (assuming the preliminary stepping resulted in convergence). A break within the community synchronization (from shedding connection to the time server or the time server itself happening) will depart the servo with a final frequency correction worth. Because of this, such worth is just not aimed to be an estimation of precision of the native clock however as an alternative a brief frequency adjustment to scale back the time error (offset) measured between the cline and the time server.

Subsequently, it’s essential to first account for synchronization loss intervals and use the perfect estimation of frequency correction (normally, the scrolling common of earlier correction values) and second, account for the error certain improve by wanting on the final correction worth and evaluating it with the scrolling common of earlier correction values.

## How we monitor the PTP structure

Monitoring is likely one of the most necessary components of the PTP structure. As a result of nature and impression of the service, we’ve spent fairly a little bit of time engaged on the tooling.

### Calnex

We labored with the Calnex workforce to create the Sentinel HTTP API, which permits us to handle, configure, and export knowledge from the gadget. At Meta, we created and open-sourced an API command line software permitting human and script pleasant interactions.

Utilizing Calnex Sentinel 2.0 we’re in a position to monitor three major metrics per time equipment — NTP, PTP, and PPS.

This permits us to inform engineers about any problem with the home equipment and exactly detect the place the issue is.

For instance, on this case each PTP and PPS monitoring resorts in a roughly lower than 100 nanosecond variation over 24 hours when NTP stays inside 8 microseconds.

### ptpcheck

With a purpose to monitor our setup, we carried out and open-sourced a software referred to as ptpcheck. It has many various subcommands, however essentially the most attention-grabbing are the next:

#### diag

Shopper subcommand gives an total standing of a ptp shopper. It studies the time of receipt of final Sync message, clock offset to the chosen time server, imply path delay, and different useful info:

``````\$ ptpcheck diag
[ OK ] GM is current
[ OK ] Interval since final ingress is 972.752664ms, we anticipate it to be inside 1s
[ OK ] GM offset is 67ns, we anticipate it to be inside 250µs
[ OK ] GM imply path delay is 3.495µs, we anticipate it to be inside 100ms
[ OK ] Sync timeout depend is 1, we anticipate it to be inside 100
[ OK ] Announce timeout depend is 0, we anticipate it to be inside 100
[ OK ] Sync mismatch depend is 0, we anticipate it to be inside 100
[ OK ] FollowUp mismatch depend is 0, we anticipate it to be inside 100
``````

#### fbclock

Shopper subcommand that permits querying of an fbclock API and getting a present Window of Uncertainty:

``````\$ ptpcheck fbclock
"earliest_ns":1654191885711023134,"latest_ns":1654191885711023828,"wou_ns":694
``````

#### sources

Chrony-style shopper monitoring, permits to see all Time Servers configured within the shopper configuration file, their standing, and high quality of time.

``````\$ ptpcheck sources
+----------+----------------------+--------------------------+-----------+--------+----------+---------+------------+-----------+--------------+
| SELECTED |       IDENTITY       |         ADDRESS          |   STATE   | CLOCK  | VARIANCE |  P1:P2  | OFFSET(NS) | DELAY(NS) |  LAST SYNC   |
+----------+----------------------+--------------------------+-----------+--------+----------+---------+------------+-----------+--------------+
| true     | abcdef.fffe.111111-1 | time01.instance.com.      | HAVE_SYDY | 6:0x22 | 0x59e0   | 128:128 |         27 |      3341 | 868.729197ms |
| false    | abcdef.fffe.222222-1 | time02.instance.com.      | HAVE_ANN  | 6:0x22 | 0x59e0   | 128:128 |            |           |              |
| false    | abcdef.fffe.333333-1 | time03.instance.com.      | HAVE_ANN  | 6:0x22 | 0x59e0   | 128:128 |            |           |              |
+----------+----------------------+--------------------------+-----------+--------+----------+---------+------------+-----------+--------------+
``````

#### oscillatord

Server subcommand, permits to learn a abstract from the Time Card.

``````\$ ptpcheck oscillatord
Oscillator:
mannequin: sa5x
fine_ctrl: 328
coarse_ctrl: 10000
lock: true
temperature: 45.33C
GNSS:
repair: Time (3)
fixOk: true
antenna_power: ON (1)
antenna_status: OK (2)
leap_second_change: NO WARNING (0)
leap_seconds: 18
satellites_count: 28
survey_in_position_error: 1
Clock:
class: Lock (6)
offset: 1
``````

For instance, we are able to see that the final correction on the Time Card was simply 1 nanosecond.

#### phcdiff

This subcommand permits us to get a distinction between any two PHCs:

``````\$ ptpcheck phcdiff -a /dev/ptp0 -b /dev/ptp2
PHC offset: -15ns
Delay for PHC1: 358ns
Delay for PHC2: 2.588µs``````

On this explicit case the distinction between Time Card and a NIC on a server is -15 nanoseconds.

### Shopper API

It’s good to set off monitoring periodically or on-demand, however we wish to go even additional. We wish to know what the shopper is definitely experiencing. To this finish, we embedded a number of buckets proper within the fbclock API based mostly on atomic counters, which increment each time the shopper makes a name to an API:

This permits us to obviously see when the shopper experiences a problem — and sometimes earlier than the shopper even notices it.

### Linearizability checks

PTP protocol (and ptp4l specifically) don’t have a quorum choice course of (not like NTP and chrony). This implies the shopper picks and trusts the Time Server based mostly on the knowledge supplied through Announce messages. That is true even when the Time Server itself is improper.

For such conditions, we now have carried out a final line of protection referred to as a linearizability verify.

Think about a state of affairs by which a shopper is configured to make use of three time servers and the shopper is subscribed to a defective Time Server (e.g., Time Server 2):

On this state of affairs, the PTP shopper will suppose all the things is ok, however the info it gives to the applying consuming time might be incorrect, because the Window of Uncertainty might be shifted and subsequently inaccurate.

To fight this, in parallel, the fbclock establishes communication with the remaining time servers and compares the outcomes. If nearly all of the offsets are excessive, this implies the server our shopper follows is the outlier and the shopper is just not linearizable, even when synchronization between Time Server 2 and the shopper is ideal.

## PTP is for at this time and the long run

We consider PTP will turn into the usual for preserving time in laptop networks within the coming many years. That’s why we’re deploying it on an unprecedented scale. We’ve needed to take a crucial have a look at our total infrastructure stack — from the GNSS antenna right down to the shopper API — and in lots of instances we’ve even rebuilt issues from scratch.

As we proceed our rollout of PTP, we hope extra distributors who produce networking tools will reap the benefits of our work to assist deliver new tools that helps PTP to the business. We’ve open-sourced most of our work, from our supply code to our {hardware}, and we hope the business will be part of us in bringing PTP to the world. All this has all been executed within the title of boosting the efficiency and reliability of the present options, but in addition with an eye fixed towards opening up new merchandise, companies, and options sooner or later.

We wish to thank everybody concerned on this endeavor, from Meta’s inner groups to distributors and producers collaborating with us. Particular thanks goes to Andrei Lukovenko, who related time lovers.

This journey is only one {679035872759b85fc1a3ab54e8d97e300f9dbd4f74a328ca23788e44a9cd2c97} completed.