Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 9 Dec 2005 12:09:14 -0800
From:      Steve Kargl <sgk@troutmask.apl.washington.edu>
To:        Dan Nelson <dnelson@allantgroup.com>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: sysctl, HW_PHYSMEM, and crippled gcc
Message-ID:  <20051209200914.GA30276@troutmask.apl.washington.edu>
In-Reply-To: <20051209040548.GD95420@dan.emsphone.com>
References:  <20051209010616.GA59667@troutmask.apl.washington.edu> <20051209040548.GD95420@dan.emsphone.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Dec 08, 2005 at 10:05:48PM -0600, Dan Nelson wrote:
> In the last episode (Dec 08), Steve Kargl said:
> > 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.
> 
> physmem is actually an unsigned long, not an unsigned int, so on amd64
> that sysctl call should fail anyway (amd64 is LP64, so a long won't fit
> into an int).

I changed "unsigned int physmem;" to "size_t physmem;".
Now, the 12 GB are recognized.

> > 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.
> 
> On all my FreeBSD boxes from 128MB to 1GB of RAM, I get the exact same
> heuristic values as you, so I'm not sure whether the code works at all.

I forced physmem to be 8196 and recompiled gcc.  For whatever reason,
ggc-min-heapsize=4096 was still reported, but my compiling problems
disappeared.  I think you may be right about the code not doing
working as the programmer may have thought.


-- 
Steve



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20051209200914.GA30276>