Skip to main content

AI and HPC payloads

Distributed training traffic runs on this network in operation, so the model treats it as a primary payload alongside IP transit.

Two of the four findings below are negative. Modelling reach and latency as data is what produces a negative answer at all: a model that assumes them can only report what works.

What is real, and what is illustrative​

Real. GÉANT runs a EuroHPC HyperConnectivity programme that interconnects European supercomputing sites. The network modelled here is, in operation, an AI and HPC transport network.

Real. 400ZR, OpenZR+ and 800ZR are published standards, not vendor marketing. 400ZR is an OIF Implementation Agreement; OpenZR+ is a multi-source agreement. All three exist specifically to carry high-bandwidth traffic between compute sites as IP over DWDM, with the coherent optics in the router's own pluggable and no separate transponder.

Real. Distributed training is latency-bound and not only bandwidth-bound. All-reduce collectives wait for the slowest peer, so round-trip time sets the pace of the whole job. Fiber propagation sets the floor on round-trip time at 4897 ns per kilometre in G.652 at 1550 nm.

Illustrative. Which supercomputing facility attaches to which modelled point of presence, the specific span lengths, and the reach and OSNR figures in the mode catalog. They are representative of their classes. Every conclusion below survives a change to any of them, and each section says why.

The compute sites in the model​

FacilityLocationModelled attachment
JUPITERJülich, GermanyFrankfurt
LeonardoBologna, ItalyMilan
MareNostrum 5Barcelona, SpainMadrid
KarolinaOstrava, CzechiaPrague
MeluXinaLuxembourgBrussels
VegaMaribor, SloveniaVienna

LUMI in Kajaani is deliberately absent. Finland is outside the fourteen PoPs, and inventing a point of presence to hold it would misrepresent the topology.

Latency is computed, never declared​

propagation_delay_ns = length_m * group_index_milli * 1_000_000 / C_M_PER_S

group_index_milli is 1468 for G.652 at 1550 nm and lives on the fiber type, not in the code, because G.654 and G.655 differ and the difference is measurable over 1000 km. ROADM, amplifier and forward error correction latency add on top, and the running total lands on each path hop next to cumulative loss and OSNR.

OtnService.service_profile is what decides whether a service has a latency budget at all. ai-training-dci, ai-inference and hpc-research carry max_latency_ns; ip-transit and legacy-sdh leave it null, and the latency report says how many services it excluded for that reason.

The ZR catalog​

ModeRateRequired OSNRNominal reachFECFEC latency
400ZR400G26.0 dB120 kmcFEC5 µs
OpenZR+ 400G400G23.0 dB1000 kmoFEC9 µs
OpenZR+ 300G300G20.5 dB2000 kmoFEC9 µs
OpenZR+ 200G200G17.5 dB3000 kmoFEC9 µs
800ZR800G29.0 dB120 kmcFEC5 µs

Only transponder modes are provisionable in this model. A ZR wavelength originates in the router's own pluggable, and every router port in the loaded dataset is grey: no centre frequency, -2 dBm launch, LC connector. The catalog rows above exist to be reported on, and the selector filters them out as equipment rather than discovering them as a dispersion failure.

Negative result one: 400ZR reaches nothing here​

Both 120 km parts reach zero of twenty-one optical multiplex sections.

The shortest section in the whole topology is Amsterdam to Brussels at 220 km. A 400ZR falls 100 km short of the easiest section in the network, and an 800ZR falls exactly as far short. The ordering holds if the reach figure moves by a few tens of kilometres, because the next shortest sections are 320 km and 330 km.

$ uv run invoke demo-reach --branch probe

400ZR, 800ZR reach nothing on this network. The shortest optical multiplex
section is oms-ams-bru at 220.000 km, and every one of these parts is rated
120.000 km.

That is the answer a planner wants before ordering pluggables, and it is visible only because reach is modelled data rather than an assumption. The same report shows where the parts that do reach can go: OpenZR+ 400G covers twenty of twenty-one sections, missing only Paris to Madrid at 1250 km.

Reach is not the budget. A mode whose catalog reach covers a section can still miss the OSNR margin over that section's amplifier chains. The reach report answers whether the part is worth ordering; budget_report computes whether the wavelength closes, once in each direction of travel. Every row in the reach report says so, because conflating the two would let the report claim something it did not compute.

Negative result two: forward error correction does not drive route selection​

Stronger error correction buys reach and costs latency, which suggests an optimal route that depends on which of the two a service needs more. On this network the arithmetic removes the choice.

Frankfurt to Milan is 780 km of fiber, which is 3819.441 µs of propagation. Everything the electronics contribute, measured end to end on the provisioned service, is 5.300 µs. Straight out of ai_latency on the demo branch:

ServiceLengthPropagationTotalElectronicsShare
Frankfurt to Geneva590 km2889.065 µs2894.165 µs5.100 µs0.18 %
Frankfurt to Milan780 km3819.441 µs3824.741 µs5.300 µs0.14 %
Vienna to Milan800 km3917.380 µs3922.680 µs5.300 µs0.14 %
Amsterdam to Milan1250 km6120.901 µs6127.051 µs6.150 µs0.10 %

The propagation column is summed span by span, each at its own fiber type's group index, rather than computed once over the total length. On this plant every span is G.652.D so the two agree to within a nanosecond of rounding, and the sum is what stays correct the day a G.654 span appears.

The strongest correction in the catalog, oFEC at 9 µs, would still be 0.24 percent of the Frankfurt to Milan propagation. At continental distances propagation dominates by three orders of magnitude, so the OSNR-optimal route and the latency-optimal route are both the shortest route, and there is no trade-off to exploit.

Modelling FEC latency was still worth doing. It is what let the model rule the trade-off out by measurement rather than by assumption.

The tension that is real: capacity against latency​

The shortest route fills up. The next route is longer, and distance is latency at 4897 ns per kilometre.

Frankfurt to Milan direct is 780 km. Routed via Geneva it is 990 km, and the detour costs 1,028,312 ns of extra propagation, 27 percent of the direct route's own delay from a single diversion. End to end, through the budget engine, the penalty is 1028.864 µs: 552 ns more than the propagation figure, from two extra ROADMs and four extra amplifiers.

Against a four millisecond one-way budget:

RouteOne wayVerdict
Direct, 780 km3824.741 µsPasses, 175.259 µs to spare
Via Geneva, 990 km4853.605 µsFails by 853.605 µs

Propagation delay is the same both ways, so one figure covers a route. Loss and OSNR are not: a section carries an amplifier chain per direction, and a span with a Raman pump on it costs less one way and more the other.

Four milliseconds is the number that separates them, and the finding depends on it. At five milliseconds both routes pass and there is nothing to report, which is why the budget belongs on the service object as data a reader can check.

The direct corridor holds 4,134,400 MHz of its 4,800,000 MHz C-band in the shipped dataset, so a new 400G fits today, but only once. The corridor has capacity and no alternative:

665,600 MHz is free on the only latency-compatible route between these two compute sites, and exactly one of the 96 anchors, channel 95, can centre a 400G carrier inside a single free block. Dividing free spectrum by carrier width would have promised eight. When that anchor is gone there is no second route, because the only other one costs 1028 µs and puts the budget out of reach by 848. Capacity anywhere else in the network does not substitute for it.

When they are gone, the corridor is congested rather than closed. A 400G service needs a whole ODUC4, all 320 tributary slots of a wavelength, so for this service the last usable block of spectrum and the last wavelength are the same thing. A smaller client is not in that position: a 100GBASE-LR4 needs 80 slots and grooms into a wavelength somebody has already lit, which consumes no spectrum at all. demo/90_fra_mil_saturated.yml runs both requests against the same exhausted corridor and gets opposite answers, and the provisioning scenarios walks through them. The honest statement about a full corridor names the layer: no new wavelength can be lit on it, and whether a circuit fits depends on how big the circuit is.

A regenerator is a latency term, and a large one​

The FEC correction above is small enough to be ruled out by measurement. The framing delay at an O-E-O regenerator is not, because it comes with a second half of route attached to it.

A circuit split at a regenerator pays for both segments plus what the junction charges for reframing, which framing_latency_ns holds on the device. Madrid to Warsaw takes 14,558,963 ns end to end against 9,163,620 ns for its Madrid to Frankfurt half alone. So a chain is the last thing a latency-bound payload should want, and the routing engine ranks a direct wavelength above one wherever both serve the route.

Madrid to Warsaw takes the chain because it has no direct wavelength that closes on any of the ten modes. That is the only condition under which a chain wins, and it is a reach problem being paid for in latency. A service on that route with a tight max_latency_ns would be refused on the budget rather than quietly given the slow answer.

Diversity is reported, and separately enforced when it was promised​

A training cluster split across two sites cannot tolerate a single fiber cut. Two services on two different routes look diverse on a map, and if their spans share a conduit, one backhoe cuts both.

srlg_exposure answers that from the conduit model. On the demo dataset it finds five non-diverse pairs among five services, every one of them between two latency-sensitive services. The instructive one is Frankfurt to Geneva against Amsterdam to Milan: no shared section, no shared ROADM, no shared city pair, and they share cd-fra-south out of Frankfurt.

Protection switching itself is out of scope. Reporting the exposure is cheap; building restoration is a different demo.

The declared case does block a merge. Put two services in an OtnDiversityGroup and checks/diversity.py fails the proposed change when their routes share a duct. It stays silent about every pair above, because nobody promised anything about them and an operator may have accepted the exposure deliberately. Reporting and enforcing are two questions, and only the second one has an answer worth blocking on.

Where the numbers come from​

Every figure above is produced by the loaded dataset and asserted by a test, so retuning the plant fails a test rather than quietly falsifying a document.

ClaimTest
4897 ns per kilometre, and the two Frankfurt to Milan delaystests/unit/test_units.py
The 1,028,312 ns propagation penaltytests/unit/test_routing_claims.py
The four rows of the electronics-share tabletests/unit/test_routing_claims.py
The end-to-end delays and the four millisecond verdictstests/unit/test_routing_claims.py
220 km is the unique shortest sectiontests/unit/test_impact_claims.py
Both 120 km parts reach zero sectionstests/unit/test_budget_claims.py
Every span is G.652.D, so the propagation split is exacttests/unit/test_impact_claims.py