[issue44897] Integrate trashcan mechanism into _Py_Dealloc

Neil Schemenauer report at bugs.python.org
Sun Aug 15 17:02:23 EDT 2021


Neil Schemenauer <nas-python at arctrix.com> added the comment:

As I suspected, the performance impact is significant (although pretty small).  Based on Linux perf, it looks like the extra test+branch in _Py_Dealloc adds about 1% overhead.  pyperformance shows something similar, see attached reports (pypref-trashcan.txt and perf-annotate-trash.txt).

An idea I've been trying is to add another type slot, e.g. tp_call_dealloc.  It could be set by PyType_Ready().  It would be called by the Py_DECREF macro on refcnt going to zero.  If the object is non-GC and Py_TRACE_REFS is off, can make tp_call_dealloc actually be the tp_dealloc pointer.  If the type has the GC flag, point tp_call_dealloc to a _Py_Dealloc version that checks tp_is_gc and does the trashcan stuff.

Unfortunately, all types don't have PyType_Ready() called on them.  So, we cannot rely on tp_call_dealloc being set correctly.

----------
Added file: https://bugs.python.org/file50219/pyperf-trashcan.txt

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue44897>
_______________________________________


More information about the Python-bugs-list mailing list