Skip to content

Free-threaded builds can experience heavy contention on PyType_IsSubtype #116868

Closed
@DinoV

Description

@DinoV

Bug report

Bug description:

PyType_IsSubtype takes the type lock to ensure that MRO is being accessed in a thread-safe manner as it needs to read and incref it. This can result in heavy contention in some pretty common scenarios (e.g. when sys.setprofile is used we experience heavy contention across threads doing PyCFunction_Check, profiling simple workloads can be nearly 50% slower in some cases). We can avoid this by using Py_TryIncref and only fallback to the lock when the MRO isn't yet shared.

CPython versions tested on:

CPython main branch

Operating systems tested on:

Linux

Linked PRs

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions