mirror of
https://github.com/tailscale/tailscale.git
synced 2025-02-18 02:48:40 +00:00
tailcfg: optimize keyMarshalText
This function accounted for ~1% of all allocs by tailscaled. It is trivial to improve, so may as well. name old time/op new time/op delta KeyMarshalText-8 197ns ± 0% 47ns ± 0% -76.12% (p=0.016 n=4+5) name old alloc/op new alloc/op delta KeyMarshalText-8 200B ± 0% 80B ± 0% -60.00% (p=0.008 n=5+5) name old allocs/op new allocs/op delta KeyMarshalText-8 5.00 ± 0% 1.00 ± 0% -80.00% (p=0.008 n=5+5) Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
This commit is contained in:
parent
5190435d6e
commit
ceb568202b
@ -7,7 +7,7 @@ package tailcfg
|
|||||||
//go:generate go run tailscale.com/cmd/cloner --type=User,Node,Hostinfo,NetInfo,Login,DNSConfig,DNSResolver,RegisterResponse --clonefunc=true --output=tailcfg_clone.go
|
//go:generate go run tailscale.com/cmd/cloner --type=User,Node,Hostinfo,NetInfo,Login,DNSConfig,DNSResolver,RegisterResponse --clonefunc=true --output=tailcfg_clone.go
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"encoding/hex"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
@ -1027,9 +1027,10 @@ func (k MachineKey) HexString() string { return fmt.Sprintf("%x",
|
|||||||
func (k *MachineKey) UnmarshalText(text []byte) error { return keyUnmarshalText(k[:], "mkey:", text) }
|
func (k *MachineKey) UnmarshalText(text []byte) error { return keyUnmarshalText(k[:], "mkey:", text) }
|
||||||
|
|
||||||
func keyMarshalText(prefix string, k [32]byte) []byte {
|
func keyMarshalText(prefix string, k [32]byte) []byte {
|
||||||
buf := bytes.NewBuffer(make([]byte, 0, len(prefix)+64))
|
buf := make([]byte, len(prefix)+64)
|
||||||
fmt.Fprintf(buf, "%s%x", prefix, k[:])
|
copy(buf, prefix)
|
||||||
return buf.Bytes()
|
hex.Encode(buf[len(prefix):], k[:])
|
||||||
|
return buf
|
||||||
}
|
}
|
||||||
|
|
||||||
func keyUnmarshalText(dst []byte, prefix string, text []byte) error {
|
func keyUnmarshalText(dst []byte, prefix string, text []byte) error {
|
||||||
|
@ -518,3 +518,13 @@ func TestEndpointTypeMarshal(t *testing.T) {
|
|||||||
t.Errorf("got %s; want %s", got, want)
|
t.Errorf("got %s; want %s", got, want)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var sinkBytes []byte
|
||||||
|
|
||||||
|
func BenchmarkKeyMarshalText(b *testing.B) {
|
||||||
|
b.ReportAllocs()
|
||||||
|
var k [32]byte
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
sinkBytes = keyMarshalText("prefix", k)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user