portlist: further reduce allocations on Linux

Make Linux parsePorts also an append-style API and attach it to
caller's provided append base memory.

And add a little string intern pool in front of the []byte to string
for inode names.

    name       old time/op    new time/op    delta
    GetList-8    11.1ms ± 4%     9.8ms ± 6%  -11.68%  (p=0.000 n=9+10)

    name       old alloc/op   new alloc/op   delta
    GetList-8    92.8kB ± 2%    79.7kB ± 0%  -14.11%  (p=0.000 n=10+9)

    name       old allocs/op  new allocs/op  delta
    GetList-8     2.94k ± 1%     2.76k ± 0%   -6.16%  (p=0.000 n=10+10)

More coming. (the bulk of the allocations are in addProcesses and
filesystem operations, most of which we should usually be able to
skip)

Updates #5958

Change-Id: I3f0c03646d314a16fef7f8346aefa7d5c96701e7
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
Brad Fitzpatrick
2022-10-22 09:29:37 -07:00
committed by Brad Fitzpatrick
parent def089f9c9
commit 7149155b80
3 changed files with 47 additions and 14 deletions

View File

@@ -52,7 +52,7 @@ func (a *Port) lessThan(b *Port) bool {
}
func (a List) sameInodes(b List) bool {
if a == nil || b == nil || len(a) != len(b) {
if len(a) != len(b) {
return false
}
for i := range a {