Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 22 May 2009 15:55:40 +0930
From:      "Daniel O'Connor" <doconnor@gsoft.com.au>
To:        freebsd-hackers@freebsd.org, yuri@rawbw.com
Cc:        Nate Eldredge <neldredge@math.ucsd.edu>
Subject:   Re: Why kernel kills processes that run out of memory instead of just failing memory allocation system calls?
Message-ID:  <200905221555.42775.doconnor@gsoft.com.au>
In-Reply-To: <4A1594DA.2010707@rawbw.com>
References:  <4A14F58F.8000801@rawbw.com> <Pine.GSO.4.64.0905202344420.1483@zeno.ucsd.edu> <4A1594DA.2010707@rawbw.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--nextPart1803539.heUJSqalCy
Content-Type: text/plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

On Fri, 22 May 2009, Yuri wrote:
> Nate Eldredge wrote:
> > Suppose we run this program on a machine with just over 1 GB of
> > memory. The fork() should give the child a private "copy" of the 1
> > GB buffer, by setting it to copy-on-write.  In principle, after the
> > fork(), the child might want to rewrite the buffer, which would
> > require an additional 1GB to be available for the child's copy.  So
> > under a conservative allocation policy, the kernel would have to
> > reserve that extra 1 GB at the time of the fork(). Since it can't
> > do that on our hypothetical 1+ GB machine, the fork() must fail,
> > and the program won't work.
>
> I don't have strong opinion for or against "memory overcommit". But I
> can imagine one could argue that fork with intent of exec is a faulty
> scenario that is a relict from the past. It can be replaced by some
> atomic method that would spawn the child without ovecommitting.

If all you are going to do is call execve() then use vfork().

That explicitly does not copy the parent's address space.

Also your example is odd, if you have a program using 1Gb (RAM + swap)=20
and you want to start another (in any way) then that is going to be=20
impossible.

If you had a 750Mb process that forked and the child only modified 250Mb=20
you'd be all right because the other pages would be copies.

=2D-=20
Daniel O'Connor software and network engineer
for Genesis Software - http://www.gsoft.com.au
"The nice thing about standards is that there
are so many of them to choose from."
  -- Andrew Tanenbaum
GPG Fingerprint - 5596 B766 97C0 0E94 4347 295E E593 DC20 7B3F CE8C

--nextPart1803539.heUJSqalCy
Content-Type: application/pgp-signature; name=signature.asc 
Content-Description: This is a digitally signed message part.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.11 (FreeBSD)

iD8DBQBKFkVm5ZPcIHs/zowRAq2jAJ4ukljsV0PaIASBrO2YZOWvBumGMQCdHGP/
dHLr3G3LFnwNE9pJIqngrkM=
=Q6yy
-----END PGP SIGNATURE-----

--nextPart1803539.heUJSqalCy--



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