bpo-35053: Enhance tracemalloc to trace free lists#10063
bpo-35053: Enhance tracemalloc to trace free lists#10063vstinner merged 4 commits intopython:masterfrom vstinner:tracemalloc_newref
Conversation
tracemalloc now tries to update the traceback when an object is reused from a "free list" (optimization for faster object creation, used by the builtin list Changes: * Add _PyTraceMalloc_NewReference() function which tries to update the Python traceback of a Python object. * _Py_NewReference() now calls _PyTraceMalloc_NewReference().
|
I modified my PR to make the overhead not significant: |
"Inline" tracemalloc_add_trace(): Remove one access to the hash table, the trace size doesn't change, so the code can be simplified.
|
I also optimized _PyTraceMalloc_NewReference() to make it faster when tracemalloc is tracing memory allocations. |
|
@methane: Ok, the PR is now waiting for your review :-) |
|
See also PR #10079 and https://bugs.python.org/issue35059 which convert the _Py_NewReference() macro to a "static inline" function. |
|
@methane: Thanks for the review! While reviewing one last time before merging, I found a potential issue: traceback_new() was called when tables were not locked, whereas all other calls to traceback_new() are done with tables locked. I moved the traceback_new() call inside TABLES_LOCK/TABLES_UNLOCK to make the code safer and faster (traceback_new is avoided if it's not needed, if the object is not tracked by tracemalloc). |
tracemalloc now tries to update the traceback when an object is
reused from a "free list" (optimization for faster object creation,
used by the builtin list
Changes:
the Python traceback of a Python object.
https://bugs.python.org/issue35053