From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.6 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0830EC433FF for ; Tue, 6 Aug 2019 08:44:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D3C7B2086D for ; Tue, 6 Aug 2019 08:44:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1565081047; bh=Q9PXvEJ53gGURYNGwQetm7msZRvjyEA7p/QnRFQEEsk=; h=Date:From:To:Cc:Subject:References:In-Reply-To:List-ID:From; b=CCnC8Tc5sxZiFJRS9bQE2gCad1UNAjX6Xly7nVy+vGgDNlKQo2bAgx7QFZR3NilsV zhscMZHjJv2/Afc6rNicEc2bzAgber3sfir4RFLo4vB+HkN+2YOSBBAQg+s3STZkGi XHhHzi9MDnyxJ9p/dhEfs752UsYm2pZJOtsILvEo= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732283AbfHFIoH (ORCPT ); Tue, 6 Aug 2019 04:44:07 -0400 Received: from mx2.suse.de ([195.135.220.15]:60346 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726713AbfHFIoG (ORCPT ); Tue, 6 Aug 2019 04:44:06 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id C4ACEAC97; Tue, 6 Aug 2019 08:44:04 +0000 (UTC) Date: Tue, 6 Aug 2019 10:43:57 +0200 From: Michal Hocko To: "Joel Fernandes (Google)" Cc: linux-kernel@vger.kernel.org, Alexey Dobriyan , Andrew Morton , Borislav Petkov , Brendan Gregg , Catalin Marinas , Christian Hansen , dancol@google.com, fmayer@google.com, "H. Peter Anvin" , Ingo Molnar , joelaf@google.com, Jonathan Corbet , Kees Cook , kernel-team@android.com, linux-api@vger.kernel.org, linux-doc@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, Mike Rapoport , minchan@kernel.org, namhyung@google.com, paulmck@linux.ibm.com, Robin Murphy , Roman Gushchin , Stephen Rothwell , surenb@google.com, Thomas Gleixner , tkjos@google.com, Vladimir Davydov , Vlastimil Babka , Will Deacon Subject: Re: [PATCH v4 4/5] page_idle: Drain all LRU pagevec before idle tracking Message-ID: <20190806084357.GK11812@dhcp22.suse.cz> References: <20190805170451.26009-1-joel@joelfernandes.org> <20190805170451.26009-4-joel@joelfernandes.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190805170451.26009-4-joel@joelfernandes.org> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon 05-08-19 13:04:50, Joel Fernandes (Google) wrote: > During idle tracking, we see that sometimes faulted anon pages are in > pagevec but are not drained to LRU. Idle tracking considers pages only > on LRU. Drain all CPU's LRU before starting idle tracking. Please expand on why does this matter enough to introduce a potentially expensinve draining which has to schedule a work on each CPU and wait for them to finish. > Signed-off-by: Joel Fernandes (Google) > --- > mm/page_idle.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/mm/page_idle.c b/mm/page_idle.c > index a5b00d63216c..2972367a599f 100644 > --- a/mm/page_idle.c > +++ b/mm/page_idle.c > @@ -180,6 +180,8 @@ static ssize_t page_idle_bitmap_read(struct file *file, struct kobject *kobj, > unsigned long pfn, end_pfn; > int bit, ret; > > + lru_add_drain_all(); > + > ret = page_idle_get_frames(pos, count, NULL, &pfn, &end_pfn); > if (ret == -ENXIO) > return 0; /* Reads beyond max_pfn do nothing */ > @@ -211,6 +213,8 @@ static ssize_t page_idle_bitmap_write(struct file *file, struct kobject *kobj, > unsigned long pfn, end_pfn; > int bit, ret; > > + lru_add_drain_all(); > + > ret = page_idle_get_frames(pos, count, NULL, &pfn, &end_pfn); > if (ret) > return ret; > @@ -428,6 +432,8 @@ ssize_t page_idle_proc_generic(struct file *file, char __user *ubuff, > walk.private = &priv; > walk.mm = mm; > > + lru_add_drain_all(); > + > down_read(&mm->mmap_sem); > > /* > -- > 2.22.0.770.g0f2c4a37fd-goog -- Michal Hocko SUSE Labs