python / python/cpython

Make perf_trampoline thread safe.

Offen
#152,330 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

interpreter-core topic-free-threading type-feature
Vorherrschende Sprache
Python
Sterne
77.2k
Forks
35.9k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

Bug report

Bug description:

We are using an internal profiler that relies on perf_trampoline to associate Python frames with native samples. The current implementation is incompatible with free-threading, leading to data races and crashes when we enabled Tsan and used the profiler in highly concurrent environments. This proposal aims to bridge that gap and enable profiler support for free-threading builds by fixing data races, deadlocks, and memory lifecycle edge cases in perf_trampoline.c.

ThreadSanitizer (TSan) Data Race Report

The following data race was captured during concurrent execution under Free Threading and Tsan. Note that the following stack trace has been sanitized to remove internal organization details and the critical data race in perf_trampoline.c should remain represented:

==================
WARNING: ThreadSanitizer: data race (pid=6355)
  Read of size 8 at 0x720c009e2428 by thread T2:
    #0 compile_trampoline Python/perf_trampoline.c:413:27
    #1 py_trampoline_evaluator Python/perf_trampoline.c:437:40
    #2 _PyEval_EvalFrame Include/internal/pycore_ceval.h:122:12
    #3 _PyEval_Vector Python/ceval.c:2094:12
    #4 _PyFunction_Vectorcall Objects/call.c:380:12
    ... [generic interpreter evaluation frames] ...
    #10 thread_run Modules/_threadmodule.c:359:21
    #11 pythread_wrapper Python/thread_pthread.h:242:5

  Previous write of size 8 at 0x720c009e2428 by main thread:
    #0 code_arena_new_code Python/perf_trampoline.c:403:27
    #1 compile_trampoline Python/perf_trampoline.c:419:12
    #2 py_trampoline_evaluator Python/perf_trampoline.c:437:40
    #3 _PyEval_EvalFrame Include/internal/pycore_ceval.h:122:12
    #4 _PyEval_Vector Python/ceval.c:2094:12
    ... [generic interpreter evaluation frames] ...
    #15 _PyEval_EvalFrameDefault Python/generated_cases.c.h:1622:35
==================

I have searched the existing issues for similar reports but was unable to find any duplicates. Please let me know if this has already been reported!

CPython versions tested on:

3.14

Operating systems tested on:

Linux

Linked PRs
  • gh-152331

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit Python/perf_trampoline.c und den gemeldeten TSan-Stacktraces rund um compile_trampoline und code_arena_new_code. Prüfe den verknüpften PR gh-152331 und das bestehende free-threading-Verhalten, bevor du Änderungen vornimmst. Als abgeschlossen gilt die Aufgabe, wenn perf_trampoline das gemeldete Szenario mit einem nebenläufigen Profiler ohne die gemeldeten Races, Deadlocks oder Lebenszyklusfehler unterstützt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
backend, devtools
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.