perf(kubernetes): optimize AutoPath slice allocation (#7323)

Pre-allocate slice capacity in AutoPath to eliminate unnecessary
memory reallocations. This avoids slice growth when appending
search domains and sentinel value.

Benchmark shows significant performance improvement:
- Before: 538.6 ns/op, 560 B/op, 13 allocs/op
- After:  436.8 ns/op, 336 B/op, 11 allocs/op
- Result: 19% faster, 40% less memory, 15% fewer allocations

The optimization benefits Kubernetes clusters using autopath for
server-side search path completion.

Adds benchmark test to measure AutoPath performance.

Signed-off-by: Ville Vesilehto <ville@vesilehto.fi>
This commit is contained in:
Ville Vesilehto
2025-05-29 03:58:01 +03:00
committed by GitHub
parent 19a6ae4983
commit 60227bd8d2
2 changed files with 81 additions and 7 deletions

View File

@@ -33,15 +33,12 @@ func (k *Kubernetes) AutoPath(state request.Request) []string {
return nil
}
search := make([]string, 3)
totalSize := 3 + len(k.autoPathSearch) + 1 // +1 for sentinel
search := make([]string, 0, totalSize)
if zone == "." {
search[0] = pod.Namespace + ".svc."
search[1] = "svc."
search[2] = "."
search = append(search, pod.Namespace+".svc.", "svc.", ".")
} else {
search[0] = pod.Namespace + ".svc." + zone
search[1] = "svc." + zone
search[2] = zone
search = append(search, pod.Namespace+".svc."+zone, "svc."+zone, zone)
}
search = append(search, k.autoPathSearch...)