While investigating high context switch numbers in the runtime, it was discovered the PPC64 implementation of usleep passes incorrect values to the tv_nsec parameter of the nanosleep syscall. It fails to convert the remainder microseconds to nanoseconds. This can be observed with perf stat on simple benchmarks. The high context-switch rate was related to sysmon polling at 1000x the desired rate.
@golang/ppc64
The text was updated successfully, but these errors were encountered:
The existing implementation fails to convert the remainder
microseconds to nanoseconds. This causes sysmon to consume
much more cpu, and generate lots of context switches.
We can also do a little better here to avoid division by a
constant. I used go to determine the magic numbers.
Fixesgolang#56374
Change-Id: I2e37ec218b9027efab6db4634eed1504c0c1b3c8
Reviewed-on: https://go-review.googlesource.com/c/go/+/444735
Reviewed-by: Lynn Boger <laboger@linux.vnet.ibm.com>
Run-TryBot: Paul Murphy <murp@ibm.com>
Reviewed-by: David Chase <drchase@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
While investigating high context switch numbers in the runtime, it was discovered the PPC64 implementation of usleep passes incorrect values to the tv_nsec parameter of the nanosleep syscall. It fails to convert the remainder microseconds to nanoseconds. This can be observed with
perf stat
on simple benchmarks. The high context-switch rate was related to sysmon polling at 1000x the desired rate.@golang/ppc64
The text was updated successfully, but these errors were encountered: