#9221: (super!) linear slowdown of parallel builds on 40 core machine -------------------------------------+------------------------------------- Reporter: carter | Owner: Type: bug | Status: new Priority: high | Milestone: 7.12.1 Component: Compiler | Version: 7.8.2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Compile-time | Unknown/Multiple performance bug | Test Case: Blocked By: | Blocking: Related Tickets: #910, #8224 | Differential Revisions: -------------------------------------+------------------------------------- Comment (by slyfox): Done the following: - patched GHC [1] to print only blackholes in '+RTS -Da' and hide unresolvable addresses as [addr] - extended blackhole printer to dump '->indirectee' contents as a heap object (is it safe?) - added synchronization to printClosure to save stderr from multiple threads - linked ghc-stage2 with debug runtime - ran as '-j8 +RTS -A128M -Da' - sorted output by most frequent calls ('sort l | uniq -c | sort -n -k1 -r | head -n30') Here is the result: {{{ 4179540 BLACKHOLE(Object [addr] = ghc-prim:GHC.Types.I#([addr])\n)\n 2031781 BLACKHOLE(Object [addr] = ghc:CLabel.IdLabel([addr], [addr], [addr])\n)\n 1782769 BLACKHOLE(Object [addr] = FUN/1(<ghc_X86ziInstr_zdfInstructionInstrzuzdcjumpDestsOfInstr_info>) )\n 911023 BLACKHOLE(Object [addr] = FUN/1(<s8t1_info>, [addr]) )\n 474894 BLACKHOLE(Object [addr] = ghc:TypeRep.TyConApp([addr], [addr])\n)\n 380862 BLACKHOLE(Object [addr] = FUN/2(<ghczmprim_GHCziClasses_zdfOrdIntzuzdcmax_info>) )\n 370195 BLACKHOLE(Object [addr] = ghc-prim:GHC.Tuple.(,,)([addr], [addr], [addr])\n)\n 352184 BLACKHOLE(Object [addr] = PAP/2([addr], [addr])\n)\n 282341 BLACKHOLE(Object [addr] = ghc:Var.Id([addr], [addr], <ghc_Var_mkCoVar1_closure>, [addr], [addr], [addr])\n)\n 190979 BLACKHOLE(Object [addr] = ghc:X86.Instr.JMP([addr], [addr])\n)\n 189194 BLACKHOLE(Object [addr] = ghc:X86.Instr.JXX([addr], [addr])\n)\n 176401 BLACKHOLE(Object [addr] = ghc:Unique.MkUnique([addr])\n)\n 130071 BLACKHOLE(Object [addr] = PAP/1([addr], [addr])\n)\n 127332 BLACKHOLE(Object [addr] = ghc:VarEnv.InScope([addr], [addr])\n)\n 121511 BLACKHOLE(Object [addr] = ghc:TypeRep.FunTy([addr], [addr])\n)\n 118142 BLACKHOLE(Object [addr] = FUN/1(<ghc_CodeGenziPlatformziX86zu64_globalRegMaybe_info>) )\n 106457 BLACKHOLE(Object [addr] = ghc:StgCmmMonad.HeapUsage([addr], [addr])\n)\n 84274 BLACKHOLE(Object [addr] = 0tT640fErehCGZtZRn6YbE:Data.Map.Base.Bin([addr], [addr], [addr], [addr], [addr])\n)\n 83945 BLACKHOLE(Object [addr] = ghc:Module.Module([addr], [addr])\n)\n 71331 BLACKHOLE(Object [addr] = ghc:TrieMap.SingletonMap([addr], [addr])\n)\n 69775 BLACKHOLE(Object [addr] = ghc:StgCmmClosure.LFThunk([addr], [addr], [addr], [addr], [addr])\n)\n 69754 BLACKHOLE(Object [addr] = FUN/2(<spvK_info>, [addr], [addr]) )\n 69396 BLACKHOLE(Object [addr] = 0tT640fErehCGZtZRn6YbE:Data.IntMap.Base.Tip([addr], [addr])\n)\n 66129 BLACKHOLE(Object [addr] = 0tT640fErehCGZtZRn6YbE:Data.IntMap.Base.Nil()\n)\n 58339 BLACKHOLE(Object [addr] = ghc:HsPat.ConPatOut([addr], [addr], [addr], [addr], <ghc_TcEvidence_emptyTcEvBinds_closure>, [addr], [addr])\n)\n 55027 BLACKHOLE(Object [addr] = FUN/1(<ghc_CodeGenziPlatformziX86zu64_callerSaves_info>) )\n 53318 BLACKHOLE(Object [addr] = ghc:Var.Id([addr], [addr], [addr], [addr], [addr], [addr])\n)\n 53142 BLACKHOLE(Object [addr] = FUN/2(<sfXN_info>, [addr]) )\n 53057 BLACKHOLE(Object [addr] = FUN/2(<ghc_Lexer_zdfMonadPzuzdczgzg_info>) )\n 34197 BLACKHOLE(Object [addr] = ghc:Name.Name([addr], [addr], [addr], [addr])\n)\n }}} Is it expected to see I# here? small part of BLACKHOLE patch [1]: {{{#!diff @@ -221,7 +223,7 @@ printClosure( StgClosure *obj ) case BLACKHOLE: debugBelch("BLACKHOLE("); - printPtr((StgPtr)((StgInd*)obj)->indirectee); - debugBelch(")\n"); + printObj((StgPtr)((StgInd*)obj)->indirectee); + debugBelch(")\\n"); break; }}} -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9221#comment:38> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler