Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 4 Jan 2008 11:30:22 +0000
From:      "Igor Mozolevsky" <igor@hybrid-lab.co.uk>
To:        "Robert Watson" <rwatson@freebsd.org>
Cc:        =?ISO-8859-1?Q?Dag-Erling_Sm=F8rgrav?= <des@des.no>, freebsd-current@freebsd.org, Jason Evans <jasone@freebsd.org>
Subject:   Re: sbrk(2) broken
Message-ID:  <a2b6592c0801040330g229030dbvc903e4f09d589644@mail.gmail.com>
In-Reply-To: <20080104111938.N77222@fledge.watson.org>
References:  <477C82F0.5060809@freebsd.org> <863ateemw2.fsf@ds4.des.no> <20080104002002.L30578@fledge.watson.org> <a2b6592c0801040241l598ea9b7h57ad6889a1eccd3@mail.gmail.com> <86bq81c12d.fsf@ds4.des.no> <a2b6592c0801040318s9986f10u40cf725bc96304c6@mail.gmail.com> <20080104111938.N77222@fledge.watson.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On 04/01/2008, Robert Watson <rwatson@freebsd.org> wrote:
> On Fri, 4 Jan 2008, Igor Mozolevsky wrote:
>
> > Of course, if you're afraid of memory overcommit and you know in advance
> >> how much memory you need, you can simply allocate a sufficient amount of
> >> address space at startup and touch it all.  This way, you will either be
> >> killed right away, or be guaranteed to have sufficient memory for the rest
> >> of your (process) lifetime.  Alternatively, do what Varnish does: create a
> >> large file, mmap it, and allocate everything you need from that area, so
> >> you have your own private swap space.  Just make sure to actually allocate
> >> the disk space you need (by filling the file with zeroes, or at the minimum
> >> writing a zero to the file every sb.st_blksize bytes, preferably
> >> sequentially to avoid excessive fragmentation)
> >
> > Surely you can just fseek() on the file at the correct lenght?
>
> That will create a sparse file without file system blocks to back it, and is
> effectively also over-commit.  When the file system runs out of room, you will
> get SIGSEGV when the vnode pager discovers it can't write a page to disk.  If
> you zero-fill it, the blocks are pre-allocated.

Surely you should not be allowed to overcommit on fseek() followed by
write(,,1); zeroing out gigs of hdd space seems rather silly...

Igor



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