From: Matthew Wilcox <mawilcox@xxxxxxxxxxxxx> Version 1 was completely wrong-headed and I have repented of the error of my ways. Thanks for educating me. I still think it's possible to improve on the current state of the page_frag allocator, and here are eight patches, each of which I think represents an improvement. They're not all that interlinked, although there will be textual conflicts, so I'll be happy to revise and drop any that are not actual improvements. I have discovered (today), much to my chagrin, that testing using trinity in KVM doesn't actually test the page_frag allocator. I don't understand why not. So, this turns out to only be compile tested. Sorry. The net effect of all these patches is a reduction of four instructions in the fastpath of the allocator on x86. The page_frag_cache structure also shrinks, to as small as 8 bytes on 32-bit with CONFIG_BASE_SMALL. The last patch is probably wrong. It'll definitely be inaccurate because the call to page_frag_free() may not be the call which frees a page; there's a really unlikely race where the page cache finds a stale RCU pointer, bumps its refcount, discovers it's not the page it was looking for and calls put_page(), which might end up being the last reference count. We can do something about that inaccuracy, but I don't even know if this is the best approach to accounting these pages. Matthew Wilcox (8): page_frag_cache: Remove pfmemalloc bool page_frag_cache: Move slowpath code from page_frag_alloc page_frag_cache: Rename 'nc' to 'pfc' page_frag_cache: Rename fragsz to size page_frag_cache: Save memory on small machines page_frag_cache: Use a mask instead of offset page_frag: Update documentation page_frag: Account allocations Documentation/vm/page_frags | 42 ----------- Documentation/vm/page_frags.rst | 24 +++++++ include/linux/mm_types.h | 20 ++++-- include/linux/mmzone.h | 3 +- mm/page_alloc.c | 155 ++++++++++++++++++++++++---------------- net/core/skbuff.c | 5 +- 6 files changed, 135 insertions(+), 114 deletions(-) delete mode 100644 Documentation/vm/page_frags create mode 100644 Documentation/vm/page_frags.rst -- 2.16.2