perf_jit activated from a subinterpreter publishes JIT executors with the trampoline's unwind info
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 77.2k
- Fork
- 35.9k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
Bug report
Bug description:
sys.activate_stack_trampoline() refuses to run while the JIT is active, but it only checks the current interpreter, and the perf state is process-wide. A subinterpreter can activate perf_jit while the main interpreter keeps its JIT.
import sys
from concurrent import interpreters
interpreters.create().exec("import sys; sys.activate_stack_trampoline('perf_jit')")
def hot(n):
t = 0
for i in range(n):
t += i & 3
return t
for _ in range(50):
hot(100000)
With PYTHON_JIT=1 ./python buggy_stuff.py on a --enable-experimental-jit build, the resulting /tmp/jit-.dump holds the JIT's executors (records named py::jit:executor), and every one of them is tagged with the unwind information of the 8-byte perf trampoline. Executor frames look different, so perf produces wrong stacks for samples inside JIT code.
Found while working on https://github.com/python/cpython/pull/157246
CPython versions tested on:
CPython main branch, 3.16
Operating systems tested on:
Linux
Linked PRs
- gh-157258
- gh-157324
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con sys.activate_stack_trampoline(), l’opzione perf_jit e la riproduzione con subinterpreter descritta nell’issue; eseguilo su una build Linux con JIT sperimentale e PYTHON_JIT=1 e ispeziona il file /tmp/jit-.dump generato. Traccia il modo in cui gli executor JIT ricevono le informazioni di unwind e considera risolta l’issue quando i frame degli executor non sono più contrassegnati con i dati di unwind del trampoline perf da 8 byte.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- compilers, performance
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 25/100