Sharing Page Tables in the Linux Kernel
An ongoing barrier to scalability has been the amount of memory taken by page tables, especially when large numbers of tasks are mapping the same shared region. A solution for this problem is for those tasks to share a common set of page tables for those regions.
An additional benefit to implementing shared page tables is the ability to share all the page tables during fork in a copy-on-write fashion. This sharing speeds up fork immensely for large processes, especially given the increased overhead introduced by rmap.
This paper discusses my implementation of shared page tables. It covers the areas that are improved by sharing as well as its limitations. I will also cover the highlights of how shared page tables was implemented and discuss some of the remaining issues around it.
This implementation is based on an initial design and implementation done by Daniel Phillips last year and posted to the kernel mailing list.