1. 05 Nov, 2019 30 commits
  2. 04 Nov, 2019 10 commits
    • Michael Anthony Knyszek's avatar
      runtime: clean up power-of-two rounding code with align functions · 383b447e
      Michael Anthony Knyszek authored
      This change renames the "round" function to the more appropriately named
      "alignUp" which rounds an integer up to the next multiple of a power of
      two.
      
      This change also adds the alignDown function, which is almost like
      alignUp but rounds down to the previous multiple of a power of two.
      
      With these two functions, we also go and replace manual rounding code
      with it where we can.
      
      Change-Id: Ie1487366280484dcb2662972b01b4f7135f72fec
      Reviewed-on: https://go-review.googlesource.com/c/go/+/190618Reviewed-by: default avatarAustin Clements <austin@google.com>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      383b447e
    • Brad Fitzpatrick's avatar
      net/http: support disabling built-in HTTP/2 with a new build tag · 2566e21f
      Brad Fitzpatrick authored
      Fixes #35082
      Updates #6853
      
      Change-Id: I4eeb0e15f534cff57fefb6039cd33fadf15b946e
      Reviewed-on: https://go-review.googlesource.com/c/go/+/205139Reviewed-by: default avatarEmmanuel Odeke <emm.odeke@gmail.com>
      Reviewed-by: default avatarDavid Crawshaw <crawshaw@golang.org>
      2566e21f
    • Michael Knyszek's avatar
      runtime: place lower limit on trigger ratio · 74af7fc6
      Michael Knyszek authored
      This change makes it so that the GC pacer's trigger ratio can never fall
      below 0.6. Upcoming changes to the allocator make it significantly more
      scalable and thus much faster in certain cases, creating a large gap
      between the performance of allocation and scanning. The consequence of
      this is that the trigger ratio can drop very low (0.07 was observed) in
      order to drop GC utilization. A low trigger ratio like this results in a
      high amount of black allocations, which causes the live heap to appear
      larger, and thus the heap, and RSS, grows to a much higher stable point.
      
      This change alleviates the problem by placing a lower bound on the
      trigger ratio. The expected (and confirmed) effect of this is that
      utilization in certain scenarios will no longer converge to the expected
      25%, and may go higher. As a result of this artificially high trigger
      ratio, more time will also be spent doing GC assists compared to
      dedicated mark workers, since the GC will be on for an artifically short
      fraction of time (artificial with respect to the pacer). The biggest
      concern of this change is that allocation latency will suffer as a
      result, since there will now be more assists. But, upcoming changes to
      the allocator reduce the latency enough to outweigh the expected
      increase in latency from this change, without the blowup in RSS observed
      from the changes to the allocator.
      
      Updates #35112.
      
      Change-Id: Idd7c94fa974d0de673304c4397e716e89bfbf09b
      Reviewed-on: https://go-review.googlesource.com/c/go/+/200439Reviewed-by: default avatarAustin Clements <austin@google.com>
      74af7fc6
    • Richard Musiol's avatar
      syscall/js: garbage collect references to JavaScript values · 54e6ba67
      Richard Musiol authored
      The js.Value struct now contains a pointer, so a finalizer can
      determine if the value is not referenced by Go any more.
      
      Unfortunately this breaks Go's == operator with js.Value. This change
      adds a new Equal method to check for the equality of two Values.
      This is a breaking change. The == operator is now disallowed to
      not silently break code.
      
      Additionally the helper methods IsUndefined, IsNull and IsNaN got added.
      
      Fixes #35111
      
      Change-Id: I58a50ca18f477bf51a259c668a8ba15bfa76c955
      Reviewed-on: https://go-review.googlesource.com/c/go/+/203600
      Run-TryBot: Richard Musiol <neelance@gmail.com>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      54e6ba67
    • Matthew Dempsky's avatar
      cmd/compile: restore -m=2 diagnostics · 063d0f11
      Matthew Dempsky authored
      This is a rough attempt at restoring -m=2 escape analysis diagnostics
      on par with those that were available with esc.go. It's meant to be
      simple and non-invasive.
      
      For example, given this random example from bytes/reader.go:
      
      138	func (r *Reader) WriteTo(w io.Writer) (n int64, err error) {
      ...
      143	        b := r.s[r.i:]
      144	        m, err := w.Write(b)
      
      esc.go used to report:
      
      bytes/reader.go:138:7: leaking param content: r
      bytes/reader.go:138:7:       from r.s (dot of pointer) at bytes/reader.go:143:8
      bytes/reader.go:138:7:       from b (assigned) at bytes/reader.go:143:4
      bytes/reader.go:138:7:       from w.Write(b) (parameter to indirect call) at bytes/reader.go:144:19
      
      With this CL, escape.go now reports:
      
      bytes/reader.go:138:7: parameter r leaks to {heap} with derefs=1:
      bytes/reader.go:138:7:   flow: b = *r:
      bytes/reader.go:138:7:     from r.s (dot of pointer) at bytes/reader.go:143:8
      bytes/reader.go:138:7:     from r.s[r.i:] (slice) at bytes/reader.go:143:10
      bytes/reader.go:138:7:     from b := r.s[r.i:] (assign) at bytes/reader.go:143:4
      bytes/reader.go:138:7:   flow: {heap} = b:
      bytes/reader.go:138:7:     from w.Write(b) (call parameter) at bytes/reader.go:144:19
      
      Updates #31489.
      
      Change-Id: I0c2b943a0f9ce6345bfff61e1c635172a9290cbb
      Reviewed-on: https://go-review.googlesource.com/c/go/+/196959
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      Reviewed-by: default avatarDavid Chase <drchase@google.com>
      063d0f11
    • Michael Munday's avatar
      internal/bytealg: add SIMD byte count implementation for s390x · b6245cef
      Michael Munday authored
      Add a 'single lane' SIMD implemementation of the single byte count
      function for use on machines that support the vector facility. This
      allows up to 16 bytes to be counted per loop iteration.
      
      We can probably improve performance further by adding more 'lanes'
      (i.e. counting more bytes in parallel) however this will increase
      the complexity of the function so I'm not sure it is worth doing
      yet.
      
      name                old speed      new speed       delta
      pkg:strings goos:linux goarch:s390x
      CountByte/10         789MB/s ± 0%   1131MB/s ± 0%    +43.44%  (p=0.000 n=9+9)
      CountByte/32         936MB/s ± 0%   3236MB/s ± 0%   +245.87%  (p=0.000 n=8+9)
      CountByte/4096      1.06GB/s ± 0%  21.26GB/s ± 0%  +1907.07%  (p=0.000 n=10+10)
      CountByte/4194304   1.06GB/s ± 0%  20.54GB/s ± 0%  +1838.50%  (p=0.000 n=10+10)
      CountByte/67108864  1.06GB/s ± 0%  18.31GB/s ± 0%  +1629.51%  (p=0.000 n=10+10)
      pkg:bytes goos:linux goarch:s390x
      CountSingle/10       800MB/s ± 0%    986MB/s ± 0%    +23.21%  (p=0.000 n=9+10)
      CountSingle/32       925MB/s ± 0%   2744MB/s ± 0%   +196.55%  (p=0.000 n=9+10)
      CountSingle/4K      1.26GB/s ± 0%  19.44GB/s ± 0%  +1445.59%  (p=0.000 n=10+10)
      CountSingle/4M      1.26GB/s ± 0%  20.28GB/s ± 0%  +1510.26%  (p=0.000 n=8+10)
      CountSingle/64M     1.23GB/s ± 0%  17.78GB/s ± 0%  +1350.67%  (p=0.000 n=9+10)
      
      Change-Id: I230d57905db92a8fdfc50b1d5be338941ae3a7a1
      Reviewed-on: https://go-review.googlesource.com/c/go/+/199979
      Run-TryBot: Michael Munday <mike.munday@ibm.com>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      b6245cef
    • Cherry Zhang's avatar
      cmd/link/internal/ld: fix TestArchiveBuildInvokeWithExec · d9ee4b28
      Cherry Zhang authored
      TestArchiveBuildInvokeWithExec is failing on darwin due to
      duplicated symbols, because the C definition (int fortytwo;) is
      copied to two generated cgo sources. In fact, this test is about
      building c-archive, but doesn't need to import "C". Removed the
      "C" import.
      
      Change-Id: I3a17546e01272a7ae37e6417791ab949fb44597e
      Reviewed-on: https://go-review.googlesource.com/c/go/+/205278
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      Reviewed-by: default avatarThan McIntosh <thanm@google.com>
      d9ee4b28
    • Ian Lance Taylor's avatar
      runtime: wake netpoller when dropping P, don't sleep too long in sysmon · d80ab3e8
      Ian Lance Taylor authored
      When dropping a P, if it has any timers, and if some thread is
      sleeping in the netpoller, wake the netpoller to run the P's timers.
      This mitigates races between the netpoller deciding how long to sleep
      and a new timer being added.
      
      In sysmon, if all P's are idle, check the timers to decide how long to sleep.
      This avoids oversleeping if no thread is using the netpoller.
      This can happen in particular if some threads use runtime.LockOSThread,
      as those threads do not block in the netpoller.
      
      Also, print the number of timers per P for GODEBUG=scheddetail=1.
      
      Before this CL, TestLockedDeadlock2 would fail about 1% of the time.
      With this CL, I ran it 150,000 times with no failures.
      
      Updates #6239
      Updates #27707
      Fixes #35274
      Fixes #35288
      
      Change-Id: I7e5193e6c885e567f0b1ee023664aa3e2902fcd1
      Reviewed-on: https://go-review.googlesource.com/c/go/+/204800
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarMichael Knyszek <mknyszek@google.com>
      d80ab3e8
    • Russ Cox's avatar
      hash/maphash: revise API to be more idiomatic · 5a7c571e
      Russ Cox authored
      This CL makes these changes to the hash/maphash API to make it fit a bit
      more into the standard library:
      
       - Move some of the package doc onto type Hash, so that `go doc maphash.Hash` shows it.
      
       - Instead of having identical AddBytes and Write methods,
         standardize on Write, the usual name for this function.
         Similarly, AddString -> WriteString, AddByte -> WriteByte.
      
       - Instead of having identical Hash and Sum64 methods,
         standardize on Sum64 (for hash.Hash64). Dropping the "Hash" method
         also helps because Hash is usually reserved to mean the state of a
         hash function (hash.Hash etc), not the hash value itself.
      
       - Make an uninitialized hash.Hash auto-seed with a random seed.
         It is critical that users not use the same seed for all hash functions
         in their program, at least not accidentally. So the Hash implementation
         must either panic if uninitialized or initialize itself.
         Initializing itself is less work for users and can be done lazily.
      
       - Now that the zero hash.Hash is useful, drop maphash.New in favor of
         new(maphash.Hash) or simply declaring a maphash.Hash.
      
       - Add a [0]func()-typed field to the Hash so that Hashes cannot be compared.
         (I considered doing the same for Seed but comparing seeds seems OK.)
      
       - Drop the integer argument from MakeSeed, to match the original design
         in golang.org/issue/28322. There is no point to giving users control
         over the specific seed bits, since we want the interpretation of those
         bits to be different in every different process. The only thing users
         need is to be able to create a new random seed at each call.
         (Fixes a TODO in MakeSeed's public doc comment.)
      
      This API is new in Go 1.14, so these changes do not violate the compatibility promise.
      
      Fixes #35060.
      Fixes #35348.
      
      Change-Id: Ie6fecc441f3f5ef66388c6ead92e875c0871f805
      Reviewed-on: https://go-review.googlesource.com/c/go/+/205069
      Run-TryBot: Russ Cox <rsc@golang.org>
      Reviewed-by: default avatarAlan Donovan <adonovan@google.com>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      5a7c571e
    • Filippo Valsorda's avatar
      crypto/tls: make -update only regenerate transcripts for failing tests · 03aca99f
      Filippo Valsorda authored
      Change-Id: Ie68fd4fe2879e6b5417a1a4240971e3d837bf115
      Reviewed-on: https://go-review.googlesource.com/c/go/+/204377
      Run-TryBot: Filippo Valsorda <filippo@golang.org>
      Run-TryBot: Katie Hockman <katie@golang.org>
      Reviewed-by: default avatarKatie Hockman <katie@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      03aca99f