Repository navigation
Add _testcapi.stack_pointer() to measure the C stack consumption #75049
Description
Activity
In issues bpo-28870, bpo-29227, bpo-29233 and bpo-29234, I worked on reducing the C stack consumption. I now would to add the _testcapi.stack_pointer() that I used to be able to easily measure the stack consumption.
Try for example attached stack_overflow-3.py to measure the maximum number of C calls before a C stack overflow. The script also computes the average stack usage per C call for a specific kind of C call.
Usually we first merge a patch in master and after that cherry-pick it to other branches.
Usually we first merge a patch in master and after that cherry-pick it to other branches.
Right. But in this case, I needed the patch for each branch, to run the test on all branches to write a blog post :-) Here are results (blog post spoiler!):
Table showing the C stack consumption in bytes, and the difference compared to
Python 3.5 (last release before I started working on FASTCALL):==================== ================ ===== ================ ================
Function 2.7 3.5 3.6 3.7
==================== ================ ===== ================ ================
test_python_call 1,360 (+352) 1,008 1,120 (+112) 960 (-48)
test_python_getitem 1,408 (+288) 1,120 1,168 (+48) 880 (-240)
test_python_iterator 1,424 (+192) 1,232 1,200 (-32) 1,024 (-208)
Total 4,192 (+832) 3,360 3,488 (+128) 2,864 (-496)
==================== ================ ===== ================ ================Table showing the number of function calls before a stack overflow,
and the difference compared to Python 3.5:==================== =================== ====== =================== ===================
Function 2.7 3.5 3.6 3.7
==================== =================== ====== =================== ===================
test_python_call 6,161 (-2,153) 8,314 7,482 (-832) 8,729 (+415)
test_python_getitem 5,951 (-1,531) 7,482 7,174 (-308) 9,522 (+2,040)
test_python_iterator 5,885 (-916) 6,801 6,983 (+182) 8,184 (+1,383)
Total 17,997 (-4600) 22,597 21,639 (-958) 26,435 (+3,838)
==================== =================== ====== =================== ===================I just published my blog post: "My contributions to CPython during 2017 Q1"
https://haypo.github.io/contrib-cpython-2017q1.htmlSee the "Stack consumption" section.
I added the function to the master branch.
I changed my mind. I now consider that the function is no needed in other branches. It can be added manually if someone needs it.
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields: