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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id A8EA5C04FFE for ; Tue, 14 May 2024 12:53:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C8C3D6B031C; Tue, 14 May 2024 08:53:37 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 87A676B031D; Tue, 14 May 2024 08:53:37 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 589446B027C; Tue, 14 May 2024 08:53:37 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id EAB5F6B031D for ; Tue, 14 May 2024 08:53:36 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 70A6AA11F3 for ; Tue, 14 May 2024 12:53:35 +0000 (UTC) X-FDA: 82116992790.29.64EC570 Received: from dggsgout11.his.huawei.com (unknown [45.249.212.51]) by imf25.hostedemail.com (Postfix) with ESMTP id D7E47A0017 for ; Tue, 14 May 2024 12:53:31 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=none; spf=none (imf25.hostedemail.com: domain of shikemeng@huaweicloud.com has no SPF policy when checking 45.249.212.51) smtp.mailfrom=shikemeng@huaweicloud.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1715691213; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=RVRmI0uxJQR8pfG5u1h3ZKSEwON33hQDGEsCrYD7E2g=; b=mXe0p5h8INRbEGfsZsT0glxMdRTLF2lXYtcQ7gZzZkiVgJEHrmcsH3RxLPK1QtkqQs1EU8 8WqMcUlwp2N4q/Ykt4RFJDW0loti14L1xSqsVsi5W4Ttrx94s+F6UWiG1V8cUBdB6MOvz1 dW5zVcz/2L4SIuIbp0yusokUgn5FUag= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=none; spf=none (imf25.hostedemail.com: domain of shikemeng@huaweicloud.com has no SPF policy when checking 45.249.212.51) smtp.mailfrom=shikemeng@huaweicloud.com; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1715691213; a=rsa-sha256; cv=none; b=KqU1Pe7ieVYJngPbx4aP9d3DavqgEFQnMPoe3eDLHzOBY9jS12Ag6p94tKGkJzWNbOcxW1 0nYDad/JcMIXAEHbxOaJuMMB40hrX+B8M9tN30ONOhlYvogV/4CeA16pMEVlqVSGqlCc/E t9fRAa7RAcNQkDARrn7+ZeyqsNWGEJ4= Received: from mail.maildlp.com (unknown [172.19.163.235]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4Vdx9S3wZyz4f3n5p for ; Tue, 14 May 2024 20:53:16 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.128]) by mail.maildlp.com (Postfix) with ESMTP id AB5691A0ACF for ; Tue, 14 May 2024 20:53:26 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.101.6]) by APP4 (Coremail) with SMTP id gCh0CgDHzG7EXkNmCyyLMw--.6596S4; Tue, 14 May 2024 20:53:26 +0800 (CST) From: Kemeng Shi To: willy@infradead.org, akpm@linux-foundation.org, tj@kernel.org Cc: linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/8] writeback: add general function domain_dirty_avail to calculate dirty and avail of domain Date: Tue, 14 May 2024 20:52:48 +0800 Message-Id: <20240514125254.142203-3-shikemeng@huaweicloud.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20240514125254.142203-1-shikemeng@huaweicloud.com> References: <20240514125254.142203-1-shikemeng@huaweicloud.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CM-TRANSID:gCh0CgDHzG7EXkNmCyyLMw--.6596S4 X-Coremail-Antispam: 1UD129KBjvJXoWxGrW3tFyxGw45Xr47ZFW3Awb_yoWrCrW8pF 43Jws0kayUtF47Xrs3AFWq9rW3K397GrW7t34xCaySqFnFkr1UKFyI9ryvvr1xAF97Jry3 ArsIvr97Gr40kr7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUvGb4IE77IF4wAFF20E14v26ryj6rWUM7CY07I20VC2zVCF04k2 6cxKx2IYs7xG6rWj6s0DM7CIcVAFz4kK6r1j6r18M28IrcIa0xkI8VA2jI8067AKxVWUXw A2048vs2IY020Ec7CjxVAFwI0_Gr0_Xr1l8cAvFVAK0II2c7xJM28CjxkF64kEwVA0rcxS w2x7M28EF7xvwVC0I7IYx2IY67AKxVW5JVW7JwA2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxV W8Jr0_Cr1UM28EF7xvwVC2z280aVAFwI0_GcCE3s1l84ACjcxK6I8E87Iv6xkF7I0E14v2 6rxl6s0DM2AIxVAIcxkEcVAq07x20xvEncxIr21l5I8CrVACY4xI64kE6c02F40Ex7xfMc Ij6xIIjxv20xvE14v26r1j6r18McIj6I8E87Iv67AKxVWUJVW8JwAm72CE4IkC6x0Yz7v_ Jr0_Gr1lF7xvr2IYc2Ij64vIr41l42xK82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr 0_Gr1lx2IqxVAqx4xG67AKxVWUJVWUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY 17CE14v26r126r1DMIIYrxkI7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcV C0I7IYx2IY6xkF7I0E14v26r4j6F4UMIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY 6I8E87Iv67AKxVW8JVWxJwCI42IY6I8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa 73UjIFyTuYvjxU2_MaUUUUU X-CM-SenderInfo: 5vklyvpphqwq5kxd4v5lfo033gof0z/ X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: D7E47A0017 X-Stat-Signature: jayer7tf3wpppsmb6sngm5rcdbyitdjk X-HE-Tag: 1715691211-345982 X-HE-Meta: U2FsdGVkX19PQBrsaTF1zX3Xi37z4DAZJ798DNIA963s7xgnIxhPLB9JDU29/Gc0z5qb1VEVdcu3kzHveSbR0kp7oUNXZ+k2NacXjmx9+P5+JVqTLNqInMYXtbkr+4nTutu1LAR5LvDOFqdM3vFQXNxsx11v0oGqcDzCpC9her05D6goGfFmzNbqa+yc3hUUN+zIHe4/jF93bpVTcISO6s5P/3h7UQgnG2SnRc7naYJSlJD/NrE7o9Ejr6DqBJ5+qInFHNndDgNsuH4QtuL0jrNy45+dURVgZsMMqYtN2y077MFEalNUDzmxkqeiX+FrqRaMeRFiEYhL14mYdIEfV9CccwIYe0qCZymD9kAue4F88glnmLrW0jOISiYQoUl6N18CZX9lgjSdPBAjGGIJKtUPWhbI5BpCa0XwqoXKkfnJPb4l4MGktHgO0IUBTUIF8Dlk/lf3DT8hkv5MdeU4R590WiP/Z9YhW/YoIVHT5BMcwknHrRxj1SB/HYJDuNPAgeZNqbxf2pmCZv5N6XPcPIEx80CmvADopgUF1L9zb4onhjKHmnRJ22l+DAMeYMVMIIPIbNwH7g8fiKSKnQyACTP1vRs4w3IkA/RBJZ2b+oTfTsigvJqp+AcH+W2l8okqBS1eBBrv+P6OHNvg8OdoNVi7Y9C1qahAG7hNOuULfpfO9XHMZX1472wHhGOk5sqVyCiVWTmXWx/NVpGcQ8Evda3DXbI9wl149P/guOolIrNxAvNaZSOcWUMVpCuvQ7OdNaC2qUl8AmYMgqEuISGe+K80ppEpGaqRsxtQciaxRBqOIk++1ZMDdGOg+2ySRqz9aByLCltWs2NwvK2MBRzDESMJKu/AqzLOADOUEzhYBFbOgLsr27/iY199Y6hNRzaIpKs4KxJ14HZm3Xo1XHMUuWFFnds78ejmHu1NMfBwM0wfObWRs+aA4BTeqaQwEU8BBzbDZ9mYJjLQor6c8Z6 fGGgU+zH 1ZZ0SPmEoWBkVOtRau8NDQamf07BoROspZ8qzovE4jsDxGnmKK+NVGD5BnYNKZebgDUhbMdzVY/NKme9MXPWhFfN4gz7w69tI+bPGDyMmWTCqMCOF2XhtQGq/SoztAmhqaiUmDbMD34IgL/sYngwlmEJMfzOsXbDKzc9ET1rsMV/fBmYAUpoEOEPnM9k3CsdsVjQYhPyXnvHxZPFDE3pmp4PzgCSOy0nic+G7YHepCJxPwlHYoT64OtRBfaGpA4jR7IYWjgrXR1XWIEM8FyBQ9UWl8w== 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: List-Subscribe: List-Unsubscribe: Add general function domain_dirty_avail to calculate dirty and avail for either dirty limit or background writeback in either global domain or wb domain. Signed-off-by: Kemeng Shi --- mm/page-writeback.c | 65 ++++++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/mm/page-writeback.c b/mm/page-writeback.c index e1f73643aca1..16a94c7df260 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -837,6 +837,34 @@ static void mdtc_calc_avail(struct dirty_throttle_control *mdtc, mdtc->avail = filepages + min(headroom, other_clean); } +static inline bool dtc_is_global(struct dirty_throttle_control *dtc) +{ + return mdtc_gdtc(dtc) == NULL; +} + +/* + * Dirty background will ignore pages being written as we're trying to + * decide whether to put more under writeback. + */ +static void domain_dirty_avail(struct dirty_throttle_control *dtc, + bool include_writeback) +{ + if (dtc_is_global(dtc)) { + dtc->avail = global_dirtyable_memory(); + dtc->dirty = global_node_page_state(NR_FILE_DIRTY); + if (include_writeback) + dtc->dirty += global_node_page_state(NR_WRITEBACK); + } else { + unsigned long filepages = 0, headroom = 0, writeback = 0; + + mem_cgroup_wb_stats(dtc->wb, &filepages, &headroom, &dtc->dirty, + &writeback); + if (include_writeback) + dtc->dirty += writeback; + mdtc_calc_avail(dtc, filepages, headroom); + } +} + /** * __wb_calc_thresh - @wb's share of dirty threshold * @dtc: dirty_throttle_context of interest @@ -899,16 +927,9 @@ unsigned long cgwb_calc_thresh(struct bdi_writeback *wb) { struct dirty_throttle_control gdtc = { GDTC_INIT_NO_WB }; struct dirty_throttle_control mdtc = { MDTC_INIT(wb, &gdtc) }; - unsigned long filepages = 0, headroom = 0, writeback = 0; - gdtc.avail = global_dirtyable_memory(); - gdtc.dirty = global_node_page_state(NR_FILE_DIRTY) + - global_node_page_state(NR_WRITEBACK); - - mem_cgroup_wb_stats(wb, &filepages, &headroom, - &mdtc.dirty, &writeback); - mdtc.dirty += writeback; - mdtc_calc_avail(&mdtc, filepages, headroom); + domain_dirty_avail(&gdtc, true); + domain_dirty_avail(&mdtc, true); domain_dirty_limits(&mdtc); return __wb_calc_thresh(&mdtc, mdtc.thresh); @@ -1719,9 +1740,8 @@ static int balance_dirty_pages(struct bdi_writeback *wb, unsigned long m_bg_thresh = 0; nr_dirty = global_node_page_state(NR_FILE_DIRTY); - gdtc->avail = global_dirtyable_memory(); - gdtc->dirty = nr_dirty + global_node_page_state(NR_WRITEBACK); + domain_dirty_avail(gdtc, true); domain_dirty_limits(gdtc); if (unlikely(strictlimit)) { @@ -1737,17 +1757,11 @@ static int balance_dirty_pages(struct bdi_writeback *wb, } if (mdtc) { - unsigned long filepages, headroom, writeback; - /* * If @wb belongs to !root memcg, repeat the same * basic calculations for the memcg domain. */ - mem_cgroup_wb_stats(wb, &filepages, &headroom, - &mdtc->dirty, &writeback); - mdtc->dirty += writeback; - mdtc_calc_avail(mdtc, filepages, headroom); - + domain_dirty_avail(mdtc, true); domain_dirty_limits(mdtc); if (unlikely(strictlimit)) { @@ -2119,14 +2133,8 @@ bool wb_over_bg_thresh(struct bdi_writeback *wb) struct dirty_throttle_control * const mdtc = mdtc_valid(&mdtc_stor) ? &mdtc_stor : NULL; - /* - * Similar to balance_dirty_pages() but ignores pages being written - * as we're trying to decide whether to put more under writeback. - */ - gdtc->avail = global_dirtyable_memory(); - gdtc->dirty = global_node_page_state(NR_FILE_DIRTY); + domain_dirty_avail(gdtc, false); domain_dirty_limits(gdtc); - if (gdtc->dirty > gdtc->bg_thresh) return true; @@ -2135,13 +2143,8 @@ bool wb_over_bg_thresh(struct bdi_writeback *wb) return true; if (mdtc) { - unsigned long filepages, headroom, writeback; - - mem_cgroup_wb_stats(wb, &filepages, &headroom, &mdtc->dirty, - &writeback); - mdtc_calc_avail(mdtc, filepages, headroom); + domain_dirty_avail(mdtc, false); domain_dirty_limits(mdtc); /* ditto, ignore writeback */ - if (mdtc->dirty > mdtc->bg_thresh) return true; -- 2.30.0