On Thu, 2010-09-23 at 16:15 +0100, Arnd Bergmann wrote:
On Thursday 23 September 2010, Nicolas Pitre wrote:
This highmem topic comes from the fact that highmem will be needed in the period of time between now and LPAE where we have boards with lots of memory but we can't address it all without highmem (unless we want to revisit the 3g/1g split, but I personally think not).
Note that LPAE does require highmem to be useful. The only way highmem could be avoided is to move to a 64-bit architecture.
Right, I'd even say LPAE can only make things worse because people will stick even more memory into their systems, most of which then becomes highmem.
If you really need so much memory, it's more efficient to have LPAE +highmem than a swap device. The problem is if the OS doesn't need so much memory but it is available, Linux tries to allocate from highmem first. What could help is a different zone fall back mechanism trying to allocate from lowmem up to a certain threshold.
Another option would be to use the highmem for hosting a swap via some form of ramdisk or slram/phram.
Yet another option is some dynamic memory hotplug based on the amount of spare memory you've got.
We might be able to use MMU features to implement a 4G/4G split, which lets us use 3GB physical RAM or more (depending on vmalloc and I/O sizes) without highmem, but can have an even higher cost by significantly slowing down uaccess.
It would be tricky to create temporary mappings for uaccess (and may involve get_user_pages or some form of pinning the pages in memory).