A recent patch increased GCC's memory consumption!

gcctest@suse.de gcctest@suse.de
Sat May 23 07:38:00 GMT 2009


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: 8801k
    Peak memory use before GGC: 1488k
    Peak memory use after GGC: 1437k
    Maximum of released memory in single GGC run: 85k
    Garbage: 218k
    Leak: 1537k
    Overhead: 187k
    GGC runs: 4
    Pre-IPA-Garbage: 210k
    Pre-IPA-Leak: 1539k
    Pre-IPA-Overhead: 186k
    Post-IPA-Garbage: 210k
    Post-IPA-Leak: 1539k
    Post-IPA-Overhead: 186k

comparing empty function compilation at -O0 -g level:
    Overall memory needed: 8825k
    Peak memory use before GGC: 1516k
    Peak memory use after GGC: 1464k
    Maximum of released memory in single GGC run: 87k
    Garbage: 219k
    Leak: 1570k
    Overhead: 192k
    GGC runs: 4
    Pre-IPA-Garbage: 210k
    Pre-IPA-Leak: 1539k
    Pre-IPA-Overhead: 186k
    Post-IPA-Garbage: 210k
    Post-IPA-Leak: 1539k
    Post-IPA-Overhead: 186k

comparing empty function compilation at -O1 level:
    Overall memory needed: 8909k
    Peak memory use before GGC: 1488k
    Peak memory use after GGC: 1437k
    Maximum of released memory in single GGC run: 87k
    Garbage: 220k
    Leak: 1537k
    Overhead: 188k
    GGC runs: 4
    Pre-IPA-Garbage: 210k
    Pre-IPA-Leak: 1540k
    Pre-IPA-Overhead: 186k
    Post-IPA-Garbage: 210k
    Post-IPA-Leak: 1540k
    Post-IPA-Overhead: 186k

comparing empty function compilation at -O2 level:
    Overall memory needed: 8929k -> 8925k
    Peak memory use before GGC: 1488k
    Peak memory use after GGC: 1437k
    Maximum of released memory in single GGC run: 92k
    Garbage: 226k
    Leak: 1537k
    Overhead: 189k
    GGC runs: 4
    Pre-IPA-Garbage: 210k
    Pre-IPA-Leak: 1540k
    Pre-IPA-Overhead: 186k
    Post-IPA-Garbage: 210k
    Post-IPA-Leak: 1540k
    Post-IPA-Overhead: 186k

comparing empty function compilation at -O3 level:
    Overall memory needed: 8933k
    Peak memory use before GGC: 1488k
    Peak memory use after GGC: 1437k
    Maximum of released memory in single GGC run: 92k
    Garbage: 226k
    Leak: 1537k
    Overhead: 189k
    GGC runs: 4
    Pre-IPA-Garbage: 210k
    Pre-IPA-Leak: 1540k
    Pre-IPA-Overhead: 186k
    Post-IPA-Garbage: 210k
    Post-IPA-Leak: 1540k
    Post-IPA-Overhead: 186k

comparing combine.c compilation at -O0 level:
  Amount of memory still referenced at the end of compilation increased from 7157k to 7173k, overall 0.22%
    Overall memory needed: 31445k
    Peak memory use before GGC: 17469k
    Peak memory use after GGC: 17020k
    Maximum of released memory in single GGC run: 1910k
    Garbage: 37904k
    Leak: 7157k -> 7173k
    Overhead: 5493k -> 5493k
    GGC runs: 331
    Pre-IPA-Garbage: 12540k
    Pre-IPA-Leak: 18404k
    Pre-IPA-Overhead: 2506k
    Post-IPA-Garbage: 12540k
    Post-IPA-Leak: 18404k
    Post-IPA-Overhead: 2506k

comparing combine.c compilation at -O0 -g level:
    Overall memory needed: 33369k
    Peak memory use before GGC: 19377k
    Peak memory use after GGC: 18859k
    Maximum of released memory in single GGC run: 1920k
    Garbage: 38119k
    Leak: 10443k
    Overhead: 6305k -> 6305k
    GGC runs: 315
    Pre-IPA-Garbage: 12559k
    Pre-IPA-Leak: 20652k
    Pre-IPA-Overhead: 2988k
    Post-IPA-Garbage: 12559k
    Post-IPA-Leak: 20652k
    Post-IPA-Overhead: 2988k

comparing combine.c compilation at -O1 level:
    Overall memory needed: 32021k -> 31913k
    Peak memory use before GGC: 16476k
    Peak memory use after GGC: 16310k
    Maximum of released memory in single GGC run: 1378k
    Garbage: 45345k
    Leak: 7158k
    Overhead: 6391k -> 6391k
    GGC runs: 387
    Pre-IPA-Garbage: 12959k
    Pre-IPA-Leak: 17622k
    Pre-IPA-Overhead: 2502k
    Post-IPA-Garbage: 12959k
    Post-IPA-Leak: 17622k
    Post-IPA-Overhead: 2502k

comparing combine.c compilation at -O2 level:
    Overall memory needed: 32949k -> 32809k
    Peak memory use before GGC: 16539k
    Peak memory use after GGC: 16375k
    Maximum of released memory in single GGC run: 1488k
    Garbage: 56220k -> 56220k
    Leak: 7191k
    Overhead: 8012k -> 8012k
    GGC runs: 441
    Pre-IPA-Garbage: 13012k
    Pre-IPA-Leak: 17645k
    Pre-IPA-Overhead: 2508k
    Post-IPA-Garbage: 13012k
    Post-IPA-Leak: 17645k
    Post-IPA-Overhead: 2508k

comparing combine.c compilation at -O3 level:
    Overall memory needed: 33181k
    Peak memory use before GGC: 16507k
    Peak memory use after GGC: 16341k
    Maximum of released memory in single GGC run: 1671k
    Garbage: 65037k
    Leak: 7213k
    Overhead: 9285k -> 9285k
    GGC runs: 471
    Pre-IPA-Garbage: 13012k
    Pre-IPA-Leak: 17645k
    Pre-IPA-Overhead: 2508k
    Post-IPA-Garbage: 13012k
    Post-IPA-Leak: 17645k
    Post-IPA-Overhead: 2508k

comparing insn-attrtab.c compilation at -O0 level:
    Overall memory needed: 152477k -> 152505k
    Peak memory use before GGC: 65254k
    Peak memory use after GGC: 52818k
    Maximum of released memory in single GGC run: 26250k
    Garbage: 128569k
    Leak: 9588k
    Overhead: 16692k
    GGC runs: 258
    Pre-IPA-Garbage: 40782k
    Pre-IPA-Leak: 51015k
    Pre-IPA-Overhead: 7761k
    Post-IPA-Garbage: 40782k
    Post-IPA-Leak: 51015k
    Post-IPA-Overhead: 7761k

comparing insn-attrtab.c compilation at -O0 -g level:
    Overall memory needed: 153849k -> 153817k
    Peak memory use before GGC: 66520k
    Peak memory use after GGC: 54081k
    Maximum of released memory in single GGC run: 26251k
    Garbage: 128907k
    Leak: 11220k
    Overhead: 17145k
    GGC runs: 252
    Pre-IPA-Garbage: 40791k
    Pre-IPA-Leak: 52540k
    Pre-IPA-Overhead: 8092k
    Post-IPA-Garbage: 40791k
    Post-IPA-Leak: 52540k
    Post-IPA-Overhead: 8092k

comparing insn-attrtab.c compilation at -O1 level:
    Overall memory needed: 154685k
    Peak memory use before GGC: 54960k
    Peak memory use after GGC: 44890k
    Maximum of released memory in single GGC run: 17233k
    Garbage: 180928k
    Leak: 9179k
    Overhead: 23407k
    GGC runs: 297
    Pre-IPA-Garbage: 45067k
    Pre-IPA-Leak: 45086k
    Pre-IPA-Overhead: 7587k
    Post-IPA-Garbage: 45067k
    Post-IPA-Leak: 45086k
    Post-IPA-Overhead: 7587k

comparing insn-attrtab.c compilation at -O2 level:
    Overall memory needed: 202257k -> 202229k
    Peak memory use before GGC: 54409k
    Peak memory use after GGC: 44641k
    Maximum of released memory in single GGC run: 18696k
    Garbage: 211478k
    Leak: 9193k
    Overhead: 29279k -> 29279k
    GGC runs: 330
    Pre-IPA-Garbage: 45129k
    Pre-IPA-Leak: 45093k
    Pre-IPA-Overhead: 7592k
    Post-IPA-Garbage: 45129k
    Post-IPA-Leak: 45093k
    Post-IPA-Overhead: 7592k

comparing insn-attrtab.c compilation at -O3 level:
    Overall memory needed: 202273k -> 202237k
    Peak memory use before GGC: 54409k
    Peak memory use after GGC: 44641k -> 44637k
    Maximum of released memory in single GGC run: 18695k
    Garbage: 212699k
    Leak: 9200k
    Overhead: 29671k -> 29671k
    GGC runs: 338
    Pre-IPA-Garbage: 45129k
    Pre-IPA-Leak: 45093k
    Pre-IPA-Overhead: 7592k
    Post-IPA-Garbage: 45129k
    Post-IPA-Leak: 45093k
    Post-IPA-Overhead: 7592k

comparing Gerald's testcase PR8361 compilation at -O0 level:
    Overall memory needed: 146217k -> 146233k
    Peak memory use before GGC: 81786k
    Peak memory use after GGC: 80976k
    Maximum of released memory in single GGC run: 13629k
    Garbage: 193642k
    Leak: 55468k
    Overhead: 28789k
    GGC runs: 439
    Pre-IPA-Garbage: 105771k
    Pre-IPA-Leak: 84581k
    Pre-IPA-Overhead: 15541k
    Post-IPA-Garbage: 105771k
    Post-IPA-Leak: 84581k
    Post-IPA-Overhead: 15541k

comparing Gerald's testcase PR8361 compilation at -O0 -g level:
    Overall memory needed: 164009k -> 164021k
    Peak memory use before GGC: 95912k
    Peak memory use after GGC: 94960k
    Maximum of released memory in single GGC run: 13880k
    Garbage: 198964k -> 198964k
    Leak: 82559k
    Overhead: 35351k
    GGC runs: 410
    Pre-IPA-Garbage: 106356k
    Pre-IPA-Leak: 101101k
    Pre-IPA-Overhead: 19047k
    Post-IPA-Garbage: 106356k
    Post-IPA-Leak: 101101k
    Post-IPA-Overhead: 19047k

comparing Gerald's testcase PR8361 compilation at -O1 level:
    Overall memory needed: 107481k
    Peak memory use before GGC: 81741k
    Peak memory use after GGC: 80929k
    Maximum of released memory in single GGC run: 13498k
    Garbage: 255384k -> 255383k
    Leak: 52267k
    Overhead: 30243k -> 30243k
    GGC runs: 510
    Pre-IPA-Garbage: 145188k
    Pre-IPA-Leak: 85972k
    Pre-IPA-Overhead: 18513k
    Post-IPA-Garbage: 145188k
    Post-IPA-Leak: 85972k
    Post-IPA-Overhead: 18513k

comparing Gerald's testcase PR8361 compilation at -O2 level:
    Overall memory needed: 106861k -> 106921k
    Peak memory use before GGC: 81660k
    Peak memory use after GGC: 80084k
    Maximum of released memory in single GGC run: 13522k
    Garbage: 293517k -> 293517k
    Leak: 52342k
    Overhead: 35245k
    GGC runs: 557
    Pre-IPA-Garbage: 148349k
    Pre-IPA-Leak: 85063k
    Pre-IPA-Overhead: 18724k
    Post-IPA-Garbage: 148349k
    Post-IPA-Leak: 85063k
    Post-IPA-Overhead: 18724k

