They are used by HRW sorting and it makes sense to store them separately
instead of iterating over all attributes each time we need them.
It also simplifies code: we already parse them in NodeInfo.readFromV2(),
so just save the result.
```
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 5.923µ ± 0% 5.209µ ± 1% -12.05% (p=0.000 n=10)
Netmap_ContainerNodes/REP_2_IN_X_CBF_2_SELECT_2_FROM_*_AS_X-8 5.931µ ± 7% 5.088µ ± 1% -14.22% (p=0.000 n=10)
geomean 5.927µ 5.148µ -13.14%
│ old │ new │
│ B/op │ B/op vs base │
Netmap_ContainerNodes/REP_2-8 7.609Ki ± 0% 8.172Ki ± 0% +7.39% (p=0.000 n=10)
Netmap_ContainerNodes/REP_2_IN_X_CBF_2_SELECT_2_FROM_*_AS_X-8 7.031Ki ± 0% 7.469Ki ± 0% +6.22% (p=0.000 n=10)
geomean 7.315Ki 7.812Ki +6.81%
│ old │ new │
│ allocs/op │ allocs/op vs base │
Netmap_ContainerNodes/REP_2-8 77.00 ± 0% 77.00 ± 0% ~ (p=1.000 n=10) ¹
Netmap_ContainerNodes/REP_2_IN_X_CBF_2_SELECT_2_FROM_*_AS_X-8 77.00 ± 0% 77.00 ± 0% ~ (p=1.000 n=10) ¹
geomean 77.00 77.00 +0.00%
¹ all samples are equal
```
Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
The higher the price, the lower reverse min weight should be.
Previously nodes with 0 price had 0 weight which is a bit misleading.
Introduced in d71a0e0755.
Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
Support preprocessing within the `NodeInfo` type. Provide methods for
placement directly from the `NodeInfo` type. Returns slice of slices of
`NodeInfo` from placement methods of `Netmap`. Remove no longer needed
`Node` and `Nodes` types.
```
name old time/op new time/op delta
ManySelects-12 19.7µs ±14% 15.8µs ±15% -19.70% (p=0.000 n=20+20)
name old alloc/op new alloc/op delta
ManySelects-12 8.65kB ± 0% 6.22kB ± 0% -28.03% (p=0.000 n=20+20)
name old allocs/op new allocs/op delta
ManySelects-12 82.0 ± 0% 81.0 ± 0% -1.22% (p=0.000 n=20+20)
```
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>