This patch add support of pre zero out free hugepage, we can use this feature to speed up page population and page fault handing.
Cc: Alexander Duyck <alexander.h.du...@linux.intel.com> Cc: Mel Gorman <mgor...@techsingularity.net> Cc: Andrea Arcangeli <aarca...@redhat.com> Cc: Dan Williams <dan.j.willi...@intel.com> Cc: Dave Hansen <dave.han...@intel.com> Cc: David Hildenbrand <da...@redhat.com> Cc: Michal Hocko <mho...@suse.com> Cc: Andrew Morton <a...@linux-foundation.org> Cc: Alex Williamson <alex.william...@redhat.com> Cc: Michael S. Tsirkin <m...@redhat.com> Cc: Jason Wang <jasow...@redhat.com> Cc: Mike Kravetz <mike.krav...@oracle.com> Cc: Liang Li <liliang...@gmail.com> Signed-off-by: Liang Li <liliang...@didiglobal.com> --- mm/page_prezero.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/mm/page_prezero.c b/mm/page_prezero.c index c8ce720bfc54..dff4e0adf402 100644 --- a/mm/page_prezero.c +++ b/mm/page_prezero.c @@ -26,6 +26,7 @@ static unsigned long delay_millisecs = 1000; static unsigned long zeropage_enable __read_mostly; static DEFINE_MUTEX(kzeropaged_mutex); static struct page_reporting_dev_info zero_page_dev_info; +static struct page_reporting_dev_info zero_hugepage_dev_info; inline void clear_zero_page_flag(struct page *page, int order) { @@ -69,9 +70,17 @@ static int start_kzeropaged(void) zero_page_dev_info.delay_jiffies = msecs_to_jiffies(delay_millisecs); err = page_reporting_register(&zero_page_dev_info); + + zero_hugepage_dev_info.report = zero_free_pages; + zero_hugepage_dev_info.mini_order = mini_page_order; + zero_hugepage_dev_info.batch_size = batch_size; + zero_hugepage_dev_info.delay_jiffies = msecs_to_jiffies(delay_millisecs); + + err |= hugepage_reporting_register(&zero_hugepage_dev_info); pr_info("Zero page enabled\n"); } else { page_reporting_unregister(&zero_page_dev_info); + hugepage_reporting_unregister(&zero_hugepage_dev_info); pr_info("Zero page disabled\n"); } @@ -90,7 +99,15 @@ static int restart_kzeropaged(void) zero_page_dev_info.batch_size = batch_size; zero_page_dev_info.delay_jiffies = msecs_to_jiffies(delay_millisecs); + hugepage_reporting_unregister(&zero_hugepage_dev_info); + + zero_hugepage_dev_info.report = zero_free_pages; + zero_hugepage_dev_info.mini_order = mini_page_order; + zero_hugepage_dev_info.batch_size = batch_size; + zero_hugepage_dev_info.delay_jiffies = msecs_to_jiffies(delay_millisecs); + err = page_reporting_register(&zero_page_dev_info); + err |= hugepage_reporting_register(&zero_hugepage_dev_info); pr_info("Zero page enabled\n"); } -- 2.18.2