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_PASS,URIBL_BLOCKED,USER_AGENT_MUTT 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 7D212C282C7 for ; Thu, 31 Jan 2019 06:47:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5870120881 for ; Thu, 31 Jan 2019 06:47:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1548917258; bh=H7fjMS1op6TDONCNnQg0deCsxFPW1EnpjV8wGnZAmAk=; h=Date:From:To:Cc:Subject:References:In-Reply-To:List-ID:From; b=SR+ZHFIByjO3OyfYCT6y2veOx0T8mTL6+9CG0vigPUxOuiyiEutz2wDsM913PlzSp y0IsBxZMQrPpQS0Mv1QXXrvzSUcvDGtyJMLCCBoMhcyGj9sFx8gTZi0CHXbn2sS78a MXUpynfjOdm/uRNP3mETbRCNJxl2xQETvxxa4c6g= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728617AbfAaGrg (ORCPT ); Thu, 31 Jan 2019 01:47:36 -0500 Received: from mx2.suse.de ([195.135.220.15]:40694 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725863AbfAaGrg (ORCPT ); Thu, 31 Jan 2019 01:47:36 -0500 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 C6088B0EF; Thu, 31 Jan 2019 06:47:34 +0000 (UTC) Date: Thu, 31 Jan 2019 07:47:33 +0100 From: Michal Hocko To: Yang Shi Cc: hannes@cmpxchg.org, akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [RFC v2 PATCH] mm: vmscan: do not iterate all mem cgroups for global direct reclaim Message-ID: <20190131064733.GL18811@dhcp22.suse.cz> References: <1548799877-10949-1-git-send-email-yang.shi@linux.alibaba.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1548799877-10949-1-git-send-email-yang.shi@linux.alibaba.com> 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 Wed 30-01-19 06:11:17, Yang Shi wrote: > In current implementation, both kswapd and direct reclaim has to iterate > all mem cgroups. It is not a problem before offline mem cgroups could > be iterated. But, currently with iterating offline mem cgroups, it > could be very time consuming. In our workloads, we saw over 400K mem > cgroups accumulated in some cases, only a few hundred are online memcgs. > Although kswapd could help out to reduce the number of memcgs, direct > reclaim still get hit with iterating a number of offline memcgs in some > cases. We experienced the responsiveness problems due to this > occassionally. > > A simple test with pref shows it may take around 220ms to iterate 8K memcgs > in direct reclaim: > dd 13873 [011] 578.542919: vmscan:mm_vmscan_direct_reclaim_begin > dd 13873 [011] 578.758689: vmscan:mm_vmscan_direct_reclaim_end > So for 400K, it may take around 11 seconds to iterate all memcgs. > > Here just break the iteration once it reclaims enough pages as what > memcg direct reclaim does. This may hurt the fairness among memcgs. But > the cached iterator cookie could help to achieve the fairness more or > less. > > Cc: Johannes Weiner > Cc: Michal Hocko > Signed-off-by: Yang Shi Acked-by: Michal Hocko > --- > v2: Added some test data in the commit log > Updated commit log about iterator cookie could maintain fairness > Dropped !global_reclaim() since !current_is_kswapd() is good enough > > mm/vmscan.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/mm/vmscan.c b/mm/vmscan.c > index a714c4f..5e35796 100644 > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -2764,16 +2764,15 @@ static bool shrink_node(pg_data_t *pgdat, struct scan_control *sc) > sc->nr_reclaimed - reclaimed); > > /* > - * Direct reclaim and kswapd have to scan all memory > - * cgroups to fulfill the overall scan target for the > - * node. > + * Kswapd have to scan all memory cgroups to fulfill > + * the overall scan target for the node. > * > * Limit reclaim, on the other hand, only cares about > * nr_to_reclaim pages to be reclaimed and it will > * retry with decreasing priority if one round over the > * whole hierarchy is not sufficient. > */ > - if (!global_reclaim(sc) && > + if (!current_is_kswapd() && > sc->nr_reclaimed >= sc->nr_to_reclaim) { > mem_cgroup_iter_break(root, memcg); > break; > -- > 1.8.3.1 > -- Michal Hocko SUSE Labs