Skip to content
Snippets Groups Projects
  • qmuntal's avatar
    854349ee
    os/user: speed up Current on Windows · 854349ee
    qmuntal authored
    [This is a roll-forward of CL 597255, which had to be rolled back
    because it broke the windows-arm64 builder, whose current user display
    name is unavailable. This new CL fixes the issue by reintroducing the
    historical behavior of falling back to the user name instead of
    returning an error].
    
    user.Current is slow on Windows sessions connected to an Active
    Directory domain. This is because it uses Windows APIs that do RPC
    calls to the domain controller, such as TranslateAccountW and
    NetUserGetInfo.
    
    This change speeds up user.Current by using the GetUserNameEx API
    instead, which is already optimized for retrieving the current user
    name in different formats.
    
    These are the improvements I see with the new implementation:
    
    goos: windows
    goarch: amd64
    pkg: os/user
    cpu: Intel(R) Core(TM) i7-10850H CPU @ 2.70GHz
               │   old.txt   │               new.txt                │
               │   sec/op    │    sec/op     vs base                │
    Current-12   501.8µ ± 7%   118.6µ ± 11%  -76.36% (p=0.000 n=10)
    
               │  old.txt   │              new.txt              │
               │    B/op    │    B/op     vs base               │
    Current-12   888.0 ± 0%   832.0 ± 0%  -6.31% (p=0.000 n=10)
    
               │  old.txt   │              new.txt               │
               │ allocs/op  │ allocs/op   vs base                │
    Current-12   15.00 ± 0%   11.00 ± 0%  -26.67% (p=0.000 n=10)
    
    Updates #5298
    Fixes #21867
    Fixes #68312
    
    Cq-Include-Trybots: luci.golang.try:gotip-windows-amd64-longtest,gotip-windows-arm64
    Change-Id: Ib7f77086d389cccb9d91cb77ea688d438a0ee5fd
    Reviewed-on: https://go-review.googlesource.com/c/go/+/605135
    
    
    Reviewed-by: default avatarDmitri Shuralyov <dmitshur@google.com>
    Reviewed-by: default avatarMauri de Souza Meneguzzo <mauri870@gmail.com>
    Reviewed-by: default avatarAlex Brainman <alex.brainman@gmail.com>
    Reviewed-by: default avatarCherry Mui <cherryyz@google.com>
    LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
    854349ee
    History
    os/user: speed up Current on Windows
    qmuntal authored
    [This is a roll-forward of CL 597255, which had to be rolled back
    because it broke the windows-arm64 builder, whose current user display
    name is unavailable. This new CL fixes the issue by reintroducing the
    historical behavior of falling back to the user name instead of
    returning an error].
    
    user.Current is slow on Windows sessions connected to an Active
    Directory domain. This is because it uses Windows APIs that do RPC
    calls to the domain controller, such as TranslateAccountW and
    NetUserGetInfo.
    
    This change speeds up user.Current by using the GetUserNameEx API
    instead, which is already optimized for retrieving the current user
    name in different formats.
    
    These are the improvements I see with the new implementation:
    
    goos: windows
    goarch: amd64
    pkg: os/user
    cpu: Intel(R) Core(TM) i7-10850H CPU @ 2.70GHz
               │   old.txt   │               new.txt                │
               │   sec/op    │    sec/op     vs base                │
    Current-12   501.8µ ± 7%   118.6µ ± 11%  -76.36% (p=0.000 n=10)
    
               │  old.txt   │              new.txt              │
               │    B/op    │    B/op     vs base               │
    Current-12   888.0 ± 0%   832.0 ± 0%  -6.31% (p=0.000 n=10)
    
               │  old.txt   │              new.txt               │
               │ allocs/op  │ allocs/op   vs base                │
    Current-12   15.00 ± 0%   11.00 ± 0%  -26.67% (p=0.000 n=10)
    
    Updates #5298
    Fixes #21867
    Fixes #68312
    
    Cq-Include-Trybots: luci.golang.try:gotip-windows-amd64-longtest,gotip-windows-arm64
    Change-Id: Ib7f77086d389cccb9d91cb77ea688d438a0ee5fd
    Reviewed-on: https://go-review.googlesource.com/c/go/+/605135
    
    
    Reviewed-by: default avatarDmitri Shuralyov <dmitshur@google.com>
    Reviewed-by: default avatarMauri de Souza Meneguzzo <mauri870@gmail.com>
    Reviewed-by: default avatarAlex Brainman <alex.brainman@gmail.com>
    Reviewed-by: default avatarCherry Mui <cherryyz@google.com>
    LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Code owners
Assign users and groups as approvers for specific file changes. Learn more.