From patchwork Mon Apr 5 17:08:35 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tim Chen X-Patchwork-Id: 12183471 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=-16.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT 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 4C18AC433B4 for ; Mon, 5 Apr 2021 18:09:21 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id D5A27613B1 for ; Mon, 5 Apr 2021 18:09:20 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D5A27613B1 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 641176B0088; Mon, 5 Apr 2021 14:09:19 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5C9646B008A; Mon, 5 Apr 2021 14:09:19 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4422A6B0089; Mon, 5 Apr 2021 14:09:19 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0114.hostedemail.com [216.40.44.114]) by kanga.kvack.org (Postfix) with ESMTP id 1D3FC6B0087 for ; Mon, 5 Apr 2021 14:09:19 -0400 (EDT) Received: from smtpin26.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id D1F0B180AD83B for ; Mon, 5 Apr 2021 18:09:18 +0000 (UTC) X-FDA: 77999100396.26.F6FD9F8 Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by imf06.hostedemail.com (Postfix) with ESMTP id 2444EC0001F7 for ; Mon, 5 Apr 2021 18:09:19 +0000 (UTC) IronPort-SDR: V1kC/6D5hzCDtqm9knWTK92W7FccoER0WEzw9MHTi89A3EI/xY3aOTqfW5ty4/Qf1Pzx+1EuZC Gq4SBa7/6pYA== X-IronPort-AV: E=McAfee;i="6000,8403,9945"; a="172968260" X-IronPort-AV: E=Sophos;i="5.81,307,1610438400"; d="scan'208";a="172968260" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Apr 2021 11:09:17 -0700 IronPort-SDR: Z2d3PhVq6ZdULJ11AoNx+8S2Kcbx3ybsA+3K/PIxzUJNYVASRhxqILbG3I8X2iZHEYMANSa1fu Bl97Vua6IcsQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.81,307,1610438400"; d="scan'208";a="448153974" Received: from skl-02.jf.intel.com ([10.54.74.28]) by fmsmga002.fm.intel.com with ESMTP; 05 Apr 2021 11:09:17 -0700 From: Tim Chen To: Michal Hocko Cc: Tim Chen , Johannes Weiner , Andrew Morton , Dave Hansen , Ying Huang , Dan Williams , David Rientjes , Shakeel Butt , linux-mm@kvack.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH v1 11/11] mm: Wakeup kswapd if toptier memory need soft reclaim Date: Mon, 5 Apr 2021 10:08:35 -0700 Message-Id: <9d6b4eff73aef26fff3ecfbfc0693b84309d8b4c.1617642418.git.tim.c.chen@linux.intel.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: References: MIME-Version: 1.0 X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 2444EC0001F7 X-Stat-Signature: 1nph6phjnk7myupwn77o8x34z8sxquyp Received-SPF: none (linux.intel.com>: No applicable sender policy available) receiver=imf06; identity=mailfrom; envelope-from=""; helo=mga17.intel.com; client-ip=192.55.52.151 X-HE-DKIM-Result: none/none X-HE-Tag: 1617646159-755494 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Detect during page allocation whether free toptier memory is low. If so, wake up kswapd to reclaim memory from those mem cgroups that have exceeded their limit. Signed-off-by: Tim Chen --- include/linux/mmzone.h | 3 +++ mm/page_alloc.c | 2 ++ mm/vmscan.c | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 789319dffe1c..3603948e95cc 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -886,6 +886,8 @@ bool zone_watermark_ok(struct zone *z, unsigned int order, unsigned int alloc_flags); bool zone_watermark_ok_safe(struct zone *z, unsigned int order, unsigned long mark, int highest_zoneidx); +bool pgdat_toptier_balanced(pg_data_t *pgdat, int order, int classzone_idx); + /* * Memory initialization context, use to differentiate memory added by * the platform statically or via memory hotplug interface. @@ -1466,5 +1468,6 @@ void sparse_init(void); #endif #endif /* !__GENERATING_BOUNDS.H */ + #endif /* !__ASSEMBLY__ */ #endif /* _LINUX_MMZONE_H */ diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 91212a837d8e..ca8aa789a967 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -3519,6 +3519,8 @@ struct page *rmqueue(struct zone *preferred_zone, if (test_bit(ZONE_BOOSTED_WATERMARK, &zone->flags)) { clear_bit(ZONE_BOOSTED_WATERMARK, &zone->flags); wakeup_kswapd(zone, 0, 0, zone_idx(zone)); + } else if (!pgdat_toptier_balanced(zone->zone_pgdat, order, zone_idx(zone))) { + wakeup_kswapd(zone, 0, 0, zone_idx(zone)); } VM_BUG_ON_PAGE(page && bad_range(zone, page), page); diff --git a/mm/vmscan.c b/mm/vmscan.c index 270880c8baef..8fe709e3f5e4 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -3625,7 +3625,7 @@ static bool pgdat_balanced(pg_data_t *pgdat, int order, int highest_zoneidx) return false; } -static bool pgdat_toptier_balanced(pg_data_t *pgdat, int order, int classzone_idx) +bool pgdat_toptier_balanced(pg_data_t *pgdat, int order, int classzone_idx) { int i; unsigned long mark;