Date: Thu, 8 Dec 2005 17:06:16 -0800 From: Steve Kargl <sgk@troutmask.apl.washington.edu> To: freebsd-hackers@freebsd.org Subject: sysctl, HW_PHYSMEM, and crippled gcc Message-ID: <20051209010616.GA59667@troutmask.apl.washington.edu>
next in thread | raw e-mail | index | archive | help
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. -- Steve
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20051209010616.GA59667>