[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[no subject]

Improvement to the scavenger working set feature in the garbage collector.

  A serious crock in the garbage collector has been fixed.  While this
doesnt guarantee you will win now, at least you may have a chance..

 The scavenger working set feature tries to prevent the effect that
idle-time scavenging can page out all the user's pages, thus causing
poor response to the keyboard, for example.  (Recall that the scavenger
is the module in the garbage collector which does the copying from old
to new space.  It can run either interleaved with cons, or during
otherwise idle time, or both.) The idea is to divide physical memory into two
pools.  Scavenger caused page faults can only page into the scavenger
pool, thus, the other pool will hold user's pages even if he has been
idle for a long time.  This feature is enabled by the
SI:%SCAVENGER-WS-ENABLE switch, and is on by default.

  This is a fine idea, but there was a serious glitch in the
implementation, namely that the size of the scavenger memory pool was
set at 12 pages, and changing it required a reassembly of the microcode.
It is no wonder that scavenger thrashed under these conditions.  The implementation
has been fixed now.   The function (SI:SET-SCAVENGER-WS <n>) will set
the scavenger working set size to any desired value.  (SI:COUNT-SCAVENGER-WS)
will scan thru the system page tables and count the number of pages flagged
as being in the scavenger working set.

  The improved code will become the default in system 76. However, you can
try it out by using microcode 800 in any system 74 (or later) and reloading
the file LISPM2;GC.  In a few tries, (SI:SET-SCAVENGER-WS 400) seemed to give
reasonable results.