Skip to content

sync: higher mutex wait durations in 1.24 #72765

@hossein-raeisi

Description

@hossein-raeisi

Go version

1.24

Output of go env in your module/workspace:

AR='ar'
CC='gcc'
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_ENABLED='1'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
CXX='g++'
GCCGO='gccgo'
GO111MODULE='on'
GOAMD64='v1'
GOARCH='amd64'
GOAUTH='netrc'
GOBIN=''
GOCACHEPROG=''
GODEBUG=''
GOEXE=''
GOEXPERIMENT=''
GOFIPS140='off'
GOFLAGS=''
GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build322822516=/tmp/go-build -gno-record-gcc-switches'
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOOS='linux'
GOROOT='/usr/lib/go'
GOSUMDB='sum.golang.org'
GOTELEMETRY='local'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/usr/lib/go/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.24.0'
GOWORK=''
PKG_CONFIG='pkg-config'

What did you do?

Upgraded a grpc serving applciation's golang version from 1.23.3 to 1.24.0 (and 1.24.1) (The application is more on the io-bound side)

What did you see happen?

Mutex wait duraion increased by a factor of 2 after the upgrade. the issue seems to be with an unlock in context.(*cancelCtx).propagateCancel

Prometheus metrics:
go_sync_mutex_wait_total_seconds_total
Image
(At 1130 the upgraded version was deployed on yellow)

Pprof profiles:

Image

(Left side is go 1.24 and right side is 1.23)

What did you expect to see?

It's mentioned in 1.24's release notes that cpu performance is improved via some changes including a new runtime-internal mutex implementation [ref]. I'm wondering if that could've caused some related issues?

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugReportIssues describing a possible bug in the Go implementation.NeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.PerformanceWaitingForInfoIssue is not actionable because of missing required information, which needs to be provided.compiler/runtimeIssues related to the Go compiler and/or runtime.

    Type

    No type

    Projects

    Status

    Done

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions