Skip to content

Commit 36de135

Browse files
committed
v0.2.1 - dc-bb-interconnect and minor fixes
1 parent 7360df3 commit 36de135

39 files changed

Lines changed: 6869 additions & 37 deletions

File tree

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,3 +152,7 @@ papers/
152152
# Performance analysis results
153153
dev/perf_results/
154154
dev/perf_plots/
155+
156+
# Experiment results (generated outputs, not source configs)
157+
experiments/*/results/
158+
experiments/**/results/

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,17 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.2.1] - 2026-02-02
9+
10+
### Added
11+
12+
- `experiments/dc-bb-interconnect/` - DC-backbone interconnect analysis experiment with multiple topology scenarios
13+
- `netlab.__version__` - Runtime version access via `importlib.metadata`
14+
15+
### Fixed
16+
17+
- Replaced incomplete LICENSE file with full AGPL-3.0 text
18+
819
## [0.2.0] - 2025-12-06
920

1021
### Changed

LICENSE

Lines changed: 547 additions & 34 deletions
Large diffs are not rendered by default.

experiments/_shared/components.yml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Shared hardware components for experiments
2+
3+
components:
4+
# 51.2T switch (Broadcom Tomahawk5 / Cisco G200 class)
5+
Switch_51T:
6+
component_type: chassis
7+
description: "51.2T switch (TH5/G200 class)"
8+
capex: 45000.0
9+
power_watts: 2500.0
10+
power_watts_max: 3500.0
11+
capacity: 51200.0
12+
ports: 64
13+
14+
# 800G 2FR4 optic (2km reach)
15+
Optic_800G_2FR4:
16+
component_type: optic
17+
description: "800G 2FR4"
18+
capex: 500.0
19+
power_watts: 16.0
20+
21+
# 800G ZR+ optic (long-haul)
22+
Optic_800G_ZR_Plus:
23+
component_type: optic
24+
description: "800G ZR+"
25+
capex: 5000.0
26+
power_watts: 30.0
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
# DC-BB Interconnect Study
2+
3+
Assessment of Data Center (DC) to Backbone (BB) interconnect topologies across two sites.
4+
5+
## Network Model
6+
7+
```
8+
Site A Site B
9+
┌─────────────────┐ ┌─────────────────┐
10+
│ Data Center │ │ Data Center │
11+
│ (rows x cols) │ │ (rows x cols) │
12+
└────────┬────────┘ └────────┬────────┘
13+
│ │
14+
▼ ▼
15+
┌─────────────────┐ ┌─────────────────┐
16+
│ Backbone │◄──────────────►│ Backbone │
17+
│ (planes x cols) │ Inter-site │ (planes x cols) │
18+
└─────────────────┘ └─────────────────┘
19+
```
20+
21+
## Assumptions
22+
23+
### Data Center (DC) Layer
24+
25+
- Modeled as a matrix with rows and columns
26+
- Rows represent independent rows in the DC spine layer
27+
- Columns represent devices per row
28+
- Traffic originates/terminates at or behind DC layer nodes
29+
- Supported shapes: 16x36, 24x64
30+
31+
### Backbone (BB) Layer
32+
33+
- Modeled as a matrix with planes and columns (nodes per plane)
34+
- Planes are independent within a site (no cross-plane connectivity intra-site)
35+
- BB attaches to DC spine layer
36+
- Supported shapes: 64x4, 32x4, 16x4, 8x4, 16x1, 16x2
37+
38+
### Inter-site Connectivity
39+
40+
- Only BB layers are interconnected between sites
41+
- Connectivity is plane-to-plane (plane N at Site A connects to plane N at Site B)
42+
- Planes within a site are NOT connected to each other
43+
44+
### Asymmetry Support
45+
46+
- DC shapes can differ between sites
47+
- BB shapes can differ between sites (both plane count and nodes-per-plane)
48+
- When BB plane counts differ, only common planes (min of both) have inter-site links
49+
50+
## Topology Naming
51+
52+
Format: `dc{R}x{C}_bb{P}x{N}_bb{P}x{N}_dc{R}x{C}_{pattern}`
53+
54+
- DC-A: Site A Data Center (rows x cols)
55+
- BB-A: Site A Backbone (planes x nodes)
56+
- BB-B: Site B Backbone (planes x nodes)
57+
- DC-B: Site B Data Center (rows x cols)
58+
- pattern: Interconnect pattern (one_to_one, full_mesh, etc.)
59+
60+
Examples:
61+
62+
- `dc16x36_bb32x4_bb32x4_dc16x36_one_to_one` - symmetric 32-plane BB
63+
- `dc16x36_bb16x4_bb16x4_dc16x36_full_mesh` - symmetric 16-plane BB
64+
- `dc16x36_bb32x4_bb16x4_dc24x64_one_to_one` - asymmetric configuration
65+
66+
## Usage
67+
68+
```bash
69+
# List available topologies
70+
python3 run.py --list
71+
72+
# Run specific topology with seeds
73+
python3 run.py dc16x36_bb32x4_bb32x4_dc16x36_one_to_one --seeds 42 43 44
74+
75+
# Run with seed range
76+
python3 run.py dc16x36_bb32x4_bb32x4_dc16x36_one_to_one --seeds 42:50
77+
78+
# Force re-run (ignore cache)
79+
python3 run.py dc16x36_bb32x4_bb32x4_dc16x36_one_to_one --force
80+
81+
# Compute metrics only (from existing results)
82+
python3 run.py --metrics
83+
84+
# Dry run (generate merged scenario without running)
85+
python3 run.py dc16x36_bb32x4_bb32x4_dc16x36_one_to_one --dry-run
86+
```
87+
88+
## Output
89+
90+
Results saved to `results/{topology}/`:
91+
92+
- `summary.json` - aggregated failure analysis metrics
93+
- `{topology}__seed{N}/` - per-seed raw ngraph results
94+
95+
## Interconnect Patterns
96+
97+
- **one_to_one**: Each DC row connects to a fixed subset of BB planes
98+
- **full_mesh**: Every DC row connects to all BB planes
99+
- **balanced_sparse**: DC rows connect to subset of planes with rotation
100+
- **balanced_dense**: Higher connectivity with skip pattern
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Shared blueprints for DC-BB interconnect experiments
2+
3+
blueprints:
4+
# DC row blueprint - instantiated multiple times per site
5+
# Override node count via params when instantiating
6+
DC_Row:
7+
nodes:
8+
node:
9+
count: 1
10+
template: "{n}"
11+
12+
# BB plane blueprint - instantiated multiple times per site
13+
# Override node count via params when instantiating
14+
BB_Plane:
15+
nodes:
16+
node:
17+
count: 1
18+
template: "{n}"
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
# Test 10: Same as test9 but with COARSE resolution (0.05)
2+
#
3+
# This should reproduce the 0.09375 issue
4+
5+
blueprints:
6+
DC_Row:
7+
nodes:
8+
node:
9+
count: 9
10+
template: "{n}"
11+
BB_Plane:
12+
nodes:
13+
node:
14+
count: 4
15+
template: "{n}"
16+
17+
network:
18+
nodes:
19+
SiteA/DC-[1-4]:
20+
blueprint: DC_Row
21+
attrs: { role: dc, site: A }
22+
SiteA/BB-[1-4]:
23+
blueprint: BB_Plane
24+
attrs: { role: bb, site: A }
25+
SiteB/BB-[1-4]:
26+
blueprint: BB_Plane
27+
attrs: { role: bb, site: B }
28+
SiteB/DC-[1-4]:
29+
blueprint: DC_Row
30+
attrs: { role: dc, site: B }
31+
32+
links:
33+
- source: "SiteA/DC-${dc}/"
34+
target: "SiteA/BB-${bb}/"
35+
expand:
36+
vars:
37+
dc: [1, 2, 3, 4]
38+
bb: [1, 2, 3, 4]
39+
pattern: mesh
40+
capacity: 400
41+
cost: 1
42+
43+
- source: "SiteA/BB-${p}/"
44+
target: "SiteB/BB-${p}/"
45+
expand:
46+
vars:
47+
p: [1, 2, 3, 4]
48+
pattern: mesh
49+
capacity: 800
50+
cost: 10
51+
52+
- source: "SiteB/BB-${bb}/"
53+
target: "SiteB/DC-${dc}/"
54+
expand:
55+
vars:
56+
bb: [1, 2, 3, 4]
57+
dc: [1, 2, 3, 4]
58+
pattern: mesh
59+
capacity: 400
60+
cost: 1
61+
62+
demands:
63+
test:
64+
- source: "^SiteA/DC"
65+
target: "^SiteB/DC"
66+
volume: 500000
67+
mode: combine
68+
flow_policy: SHORTEST_PATHS_ECMP
69+
- source: "^SiteB/DC"
70+
target: "^SiteA/DC"
71+
volume: 500000
72+
mode: combine
73+
flow_policy: SHORTEST_PATHS_ECMP
74+
75+
workflow:
76+
- type: BuildGraph
77+
name: build_graph
78+
- type: MaximumSupportedDemand
79+
name: msd
80+
demand_set: test
81+
resolution: 0.05
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# Test 1: Simple chain - should achieve 100% of bottleneck
2+
#
3+
# Topology: DC-A -> BB-A -> BB-B -> DC-B
4+
#
5+
# Capacities:
6+
# DC-BB: 1000 (not bottleneck)
7+
# BB-BB: 100 (BOTTLENECK)
8+
# BB-DC: 1000 (not bottleneck)
9+
#
10+
# Expected: With demand=1000, Alpha* should be 0.1 (100/1000)
11+
# Placed flow should be 100
12+
13+
network:
14+
nodes:
15+
SiteA/DC/node/1:
16+
attrs:
17+
role: dc
18+
site: A
19+
SiteA/BB/node/1:
20+
attrs:
21+
role: bb
22+
site: A
23+
SiteB/BB/node/1:
24+
attrs:
25+
role: bb
26+
site: B
27+
SiteB/DC/node/1:
28+
attrs:
29+
role: dc
30+
site: B
31+
32+
links:
33+
# DC-A to BB-A: high capacity
34+
- source: "SiteA/DC/node/1"
35+
target: "SiteA/BB/node/1"
36+
capacity: 1000
37+
cost: 1
38+
39+
# BB-A to BB-B: LOW capacity (bottleneck)
40+
- source: "SiteA/BB/node/1"
41+
target: "SiteB/BB/node/1"
42+
capacity: 100
43+
cost: 10
44+
45+
# BB-B to DC-B: high capacity
46+
- source: "SiteB/BB/node/1"
47+
target: "SiteB/DC/node/1"
48+
capacity: 1000
49+
cost: 1
50+
51+
demands:
52+
test:
53+
- source: "SiteA/DC/node/1"
54+
target: "SiteB/DC/node/1"
55+
volume: 1000
56+
flow_policy: SHORTEST_PATHS_ECMP
57+
58+
workflow:
59+
- type: BuildGraph
60+
name: build_graph
61+
- type: MaximumSupportedDemand
62+
name: msd
63+
demand_set: test
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Test 2: Same chain with finer MSD resolution
2+
#
3+
# Expected: Alpha* = 0.1 exactly
4+
5+
network:
6+
nodes:
7+
SiteA/DC/node/1:
8+
attrs:
9+
role: dc
10+
site: A
11+
SiteA/BB/node/1:
12+
attrs:
13+
role: bb
14+
site: A
15+
SiteB/BB/node/1:
16+
attrs:
17+
role: bb
18+
site: B
19+
SiteB/DC/node/1:
20+
attrs:
21+
role: dc
22+
site: B
23+
24+
links:
25+
- source: "SiteA/DC/node/1"
26+
target: "SiteA/BB/node/1"
27+
capacity: 1000
28+
cost: 1
29+
- source: "SiteA/BB/node/1"
30+
target: "SiteB/BB/node/1"
31+
capacity: 100
32+
cost: 10
33+
- source: "SiteB/BB/node/1"
34+
target: "SiteB/DC/node/1"
35+
capacity: 1000
36+
cost: 1
37+
38+
demands:
39+
test:
40+
- source: "SiteA/DC/node/1"
41+
target: "SiteB/DC/node/1"
42+
volume: 1000
43+
flow_policy: SHORTEST_PATHS_ECMP
44+
45+
workflow:
46+
- type: BuildGraph
47+
name: build_graph
48+
- type: MaximumSupportedDemand
49+
name: msd
50+
demand_set: test
51+
resolution: 0.001

0 commit comments

Comments
 (0)