From 04b2c4631d3a832591afe6c647839ad7a24aa2bd Mon Sep 17 00:00:00 2001 From: Jamie Liu Date: Thu, 15 Aug 2024 16:26:48 -0700 Subject: [PATCH] state: fix redundant reconciliation in typeDecodeDatabase.Lookup() Simple microbenchmark for save+load of a pgalloc.memAcctSet: Before this CL: ``` goos: linux goarch: amd64 pkg: pkg/sentry/pgalloc/pgalloc cpu: Intel(R) Xeon(R) CPU @ 2.60GHz BenchmarkMemAcctSetSaveLoad BenchmarkMemAcctSetSaveLoad/1000 BenchmarkMemAcctSetSaveLoad/1000-48 362 3313192 ns/op BenchmarkMemAcctSetSaveLoad/10000 BenchmarkMemAcctSetSaveLoad/10000-48 33 35237918 ns/op BenchmarkMemAcctSetSaveLoad/100000 BenchmarkMemAcctSetSaveLoad/100000-48 3 360797304 ns/op PASS ``` After this CL: ``` goos: linux goarch: amd64 pkg: pkg/sentry/pgalloc/pgalloc cpu: Intel(R) Xeon(R) CPU @ 2.60GHz BenchmarkMemAcctSetSaveLoad BenchmarkMemAcctSetSaveLoad/1000 BenchmarkMemAcctSetSaveLoad/1000-48 417 2837200 ns/op BenchmarkMemAcctSetSaveLoad/10000 BenchmarkMemAcctSetSaveLoad/10000-48 38 30813388 ns/op BenchmarkMemAcctSetSaveLoad/100000 BenchmarkMemAcctSetSaveLoad/100000-48 4 311275972 ns/op PASS ``` PiperOrigin-RevId: 663494805 --- pkg/state/types.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/state/types.go b/pkg/state/types.go index d3e1cbfe3..09f889084 100644 --- a/pkg/state/types.go +++ b/pkg/state/types.go @@ -204,7 +204,7 @@ var singleFieldOrder = []int{0} // // This method never returns nil. func (tbd *typeDecodeDatabase) Lookup(id typeID, typ reflect.Type) *reconciledTypeEntry { - if len(tbd.byID) > int(id) && tbd.byID[id-1] != nil { + if len(tbd.byID) >= int(id) && tbd.byID[id-1] != nil { // Already reconciled. return tbd.byID[id-1] }