sysctl, HW_PHYSMEM, and crippled gcc

Divacky Roman xdivac02 at stud.fit.vutbr.cz
Fri Dec 9 11:25:35 PST 2005


On Thu, Dec 08, 2005 at 05:06:16PM -0800, Steve Kargl wrote:
> Anyone have any insight into fixing gcc to make better
> use of system memory on systems with more than 4 GB.
> It appears that libiberty/physmem.c tries to use sysctl()
> to determine the amount of physical memory in a system.
> 
>   { /* This works on *bsd and darwin.  */
>     unsigned int physmem;
>     size_t len = sizeof physmem;
>     static int mib[2] = { CTL_HW, HW_PHYSMEM };
> 
>     if (sysctl (mib, ARRAY_SIZE (mib), &physmem, &len, NULL, 0) == 0
>         && len == sizeof (physmem))
>       return (double) physmem;
>   }
> 
> This works if you have less than 4GB because of the unsigned
> int physmem.  I have 12 GB, which of course, when expanded
> to the number of bytes doesn't fit into a unsigned int physmem.
> 
> What is the ramification?  Well, gcc uses this estimate of
> memory to size internal parameters.
> 
> troutmask:sgk[259] gcc -v h.c
> Using built-in specs.
> Configured with: FreeBSD/amd64 system compiler
> Thread model: posix
> gcc version 3.4.4 [FreeBSD] 20050518
> GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
> 
> In particular, ggc-min-heapsize=4096 is ridiculously small for a
> system with 12 GB of memory.

the code works here (512M of memory)... dont know about the ifdefs its
surrounded by..

if you manually rewrite the physmem to some bigger value - does it have any
effect on performance of gcc?

roman


More information about the freebsd-hackers mailing list