Ballooned pages will be marked as MADV_DONTNEED by the hypervisor and shouldn't be given to the host ksmd to scan. Therefore, it is not necessary to zero ballooned pages, which is very time consuming when the page amount is large. The ongoing fast balloon tests show that the time to balloon 7G pages is increased from ~491ms to 2.8 seconds with __GFP_ZERO added. So, this patch removes the flag. Signed-off-by: Wei Wang <wei.w.wang at intel.com> --- mm/balloon_compaction.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/balloon_compaction.c b/mm/balloon_compaction.c index 9075aa5..b06d9fe 100644 --- a/mm/balloon_compaction.c +++ b/mm/balloon_compaction.c @@ -24,7 +24,7 @@ struct page *balloon_page_enqueue(struct balloon_dev_info *b_dev_info) { unsigned long flags; struct page *page = alloc_page(balloon_mapping_gfp_mask() | - __GFP_NOMEMALLOC | __GFP_NORETRY | __GFP_ZERO); + __GFP_NOMEMALLOC | __GFP_NORETRY); if (!page) return NULL; -- 2.7.4
On Mon 31-07-17 12:13:33, Wei Wang wrote:> Ballooned pages will be marked as MADV_DONTNEED by the hypervisor and > shouldn't be given to the host ksmd to scan.Could you point me where this MADV_DONTNEED is done, please?> Therefore, it is not > necessary to zero ballooned pages, which is very time consuming when > the page amount is large. The ongoing fast balloon tests show that the > time to balloon 7G pages is increased from ~491ms to 2.8 seconds with > __GFP_ZERO added. So, this patch removes the flag.Please make it obvious that this is a revert of bb01b64cfab7 ("mm/balloon_compaction.c: enqueue zero page to balloon device").> Signed-off-by: Wei Wang <wei.w.wang at intel.com> > --- > mm/balloon_compaction.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/mm/balloon_compaction.c b/mm/balloon_compaction.c > index 9075aa5..b06d9fe 100644 > --- a/mm/balloon_compaction.c > +++ b/mm/balloon_compaction.c > @@ -24,7 +24,7 @@ struct page *balloon_page_enqueue(struct balloon_dev_info *b_dev_info) > { > unsigned long flags; > struct page *page = alloc_page(balloon_mapping_gfp_mask() | > - __GFP_NOMEMALLOC | __GFP_NORETRY | __GFP_ZERO); > + __GFP_NOMEMALLOC | __GFP_NORETRY); > if (!page) > return NULL; > > -- > 2.7.4 >-- Michal Hocko SUSE Labs
On 07/31/2017 02:55 PM, Michal Hocko wrote:> On Mon 31-07-17 12:13:33, Wei Wang wrote: >> Ballooned pages will be marked as MADV_DONTNEED by the hypervisor and >> shouldn't be given to the host ksmd to scan. > Could you point me where this MADV_DONTNEED is done, please?Sure. It's done in the hypervisor when the balloon pages are received. Please see line 40 at https://github.com/qemu/qemu/blob/master/hw/virtio/virtio-balloon.c> >> Therefore, it is not >> necessary to zero ballooned pages, which is very time consuming when >> the page amount is large. The ongoing fast balloon tests show that the >> time to balloon 7G pages is increased from ~491ms to 2.8 seconds with >> __GFP_ZERO added. So, this patch removes the flag. > Please make it obvious that this is a revert of bb01b64cfab7 > ("mm/balloon_compaction.c: enqueue zero page to balloon device"). > >Ok, will do. Best, Wei