A recent patch increased GCC's memory consumption!

gcctest@suse.de gcctest@suse.de
Thu May 24 07:44:00 GMT 2007


Hi,

I am a friendly script caring about memory consumption in GCC.  Please
contact jh@suse.cz if something is going wrong.

Comparing memory consumption on compilation of combine.i, insn-attrtab.i,
and generate-3.4.ii I got:


comparing empty function compilation at -O0 level:
    Overall memory needed: 7493k
    Peak memory use before GGC: 2340k
    Peak memory use after GGC: 2012k
    Maximum of released memory in single GGC run: 328k
    Garbage: 481k
    Leak: 2390k
    Overhead: 519k
    GGC runs: 3

comparing empty function compilation at -O0 -g level:
    Overall memory needed: 7509k
    Peak memory use before GGC: 2367k
    Peak memory use after GGC: 2040k
    Maximum of released memory in single GGC run: 327k
    Garbage: 483k
    Leak: 2423k
    Overhead: 523k
    GGC runs: 3

comparing empty function compilation at -O1 level:
    Overall memory needed: 7545k
    Peak memory use before GGC: 2340k
    Peak memory use after GGC: 2012k
    Maximum of released memory in single GGC run: 328k
    Garbage: 486k
    Leak: 2393k
    Overhead: 519k
    GGC runs: 3

comparing empty function compilation at -O2 level:
    Overall memory needed: 7561k
    Peak memory use before GGC: 2340k
    Peak memory use after GGC: 2012k
    Maximum of released memory in single GGC run: 328k
    Garbage: 490k
    Leak: 2393k
    Overhead: 520k
    GGC runs: 4

comparing empty function compilation at -O3 level:
    Overall memory needed: 7561k
    Peak memory use before GGC: 2340k
    Peak memory use after GGC: 2012k
    Maximum of released memory in single GGC run: 328k
    Garbage: 490k
    Leak: 2393k
    Overhead: 520k
    GGC runs: 4

comparing combine.c compilation at -O0 level:
    Overall memory needed: 22461k
    Peak memory use before GGC: 9035k
    Peak memory use after GGC: 8246k
    Maximum of released memory in single GGC run: 1595k
    Garbage: 38371k
    Leak: 7016k
    Overhead: 4988k
    GGC runs: 280

comparing combine.c compilation at -O0 -g level:
    Overall memory needed: 24389k -> 24393k
    Peak memory use before GGC: 10770k
    Peak memory use after GGC: 10005k
    Maximum of released memory in single GGC run: 1891k
    Garbage: 38740k
    Leak: 9909k
    Overhead: 5694k
    GGC runs: 271

comparing combine.c compilation at -O1 level:
    Overall memory needed: 35353k -> 35349k
    Peak memory use before GGC: 17850k
    Peak memory use after GGC: 17670k
    Maximum of released memory in single GGC run: 1346k
    Garbage: 54066k -> 54065k
    Leak: 7068k
    Overhead: 6254k -> 6253k
    GGC runs: 363

comparing combine.c compilation at -O2 level:
    Overall memory needed: 37225k -> 37221k
    Peak memory use before GGC: 17896k -> 17897k
    Peak memory use after GGC: 17684k
    Maximum of released memory in single GGC run: 1363k -> 1365k
    Garbage: 71142k -> 71145k
    Leak: 7192k -> 7196k
    Overhead: 8413k -> 8413k
    GGC runs: 422

comparing combine.c compilation at -O3 level:
  Amount of memory still referenced at the end of compilation increased from 7290k to 7302k, overall 0.16%
    Overall memory needed: 43653k
    Peak memory use before GGC: 18125k
    Peak memory use after GGC: 17888k
    Maximum of released memory in single GGC run: 3637k
    Garbage: 97091k -> 97102k
    Leak: 7290k -> 7302k
    Overhead: 11743k -> 11746k
    GGC runs: 456

comparing insn-attrtab.c compilation at -O0 level:
    Overall memory needed: 142057k -> 142061k
    Peak memory use before GGC: 59801k
    Peak memory use after GGC: 32807k
    Maximum of released memory in single GGC run: 34625k
    Garbage: 131850k
    Leak: 9852k
    Overhead: 14381k
    GGC runs: 220

comparing insn-attrtab.c compilation at -O0 -g level:
    Overall memory needed: 143301k -> 143297k
    Peak memory use before GGC: 60963k
    Peak memory use after GGC: 33968k
    Maximum of released memory in single GGC run: 34626k
    Garbage: 132068k
    Leak: 11561k
    Overhead: 14778k
    GGC runs: 218

comparing insn-attrtab.c compilation at -O1 level:
    Overall memory needed: 153065k -> 153057k
    Peak memory use before GGC: 62286k
    Peak memory use after GGC: 59785k
    Maximum of released memory in single GGC run: 23609k -> 23630k
    Garbage: 232076k -> 232080k
    Leak: 9740k
    Overhead: 26102k -> 26103k
    GGC runs: 250

comparing insn-attrtab.c compilation at -O2 level:
    Overall memory needed: 166917k -> 166989k
    Peak memory use before GGC: 62710k
    Peak memory use after GGC: 60106k
    Maximum of released memory in single GGC run: 21321k
    Garbage: 265881k -> 265878k
    Leak: 9731k
    Overhead: 31484k -> 31484k
    GGC runs: 273

comparing insn-attrtab.c compilation at -O3 level:
    Overall memory needed: 179913k -> 179977k
    Peak memory use before GGC: 75342k
    Peak memory use after GGC: 70912k
    Maximum of released memory in single GGC run: 22939k
    Garbage: 295050k -> 295048k
    Leak: 9735k
    Overhead: 33204k -> 33204k
    GGC runs: 275

comparing Gerald's testcase PR8361 compilation at -O0 level:
    Overall memory needed: 153851k
    Peak memory use before GGC: 89198k
    Peak memory use after GGC: 88315k
    Maximum of released memory in single GGC run: 18130k
    Garbage: 208681k
    Leak: 51201k
    Overhead: 24222k
    GGC runs: 410

comparing Gerald's testcase PR8361 compilation at -O0 -g level:
    Overall memory needed: 173855k
    Peak memory use before GGC: 101755k
    Peak memory use after GGC: 100747k
    Maximum of released memory in single GGC run: 18434k
    Garbage: 214360k
    Leak: 74516k
    Overhead: 30118k
    GGC runs: 382

comparing Gerald's testcase PR8361 compilation at -O1 level:
    Overall memory needed: 150500k -> 150492k
    Peak memory use before GGC: 100961k -> 100963k
    Peak memory use after GGC: 99962k
    Maximum of released memory in single GGC run: 17471k
    Garbage: 346908k -> 346929k
    Leak: 51790k -> 51782k
    Overhead: 31501k -> 31500k
    GGC runs: 534

comparing Gerald's testcase PR8361 compilation at -O2 level:
    Overall memory needed: 158132k -> 158128k
    Peak memory use before GGC: 101411k
    Peak memory use after GGC: 100401k
    Maximum of released memory in single GGC run: 17468k
    Garbage: 394711k -> 394687k
    Leak: 52907k -> 52907k
    Overhead: 37071k -> 37068k
    GGC runs: 581

comparing Gerald's testcase PR8361 compilation at -O3 level:
    Overall memory needed: 160460k -> 160456k
    Peak memory use before GGC: 103024k
    Peak memory use after GGC: 101989k
    Maximum of released memory in single GGC run: 17871k
    Garbage: 429249k -> 429229k
    Leak: 53215k -> 53216k
    Overhead: 39706k -> 39704k
    GGC runs: 604

comparing PR rtl-optimization/28071 testcase compilation at -O0 level:
    Overall memory needed: 344493k
    Peak memory use before GGC: 80326k
    Peak memory use after GGC: 58064k
    Maximum of released memory in single GGC run: 43620k
    Garbage: 144989k
    Leak: 7547k
    Overhead: 24699k
    GGC runs: 74

comparing PR rtl-optimization/28071 testcase compilation at -O0 -g level:
    Overall memory needed: 345297k
    Peak memory use before GGC: 80972k
    Peak memory use after GGC: 58711k
    Maximum of released memory in single GGC run: 43609k
    Garbage: 145094k
    Leak: 9315k
    Overhead: 25195k
    GGC runs: 82

comparing PR rtl-optimization/28071 testcase compilation at -O1 level:
    Overall memory needed: 306441k -> 306253k
    Peak memory use before GGC: 83376k
    Peak memory use after GGC: 74913k
    Maximum of released memory in single GGC run: 39402k
    Garbage: 232499k
    Leak: 20982k
    Overhead: 31835k
    GGC runs: 81

comparing PR rtl-optimization/28071 testcase compilation at -O2 level:
    Overall memory needed: 317497k -> 316997k
    Peak memory use before GGC: 79899k
    Peak memory use after GGC: 74913k
    Maximum of released memory in single GGC run: 33013k
    Garbage: 240414k -> 240419k
    Leak: 21072k -> 21061k
    Overhead: 34078k -> 34077k
    GGC runs: 92

comparing PR rtl-optimization/28071 testcase compilation at -O3 -fno-tree-pre -fno-tree-fre level:
    Overall memory needed: 1037209k -> 1037957k
    Peak memory use before GGC: 190671k
    Peak memory use after GGC: 178187k
    Maximum of released memory in single GGC run: 80830k
    Garbage: 369148k -> 369146k
    Leak: 46439k -> 46440k
    Overhead: 46369k -> 46369k
    GGC runs: 74

Head of the ChangeLog is:



The results can be reproduced by building a compiler with

--enable-gather-detailed-mem-stats targetting x86-64

and compiling preprocessed combine.c or testcase from PR8632 with:

-fmem-report --param=ggc-min-heapsize=1024 --param=ggc-min-expand=1 -Ox -Q

The memory consumption summary appears in the dump after detailed listing
of the places they are allocated in.  Peak memory consumption is actually
computed by looking for maximal value in {GC XXXX -> YYYY} report.

Your testing script.



More information about the Gcc-regression mailing list