Opened 22 months ago

Last modified 2 weeks ago

#8990 new bug

Performance tests behave differently depending on presence of .hi file (even with -fforce-recomp)

Reported by: ezyang Owned by:
Priority: normal Milestone:
Component: Test Suite Version: 7.9
Keywords: newcomer Cc:
Operating System: Unknown/Multiple Architecture: Unknown/Multiple
Type of failure: None/Unknown Test Case:
Blocked By: Blocking:
Related Tickets: Differential Rev(s):
Wiki Page:

Description

Example:

[ezyang@hs01 compiler]$ cat T6048.comp.stats  
/home/hs01/ezyang/ghc-compalloc/inplace/lib/bin/ghc-stage2 -B/home/hs01/ezyang/ghc-compalloc/inplace/lib -fforce-recomp -dno-debug-output -no-user-package-db -rtsopts -fno-ghci-history -c T6048.hs -O -fasm +RTS -V0 -tT6048.comp.stats --machine-readable 
 [("bytes allocated", "119871672")
 ,("num_GCs", "100")
 ,("average_bytes_used", "4388904")
 ,("max_bytes_used", "12539576")
 ,("num_byte_usage_samples", "7")
 ,("peak_megabytes_allocated", "27")
 ,("init_cpu_seconds", "0.00")
 ,("init_wall_seconds", "0.00")
 ,("mutator_cpu_seconds", "0.09")
 ,("mutator_wall_seconds", "0.10")
 ,("GC_cpu_seconds", "0.15")
 ,("GC_wall_seconds", "0.15")
 ]
[ezyang@hs01 compiler]$ rm T6048.hi
[ezyang@hs01 compiler]$ '/home/hs01/ezyang/ghc-compalloc/inplace/bin/ghc-stage2' -fforce-recomp -dno-debug-output -no-user-package-db -rtsopts -fno-ghci-history -c T6048.hs -O -fasm  +RTS -V0 -tT6048.comp.stats --machine-readable -RTS
[ezyang@hs01 compiler]$ cat T6048.comp.stats
/home/hs01/ezyang/ghc-compalloc/inplace/lib/bin/ghc-stage2 -B/home/hs01/ezyang/ghc-compalloc/inplace/lib -fforce-recomp -dno-debug-output -no-user-package-db -rtsopts -fno-ghci-history -c T6048.hs -O -fasm +RTS -V0 -tT6048.comp.stats --machine-readable 
 [("bytes allocated", "121022912")
 ,("num_GCs", "100")
 ,("average_bytes_used", "4022069")
 ,("max_bytes_used", "11224944")
 ,("num_byte_usage_samples", "7")
 ,("peak_megabytes_allocated", "25")
 ,("init_cpu_seconds", "0.00")
 ,("init_wall_seconds", "0.00")
 ,("mutator_cpu_seconds", "0.09")
 ,("mutator_wall_seconds", "0.11")
 ,("GC_cpu_seconds", "0.15")
 ,("GC_wall_seconds", "0.14")
 ]

It's a slight but present difference: I noticed because one of the perf tests was failing on an initial run of the test suite, but passing when I re-ran it.

There are two possible bugs here. One is that our implementation of -fforce-recomp is buggy and we shouldn't be reading in the hi file at all if -fforce-recomp is on; the other is that we should always clean up interface files before running one of these perf tests.

Change History (7)

comment:1 Changed 22 months ago by simonpj

Yes, I expect that we are reading the old interface file even if -fforce-recomp is on. It's a bit of a corner case, but I'd be happy to see it fixed if someone would like to construct a patch to stop that happening, and it's not too painful in code terms.

Simon

comment:2 Changed 11 months ago by thomie

  • Keywords newcomer added

Look in the compiler/main directory. Grep for ForceRecomp. Try to figure out what's going on (will take you a while).

Tickets #4114 and #2258 are related.

Last edited 8 months ago by thomie (previous) (diff)

comment:3 Changed 5 months ago by przembot

  • Owner set to przembot

comment:4 Changed 5 months ago by ezyang

I found another case recently where this matters: whether or not an interface file is loaded can affect the assignment of uniques, which in turn can cause rules to fire in a different order. (in my case, it was T7837 with the patchset I've been developing for #10871).

comment:5 Changed 5 months ago by thomie

  • Differential Rev(s) set to Phab:D1267
  • Milestone set to 8.0.1
  • Status changed from new to patch

comment:6 Changed 3 months ago by ezyang

  • Differential Rev(s) Phab:D1267 deleted
  • Owner przembot deleted
  • Status changed from patch to new

On the Phabricator CR, Simon Marlow pointed out that pretending the interface file doesn't exist when forcing recompilation can result in gratuitous changes to the timestamp on the interface file. So we can't take this approach; let's just remove hi files before perf tests.

comment:7 Changed 2 weeks ago by thomie

  • Milestone 8.0.1 deleted
Note: See TracTickets for help on using tickets.