Skip to content

perf(endpoints): drop the per-endpoint load-balancing-weight wrapper - #8

Closed
christianscott wants to merge 1 commit into
ep-mem/hash-reusefrom
ep-mem/weight-wrapper
Closed

perf(endpoints): drop the per-endpoint load-balancing-weight wrapper#8
christianscott wants to merge 1 commit into
ep-mem/hash-reusefrom
ep-mem/weight-wrapper

Conversation

@christianscott

Copy link
Copy Markdown

CreateLBEndpoint set LoadBalancingWeight to an explicit uint32 wrapper of
value 1 for every endpoint. Envoy treats an unset per-endpoint weight as
1 (in all versions), so the wrapper was a heap allocation per endpoint
with no behavioral effect; per-endpoint protos dominate control-plane
heap at scale (~60-67% in profiles, with wrappers alone at ~8%).

Locality-level LocalityLbEndpoints weights are computed exactly as
before, treating an unset endpoint weight as 1 via a new lbWeight()
helper. Plugins that set explicit endpoint weights (ServiceEntry, local
cluster) are unaffected.

Wire compatibility: omitting instead of explicitly sending weight 1 is
behavior-identical for any Envoy version. Endpoint equality hashes change
once, so envoys receive a single EDS re-push at upgrade (and again on
rollback).

Benchmarks (included): build path -9.5% B/op, -21% allocs/op at
100/1k/10k endpoints.

Golden outputs regenerated: only per-endpoint loadBalancingWeight: 1
lines removed.

Signed-off-by: Christian Scott christian@modal.com


Stack created with GitHub Stacks CLIGive Feedback 💬

CreateLBEndpoint set LoadBalancingWeight to an explicit uint32 wrapper of
value 1 for every endpoint. Envoy treats an unset per-endpoint weight as
1 (in all versions), so the wrapper was a heap allocation per endpoint
with no behavioral effect; per-endpoint protos dominate control-plane
heap at scale (~60-67% in profiles, with wrappers alone at ~8%).

Locality-level LocalityLbEndpoints weights are computed exactly as
before, treating an unset endpoint weight as 1 via a new lbWeight()
helper. Plugins that set explicit endpoint weights (ServiceEntry, local
cluster) are unaffected.

Wire compatibility: omitting instead of explicitly sending weight 1 is
behavior-identical for any Envoy version. Endpoint equality hashes change
once, so envoys receive a single EDS re-push at upgrade (and again on
rollback).

Benchmarks (included): build path -9.5% B/op, -21% allocs/op at
100/1k/10k endpoints.

Golden outputs regenerated: only per-endpoint loadBalancingWeight: 1
lines removed.

Signed-off-by: Christian Scott <christian@modal.com>
@christianscott

Copy link
Copy Markdown
Author

Reopened against kgateway-dev/kgateway

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant