[#957] treesvc/heap: Cache FileName attribute
``` goos: linux goarch: amd64 pkg: git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/tree cpu: 11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz │ new │ cache │ │ sec/op │ sec/op vs base │ GetSubTree/latency-8 4.059m ± 20% 2.350m ± 19% -42.11% (p=0.000 n=10) GetSubTree/total_time-8 78.82m ± 4% 70.62m ± 8% -10.39% (p=0.001 n=10) geomean 17.89m 12.88m -27.98% │ new │ cache │ │ B/op │ B/op vs base │ GetSubTree/latency-8 32.81Mi ± 0% 43.87Mi ± 0% +33.72% (p=0.000 n=10) GetSubTree/total_time-8 32.81Mi ± 0% 43.87Mi ± 0% +33.73% (p=0.000 n=10) geomean 32.81Mi 43.87Mi +33.72% │ new │ cache │ │ allocs/op │ allocs/op vs base │ GetSubTree/latency-8 400.0k ± 0% 400.0k ± 0% +0.01% (p=0.000 n=10) GetSubTree/total_time-8 400.0k ± 0% 400.0k ± 0% +0.01% (p=0.000 n=10) geomean 400.0k 400.0k +0.01% ``` Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
This commit is contained in:
parent
3601feab81
commit
77bdadde14
1 changed files with 14 additions and 5 deletions
|
@ -8,9 +8,13 @@ import (
|
|||
)
|
||||
|
||||
type OrderedSlice struct {
|
||||
nodes []pilorama.NodeInfo
|
||||
nodes []node
|
||||
sorted bool
|
||||
}
|
||||
type node struct {
|
||||
filename []byte
|
||||
info *pilorama.NodeInfo
|
||||
}
|
||||
|
||||
func NewOrderedSlice() *OrderedSlice {
|
||||
return new(OrderedSlice)
|
||||
|
@ -18,7 +22,12 @@ func NewOrderedSlice() *OrderedSlice {
|
|||
|
||||
func (s *OrderedSlice) Insert(infos ...pilorama.NodeInfo) {
|
||||
s.sorted = false
|
||||
s.nodes = append(s.nodes, infos...)
|
||||
for i := range infos {
|
||||
s.nodes = append(s.nodes, node{
|
||||
filename: infos[i].Meta.GetAttr(pilorama.AttributeFilename),
|
||||
info: &infos[i],
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (s *OrderedSlice) IsEmpty() bool {
|
||||
|
@ -33,15 +42,15 @@ func (s *OrderedSlice) ExtractMin() pilorama.NodeInfo {
|
|||
|
||||
node := s.nodes[0]
|
||||
s.nodes = s.nodes[1:]
|
||||
return node
|
||||
return *node.info
|
||||
}
|
||||
|
||||
func sortByFilename(nodes []pilorama.NodeInfo) {
|
||||
func sortByFilename(nodes []node) {
|
||||
if len(nodes) == 0 {
|
||||
return
|
||||
}
|
||||
less := func(i, j int) bool {
|
||||
return bytes.Compare(nodes[i].Meta.GetAttr(pilorama.AttributeFilename), nodes[j].Meta.GetAttr(pilorama.AttributeFilename)) < 0
|
||||
return bytes.Compare(nodes[i].filename, nodes[j].filename) < 0
|
||||
}
|
||||
sort.Slice(nodes, less)
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue