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: 86k
    Garbage: 219k
    Leak: 1537k
    Overhead: 187k
    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 -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: 220k
    Leak: 1569k
    Overhead: 192k
    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 -O1 level:
    Overall memory needed: 8929k -> 8801k
    Peak memory use before GGC: 1488k
    Peak memory use after GGC: 1437k
    Maximum of released memory in single GGC run: 90k
    Garbage: 224k
    Leak: 1537k
    Overhead: 188k
    GGC runs: 4
    Pre-IPA-Garbage: 212k
    Pre-IPA-Leak: 1540k
    Pre-IPA-Overhead: 186k
    Post-IPA-Garbage: 212k
    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: 88k
    Garbage: 229k
    Leak: 1537k
    Overhead: 189k
    GGC runs: 5
    Pre-IPA-Garbage: 212k
    Pre-IPA-Leak: 1540k
    Pre-IPA-Overhead: 186k
    Post-IPA-Garbage: 212k
    Post-IPA-Leak: 1540k
    Post-IPA-Overhead: 186k

comparing empty function compilation at -O3 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: 88k
    Garbage: 229k
    Leak: 1537k
    Overhead: 189k
    GGC runs: 5
    Pre-IPA-Garbage: 212k
    Pre-IPA-Leak: 1540k
    Pre-IPA-Overhead: 186k
    Post-IPA-Garbage: 212k
    Post-IPA-Leak: 1540k
    Post-IPA-Overhead: 186k

comparing combine.c compilation at -O0 level:
    Overall memory needed: 31453k
    Peak memory use before GGC: 17484k
    Peak memory use after GGC: 17031k
    Maximum of released memory in single GGC run: 1913k
    Garbage: 37964k
    Leak: 7161k
    Overhead: 5496k
    GGC runs: 333
    Pre-IPA-Garbage: 12532k
    Pre-IPA-Leak: 18412k
    Pre-IPA-Overhead: 2504k
    Post-IPA-Garbage: 12532k
    Post-IPA-Leak: 18412k
    Post-IPA-Overhead: 2504k

comparing combine.c compilation at -O0 -g level:
    Overall memory needed: 33369k
    Peak memory use before GGC: 19390k
    Peak memory use after GGC: 18870k
    Maximum of released memory in single GGC run: 1923k
    Garbage: 38166k
    Leak: 10429k
    Overhead: 6308k -> 6308k
    GGC runs: 315
    Pre-IPA-Garbage: 12551k
    Pre-IPA-Leak: 20661k
    Pre-IPA-Overhead: 2986k
    Post-IPA-Garbage: 12551k
    Post-IPA-Leak: 20661k
    Post-IPA-Overhead: 2986k

comparing combine.c compilation at -O1 level:
  Amount of memory still referenced at the end of compilation increased from 7156k to 7168k, overall 0.17%
    Overall memory needed: 32097k -> 32081k
    Peak memory use before GGC: 16554k
    Peak memory use after GGC: 16381k
    Maximum of released memory in single GGC run: 1379k
    Garbage: 46007k
    Leak: 7156k -> 7168k
    Overhead: 6458k -> 6458k
    GGC runs: 388
    Pre-IPA-Garbage: 13407k
    Pre-IPA-Leak: 17703k
    Pre-IPA-Overhead: 2552k
    Post-IPA-Garbage: 13407k
    Post-IPA-Leak: 17703k
    Post-IPA-Overhead: 2552k

comparing combine.c compilation at -O2 level:
    Overall memory needed: 33173k -> 32997k
    Peak memory use before GGC: 16618k
    Peak memory use after GGC: 16448k
    Maximum of released memory in single GGC run: 1491k
    Garbage: 56639k -> 56639k
    Leak: 7217k
    Overhead: 8100k -> 8100k
    GGC runs: 443
    Pre-IPA-Garbage: 13436k
    Pre-IPA-Leak: 17725k
    Pre-IPA-Overhead: 2555k
    Post-IPA-Garbage: 13436k
    Post-IPA-Leak: 17725k
    Post-IPA-Overhead: 2555k

comparing combine.c compilation at -O3 level:
    Overall memory needed: 37249k -> 37153k
    Peak memory use before GGC: 16718k
    Peak memory use after GGC: 16552k
    Maximum of released memory in single GGC run: 1683k
    Garbage: 80806k -> 80811k
    Leak: 7278k
    Overhead: 11089k -> 11090k
    GGC runs: 529 -> 528
    Pre-IPA-Garbage: 13436k
    Pre-IPA-Leak: 17760k
    Pre-IPA-Overhead: 2555k
    Post-IPA-Garbage: 13436k
    Post-IPA-Leak: 17760k
    Post-IPA-Overhead: 2555k

