Re: Large memory system

Manfred Spraul
1999-02-10T17:08:09Z

>The primary reason for adding more memory is for process anonymous
>pages, not for cache, so this is really of limited value on its own.

This was not intended as a solution, but as a new idea:
- the memory > 1 GB is allocated one page at a time.
- some 'struct page' fields are useless for high memory.
- if someone who is not prepared to handle high memory finds such a page,
the computer will crash anyway.
- high memory needs bounce buffers, so a special if(highmem()) is required.
---> no need to use mem_map, add an independant array for high_mem.

The advantage is that you can add new fields to such an array (e.g. true
LRU for a cache), without causing problems in the remaining kernel.

If you restrict the remaining memory to unshared pages (i.e. no COW), then
the implementation should be really simple:

* all page-in's go to normal memory (i.e. < 1 GB) (swap cache compatible)
* if try_to_swap_out() want's to discard a page, it is first moved to high
memory.
(this break's any COW links.)
* if <shrink_highmem> decides that a page should be discarded, then the page
is removed from the vma, a bounce buffer is created, written out & added to
the swap cache.

I'm sure that this could be extended to COW pages, but I haven't yet
understood the COW implementation :=)

Regards,
Manfred