diff options
| author | Josh Bleecher Snyder <josh@tailscale.com> | 2021-05-11 12:20:00 -0700 |
|---|---|---|
| committer | Josh Bleecher Snyder <josharian@gmail.com> | 2021-05-11 14:28:47 -0700 |
| commit | 98cae48e707c2ac9c712f040998f1c8c311b6914 (patch) | |
| tree | 35db134aa84161f2fe83336e41b991916a3cc610 | |
| parent | 93569120531345fb32d0d6333a1c8e8f5e0031bf (diff) | |
| download | tailscale-98cae48e707c2ac9c712f040998f1c8c311b6914.tar.xz tailscale-98cae48e707c2ac9c712f040998f1c8c311b6914.zip | |
wgengine/wglog: optimize wireguardGoString
The new code is ugly, but much faster and leaner.
name old time/op new time/op delta
SetPeers-8 7.81µs ± 1% 3.59µs ± 1% -54.04% (p=0.000 n=9+10)
name old alloc/op new alloc/op delta
SetPeers-8 7.68kB ± 0% 2.53kB ± 0% -67.08% (p=0.000 n=10+10)
name old allocs/op new allocs/op delta
SetPeers-8 237 ± 0% 99 ± 0% -58.23% (p=0.000 n=10+10)
Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
| -rw-r--r-- | wgengine/wglog/wglog.go | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/wgengine/wglog/wglog.go b/wgengine/wglog/wglog.go index 9e7cc5482..4a9c5a6a9 100644 --- a/wgengine/wglog/wglog.go +++ b/wgengine/wglog/wglog.go @@ -85,7 +85,7 @@ func (x *Logger) SetPeers(peers []wgcfg.Peer) { // Construct a new peer public key log rewriter. replace := make(map[string]string) for _, peer := range peers { - old := "peer(" + wireguardGoString(peer.PublicKey) + ")" + old := wireguardGoString(peer.PublicKey) new := peer.PublicKey.ShortString() replace[old] = new } @@ -94,10 +94,17 @@ func (x *Logger) SetPeers(peers []wgcfg.Peer) { // wireguardGoString prints p in the same format used by wireguard-go. func wireguardGoString(k wgkey.Key) string { - base64Key := base64.StdEncoding.EncodeToString(k[:]) - abbreviatedKey := "invalid" - if len(base64Key) == 44 { - abbreviatedKey = base64Key[0:4] + "…" + base64Key[39:43] - } - return abbreviatedKey + const prefix = "peer(" + b := make([]byte, len(prefix)+44) + copy(b, prefix) + r := b[len(prefix):] + base64.StdEncoding.Encode(r, k[:]) + r = r[4:] + copy(r, "…") + r = r[len("…"):] + copy(r, b[len(prefix)+39:len(prefix)+43]) + r = r[4:] + r[0] = ')' + r = r[1:] + return string(b[:len(b)-len(r)]) } |
