On Tue, 1 Jun 2021 11:33:19 +0800 Gavin Shan <gshan@xxxxxxxxxx> wrote: > The PAGE_REPORTING_MIN_ORDER is equal to @pageblock_order, taken as > minimal order (threshold) to trigger page reporting. The page reporting > is never triggered with the following configurations and settings on > aarch64. In the particular scenario, the page reporting won't be triggered > until the largest (2 ^ (MAX_ORDER-1)) free area is achieved from the > page freeing. The condition is very hard, or even impossible to be met. > > CONFIG_ARM64_PAGE_SHIFT: 16 > CONFIG_HUGETLB_PAGE: Y > CONFIG_HUGETLB_PAGE_SIZE_VARIABLE: N > pageblock_order: 13 > CONFIG_FORCE_MAX_ZONEORDER: 14 > MAX_ORDER: 14 > > The issue can be reproduced in VM, running kernel with above configurations > and settings. The 'memhog' is used inside the VM to access 512MB anonymous > area. The QEMU's RSS doesn't drop accordingly after 'memhog' exits. > > /home/gavin/sandbox/qemu.main/build/qemu-system-aarch64 \ > -accel kvm -machine virt,gic-version=host \ > -cpu host -smp 8,sockets=2,cores=4,threads=1 -m 4096M,maxmem=64G \ > -object memory-backend-ram,id=mem0,size=2048M \ > -object memory-backend-ram,id=mem1,size=2048M \ > -numa node,nodeid=0,cpus=0-3,memdev=mem0 \ > -numa node,nodeid=1,cpus=4-7,memdev=mem1 \ > : \ > -device virtio-balloon-pci,id=balloon0,free-page-reporting=yes > > This tries to fix the issue by adjusting the threshold to the smaller value > of @pageblock_order and (MAX_ORDER/2). With this applied, the QEMU's RSS > drops after 'memhog' exits. > Sounds promising, but... > --- a/mm/page_reporting.h > +++ b/mm/page_reporting.h > @@ -10,9 +10,10 @@ > #include <linux/pgtable.h> > #include <linux/scatterlist.h> > > -#define PAGE_REPORTING_MIN_ORDER pageblock_order > - > #ifdef CONFIG_PAGE_REPORTING > +#define PAGE_REPORTING_MIN_ORDER \ > + min_t(unsigned int, pageblock_order, (MAX_ORDER / 2)) > + > DECLARE_STATIC_KEY_FALSE(page_reporting_enabled); > void __page_reporting_notify(void); Could you please redo this as a regular old static function in page_reporting.c? Bonus points for commenting its design ;)