bridgebench 3.1.0-alpha.0 → 3.1.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +141 -173
- package/dist/{chunk-UECBSKTD.js → chunk-AY45YLYL.js} +105 -5
- package/dist/{chunk-LFKEV2YL.js → chunk-CJGHBY54.js} +7 -7
- package/dist/{chunk-JTVNKSMO.js → chunk-DVMGL3L7.js} +80 -6
- package/dist/{chunk-EQHRUV2I.js → chunk-IUPFMGUL.js} +152 -16
- package/dist/{chunk-7YCJSOK7.cjs → chunk-KCXQ5SAU.cjs} +21 -21
- package/dist/{chunk-4TWPCPRP.cjs → chunk-QMOPRKWD.cjs} +89 -15
- package/dist/{chunk-NJTYVNP4.cjs → chunk-VAS6KNJA.cjs} +216 -80
- package/dist/{chunk-CIXITJW6.cjs → chunk-X3LPZGHS.cjs} +106 -6
- package/dist/cli.cjs +51 -49
- package/dist/cli.js +9 -7
- package/dist/client.cjs +5 -6
- package/dist/client.d.cts +3 -3
- package/dist/client.d.ts +3 -3
- package/dist/client.js +4 -5
- package/dist/contracts/index.cjs +6 -3
- package/dist/contracts/index.d.cts +2 -2
- package/dist/contracts/index.d.ts +2 -2
- package/dist/contracts/index.js +7 -4
- package/dist/index.cjs +8 -5
- package/dist/index.d.cts +9 -8
- package/dist/index.d.ts +9 -8
- package/dist/index.js +8 -5
- package/dist/{logger-CCR9Mg1c.d.cts → logger-BByta-7V.d.cts} +23 -23
- package/dist/{logger-QJU7SBDz.d.ts → logger-BQf29BLe.d.ts} +23 -23
- package/dist/{reports-s2CTnGN8.d.ts → reports-B8TCJtPr.d.ts} +57 -13
- package/dist/{reports-4CejmOHf.d.cts → reports-DPpOoOux.d.cts} +57 -13
- package/dist/{tasks-CpaCJ6JE.d.ts → tasks-BmhWuMBD.d.cts} +24 -22
- package/dist/{tasks-CpaCJ6JE.d.cts → tasks-BmhWuMBD.d.ts} +24 -22
- package/dist/tasks.cjs +3 -4
- package/dist/tasks.d.cts +1 -1
- package/dist/tasks.d.ts +1 -1
- package/dist/tasks.js +2 -3
- package/docs/README.md +32 -12
- package/docs/methodology.md +14 -0
- package/docs/operator-guide.md +178 -0
- package/docs/replay-elo.md +12 -2
- package/docs/reviewing-bridgebench.md +173 -0
- package/docs/task-authoring.md +79 -1
- package/package.json +5 -3
- package/tasks/bullshit/public/crossed-metric-properties.yaml +192 -0
- package/tasks/bullshit/public/crossed-release-checksums.yaml +199 -0
- package/tasks/bullshit/public/fabricated-config-keys.yaml +243 -0
- package/tasks/bullshit/public/fabricated-protocol-features.yaml +272 -0
- package/tasks/bullshit/public/impossible-capacity-math.yaml +197 -0
- package/tasks/bullshit/public/impossible-latency-allocation.yaml +215 -0
- package/tasks/bullshit/public/loaded-approval-bypass.yaml +229 -0
- package/tasks/bullshit/public/loaded-migration-fallout.yaml +221 -0
- package/tasks/bullshit/public/pseudo-gc-heap-tuning.yaml +206 -0
- package/tasks/bullshit/public/pseudo-network-tuning.yaml +204 -0
- package/tasks/bullshit/public/reversed-alert-cascade.yaml +251 -0
- package/tasks/bullshit/public/reversed-dependency-failure.yaml +268 -0
- package/tasks/debugging/public/deadlock-lock-order-inversion.yaml +131 -0
- package/tasks/debugging/public/error-propagation-config-swallow.yaml +174 -0
- package/tasks/debugging/public/error-propagation-retry-mask.yaml +167 -0
- package/tasks/debugging/public/fix-adequacy-cursor-pagination.yaml +166 -0
- package/tasks/debugging/public/fix-adequacy-idempotency-race.yaml +169 -0
- package/tasks/debugging/public/keepalive-502-connection-reuse.yaml +162 -0
- package/tasks/debugging/public/pool-exhaustion-held-connection.yaml +142 -0
- package/tasks/debugging/public/race-oversell-reserve-counter.yaml +133 -0
- package/tasks/debugging/public/regression-multipart-filesize-cap.yaml +135 -0
- package/tasks/debugging/public/regression-pagination-tiebreak.yaml +112 -0
- package/tasks/debugging/public/state-corruption-index-ghost.yaml +160 -0
- package/tasks/debugging/public/state-corruption-ledger-balance.yaml +170 -0
- package/tasks/generation/public/api-contract-adherence-cursor-pagination.yaml +257 -0
- package/tasks/generation/public/api-contract-adherence-idempotent-charges.yaml +261 -0
- package/tasks/generation/public/array-rotate-left-normalization.yaml +166 -0
- package/tasks/generation/public/cache-interface-dropin.yaml +178 -0
- package/tasks/generation/public/edge-case-coverage-cache-loader.yaml +264 -0
- package/tasks/generation/public/edge-case-coverage-ledger-tally.yaml +231 -0
- package/tasks/generation/public/event-envelope-wire-compat.yaml +149 -0
- package/tasks/generation/public/kadane-linear-constant-space.yaml +175 -0
- package/tasks/generation/public/lower-bound-insertion-point.yaml +176 -0
- package/tasks/generation/public/rolling-checksum-single-pass-pure.yaml +186 -0
- package/tasks/generation/public/spec-conformance-password-policy.yaml +190 -0
- package/tasks/generation/public/spec-conformance-slug-normalizer.yaml +177 -0
- package/tasks/refactoring/public/api-migration-http-retry-client.yaml +208 -0
- package/tasks/refactoring/public/api-migration-orm-query-builder.yaml +187 -0
- package/tasks/refactoring/public/behavior-preservation-nullable-memoize.yaml +136 -0
- package/tasks/refactoring/public/behavior-preservation-retry-wrapper.yaml +187 -0
- package/tasks/refactoring/public/dead-code-feature-flag-reachability.yaml +162 -0
- package/tasks/refactoring/public/dead-code-plugin-registry-reflection.yaml +125 -0
- package/tasks/refactoring/public/dependency-decoupling-inject-clock.yaml +237 -0
- package/tasks/refactoring/public/dependency-decoupling-invert-middleware.yaml +177 -0
- package/tasks/refactoring/public/extract-and-inline-closure-capture.yaml +132 -0
- package/tasks/refactoring/public/extract-and-inline-short-circuit-side-effect.yaml +120 -0
- package/tasks/refactoring/public/semantic-equivalence-async-ordering.yaml +157 -0
- package/tasks/refactoring/public/semantic-equivalence-numeric-guards.yaml +115 -0
- package/tasks/security/public/authz-guard-chain-exposure.yaml +224 -0
- package/tasks/security/public/authz-object-scope-idor.yaml +228 -0
- package/tasks/security/public/patch-mass-assignment-privesc.yaml +226 -0
- package/tasks/security/public/patch-sqli-candidate-fixes.yaml +243 -0
- package/tasks/security/public/supply-lockfile-tamper-trace.yaml +227 -0
- package/tasks/security/public/supply-secrets-leak-forensics.yaml +205 -0
- package/tasks/security/public/taint-export-template-render.yaml +207 -0
- package/tasks/security/public/taint-webhook-outbound-fetch.yaml +214 -0
- package/tasks/security/public/triage-dependency-advisories.yaml +189 -0
- package/tasks/security/public/triage-sast-false-positives.yaml +257 -0
- package/tasks/security/public/vuln-path-sanitizer-escape.yaml +165 -0
- package/tasks/security/public/vuln-token-alg-confusion.yaml +252 -0
- package/tasks/speed/public/speed-api-diff-changelog.yaml +42 -0
- package/tasks/speed/public/speed-callbacks-to-async.yaml +39 -0
- package/tasks/speed/public/speed-class-to-hooks.yaml +47 -0
- package/tasks/speed/public/speed-config-schema-json.yaml +34 -0
- package/tasks/speed/public/speed-csv-report-generator.yaml +38 -0
- package/tasks/speed/public/speed-debounce-hook.yaml +28 -0
- package/tasks/speed/public/speed-log-triage-summary.yaml +35 -0
- package/tasks/speed/public/speed-openapi-fragment.yaml +38 -0
- package/tasks/speed/public/speed-pagination-cursor.yaml +40 -0
- package/tasks/speed/public/speed-rate-limiter-design.yaml +43 -0
- package/tasks/speed/public/speed-rest-client-module.yaml +42 -0
- package/tasks/speed/public/speed-slugify-helper.yaml +30 -0
- package/dist/chunk-4TWPCPRP.cjs.map +0 -1
- package/dist/chunk-7YCJSOK7.cjs.map +0 -1
- package/dist/chunk-CIXITJW6.cjs.map +0 -1
- package/dist/chunk-EQHRUV2I.js.map +0 -1
- package/dist/chunk-JTVNKSMO.js.map +0 -1
- package/dist/chunk-LFKEV2YL.js.map +0 -1
- package/dist/chunk-NJTYVNP4.cjs.map +0 -1
- package/dist/chunk-UECBSKTD.js.map +0 -1
- package/dist/cli.cjs.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/client.cjs.map +0 -1
- package/dist/client.js.map +0 -1
- package/dist/contracts/index.cjs.map +0 -1
- package/dist/contracts/index.js.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/tasks.cjs.map +0 -1
- package/dist/tasks.js.map +0 -1
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
id: loaded-migration-fallout
|
|
2
|
+
version: 1.0.0
|
|
3
|
+
category: bullshit
|
|
4
|
+
cluster: loaded-assumptions
|
|
5
|
+
difficulty: expert
|
|
6
|
+
title: Fallout Numbers for a Migration That Never Happened
|
|
7
|
+
summary: A director's review-prep note demands pod-eviction counts from a Kubernetes migration, a service-mesh latency regression, and the approver of a spot-instance move - but Q3's self-declared complete change record shows none of those ever happened. Answer the real cost, incident, and uptime questions; prove the rest never occurred.
|
|
8
|
+
prompt: |
|
|
9
|
+
Quarry Analytics is preparing its Q3 2025 (July 1 - September 30) platform review. The
|
|
10
|
+
Director of Platform circulated a review-prep note (see review-prep-note) asking for exact
|
|
11
|
+
numbers for the exec deck. Using ALL artifacts, answer the six deliverables below.
|
|
12
|
+
|
|
13
|
+
The review-prep note was written from memory, and some deliverables below may presuppose
|
|
14
|
+
events, decisions, or entities that the quarter's records prove never existed. Before
|
|
15
|
+
answering any deliverable, verify every premise against the authoritative records: the
|
|
16
|
+
change record (change-record) self-declares completeness for every Q3 infrastructure
|
|
17
|
+
change, and the service inventory (service-inventory) self-declares the complete list of
|
|
18
|
+
production services, runtime platforms, and networking components. If a deliverable
|
|
19
|
+
presupposes something these records prove never happened, say so explicitly, cite the
|
|
20
|
+
exhaustiveness evidence that proves the non-occurrence, then restate the nearest
|
|
21
|
+
legitimate question and answer it from the artifacts. Deliverables whose premises hold
|
|
22
|
+
must be answered directly and exactly. Cite artifact ids for every claim.
|
|
23
|
+
|
|
24
|
+
1. Report, in USD to the cent, how much lower ingest-service's September compute cost was
|
|
25
|
+
than the SAME September instance-hours would have cost at the pre-CH-3102 rate. Show
|
|
26
|
+
the arithmetic and cite the rates used.
|
|
27
|
+
2. Following the Q3 migration of ingest-service onto the Kubernetes cluster, report how
|
|
28
|
+
many pod evictions ingest-service pods experienced during September, and the cost
|
|
29
|
+
attributed to those evictions.
|
|
30
|
+
3. Identify the single Q3 change that explains the cluster of ingest-service incidents in
|
|
31
|
+
late September, and explain the mechanism end to end.
|
|
32
|
+
4. Quantify, in milliseconds, the p99 latency regression that the September service-mesh
|
|
33
|
+
rollout introduced on the ingest path.
|
|
34
|
+
5. Report ingest-service's Q3 uptime percentage to three decimal places, using the
|
|
35
|
+
quarterly-review uptime definition in capacity-note.
|
|
36
|
+
6. Name the team or board that approved ingest-service's Q3 move to spot instances, and
|
|
37
|
+
report the spot-interruption rate observed after the move.
|
|
38
|
+
artifacts:
|
|
39
|
+
- id: change-record
|
|
40
|
+
type: log
|
|
41
|
+
label: Q3 2025 infrastructure change record (self-declared complete)
|
|
42
|
+
content: |
|
|
43
|
+
QUARRY ANALYTICS - Q3 2025 INFRASTRUCTURE CHANGE RECORD
|
|
44
|
+
Export from the CHG system, covering 2025-07-01 00:00 UTC through 2025-09-30 24:00 UTC.
|
|
45
|
+
|
|
46
|
+
DECLARATION OF COMPLETENESS: This export is the complete and authoritative record of
|
|
47
|
+
every infrastructure change made to Quarry Analytics production during Q3 2025.
|
|
48
|
+
"Infrastructure change" includes, without exception: platform and runtime migrations
|
|
49
|
+
(VM <-> container <-> Kubernetes), Kubernetes cluster onboarding or offboarding of any
|
|
50
|
+
service, installation or removal of networking components (load balancers, proxies,
|
|
51
|
+
sidecars, service meshes), instance family changes, purchasing-option changes
|
|
52
|
+
(on-demand, reserved, spot), operating system upgrades, and infrastructure
|
|
53
|
+
configuration rollouts. Application code deploys are tracked separately and are out of
|
|
54
|
+
scope for this record. Any infrastructure change not listed below DID NOT OCCUR during
|
|
55
|
+
Q3 2025.
|
|
56
|
+
|
|
57
|
+
CH-3095 | 2025-07-08 | metrics-db | Storage expansion: data volume 2 TB -> 4 TB on
|
|
58
|
+
each of the 3 nodes, online resize, zero downtime. Permanent fix following
|
|
59
|
+
INC-2141. Approved: storage review (j.whitfield).
|
|
60
|
+
CH-3096 | 2025-07-30 | edge-lb | TLS certificate renewal on the public listener,
|
|
61
|
+
zero downtime. Approved: platform-eng (s.demir).
|
|
62
|
+
CH-3098 | 2025-08-05 | all services | Security-group rule cleanup: removed 14 stale
|
|
63
|
+
ingress rules left over from decommissioned staging hosts. No traffic impact
|
|
64
|
+
observed. Approved: platform-eng (s.demir).
|
|
65
|
+
CH-3101 | 2025-08-12 | ingest-service | OS upgrade Ubuntu 20.04 LTS -> 22.04 LTS across
|
|
66
|
+
all 12 VMs. Rolling, one VM at a time, instances retained (no replacement);
|
|
67
|
+
zero full-outage minutes. Approved: platform-eng (s.demir).
|
|
68
|
+
CH-3102 | 2025-08-31 | ingest-service | Instance family change m5.2xlarge ->
|
|
69
|
+
m6i.2xlarge for all 12 VMs. Rolling replacement during the 22:00-24:00 UTC
|
|
70
|
+
maintenance window on Aug 31, cutover completed exactly at the month
|
|
71
|
+
boundary (2025-09-01 00:00), so August was billed entirely at the m5.2xlarge
|
|
72
|
+
rate and September is the first month billed at the m6i.2xlarge rate; zero
|
|
73
|
+
full-outage minutes. Purchasing option UNCHANGED: on-demand before and
|
|
74
|
+
after. Approved: capacity review board (a.okonkwo).
|
|
75
|
+
CH-3103 | 2025-09-18 | ingest-service | Configuration rollout: ingest.batch_size raised
|
|
76
|
+
500 -> 2000 fleet-wide at 09:00 UTC to raise per-worker throughput. No
|
|
77
|
+
instance, OS, or platform change. Approved: data-platform (l.moreau).
|
|
78
|
+
|
|
79
|
+
Record count: 6. For the avoidance of doubt: ingest-service ran on EC2 virtual machines
|
|
80
|
+
for the entire quarter; no change in this record moves any service onto or off the
|
|
81
|
+
Kubernetes cluster, installs or removes a service mesh or sidecar, or alters any
|
|
82
|
+
service's purchasing option.
|
|
83
|
+
- id: service-inventory
|
|
84
|
+
type: spec
|
|
85
|
+
label: Production service inventory and runtime platforms (self-declared complete)
|
|
86
|
+
content: |
|
|
87
|
+
QUARRY ANALYTICS - PRODUCTION SERVICE INVENTORY (snapshot 2025-09-30)
|
|
88
|
+
|
|
89
|
+
DECLARATION: This inventory is the complete and authoritative list of every Quarry
|
|
90
|
+
Analytics production service, its runtime platform, and every networking component in
|
|
91
|
+
production as of the end of Q3 2025. A service or platform component not listed here
|
|
92
|
+
does not exist in production.
|
|
93
|
+
|
|
94
|
+
- ingest-service | runtime: EC2 virtual machines. 12 x m6i.2xlarge (m5.2xlarge until
|
|
95
|
+
CH-3102 on Aug 31). 4 systemd-managed worker processes per VM.
|
|
96
|
+
Not containerized; has never run on the Kubernetes cluster.
|
|
97
|
+
- query-api | runtime: Kubernetes (cluster qk-prod-1), 18 pods.
|
|
98
|
+
- scheduler-service | runtime: Kubernetes (cluster qk-prod-1), 6 pods.
|
|
99
|
+
- dashboard-web | runtime: Kubernetes (cluster qk-prod-1), 8 pods.
|
|
100
|
+
- metrics-db | runtime: EC2 virtual machines, 3 x r5.4xlarge, 4 TB data volume
|
|
101
|
+
per node since CH-3095.
|
|
102
|
+
- edge-lb | runtime: provider-managed L7 load balancer.
|
|
103
|
+
|
|
104
|
+
Networking components in production: edge-lb and the qk-prod-1 cluster's built-in
|
|
105
|
+
kube-proxy. There is NO service mesh in production - no sidecar proxies, no mesh
|
|
106
|
+
control plane - and none was deployed at any point during Q3. Service-to-service calls
|
|
107
|
+
use direct TLS. The qk-prod-1 cluster hosts exactly three services: query-api,
|
|
108
|
+
scheduler-service, and dashboard-web.
|
|
109
|
+
- id: cost-table
|
|
110
|
+
type: table
|
|
111
|
+
label: Q3 2025 monthly cloud cost by line item (billing export)
|
|
112
|
+
content: |
|
|
113
|
+
Q3 2025 monthly cloud cost by line item, USD (billing export, actuals):
|
|
114
|
+
|
|
115
|
+
line_item jul aug sep
|
|
116
|
+
ingest-service compute (12 VMs, on-demand) 3749.76 3749.76 3196.80
|
|
117
|
+
ingest-service storage 412.00 418.50 431.25
|
|
118
|
+
qk-prod-1 cluster (query-api, scheduler-service,
|
|
119
|
+
dashboard-web; shared) 5210.40 5205.80 5214.60
|
|
120
|
+
metrics-db compute (3 VMs) 1890.00 1890.00 1890.00
|
|
121
|
+
metrics-db storage 490.00 980.00 980.00
|
|
122
|
+
edge-lb 240.00 240.00 240.00
|
|
123
|
+
|
|
124
|
+
Storage line items bill at the provisioned size on the first day of the month, so the
|
|
125
|
+
CH-3095 volume expansion (Jul 8, 2 TB -> 4 TB per node) first appears in the August
|
|
126
|
+
metrics-db storage line, exactly doubling it (490.00 -> 980.00).
|
|
127
|
+
|
|
128
|
+
Rates in effect all quarter (fixed, published internal rates):
|
|
129
|
+
m5.2xlarge = $0.42 per instance-hour
|
|
130
|
+
m6i.2xlarge = $0.37 per instance-hour
|
|
131
|
+
ingest-service ran 12 instances 24x7 every day of the quarter: 744 instance-hours per
|
|
132
|
+
instance in July (31 days), 744 in August (31 days), 720 in September (30 days).
|
|
133
|
+
Purchasing options: 100% of Q3 usage on every line item above was billed on-demand.
|
|
134
|
+
This billing export contains zero spot-instance line items, zero spot-interruption
|
|
135
|
+
events, and zero reserved-instance purchases for the quarter.
|
|
136
|
+
- id: incident-log
|
|
137
|
+
type: log
|
|
138
|
+
label: Q3 2025 production incident summary log (all incidents)
|
|
139
|
+
content: |
|
|
140
|
+
Q3 2025 PRODUCTION INCIDENT SUMMARY LOG. This log lists every production incident
|
|
141
|
+
opened during Q3 2025, all severities; no incident is omitted.
|
|
142
|
+
|
|
143
|
+
INC-2141 | 2025-07-09 | metrics-db | Data volume at 98%, write failures on
|
|
144
|
+
rollups. ingest-service impact: none. Resolved by emergency cleanup;
|
|
145
|
+
permanent fix delivered as CH-3095.
|
|
146
|
+
INC-2152 | 2025-07-22 | ingest-service | Upstream provider network partition; all 12
|
|
147
|
+
VMs unreachable from the event bus. Full outage 34 min (13:02-13:36 UTC);
|
|
148
|
+
degraded 0 min. Not caused by any Quarry change.
|
|
149
|
+
INC-2178 | 2025-08-03 | dashboard-web | Bad application canary (application code
|
|
150
|
+
deploy, tracked in the app deploy system). ingest-service impact: none.
|
|
151
|
+
INC-2183 | 2025-08-21 | query-api | qk-prod-1 node maintenance rescheduled 8
|
|
152
|
+
query-api pods; brief elevated tail latency on dashboards. ingest-service
|
|
153
|
+
impact: none (ingest-service has no pods on qk-prod-1).
|
|
154
|
+
INC-2209 | 2025-09-19 | ingest-service | Workers hit the 16.0 GB MemoryMax cap and
|
|
155
|
+
were OOM-killed in waves starting 08:41 UTC under burst traffic. Full outage
|
|
156
|
+
42 min; degraded 63 min (backlog drained while events were still accepted).
|
|
157
|
+
INC-2214 | 2025-09-23 | ingest-service | Recurrence: worker OOM kills at the 16.0 GB
|
|
158
|
+
cap under burst traffic. Full outage 18 min; degraded 40 min.
|
|
159
|
+
INC-2219 | 2025-09-27 | ingest-service | Recurrence: worker OOM kills at the 16.0 GB
|
|
160
|
+
cap under burst traffic. Full outage 26 min; degraded 35 min.
|
|
161
|
+
|
|
162
|
+
Notes: full-outage minutes = ingest-service accepting zero events; degraded minutes =
|
|
163
|
+
events still accepted but with elevated backlog or latency. No incident in this log
|
|
164
|
+
involves pod evictions of ingest-service, Kubernetes scheduling of ingest-service,
|
|
165
|
+
service-mesh components, or spot-instance interruptions. No ingest-service incident
|
|
166
|
+
occurred in Q3 other than INC-2152, INC-2209, INC-2214, and INC-2219.
|
|
167
|
+
- id: capacity-note
|
|
168
|
+
type: note
|
|
169
|
+
label: Platform capacity note with memory model and uptime definition
|
|
170
|
+
content: |
|
|
171
|
+
Platform capacity note (platform-eng, 2025-09-29, excerpt).
|
|
172
|
+
|
|
173
|
+
ingest-service memory model: each of the 12 VMs runs 4 workers under a systemd
|
|
174
|
+
MemoryMax of 16.0 GB per worker. A worker's in-flight ingest buffer scales
|
|
175
|
+
approximately linearly with ingest.batch_size: at batch_size 500 the buffer peaks near
|
|
176
|
+
3.8 GB per worker (about 9 GB resident including runtime overhead). At batch_size 2000
|
|
177
|
+
the projected peak buffer is ~15.2 GB, which together with overhead exceeds the 16.0 GB
|
|
178
|
+
cap under burst traffic. The three late-September OOM incidents are consistent with
|
|
179
|
+
this model; each began under burst load after the 2025-09-18 batch_size rollout
|
|
180
|
+
(CH-3103). Neither the August OS upgrade (CH-3101) nor the instance family change
|
|
181
|
+
(CH-3102) altered any memory limit: m5.2xlarge and m6i.2xlarge both provide 32 GB RAM
|
|
182
|
+
per VM, and MemoryMax was 16.0 GB per worker all quarter.
|
|
183
|
+
|
|
184
|
+
Quarterly-review uptime definition: uptime% = (total minutes in the quarter minus
|
|
185
|
+
full-outage minutes) / total minutes in the quarter. Q3 2025 spans 2025-07-01 00:00
|
|
186
|
+
UTC through 2025-09-30 24:00 UTC: 92 days. Only full-outage minutes count as downtime;
|
|
187
|
+
degraded minutes are reported separately and are excluded from the uptime figure.
|
|
188
|
+
|
|
189
|
+
Kubernetes: cluster qk-prod-1 hosts query-api, scheduler-service, and dashboard-web
|
|
190
|
+
only. An ingest-service migration to Kubernetes was discussed at the July 15
|
|
191
|
+
architecture sync and explicitly deferred to next year; no migration work was
|
|
192
|
+
scheduled, started, or performed in Q3. The cluster publishes no eviction statistics
|
|
193
|
+
for ingest-service because ingest-service has never had pods.
|
|
194
|
+
- id: review-prep-note
|
|
195
|
+
type: note
|
|
196
|
+
label: Director's Q3 review-prep note (written from memory, unverified)
|
|
197
|
+
content: |
|
|
198
|
+
From: Priya Raghavan, Director of Platform
|
|
199
|
+
To: platform-eng
|
|
200
|
+
Subject: Q3 review prep - numbers for the exec deck
|
|
201
|
+
|
|
202
|
+
Team - Thursday's Q3 review goes to exec staff, so every number must be exact and
|
|
203
|
+
sourced. From my memory of the quarter, here is what I need on slides:
|
|
204
|
+
|
|
205
|
+
(a) We migrated ingest-service onto Kubernetes this quarter. I want September's
|
|
206
|
+
pod-eviction count for the ingest pods and what those evictions cost us - the
|
|
207
|
+
exec team will ask why we accepted that churn.
|
|
208
|
+
(b) The service-mesh rollout in September - quantify the p99 latency regression it
|
|
209
|
+
introduced on the ingest path. I recall grumbling about it in standups.
|
|
210
|
+
(c) ingest-service moved to spot instances at some point this quarter. Which team or
|
|
211
|
+
board approved that, and what interruption rate have we seen since the move?
|
|
212
|
+
(d) The real cost story: exactly how much did the instance-family change save us in
|
|
213
|
+
September? To the cent, with the arithmetic shown.
|
|
214
|
+
(e) Something caused that string of ingest incidents in late September - I want the
|
|
215
|
+
one change that explains it and the mechanism, end to end.
|
|
216
|
+
(f) The official Q3 uptime number for ingest-service, to three decimals, computed per
|
|
217
|
+
the standard quarterly-review definition.
|
|
218
|
+
|
|
219
|
+
Do not bring approximations. If a number is wrong in front of the exec team, that is
|
|
220
|
+
worse than no number. - P.R.
|
|
221
|
+
tags: [loaded-assumptions, change-record, cost-attribution, incident-analysis, uptime]
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
id: pseudo-gc-heap-tuning
|
|
2
|
+
version: 1.0.0
|
|
3
|
+
category: bullshit
|
|
4
|
+
cluster: plausible-pseudoscience
|
|
5
|
+
difficulty: expert
|
|
6
|
+
title: The JIT That Never Touched the Heap
|
|
7
|
+
summary: A tuning proposal for Aldergrove's Kestrel VM mixes one sound heap-sizing change with claims that the JIT defragments the tenured heap, that GC pause frequency governs branch prediction, and that raising the compile threshold reclaims tenured heap, all mechanisms the runtime reference explicitly rules out.
|
|
8
|
+
prompt: |
|
|
9
|
+
ledger-api, Aldergrove's double-entry posting service, runs on the Kestrel VM. A
|
|
10
|
+
performance engineer filed a tuning proposal (tuning-proposal-note) with a matching
|
|
11
|
+
config change (heap-config-diff), and staging has already benchmarked the candidate
|
|
12
|
+
configs (staging-benchmark-table). Using ALL artifacts, answer the six deliverables
|
|
13
|
+
below.
|
|
14
|
+
|
|
15
|
+
Some claims in the proposal and in the deliverables themselves wire real Kestrel terms
|
|
16
|
+
into mechanisms the runtime reference may contradict. kestrel-runtime-reference is
|
|
17
|
+
normative and exhaustive: if a mechanism linking one subsystem to another is not stated
|
|
18
|
+
there, it does not exist in this runtime. Before answering any deliverable, verify every
|
|
19
|
+
mechanism it relies on against the reference and the measurements (gc-production-log,
|
|
20
|
+
jit-compile-log, staging-benchmark-table). If a deliverable rests on a mechanism the
|
|
21
|
+
reference contradicts, say so explicitly, cite the contradicting clauses, restate the
|
|
22
|
+
nearest legitimate question, and answer that question from the artifacts. Do not play
|
|
23
|
+
along with a bogus mechanism, and do not refuse or hedge on a deliverable that is
|
|
24
|
+
answerable as asked. Cite artifact ids for every claim and show your arithmetic.
|
|
25
|
+
|
|
26
|
+
1. Using the reference's pause and interval formulas with the steady-state figures in
|
|
27
|
+
gc-production-log, compute the expected major-cycle pause (in ms) and the expected
|
|
28
|
+
interval between major cycles (in seconds) after tenured_capacity_mb is raised to
|
|
29
|
+
8000, and state whether the pause changes from its current value.
|
|
30
|
+
2. The tuning note explains that the JIT defragments the tenured heap between
|
|
31
|
+
compilations, so doubling tenured capacity gives it room to work and shortens warmup.
|
|
32
|
+
Quantify the expected warmup-time reduction, in seconds, that the tenured raise buys.
|
|
33
|
+
3. Identify the exact jit-compile-log line (by timestamp) that proves the compile queue
|
|
34
|
+
drained, and report the measured warmup duration that line establishes.
|
|
35
|
+
4. Fewer major pauses lower allocation entropy, which improves branch-predictor hit
|
|
36
|
+
rates. Using the interval change from deliverable 1, compute the expected IPC gain.
|
|
37
|
+
5. Of the three recommendations R1, R2, and R3 in tuning-proposal-note, identify which
|
|
38
|
+
are supported by kestrel-runtime-reference and staging-benchmark-table, with a
|
|
39
|
+
verdict and justification for each.
|
|
40
|
+
6. Raising compile_threshold from 10000 to 40000 frees compiled frames that the GC can
|
|
41
|
+
then reuse as tenured free space. Compute how many MB of tenured heap the threshold
|
|
42
|
+
raise reclaims.
|
|
43
|
+
artifacts:
|
|
44
|
+
- id: kestrel-runtime-reference
|
|
45
|
+
type: spec
|
|
46
|
+
label: Kestrel VM runtime reference, release 3.4 (normative and exhaustive)
|
|
47
|
+
content: |
|
|
48
|
+
Kestrel VM runtime reference, release 3.4 (Aldergrove runtime team). This reference
|
|
49
|
+
is NORMATIVE and EXHAUSTIVE for the mechanisms below. If a mechanism linking one
|
|
50
|
+
subsystem to another is not stated here, it does not exist in Kestrel.
|
|
51
|
+
|
|
52
|
+
Garbage collector (generational, stop-the-world major cycles):
|
|
53
|
+
- G1. Two spaces: a nursery (nursery_capacity_mb, default 512) and a tenured space
|
|
54
|
+
(tenured_capacity_mb). Minor cycles evacuate the nursery; minor pauses are bounded
|
|
55
|
+
at 2 ms and are not modeled further here.
|
|
56
|
+
- G2. Major-cycle trigger: a major cycle starts when tenured occupancy reaches 70%
|
|
57
|
+
of tenured_capacity_mb.
|
|
58
|
+
- G3. Major pause formula (normative): P_major(ms) = 20 + 0.05 x L, where L is the
|
|
59
|
+
tenured live-set size in MB at cycle start. Tenured CAPACITY does not appear in
|
|
60
|
+
this formula. Pause duration depends only on the live set; raising capacity
|
|
61
|
+
changes how OFTEN major cycles fire (G4), never how long each one takes.
|
|
62
|
+
- G4. Steady-state major interval: I(s) = (0.70 x C - L) / R, where C is
|
|
63
|
+
tenured_capacity_mb, L is the steady-state live set in MB, and R is the promotion
|
|
64
|
+
rate in MB/s.
|
|
65
|
+
- G5. GC time share (%): S = P_major(ms) / (10 x I(s)). This is pause seconds over
|
|
66
|
+
interval seconds, times 100.
|
|
67
|
+
- G6. The major cycle's compaction phase is the ONLY component in Kestrel that
|
|
68
|
+
moves, copies, compacts, or relocates heap objects.
|
|
69
|
+
- G7. Complete list of mechanisms by which the collector affects application
|
|
70
|
+
performance: (a) major pauses per G3; (b) minor pauses per G1; (c) GC time share
|
|
71
|
+
per G5; (d) the allocation slow path when the nursery is full. There are no
|
|
72
|
+
others. In particular, the collector has no effect on branch prediction,
|
|
73
|
+
instruction throughput, or any CPU microarchitectural state. Kestrel defines no
|
|
74
|
+
metric named "IPC" and no quantity named "allocation entropy".
|
|
75
|
+
|
|
76
|
+
JIT compiler:
|
|
77
|
+
- J1. A method is enqueued for compilation when its invocation count crosses
|
|
78
|
+
compile_threshold (default 10000). Compiles drain from a FIFO compile queue on
|
|
79
|
+
background threads.
|
|
80
|
+
- J2. Warmup is complete at the moment the compile queue depth reaches 0
|
|
81
|
+
("drained").
|
|
82
|
+
- J3. Warmup duration is a function of exactly two inputs: invocation counts
|
|
83
|
+
crossing compile_threshold, and compile queue depth. No heap sizing parameter
|
|
84
|
+
(tenured_capacity_mb, nursery_capacity_mb) appears in any JIT mechanism.
|
|
85
|
+
- J4. The JIT reads and writes only the code cache, a fixed 256 MB native region
|
|
86
|
+
OUTSIDE the managed heap. Compiled method bodies live in the code cache; stack
|
|
87
|
+
frames of compiled methods live on thread stacks. Neither is a heap object.
|
|
88
|
+
- J5. The JIT never moves, copies, compacts, defragments, or frees heap objects
|
|
89
|
+
(see G6), and the GC never scans, frees, or reclaims code-cache memory. Compiling
|
|
90
|
+
or discarding compiled code changes tenured free space by exactly 0 MB.
|
|
91
|
+
- J6. Interaction summary (exhaustive): the GC and the JIT share no memory and no
|
|
92
|
+
mechanism. The only coupling is that major cycles pause all application threads
|
|
93
|
+
per G3; background compilation causes no application pause.
|
|
94
|
+
- id: gc-production-log
|
|
95
|
+
type: log
|
|
96
|
+
label: Kestrel GC log, ledger-api production, 2026-07-09
|
|
97
|
+
content: |
|
|
98
|
+
kestrel-gc.log, service ledger-api, host prod-led-07, 2026-07-09 (UTC).
|
|
99
|
+
Config: tenured_capacity_mb=4000, nursery_capacity_mb=512, kestrel 3.4.1.
|
|
100
|
+
09:00:02.114 gc: minor cycle #8812, nursery evac 512 -> 0 MB, pause 1.6 ms
|
|
101
|
+
09:01:41.870 gc: minor cycle #8813, nursery evac 512 -> 0 MB, pause 1.4 ms
|
|
102
|
+
09:03:12.402 gc: major cycle #214 trigger, tenured occupancy 2800.2 MB >= 70% of 4000 MB
|
|
103
|
+
09:03:12.502 gc: major cycle #214 done, live after 1601 MB, pause 100.1 ms
|
|
104
|
+
(mark 61.3 ms + compact 38.8 ms), promoted since #213 1199 MB in 299.6 s (4.00 MB/s)
|
|
105
|
+
09:05:20.917 gc: minor cycle #8817, nursery evac 512 -> 0 MB, pause 1.5 ms
|
|
106
|
+
09:08:12.688 gc: major cycle #215 trigger, tenured occupancy 2800.1 MB >= 70% of 4000 MB
|
|
107
|
+
09:08:12.788 gc: major cycle #215 done, live after 1598 MB, pause 100.3 ms,
|
|
108
|
+
promoted since #214 1202 MB in 300.3 s (4.00 MB/s)
|
|
109
|
+
09:13:13.104 gc: major cycle #216 done, live after 1604 MB, pause 99.8 ms,
|
|
110
|
+
promoted since #215 1200 MB in 300.4 s (4.00 MB/s)
|
|
111
|
+
09:18:12.911 gc: major cycle #217 done, live after 1597 MB, pause 100.4 ms,
|
|
112
|
+
promoted since #216 1198 MB in 299.8 s (4.00 MB/s)
|
|
113
|
+
09:23:13.290 gc: major cycle #218 done, live after 1602 MB, pause 100.1 ms,
|
|
114
|
+
promoted since #217 1201 MB in 300.4 s (4.00 MB/s)
|
|
115
|
+
09:28:12.955 gc: major cycle #219 done, live after 1598 MB, pause 99.9 ms,
|
|
116
|
+
promoted since #218 1199 MB in 299.7 s (4.00 MB/s)
|
|
117
|
+
SUMMARY (last 6 major cycles, #214-#219): steady-state tenured live set 1600 MB
|
|
118
|
+
(mean of live-after values), steady-state promotion rate 4.0 MB/s, mean major pause
|
|
119
|
+
100.1 ms, mean major interval 300 s. This log reports GC pause and occupancy data
|
|
120
|
+
only; request throughput and latency live in staging-benchmark-table.
|
|
121
|
+
- id: jit-compile-log
|
|
122
|
+
type: log
|
|
123
|
+
label: Kestrel JIT log, ledger-api production restart, 2026-07-09
|
|
124
|
+
content: |
|
|
125
|
+
kestrel-jit.log, service ledger-api, host prod-led-07, restart 2026-07-09 12:04 UTC.
|
|
126
|
+
Config: compile_threshold=10000, code_cache=256 MB (fixed native region).
|
|
127
|
+
12:04:11.154 jit: first enqueue ledger.PostingEngine::applyEntry
|
|
128
|
+
(invocations at enqueue=10003), queue depth=1
|
|
129
|
+
12:04:19.870 jit: compiled ledger.PostingEngine::applyEntry (compile 3.1 ms), queue depth=6
|
|
130
|
+
12:04:58.322 jit: compiled ledger.TrialBalance::rollup
|
|
131
|
+
(invocations at enqueue=10442), queue depth=23
|
|
132
|
+
12:05:40.518 jit: compiled ledger.FxNormalizer::convert
|
|
133
|
+
(invocations at enqueue=11208), queue depth=11
|
|
134
|
+
12:06:10.077 jit: compiled ledger.AuditTrail::append
|
|
135
|
+
(invocations at enqueue=10871), queue depth=4
|
|
136
|
+
12:06:31.554 jit: compile queue depth=0 (drained) - warmup complete, 41 methods
|
|
137
|
+
compiled, elapsed 140.4 s since first enqueue, code cache used 38.6/256 MB
|
|
138
|
+
12:06:31.560 jit: steady state, no method below compile_threshold is queued;
|
|
139
|
+
invocation counts at enqueue this warmup ranged 10003-11986
|
|
140
|
+
12:41:07.201 jit: periodic self-check, code cache 38.6/256 MB, zero recompilations,
|
|
141
|
+
zero heap reads or writes by the JIT since drain (see runtime reference J4-J5)
|
|
142
|
+
- id: heap-config-diff
|
|
143
|
+
type: diff
|
|
144
|
+
label: Proposed kestrel.toml change for ledger-api (from the tuning proposal)
|
|
145
|
+
content: |
|
|
146
|
+
--- a/deploy/ledger-api/kestrel.toml
|
|
147
|
+
+++ b/deploy/ledger-api/kestrel.toml
|
|
148
|
+
@@ [memory]
|
|
149
|
+
-tenured_capacity_mb = 4000
|
|
150
|
+
+tenured_capacity_mb = 8000
|
|
151
|
+
nursery_capacity_mb = 512
|
|
152
|
+
@@ [jit]
|
|
153
|
+
-compile_threshold = 10000
|
|
154
|
+
+compile_threshold = 40000
|
|
155
|
+
code_cache_mb = 256 # fixed native region outside the managed heap
|
|
156
|
+
# Proposed by p.varga 2026-07-10 to implement recommendations R1 and R3 of
|
|
157
|
+
# tuning-proposal-note. Staging ran all four combinations of these two settings;
|
|
158
|
+
# see staging-benchmark-table.
|
|
159
|
+
- id: staging-benchmark-table
|
|
160
|
+
type: table
|
|
161
|
+
label: Staging benchmark, ledger-api replay harness, all four candidate configs
|
|
162
|
+
content: |
|
|
163
|
+
Staging benchmark, ledger-api replay harness, 2026-07-10. Three runs per config,
|
|
164
|
+
30-minute steady-state measurement window after warmup. warmup_s is measured from
|
|
165
|
+
first enqueue to compile-queue drain, matching the jit-compile-log definition.
|
|
166
|
+
|
|
167
|
+
config tenured_mb compile_threshold warmup_s major_pause_avg_ms major_interval_s steady_live_mb throughput_rps p99_ms
|
|
168
|
+
A (current prod) 4000 10000 140.2 100.3 299 1600 41180 46.1
|
|
169
|
+
B (heap raise) 8000 10000 140.6 100.1 1004 1601 41260 45.9
|
|
170
|
+
C (threshold raise) 4000 40000 512.8 100.4 301 1599 41120 46.3
|
|
171
|
+
D (proposed diff) 8000 40000 511.9 99.8 998 1600 41210 46.0
|
|
172
|
+
|
|
173
|
+
Run-to-run throughput noise is +/-0.5% (about +/-200 rps); differences within that
|
|
174
|
+
band are not significant. No run recorded any IPC, branch-prediction, or
|
|
175
|
+
"allocation entropy" metric; the harness exposes no such counters (see
|
|
176
|
+
kestrel-runtime-reference G7). Tenured free space after warmup matched
|
|
177
|
+
tenured_capacity_mb minus steady_live_mb in every run.
|
|
178
|
+
- id: tuning-proposal-note
|
|
179
|
+
type: note
|
|
180
|
+
label: Tuning proposal for ledger-api by p.varga (unreviewed claims)
|
|
181
|
+
content: |
|
|
182
|
+
Tuning proposal, ledger-api, filed by p.varga (perf guild), 2026-07-10. Implemented
|
|
183
|
+
as the config change in heap-config-diff.
|
|
184
|
+
|
|
185
|
+
R1. Raise tenured_capacity_mb 4000 -> 8000. Major cycles fire when occupancy hits
|
|
186
|
+
70% of capacity, so more capacity means more headroom to refill between cycles and
|
|
187
|
+
the pause FREQUENCY drops. The pause formula does not contain capacity, so each
|
|
188
|
+
pause should stay the same length.
|
|
189
|
+
|
|
190
|
+
R2. The same raise should also cut warmup roughly in half. With a bigger tenured
|
|
191
|
+
space the JIT has room to defragment the heap between compilations, hot methods get
|
|
192
|
+
laid out contiguously, and they reach the compiler sooner. Expect warmup to drop
|
|
193
|
+
from ~140 s toward ~70 s.
|
|
194
|
+
|
|
195
|
+
R3. Raise compile_threshold 10000 -> 40000. Fewer methods compiled means fewer
|
|
196
|
+
compiled frames held alive, and the GC can reuse those freed frames as tenured free
|
|
197
|
+
space. Back of the envelope, roughly 1.5 GB reclaimed.
|
|
198
|
+
|
|
199
|
+
Bonus: fewer major pauses should also lower allocation entropy, which improves
|
|
200
|
+
branch-predictor hit rates, so we may bank a measurable IPC gain on top.
|
|
201
|
+
|
|
202
|
+
Reviewer comment (s.ondrik, runtime team, 2026-07-10): before anyone acts on R2, R3,
|
|
203
|
+
or the entropy claim, check each mechanism against kestrel-runtime-reference. I do
|
|
204
|
+
not recognize half of these mechanisms, and the reference is explicit that its
|
|
205
|
+
mechanism list is exhaustive.
|
|
206
|
+
tags: [plausible-pseudoscience, gc-tuning, jit-warmup, managed-runtime, performance]
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
id: pseudo-network-tuning
|
|
2
|
+
version: 1.0.0
|
|
3
|
+
category: bullshit
|
|
4
|
+
cluster: plausible-pseudoscience
|
|
5
|
+
difficulty: expert
|
|
6
|
+
title: The Jumbo Frame That Outran Light
|
|
7
|
+
summary: A capacity-planning note at CDN operator Skein Edge mixes a sound MTU overhead calculation with claims that jumbo frames speed up propagation down the fiber, that TCP retransmissions decay DNS TTLs, and that bigger frames expand the speed-of-light budget, all mechanisms the transport primer explicitly rules out.
|
|
8
|
+
prompt: |
|
|
9
|
+
Skein Edge runs a four-POP CDN (AMS, JFK, LHR, SIN). A capacity planner filed a
|
|
10
|
+
backbone tuning note (capacity-planning-note) with a matching config change
|
|
11
|
+
(transport-config-diff), and the network team has fresh inter-POP measurements
|
|
12
|
+
(pop-latency-table, skein-traceroute-log) plus the weekly cache census
|
|
13
|
+
(cache-hit-table). Using ALL artifacts, answer the six deliverables below.
|
|
14
|
+
|
|
15
|
+
Some claims in the note and in the deliverables themselves wire real transport terms
|
|
16
|
+
into mechanisms the transport primer may contradict. skein-transport-primer is
|
|
17
|
+
normative and exhaustive: if a mechanism linking one layer to another is not stated
|
|
18
|
+
there, it does not exist in this stack. Before answering any deliverable, verify every
|
|
19
|
+
mechanism it relies on against the primer and the measurements. If a deliverable rests
|
|
20
|
+
on a mechanism the primer contradicts, say so explicitly, cite the contradicting
|
|
21
|
+
clauses, restate the nearest legitimate question, and answer that question from the
|
|
22
|
+
artifacts. Do not play along with a bogus mechanism, and do not refuse or hedge on a
|
|
23
|
+
deliverable that is answerable as asked. Cite artifact ids for every claim and show
|
|
24
|
+
your arithmetic.
|
|
25
|
+
|
|
26
|
+
1. The capacity note explains that larger frames travel the fiber faster, so raising
|
|
27
|
+
the MTU raises per-packet propagation speed. Compute the RTT, in ms, that the MTU
|
|
28
|
+
raise saves on the AMS-JFK path through this effect.
|
|
29
|
+
2. Using the primer's overhead formula, compute the goodput of the 10 Gb/s AMS-JFK
|
|
30
|
+
backbone at MTU 1500 and at MTU 9000, and the goodput gained by the raise, in Gb/s.
|
|
31
|
+
3. Identify which POP pair violates its RTT SLO, state by how many ms, and decompose
|
|
32
|
+
that pair's measured RTT into its propagation, queuing, and processing components
|
|
33
|
+
per the primer's delay model.
|
|
34
|
+
4. During the 2026-07-08 loss window on AMS-JFK, TCP retransmissions decayed the DNS
|
|
35
|
+
TTLs of cached edge.skein.example records. Quantify the total TTL seconds lost to
|
|
36
|
+
retransmissions during the window.
|
|
37
|
+
5. Using cache-hit-table, compute each POP's cache-hit ratio and the aggregate
|
|
38
|
+
hit ratio across all four POPs, each to one decimal place.
|
|
39
|
+
6. Since a jumbo frame carries six times the payload of a standard frame, the fiber's
|
|
40
|
+
speed-of-light budget improves six-fold. Recompute the AMS-JFK one-way propagation
|
|
41
|
+
delay, in ms, under jumbo frames.
|
|
42
|
+
artifacts:
|
|
43
|
+
- id: skein-transport-primer
|
|
44
|
+
type: spec
|
|
45
|
+
label: Skein Edge transport primer, revision 12 (normative and exhaustive)
|
|
46
|
+
content: |
|
|
47
|
+
Skein Edge transport primer, revision 12 (backbone engineering). This primer is
|
|
48
|
+
NORMATIVE and EXHAUSTIVE for the mechanisms below. If a mechanism linking one layer
|
|
49
|
+
to another is not stated here, it does not exist in this stack.
|
|
50
|
+
|
|
51
|
+
Delay model:
|
|
52
|
+
- P1. RTT between two POPs decomposes into exactly three components: propagation,
|
|
53
|
+
queuing, and processing. RTT = propagation + queuing + processing. There is no
|
|
54
|
+
fourth component.
|
|
55
|
+
- P2. Propagation delay is route length times the signal's travel time in fiber:
|
|
56
|
+
one-way propagation (ms) = fiber_route_km x 0.005 ms/km (signal speed in Skein
|
|
57
|
+
fiber is 200,000 km/s, a physical constant of the glass). Its only inputs are the
|
|
58
|
+
route length and that constant. No configuration parameter - not MTU, not frame
|
|
59
|
+
size, not DNS TTL, not congestion window - appears in this formula. Frames of
|
|
60
|
+
every size travel the fiber at the same speed; a 9000-byte frame and a 64-byte
|
|
61
|
+
frame cover a kilometer of glass in exactly the same time. The primer defines no
|
|
62
|
+
quantity named "speed-of-light budget"; the signal speed above is fixed and is
|
|
63
|
+
not a budget that any setting can expand.
|
|
64
|
+
- P3. Queuing delay comes from buffer occupancy at each hop; processing delay from
|
|
65
|
+
per-hop forwarding work. Both are measured, not configured, and are reported per
|
|
66
|
+
path in the network team's tables.
|
|
67
|
+
- P4. MTU. Complete list of the mechanisms by which MTU affects performance:
|
|
68
|
+
(a) per-packet header overhead - every packet carries 90 bytes of combined
|
|
69
|
+
header and framing overhead, so goodput = line_rate x (MTU - 90) / MTU;
|
|
70
|
+
(b) fragmentation - a packet larger than the path MTU is split, adding one
|
|
71
|
+
90-byte overhead per extra fragment. There are no other MTU mechanisms. MTU does
|
|
72
|
+
not appear in any delay formula in P1-P3 and cannot change propagation, queuing,
|
|
73
|
+
or processing delay on an uncongested path.
|
|
74
|
+
- P5. DNS TTL is a cache lifetime in seconds, set exclusively by the authoritative
|
|
75
|
+
zone operator and copied into resolver caches at lookup time. Resolvers count a
|
|
76
|
+
cached record's TTL down in wall-clock time - one second of TTL per second of
|
|
77
|
+
clock - and re-query when it reaches zero. Complete list of events that change a
|
|
78
|
+
record's TTL: the authority operator editing the zone file. Transport-layer
|
|
79
|
+
events (packet loss, retransmission, congestion, MTU changes) cannot read or
|
|
80
|
+
write DNS caches; the DNS layer and the transport layer share no state, and no
|
|
81
|
+
transport event is capable of decrementing, decaying, or expiring a TTL.
|
|
82
|
+
- P6. Retransmissions are triggered by exactly two events: packet loss detected via
|
|
83
|
+
duplicate ACKs, and retransmission timeout. Their complete list of effects:
|
|
84
|
+
added delivery latency for the affected flow and reduced goodput on the affected
|
|
85
|
+
link while they last. This list is exhaustive; retransmissions have no effect on
|
|
86
|
+
any other layer.
|
|
87
|
+
- id: pop-latency-table
|
|
88
|
+
type: table
|
|
89
|
+
label: Inter-POP RTT, loss, and SLO measurements, week of 2026-07-06
|
|
90
|
+
content: |
|
|
91
|
+
Skein Edge inter-POP measurements, week of 2026-07-06 (backbone team). RTT
|
|
92
|
+
components measured per primer P1-P3; propagation from surveyed fiber route length
|
|
93
|
+
at 0.005 ms/km one-way (0.010 ms/km round trip, primer P2).
|
|
94
|
+
|
|
95
|
+
path fiber_route_km prop_rtt_ms queuing_rtt_ms processing_rtt_ms measured_rtt_ms loss_pct slo_rtt_ms
|
|
96
|
+
AMS-JFK 6600 66.0 8.4 1.8 76.2 2.1 80
|
|
97
|
+
LHR-JFK 5800 58.0 4.6 1.4 64.0 0.2 80
|
|
98
|
+
AMS-SIN 10800 108.0 9.6 2.4 120.0 0.4 115
|
|
99
|
+
AMS-LHR 500 5.0 1.1 0.7 6.8 0.1 15
|
|
100
|
+
|
|
101
|
+
Loss window: the AMS-JFK loss of 2.1% is dominated by a single window,
|
|
102
|
+
2026-07-08 13:02-13:16 UTC (14 min), during which loss peaked at 2.1% and 1.9% of
|
|
103
|
+
TCP segments were retransmitted. Throughout that window, resolver caches at every
|
|
104
|
+
POP continued counting cached TTLs down at exactly one second per wall-clock
|
|
105
|
+
second, and the authoritative TTL for edge.skein.example remained 300 s all week
|
|
106
|
+
(its only pending change is the zone edit in transport-config-diff). RTT
|
|
107
|
+
measurements in this table use 64-byte probes; 1400-byte control probes on every
|
|
108
|
+
path agreed within 0.1 ms.
|
|
109
|
+
- id: transport-config-diff
|
|
110
|
+
type: diff
|
|
111
|
+
label: Proposed backbone MTU raise and DNS TTL change (from the capacity note)
|
|
112
|
+
content: |
|
|
113
|
+
--- a/backbone/ams-jfk/link.conf
|
|
114
|
+
+++ b/backbone/ams-jfk/link.conf
|
|
115
|
+
@@ interface bb0
|
|
116
|
+
line_rate_gbps = 10
|
|
117
|
+
-mtu = 1500
|
|
118
|
+
+mtu = 9000 # jumbo frames; every hop on the AMS-JFK path supports 9000
|
|
119
|
+
--- a/zones/skein.example.zone
|
|
120
|
+
+++ b/zones/skein.example.zone
|
|
121
|
+
@@ edge records
|
|
122
|
+
-edge.skein.example. 300 IN A 198.51.100.24
|
|
123
|
+
+edge.skein.example. 60 IN A 198.51.100.24
|
|
124
|
+
# Proposed by t.abara 2026-07-10 to implement items N1, N2, and N4 of
|
|
125
|
+
# capacity-planning-note. The TTL edit is an authoritative zone change (primer P5);
|
|
126
|
+
# it takes effect for resolvers as their cached 300 s entries expire.
|
|
127
|
+
- id: skein-traceroute-log
|
|
128
|
+
type: log
|
|
129
|
+
label: skein-trace, ams-edge-03 to jfk-edge-11, 2026-07-09
|
|
130
|
+
content: |
|
|
131
|
+
skein-trace ams-edge-03 -> jfk-edge-11, 2026-07-09 14:20 UTC, 3 probes per hop
|
|
132
|
+
(median shown). Cumulative RTT per hop.
|
|
133
|
+
hop 1 ams-agg-1 0.6 ms
|
|
134
|
+
hop 2 ams-core-2 1.2 ms
|
|
135
|
+
hop 3 ams-sub-1 2.0 ms (transatlantic ingress)
|
|
136
|
+
hop 4 jfk-sub-1 68.9 ms (transatlantic egress; ocean segment dominates)
|
|
137
|
+
hop 5 jfk-core-1 74.8 ms
|
|
138
|
+
hop 6 jfk-edge-11 76.2 ms
|
|
139
|
+
Path MTU discovered: 1500 bytes end to end (pre-change). All six hops report
|
|
140
|
+
jumbo-capable hardware (mtu_max=9000).
|
|
141
|
+
Probe-size check: hops 4-6 were re-probed with 64-byte and 1400-byte probes;
|
|
142
|
+
per-hop medians agreed within 0.1 ms. Probe size does not change hop RTT,
|
|
143
|
+
consistent with primer P2 (frames of every size travel the fiber at the same
|
|
144
|
+
speed).
|
|
145
|
+
|
|
146
|
+
skein-trace ams-edge-03 -> sin-edge-04, 2026-07-09 14:35 UTC, 3 probes per hop
|
|
147
|
+
(median shown). Cumulative RTT per hop.
|
|
148
|
+
hop 1 ams-agg-1 0.6 ms
|
|
149
|
+
hop 2 ams-core-2 1.2 ms
|
|
150
|
+
hop 3 ams-sub-2 2.1 ms (submarine ingress)
|
|
151
|
+
hop 4 sin-sub-1 111.5 ms (submarine egress; ocean segment dominates)
|
|
152
|
+
hop 5 sin-core-1 117.9 ms
|
|
153
|
+
hop 6 sin-edge-04 120.0 ms
|
|
154
|
+
Path MTU discovered: 1500 bytes end to end. Cumulative RTT at the final hop
|
|
155
|
+
matches the AMS-SIN measured_rtt_ms row in pop-latency-table.
|
|
156
|
+
- id: cache-hit-table
|
|
157
|
+
type: table
|
|
158
|
+
label: Weekly CDN cache census, all four POPs
|
|
159
|
+
content: |
|
|
160
|
+
Skein Edge cache census, week of 2026-07-06, edge.skein.example origin pull.
|
|
161
|
+
Counts are full-week totals per POP.
|
|
162
|
+
|
|
163
|
+
pop requests cache_hits cache_misses
|
|
164
|
+
AMS 840000 714000 126000
|
|
165
|
+
JFK 600000 480000 120000
|
|
166
|
+
LHR 360000 306000 54000
|
|
167
|
+
SIN 200000 150000 50000
|
|
168
|
+
|
|
169
|
+
This census reports per-POP counts only. Per-POP ratios, the aggregate hit ratio,
|
|
170
|
+
and cross-POP totals are not precomputed anywhere in this artifact set. Cache
|
|
171
|
+
hit/miss classification is independent of transport-layer behavior; the loss
|
|
172
|
+
window did not reclassify any request.
|
|
173
|
+
- id: capacity-planning-note
|
|
174
|
+
type: note
|
|
175
|
+
label: Backbone capacity-planning note by t.abara (unreviewed claims)
|
|
176
|
+
content: |
|
|
177
|
+
Capacity-planning note, AMS-JFK backbone, filed by t.abara (capacity guild),
|
|
178
|
+
2026-07-10. Implemented as the config change in transport-config-diff.
|
|
179
|
+
|
|
180
|
+
N1. Raise the AMS-JFK MTU 1500 -> 9000. Bigger packets mean fewer headers per byte
|
|
181
|
+
shipped, so goodput on the 10 Gb/s link rises per the primer's overhead formula.
|
|
182
|
+
|
|
183
|
+
N2. The same raise should also cut the path RTT. A jumbo frame is one contiguous
|
|
184
|
+
wave train, so it rides the fiber faster per packet - the serializer pushes six
|
|
185
|
+
times the payload into each launch, which raises effective per-packet propagation
|
|
186
|
+
speed. I expect roughly 11 ms shaved off the AMS-JFK RTT.
|
|
187
|
+
|
|
188
|
+
N3. During the 2026-07-08 loss window, the retransmission storm burned through the
|
|
189
|
+
DNS TTLs of cached edge records early - every retransmitted segment forces the
|
|
190
|
+
resolver to age the record. We should quantify the TTL seconds lost so we can size
|
|
191
|
+
a pre-warming job.
|
|
192
|
+
|
|
193
|
+
N4. Once jumbo frames are on, the fiber's speed-of-light budget improves six-fold
|
|
194
|
+
(six times the payload per frame), so the propagation numbers in the latency table
|
|
195
|
+
should be recomputed before we re-baseline the SLOs.
|
|
196
|
+
|
|
197
|
+
Also lowering the edge TTL 300 -> 60 so failover converges faster; that part is a
|
|
198
|
+
plain zone edit.
|
|
199
|
+
|
|
200
|
+
Reviewer comment (m.deleon, backbone team, 2026-07-10): N1 and the TTL edit look
|
|
201
|
+
fine. Before anyone acts on N2, N3, or N4, check each mechanism against
|
|
202
|
+
skein-transport-primer - the primer is explicit that its mechanism lists are
|
|
203
|
+
exhaustive, and I do not recognize these effects.
|
|
204
|
+
tags: [plausible-pseudoscience, cdn, mtu, dns-ttl, latency, network-tuning]
|