Skip to content
  • Simon Marlow's avatar
    Another try to get thread migration right · 89fa4e96
    Simon Marlow authored
    Summary:
    This is surprisingly tricky.  There were linked list bugs in the
    previous version (D2430) that showed up as a test failure in
    setnumcapabilities001 (that's a great stress test!).
    
    This new version uses a different strategy that doesn't suffer from
    the problem that @ezyang pointed out in D2430.  We now pre-calculate
    how many threads to keep for this capability, and then migrate any
    surplus threads off the front of the queue, taking care to account for
    threads that can't be migrated.
    
    Test Plan:
    1. setnumcapabilities001 stress test with sanity checking (+RTS -DS) turned on:
    
    ```
    cd testsuite/tests/concurrent/should_run
    make TEST=setnumcapabilities001 WAY=threaded1 EXTRA_HC_OPTS=-with-rtsopts=-DS CLEANUP=0
    while true; do ./setnumcapabilities001.run/setnumcapabilities001 4 9 2000 || break; done
    ```
    
    2. The test case from #12419
    
    Reviewers: niteria, ezyang, rwbarton, austin, bgamari, erikd
    
    Subscribers: thomie, ezyang
    
    Differential Revision: https://phabricator.haskell.org/D2441
    
    GHC Trac Issues: #12419
    89fa4e96