TAO is an umbrella project aiming at a better economy of physical contiguity viewed as a valuable resource. A few examples are: 1. A multi-tenant system can have guaranteed THP coverage while hosting abusers/misusers of the resource. 2. Abusers/misusers, e.g., workloads excessively requesting and then splitting THPs, should be punished if necessary. 3. Good citizens should be awarded with, e.g., lower allocation latency and less cost of metadata (struct page). 4. Better interoperability with userspace memory allocators when transacting the resource. This project puts the same emphasis on the established use case for servers and the emerging use case for clients so that client workloads like Android and ChromeOS can leverage the recent multi-sized THPs [1][2]. Chapter One introduces the cornerstone of TAO: an abstraction called policy (virtual) zones, which are overlayed on the physical zones. This is in line with item 1 above. A new door is open after Chapter One. The following two chapters discuss the reverse of THP collapsing, called THP shattering, and THP HVO, which brings the hugeTLB feature [3] to THP. They are in line with items 2 & 3 above. Advanced use cases are discussed in Epilogue, since they require the cooperation of userspace memory allocators. This is in line with item 4 above. [1] https://lwn.net/Articles/932386/ [2] https://lwn.net/Articles/937239/ [3] https://www.kernel.org/doc/html/next/mm/vmemmap_dedup.html Yu Zhao (4): THP zones: the use cases of policy zones THP shattering: the reverse of collapsing THP HVO: bring the hugeTLB feature to THP Profile-Guided Heap Optimization and THP fungibility .../admin-guide/kernel-parameters.txt | 10 + drivers/virtio/virtio_mem.c | 2 +- include/linux/gfp.h | 24 +- include/linux/huge_mm.h | 6 - include/linux/memcontrol.h | 5 + include/linux/mempolicy.h | 2 +- include/linux/mm.h | 140 ++++++ include/linux/mm_inline.h | 24 + include/linux/mm_types.h | 8 +- include/linux/mmzone.h | 53 +- include/linux/nodemask.h | 2 +- include/linux/rmap.h | 4 + include/linux/vm_event_item.h | 5 +- include/trace/events/mmflags.h | 4 +- init/main.c | 1 + mm/compaction.c | 12 + mm/gup.c | 3 +- mm/huge_memory.c | 304 ++++++++++-- mm/hugetlb_vmemmap.c | 2 +- mm/internal.h | 47 +- mm/madvise.c | 11 +- mm/memcontrol.c | 47 ++ mm/memory-failure.c | 2 +- mm/memory.c | 11 +- mm/mempolicy.c | 14 +- mm/migrate.c | 51 +- mm/mm_init.c | 452 ++++++++++-------- mm/page_alloc.c | 199 +++++++- mm/page_isolation.c | 2 +- mm/rmap.c | 21 +- mm/shmem.c | 4 +- mm/swap_slots.c | 3 +- mm/truncate.c | 6 +- mm/userfaultfd.c | 2 +- mm/vmscan.c | 41 +- mm/vmstat.c | 12 +- 36 files changed, 1194 insertions(+), 342 deletions(-) base-commit: d206a76d7d2726f3b096037f2079ce0bd3ba329b -- 2.44.0.rc1.240.g4c46232300-goog