comparing Gerald's testcase PR8361 compilation at -O3 level:
    Overall memory needed: 107649k -> 107605k
    Peak memory use before GGC: 82121k
    Peak memory use after GGC: 80200k
    Maximum of released memory in single GGC run: 13522k
    Garbage: 312574k -> 312567k
    Leak: 52351k
    Overhead: 37762k -> 37761k
    GGC runs: 580
    Pre-IPA-Garbage: 148349k
    Pre-IPA-Leak: 85068k
    Pre-IPA-Overhead: 18725k
    Post-IPA-Garbage: 148349k
    Post-IPA-Leak: 85068k
    Post-IPA-Overhead: 18725k

comparing PR rtl-optimization/28071 testcase compilation at -O0 level:
    Overall memory needed: 358685k -> 358701k
    Peak memory use before GGC: 78173k
    Peak memory use after GGC: 49107k
    Maximum of released memory in single GGC run: 37057k
    Garbage: 140190k
    Leak: 7711k
    Overhead: 24961k
    GGC runs: 86
    Pre-IPA-Garbage: 12171k
    Pre-IPA-Leak: 18627k
    Pre-IPA-Overhead: 2403k
    Post-IPA-Garbage: 12171k
    Post-IPA-Leak: 18627k
    Post-IPA-Overhead: 2403k

comparing PR rtl-optimization/28071 testcase compilation at -O0 -g level:
    Overall memory needed: 359521k
    Peak memory use before GGC: 78856k
    Peak memory use after GGC: 49791k
    Maximum of released memory in single GGC run: 37041k
    Garbage: 140255k
    Leak: 9707k
    Overhead: 25529k
    GGC runs: 94
    Pre-IPA-Garbage: 12173k
    Pre-IPA-Leak: 18873k
    Pre-IPA-Overhead: 2457k
    Post-IPA-Garbage: 12173k
    Post-IPA-Leak: 18873k
    Post-IPA-Overhead: 2457k

comparing PR rtl-optimization/28071 testcase compilation at -O1 level:
    Overall memory needed: 208513k -> 208525k
    Peak memory use before GGC: 74131k
    Peak memory use after GGC: 69415k
    Maximum of released memory in single GGC run: 35390k
    Garbage: 216024k
    Leak: 9295k
    Overhead: 32789k
    GGC runs: 95
    Pre-IPA-Garbage: 39335k
    Pre-IPA-Leak: 63718k
    Pre-IPA-Overhead: 6988k
    Post-IPA-Garbage: 39335k
    Post-IPA-Leak: 63718k
    Post-IPA-Overhead: 6988k

comparing PR rtl-optimization/28071 testcase compilation at -O2 level:
    Overall memory needed: 533597k -> 529441k
    Peak memory use before GGC: 74132k
    Peak memory use after GGC: 69415k
    Maximum of released memory in single GGC run: 37541k
    Garbage: 255773k
    Leak: 9045k
    Overhead: 38347k
    GGC runs: 106
    Pre-IPA-Garbage: 89677k
    Pre-IPA-Leak: 80311k
    Pre-IPA-Overhead: 11128k
    Post-IPA-Garbage: 89677k
    Post-IPA-Leak: 80311k
    Post-IPA-Overhead: 11128k

comparing PR rtl-optimization/28071 testcase compilation at -O3 -fno-tree-pre -fno-tree-fre level:
    Overall memory needed: 1234953k -> 1234997k
    Peak memory use before GGC: 134702k
    Peak memory use after GGC: 126430k
    Maximum of released memory in single GGC run: 54316k
    Garbage: 340166k
    Leak: 10355k
    Overhead: 43440k
    GGC runs: 106
    Pre-IPA-Garbage: 89677k
    Pre-IPA-Leak: 80311k
    Pre-IPA-Overhead: 11128k
    Post-IPA-Garbage: 89677k
    Post-IPA-Leak: 80311k
    Post-IPA-Overhead: 11128k

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