Skip to content

Performance regression in 7.4.1 compared to 6.12.3

Unless I'm doing something really stupid, there seems to be a significant slowdown for some programs between versions 6 and 7.

The bottom line is that the attached program runs in 6.79 sec. with 7.4.1 versus 4.72 sec. in 6.12.3. The script is meant to reproduce the problem in any x86 or x86_64 machine running linux.

The test machine was an Intel Xeon E7340 2.40GHz, 4x4 cores, GNU/Linux 2.6.32-5 (x86_64), but it can be reproduced in other machines too (i386) with similar results.

Checking GHC versions
The Glorious Glasgow Haskell Compilation System, version 6.12.3
The Glorious Glasgow Haskell Compilation System, version 7.4.1

Compiling with GHC 6.12.3
/var/tmp/nickie/ghc-bench/usr/bin/ghc-6.12.3 -o ntak6 --make ntak.hs -O2 -optc-O3
[1 of 1] Compiling Main             ( ntak.hs, ntak.o )
Linking ntak6 ...

Compiling with GHC 7.4.1
/var/tmp/nickie/ghc-bench/usr/bin/ghc-7.4.1 -o ntak7 --make ntak.hs -O2 -optc-O3 -rtsopts=all
[1 of 1] Compiling Main             ( ntak.hs, ntak.o )
Linking ntak7 ...

Running with GHC 6.12.3
./ntak6 +RTS -sstderr 
9, hs time = 4.748408 sec
   4,738,681,488 bytes allocated in the heap
      11,586,848 bytes copied during GC
          33,456 bytes maximum residency (1 sample(s))
         321,592 bytes maximum slop
               2 MB total memory in use (0 MB lost due to fragmentation)

  Generation 0:  9038 collections,     0 parallel,  0.06s,  0.07s elapsed
  Generation 1:     1 collections,     0 parallel,  0.00s,  0.00s elapsed

  INIT  time    0.00s  (  0.00s elapsed)
  MUT   time    4.66s  (  4.68s elapsed)
  GC    time    0.06s  (  0.07s elapsed)
  EXIT  time    0.00s  (  0.00s elapsed)
  Total time    4.73s  (  4.75s elapsed)

  %GC time       1.3%  (1.5% elapsed)

  Alloc rate    1,015,078,645 bytes per MUT second

  Productivity  98.6% of total user, 98.2% of total elapsed

4.72 user 0.02 system 0:04.75 elapsed

Running with GHC 7.4.1
9, hs time = 6.82757 sec
   5,529,772,976 bytes allocated in the heap
      13,357,408 bytes copied during GC
          62,904 bytes maximum residency (2 sample(s))
          23,080 bytes maximum slop
               2 MB total memory in use (0 MB lost due to fragmentation)

                                    Tot time (elapsed)  Avg pause  Max pause
  Gen  0     10583 colls,     0 par    0.07s    0.08s     0.0000s    0.0000s
  Gen  1         2 colls,     0 par    0.00s    0.00s     0.0002s    0.0002s

  INIT    time    0.00s  (  0.00s elapsed)
  MUT     time    6.72s  (  6.75s elapsed)
  GC      time    0.07s  (  0.08s elapsed)
  EXIT    time    0.00s  (  0.00s elapsed)
  Total   time    6.79s  (  6.83s elapsed)

  %GC     time       1.1%  (1.2% elapsed)

  Alloc rate    822,831,578 bytes per MUT second

  Productivity  98.9% of total user, 98.4% of total elapsed

6.79 user 0.04 system 0:06.82 elapsed
Trac metadata
Trac field Value
Version 7.4.1
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information