Re: [RFC PATCH 3/3] mm: support free hugepage pre zero out

2020-12-22 Thread Liang Li
> > Free page reporting in virtio-balloon doesn't give you any guarantees
> > regarding zeroing of pages. Take a look at the QEMU implementation -
> > e.g., with vfio all reports are simply ignored.
> >
> > Also, I am not sure if mangling such details ("zeroing of pages") into
> > the page reporting infrastructure is a good idea.
> >
>
> Oh, now I get what you are doing here, you rely on zero_free_pages of
> your other patch series and are not relying on virtio-balloon free page
> reporting to do the zeroing.
>
> You really should have mentioned that this patch series relies on the
> other one and in which way.

I am sorry for that. After I sent out the patch, I realized I should
mention that, so I sent out an updated version which added the
information you mentioned :)

Thanks !
Liang



Re: [RFC PATCH 3/3] mm: support free hugepage pre zero out

2020-12-22 Thread David Hildenbrand
On 22.12.20 09:31, David Hildenbrand wrote:
> On 22.12.20 08:49, Liang Li wrote:
>> 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 
>> Cc: Mel Gorman 
>> Cc: Andrea Arcangeli 
>> Cc: Dan Williams 
>> Cc: Dave Hansen 
>> Cc: David Hildenbrand   
>> Cc: Michal Hocko  
>> Cc: Andrew Morton 
>> Cc: Alex Williamson 
>> Cc: Michael S. Tsirkin 
>> Cc: Jason Wang 
>> Cc: Mike Kravetz 
>> Cc: Liang Li 
>> Signed-off-by: Liang Li 
>> ---
>>  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(_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(_hugepage_dev_info);
>>  pr_info("Zero page enabled\n");
>>  } else {
>>  page_reporting_unregister(_page_dev_info);
>> +hugepage_reporting_unregister(_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(_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(_page_dev_info);
>> +err |= hugepage_reporting_register(_hugepage_dev_info);
>>  pr_info("Zero page enabled\n");
>>  }
>>  
>>
> 
> Free page reporting in virtio-balloon doesn't give you any guarantees
> regarding zeroing of pages. Take a look at the QEMU implementation -
> e.g., with vfio all reports are simply ignored.
> 
> Also, I am not sure if mangling such details ("zeroing of pages") into
> the page reporting infrastructure is a good idea.
> 

Oh, now I get what you are doing here, you rely on zero_free_pages of
your other patch series and are not relying on virtio-balloon free page
reporting to do the zeroing.

You really should have mentioned that this patch series relies on the
other one and in which way.

-- 
Thanks,

David / dhildenb




Re: [RFC PATCH 3/3] mm: support free hugepage pre zero out

2020-12-22 Thread David Hildenbrand
On 22.12.20 08:49, Liang Li wrote:
> 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 
> Cc: Mel Gorman 
> Cc: Andrea Arcangeli 
> Cc: Dan Williams 
> Cc: Dave Hansen 
> Cc: David Hildenbrand   
> Cc: Michal Hocko  
> Cc: Andrew Morton 
> Cc: Alex Williamson 
> Cc: Michael S. Tsirkin 
> Cc: Jason Wang 
> Cc: Mike Kravetz 
> Cc: Liang Li 
> Signed-off-by: Liang Li 
> ---
>  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(_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(_hugepage_dev_info);
>   pr_info("Zero page enabled\n");
>   } else {
>   page_reporting_unregister(_page_dev_info);
> + hugepage_reporting_unregister(_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(_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(_page_dev_info);
> + err |= hugepage_reporting_register(_hugepage_dev_info);
>   pr_info("Zero page enabled\n");
>   }
>  
> 

Free page reporting in virtio-balloon doesn't give you any guarantees
regarding zeroing of pages. Take a look at the QEMU implementation -
e.g., with vfio all reports are simply ignored.

Also, I am not sure if mangling such details ("zeroing of pages") into
the page reporting infrastructure is a good idea.

-- 
Thanks,

David / dhildenb




[RFC PATCH 3/3] mm: support free hugepage pre zero out

2020-12-21 Thread Liang Li
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 
Cc: Mel Gorman 
Cc: Andrea Arcangeli 
Cc: Dan Williams 
Cc: Dave Hansen 
Cc: David Hildenbrand   
Cc: Michal Hocko  
Cc: Andrew Morton 
Cc: Alex Williamson 
Cc: Michael S. Tsirkin 
Cc: Jason Wang 
Cc: Mike Kravetz 
Cc: Liang Li 
Signed-off-by: Liang Li 
---
 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(_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(_hugepage_dev_info);
pr_info("Zero page enabled\n");
} else {
page_reporting_unregister(_page_dev_info);
+   hugepage_reporting_unregister(_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(_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(_page_dev_info);
+   err |= hugepage_reporting_register(_hugepage_dev_info);
pr_info("Zero page enabled\n");
}
 
-- 
2.18.2