[GHC] #9221: (super!) linear slowdown of parallel builds on 40 core machine

GHC ghc-devs at haskell.org
Sun Aug 16 11:08:03 UTC 2015


#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


More information about the ghc-tickets mailing list