summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJosh Bleecher Snyder <josh@tailscale.com>2021-05-11 12:20:00 -0700
committerJosh Bleecher Snyder <josharian@gmail.com>2021-05-11 14:28:47 -0700
commit98cae48e707c2ac9c712f040998f1c8c311b6914 (patch)
tree35db134aa84161f2fe83336e41b991916a3cc610
parent93569120531345fb32d0d6333a1c8e8f5e0031bf (diff)
downloadtailscale-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.go21
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)])
}