You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Add _testcapi.stack_pointer() to measure the C stack consumption #75049
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:
assignee=Noneclosed_at=<Date2017-09-15.16:38:44.368>created_at=<Date2017-07-06.10:51:19.887>labels= ['3.7']
title='Add _testcapi.stack_pointer() to measure the C stack consumption'updated_at=<Date2017-09-15.16:38:44.367>user='https://github.com/vstinner'
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.
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):
Activity
vstinner commentedon Jul 6, 2017
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.
serhiy-storchaka commentedon Jul 6, 2017
Usually we first merge a patch in master and after that cherry-pick it to other branches.
vstinner commentedon Jul 6, 2017
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)
==================== =================== ====== =================== ===================
vstinner commentedon Jul 6, 2017
I just published my blog post: "My contributions to CPython during 2017 Q1"
https://haypo.github.io/contrib-cpython-2017q1.html
See the "Stack consumption" section.
vstinner commentedon Jul 10, 2017
New changeset 64fa449 by Victor Stinner in branch 'master':
bpo-30866: Add _testcapi.stack_pointer() (bpo-2601)
64fa449
vstinner commentedon Sep 15, 2017
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.