python / python/cpython

Make perf_trampoline thread safe.

Ouverte
#152,330 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

interpreter-core topic-free-threading type-feature
Langage dominant
Python
Étoiles
77.2k
Forks
36k
Métriques de merge des PR
Métriques de PR en attente

Description

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

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par Python/perf_trampoline.c et les traces de pile TSan signalées autour de compile_trampoline et code_arena_new_code. Examinez la PR liée gh-152331 ainsi que le comportement existant de free-threading avant d’apporter des modifications. Le travail est terminé lorsque perf_trampoline prend en charge le scénario signalé avec un profiler concurrent, sans les Races, Deadlocks ni défaillances de cycle de vie signalés.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
backend, devtools
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.