
#8231: Haskell's Run Time System doesn't save electricity ------------------------------------------------+-------------------------- Reporter: UnixJunkie | Owner: Type: bug | Status: closed Priority: normal | Milestone: Component: Runtime System | Version: 7.4.1 Resolution: invalid | Keywords: energy Operating System: Linux | saving Type of failure: None/Unknown | Architecture: x86_64 Test Case: provided in the description | (amd64) Blocking: | Difficulty: | Unknown | Blocked By: | Related Tickets: ------------------------------------------------+-------------------------- Changes (by thoughtpolice): * status: new => closed * resolution: => invalid Comment: This is because the parallel garbage collector is enabled by by default in the `-threaded` runtime, so even if your program is sequential the GC will use multiple cores. The fact your wallclock time doesn't go anywhere is thus not really surprising (it could even get worse, since threads may be crossing cache lines and cores in order to divide up the workload.) This is verifiable by running the application under `perf`: {{{ $ sudo perf record -ag -- ./8231 +RTS -N4 ... $ sudo perf report --stdio # # Samples: 194K of event 'cycles' # Event count (approx.): 142904701567 # # Overhead Command Shared Object Symbol # ........ ....... .................... ........................................ # 47.97% 8231 8231 [.] gcWorkerThread | --- gcWorkerThread 0x48fec0 0x1 ... }}} so `gcWorkerThread` is dominating here. If you link with `-rtsopts` and run your program with `+RTS -N -qb -qg`, your problem will go away and you'll only see one core in use. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8231#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler