Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add _testcapi.stack_pointer() to measure the C stack consumption #75049

Closed
vstinner opened this issue Jul 6, 2017 · 6 comments
Closed

Add _testcapi.stack_pointer() to measure the C stack consumption #75049

vstinner opened this issue Jul 6, 2017 · 6 comments
Labels
3.7 (EOL) end of life

Comments

@vstinner
Copy link
Member

vstinner commented Jul 6, 2017

BPO 30866
Nosy @vstinner, @serhiy-storchaka
PRs
  • [2.7] bpo-30866: Add _testcapi.stack_pointer() #2600
  • bpo-30866: Add _testcapi.stack_pointer() #2601
  • [3.6] bpo-30866: Add _testcapi.stack_pointer() #2602
  • [3.5] bpo-30866: Add _testcapi.stack_pointer() #2603
  • Files
  • stack_overflow-3.py
  • 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 = None
    closed_at = <Date 2017-09-15.16:38:44.368>
    created_at = <Date 2017-07-06.10:51:19.887>
    labels = ['3.7']
    title = 'Add _testcapi.stack_pointer() to measure the C stack consumption'
    updated_at = <Date 2017-09-15.16:38:44.367>
    user = 'https://github.com/vstinner'

    bugs.python.org fields:

    activity = <Date 2017-09-15.16:38:44.367>
    actor = 'vstinner'
    assignee = 'none'
    closed = True
    closed_date = <Date 2017-09-15.16:38:44.368>
    closer = 'vstinner'
    components = []
    creation = <Date 2017-07-06.10:51:19.887>
    creator = 'vstinner'
    dependencies = []
    files = ['46992']
    hgrepos = []
    issue_num = 30866
    keywords = []
    message_count = 6.0
    messages = ['297822', '297824', '297826', '297829', '298060', '302271']
    nosy_count = 2.0
    nosy_names = ['vstinner', 'serhiy.storchaka']
    pr_nums = ['2600', '2601', '2602', '2603']
    priority = 'normal'
    resolution = 'fixed'
    stage = 'resolved'
    status = 'closed'
    superseder = None
    type = None
    url = 'https://bugs.python.org/issue30866'
    versions = ['Python 3.7']

    @vstinner
    Copy link
    Member Author

    vstinner commented 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.

    @vstinner vstinner added the 3.7 (EOL) end of life label Jul 6, 2017
    @serhiy-storchaka
    Copy link
    Member

    Usually we first merge a patch in master and after that cherry-pick it to other branches.

    @vstinner
    Copy link
    Member Author

    vstinner commented Jul 6, 2017

    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)
    ==================== =================== ====== =================== ===================

    @vstinner
    Copy link
    Member Author

    vstinner commented 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
    Copy link
    Member Author

    New changeset 64fa449 by Victor Stinner in branch 'master':
    bpo-30866: Add _testcapi.stack_pointer() (bpo-2601)
    64fa449

    @vstinner
    Copy link
    Member Author

    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.

    @ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    3.7 (EOL) end of life
    Projects
    None yet
    Development

    No branches or pull requests

    2 participants