Определить причину высокого потребления памяти GHC без построения профиля - PullRequest
1 голос
/ 12 апреля 2019

Я слышал, что GHC работает медленно с точки зрения LOC в секунду. Итак, я создал эту программу на Haskell:

module Main where
x1 = 1
x2 = 2
x3 = 3
...
x999998 = 999998
x999999 = 999999
x1000000 = 1000000
main = putStrLn "1M LOC!"

И я даже не могу это скомпилировать! По крайней мере, я вижу, что парсер может делать 43 строки в секунду:

[1 of 1] Compiling Main             ( 1Mloc.hs, 1Mloc.o )
*** Parser [Main]:
Parser [Main]: alloc=22735369056 time=23683.420

Насколько я знаю, GHC RTS необходимо перекомпилировать с включенным профилированием, чтобы начать искать причину. Учитывая, что у меня нет профилированного GHC, есть ли шанс выяснить, что вызывает это? Я даже не могу собрать статистику, потому что ее убивают ...

Killed process 16609 (ghc) total-vm:1074093288kB, anon-rss:6804448kB ...

На самом деле, я также не могу скомпилировать 10K LOC. По крайней мере, до 1K LOC я могу видеть ужасные показатели производительности. Я понимаю, что это синтетическая программа, но что в этом плохого?

Linking 1Kloc ...
   1,383,344,416 bytes allocated in the heap
     325,164,408 bytes copied during GC
      60,849,840 bytes maximum residency (9 sample(s))
         282,960 bytes maximum slop
              58 MB total memory in use (0 MB lost due to fragmentation)

                                     Tot time (elapsed)  Avg pause  Max pause
  Gen  0       233 colls,     0 par    0.227s   0.230s     0.0010s    0.0066s
  Gen  1         9 colls,     0 par    0.149s   0.174s     0.0193s    0.0588s

  TASKS: 4 (1 bound, 3 peak workers (3 total), using -N1)

  SPARKS: 0(0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)

  INIT    time    0.000s  (  0.000s elapsed)
  MUT     time    0.522s  (  1.047s elapsed)
  GC      time    0.376s  (  0.404s elapsed)
  EXIT    time    0.000s  (  0.008s elapsed)
  Total   time    0.899s  (  1.460s elapsed)

  Alloc rate    2,647,974,824 bytes per MUT second

  Productivity  58.1% of total user, 71.7% of total elapsed
...