Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754597AbdCMUEv (ORCPT ); Mon, 13 Mar 2017 16:04:51 -0400 Received: from gum.cmpxchg.org ([85.214.110.215]:40120 "EHLO gum.cmpxchg.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752948AbdCMUEb (ORCPT ); Mon, 13 Mar 2017 16:04:31 -0400 Date: Mon, 13 Mar 2017 15:58:33 -0400 From: Johannes Weiner To: Shakeel Butt Cc: Mel Gorman , Michal Hocko , Vlastimil Babka , Andrew Morton , Jia He , Hillf Danton , linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] mm: fix condition for throttle_direct_reclaim Message-ID: <20170313195833.GA25454@cmpxchg.org> References: <20170310194620.5021-1-shakeelb@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170310194620.5021-1-shakeelb@google.com> User-Agent: Mutt/1.8.0 (2017-02-23) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1808 Lines: 43 Hi Shakeel, On Fri, Mar 10, 2017 at 11:46:20AM -0800, Shakeel Butt wrote: > Recently kswapd has been modified to give up after MAX_RECLAIM_RETRIES > number of unsucessful iterations. Before going to sleep, kswapd thread > will unconditionally wakeup all threads sleeping on pfmemalloc_wait. > However the awoken threads will recheck the watermarks and wake the > kswapd thread and sleep again on pfmemalloc_wait. There is a chance > of continuous back and forth between kswapd and direct reclaiming > threads if the kswapd keep failing and thus defeat the purpose of > adding backoff mechanism to kswapd. So, add kswapd_failures check > on the throttle_direct_reclaim condition. > > Signed-off-by: Shakeel Butt You're right, the way it works right now is kind of lame. Did you observe continued kswapd spinning because of the wakeup ping-pong? > +static bool should_throttle_direct_reclaim(pg_data_t *pgdat) > +{ > + return (pgdat->kswapd_failures < MAX_RECLAIM_RETRIES && > + !pfmemalloc_watermark_ok(pgdat)); > +} > + > /* > * Throttle direct reclaimers if backing storage is backed by the network > * and the PFMEMALLOC reserve for the preferred node is getting dangerously > @@ -2873,7 +2879,7 @@ static bool throttle_direct_reclaim(gfp_t gfp_mask, struct zonelist *zonelist, > > /* Throttle based on the first usable node */ > pgdat = zone->zone_pgdat; > - if (pfmemalloc_watermark_ok(pgdat)) > + if (!should_throttle_direct_reclaim(pgdat)) > goto out; Instead of a second helper function, could you rename pfmemalloc_watermark_ok() and add the kswapd_failure check at the very beginning of that function? Because that check fits nicely with the comment about kswapd having to be awake, too. We need kswapd operational when throttling reclaimers. Thanks