• Dmitry Vyukov's avatar
    runtime: move nanotime wrappers to time and poll packages · ff51353c
    Dmitry Vyukov authored
    The nanotime wrappers in runtime introduce a bunch
    of unnecessary code onto hot paths, e.g.:
    
    0000000000449d70 <time.runtimeNano>:
      449d70:       64 48 8b 0c 25 f8 ff    mov    %fs:0xfffffffffffffff8,%rcx
      449d77:       ff ff
      449d79:       48 3b 61 10             cmp    0x10(%rcx),%rsp
      449d7d:       76 26                   jbe    449da5 <time.runtimeNano+0x35>
      449d7f:       48 83 ec 10             sub    $0x10,%rsp
      449d83:       48 89 6c 24 08          mov    %rbp,0x8(%rsp)
      449d88:       48 8d 6c 24 08          lea    0x8(%rsp),%rbp
      449d8d:       e8 ae 18 01 00          callq  45b640 <runtime.nanotime>
      449d92:       48 8b 04 24             mov    (%rsp),%rax
      449d96:       48 89 44 24 18          mov    %rax,0x18(%rsp)
      449d9b:       48 8b 6c 24 08          mov    0x8(%rsp),%rbp
      449da0:       48 83 c4 10             add    $0x10,%rsp
      449da4:       c3                      retq
      449da5:       e8 56 e0 00 00          callq  457e00 <runtime.morestack_noctxt>
      449daa:       eb c4                   jmp    449d70 <time.runtimeNano>
    
    Move them to the corresponding packages which eliminates all of this.
    
    name                  old time/op  new time/op  delta
    TCP4OneShotTimeout-6  17.1µs ± 1%  17.0µs ± 0%  -0.66%  (p=0.032 n=5+5)
    SetReadDeadline-6      234ns ± 1%   232ns ± 0%  -0.77%  (p=0.016 n=5+4)
    
    Update #25729
    
    Change-Id: Iee05027adcdc289ba895c5f5a37f154e451bc862
    Reviewed-on: https://go-review.googlesource.com/c/146342
    Run-TryBot: Dmitry Vyukov <dvyukov@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
    ff51353c
time.go 44.9 KB