You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+11Lines changed: 11 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,6 +5,17 @@ All notable changes to this project will be documented in this file.
5
5
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
8
+
## [0.12.3] - 2025-12-11
9
+
10
+
### Changed
11
+
12
+
-**SPF caching in demand placement**: `demand_placement_analysis()` caches SPF results by (source, policy_preset) for ECMP, WCMP, and TE_WCMP_UNLIM policies; TE policies recompute when capacity constraints require alternate paths
13
+
-**MSD AnalysisContext caching**: `MaximumSupportedDemand` builds `AnalysisContext` once and reuses it across all binary search probes
14
+
15
+
### Fixed
16
+
17
+
-**TrafficDemand ID preservation**: Fixed context caching with `mode: combine` by ensuring `TrafficDemand.id` is preserved through serialization; pseudo node names now remain consistent across context build and analysis
Copy file name to clipboardExpand all lines: docs/reference/design.md
+11-1Lines changed: 11 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -654,7 +654,7 @@ Managers handle scenario dynamics and prepare inputs for algorithmic steps.
654
654
- Deterministic expansion: source/sink node lists sorted alphabetically; no randomization
655
655
- Supports `combine` mode (aggregate via pseudo nodes) and `pairwise` mode (individual (src,dst) pairs with volume split)
656
656
- Demands sorted by ascending priority before placement (lower value = higher priority)
657
-
- Placement handled by Core's FlowPolicy with configurable presets (ECMP, WCMP, TE modes)
657
+
- Placement uses SPF caching for simple policies (ECMP, WCMP, TE_WCMP_UNLIM), FlowPolicy for complex multi-flow policies
658
658
- Non-mutating: operates on Core flow graphs with exclusions; Network remains unmodified
659
659
660
660
**Failure Manager** (`ngraph.exec.failure.manager`): Applies a `FailurePolicy` to compute exclusion sets and runs analyses with those exclusions.
@@ -737,6 +737,16 @@ For Monte Carlo analysis with many failure iterations, graph construction is amo
737
737
738
738
This optimization is critical for performance: graph construction involves Python processing, NumPy array creation, and C++ object initialization. Building the graph once eliminates this overhead from the per-iteration critical path, enabling the GIL-releasing C++ algorithms to execute with minimal Python overhead.
739
739
740
+
**SPF Caching for Demand Placement:**
741
+
742
+
For demand placement with cacheable policies (ECMP, WCMP, TE_WCMP_UNLIM), SPF results are cached by (source_node, policy_preset):
743
+
744
+
- Initial SPF computed once per unique source; subsequent demands from the same source reuse the cached DAG
745
+
- For TE policies, DAG is recomputed when capacity constraints require alternate paths
746
+
- Complex multi-flow policies (TE_ECMP_16_LSP, TE_ECMP_UP_TO_256_LSP) use FlowPolicy directly
747
+
748
+
This reduces SPF computations from O(demands) to O(unique_sources) for workloads where many demands share the same source nodes.
749
+
740
750
**Monte Carlo Deduplication:**
741
751
742
752
FailureManager collapses identical failure patterns into single executions. Runtime
0 commit comments