Skip to content
Snippets Groups Projects
  • qmuntal's avatar
    a01820c7
    os/user: speed up Current on Windows · a01820c7
    qmuntal authored
    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
    Change-Id: I893c5fcca6969050d73a20ed34770846becd5f5e
    Reviewed-on: https://go-review.googlesource.com/c/go/+/597255
    
    
    Reviewed-by: default avatarIan Lance Taylor <iant@google.com>
    Reviewed-by: default avatarMichael Knyszek <mknyszek@google.com>
    Reviewed-by: default avatarAlex Brainman <alex.brainman@gmail.com>
    LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
    a01820c7
    History
    os/user: speed up Current on Windows
    qmuntal authored
    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
    Change-Id: I893c5fcca6969050d73a20ed34770846becd5f5e
    Reviewed-on: https://go-review.googlesource.com/c/go/+/597255
    
    
    Reviewed-by: default avatarIan Lance Taylor <iant@google.com>
    Reviewed-by: default avatarMichael Knyszek <mknyszek@google.com>
    Reviewed-by: default avatarAlex Brainman <alex.brainman@gmail.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.