Subject: Re: Replacement for grep(1) (part 2)
To: Jason Thorpe <thorpej@nas.nasa.gov>
From: Matthew Dillon <dillon@apollo.backplane.com>
List: tech-userlevel
Date: 07/13/1999 11:13:49
    This topic has been rehashed a thousand times.

    What it comes down to is that if you want to disallow overcommit, you
    have to multiply the amount of swap space in the system relative to
    current levels in order to get the same performance limits as you had
    before.  If you don't, your system will begin to fail much earlier
    then it would have otherwise.  The reason for this is simple:  the
    system generally doesn't even come close to using an amount of swap
    matching its VM reservation.

    Rather then reserving the 2xMEMORY worth of swap that we recommend now,
    you would have to reserve 8x or 16xMEMORY worth of swap if overcommits
    were not allowed.

    It doesn't make much sense to do that.  It's a terrible waste of 
    resources.  A machine with 128MB of ram would have to reserve 2G
    worth of swap space instead of 256MB to be able to reach the performance
    limits of the machine, yet under nearly all conditions no more then 
    200MB of that space would actually be used by the system.  The
    performance curve starts to drop out once swap utilization reaches 1.5xMEM
    and is really in the dogpile when swap utilization reaches 2xMEM.  There
    is no benefit whatsoever to allocating more swap then the system can
    have reasonable performance with except as an emergency reserve.

    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.

    SysV was totally and utterly broken in regards to swap allocation.  The
    only major operating system that used it as a base was IRIX and SGI
    found out very quickly that pre-reserving swap is a stupid idea - and
    so they implemented 'virtual swap' to get around it in 5.3, and moved the
    whole thing to an overcommit model in 6.4.  Doh!  Even solaris doesn't
    overcommit - you think it actually reserves data blocks for its file-backed
    swap?  Bzzt!  It uses an overcommit model too.

						-Matt