comparing insn-attrtab.c compilation at -O0 level:
    Overall memory needed: 152501k -> 152505k
    Peak memory use before GGC: 65256k
    Peak memory use after GGC: 52819k
    Maximum of released memory in single GGC run: 26251k
    Garbage: 128610k
    Leak: 9591k
    Overhead: 16694k
    GGC runs: 258
    Pre-IPA-Garbage: 40783k
    Pre-IPA-Leak: 51014k
    Pre-IPA-Overhead: 7761k
    Post-IPA-Garbage: 40783k
    Post-IPA-Leak: 51014k
    Post-IPA-Overhead: 7761k

comparing insn-attrtab.c compilation at -O0 -g level:
    Overall memory needed: 153825k
    Peak memory use before GGC: 66521k
    Peak memory use after GGC: 54081k
    Maximum of released memory in single GGC run: 26252k
    Garbage: 128933k
    Leak: 11222k
    Overhead: 17147k
    GGC runs: 252
    Pre-IPA-Garbage: 40792k
    Pre-IPA-Leak: 52539k
    Pre-IPA-Overhead: 8091k
    Post-IPA-Garbage: 40792k
    Post-IPA-Leak: 52539k
    Post-IPA-Overhead: 8091k

comparing insn-attrtab.c compilation at -O1 level:
    Overall memory needed: 154557k -> 154425k
    Peak memory use before GGC: 54974k
    Peak memory use after GGC: 44904k
    Maximum of released memory in single GGC run: 17234k
    Garbage: 181164k
    Leak: 9182k
    Overhead: 23431k
    GGC runs: 298
    Pre-IPA-Garbage: 45256k
    Pre-IPA-Leak: 45117k
    Pre-IPA-Overhead: 7607k
    Post-IPA-Garbage: 45256k
    Post-IPA-Leak: 45117k
    Post-IPA-Overhead: 7607k

comparing insn-attrtab.c compilation at -O2 level:
    Overall memory needed: 202381k -> 202197k
    Peak memory use before GGC: 54436k
    Peak memory use after GGC: 44668k
    Maximum of released memory in single GGC run: 18698k
    Garbage: 211801k
    Leak: 9218k
    Overhead: 29318k
    GGC runs: 331
    Pre-IPA-Garbage: 45281k
    Pre-IPA-Leak: 45121k
    Pre-IPA-Overhead: 7609k
    Post-IPA-Garbage: 45281k
    Post-IPA-Leak: 45121k
    Post-IPA-Overhead: 7609k

comparing insn-attrtab.c compilation at -O3 level:
    Overall memory needed: 205729k -> 205693k
    Peak memory use before GGC: 54449k
    Peak memory use after GGC: 44680k -> 44676k
    Maximum of released memory in single GGC run: 18680k
    Garbage: 230141k
    Leak: 9237k
    Overhead: 31241k -> 31241k
    GGC runs: 353
    Pre-IPA-Garbage: 45281k
    Pre-IPA-Leak: 45121k
    Pre-IPA-Overhead: 7609k
    Post-IPA-Garbage: 45281k
    Post-IPA-Leak: 45121k
    Post-IPA-Overhead: 7609k

comparing Gerald's testcase PR8361 compilation at -O0 level:
    Overall memory needed: 146461k -> 146429k
    Peak memory use before GGC: 81548k
    Peak memory use after GGC: 80740k
    Maximum of released memory in single GGC run: 13881k
    Garbage: 195498k
    Leak: 55823k
    Overhead: 29072k
    GGC runs: 441
    Pre-IPA-Garbage: 105344k
    Pre-IPA-Leak: 84661k
    Pre-IPA-Overhead: 15579k
    Post-IPA-Garbage: 105344k
    Post-IPA-Leak: 84661k
    Post-IPA-Overhead: 15579k

comparing Gerald's testcase PR8361 compilation at -O0 -g level:
    Overall memory needed: 163889k -> 163909k
    Peak memory use before GGC: 95759k
    Peak memory use after GGC: 94810k
    Maximum of released memory in single GGC run: 14051k
    Garbage: 201062k -> 201062k
    Leak: 83080k
    Overhead: 35639k
    GGC runs: 412
    Pre-IPA-Garbage: 105846k
    Pre-IPA-Leak: 101111k
    Pre-IPA-Overhead: 19072k
    Post-IPA-Garbage: 105846k
    Post-IPA-Leak: 101111k
    Post-IPA-Overhead: 19072k

comparing Gerald's testcase PR8361 compilation at -O1 level:
    Overall memory needed: 107869k -> 107945k
    Peak memory use before GGC: 81549k
    Peak memory use after GGC: 80741k
    Maximum of released memory in single GGC run: 13844k
    Garbage: 270755k -> 270756k
    Leak: 52421k
    Overhead: 32027k -> 32027k
    GGC runs: 526
    Pre-IPA-Garbage: 153192k
    Pre-IPA-Leak: 85862k
    Pre-IPA-Overhead: 19154k -> 19154k
    Post-IPA-Garbage: 153192k
    Post-IPA-Leak: 85862k
    Post-IPA-Overhead: 19154k -> 19154k

comparing Gerald's testcase PR8361 compilation at -O2 level:
    Overall memory needed: 107477k -> 107705k
    Peak memory use before GGC: 81323k -> 81324k
    Peak memory use after GGC: 80299k
    Maximum of released memory in single GGC run: 13840k
    Garbage: 307097k
    Leak: 52595k
    Overhead: 37234k -> 37234k
    GGC runs: 572
    Pre-IPA-Garbage: 156507k
    Pre-IPA-Leak: 85153k
    Pre-IPA-Overhead: 19383k
    Post-IPA-Garbage: 156507k
    Post-IPA-Leak: 85153k
    Post-IPA-Overhead: 19383k

comparing Gerald's testcase PR8361 compilation at -O3 level:
    Overall memory needed: 113841k -> 113949k
    Peak memory use before GGC: 81790k -> 81789k
    Peak memory use after GGC: 80299k
    Maximum of released memory in single GGC run: 13840k
    Garbage: 337682k -> 337681k
    Leak: 52633k
    Overhead: 40848k -> 40848k
    GGC runs: 610
    Pre-IPA-Garbage: 156507k
    Pre-IPA-Leak: 85157k
    Pre-IPA-Overhead: 19383k
    Post-IPA-Garbage: 156507k
    Post-IPA-Leak: 85157k
    Post-IPA-Overhead: 19383k

comparing PR rtl-optimization/28071 testcase compilation at -O0 level:
    Overall memory needed: 358765k -> 358677k
    Peak memory use before GGC: 78174k
    Peak memory use after GGC: 49108k
    Maximum of released memory in single GGC run: 37058k
    Garbage: 140207k
    Leak: 7712k
    Overhead: 24962k
    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: 359477k -> 359513k
    Peak memory use before GGC: 78855k
    Peak memory use after GGC: 49789k
    Maximum of released memory in single GGC run: 37038k
    Garbage: 140270k
    Leak: 9706k
    Overhead: 25530k
    GGC runs: 94
    Pre-IPA-Garbage: 12173k
    Pre-IPA-Leak: 18873k
    Pre-IPA-Overhead: 2456k
    Post-IPA-Garbage: 12173k
    Post-IPA-Leak: 18873k
    Post-IPA-Overhead: 2456k

comparing PR rtl-optimization/28071 testcase compilation at -O1 level:
    Overall memory needed: 347829k -> 347817k
    Peak memory use before GGC: 94212k
    Peak memory use after GGC: 82936k
    Maximum of released memory in single GGC run: 47307k
    Garbage: 256021k
    Leak: 9536k
    Overhead: 35485k
    GGC runs: 97
    Pre-IPA-Garbage: 42051k
    Pre-IPA-Leak: 64580k
    Pre-IPA-Overhead: 7108k
    Post-IPA-Garbage: 42051k
    Post-IPA-Leak: 64580k
    Post-IPA-Overhead: 7108k

comparing PR rtl-optimization/28071 testcase compilation at -O2 level:
    Overall memory needed: 669073k -> 663637k
    Peak memory use before GGC: 90305k
    Peak memory use after GGC: 82937k
    Maximum of released memory in single GGC run: 38641k
    Garbage: 302308k
    Leak: 11373k
    Overhead: 50853k
    GGC runs: 108
    Pre-IPA-Garbage: 84972k
    Pre-IPA-Leak: 86483k
    Pre-IPA-Overhead: 11064k
    Post-IPA-Garbage: 84972k
    Post-IPA-Leak: 86483k
    Post-IPA-Overhead: 11064k

comparing PR rtl-optimization/28071 testcase compilation at -O3 -fno-tree-pre -fno-tree-fre level:
    Overall memory needed: 1234549k -> 1234261k
    Peak memory use before GGC: 133837k
    Peak memory use after GGC: 126292k
    Maximum of released memory in single GGC run: 51245k
    Garbage: 347523k
    Leak: 10290k
    Overhead: 43799k
    GGC runs: 107
    Pre-IPA-Garbage: 84972k
    Pre-IPA-Leak: 86483k
    Pre-IPA-Overhead: 11064k
    Post-IPA-Garbage: 84972k
    Post-IPA-Leak: 86483k
    Post-IPA-Overhead: 11064k

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]