Re: [RFC PATCH] mm/page_reporting: Adjust threshold according to MAX_ORDER

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 ;)




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux