[GHC] #10587: Suspending and unsuspending ghci kills and spawns threads

#10587: Suspending and unsuspending ghci kills and spawns threads -----------------------------------------+--------------------------------- Reporter: niteria | Owner: niteria Type: bug | Status: new Priority: low | Milestone: Component: GHCi | Version: 7.10.1 Keywords: | Operating System: Linux Architecture: x86_64 (amd64) | Type of failure: None/Unknown Test Case: | Blocked By: Blocking: | Related Tickets: Differential Revisions: | -----------------------------------------+--------------------------------- When you run: {{{ ghci -j8 # in a different terminal: pidstat -t -p $(pidof ghc) | grep ghc_worker kill -SIGSTOP $(pidof ghc); kill -SIGCONT $(pidof ghc) # SIGCONT doesn't really resume it, you have to run fg in the terminal where it runs pidstat -t -p $(pidof ghc) | grep ghc_worker kill -SIGSTOP $(pidof ghc); kill -SIGCONT $(pidof ghc) pidstat -t -p $(pidof ghc) | grep ghc_worker kill -SIGSTOP $(pidof ghc); kill -SIGCONT $(pidof ghc) pidstat -t -p $(pidof ghc) | grep ghc_worker }}} You get: {{{ $ pidstat -t -p $(pidof ghc) | grep ghc_worker 06:40:55 AM - 2848953 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:40:55 AM - 2848954 0.00 0.00 0.00 0.00 31 |__ghc_worker 06:40:55 AM - 2848955 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:40:55 AM - 2848957 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:40:55 AM - 2848958 0.00 0.00 0.00 0.00 22 |__ghc_worker 06:40:55 AM - 2848959 0.00 0.00 0.00 0.00 37 |__ghc_worker 06:40:55 AM - 2848960 0.00 0.00 0.00 0.00 3 |__ghc_worker 06:40:55 AM - 2848961 0.00 0.00 0.00 0.00 2 |__ghc_worker 06:40:55 AM - 2848962 0.00 0.00 0.00 0.00 36 |__ghc_worker 06:40:55 AM - 2848963 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:40:55 AM - 2848964 0.00 0.00 0.00 0.00 31 |__ghc_worker 06:40:55 AM - 2848965 0.00 0.00 0.00 0.00 11 |__ghc_worker 06:40:55 AM - 2848966 0.00 0.00 0.00 0.00 24 |__ghc_worker 06:40:55 AM - 2848967 0.00 0.00 0.00 0.00 38 |__ghc_worker 06:40:55 AM - 2848968 0.00 0.00 0.00 0.00 23 |__ghc_worker 06:40:55 AM - 2848969 0.00 0.00 0.00 0.00 22 |__ghc_worker 06:40:55 AM - 2848970 0.00 0.00 0.00 0.00 31 |__ghc_worker }}} {{{ $ pidstat -t -p $(pidof ghc) | grep ghc_worker 06:41:37 AM - 2848953 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:41:37 AM - 2848954 0.00 0.00 0.00 0.00 31 |__ghc_worker 06:41:37 AM - 2848955 0.00 0.00 0.00 0.00 3 |__ghc_worker 06:41:37 AM - 2848957 0.00 0.00 0.00 0.00 3 |__ghc_worker 06:41:37 AM - 2848958 0.00 0.00 0.00 0.00 22 |__ghc_worker 06:41:37 AM - 2848959 0.00 0.00 0.00 0.00 37 |__ghc_worker 06:41:37 AM - 2848960 0.00 0.00 0.00 0.00 5 |__ghc_worker 06:41:37 AM - 2848961 0.00 0.00 0.00 0.00 5 |__ghc_worker 06:41:37 AM - 2848962 0.00 0.00 0.00 0.00 36 |__ghc_worker 06:41:37 AM - 2848963 0.00 0.00 0.00 0.00 7 |__ghc_worker 06:41:37 AM - 2848964 0.00 0.00 0.00 0.00 12 |__ghc_worker 06:41:37 AM - 2848965 0.00 0.00 0.00 0.00 11 |__ghc_worker 06:41:37 AM - 2848966 0.00 0.00 0.00 0.00 24 |__ghc_worker 06:41:37 AM - 2848967 0.00 0.00 0.00 0.00 38 |__ghc_worker 06:41:37 AM - 2848968 0.00 0.00 0.00 0.00 23 |__ghc_worker 06:41:37 AM - 2848969 0.00 0.00 0.00 0.00 8 |__ghc_worker 06:41:37 AM - 2848970 0.00 0.00 0.00 0.00 14 |__ghc_worker 06:41:37 AM - 2850193 0.00 0.00 0.00 0.00 32 |__ghc_worker 06:41:37 AM - 2850194 0.00 0.00 0.00 0.00 33 |__ghc_worker 06:41:37 AM - 2850196 0.00 0.00 0.00 0.00 34 |__ghc_worker 06:41:37 AM - 2850197 0.00 0.00 0.00 0.00 35 |__ghc_worker 06:41:37 AM - 2850198 0.00 0.00 0.00 0.00 10 |__ghc_worker 06:41:37 AM - 2850199 0.00 0.00 0.00 0.00 17 |__ghc_worker 06:41:37 AM - 2850294 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:41:37 AM - 2850295 0.00 0.00 0.00 0.00 31 |__ghc_worker }}} {{{ $ pidstat -t -p $(pidof ghc) | grep ghc_worker 06:42:43 AM - 2848953 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:42:43 AM - 2848954 0.00 0.00 0.00 0.00 31 |__ghc_worker 06:42:43 AM - 2848955 0.00 0.00 0.00 0.00 3 |__ghc_worker 06:42:43 AM - 2848957 0.00 0.00 0.00 0.00 7 |__ghc_worker 06:42:43 AM - 2848958 0.00 0.00 0.00 0.00 22 |__ghc_worker 06:42:43 AM - 2848959 0.00 0.00 0.00 0.00 37 |__ghc_worker 06:42:43 AM - 2848960 0.00 0.00 0.00 0.00 9 |__ghc_worker 06:42:43 AM - 2848961 0.00 0.00 0.00 0.00 0 |__ghc_worker 06:42:43 AM - 2848962 0.00 0.00 0.00 0.00 36 |__ghc_worker 06:42:43 AM - 2848963 0.00 0.00 0.00 0.00 4 |__ghc_worker 06:42:43 AM - 2848964 0.00 0.00 0.00 0.00 12 |__ghc_worker 06:42:43 AM - 2848965 0.00 0.00 0.00 0.00 11 |__ghc_worker 06:42:43 AM - 2848966 0.00 0.00 0.00 0.00 24 |__ghc_worker 06:42:43 AM - 2848967 0.00 0.00 0.00 0.00 38 |__ghc_worker 06:42:43 AM - 2848968 0.00 0.00 0.00 0.00 23 |__ghc_worker 06:42:43 AM - 2848969 0.00 0.00 0.00 0.00 29 |__ghc_worker 06:42:43 AM - 2848970 0.00 0.00 0.00 0.00 14 |__ghc_worker 06:42:43 AM - 2850193 0.00 0.00 0.00 0.00 32 |__ghc_worker 06:42:43 AM - 2850196 0.00 0.00 0.00 0.00 34 |__ghc_worker 06:42:43 AM - 2850197 0.00 0.00 0.00 0.00 35 |__ghc_worker 06:42:43 AM - 2850198 0.00 0.00 0.00 0.00 10 |__ghc_worker 06:42:43 AM - 2850199 0.00 0.00 0.00 0.00 19 |__ghc_worker 06:42:43 AM - 2850295 0.00 0.00 0.00 0.00 13 |__ghc_worker 06:42:43 AM - 2861009 0.00 0.00 0.00 0.00 34 |__ghc_worker 06:42:43 AM - 2861010 0.00 0.00 0.00 0.00 35 |__ghc_worker }}} {{{ $ pidstat -t -p $(pidof ghc) | grep ghc_worker 06:43:37 AM - 2848953 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:43:37 AM - 2848954 0.00 0.00 0.00 0.00 31 |__ghc_worker 06:43:37 AM - 2848955 0.00 0.00 0.00 0.00 9 |__ghc_worker 06:43:37 AM - 2848957 0.00 0.00 0.00 0.00 9 |__ghc_worker 06:43:37 AM - 2848958 0.00 0.00 0.00 0.00 22 |__ghc_worker 06:43:37 AM - 2848959 0.00 0.00 0.00 0.00 37 |__ghc_worker 06:43:37 AM - 2848960 0.00 0.00 0.00 0.00 29 |__ghc_worker 06:43:37 AM - 2848961 0.00 0.00 0.00 0.00 20 |__ghc_worker 06:43:37 AM - 2848962 0.00 0.00 0.00 0.00 36 |__ghc_worker 06:43:37 AM - 2848963 0.00 0.00 0.00 0.00 3 |__ghc_worker 06:43:37 AM - 2848964 0.00 0.00 0.00 0.00 12 |__ghc_worker 06:43:37 AM - 2848965 0.00 0.00 0.00 0.00 15 |__ghc_worker 06:43:37 AM - 2848966 0.00 0.00 0.00 0.00 24 |__ghc_worker 06:43:37 AM - 2848967 0.00 0.00 0.00 0.00 38 |__ghc_worker 06:43:37 AM - 2848968 0.00 0.00 0.00 0.00 23 |__ghc_worker 06:43:37 AM - 2848969 0.00 0.00 0.00 0.00 1 |__ghc_worker 06:43:37 AM - 2848970 0.00 0.00 0.00 0.00 19 |__ghc_worker 06:43:37 AM - 2850193 0.00 0.00 0.00 0.00 32 |__ghc_worker 06:43:37 AM - 2850196 0.00 0.00 0.00 0.00 34 |__ghc_worker 06:43:37 AM - 2850197 0.00 0.00 0.00 0.00 35 |__ghc_worker 06:43:37 AM - 2850198 0.00 0.00 0.00 0.00 30 |__ghc_worker 06:43:37 AM - 2861009 0.00 0.00 0.00 0.00 17 |__ghc_worker 06:43:37 AM - 2861010 0.00 0.00 0.00 0.00 19 |__ghc_worker 06:43:37 AM - 2862954 0.00 0.00 0.00 0.00 2 |__ghc_worker 06:43:37 AM - 2862956 0.00 0.00 0.00 0.00 26 |__ghc_worker }}} The sets of threads are changing on every suspend, unsuspend combination. This is really visible when running in gdb with -j40, gdb just spews threads getting spawned and killed: {{{ [Thread 0x7f0b767fc700 (LWP 2881933) exited] [New Thread 0x7f0b767fc700 (LWP 2881940)] [New Thread 0x7f0cc2cfd700 (LWP 2881941)] [Thread 0x7f0b76ffd700 (LWP 2881928) exited] [New Thread 0x7f0b7dffb700 (LWP 2881942)] [New Thread 0x7f0b76ffd700 (LWP 2881943)] [New Thread 0x7f0b7ffff700 (LWP 2881944)] [Thread 0x7f0b777fe700 (LWP 2881932) exited] [Thread 0x7f0b77fff700 (LWP 2881931) exited] [Thread 0x7f0b7d7fa700 (LWP 2881927) exited] [Thread 0x7f0b7f7fe700 (LWP 2881926) exited] [New Thread 0x7f0b7f7fe700 (LWP 2881945)] [New Thread 0x7f0b7d7fa700 (LWP 2881948)] [Thread 0x7f0cc2cfd700 (LWP 2881941) exited] [Thread 0x7f0b75ffb700 (LWP 2881938) exited] [New Thread 0x7f0cc2cfd700 (LWP 2881949)] [Thread 0x7f0b767fc700 (LWP 2881940) exited] [New Thread 0x7f0b767fc700 (LWP 2881950)] [New Thread 0x7f0b75ffb700 (LWP 2881951)] [New Thread 0x7f0b77fff700 (LWP 2881952)] [Thread 0x7f0b757fa700 (LWP 2881939) exited] [Thread 0x7f0b7d7fa700 (LWP 2881948) exited] [New Thread 0x7f0b757fa700 (LWP 2881953)] [Thread 0x7f0b7effd700 (LWP 2881936) exited] [Thread 0x7f0cc3cff700 (LWP 2881937) exited] [New Thread 0x7f0cc3cff700 (LWP 2881954)] [New Thread 0x7f0b7effd700 (LWP 2881955)] [New Thread 0x7f0b7d7fa700 (LWP 2881956)] [Thread 0x7f0b7dffb700 (LWP 2881942) exited] [New Thread 0x7f0b777fe700 (LWP 2881957)] [New Thread 0x7f0b7dffb700 (LWP 2881958)] [Thread 0x7f0b76ffd700 (LWP 2881943) exited] [New Thread 0x7f0b76ffd700 (LWP 2881959)] [Thread 0x7f0b7e7fc700 (LWP 2881935) exited] [Thread 0x7f0b7effd700 (LWP 2881955) exited] [New Thread 0x7f0b7effd700 (LWP 2881962)] [New Thread 0x7f0b7e7fc700 (LWP 2881963)] [Thread 0x7f0b7f7fe700 (LWP 2881945) exited] [New Thread 0x7f0b7f7fe700 (LWP 2881964)] [New Thread 0x7f0b7cff9700 (LWP 2881965)] [Thread 0x7f0b75ffb700 (LWP 2881951) exited] [Thread 0x7f0b7dffb700 (LWP 2881958) exited] [Thread 0x7f0cc3cff700 (LWP 2881954) exited] [New Thread 0x7f0cc3cff700 (LWP 2881967)] [New Thread 0x7f0b7dffb700 (LWP 2881968)] [Thread 0x7f0b777fe700 (LWP 2881957) exited] [Thread 0x7f0b757fa700 (LWP 2881953) exited] [Thread 0x7f0cc2cfd700 (LWP 2881949) exited] [Thread 0x7f0b7ffff700 (LWP 2881944) exited] [New Thread 0x7f0cc2cfd700 (LWP 2881969)] [Thread 0x7f0b7e7fc700 (LWP 2881963) exited] [Thread 0x7f0b767fc700 (LWP 2881950) exited] [New Thread 0x7f0b767fc700 (LWP 2881970)] [New Thread 0x7f0b7e7fc700 (LWP 2881971)] [Thread 0x7f0b77fff700 (LWP 2881952) exited] [New Thread 0x7f0b7ffff700 (LWP 2881972)] [New Thread 0x7f0b77fff700 (LWP 2881973)] [New Thread 0x7f0b757fa700 (LWP 2881974)] [Thread 0x7f0b7dffb700 (LWP 2881968) exited] [New Thread 0x7f0b7dffb700 (LWP 2881975)] [Thread 0x7f0cc2cfd700 (LWP 2881969) exited] [New Thread 0x7f0cc2cfd700 (LWP 2881976)] [Thread 0x7f0b76ffd700 (LWP 2881959) exited] [Thread 0x7f0b757fa700 (LWP 2881974) exited] [New Thread 0x7f0b76ffd700 (LWP 2881977)] [New Thread 0x7f0b757fa700 (LWP 2881978)] [New Thread 0x7f0b777fe700 (LWP 2881979)] [Thread 0x7f0b7effd700 (LWP 2881962) exited] [New Thread 0x7f0b7effd700 (LWP 2881980)] [Thread 0x7f0b7ffff700 (LWP 2881972) exited] [Thread 0x7f0b7e7fc700 (LWP 2881971) exited] [Thread 0x7f0b77fff700 (LWP 2881973) exited] [New Thread 0x7f0b77fff700 (LWP 2881981)] [Thread 0x7f0b7d7fa700 (LWP 2881956) exited] [New Thread 0x7f0b7d7fa700 (LWP 2881982)] [New Thread 0x7f0b7e7fc700 (LWP 2881983)] [Thread 0x7f0cc2cfd700 (LWP 2881976) exited] [New Thread 0x7f0cc2cfd700 (LWP 2881984)] [New Thread 0x7f0b7ffff700 (LWP 2881985)] [New Thread 0x7f0b75ffb700 (LWP 2881986)] [Thread 0x7f0b7dffb700 (LWP 2881975) exited] [New Thread 0x7f0b7dffb700 (LWP 2881987)] [New Thread 0x7f0b74ff9700 (LWP 2881988)] [Thread 0x7f0b777fe700 (LWP 2881979) exited] [Thread 0x7f0b7effd700 (LWP 2881980) exited] [Thread 0x7f0b76ffd700 (LWP 2881977) exited] }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10587 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10587: Suspending and unsuspending ghci kills and spawns threads ---------------------------------+----------------------------------------- Reporter: niteria | Owner: niteria Type: bug | Status: new Priority: low | Milestone: Component: GHCi | Version: 7.10.1 Resolution: | Keywords: Operating System: Linux | Architecture: x86_64 (amd64) Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: ---------------------------------+----------------------------------------- Description changed by niteria: Old description:
When you run:
{{{ ghci -j8
# in a different terminal: pidstat -t -p $(pidof ghc) | grep ghc_worker kill -SIGSTOP $(pidof ghc); kill -SIGCONT $(pidof ghc) # SIGCONT doesn't really resume it, you have to run fg in the terminal where it runs pidstat -t -p $(pidof ghc) | grep ghc_worker kill -SIGSTOP $(pidof ghc); kill -SIGCONT $(pidof ghc) pidstat -t -p $(pidof ghc) | grep ghc_worker kill -SIGSTOP $(pidof ghc); kill -SIGCONT $(pidof ghc) pidstat -t -p $(pidof ghc) | grep ghc_worker }}}
You get:
{{{ $ pidstat -t -p $(pidof ghc) | grep ghc_worker 06:40:55 AM - 2848953 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:40:55 AM - 2848954 0.00 0.00 0.00 0.00 31 |__ghc_worker 06:40:55 AM - 2848955 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:40:55 AM - 2848957 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:40:55 AM - 2848958 0.00 0.00 0.00 0.00 22 |__ghc_worker 06:40:55 AM - 2848959 0.00 0.00 0.00 0.00 37 |__ghc_worker 06:40:55 AM - 2848960 0.00 0.00 0.00 0.00 3 |__ghc_worker 06:40:55 AM - 2848961 0.00 0.00 0.00 0.00 2 |__ghc_worker 06:40:55 AM - 2848962 0.00 0.00 0.00 0.00 36 |__ghc_worker 06:40:55 AM - 2848963 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:40:55 AM - 2848964 0.00 0.00 0.00 0.00 31 |__ghc_worker 06:40:55 AM - 2848965 0.00 0.00 0.00 0.00 11 |__ghc_worker 06:40:55 AM - 2848966 0.00 0.00 0.00 0.00 24 |__ghc_worker 06:40:55 AM - 2848967 0.00 0.00 0.00 0.00 38 |__ghc_worker 06:40:55 AM - 2848968 0.00 0.00 0.00 0.00 23 |__ghc_worker 06:40:55 AM - 2848969 0.00 0.00 0.00 0.00 22 |__ghc_worker 06:40:55 AM - 2848970 0.00 0.00 0.00 0.00 31 |__ghc_worker }}}
{{{ $ pidstat -t -p $(pidof ghc) | grep ghc_worker 06:41:37 AM - 2848953 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:41:37 AM - 2848954 0.00 0.00 0.00 0.00 31 |__ghc_worker 06:41:37 AM - 2848955 0.00 0.00 0.00 0.00 3 |__ghc_worker 06:41:37 AM - 2848957 0.00 0.00 0.00 0.00 3 |__ghc_worker 06:41:37 AM - 2848958 0.00 0.00 0.00 0.00 22 |__ghc_worker 06:41:37 AM - 2848959 0.00 0.00 0.00 0.00 37 |__ghc_worker 06:41:37 AM - 2848960 0.00 0.00 0.00 0.00 5 |__ghc_worker 06:41:37 AM - 2848961 0.00 0.00 0.00 0.00 5 |__ghc_worker 06:41:37 AM - 2848962 0.00 0.00 0.00 0.00 36 |__ghc_worker 06:41:37 AM - 2848963 0.00 0.00 0.00 0.00 7 |__ghc_worker 06:41:37 AM - 2848964 0.00 0.00 0.00 0.00 12 |__ghc_worker 06:41:37 AM - 2848965 0.00 0.00 0.00 0.00 11 |__ghc_worker 06:41:37 AM - 2848966 0.00 0.00 0.00 0.00 24 |__ghc_worker 06:41:37 AM - 2848967 0.00 0.00 0.00 0.00 38 |__ghc_worker 06:41:37 AM - 2848968 0.00 0.00 0.00 0.00 23 |__ghc_worker 06:41:37 AM - 2848969 0.00 0.00 0.00 0.00 8 |__ghc_worker 06:41:37 AM - 2848970 0.00 0.00 0.00 0.00 14 |__ghc_worker 06:41:37 AM - 2850193 0.00 0.00 0.00 0.00 32 |__ghc_worker 06:41:37 AM - 2850194 0.00 0.00 0.00 0.00 33 |__ghc_worker 06:41:37 AM - 2850196 0.00 0.00 0.00 0.00 34 |__ghc_worker 06:41:37 AM - 2850197 0.00 0.00 0.00 0.00 35 |__ghc_worker 06:41:37 AM - 2850198 0.00 0.00 0.00 0.00 10 |__ghc_worker 06:41:37 AM - 2850199 0.00 0.00 0.00 0.00 17 |__ghc_worker 06:41:37 AM - 2850294 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:41:37 AM - 2850295 0.00 0.00 0.00 0.00 31 |__ghc_worker }}}
{{{ $ pidstat -t -p $(pidof ghc) | grep ghc_worker 06:42:43 AM - 2848953 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:42:43 AM - 2848954 0.00 0.00 0.00 0.00 31 |__ghc_worker 06:42:43 AM - 2848955 0.00 0.00 0.00 0.00 3 |__ghc_worker 06:42:43 AM - 2848957 0.00 0.00 0.00 0.00 7 |__ghc_worker 06:42:43 AM - 2848958 0.00 0.00 0.00 0.00 22 |__ghc_worker 06:42:43 AM - 2848959 0.00 0.00 0.00 0.00 37 |__ghc_worker 06:42:43 AM - 2848960 0.00 0.00 0.00 0.00 9 |__ghc_worker 06:42:43 AM - 2848961 0.00 0.00 0.00 0.00 0 |__ghc_worker 06:42:43 AM - 2848962 0.00 0.00 0.00 0.00 36 |__ghc_worker 06:42:43 AM - 2848963 0.00 0.00 0.00 0.00 4 |__ghc_worker 06:42:43 AM - 2848964 0.00 0.00 0.00 0.00 12 |__ghc_worker 06:42:43 AM - 2848965 0.00 0.00 0.00 0.00 11 |__ghc_worker 06:42:43 AM - 2848966 0.00 0.00 0.00 0.00 24 |__ghc_worker 06:42:43 AM - 2848967 0.00 0.00 0.00 0.00 38 |__ghc_worker 06:42:43 AM - 2848968 0.00 0.00 0.00 0.00 23 |__ghc_worker 06:42:43 AM - 2848969 0.00 0.00 0.00 0.00 29 |__ghc_worker 06:42:43 AM - 2848970 0.00 0.00 0.00 0.00 14 |__ghc_worker 06:42:43 AM - 2850193 0.00 0.00 0.00 0.00 32 |__ghc_worker 06:42:43 AM - 2850196 0.00 0.00 0.00 0.00 34 |__ghc_worker 06:42:43 AM - 2850197 0.00 0.00 0.00 0.00 35 |__ghc_worker 06:42:43 AM - 2850198 0.00 0.00 0.00 0.00 10 |__ghc_worker 06:42:43 AM - 2850199 0.00 0.00 0.00 0.00 19 |__ghc_worker 06:42:43 AM - 2850295 0.00 0.00 0.00 0.00 13 |__ghc_worker 06:42:43 AM - 2861009 0.00 0.00 0.00 0.00 34 |__ghc_worker 06:42:43 AM - 2861010 0.00 0.00 0.00 0.00 35 |__ghc_worker }}}
{{{ $ pidstat -t -p $(pidof ghc) | grep ghc_worker 06:43:37 AM - 2848953 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:43:37 AM - 2848954 0.00 0.00 0.00 0.00 31 |__ghc_worker 06:43:37 AM - 2848955 0.00 0.00 0.00 0.00 9 |__ghc_worker 06:43:37 AM - 2848957 0.00 0.00 0.00 0.00 9 |__ghc_worker 06:43:37 AM - 2848958 0.00 0.00 0.00 0.00 22 |__ghc_worker 06:43:37 AM - 2848959 0.00 0.00 0.00 0.00 37 |__ghc_worker 06:43:37 AM - 2848960 0.00 0.00 0.00 0.00 29 |__ghc_worker 06:43:37 AM - 2848961 0.00 0.00 0.00 0.00 20 |__ghc_worker 06:43:37 AM - 2848962 0.00 0.00 0.00 0.00 36 |__ghc_worker 06:43:37 AM - 2848963 0.00 0.00 0.00 0.00 3 |__ghc_worker 06:43:37 AM - 2848964 0.00 0.00 0.00 0.00 12 |__ghc_worker 06:43:37 AM - 2848965 0.00 0.00 0.00 0.00 15 |__ghc_worker 06:43:37 AM - 2848966 0.00 0.00 0.00 0.00 24 |__ghc_worker 06:43:37 AM - 2848967 0.00 0.00 0.00 0.00 38 |__ghc_worker 06:43:37 AM - 2848968 0.00 0.00 0.00 0.00 23 |__ghc_worker 06:43:37 AM - 2848969 0.00 0.00 0.00 0.00 1 |__ghc_worker 06:43:37 AM - 2848970 0.00 0.00 0.00 0.00 19 |__ghc_worker 06:43:37 AM - 2850193 0.00 0.00 0.00 0.00 32 |__ghc_worker 06:43:37 AM - 2850196 0.00 0.00 0.00 0.00 34 |__ghc_worker 06:43:37 AM - 2850197 0.00 0.00 0.00 0.00 35 |__ghc_worker 06:43:37 AM - 2850198 0.00 0.00 0.00 0.00 30 |__ghc_worker 06:43:37 AM - 2861009 0.00 0.00 0.00 0.00 17 |__ghc_worker 06:43:37 AM - 2861010 0.00 0.00 0.00 0.00 19 |__ghc_worker 06:43:37 AM - 2862954 0.00 0.00 0.00 0.00 2 |__ghc_worker 06:43:37 AM - 2862956 0.00 0.00 0.00 0.00 26 |__ghc_worker }}}
The sets of threads are changing on every suspend, unsuspend combination.
This is really visible when running in gdb with -j40, gdb just spews threads getting spawned and killed: {{{ [Thread 0x7f0b767fc700 (LWP 2881933) exited] [New Thread 0x7f0b767fc700 (LWP 2881940)] [New Thread 0x7f0cc2cfd700 (LWP 2881941)] [Thread 0x7f0b76ffd700 (LWP 2881928) exited] [New Thread 0x7f0b7dffb700 (LWP 2881942)] [New Thread 0x7f0b76ffd700 (LWP 2881943)] [New Thread 0x7f0b7ffff700 (LWP 2881944)] [Thread 0x7f0b777fe700 (LWP 2881932) exited] [Thread 0x7f0b77fff700 (LWP 2881931) exited] [Thread 0x7f0b7d7fa700 (LWP 2881927) exited] [Thread 0x7f0b7f7fe700 (LWP 2881926) exited] [New Thread 0x7f0b7f7fe700 (LWP 2881945)] [New Thread 0x7f0b7d7fa700 (LWP 2881948)] [Thread 0x7f0cc2cfd700 (LWP 2881941) exited] [Thread 0x7f0b75ffb700 (LWP 2881938) exited] [New Thread 0x7f0cc2cfd700 (LWP 2881949)] [Thread 0x7f0b767fc700 (LWP 2881940) exited] [New Thread 0x7f0b767fc700 (LWP 2881950)] [New Thread 0x7f0b75ffb700 (LWP 2881951)] [New Thread 0x7f0b77fff700 (LWP 2881952)] [Thread 0x7f0b757fa700 (LWP 2881939) exited] [Thread 0x7f0b7d7fa700 (LWP 2881948) exited] [New Thread 0x7f0b757fa700 (LWP 2881953)] [Thread 0x7f0b7effd700 (LWP 2881936) exited] [Thread 0x7f0cc3cff700 (LWP 2881937) exited] [New Thread 0x7f0cc3cff700 (LWP 2881954)] [New Thread 0x7f0b7effd700 (LWP 2881955)] [New Thread 0x7f0b7d7fa700 (LWP 2881956)] [Thread 0x7f0b7dffb700 (LWP 2881942) exited] [New Thread 0x7f0b777fe700 (LWP 2881957)] [New Thread 0x7f0b7dffb700 (LWP 2881958)] [Thread 0x7f0b76ffd700 (LWP 2881943) exited] [New Thread 0x7f0b76ffd700 (LWP 2881959)] [Thread 0x7f0b7e7fc700 (LWP 2881935) exited] [Thread 0x7f0b7effd700 (LWP 2881955) exited] [New Thread 0x7f0b7effd700 (LWP 2881962)] [New Thread 0x7f0b7e7fc700 (LWP 2881963)] [Thread 0x7f0b7f7fe700 (LWP 2881945) exited] [New Thread 0x7f0b7f7fe700 (LWP 2881964)] [New Thread 0x7f0b7cff9700 (LWP 2881965)] [Thread 0x7f0b75ffb700 (LWP 2881951) exited] [Thread 0x7f0b7dffb700 (LWP 2881958) exited] [Thread 0x7f0cc3cff700 (LWP 2881954) exited] [New Thread 0x7f0cc3cff700 (LWP 2881967)] [New Thread 0x7f0b7dffb700 (LWP 2881968)] [Thread 0x7f0b777fe700 (LWP 2881957) exited] [Thread 0x7f0b757fa700 (LWP 2881953) exited] [Thread 0x7f0cc2cfd700 (LWP 2881949) exited] [Thread 0x7f0b7ffff700 (LWP 2881944) exited] [New Thread 0x7f0cc2cfd700 (LWP 2881969)] [Thread 0x7f0b7e7fc700 (LWP 2881963) exited] [Thread 0x7f0b767fc700 (LWP 2881950) exited] [New Thread 0x7f0b767fc700 (LWP 2881970)] [New Thread 0x7f0b7e7fc700 (LWP 2881971)] [Thread 0x7f0b77fff700 (LWP 2881952) exited] [New Thread 0x7f0b7ffff700 (LWP 2881972)] [New Thread 0x7f0b77fff700 (LWP 2881973)] [New Thread 0x7f0b757fa700 (LWP 2881974)] [Thread 0x7f0b7dffb700 (LWP 2881968) exited] [New Thread 0x7f0b7dffb700 (LWP 2881975)] [Thread 0x7f0cc2cfd700 (LWP 2881969) exited] [New Thread 0x7f0cc2cfd700 (LWP 2881976)] [Thread 0x7f0b76ffd700 (LWP 2881959) exited] [Thread 0x7f0b757fa700 (LWP 2881974) exited] [New Thread 0x7f0b76ffd700 (LWP 2881977)] [New Thread 0x7f0b757fa700 (LWP 2881978)] [New Thread 0x7f0b777fe700 (LWP 2881979)] [Thread 0x7f0b7effd700 (LWP 2881962) exited] [New Thread 0x7f0b7effd700 (LWP 2881980)] [Thread 0x7f0b7ffff700 (LWP 2881972) exited] [Thread 0x7f0b7e7fc700 (LWP 2881971) exited] [Thread 0x7f0b77fff700 (LWP 2881973) exited] [New Thread 0x7f0b77fff700 (LWP 2881981)] [Thread 0x7f0b7d7fa700 (LWP 2881956) exited] [New Thread 0x7f0b7d7fa700 (LWP 2881982)] [New Thread 0x7f0b7e7fc700 (LWP 2881983)] [Thread 0x7f0cc2cfd700 (LWP 2881976) exited] [New Thread 0x7f0cc2cfd700 (LWP 2881984)] [New Thread 0x7f0b7ffff700 (LWP 2881985)] [New Thread 0x7f0b75ffb700 (LWP 2881986)] [Thread 0x7f0b7dffb700 (LWP 2881975) exited] [New Thread 0x7f0b7dffb700 (LWP 2881987)] [New Thread 0x7f0b74ff9700 (LWP 2881988)] [Thread 0x7f0b777fe700 (LWP 2881979) exited] [Thread 0x7f0b7effd700 (LWP 2881980) exited] [Thread 0x7f0b76ffd700 (LWP 2881977) exited] }}}
New description: When you run: {{{ ghci -j8 ghci> :set -package array # in a different terminal: pidstat -t -p $(pidof ghc) | grep ghc_worker kill -SIGSTOP $(pidof ghc); kill -SIGCONT $(pidof ghc) # SIGCONT doesn't really resume it, you have to run fg in the terminal where it runs pidstat -t -p $(pidof ghc) | grep ghc_worker kill -SIGSTOP $(pidof ghc); kill -SIGCONT $(pidof ghc) pidstat -t -p $(pidof ghc) | grep ghc_worker kill -SIGSTOP $(pidof ghc); kill -SIGCONT $(pidof ghc) pidstat -t -p $(pidof ghc) | grep ghc_worker }}} You get: {{{ $ pidstat -t -p $(pidof ghc) | grep ghc_worker 06:40:55 AM - 2848953 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:40:55 AM - 2848954 0.00 0.00 0.00 0.00 31 |__ghc_worker 06:40:55 AM - 2848955 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:40:55 AM - 2848957 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:40:55 AM - 2848958 0.00 0.00 0.00 0.00 22 |__ghc_worker 06:40:55 AM - 2848959 0.00 0.00 0.00 0.00 37 |__ghc_worker 06:40:55 AM - 2848960 0.00 0.00 0.00 0.00 3 |__ghc_worker 06:40:55 AM - 2848961 0.00 0.00 0.00 0.00 2 |__ghc_worker 06:40:55 AM - 2848962 0.00 0.00 0.00 0.00 36 |__ghc_worker 06:40:55 AM - 2848963 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:40:55 AM - 2848964 0.00 0.00 0.00 0.00 31 |__ghc_worker 06:40:55 AM - 2848965 0.00 0.00 0.00 0.00 11 |__ghc_worker 06:40:55 AM - 2848966 0.00 0.00 0.00 0.00 24 |__ghc_worker 06:40:55 AM - 2848967 0.00 0.00 0.00 0.00 38 |__ghc_worker 06:40:55 AM - 2848968 0.00 0.00 0.00 0.00 23 |__ghc_worker 06:40:55 AM - 2848969 0.00 0.00 0.00 0.00 22 |__ghc_worker 06:40:55 AM - 2848970 0.00 0.00 0.00 0.00 31 |__ghc_worker }}} {{{ $ pidstat -t -p $(pidof ghc) | grep ghc_worker 06:41:37 AM - 2848953 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:41:37 AM - 2848954 0.00 0.00 0.00 0.00 31 |__ghc_worker 06:41:37 AM - 2848955 0.00 0.00 0.00 0.00 3 |__ghc_worker 06:41:37 AM - 2848957 0.00 0.00 0.00 0.00 3 |__ghc_worker 06:41:37 AM - 2848958 0.00 0.00 0.00 0.00 22 |__ghc_worker 06:41:37 AM - 2848959 0.00 0.00 0.00 0.00 37 |__ghc_worker 06:41:37 AM - 2848960 0.00 0.00 0.00 0.00 5 |__ghc_worker 06:41:37 AM - 2848961 0.00 0.00 0.00 0.00 5 |__ghc_worker 06:41:37 AM - 2848962 0.00 0.00 0.00 0.00 36 |__ghc_worker 06:41:37 AM - 2848963 0.00 0.00 0.00 0.00 7 |__ghc_worker 06:41:37 AM - 2848964 0.00 0.00 0.00 0.00 12 |__ghc_worker 06:41:37 AM - 2848965 0.00 0.00 0.00 0.00 11 |__ghc_worker 06:41:37 AM - 2848966 0.00 0.00 0.00 0.00 24 |__ghc_worker 06:41:37 AM - 2848967 0.00 0.00 0.00 0.00 38 |__ghc_worker 06:41:37 AM - 2848968 0.00 0.00 0.00 0.00 23 |__ghc_worker 06:41:37 AM - 2848969 0.00 0.00 0.00 0.00 8 |__ghc_worker 06:41:37 AM - 2848970 0.00 0.00 0.00 0.00 14 |__ghc_worker 06:41:37 AM - 2850193 0.00 0.00 0.00 0.00 32 |__ghc_worker 06:41:37 AM - 2850194 0.00 0.00 0.00 0.00 33 |__ghc_worker 06:41:37 AM - 2850196 0.00 0.00 0.00 0.00 34 |__ghc_worker 06:41:37 AM - 2850197 0.00 0.00 0.00 0.00 35 |__ghc_worker 06:41:37 AM - 2850198 0.00 0.00 0.00 0.00 10 |__ghc_worker 06:41:37 AM - 2850199 0.00 0.00 0.00 0.00 17 |__ghc_worker 06:41:37 AM - 2850294 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:41:37 AM - 2850295 0.00 0.00 0.00 0.00 31 |__ghc_worker }}} {{{ $ pidstat -t -p $(pidof ghc) | grep ghc_worker 06:42:43 AM - 2848953 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:42:43 AM - 2848954 0.00 0.00 0.00 0.00 31 |__ghc_worker 06:42:43 AM - 2848955 0.00 0.00 0.00 0.00 3 |__ghc_worker 06:42:43 AM - 2848957 0.00 0.00 0.00 0.00 7 |__ghc_worker 06:42:43 AM - 2848958 0.00 0.00 0.00 0.00 22 |__ghc_worker 06:42:43 AM - 2848959 0.00 0.00 0.00 0.00 37 |__ghc_worker 06:42:43 AM - 2848960 0.00 0.00 0.00 0.00 9 |__ghc_worker 06:42:43 AM - 2848961 0.00 0.00 0.00 0.00 0 |__ghc_worker 06:42:43 AM - 2848962 0.00 0.00 0.00 0.00 36 |__ghc_worker 06:42:43 AM - 2848963 0.00 0.00 0.00 0.00 4 |__ghc_worker 06:42:43 AM - 2848964 0.00 0.00 0.00 0.00 12 |__ghc_worker 06:42:43 AM - 2848965 0.00 0.00 0.00 0.00 11 |__ghc_worker 06:42:43 AM - 2848966 0.00 0.00 0.00 0.00 24 |__ghc_worker 06:42:43 AM - 2848967 0.00 0.00 0.00 0.00 38 |__ghc_worker 06:42:43 AM - 2848968 0.00 0.00 0.00 0.00 23 |__ghc_worker 06:42:43 AM - 2848969 0.00 0.00 0.00 0.00 29 |__ghc_worker 06:42:43 AM - 2848970 0.00 0.00 0.00 0.00 14 |__ghc_worker 06:42:43 AM - 2850193 0.00 0.00 0.00 0.00 32 |__ghc_worker 06:42:43 AM - 2850196 0.00 0.00 0.00 0.00 34 |__ghc_worker 06:42:43 AM - 2850197 0.00 0.00 0.00 0.00 35 |__ghc_worker 06:42:43 AM - 2850198 0.00 0.00 0.00 0.00 10 |__ghc_worker 06:42:43 AM - 2850199 0.00 0.00 0.00 0.00 19 |__ghc_worker 06:42:43 AM - 2850295 0.00 0.00 0.00 0.00 13 |__ghc_worker 06:42:43 AM - 2861009 0.00 0.00 0.00 0.00 34 |__ghc_worker 06:42:43 AM - 2861010 0.00 0.00 0.00 0.00 35 |__ghc_worker }}} {{{ $ pidstat -t -p $(pidof ghc) | grep ghc_worker 06:43:37 AM - 2848953 0.00 0.00 0.00 0.00 21 |__ghc_worker 06:43:37 AM - 2848954 0.00 0.00 0.00 0.00 31 |__ghc_worker 06:43:37 AM - 2848955 0.00 0.00 0.00 0.00 9 |__ghc_worker 06:43:37 AM - 2848957 0.00 0.00 0.00 0.00 9 |__ghc_worker 06:43:37 AM - 2848958 0.00 0.00 0.00 0.00 22 |__ghc_worker 06:43:37 AM - 2848959 0.00 0.00 0.00 0.00 37 |__ghc_worker 06:43:37 AM - 2848960 0.00 0.00 0.00 0.00 29 |__ghc_worker 06:43:37 AM - 2848961 0.00 0.00 0.00 0.00 20 |__ghc_worker 06:43:37 AM - 2848962 0.00 0.00 0.00 0.00 36 |__ghc_worker 06:43:37 AM - 2848963 0.00 0.00 0.00 0.00 3 |__ghc_worker 06:43:37 AM - 2848964 0.00 0.00 0.00 0.00 12 |__ghc_worker 06:43:37 AM - 2848965 0.00 0.00 0.00 0.00 15 |__ghc_worker 06:43:37 AM - 2848966 0.00 0.00 0.00 0.00 24 |__ghc_worker 06:43:37 AM - 2848967 0.00 0.00 0.00 0.00 38 |__ghc_worker 06:43:37 AM - 2848968 0.00 0.00 0.00 0.00 23 |__ghc_worker 06:43:37 AM - 2848969 0.00 0.00 0.00 0.00 1 |__ghc_worker 06:43:37 AM - 2848970 0.00 0.00 0.00 0.00 19 |__ghc_worker 06:43:37 AM - 2850193 0.00 0.00 0.00 0.00 32 |__ghc_worker 06:43:37 AM - 2850196 0.00 0.00 0.00 0.00 34 |__ghc_worker 06:43:37 AM - 2850197 0.00 0.00 0.00 0.00 35 |__ghc_worker 06:43:37 AM - 2850198 0.00 0.00 0.00 0.00 30 |__ghc_worker 06:43:37 AM - 2861009 0.00 0.00 0.00 0.00 17 |__ghc_worker 06:43:37 AM - 2861010 0.00 0.00 0.00 0.00 19 |__ghc_worker 06:43:37 AM - 2862954 0.00 0.00 0.00 0.00 2 |__ghc_worker 06:43:37 AM - 2862956 0.00 0.00 0.00 0.00 26 |__ghc_worker }}} The sets of threads are changing on every suspend, unsuspend combination. This is really visible when running in gdb with -j40, gdb just spews threads getting spawned and killed: {{{ [Thread 0x7f0b767fc700 (LWP 2881933) exited] [New Thread 0x7f0b767fc700 (LWP 2881940)] [New Thread 0x7f0cc2cfd700 (LWP 2881941)] [Thread 0x7f0b76ffd700 (LWP 2881928) exited] [New Thread 0x7f0b7dffb700 (LWP 2881942)] [New Thread 0x7f0b76ffd700 (LWP 2881943)] [New Thread 0x7f0b7ffff700 (LWP 2881944)] [Thread 0x7f0b777fe700 (LWP 2881932) exited] [Thread 0x7f0b77fff700 (LWP 2881931) exited] [Thread 0x7f0b7d7fa700 (LWP 2881927) exited] [Thread 0x7f0b7f7fe700 (LWP 2881926) exited] [New Thread 0x7f0b7f7fe700 (LWP 2881945)] [New Thread 0x7f0b7d7fa700 (LWP 2881948)] [Thread 0x7f0cc2cfd700 (LWP 2881941) exited] [Thread 0x7f0b75ffb700 (LWP 2881938) exited] [New Thread 0x7f0cc2cfd700 (LWP 2881949)] [Thread 0x7f0b767fc700 (LWP 2881940) exited] [New Thread 0x7f0b767fc700 (LWP 2881950)] [New Thread 0x7f0b75ffb700 (LWP 2881951)] [New Thread 0x7f0b77fff700 (LWP 2881952)] [Thread 0x7f0b757fa700 (LWP 2881939) exited] [Thread 0x7f0b7d7fa700 (LWP 2881948) exited] [New Thread 0x7f0b757fa700 (LWP 2881953)] [Thread 0x7f0b7effd700 (LWP 2881936) exited] [Thread 0x7f0cc3cff700 (LWP 2881937) exited] [New Thread 0x7f0cc3cff700 (LWP 2881954)] [New Thread 0x7f0b7effd700 (LWP 2881955)] [New Thread 0x7f0b7d7fa700 (LWP 2881956)] [Thread 0x7f0b7dffb700 (LWP 2881942) exited] [New Thread 0x7f0b777fe700 (LWP 2881957)] [New Thread 0x7f0b7dffb700 (LWP 2881958)] [Thread 0x7f0b76ffd700 (LWP 2881943) exited] [New Thread 0x7f0b76ffd700 (LWP 2881959)] [Thread 0x7f0b7e7fc700 (LWP 2881935) exited] [Thread 0x7f0b7effd700 (LWP 2881955) exited] [New Thread 0x7f0b7effd700 (LWP 2881962)] [New Thread 0x7f0b7e7fc700 (LWP 2881963)] [Thread 0x7f0b7f7fe700 (LWP 2881945) exited] [New Thread 0x7f0b7f7fe700 (LWP 2881964)] [New Thread 0x7f0b7cff9700 (LWP 2881965)] [Thread 0x7f0b75ffb700 (LWP 2881951) exited] [Thread 0x7f0b7dffb700 (LWP 2881958) exited] [Thread 0x7f0cc3cff700 (LWP 2881954) exited] [New Thread 0x7f0cc3cff700 (LWP 2881967)] [New Thread 0x7f0b7dffb700 (LWP 2881968)] [Thread 0x7f0b777fe700 (LWP 2881957) exited] [Thread 0x7f0b757fa700 (LWP 2881953) exited] [Thread 0x7f0cc2cfd700 (LWP 2881949) exited] [Thread 0x7f0b7ffff700 (LWP 2881944) exited] [New Thread 0x7f0cc2cfd700 (LWP 2881969)] [Thread 0x7f0b7e7fc700 (LWP 2881963) exited] [Thread 0x7f0b767fc700 (LWP 2881950) exited] [New Thread 0x7f0b767fc700 (LWP 2881970)] [New Thread 0x7f0b7e7fc700 (LWP 2881971)] [Thread 0x7f0b77fff700 (LWP 2881952) exited] [New Thread 0x7f0b7ffff700 (LWP 2881972)] [New Thread 0x7f0b77fff700 (LWP 2881973)] [New Thread 0x7f0b757fa700 (LWP 2881974)] [Thread 0x7f0b7dffb700 (LWP 2881968) exited] [New Thread 0x7f0b7dffb700 (LWP 2881975)] [Thread 0x7f0cc2cfd700 (LWP 2881969) exited] [New Thread 0x7f0cc2cfd700 (LWP 2881976)] [Thread 0x7f0b76ffd700 (LWP 2881959) exited] [Thread 0x7f0b757fa700 (LWP 2881974) exited] [New Thread 0x7f0b76ffd700 (LWP 2881977)] [New Thread 0x7f0b757fa700 (LWP 2881978)] [New Thread 0x7f0b777fe700 (LWP 2881979)] [Thread 0x7f0b7effd700 (LWP 2881962) exited] [New Thread 0x7f0b7effd700 (LWP 2881980)] [Thread 0x7f0b7ffff700 (LWP 2881972) exited] [Thread 0x7f0b7e7fc700 (LWP 2881971) exited] [Thread 0x7f0b77fff700 (LWP 2881973) exited] [New Thread 0x7f0b77fff700 (LWP 2881981)] [Thread 0x7f0b7d7fa700 (LWP 2881956) exited] [New Thread 0x7f0b7d7fa700 (LWP 2881982)] [New Thread 0x7f0b7e7fc700 (LWP 2881983)] [Thread 0x7f0cc2cfd700 (LWP 2881976) exited] [New Thread 0x7f0cc2cfd700 (LWP 2881984)] [New Thread 0x7f0b7ffff700 (LWP 2881985)] [New Thread 0x7f0b75ffb700 (LWP 2881986)] [Thread 0x7f0b7dffb700 (LWP 2881975) exited] [New Thread 0x7f0b7dffb700 (LWP 2881987)] [New Thread 0x7f0b74ff9700 (LWP 2881988)] [Thread 0x7f0b777fe700 (LWP 2881979) exited] [Thread 0x7f0b7effd700 (LWP 2881980) exited] [Thread 0x7f0b76ffd700 (LWP 2881977) exited] }}} -- -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10587#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10587: Suspending and unsuspending ghci kills and spawns threads ---------------------------------+----------------------------------------- Reporter: niteria | Owner: niteria Type: bug | Status: new Priority: low | Milestone: Component: GHCi | Version: 7.10.1 Resolution: | Keywords: Operating System: Linux | Architecture: x86_64 (amd64) Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: ---------------------------------+----------------------------------------- Changes (by niteria): * cc: AndreasVoellmy (added) Comment: {{{ ./inplace/bin/ghc-stage2 --interactive -j8 +RTS -Ds 7f0d94ff9700: returning; I want capability 0 7f0d94ff9700: resuming capability 0 7f0d94ff9700: cap 0: running thread 12 (ThreadRunGHC) 7f0d967fc700: returning; I want capability 0 7f0dd91ff700: returning; I want capability 0 7f0dd3fff700: returning; I want capability 0 7f0d957fa700: returning; I want capability 0 7f0d96ffd700: returning; I want capability 0 7f0d73fff700: returning; I want capability 0 7f0d95ffb700: returning; I want capability 0 7f0d94ff9700: cap 0: thread 12 stopped (yielding) 7f0d94ff9700: giving up capability 0 7f0d94ff9700: passing capability 0 to worker 0x7f0d967fc700 7f0d967fc700: resuming capability 0 7f0d967fc700: cap 0: running thread 16 (ThreadRunGHC) 7f0d967fc700: cap 0: thread 16 stopped (yielding) 7f0d967fc700: giving up capability 0 7f0d967fc700: passing capability 0 to worker 0x7f0dd91ff700 7f0dd91ff700: resuming capability 0 7f0dd91ff700: cap 0: running thread 2 (ThreadRunGHC) 7f0dd91ff700: cap 0: thread 2 stopped (yielding) 7f0dd91ff700: giving up capability 0 7f0dd91ff700: passing capability 0 to worker 0x7f0dd3fff700 7f0dd3fff700: resuming capability 0 7f0dd3fff700: cap 0: running thread 15 (ThreadRunGHC) 7f0dd3fff700: cap 0: thread 15 stopped (yielding) 7f0dd3fff700: giving up capability 0 7f0dd3fff700: passing capability 0 to worker 0x7f0d957fa700 7f0d957fa700: resuming capability 0 7f0d957fa700: cap 0: running thread 14 (ThreadRunGHC) 7f0d957fa700: cap 0: thread 14 stopped (yielding) 7f0d957fa700: giving up capability 0 7f0d957fa700: passing capability 0 to worker 0x7f0d96ffd700 7f0d96ffd700: resuming capability 0 7f0d96ffd700: cap 0: running thread 18 (ThreadRunGHC) 7f0d96ffd700: cap 0: thread 18 stopped (yielding) 7f0d96ffd700: giving up capability 0 7f0d96ffd700: 6 spare workers already, exiting 7f0d96ffd700: passing capability 0 to worker 0x7f0d73fff700 shutdownThread 0x33b047 7f0d73fff700: resuming capability 0 7f0d73fff700: cap 0: running thread 13 (ThreadRunGHC) 7f0d73fff700: cap 0: thread 13 stopped (yielding) 7f0d73fff700: giving up capability 0 7f0d73fff700: 6 spare workers already, exiting 7f0d73fff700: passing capability 0 to worker 0x7f0d95ffb700 shutdownThread 0x33b04c }}} After receiving SIGCONT, all the threads (including IO manager threads, that were waiting on epoll_wait) wake up and try to get capability 0. They eventually succeed and get put on the spare workers queue for this capability. The current limit on the the number of spare workers per capability is 6, so the remaining 2 threads get shut down. Why do we have so many threads? When compiling things in parallel we first increase the number of capabilities (to 8) and then we restore it (to 1). https://phabricator.haskell.org/diffusion/GHC/browse/master/compiler/main/Gh... This increases the number of IO manager threads to 8. IO manager doesn't decrease the number of threads when the number of capabilities decreases, so we keep those threads forever. https://phabricator.haskell.org/diffusion/GHC/browse/master/libraries/base/G... I believe the fix is to decrease the number of IO manager threads when number of capabilities decreases. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10587#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10587: Suspending and unsuspending ghci kills and spawns threads ---------------------------------+----------------------------------------- Reporter: niteria | Owner: Type: bug | Status: new Priority: low | Milestone: Component: GHCi | Version: 7.10.1 Resolution: | Keywords: Operating System: Linux | Architecture: x86_64 (amd64) Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: ---------------------------------+----------------------------------------- Changes (by niteria): * owner: niteria => Comment: I've tried to change it, so that the number of IO manager threads gets decreased when number of capabilities decreases, but I couldn't come up with a solution that satisfied me. The main problem is that the thread is not the only resource associated with the IO manager, there are also callback that should be executed in the future. If we stopped the thread before its loop is empty, we would break the promise of executing that callback. This problem is also described here: https://phabricator.haskell.org/rGHC12f3fef5ec52c1ec0958b674adcd981f48048428 I've considered: * Checking if the loop is empty - I couldn't tell if all the implementations support that, so I abandoned that idea * Migrating the file descriptors and callbacks to another instance of IO manager - the problem is that it isn't obvious which one to migrate to and if we'd want to spread them across available ones. @simonmar suggested just being less aggressive about killing spare workers. I'm starting to like that idea. I'm out of ideas and it's not really that urgent for me, so I'll suspend working on this. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10587#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler
participants (1)
-
GHC