• Josh Bleecher Snyder's avatar
    internal/poll: copy and use errnoErr to avoid allocations · 4fb900e9
    Josh Bleecher Snyder authored
    Converting a syscall.Errno to an interface is
    a significant source of allocations in os/exec.
    
    Elsewhere in the tree, we have pre-allocated errors
    for common errno values. Use the same trick here.
    
    This CL makes yet another copy of this code.
    The problem is that there isn't really a great place to share it.
    
    The existing copies are in:
    
    cmd/vendor/golang.org/x/sys/unix
    cmd/vendor/golang.org/x/sys/windows
    cmd/vendor/golang.org/x/sys/windows/registry
    internal/syscall/windows
    internal/syscall/windows/registry
    syscall
    
    internal/poll can't import from cmd/vendor, and cmd/vendor
    can't import from internal/*, so we can ignore cmd/vendor.
    
    We could put the unix version in internal/syscall/unix
    and then have a platform-independent wrapper in internal/syscall.
    But syscall couldn't use it; internal/syscall/* depends on syscall.
    So that only allows code re-use with internal/syscall/windows/*.
    
    We could create a new very low level internal package, internal/errno.
    But syscall couldn't use it, because it has to import syscall
    to get access to syscall.Errno.
    So that only allows code re-use with internal/syscall/windows/*.
    
    It's not clear that that any of these options pulls its weight.
    
    The obvious and "correct" place for this is syscall.
    But we can't export syscall's version, because package syscall is frozen.
    
    So just copy the code. There's not much of it.
    
    name            old alloc/op   new alloc/op   delta
    ExecHostname-8    6.15kB ± 0%    6.13kB ± 0%  -0.38%  (p=0.000 n=20+19)
    
    name            old allocs/op  new allocs/op  delta
    ExecHostname-8      34.0 ± 0%      31.0 ± 0%  -8.82%  (p=0.000 n=20+20)
    
    Fixes #30535
    
    Change-Id: Idd31c7cced6e15387acc698ffc011e1b7b479903
    Reviewed-on: https://go-review.googlesource.com/c/164971
    Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
    Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    4fb900e9
fd_poll_runtime.go 3.71 KB