Bug report
Bug description:
Since 67807cf, _testembed.exe (x64 Release) increases the memory usage in the cycle of Py_Initialize and Py_Finalize.
I monitored the Task Manager (taskmgr.exe) on Windows10/11, with a change against Programs/_testembed.c:
- #define INIT_LOOPS 4
+ #define INIT_LOOPS 200
Commands:
_testembed.exe test_repeated_simple_init or
python -m test test_embed -m test_simple_initialization_api (no log)
With RADIX TREE (as-is)
| Loop |
67807cf |
main |
3.11.7 |
| 100 |
67MB |
210MB |
4MB |
| 200 |
135MB |
406MB |
4MB |
No RADIX TREE (as-is)
| Loop |
67807cf |
main |
3.11.7 |
| 100 |
10MB |
168MB |
4MB |
| 200 |
16MB |
336MB |
4MB |
Recent obmalloc.c looks ready for finalization. Just adding my rough (invalid?) experiment made the leaks even. So, I hope that they share the same issue. Otherwise, ea2c001 or 15d4c9f has another leak. #98359 (comment)
patch
void
_PyInterpreterState_FinalizeAllocatedBlocks(PyInterpreterState *interp)
{
if (has_own_state(interp)) {
Py_ssize_t leaked = _PyInterpreterState_GetAllocatedBlocks(interp);
assert(has_own_state(interp) || leaked == 0);
interp->runtime->obmalloc.interpreter_leaks += leaked;
+ OMState *state = &interp->obmalloc;
+ for (uint i = 0; i < maxarenas; ++i) {
+ if (allarenas[i].address == 0) {
+ continue;
+ }
+ _PyObject_Arena.free(_PyObject_Arena.ctx,
+ (void *)allarenas[i].address, ARENA_SIZE);
+ allarenas[i].address = 0;
+ --narenas_currently_allocated;
+ }
+ PyMem_RawFree(allarenas);
}
}
With RADIX TREE (patched)
| Loop |
67807cf |
main |
| 100 |
42MB |
40MB |
| 200 |
80MB |
80MB |
No RADIX TREE (patched)
| Loop |
67807cf |
main |
| 100 |
3.5M |
3.3M |
| 200 |
3.7M |
3.4M |
cc @ericsnowcurrently @nascheme
CPython versions tested on:
3.12, 3.13, CPython main branch: 3aea6c4
Operating systems tested on:
Windows
Linked PRs
Bug report
Bug description:
Since 67807cf,
_testembed.exe(x64 Release) increases the memory usage in the cycle ofPy_InitializeandPy_Finalize.I monitored the Task Manager (
taskmgr.exe) on Windows10/11, with a change againstPrograms/_testembed.c:Commands:
_testembed.exe test_repeated_simple_initorpython -m test test_embed -m test_simple_initialization_api(no log)With RADIX TREE (as-is)
No RADIX TREE (as-is)
Recent
obmalloc.clooks ready for finalization. Just adding my rough (invalid?) experiment made the leaks even. So, I hope that they share the same issue. Otherwise, ea2c001 or 15d4c9f has another leak. #98359 (comment)patch
With RADIX TREE (patched)
No RADIX TREE (patched)
cc @ericsnowcurrently @nascheme
CPython versions tested on:
3.12, 3.13, CPython main branch: 3aea6c4
Operating systems tested on:
Windows
Linked PRs