A recent patch increased GCC's memory consumption!

gcctest@suse.de gcctest@suse.de
Fri Nov 23 14:02: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: 6631k
    Peak memory use before GGC: 1095k
    Peak memory use after GGC: 993k
    Maximum of released memory in single GGC run: 129k
    Garbage: 237k
    Leak: 951k
    Overhead: 80k
    GGC runs: 2

comparing empty function compilation at -O0 -g level:
    Overall memory needed: 6647k
    Peak memory use before GGC: 1122k
    Peak memory use after GGC: 1020k
    Maximum of released memory in single GGC run: 131k
    Garbage: 239k
    Leak: 983k
    Overhead: 84k
    GGC runs: 3

comparing empty function compilation at -O1 level:
    Overall memory needed: 6691k
    Peak memory use before GGC: 1095k
    Peak memory use after GGC: 993k
    Maximum of released memory in single GGC run: 131k
    Garbage: 239k
    Leak: 951k
    Overhead: 80k
    GGC runs: 2

comparing empty function compilation at -O2 level:
    Overall memory needed: 6711k
    Peak memory use before GGC: 1095k
    Peak memory use after GGC: 994k
    Maximum of released memory in single GGC run: 134k
    Garbage: 242k
    Leak: 952k
    Overhead: 81k
    GGC runs: 2

comparing empty function compilation at -O3 level:
    Overall memory needed: 6711k
    Peak memory use before GGC: 1095k
    Peak memory use after GGC: 994k
    Maximum of released memory in single GGC run: 134k
    Garbage: 242k
    Leak: 952k
    Overhead: 81k
    GGC runs: 2

comparing combine.c compilation at -O0 level:
    Overall memory needed: 21179k -> 21175k
    Peak memory use before GGC: 7806k
    Peak memory use after GGC: 7185k
    Maximum of released memory in single GGC run: 1550k
    Garbage: 37870k
    Leak: 5511k
    Overhead: 4574k
    GGC runs: 371

comparing combine.c compilation at -O0 -g level:
    Overall memory needed: 23179k
    Peak memory use before GGC: 9647k
    Peak memory use after GGC: 8953k
    Maximum of released memory in single GGC run: 1838k
    Garbage: 38230k
    Leak: 8316k
    Overhead: 5202k
    GGC runs: 342

comparing combine.c compilation at -O1 level:
    Overall memory needed: 31695k -> 31699k
    Peak memory use before GGC: 16352k
    Peak memory use after GGC: 16184k
    Maximum of released memory in single GGC run: 1360k
    Garbage: 51362k -> 51370k
    Leak: 5659k
    Overhead: 5688k -> 5690k
    GGC runs: 442

comparing combine.c compilation at -O2 level:
  Amount of memory still referenced at the end of compilation increased from 5985k to 5997k, overall 0.19%
    Overall memory needed: 33623k
    Peak memory use before GGC: 16434k -> 16440k
    Peak memory use after GGC: 16271k -> 16270k
    Maximum of released memory in single GGC run: 1315k -> 1316k
    Garbage: 70206k -> 70240k
    Leak: 5985k -> 5997k
    Overhead: 7941k -> 7944k
    GGC runs: 510

comparing combine.c compilation at -O3 level:
  Amount of produced GGC garbage increased from 91465k to 91576k, overall 0.12%
    Overall memory needed: 38107k -> 38079k
    Peak memory use before GGC: 16654k
    Peak memory use after GGC: 16380k
    Maximum of released memory in single GGC run: 2117k -> 2119k
    Garbage: 91465k -> 91576k
    Leak: 6106k -> 6105k
    Overhead: 10469k -> 10489k
    GGC runs: 545 -> 544

comparing insn-attrtab.c compilation at -O0 level:
    Overall memory needed: 135919k
    Peak memory use before GGC: 56998k
    Peak memory use after GGC: 31455k
    Maximum of released memory in single GGC run: 33256k
    Garbage: 128179k
    Leak: 8380k
    Overhead: 13926k
    GGC runs: 292

comparing insn-attrtab.c compilation at -O0 -g level:
    Overall memory needed: 137175k
    Peak memory use before GGC: 58140k
    Peak memory use after GGC: 32597k
    Maximum of released memory in single GGC run: 33256k
    Garbage: 128409k
    Leak: 10040k
    Overhead: 14282k
    GGC runs: 289

comparing insn-attrtab.c compilation at -O1 level:
    Overall memory needed: 143187k -> 143191k
    Peak memory use before GGC: 56210k
    Peak memory use after GGC: 49982k
    Maximum of released memory in single GGC run: 23976k
    Garbage: 206548k
    Leak: 9274k
    Overhead: 23997k
    GGC runs: 315

comparing insn-attrtab.c compilation at -O2 level:
    Overall memory needed: 186559k
    Peak memory use before GGC: 56849k
    Peak memory use after GGC: 51569k
    Maximum of released memory in single GGC run: 22720k
    Garbage: 247841k -> 247842k
    Leak: 10361k -> 10361k
    Overhead: 29739k -> 29739k
    GGC runs: 345

comparing insn-attrtab.c compilation at -O3 level:
    Overall memory needed: 190979k -> 190983k
    Peak memory use before GGC: 68525k
    Peak memory use after GGC: 62278k
    Maximum of released memory in single GGC run: 23239k
    Garbage: 275915k -> 275916k
    Leak: 10397k -> 10397k
    Overhead: 31624k -> 31624k
    GGC runs: 350

comparing Gerald's testcase PR8361 compilation at -O0 level:
    Overall memory needed: 147459k -> 147487k
    Peak memory use before GGC: 84523k
    Peak memory use after GGC: 83686k
    Maximum of released memory in single GGC run: 16844k
    Garbage: 202344k
    Leak: 48125k
    Overhead: 23725k
    GGC runs: 420

comparing Gerald's testcase PR8361 compilation at -O0 -g level:
    Overall memory needed: 168259k -> 168263k
    Peak memory use before GGC: 96488k
    Peak memory use after GGC: 95531k
    Maximum of released memory in single GGC run: 17652k
    Garbage: 207868k
    Leak: 69738k
    Overhead: 28710k
    GGC runs: 392

comparing Gerald's testcase PR8361 compilation at -O1 level:
    Overall memory needed: 115258k -> 115266k
    Peak memory use before GGC: 83997k
    Peak memory use after GGC: 83161k
    Maximum of released memory in single GGC run: 16342k
    Garbage: 282637k -> 282661k
    Leak: 47354k -> 47353k
    Overhead: 27746k -> 27746k
    GGC runs: 518

comparing Gerald's testcase PR8361 compilation at -O2 level:
    Overall memory needed: 117562k -> 117510k
    Peak memory use before GGC: 84113k
    Peak memory use after GGC: 83276k
    Maximum of released memory in single GGC run: 16340k
    Garbage: 346702k -> 346892k
    Leak: 48287k -> 48277k
    Overhead: 34537k -> 34530k
    GGC runs: 593 -> 594

comparing Gerald's testcase PR8361 compilation at -O3 level:
    Overall memory needed: 122702k -> 122742k
    Peak memory use before GGC: 85266k
    Peak memory use after GGC: 84413k
    Maximum of released memory in single GGC run: 16732k
    Garbage: 378473k -> 378499k
    Leak: 48738k -> 48720k
    Overhead: 37222k -> 37216k
    GGC runs: 626 -> 625

comparing PR rtl-optimization/28071 testcase compilation at -O0 level:
    Overall memory needed: 378595k
    Peak memory use before GGC: 101208k
    Peak memory use after GGC: 56862k
    Maximum of released memory in single GGC run: 50582k
    Garbage: 178902k
    Leak: 6097k
    Overhead: 30781k
    GGC runs: 106

comparing PR rtl-optimization/28071 testcase compilation at -O0 -g level:
    Overall memory needed: 379391k
    Peak memory use before GGC: 101839k
    Peak memory use after GGC: 57492k
    Maximum of released memory in single GGC run: 50583k
    Garbage: 179007k
    Leak: 7799k
    Overhead: 31213k
    GGC runs: 111

comparing PR rtl-optimization/28071 testcase compilation at -O1 level:
    Overall memory needed: 436751k -> 436727k
    Peak memory use before GGC: 78856k
    Peak memory use after GGC: 69705k
    Maximum of released memory in single GGC run: 37753k
    Garbage: 234244k
    Leak: 16006k
    Overhead: 35358k
    GGC runs: 105

comparing PR rtl-optimization/28071 testcase compilation at -O2 level:
    Overall memory needed: 350751k -> 350835k
    Peak memory use before GGC: 74692k
    Peak memory use after GGC: 69706k
    Maximum of released memory in single GGC run: 32246k
    Garbage: 245723k
    Leak: 16178k
    Overhead: 38676k
    GGC runs: 117

comparing PR rtl-optimization/28071 testcase compilation at -O3 -fno-tree-pre -fno-tree-fre level:
    Overall memory needed: 1304847k -> 1303783k
    Peak memory use before GGC: 130289k
    Peak memory use after GGC: 120623k
    Maximum of released memory in single GGC run: 61473k
    Garbage: 359151k
    Leak: 24557k
    Overhead: 46972k
    GGC runs: 105

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