A few years ago, Rik put up a web page outlining why VM research is needed. In the early 1980's a lot of people were of the opinion that "everything there is to know about memory management has been done". This is like saying we will never need a sort algorithm besides bubble sort. Both 1970's VM knowledge and bubble sort have been obsoleted by scalability issues, and research is needed again...
If you know of a specific problem area that could use research, please add it to the /ResearchWanted page.
Superpages utilise the ability of many processors to use not just a base page size, but multiples of it. In the current kernel we have the HugeTLB system, which is suitable for x86 which has only two possible page sizes; small (4K) or huge (4MB). Other systems, such as IA64 can have many page sizes inbetween, and you can greatly reduce TLB usage by mapping in larger pages.
Page Table Abstraction
3/4 Level page tables aren't a great solution for a sparsely populated 64 bit address space. However, internally the kernel is very much tied to the PGD/PMD/PTE structure for page tables (stemming from its x86 heritage where this is the most sensible solution).
Alternate Page Tables
Benchmarking File System Benchmarks
A team at the IBM LTC is currently investigating a new memory management technique to reduce memory fragmentation to better support, for example, large-pages. Memory is handed out to a consumer (e.g., a process or group of files) in larger (variable-sized) chunks and then internally sub-allocated by that consumer to handle its needs. All the memory handed out to a single consumer has the same expected lifetime, e.g., the computation memory handed to a process has the expected lifetime of that process. Hence, handing out contiguous memory to that consumer naturally avoids fragmentation. We also expect we can achieve performance improvements due to reduced synchronization and more cache friendly data structures.
The current implementation has been done on K42 (http://www.research.ibm.com/K42/) but we are currently looking at implementing it in Linux. Some more info which is mostly K42 specific is on the K42 wiki here: