Repository navigation
refactor(umbp): one medium per node, selected by UMBPDistributedConfi… - #543
Merged
TianDi101 merged 1 commit intoAug 11, 2026
Merged
Conversation
…g::medium
PoolClient::Init registered DRAM unconditionally and then added HBM/SSD
beside it, so `--tier hbm` or `--tier ssd` produced a two-backend node.
That reads like a tier stack and is not one: since Phase 4 the master
treats every advertised tier as an equally valid put target, so the
second medium is mirrored into by free capacity rather than sitting
behind the first. A node's keys split across two pools for no gain, and
a tier benchmark ends up measuring DRAM.
Replace the per-medium `enabled` flags with a single selector. A node
picks exactly one of DRAM / HBM / SSD; heterogeneity comes from
different nodes picking differently, which the routing plane already
handles. Adding a medium is now a `case` in one switch, not another
`if`.
- UMBPDistributedConfig::medium (new UMBPMedium enum) replaces
enable_ssd_tier and UMBPHbmConfig::enabled. Defaults to DRAM, so an
existing deployment is bit-identical.
- UMBPConfig::Validate checks only the selected medium's sizing; the
unselected blocks are ignored, not validated, so one deployment
template can carry all three.
- PoolClient caches the live tier as medium_ and exposes Medium().
Also removes the two DRAM literals the design doc listed as outstanding:
- the re-cache installer hardcoded TierType::DRAM, which would have
installed into a tier an HBM/SSD node does not have;
- PartitionBatchPutTargets filtered remote routes to DRAM/HBM,
silently dropping every put master routed to a peer's SSD even
though SSD publishes ordinary registered staging pages. New test
CrossNodeBatchPutLandsOnSsdPeer covers exactly this.
Tests: 20/20 umbp ctest targets pass (incl. the new
test_umbp_medium_selection: lowering, per-medium validation, one-backend
registry, and the cross-node SSD put/get).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
TianDi101
added a commit
that referenced
this pull request
Sep 3, 2026
…g::medium (#543) PoolClient::Init registered DRAM unconditionally and then added HBM/SSD beside it, so `--tier hbm` or `--tier ssd` produced a two-backend node. That reads like a tier stack and is not one: since Phase 4 the master treats every advertised tier as an equally valid put target, so the second medium is mirrored into by free capacity rather than sitting behind the first. A node's keys split across two pools for no gain, and a tier benchmark ends up measuring DRAM. Replace the per-medium `enabled` flags with a single selector. A node picks exactly one of DRAM / HBM / SSD; heterogeneity comes from different nodes picking differently, which the routing plane already handles. Adding a medium is now a `case` in one switch, not another `if`. - UMBPDistributedConfig::medium (new UMBPMedium enum) replaces enable_ssd_tier and UMBPHbmConfig::enabled. Defaults to DRAM, so an existing deployment is bit-identical. - UMBPConfig::Validate checks only the selected medium's sizing; the unselected blocks are ignored, not validated, so one deployment template can carry all three. - PoolClient caches the live tier as medium_ and exposes Medium(). Also removes the two DRAM literals the design doc listed as outstanding: - the re-cache installer hardcoded TierType::DRAM, which would have installed into a tier an HBM/SSD node does not have; - PartitionBatchPutTargets filtered remote routes to DRAM/HBM, silently dropping every put master routed to a peer's SSD even though SSD publishes ordinary registered staging pages. New test CrossNodeBatchPutLandsOnSsdPeer covers exactly this. Tests: 20/20 umbp ctest targets pass (incl. the new test_umbp_medium_selection: lowering, per-medium validation, one-backend registry, and the cross-node SSD put/get). Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
…g::medium
PoolClient::Init registered DRAM unconditionally and then added HBM/SSD beside it, so
--tier hbmor--tier ssdproduced a two-backend node. That reads like a tier stack and is not one: since Phase 4 the master treats every advertised tier as an equally valid put target, so the second medium is mirrored into by free capacity rather than sitting behind the first. A node's keys split across two pools for no gain, and a tier benchmark ends up measuring DRAM.Replace the per-medium
enabledflags with a single selector. A node picks exactly one of DRAM / HBM / SSD; heterogeneity comes from different nodes picking differently, which the routing plane already handles. Adding a medium is now acasein one switch, not anotherif.Also removes the two DRAM literals the design doc listed as outstanding:
Tests: 20/20 umbp ctest targets pass (incl. the new test_umbp_medium_selection: lowering, per-medium validation, one-backend registry, and the cross-node SSD put/get).
Motivation
Technical Details
Test Plan
Test Result
Submission Checklist