Subject: Re: Replacement for grep(1) (part 2)
To: Matthew Dillon <dillon@apollo.backplane.com>
From: Chris G. Demetriou <cgd@netbsd.org>
List: tech-userlevel
Date: 07/13/1999 12:24:35
[cc list trimmed because it was getting ... insane, and it's not like
this is a critical point. It's just beating up a topic which has been
beaten up by many others.]

Matthew Dillon <dillon@apollo.backplane.com> writes:
>     Thus it makes little sense to try to disallow overcommit.  It gains you
>     absolutely nothing, and forces you to waste huge amounts of disk space.
>
>     To anyone who is paranoid about it:  Fine, then just allocate an insane
>     amount of swap and forget about it.  It would be no more then you would
>     have to allocate anyway if we were to actually disallow overcommits!  But
>     with overcommits allowed, your box will never come close to using that
>     much swap.

This may be a decent answer for the workstation world, but it's not so
good for more restricted systems.  Further, your claim that
disallowing overcommit gains you absolutely nothing is simply false.

It gains you two things (which are at least immediately obvious to me):

* Certain knowledge that (if the system is implemented correctly) the
  system will never have to kill a process (or take similar corrective
  action) due to overcommit, and that attempts to allocate more backing
  store resources than are present will fail.

  If the programs you're using do reasonable error handling when out-of
  memory situations crop up, then this can be a very useful propery to
  have if you're building a reliable system.  It's not necessarily a
  matter of gigs of swap space.  It means that you know that you can
  safely run in, say, 64MB or memory, with _no_ swap, if your programs
  don't overallocate ridiculously.

  The only alternative to avoiding overcommit that seems plausibly
  enforceable by the OS/system designer is using resource limits and
  then planning based on the maximum resource limits and number of
  processes you allow.  However, that results in a ridiculously loose
  upper bound and a fair bit of extra work tuning the limits.

  The obvious workstation example is a bit grotesque: 1GB max datasize
  by default, maxproc 532, and you need > .5TB to be _sure_ that no
  process will get killed for lack of resources.

  A more realistic embedded system might allow 64 processes, two of
  which need 10MB each and the rest of which need 300K-1MB each.  If you
  do this naively, you end up "needing" 640MB to guarantee safely.  If
  you tweak a bunch of things with some special-purpose resource
  limiting code, you can get it down to 96MB or so to guarantee safety.
  Only by going to a _great_ deal of extra effort -- which could be
  avoided by just disabling overcommit -- you can't be sure the system
  will operate safely in, say, 48MB or even 64MB, both of which may well
  be adequate.

  Using resource limits to solve this problem is ... not the right
  answer (even if various systems implemented resource limits
  correctly).

* protection against bogosity.

  I may run a system in which all of the processes are effectively
  unlimited (i.e. have huge resource limits), but I know within a
  tolerance what the actual expected usage of the system is.

  If a program mallocs (or equivalently allocates with mmap) <a huge
  amount> it should be told up front that  that's not possible (or
  that it is), and filling that memory in later simply should not
  result in its death or in the death of another process.  This
  becomes especially important when the process making the bogus
  request is a "critical" process or when the other process that
  happens to be killed is a critical process.


Certain knowledge about system operation, and deterministinc system
behaviour in the face of programming bugs is exactly what the desire
for overcommit is about.

Overcommit avoidance may not be useful for your particular uses of
these UNIX-like systems.  However, if you think that it's not useful
to anybody who uses them (or that people who think it's useful are
deluding themselves 8-), then you're sorely mistaken and have a
... very wrong-headed attitude about why people find such features
useful.


cgd
-- 
Chris Demetriou - cgd@netbsd.org - http://www.netbsd.org/People/Pages/cgd.html
Disclaimer: Not speaking for NetBSD, just expressing my own opinion.