= 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 || || || ||