Make perf_trampoline thread safe.
Ninguém assumiu esta issue ainda.
- Linguagem predominante
- Python
- Estrelas
- 77.2k
- Forks
- 36k
- Métricas de merge de PRs
- Métricas de PR pendentes
Descrição
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
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece com Python/perf_trampoline.c e os stack traces do TSan relatados em torno de compile_trampoline e code_arena_new_code. Revise o PR vinculado gh-152331 e o comportamento existente de free-threading antes de fazer alterações. Considera-se concluído quando perf_trampoline oferecer suporte ao cenário relatado de um profiler concorrente sem os Races, Deadlocks ou falhas de ciclo de vida relatados.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- python
- Domínio
- backend, devtools
- Tipo de issue
- Bug
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Status de atividade
- Estagnada
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 35/100