= Requirements =
* A container must have some limit on the amount of memory it may use.
* The overhead in storage, processing time, and dedicated lines of code to the greater kernel should be minimized
* Should allow runtime flexibility in size and number of containers
* We should be able to change limits easily
* We should be able to create and destroy them easily to satisfy the needs of application containers (not all containers are long-lived)
* Memory which is private to the container (say, anonymous memory) must be strictly accounted to that container
* Memory for files may be accounted to either the container or a shared pool
* Some care should be taken to ensure that a container may not abuse this shared pool
* It is preferable to actually determine when sharing is "actually" occurring, but approximate metrics should be OK. This requirement is very secondary to any overhead which it might exhibit.
== Software Zones ==
Use the existing Linux zone model to create sets of contiguous memory. Each of these is a subset of a current 'struct zone'. Each container gets one or more of these zones from which to allocate its pages. Pages shared between containers will be placed in centralized, "shared" zones.
== Static Page Ownership ==
|| || Software Zones || Static Page Ownership || Partial Page Ownership ||
|| enforces memory limits || <bgcolor="green"> || <bgcolor="green"> ||<bgcolor="green"> ||