This is the mail archive of the gcc-regression@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

A recent patch increased GCC's memory consumption!


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
    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: 8925k -> 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: 33401k
    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
    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: 31953k -> 32033k
    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: 32913k -> 32925k
    Peak memory use before GGC: 16539k
    Peak memory use after GGC: 16375k
    Maximum of released memory in single GGC run: 1488k
    Garbage: 56220k
    Leak: 7191k
    Overhead: 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: 33337k -> 33185k
    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: 152545k -> 152501k
    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: 44886k -> 44890k
    Maximum of released memory in single GGC run: 17233k
    Garbage: 180928k
    Leak: 9179k
    Overhead: 23407k -> 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: 202225k
    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
    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: 202237k -> 202017k
    Peak memory use before GGC: 54409k
    Peak memory use after GGC: 44641k
    Maximum of released memory in single GGC run: 18695k
    Garbage: 212699k
    Leak: 9200k
    Overhead: 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: 146225k -> 146217k
    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: 164057k
    Peak memory use before GGC: 95912k
    Peak memory use after GGC: 94960k
    Maximum of released memory in single GGC run: 13880k
    Garbage: 198964k -> 198965k
    Leak: 82559k
    Overhead: 35352k -> 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: 107453k -> 107473k
    Peak memory use before GGC: 81741k
    Peak memory use after GGC: 80929k
    Maximum of released memory in single GGC run: 13498k
    Garbage: 255383k
    Leak: 52267k
    Overhead: 30243k -> 30243k
    GGC runs: 510
    Pre-IPA-Garbage: 145188k
    Pre-IPA-Leak: 85972k
    Pre-IPA-Overhead: 18513k -> 18513k
    Post-IPA-Garbage: 145188k
    Post-IPA-Leak: 85972k
    Post-IPA-Overhead: 18513k -> 18513k

comparing Gerald's testcase PR8361 compilation at -O2 level:
    Overall memory needed: 106869k -> 106833k
    Peak memory use before GGC: 81659k -> 81660k
    Peak memory use after GGC: 80084k
    Maximum of released memory in single GGC run: 13522k
    Garbage: 293516k -> 293517k
    Leak: 52342k
    Overhead: 35245k -> 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: 107609k -> 107513k
    Peak memory use before GGC: 82121k
    Peak memory use after GGC: 80200k
    Maximum of released memory in single GGC run: 13522k
    Garbage: 312561k -> 312567k
    Leak: 52351k
    Overhead: 37760k -> 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: 358769k -> 358781k
    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: 359517k -> 359577k
    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: 208753k -> 208637k
    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: 533573k -> 531229k
    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: 1234049k -> 1234769k
    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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]