Torn reads of GC statistics from external process via get_gc_stats
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 35.9k
- Métriques de merge des PR
- Métriques de PR en attente
Description
Bug report
Bug description:
If an external tool sampling GC statistics does not pause the target process (and we designed get_gc_stats not to pause), it can read torn data under certain circumstances.
There are two distinct problems:
-
Weakly ordered platforms: The stores of
ts_startandts_stopmay be reordered by the CPU/optimizer. We need to add memory barriers to mitigate this. -
Large memcpy window: We are copying a sufficiently large memory region via
memcpy. If two or more GC cycles occur during this copy, we can end up with inconsistent data spanning multiple GC states.
@maurycy has an idea to use a sequence counter for consistency checks — I think he should definitely give it a try.
cc @pablogsal
CPython versions tested on:
CPython main branch
Operating systems tested on:
No response
Linked PRs
- gh-155828
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par suivre get_gc_stats et les emplacements qui stockent ts_start et ts_stop, puis examinez le chemin memcpy pour déterminer comment un processus externe observe les données de GC. Lisez d’abord la PR liée gh-155828 et tous les tests associés ; le travail est terminé lorsque l’échantillonnage externe ne renvoie plus de snapshots déchirés entre les cycles de GC sur les plateformes faiblement ordonnées.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- performance
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100