We then keep anonymous pages on a per container reclaim_struct, thesepages are fully accounted to each container.

We keep mapped pagecache pages on per inode reclaim_structs, these filescould be shared between containers and we could either just account allpages belonging to each file proportional to the number of containersinvolved, or do a more precise accounting.

We keep unmapped pagecache pages on a global reclaim_struct, these pagescan, in general, not be pinned to a specific container; all we can do iskeep a floating proportion relative to container 'get' events(find_get_page() and perhaps add_to_page_cache()).

Reclaim will then have to fairly reclaim pages from all of these lists.If we schedule such that it appears that these lists are parallelinstead of serial - that is a each tail is really a tail, not the headof another list - the current reclaim semantics are preserved.

The slab shrinker should be called proportional to the containers sizerelative to the machine.

Global reclaim will have to call each container reclaim in proportionalfashion.

The biggest problem with this approach is that there is no per zonereclaim left, which is relied upon by the allocator to provide freepages in a given physical address range. However there has been talk tocreate a proper range allocator independent of zones.