1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-04-27 08:43:40 -07:00

Bringing strategy design up to date with changes to zone allocation.

Adding design documents to Xcode project for easier editing and source control.

Copied from Perforce
 Change: 184218
 ServerID: perforce.ravenbrook.com
This commit is contained in:
Richard Brooksby 2014-01-29 15:26:04 +00:00
parent 02962f64ca
commit 9cdb3dd03b
3 changed files with 157 additions and 41 deletions

View file

@ -1188,6 +1188,74 @@
3114A6BA156E9768001E0AA3 /* walkt0.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = walkt0.c; sourceTree = "<group>"; };
3114A6C6156E9815001E0AA3 /* mpseventcnv */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = mpseventcnv; sourceTree = BUILT_PRODUCTS_DIR; };
3114A6D0156E9829001E0AA3 /* eventcnv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eventcnv.c; sourceTree = "<group>"; };
31160D921899540D0071EB17 /* abq.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = abq.txt; path = ../design/abq.txt; sourceTree = "<group>"; };
31160D931899540D0071EB17 /* alloc-frame.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = "alloc-frame.txt"; path = "../design/alloc-frame.txt"; sourceTree = "<group>"; };
31160D941899540D0071EB17 /* arena.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = arena.txt; path = ../design/arena.txt; sourceTree = "<group>"; };
31160D951899540D0071EB17 /* arenavm.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = arenavm.txt; path = ../design/arenavm.txt; sourceTree = "<group>"; };
31160D961899540D0071EB17 /* bt.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = bt.txt; path = ../design/bt.txt; sourceTree = "<group>"; };
31160D971899540D0071EB17 /* buffer.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = buffer.txt; path = ../design/buffer.txt; sourceTree = "<group>"; };
31160D981899540D0071EB17 /* cbs.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = cbs.txt; path = ../design/cbs.txt; sourceTree = "<group>"; };
31160D991899540D0071EB17 /* check.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = check.txt; path = ../design/check.txt; sourceTree = "<group>"; };
31160D9A1899540D0071EB17 /* class-interface.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = "class-interface.txt"; path = "../design/class-interface.txt"; sourceTree = "<group>"; };
31160D9B1899540D0071EB17 /* collection.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = collection.txt; path = ../design/collection.txt; sourceTree = "<group>"; };
31160D9C1899540D0071EB17 /* config.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = config.txt; path = ../design/config.txt; sourceTree = "<group>"; };
31160D9D1899540D0071EB17 /* critical-path.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = "critical-path.txt"; path = "../design/critical-path.txt"; sourceTree = "<group>"; };
31160D9E1899540D0071EB17 /* diag.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = diag.txt; path = ../design/diag.txt; sourceTree = "<group>"; };
31160D9F1899540D0071EB17 /* finalize.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = finalize.txt; path = ../design/finalize.txt; sourceTree = "<group>"; };
31160DA01899540D0071EB17 /* fix.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = fix.txt; path = ../design/fix.txt; sourceTree = "<group>"; };
31160DA11899540D0071EB17 /* freelist.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = freelist.txt; path = ../design/freelist.txt; sourceTree = "<group>"; };
31160DA21899540D0071EB17 /* guide.hex.trans.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = guide.hex.trans.txt; path = ../design/guide.hex.trans.txt; sourceTree = "<group>"; };
31160DA31899540D0071EB17 /* guide.impl.c.format.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = guide.impl.c.format.txt; path = ../design/guide.impl.c.format.txt; sourceTree = "<group>"; };
31160DA41899540D0071EB17 /* index.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = index.txt; path = ../design/index.txt; sourceTree = "<group>"; };
31160DA51899540D0071EB17 /* interface-c.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = "interface-c.txt"; path = "../design/interface-c.txt"; sourceTree = "<group>"; };
31160DA61899540D0071EB17 /* io.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = io.txt; path = ../design/io.txt; sourceTree = "<group>"; };
31160DA71899540D0071EB17 /* keyword-arguments.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = "keyword-arguments.txt"; path = "../design/keyword-arguments.txt"; sourceTree = "<group>"; };
31160DA81899540D0071EB17 /* lib.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = lib.txt; path = ../design/lib.txt; sourceTree = "<group>"; };
31160DA91899540D0071EB17 /* lock.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = lock.txt; path = ../design/lock.txt; sourceTree = "<group>"; };
31160DAA1899540D0071EB17 /* locus.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = locus.txt; path = ../design/locus.txt; sourceTree = "<group>"; };
31160DAB1899540D0071EB17 /* message-gc.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = "message-gc.txt"; path = "../design/message-gc.txt"; sourceTree = "<group>"; };
31160DAC1899540D0071EB17 /* message.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = message.txt; path = ../design/message.txt; sourceTree = "<group>"; };
31160DAD1899540D0071EB17 /* object-debug.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = "object-debug.txt"; path = "../design/object-debug.txt"; sourceTree = "<group>"; };
31160DAE1899540D0071EB17 /* pool.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = pool.txt; path = ../design/pool.txt; sourceTree = "<group>"; };
31160DAF1899540D0071EB17 /* poolamc.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = poolamc.txt; path = ../design/poolamc.txt; sourceTree = "<group>"; };
31160DB01899540D0071EB17 /* poolams.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = poolams.txt; path = ../design/poolams.txt; sourceTree = "<group>"; };
31160DB11899540D0071EB17 /* poolawl.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = poolawl.txt; path = ../design/poolawl.txt; sourceTree = "<group>"; };
31160DB21899540D0071EB17 /* poollo.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = poollo.txt; path = ../design/poollo.txt; sourceTree = "<group>"; };
31160DB31899540D0071EB17 /* poolmfs.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = poolmfs.txt; path = ../design/poolmfs.txt; sourceTree = "<group>"; };
31160DB41899540D0071EB17 /* poolmrg.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = poolmrg.txt; path = ../design/poolmrg.txt; sourceTree = "<group>"; };
31160DB51899540D0071EB17 /* poolmv.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = poolmv.txt; path = ../design/poolmv.txt; sourceTree = "<group>"; };
31160DB61899540D0071EB17 /* poolmvff.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = poolmvff.txt; path = ../design/poolmvff.txt; sourceTree = "<group>"; };
31160DB71899540D0071EB17 /* poolmvt.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = poolmvt.txt; path = ../design/poolmvt.txt; sourceTree = "<group>"; };
31160DB81899540D0071EB17 /* prot.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = prot.txt; path = ../design/prot.txt; sourceTree = "<group>"; };
31160DB91899540D0071EB17 /* protan.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = protan.txt; path = ../design/protan.txt; sourceTree = "<group>"; };
31160DBA1899540D0071EB17 /* protli.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = protli.txt; path = ../design/protli.txt; sourceTree = "<group>"; };
31160DBB1899540D0071EB17 /* protocol.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = protocol.txt; path = ../design/protocol.txt; sourceTree = "<group>"; };
31160DBC1899540D0071EB17 /* protsu.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = protsu.txt; path = ../design/protsu.txt; sourceTree = "<group>"; };
31160DBD1899540D0071EB17 /* pthreadext.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = pthreadext.txt; path = ../design/pthreadext.txt; sourceTree = "<group>"; };
31160DBE1899540D0071EB17 /* range.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = range.txt; path = ../design/range.txt; sourceTree = "<group>"; };
31160DBF1899540D0071EB17 /* reservoir.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = reservoir.txt; path = ../design/reservoir.txt; sourceTree = "<group>"; };
31160DC01899540D0071EB17 /* ring.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = ring.txt; path = ../design/ring.txt; sourceTree = "<group>"; };
31160DC11899540D0071EB17 /* root.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = root.txt; path = ../design/root.txt; sourceTree = "<group>"; };
31160DC21899540D0071EB17 /* scan.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = scan.txt; path = ../design/scan.txt; sourceTree = "<group>"; };
31160DC31899540D0071EB17 /* seg.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = seg.txt; path = ../design/seg.txt; sourceTree = "<group>"; };
31160DC41899540D0071EB17 /* shield.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = shield.txt; path = ../design/shield.txt; sourceTree = "<group>"; };
31160DC51899540D0071EB17 /* sig.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = sig.txt; path = ../design/sig.txt; sourceTree = "<group>"; };
31160DC61899540D0071EB17 /* splay.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = splay.txt; path = ../design/splay.txt; sourceTree = "<group>"; };
31160DC71899540D0071EB17 /* sso1al.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = sso1al.txt; path = ../design/sso1al.txt; sourceTree = "<group>"; };
31160DC81899540D0071EB17 /* strategy.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = strategy.txt; path = ../design/strategy.txt; sourceTree = "<group>"; };
31160DC91899540D0071EB17 /* telemetry.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = telemetry.txt; path = ../design/telemetry.txt; sourceTree = "<group>"; };
31160DCA1899540D0071EB17 /* tests.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = tests.txt; path = ../design/tests.txt; sourceTree = "<group>"; };
31160DCB1899540D0071EB17 /* thread-manager.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = "thread-manager.txt"; path = "../design/thread-manager.txt"; sourceTree = "<group>"; };
31160DCC1899540D0071EB17 /* thread-safety.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = "thread-safety.txt"; path = "../design/thread-safety.txt"; sourceTree = "<group>"; };
31160DCD1899540D0071EB17 /* trace.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = trace.txt; path = ../design/trace.txt; sourceTree = "<group>"; };
31160DCE1899540D0071EB17 /* type.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = type.txt; path = ../design/type.txt; sourceTree = "<group>"; };
31160DCF1899540D0071EB17 /* version-library.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = "version-library.txt"; path = "../design/version-library.txt"; sourceTree = "<group>"; };
31160DD01899540D0071EB17 /* version.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = version.txt; path = ../design/version.txt; sourceTree = "<group>"; };
31160DD11899540D0071EB17 /* vm.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = vm.txt; path = ../design/vm.txt; sourceTree = "<group>"; };
31160DD21899540D0071EB17 /* vman.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = vman.txt; path = ../design/vman.txt; sourceTree = "<group>"; };
31160DD31899540D0071EB17 /* vmo1.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = vmo1.txt; path = ../design/vmo1.txt; sourceTree = "<group>"; };
31160DD41899540D0071EB17 /* vmso.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = vmso.txt; path = ../design/vmso.txt; sourceTree = "<group>"; };
31160DD51899540D0071EB17 /* writef.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = writef.txt; path = ../design/writef.txt; sourceTree = "<group>"; };
31172ABA17750F9D009488E5 /* thxc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = thxc.c; sourceTree = "<group>"; };
31172ABB177512F6009488E5 /* prmci3xc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = prmci3xc.c; sourceTree = "<group>"; };
31172ABC1775131C009488E5 /* prmci6xc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = prmci6xc.c; sourceTree = "<group>"; };
@ -1689,6 +1757,81 @@
name = mpseventcnv;
sourceTree = "<group>";
};
31160D90189953D50071EB17 /* Design */ = {
isa = PBXGroup;
children = (
31160D921899540D0071EB17 /* abq.txt */,
31160D931899540D0071EB17 /* alloc-frame.txt */,
31160D941899540D0071EB17 /* arena.txt */,
31160D951899540D0071EB17 /* arenavm.txt */,
31160D961899540D0071EB17 /* bt.txt */,
31160D971899540D0071EB17 /* buffer.txt */,
31160D981899540D0071EB17 /* cbs.txt */,
31160D991899540D0071EB17 /* check.txt */,
31160D9A1899540D0071EB17 /* class-interface.txt */,
31160D9B1899540D0071EB17 /* collection.txt */,
31160D9C1899540D0071EB17 /* config.txt */,
31160D9D1899540D0071EB17 /* critical-path.txt */,
31160D9E1899540D0071EB17 /* diag.txt */,
31160D9F1899540D0071EB17 /* finalize.txt */,
31160DA01899540D0071EB17 /* fix.txt */,
31160DA11899540D0071EB17 /* freelist.txt */,
31160DA21899540D0071EB17 /* guide.hex.trans.txt */,
31160DA31899540D0071EB17 /* guide.impl.c.format.txt */,
31160DA41899540D0071EB17 /* index.txt */,
31160DA51899540D0071EB17 /* interface-c.txt */,
31160DA61899540D0071EB17 /* io.txt */,
31160DA71899540D0071EB17 /* keyword-arguments.txt */,
31160DA81899540D0071EB17 /* lib.txt */,
31160DA91899540D0071EB17 /* lock.txt */,
31160DAA1899540D0071EB17 /* locus.txt */,
31160DAB1899540D0071EB17 /* message-gc.txt */,
31160DAC1899540D0071EB17 /* message.txt */,
31160DAD1899540D0071EB17 /* object-debug.txt */,
31160DAE1899540D0071EB17 /* pool.txt */,
31160DAF1899540D0071EB17 /* poolamc.txt */,
31160DB01899540D0071EB17 /* poolams.txt */,
31160DB11899540D0071EB17 /* poolawl.txt */,
31160DB21899540D0071EB17 /* poollo.txt */,
31160DB31899540D0071EB17 /* poolmfs.txt */,
31160DB41899540D0071EB17 /* poolmrg.txt */,
31160DB51899540D0071EB17 /* poolmv.txt */,
31160DB61899540D0071EB17 /* poolmvff.txt */,
31160DB71899540D0071EB17 /* poolmvt.txt */,
31160DB81899540D0071EB17 /* prot.txt */,
31160DB91899540D0071EB17 /* protan.txt */,
31160DBA1899540D0071EB17 /* protli.txt */,
31160DBB1899540D0071EB17 /* protocol.txt */,
31160DBC1899540D0071EB17 /* protsu.txt */,
31160DBD1899540D0071EB17 /* pthreadext.txt */,
31160DBE1899540D0071EB17 /* range.txt */,
31160DBF1899540D0071EB17 /* reservoir.txt */,
31160DC01899540D0071EB17 /* ring.txt */,
31160DC11899540D0071EB17 /* root.txt */,
31160DC21899540D0071EB17 /* scan.txt */,
31160DC31899540D0071EB17 /* seg.txt */,
31160DC41899540D0071EB17 /* shield.txt */,
31160DC51899540D0071EB17 /* sig.txt */,
31160DC61899540D0071EB17 /* splay.txt */,
31160DC71899540D0071EB17 /* sso1al.txt */,
31160DC81899540D0071EB17 /* strategy.txt */,
31160DC91899540D0071EB17 /* telemetry.txt */,
31160DCA1899540D0071EB17 /* tests.txt */,
31160DCB1899540D0071EB17 /* thread-manager.txt */,
31160DCC1899540D0071EB17 /* thread-safety.txt */,
31160DCD1899540D0071EB17 /* trace.txt */,
31160DCE1899540D0071EB17 /* type.txt */,
31160DCF1899540D0071EB17 /* version-library.txt */,
31160DD01899540D0071EB17 /* version.txt */,
31160DD11899540D0071EB17 /* vm.txt */,
31160DD21899540D0071EB17 /* vman.txt */,
31160DD31899540D0071EB17 /* vmo1.txt */,
31160DD41899540D0071EB17 /* vmso.txt */,
31160DD51899540D0071EB17 /* writef.txt */,
);
name = Design;
sourceTree = "<group>";
};
3124CAB3156BE1B700753214 /* Tests */ = {
isa = PBXGroup;
children = (
@ -1764,6 +1907,7 @@
2D07B97B163705E400DB751B /* libsqlite3.dylib */,
3114A6D6156E9846001E0AA3 /* Tools */,
31A47BA8156C1E930039B1C2 /* MPS */,
31160D90189953D50071EB17 /* Design */,
3124CAB3156BE1B700753214 /* Tests */,
318DA8C21892B0B20089718C /* Benchmarks */,
31FCAE171769247F008C034C /* Scheme */,

View file

@ -90,6 +90,7 @@ shield_ Shield abstraction: separate control of collector access
sig_ Signatures in the MPS
splay_ Design of splay trees
sso1al_ Stack scanner for Digital Unix / Alpha systems
strategy_ Collection strategy
telemetry_ The design of the MPS telemetry mechanism
tests_ The design of MPS internal tests
thread-manager_ The design of the MPS thread manager
@ -156,6 +157,7 @@ writef_ The design of the MPS writef function
.. _sig: sig
.. _splay: splay
.. _sso1al: sso1al
.. _strategy: strategy
.. _telemetry: telemetry
.. _tests: tests
.. _thread-manager: thread-manager
@ -199,6 +201,7 @@ Document History
- 2013-05-22 GDR_ Add link to keyword-arguments.
- 2013-05-25 RB_ Replacing "cstyle" with reworked "guide.impl.c.format".
- 2013-06-07 RB_ Converting to reST_. Linking to [RB_2002-06-18]_.
- 2014-01-29 RB_ The arena no longer manages generation zonesets.
.. _RB: http://www.ravenbrook.com/consultants/rb
.. _NB: http://www.ravenbrook.com/consultants/nb

View file

@ -166,47 +166,14 @@ automatic-pool segment in any zone in the zoneset. It is not limited
to the segments actually associated with the condemned generation(s).
An attempt is made to use distinct zonesets for different generations.
Whenever a segment is allocated (``AMCBufferFill()``), a
``SegPref`` is created containing the generation number
(obtained from ``amcBuf->gen->pgen->nr``) and passed to
``SegAlloc()``. The arena keeps a zoneset for each generation
number (up to ``VMArenaGenCount``, defined in
``arenavm.c`` to be ``MPS_WORD_WIDTH/2``), and a
``freeSet``. The zoneset for each generation number starts out
empty, and the ``freeSet`` starts out ``ZoneSetUNIV``.
When a segment is allocated with a ``SegPref`` with a generation
number, an attempt is made to allocate it in the corresponding zoneset
(``pagesFindFreeInZones()``). If the zoneset is empty, an
attempt is made to allocate it in the ``freeSet`` zoneset.
After it is allocated, the zones it occupies are removed from the
``freeSet`` and (if there's a generation ``SegPref``)
added to the zoneset for that generation number.
Segments are allocated from ``AMCBufferFill()`` using ``ChainAlloc()``
which creates a ``SegPref`` using the zoneset from the generation's
``GenDesc``. The zoneset for each generation number starts out
empty. If the zoneset is empty, an attempt is made to allocate from a
free zone. The ``GenDesc`` zoneset is augmented with whichever zones the
new segment occupies.
Note that this zone placement code knows nothing of chains,
generations, pool classes, etc. It is based solely on the generation
*number*, so generations with the same number from different chains
share a zoneset preference for the purpose of placing newly allocated
segments. Combined with the fact that condemnation is per-zone, this
effectively means that generations in distinct chains are collected
together. One consequence of this is that we don't have a very fine
granularity of control over collection: a garbage collection of all
chains together is triggered by the most eager chain. There's no way
for a library or other small part of a client program to arrange
independent collection of a separate pool or chain.
When ``AMCBufferFill()`` gets the allocated segment back, it
adds it to the zoneset associated with that generation in the pool's
controlling chain. Note that a chain's per-generation zonesets, which
represent the zones in which segments for that generation in that
chain have been placed, are quite distinct from the arena-wide
per-generation-number zonesets, which represent the zones in which
segments for that generation number in any chain have been placed.
The arena-wide per-generation-number zoneset
``vmArena->genZoneSet[N]`` is augmented in
``vmAllocComm()``. The per-chain per-generation zoneset
``chain->gen[N].zones`` is augmented in
``PoolGenUpdateZones()``. Neither kind of zoneset can ever
shrink.
Note that this zoneset can never shrink.
Accounting
..........
@ -413,10 +380,12 @@ TODO: When do we do some tracing work? How much tracing work do we do?
Document History
----------------
- 2013-06-04 NB Checked this in although it's far from complete.
- 2013-06-04 NB_ Checked this in although it's far from complete.
Pasted in my 'ramping notes' from email, which mention some bugs
which I may have fixed (TODO: check this).
- 2014-01-29 RB_ The arena no longer manages generation zonesets.
.. _RB: http://www.ravenbrook.com/consultants/rb
.. _NB: http://www.ravenbrook.com/consultants/nb/