forked from TrueCloudLab/frostfs-sdk-go
[#236] netmap: Replace sort.Slice() with slices.Sort()
``` goos: linux goarch: amd64 pkg: git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap cpu: 11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz │ old │ new │ │ sec/op │ sec/op vs base │ Netmap_ContainerNodes/REP_2-8 10.395µ ± 14% 9.227µ ± 13% -11.24% (p=0.015 n=10) Netmap_ContainerNodes/REP_2_IN_X_CBF_2_SELECT_2_FROM_*_AS_X-8 10.110µ ± 16% 9.189µ ± 7% ~ (p=0.105 n=10) geomean 10.25µ 9.208µ -10.18% │ old │ new │ │ B/op │ B/op vs base │ Netmap_ContainerNodes/REP_2-8 8.695Ki ± 0% 8.320Ki ± 0% -4.31% (p=0.000 n=10) Netmap_ContainerNodes/REP_2_IN_X_CBF_2_SELECT_2_FROM_*_AS_X-8 8.117Ki ± 0% 7.742Ki ± 0% -4.62% (p=0.000 n=10) geomean 8.401Ki 8.026Ki -4.47% │ old │ new │ │ allocs/op │ allocs/op vs base │ Netmap_ContainerNodes/REP_2-8 138.0 ± 0% 122.0 ± 0% -11.59% (p=0.000 n=10) Netmap_ContainerNodes/REP_2_IN_X_CBF_2_SELECT_2_FROM_*_AS_X-8 138.0 ± 0% 122.0 ± 0% -11.59% (p=0.000 n=10) geomean 138.0 122.0 -11.59% ``` Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
This commit is contained in:
parent
9d89f08c7b
commit
a69f00903c
4 changed files with 17 additions and 29 deletions
|
@ -1,8 +1,6 @@
|
||||||
package netmap
|
package netmap
|
||||||
|
|
||||||
import (
|
import "slices"
|
||||||
"sort"
|
|
||||||
)
|
|
||||||
|
|
||||||
type (
|
type (
|
||||||
// aggregator can calculate some value across all netmap
|
// aggregator can calculate some value across all netmap
|
||||||
|
@ -128,7 +126,7 @@ func (a *meanIQRAgg) Compute() float64 {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
sort.Slice(a.arr, func(i, j int) bool { return a.arr[i] < a.arr[j] })
|
slices.Sort(a.arr)
|
||||||
|
|
||||||
var min, max float64
|
var min, max float64
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ package netmap
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"sort"
|
"slices"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
@ -227,14 +227,6 @@ func (x NodeInfo) Hash() uint64 {
|
||||||
return hrw.Hash(x.m.GetPublicKey())
|
return hrw.Hash(x.m.GetPublicKey())
|
||||||
}
|
}
|
||||||
|
|
||||||
// less declares "less than" comparison between two NodeInfo instances:
|
|
||||||
// x1 is less than x2 if it has less Hash().
|
|
||||||
//
|
|
||||||
// Method is needed for internal placement needs.
|
|
||||||
func less(x1, x2 NodeInfo) bool {
|
|
||||||
return x1.Hash() < x2.Hash()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *NodeInfo) setNumericAttribute(key string, num uint64) {
|
func (x *NodeInfo) setNumericAttribute(key string, num uint64) {
|
||||||
x.SetAttribute(key, strconv.FormatUint(num, 10))
|
x.SetAttribute(key, strconv.FormatUint(num, 10))
|
||||||
}
|
}
|
||||||
|
@ -455,15 +447,11 @@ func (x *NodeInfo) SortAttributes() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
sort.Slice(as, func(i, j int) bool {
|
slices.SortFunc(as, func(ai, aj netmap.Attribute) int {
|
||||||
switch strings.Compare(as[i].GetKey(), as[j].GetKey()) {
|
if r := strings.Compare(ai.GetKey(), aj.GetKey()); r != 0 {
|
||||||
case -1:
|
return r
|
||||||
return true
|
|
||||||
case 1:
|
|
||||||
return false
|
|
||||||
default:
|
|
||||||
return as[i].GetValue() < as[j].GetValue()
|
|
||||||
}
|
}
|
||||||
|
return strings.Compare(ai.GetValue(), aj.GetValue())
|
||||||
})
|
})
|
||||||
|
|
||||||
x.m.SetAttributes(as)
|
x.m.SetAttributes(as)
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
package netmap
|
package netmap
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"cmp"
|
||||||
"fmt"
|
"fmt"
|
||||||
"sort"
|
"slices"
|
||||||
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
|
||||||
"git.frostfs.info/TrueCloudLab/hrw"
|
"git.frostfs.info/TrueCloudLab/hrw"
|
||||||
|
@ -70,12 +71,12 @@ func (c *context) getSelection(s netmap.Selector) ([]nodes, error) {
|
||||||
// we also need to have deterministic input to HRW sorting routine.
|
// we also need to have deterministic input to HRW sorting routine.
|
||||||
if len(c.hrwSeed) == 0 {
|
if len(c.hrwSeed) == 0 {
|
||||||
if s.GetAttribute() == "" {
|
if s.GetAttribute() == "" {
|
||||||
sort.Slice(buckets, func(i, j int) bool {
|
slices.SortFunc(buckets, func(b1, b2 nodeAttrPair) int {
|
||||||
return less(buckets[i].nodes[0], buckets[j].nodes[0])
|
return cmp.Compare(b1.nodes[0].Hash(), b2.nodes[0].Hash())
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
sort.Slice(buckets, func(i, j int) bool {
|
slices.SortFunc(buckets, func(b1, b2 nodeAttrPair) int {
|
||||||
return buckets[i].attr < buckets[j].attr
|
return cmp.Compare(b1.attr, b2.attr)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
package netmap
|
package netmap
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"cmp"
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"fmt"
|
"fmt"
|
||||||
mrand "math/rand"
|
mrand "math/rand"
|
||||||
"sort"
|
"slices"
|
||||||
"strconv"
|
"strconv"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
@ -85,8 +86,8 @@ func BenchmarkHRWSort(b *testing.B) {
|
||||||
copy(realNodes, vectors)
|
copy(realNodes, vectors)
|
||||||
b.StartTimer()
|
b.StartTimer()
|
||||||
|
|
||||||
sort.Slice(vectors, func(i, j int) bool {
|
slices.SortFunc(vectors, func(vi, vj nodes) int {
|
||||||
return less(vectors[i][0], vectors[j][0])
|
return cmp.Compare(vi[0].Hash(), vj[0].Hash())
|
||||||
})
|
})
|
||||||
hrw.SortSliceByWeightIndex(realNodes, weights, pivot)
|
hrw.SortSliceByWeightIndex(realNodes, weights, pivot)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue