From owner-freebsd-hackers@FreeBSD.ORG Fri Dec 9 01:06:21 2005 Return-Path: X-Original-To: freebsd-hackers@freebsd.org Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id E004E16A420 for ; Fri, 9 Dec 2005 01:06:21 +0000 (GMT) (envelope-from sgk@troutmask.apl.washington.edu) Received: from troutmask.apl.washington.edu (troutmask.apl.washington.edu [128.208.78.105]) by mx1.FreeBSD.org (Postfix) with ESMTP id A6FB243D4C for ; Fri, 9 Dec 2005 01:06:16 +0000 (GMT) (envelope-from sgk@troutmask.apl.washington.edu) Received: from troutmask.apl.washington.edu (localhost [127.0.0.1]) by troutmask.apl.washington.edu (8.13.4/8.13.4) with ESMTP id jB916G3n059766 for ; Thu, 8 Dec 2005 17:06:16 -0800 (PST) (envelope-from sgk@troutmask.apl.washington.edu) Received: (from sgk@localhost) by troutmask.apl.washington.edu (8.13.4/8.13.1/Submit) id jB916GBT059765 for freebsd-hackers@freebsd.org; Thu, 8 Dec 2005 17:06:16 -0800 (PST) (envelope-from sgk) Date: Thu, 8 Dec 2005 17:06:16 -0800 From: Steve Kargl To: freebsd-hackers@freebsd.org Message-ID: <20051209010616.GA59667@troutmask.apl.washington.edu> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Mailman-Approved-At: Fri, 09 Dec 2005 01:25:11 +0000 Subject: sysctl, HW_PHYSMEM, and crippled gcc X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Dec 2005 01:06:22 -0000 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