diff options
| author | Carlos Amedee <carlos@golang.org> | 2025-04-30 15:17:45 -0400 |
|---|---|---|
| committer | Carlos Amedee <carlos@golang.org> | 2025-05-12 18:35:25 -0700 |
| commit | 1e436ba668f5988ca8fbeb68734800b9dcf33dbc (patch) | |
| tree | 256f21065c77b552a52d835bac211cafa26b9d9c /src/runtime/proc.go | |
| parent | 3474c52e4b082421aa948eb178279f6a879701e2 (diff) | |
| download | go-1e436ba668f5988ca8fbeb68734800b9dcf33dbc.tar.xz | |
runtime: only poll network from one P at a time in findRunnable
This change reintroduces CL 564197. It was reverted due to a failing
benchmark. That failure has been resolved.
For #65064
Change-Id: Ic88841d2bc24c2717ad324873f0f52699f21dc66
Reviewed-on: https://go-review.googlesource.com/c/go/+/669235
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Mauri de Souza Meneguzzo <mauri870@gmail.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
Diffstat (limited to 'src/runtime/proc.go')
| -rw-r--r-- | src/runtime/proc.go | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/runtime/proc.go b/src/runtime/proc.go index 9753ba5378..1ca800c5fd 100644 --- a/src/runtime/proc.go +++ b/src/runtime/proc.go @@ -3396,8 +3396,12 @@ top: // blocked thread (e.g. it has already returned from netpoll, but does // not set lastpoll yet), this thread will do blocking netpoll below // anyway. - if netpollinited() && netpollAnyWaiters() && sched.lastpoll.Load() != 0 { - if list, delta := netpoll(0); !list.empty() { // non-blocking + // We only poll from one thread at a time to avoid kernel contention + // on machines with many cores. + if netpollinited() && netpollAnyWaiters() && sched.lastpoll.Load() != 0 && sched.pollingNet.Swap(1) == 0 { + list, delta := netpoll(0) + sched.pollingNet.Store(0) + if !list.empty() { // non-blocking gp := list.pop() injectglist(&list) netpollAdjustWaiters(delta) |
