Linear Leios endorser blocks: forging, propagation, acquiring, certifying

2026-11-06-20-39-a0c13-w45notxsub-value-leios-workload-all-n2n-100k1m-2i2o2w-nomadperf-dira-nom
maxEndorserBlockTxsSize limited · 100.0% full, against 98.9% of maxEndorserBlockReferencesSize

Setup

Topology

51 pools · 3 regions: AP 17, EU 17, US 17 · torus-dense · 306 producer entries = 204 links (102 reciprocated) · 153 intra-region links, 51 inter-region · every pool has 12 links of its own, 6 out and 6 in, 4 of them reciprocal, so 8 distinct partners · diameter 4, radius 4, mean shortest path 2.48 hops · peer sharing off (PeerSharing false in the node's configuration), so a node talks only and always to its listed producers

Full graph

EUUSAP

Intra-region links only

EUUSAP

Inter-region links only

EUUSAP

Node positions are identical in all three views; hover a node to highlight its links everywhere and read its degrees. Region colours: EU green, US red, AP blue. Links are drawn undirected; direction and each pool's producer list are in the adjacency table.

Adjacency table
NodeRegionOut intraOut interIn intraIn interProducers (outbound)
node-0EU4242node-1, node-2, node-3, node-48, node-15, node-33
node-1US4242node-2, node-0, node-4, node-49, node-16, node-34
node-2AP4242node-0, node-1, node-5, node-50, node-17, node-35
node-3EU4242node-4, node-5, node-6, node-0, node-18, node-36
node-4US4242node-5, node-3, node-7, node-1, node-19, node-37
node-5AP4242node-3, node-4, node-8, node-2, node-20, node-38
node-6EU4242node-7, node-8, node-9, node-3, node-21, node-39
node-7US4242node-8, node-6, node-10, node-4, node-22, node-40
node-8AP4242node-6, node-7, node-11, node-5, node-23, node-41
node-9EU4242node-10, node-11, node-12, node-6, node-24, node-42
node-10US4242node-11, node-9, node-13, node-7, node-25, node-43
node-11AP4242node-9, node-10, node-14, node-8, node-26, node-44
node-12EU4242node-13, node-14, node-15, node-9, node-27, node-45
node-13US4242node-14, node-12, node-16, node-10, node-28, node-46
node-14AP4242node-12, node-13, node-17, node-11, node-29, node-47
node-15EU4242node-16, node-17, node-18, node-12, node-30, node-48
node-16US4242node-17, node-15, node-19, node-13, node-31, node-49
node-17AP4242node-15, node-16, node-20, node-14, node-32, node-50
node-18EU4242node-19, node-20, node-21, node-15, node-33, node-0
node-19US4242node-20, node-18, node-22, node-16, node-34, node-1
node-20AP4242node-18, node-19, node-23, node-17, node-35, node-2
node-21EU4242node-22, node-23, node-24, node-18, node-36, node-3
node-22US4242node-23, node-21, node-25, node-19, node-37, node-4
node-23AP4242node-21, node-22, node-26, node-20, node-38, node-5
node-24EU4242node-25, node-26, node-27, node-21, node-39, node-6
node-25US4242node-26, node-24, node-28, node-22, node-40, node-7
node-26AP4242node-24, node-25, node-29, node-23, node-41, node-8
node-27EU4242node-28, node-29, node-30, node-24, node-42, node-9
node-28US4242node-29, node-27, node-31, node-25, node-43, node-10
node-29AP4242node-27, node-28, node-32, node-26, node-44, node-11
node-30EU4242node-31, node-32, node-33, node-27, node-45, node-12
node-31US4242node-32, node-30, node-34, node-28, node-46, node-13
node-32AP4242node-30, node-31, node-35, node-29, node-47, node-14
node-33EU4242node-34, node-35, node-36, node-30, node-48, node-15
node-34US4242node-35, node-33, node-37, node-31, node-49, node-16
node-35AP4242node-33, node-34, node-38, node-32, node-50, node-17
node-36EU4242node-37, node-38, node-39, node-33, node-0, node-18
node-37US4242node-38, node-36, node-40, node-34, node-1, node-19
node-38AP4242node-36, node-37, node-41, node-35, node-2, node-20
node-39EU4242node-40, node-41, node-42, node-36, node-3, node-21
node-40US4242node-41, node-39, node-43, node-37, node-4, node-22
node-41AP4242node-39, node-40, node-44, node-38, node-5, node-23
node-42EU4242node-43, node-44, node-45, node-39, node-6, node-24
node-43US4242node-44, node-42, node-46, node-40, node-7, node-25
node-44AP4242node-42, node-43, node-47, node-41, node-8, node-26
node-45EU4242node-46, node-47, node-48, node-42, node-9, node-27
node-46US4242node-47, node-45, node-49, node-43, node-10, node-28
node-47AP4242node-45, node-46, node-50, node-44, node-11, node-29
node-48EU4242node-49, node-50, node-0, node-45, node-12, node-30
node-49US4242node-50, node-48, node-1, node-46, node-13, node-31
node-50AP4242node-48, node-49, node-2, node-47, node-14, node-32

Latency

cardano-cli ping round trips over the node-to-node handshake, measured at cluster start by every pool against its producers: 918 samples over 6 region pairs. Milliseconds.

LinknminmedianmeanmaxSDSEMTCP connect
within AP (Sydney)2040.410.610.651.740.1660.0120.26
within EU (Frankfurt)2040.530.840.881.950.2650.0190.50
within US (N. Virginia)2040.510.730.771.720.1710.0120.37
AP ↔ EU102249.78250.41252.60266.475.0350.499252.14
AP ↔ US102206.67213.59213.99221.585.3890.534213.51
EU ↔ US10290.1791.0091.0492.400.3960.03990.55

Not an ICMP ping: cardano-cli ping opens a TCP connection and runs the node-to-node handshake, so each sample is an application-level round trip through both nodes' network stacks and mux, which is what the Cardano protocols actually experience. The TCP connect column is the bare TCP round trip from the same tool, the closest stand-in for a raw ping. SEM = SD / sqrt(n). The spread is 412x, from 0.61 ms within AP to 250.41 ms between AP and EU, and it is the floor under every interval in this report.

tx-centrifuge

The load generator, a closed-loop driver. A workload is a self-contained circuit: its own disjoint partition of funds, single-use UTxOs, its own builder turning funds into transactions, its own token-bucket rate limit, its own injection targets and its own observer following the chain. Every transaction spends funds and creates outputs, and an output becomes spendable again only once that workload's observer has seen its transaction reach the confirmation depth, so the transactions form chains gated by the chain itself and the funds budget is the buffer bridging confirmation latency. With on_exhaustion = error the generator fails the run the moment a node asks for transactions and it has none to hand over, whatever left it empty: too small an initial budget, funds not coming back from confirmation, a builder that cannot keep pace, or simply a target pulling faster than the loop can refill. It is one guard against the whole class of not keeping up, and it is loud rather than a quiet slowdown.

The generator runs on its own machine in eu-central-1, which forges nothing, so every transaction crosses the network before the pool that must place it in a block ever sees it: the round trip a workload pays is the EU row for its target's region in the table above. Each workload holds two buffers of its own, funds waiting to be built and built transactions waiting to be delivered.

1. Forging, generated load

1.1. Totals

Every EB forging found, nothing filtered. A block that lost its height battle, that was rolled away from, or that no other node ever adopted still counts.

3,291RBs forged
3,269includes EB hash
99.3%of all RBs
22no EB hash
3,261distinct EB hashes
8repeated EBs forged

By region

regionRBs forgedshare of all RBsincludes EB hashof its own RBs
AP1,06532.4%1,05999.4%
EU1,14634.8%1,14099.5%
US1,08032.8%1,07099.1%

Endorser block contents

What an endorser block holds. An endorser block is a list of (tx hash, size) references and nothing else, so its size is that list's size.

meanminp50p90maxsd
EB size (bytes)97,96815,61798,90498,90498,9046,311
EB full, of the 100,000 B reference cap98.0%15.6%98.9%98.9%98.9%6.3%
tx references per EB2,6474222,6732,6732,673170
bytes per reference37.0037.0037.0037.0037.010.00
derived closure bytes, references × 374 B990,244157,828999,702999,702999,70263,794
derived closure full, of the 1,000,000 B transaction cap99.0%15.8%100.0%100.0%100.0%6.4%

The transaction closure is what binds this run. Its transactions are 374 B each, so its largest endorser block holds 2,673 of them: 98,904 B of references against the 100,000 B cap (98.9%), and 999,702 B of transactions against the 1,000,000 B the closure allows (100.0%). The one that reaches 100% is the one that stopped the endorser block from growing.

The other run of this pair, 2026-11-09-16-29-2a1ad-w45ezenotxsu-value-leios-workload-all-n2n-100k1m-2i2o2w-nomadperf-dira-nom, is the control for exactly this: its transactions are 374 B, its largest endorser block holds 2,673 references for 98,904 B (98.9% of the reference cap), and their closure is 999,702 B (100.0% of the closure cap). With 374 B transactions the closure fills first, with 374 B transactions the closure does, off the same two caps. So the same cap binds in both, and the transaction size did not move it.

1.2. Start Leadership Check

A slot's start is fixed by the protocol, the system start plus the slot length, and everything here is measured against it. A node traces every slot it enters, so a slot with no trace is one it never entered, and each node is counted over its own window, from the first slot it entered to its last.

Forging in the slot

One value per block, from the start of its own slot to its forging: every ranking block in the first row, every forging that carries an endorser block in the second, so a hash forged twice counts twice. Section 6 measures that second stage again from the same origin but counts each hash once, at its first forging, which is why its samples are fewer.

samplesmeanminp50p75p90p99p99.9maxsd
slot start to the ranking block forged3,29162 ms1 ms30 ms35 ms45 ms586 ms3.14 s5.65 s218 ms
slot start to the EB forged, every forging3,26949 ms2 ms19 ms22 ms31 ms571 ms3.13 s5.64 s216 ms

Per node

Every row holds one value per node, counted over that node's own window, so the samples are nodes and the spread is across the cluster rather than over time.

samplesmeanminp50p75p90p99p99.9maxsd
slots in its own window5164073.964,07264,07464,07464,07564,07664,07664,0760.8
slots it entered5163979.663,95763,98263,98563,98963,99763,99763,9979.2
slots it missed5194.477931001071171171178.8
missed per 1,000 slots511.51.21.51.61.71.81.81.80.1

By region

regionnodesslots it missedmissed per 1,000 slotsmedian entry, median node
AP171,7241.61 ms
EU171,5591.41 ms
US171,5301.41 ms

1.3. Timeseries

The load as it ran, per minute: the generator's own side first, then what the nodes' mempools did with it. Every row is split, the first hour on the left and the rest of the run on the right, each half on the scale its own window needs. A region's band runs from the lowest of its 17 nodes to the highest, the line inside it is their mean and the dashed line the mean over all 51. Hover a row for the values at that minute.

Workload, tx-centrifuge

The generator's own traces: the closed loop of funds, what it delivered, how fast, and what each target asked for and did not get.

USEUAP050k100k150k(first 60 min)060100k120k140k160k246810121416 hCirculating fundsGeneratd UTxO sent minus recycled UTxO: the closed loop's stock, one series for the run, not one per node.00.50 MB1 MB1.50 MB2 MB2.50 MB(first 60 min)060010 MB20 MB30 MB246810121416 hDelivered bytesCumulative bytes each target was sent, so the slope is the delivery speed.00.50 KB/s1 KB/s1.50 KB/s(first 60 min)0600250 B/s500 B/s750 B/s246810121416 hMean delivery speedBytes delivered over time elapsed since that target's first delivery, a running mean rather than a rate per minute.01k2k3k(first 60 min)06001k2k3k246810121416 hUnserved demandCumulative transaction ids a target asked for and was not sent: what the pull side still wants.

Node mempool

The nodes' own traces: what each mempool held, how fast transactions entered and left it, and what it turned away.

USEUAP00.50 MB1 MB1.50 MB2 MB2.50 MB(first 60 min)06000.50 MB1 MB1.50 MB2 MB2.50 MB246810121416 hMempool sizeBytes held in each node's mempool.010 KB/s20 KB/s30 KB/s40 KB/s(first 60 min)06001 KB/s2 KB/s3 KB/s4 KB/s246810121416 hMean ingress speedA running mean of the bytes entering each mempool.01 KB/s2 KB/s3 KB/s(first 60 min)06000.50 KB/s1 KB/s1.50 KB/s2 KB/s2.50 KB/s246810121416 hMean egress speedA running mean of the bytes leaving each mempool, by block or by timeout.0250500750(first 60 min)06005k10k15k246810121416 hRejected transactionsCumulative transactions each node's mempool refused.

2. Propagation, fetching the EB references

Three instants are used:

Where an endorser block's hash was forged more than once, and so referenced by more than one ranking block, the first forging is the one used and the later ones are ignored: the instants this section reads are the first for that hash and node, so they belong to the first forging.

2.1. Announcing

The forger alone: from forging the endorser block to sending its first announcement of it.

samplesmeanminp50p75p90p99p99.9maxsd
Forger: forged to its first announcement3,26115 ms3 ms13 ms16 ms20 ms43 ms71 ms1.93 s34 ms

2.2. Fetching

From the forger's first announcement of the endorser block to that endorser block first arriving at a peer. Repeated deliveries of the same endorser block are counted under Activity, never timed here.

samplesmeanminp50p75p90p99p99.9maxsd
announced, to the EB arriving at a node163,0501.18 s9 ms1.09 s1.51 s1.78 s2.73 s5.41 s11.13 s550 ms

By region

samplesmeanminp50p75p90p99p99.9maxsd
Only peers in AP54,3801.28 s10 ms1.22 s1.62 s1.86 s2.92 s5.54 s9.88 s559 ms
Only peers in EU54,3031.14 s10 ms1.09 s1.41 s1.73 s2.67 s5.36 s8.96 s538 ms
Only peers in US54,3671.11 s9 ms1.05 s1.36 s1.69 s2.67 s5.39 s11.13 s536 ms
forger down / peer across (mean)APEUUS
AP854 ms1.53 s1.42 s
EU1.57 s856 ms1.09 s
US1.38 s1.04 s805 ms

Spread over the entire cluster

One value per endorser block: the delay by which that share of the other nodes had first received it, measured from the forger's first announcement as above. The 100% row holds each endorser block's slowest node, so it sits above the table of every node and endorser block.

meanminp50p75p90p99p99.9maxsd
to 30% of its peers944 ms549 ms816 ms1.08 s1.44 s1.71 s4.98 s7.16 s369 ms
to 50% of its peers1.16 s636 ms1.09 s1.45 s1.64 s2.06 s5.15 s7.44 s398 ms
to 75% of its peers1.46 s712 ms1.38 s1.67 s1.86 s2.58 s5.39 s7.86 s403 ms
to 90% of its peers1.62 s734 ms1.54 s1.90 s2.19 s2.92 s6.65 s8.24 s499 ms
to 100% of its peers2.04 s816 ms1.90 s2.35 s3.03 s4.99 s9.30 s11.13 s859 ms

2.3. Activity

The same events counted instead of timed, and counted per peer and endorser block: for one endorser block, how many announcements that peer sent out, and how many times it fetched the endorser block. Anything above one is a repeat the protocol paid for. The two announcement figures below count every node, each forger's own sends included; the regional table counts the receiving peers only, which is why its rows add to one node less.

306.8announcements per EB, every node, the forger too
6.01announcements per EB, per node
80.6fetches per EB, all peers
1.61fetches per EB, per peer

Times a node fetched the same endorser block

Inbound: the node pulling the endorser block from a peer. One means it fetched it once, more than one means it fetched the same endorser block again.

times it fetched itcasesshare of cases
1 time111,15968.2%
2 times24,03614.7%
3 times14,5658.9%
4 times or more13,2908.2%

By region

regioncasesannouncements sentper casefetchesper caserepeats
AP54,380327,0836.01105,2131.9348.3%
EU54,303326,5986.0179,7361.4731.9%
US54,367327,0186.0277,9251.4330.2%

3. Acquiring, the EB written down

A delivered endorser block is not yet held: until its write is durable the body still reads as not-held, which is why the same endorser block can be fetched again meanwhile. Consensus.LeiosKernel.BlockAcquired is the moment that ends: the node has the reference list stored and claims to hold it, registering which referenced transactions it still needs. This is the step from arrival to that claim, which includes waiting for the single writer, and how often the same endorser block was stored again.

3.1. Writing

samplesmeanminp50p75p90p99p99.9maxsd
the EB arriving, to the node writing it163,05049 ms7 ms40 ms51 ms89 ms125 ms540 ms2.74 s58 ms

By region

samplesmeanminp50p75p90p99p99.9maxsd
Only peers in AP54,38050 ms7 ms41 ms53 ms88 ms130 ms754 ms2.74 s63 ms
Only peers in EU54,30349 ms7 ms40 ms51 ms91 ms123 ms262 ms2.34 s55 ms
Only peers in US54,36748 ms8 ms39 ms49 ms87 ms122 ms520 ms2.23 s56 ms
forger down / peer across (mean)APEUUS
AP51 ms50 ms49 ms
EU50 ms49 ms45 ms
US49 ms48 ms48 ms

Spread over the entire cluster

One value per endorser block: the delay by which that share of the other nodes had first stored it, each measured from that node's own fetch of the endorser block. The 100% row holds each endorser block's slowest node, so it sits above the table of every node and endorser block.

meanminp50p75p90p99p99.9maxsd
to 30% of its peers39 ms10 ms35 ms39 ms51 ms90 ms92 ms94 ms15 ms
to 50% of its peers46 ms10 ms40 ms44 ms87 ms93 ms95 ms105 ms18 ms
to 75% of its peers54 ms11 ms47 ms55 ms92 ms101 ms127 ms140 ms20 ms
to 90% of its peers63 ms12 ms53 ms72 ms97 ms131 ms167 ms197 ms23 ms
to 100% of its peers162 ms15 ms74 ms117 ms166 ms2.06 s2.34 s2.74 s348 ms

3.2. Activity

Counted per peer and endorser block, like section 2: how many times a peer wrote the same endorser block down. This one is local, nothing crosses the network.

60.0writes per EB, all peers
1.20writes per EB, per peer

Times a node wrote the same endorser block

times it was writtencasesshare of cases
1 time139,11585.3%
2 times16,43410.1%
3 times6,3533.9%
4 times or more1,1480.7%

By region

regioncaseswritesper case
AP54,38067,3571.24
EU54,30364,1871.18
US54,36764,1211.18

4. Closures, the transactions an EB references

An endorser block is a list of references. The transactions themselves are a separate transfer, and a node has the closure once it holds all of them: Consensus.LeiosKernel.BlockTxsAcquired. Counted per peer and endorser block, on the same endorser blocks as sections 2 and 3.

4.1. Obtaining

samplesmeanminp50p75p90p99p99.9maxsd
EB fetched to the closure obtained163,050787 ms8 ms644 ms1.01 s1.29 s2.15 s4.02 s10.35 s426 ms

A voter has until 7 s after the announcing block's slot onset to hold and validate the transactions: lHdrWait 3 s then lVoteWindow 4 s, both fixed in LeiosVoting.hs rather than read from genesis. 215 of 163,050 closures were obtained later than that, counted from that slot's own start.

By region

samplesmeanminp50p75p90p99p99.9maxsd
Only peers in AP54,380793 ms8 ms655 ms1.04 s1.35 s2.28 s4.33 s6.74 s484 ms
Only peers in EU54,303798 ms11 ms673 ms1.01 s1.23 s1.96 s3.67 s10.35 s375 ms
Only peers in US54,367771 ms11 ms604 ms994 ms1.23 s2.07 s4.03 s10.31 s410 ms
forger down / peer across (mean)APEUUS
AP427 ms827 ms752 ms
EU1.08 s780 ms942 ms
US826 ms787 ms598 ms

Spread over the entire cluster

One value per endorser block: the delay by which that share of the other nodes had first obtained the closure, each measured from that node's own fetch of the endorser block. The 100% row holds each endorser block's slowest node, so it sits above the table of every node and endorser block.

meanminp50p75p90p99p99.9maxsd
to 30% of its peers626 ms14 ms551 ms643 ms978 ms1.24 s3.59 s4.20 s248 ms
to 50% of its peers771 ms18 ms721 ms959 ms1.12 s1.55 s4.00 s4.44 s303 ms
to 75% of its peers941 ms27 ms937 ms1.16 s1.42 s1.80 s4.45 s5.14 s377 ms
to 90% of its peers1.08 s34 ms1.03 s1.34 s1.62 s2.22 s4.66 s5.60 s454 ms
to 100% of its peers1.55 s41 ms1.40 s1.97 s2.52 s3.76 s6.72 s10.35 s750 ms

4.2. Activity

50.0closures per EB, all peers
1.00closures per EB, per peer
0obtained more than once
0never obtained

Times a node obtained the same closure

times it obtained itcasesshare of cases
1 time163,050100.0%
2 times00.0%
3 times00.0%
4 times or more00.0%

By region

regioncasesclosures obtainedper case
AP54,38054,3801.00
EU54,30354,3031.00
US54,36754,3671.00

4.3. Body hits

When a node takes an endorser block it checks the transactions it names against its own mempool, and the kernel reports what it found (Consensus.LeiosKernel.BodyHits): one case per peer and endorser block, 166,311 of them over 3,261 endorser blocks.

Both rows are the same division: transactions the node had, over transactions the block names. For several cases together, add the tops, add the bottoms, divide once.

Do not add the two rows. Held in the mempool plus fetched is already all of them, in every one of the 166,311 cases, so the cache row counts transactions the mempool already had.

samplesmeanminp50p75p90p99p99.9maxsd
tracked in the cache166,31166.4%0.0%68.9%83.4%92.3%98.6%100.0%100.0%21.1%
held in the mempool166,31124.2%0.0%13.2%31.1%75.2%100.0%100.0%100.0%28.1%

One case is one peer and one endorser block, and the share is against that block's own reference list, 2,673 references at the median.

By region

region of the checking nodetracked in the cacheheld in the mempool
AP66.4%34.5%
EU66.4%11.7%
US66.4%26.5%

Forger region against peer region tracked in the cache / held in the mempool

forger down / peer acrossAPEUUS
AP71.2% / 78.2%71.2% / 8.0%71.3% / 14.7%
EU59.8% / 9.2%59.8% / 18.7%59.8% / 10.2%
US68.6% / 18.0%68.6% / 8.1%68.6% / 55.3%

Each cell is for endorser blocks forged in the row's region and checked by a node in the column's, so the diagonal is same-region. Both shares are totals over totals, every case of that pair pooled, not a mean of the cases.

Timeseries

The same shortfall over the run, per minute. The first chart is one dot per endorser block, the share of what it named that its peers were missing. The other three take the peers of one region and split that share by the forger's region: each line is that minute's cases pooled and the band runs from the lowest of the seventeen peers to the highest. Hover a row for the values at that minute.

USEUAP0%25%50%75%100%(first 60 min)0600%25%50%75%100%246810121416 hwhole run 75.8%Closure missing, per EBOne dot per endorser block: the transactions its peers were missing over all the ones they needed0%25%50%75%100%(first 60 min)0600%25%50%75%100%246810121416 hClosure missing, per peer EUPeers in Frankfurt: the share they were missing that minute, by the forger's region0%25%50%75%100%(first 60 min)0600%25%50%75%100%246810121416 hClosure missing, per peer USPeers in N. Virginia: the share they were missing that minute, by the forger's region0%25%50%75%100%(first 60 min)0600%25%50%75%100%246810121416 hClosure missing, per peer APPeers in Sydney: the share they were missing that minute, by the forger's region

5. Certifying

5.1. Totals

Counted on the blocks the whole cluster took. A block qualifies when all 50 nodes other than its forger adopted it, every peer it has of the 51 in the cluster: 3,174 of the run's 3,291 walkable blocks. Both sides of the ratio are held to it, so an announcement made by a block only part of the cluster held, and a certificate carried by one, are both out. No battle or fork filter is applied: nothing here asks what happened at a contested height. The blocks come from every forging the logs can place on a chain, both sides of a fork included, and the test above is adoption by every peer, not having won the height.

3,144EBs announced
816certificate carried
26.0%of announcements
2,328never carried

By region

region of the announcerEBs announcedcertifiedshare
AP1,02231230.5%
EU1,08720719.0%
US1,03529728.7%

5.2. What happened to every endorser block

Hover a stage for what it counts and which trace says so. The stages down to Never reached quorum count endorser blocks; the rows under it count voter decisions, one per trace event, which is why they sum past 100%. Nothing is gated here, not even the run's opening epochs: every endorser block any ranking block announced is counted, which is why this table is wider than the cards above. 117 endorser blocks were announced only by blocks that part of the cluster never adopted, and the two carried counts differ by 0, certificates whose carrier was not adopted by every peer. tooLate is the voter's own refusal, counted once per voter and endorser block and only on the ones that never reached quorum: a node logs it when the window had already shut before it began, whether or not it ever held the transactions, so it is not section 4's late closures.

stagecount% of announced% of its groupgroupvotes received
Endorser blocks announced3,261100.0%···
    A voting window opened3,261100.0%···
Reached quorum1,39642.8%··39–51 of 51, median 50
    Certificate carried by a later block81625.0%58.5%reached quorum·
    Quorum reached, never carried58017.8%41.5%reached quorum·
Never reached quorum1,86557.2%··0–38 of 51, median 9
    voters declined: chainTipDoesNotAnnounce17,575·18.5%no-quorum voters·
    voters declined: tooLate56,472·59.3%no-quorum voters·
    voters voted for it anyway21,154·22.2%no-quorum voters·

6. Against the slot clock

6.1. RBs

Every ranking block against every peer that adopted it: from the block's slot start to that peer's own adoption, one value per pair. Nothing here is a per-block figure, so a block the whole cluster took contributes as many values as it had peers.

Adoptions

samplesmeanminp50p75p90p99p99.9maxsd
all blocks161,459738 ms6 ms653 ms975 ms1.20 s2.75 s7.71 s16.52 s603 ms
blocks carrying a certificate41,378560 ms140 ms511 ms704 ms749 ms1.14 s3.04 s4.89 s251 ms
blocks carrying none120,081799 ms6 ms758 ms1.06 s1.33 s3.03 s8.01 s16.52 s673 ms

Left out: 1,647 block and peer pairs the block never reached, and 1,444 with no adoption instant.

Spread over the entire cluster

One value per ranking block: the delay by which that share of its own peers had adopted it, from the block's slot start. One table per population, named in its first column.

all blocksmeanminp50p75p90p99p99.9maxsd
to 30% of its peers422 ms16 ms326 ms415 ms728 ms2.07 s6.44 s8.23 s486 ms
to 50% of its peers751 ms147 ms547 ms930 ms1.15 s2.46 s6.70 s8.72 s511 ms
to 75% of its peers1.02 s155 ms966 ms1.07 s1.37 s2.83 s7.99 s9.54 s539 ms
to 90% of its peers1.08 s155 ms1.03 s1.11 s1.52 s3.15 s8.53 s10.91 s615 ms
to 100% of its peers1.34 s155 ms1.09 s1.41 s2.40 s4.89 s10.58 s16.52 s962 ms
blocks carrying a certificatemeanminp50p75p90p99p99.9maxsd
to 30% of its peers384 ms173 ms375 ms392 ms407 ms743 ms2.77 s2.77 s152 ms
to 50% of its peers561 ms289 ms502 ms662 ms693 ms926 ms3.02 s3.02 s182 ms
to 75% of its peers715 ms308 ms710 ms736 ms749 ms992 ms3.09 s3.09 s168 ms
to 90% of its peers739 ms313 ms732 ms759 ms774 ms1.09 s3.17 s3.17 s176 ms
to 100% of its peers984 ms327 ms771 ms801 ms2.27 s3.06 s4.89 s4.89 s623 ms
blocks carrying nonemeanminp50p75p90p99p99.9maxsd
to 30% of its peers435 ms16 ms219 ms564 ms881 ms2.44 s6.46 s8.23 s556 ms
to 50% of its peers817 ms147 ms659 ms959 ms1.26 s2.63 s7.12 s8.72 s569 ms
to 75% of its peers1.12 s155 ms1.05 s1.10 s1.48 s3.01 s8.14 s9.54 s581 ms
to 90% of its peers1.20 s155 ms1.08 s1.21 s1.61 s3.42 s8.83 s10.91 s666 ms
to 100% of its peers1.47 s155 ms1.12 s1.55 s2.52 s5.32 s10.61 s16.52 s1.03 s

6.2. EBs

The same stages as the sections above, each from the start of the slot the endorser block belongs to instead of from the stage before it, so they read against each other and against the protocol's windows. A slot is 1.00 s.

A row naming each peer holds one value per peer and endorser block, never the first peer alone; one naming the last peer holds one per endorser block, that block's slowest. Every endorser block the run forged is in, counted once.

samplesmeanminp50p75p90p99p99.9maxsd
to the endorser block forged3,26149 ms2 ms19 ms22 ms31 ms571 ms3.13 s5.64 s216 ms
to the forger's announcement3,26165 ms6 ms32 ms37 ms50 ms602 ms3.14 s5.65 s219 ms
to each peer's references163,0501.24 s24 ms1.13 s1.57 s1.89 s3.18 s6.24 s11.91 s603 ms
to the last peer's references3,2612.10 s842 ms1.97 s2.43 s3.13 s5.34 s9.46 s11.91 s918 ms
to each peer's closure163,0502.03 s72 ms1.91 s2.44 s2.94 s4.50 s7.30 s15.30 s790 ms
to the last peer's closure3,2613.21 s1.59 s3.20 s3.69 s4.24 s6.64 s11.92 s15.30 s1.06 s

A stage past 1.00 s is a stage the next slot had already begun. 15 of 3,261 endorser blocks were forged past it and 16 announced past it, and 3,258 of them reached their last peer past it.

By region

samplesmeanminp50p75p90p99p99.9maxsd
to each peer's references, only peers in AP54,3801.35 s27 ms1.27 s1.67 s1.96 s3.31 s6.57 s11.56 s610 ms
to each peer's references, only peers in EU54,3031.21 s29 ms1.13 s1.52 s1.86 s3.08 s6.19 s9.07 s592 ms
to each peer's references, only peers in US54,3671.18 s24 ms1.09 s1.48 s1.80 s3.10 s6.26 s11.91 s594 ms
to each peer's closure, only peers in AP54,3802.14 s72 ms2.08 s2.69 s3.15 s4.70 s7.38 s15.30 s882 ms
to each peer's closure, only peers in EU54,3032.00 s72 ms1.86 s2.27 s2.86 s4.29 s7.20 s13.01 s718 ms
to each peer's closure, only peers in US54,3671.95 s77 ms1.83 s2.29 s2.80 s4.40 s7.29 s13.78 s746 ms

7. Forks

Every time a node abandoned a chain it already had for a better one, counted once for each node that did it (ChainDB.AddBlockEvent.SwitchedToAFork). A contest is one pair of tips, so a contest the whole cluster lived through counts once. Both rates below are contests per 1,000 blocks on the chain, so runs of different length compare directly.

24.8 expected from activeSlotsCoeff 0.05slot27.0height10.30102030

The slot rate is the control and the height rate is the signal: two leaders in one slot is fixed by activeSlotsCoeff and cannot be engineered away, while a height battle is a node forging on a parent a sibling already had, which is propagation losing a race and is free to move. Reading the height rate without the control beside it cannot tell a propagation regression from a run that simply drew more forks.

7.1. What the nodes paid

74.2switches per node
64 to 85fewest to most, one node
27.0slot battles per 1,000 chain blocks
10.3height battles per 1,000 chain blocks