From owner-freebsd-hackers@FreeBSD.ORG Sat Nov 28 01:30:20 2009 Return-Path: Delivered-To: freebsd-hackers@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1E0E01065695 for ; Sat, 28 Nov 2009 01:30:20 +0000 (UTC) (envelope-from jasone@FreeBSD.org) Received: from canonware.com (10140.x.rootbsd.net [204.109.63.53]) by mx1.freebsd.org (Postfix) with ESMTP id 006468FC19 for ; Sat, 28 Nov 2009 01:30:19 +0000 (UTC) Received: from [IPv6:::1] (localhost [127.0.0.1]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by canonware.com (Postfix) with ESMTPSA id 32FC22844E; Fri, 27 Nov 2009 17:30:18 -0800 (PST) Message-ID: <4B107D29.5030307@FreeBSD.org> Date: Fri, 27 Nov 2009 17:30:17 -0800 From: Jason Evans User-Agent: Thunderbird 2.0.0.23 (X11/20090817) MIME-Version: 1.0 To: Maxim Sobolev References: <4B1041EB.9020109@sippysoft.com> <4B1059CA.6040605@FreeBSD.org> <4B10687D.3050209@sippysoft.com> In-Reply-To: <4B10687D.3050209@sippysoft.com> Content-Type: text/plain; charset=KOI8-U; format=flowed Content-Transfer-Encoding: 7bit Cc: FreeBSD Hackers Subject: Re: heap limits: mmap(2) vs. break(2) on i386 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: Sat, 28 Nov 2009 01:30:20 -0000 Maxim Sobolev wrote: > Jason Evans wrote: >> Maxim Sobolev wrote: >>> I am trying to figure out why java fails to start with 1024MB of heap >>> on i386 with 4GB of RAM and 4GB of swap. Both MAXDSIZ and DFLDSIZ are >>> set to 2GB. >> >> Some memory (1GiB?) is reserved for kernel address space, and you >> reserved 2GiB for DSS. That leaves less than 1GiB available after >> shared libraries and whatnot are mapped. If there is more than 1GiB >> available, mmap can still fail due to the memory being non-contiguous. > > So, are you saying that by allocating 2GB to MAXDSIZ, I limit myself > less than 1GB left to be allocated via mmap()? Yes, my recollection is that MAXDSIZ controls the amount of virtual address space dedicated to DSS, and this address space will not be mapped via anonymous mmap. I wanted to move completely away from using sbrk in malloc, but we can't completely remove DSS for backward compatibility reasons, which means less heap address space than would be ideal. > What is the > best strategy if I want to maximize amount of memory available to > applications? Most of modern applications use mmap(), isn't it? Then > where MAXDSIZ can bite me if I set it to say 512MB? I would set MAXDSIZ to 0, so that the maximum amount of memory is available for mapping shared libraries and files, and allocating via malloc. This may cause problems with a couple of ports that implement their own memory allocators based on sbrk, but otherwise it should be all good. You might also set /etc/malloc.conf to 'd' in order to disable the sbrk calls. Jason