From patchwork Fri Apr 4 18:14:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joanne Koong X-Patchwork-Id: 14038729 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 5EE57C3601A for ; Fri, 4 Apr 2025 18:15:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5D17F6B000E; Fri, 4 Apr 2025 14:14:58 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 57FD16B0010; Fri, 4 Apr 2025 14:14:58 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3D5C56B0011; Fri, 4 Apr 2025 14:14:58 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 1F4BB6B000E for ; Fri, 4 Apr 2025 14:14:58 -0400 (EDT) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 513C9B7F94 for ; Fri, 4 Apr 2025 18:14:59 +0000 (UTC) X-FDA: 83297162718.01.E1B8AB1 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) by imf24.hostedemail.com (Postfix) with ESMTP id 63548180003 for ; Fri, 4 Apr 2025 18:14:57 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=DIJDPoKj; spf=pass (imf24.hostedemail.com: domain of joannelkoong@gmail.com designates 209.85.214.169 as permitted sender) smtp.mailfrom=joannelkoong@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1743790497; 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:dkim-signature; bh=j3pkaibd9TvSbeaSTyou9b7M9WsE2MzhKDeNIDnWjds=; b=zAOHelAhWICZAtUpnqJTVVbRyBInHpM0pvjHyvq86XQbFi49KYwGn/uvZfQF+LDyDNakMc ymX9zmBaEE1+2WvBg2rqeV3UghN8H4m1HwXkZFyGJL+yT+XhX/94OWzZ91FyQJccgFQkrc WVzbpWp22jgkn5f5m5LemRIsEnjyZ6E= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1743790497; a=rsa-sha256; cv=none; b=3BTxWJ3a9ivmydZuC56tn5rROtK0rZc4Jb+peuGd6C7FkF6saP4mcp9o8AorglVMgAje74 b0TBHAyfAxGfxwgdZzUq4yHFIXkQBRIE2D/sShtIxaXBLgeiYlFJWMTv0+zR6datf924ao I4iMcXgFbPmFIakir2LcBTthOBKHh/0= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=DIJDPoKj; spf=pass (imf24.hostedemail.com: domain of joannelkoong@gmail.com designates 209.85.214.169 as permitted sender) smtp.mailfrom=joannelkoong@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-223f4c06e9fso22196105ad.1 for ; Fri, 04 Apr 2025 11:14:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743790496; x=1744395296; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=j3pkaibd9TvSbeaSTyou9b7M9WsE2MzhKDeNIDnWjds=; b=DIJDPoKjFvbfWp+TX/vzAXWM4nXWqHan6hqERwkt9XmZZ9hXYVmsdFfmoeJdD3R3eI Oxj4FSqbh12mZMU/PYfW1rg6zTGITB9NU4P2mMIk94eJidYp2HZFRRLHenxk/EGiZxOU ++VNGulMOe5oVTygF78C89p0ZMxpgX1zG+vPaLGsSzA+/ypQhitwqkNkggehjXe0uvyf /NcyG1F+20pfgP3sc+ZVGPH+T2Q9TeTTyVGd7Hz8NQDyEU0VMfaqpay6/MOCEx6a1XqR 0TZiyYVZkOkSyNkGk5/JDVkbM+LqjPk6XdXk3mwCGSUf7pZeHYwJaHY1OTWVzceRn5a7 KRHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743790496; x=1744395296; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=j3pkaibd9TvSbeaSTyou9b7M9WsE2MzhKDeNIDnWjds=; b=WOYspWBJIiCI41Tp0s0qV4XnqzJjLZNOdcfJR5tX2T3PiWOsNhTfPFrbxLgXfFD9JV Wm5G9Yihe7oKF1Jsfo+DaUnRTetJJ+CEzCxdXXmHzE7jqRfOS5ePlnqq87Ua2msR3V8N mB8VwVy/ltNIqtF4O1q0kQcEVcM+SlGqO+3rPLHTC44SBK+qdoPbGlKGimwrniJKiHJO 2NC2/tLdg4FOwEq9qfPUldtByj6Q0uxVPiFn0srE8RKnaAPnDBOiplNnbTsaFLNI9TpA jiIqnz58ZRC6UAhiuwqKkj5x3j10By2zvxJlqU+5jceunYFIriyVet5pkaDfFXwHEwoD ihcQ== X-Forwarded-Encrypted: i=1; AJvYcCU5crj6swuFHQScgzbzwzFgIXoXEsK0qL8IqE8JclG2yqluyH7Vl02OnbcyYi5nZYBOJDs2Zzctwg==@kvack.org X-Gm-Message-State: AOJu0YzS+PMBHMYihFNacGfv5byeRu4Ljb1V6Ft6vscehRm/b9VBasU3 52drGhcR60dtm/IUfEj9sQFZEmW+muDPHePtwAqODVHuCJVUqfH1 X-Gm-Gg: ASbGncueu5EwNDsqHa3XfehkkWRUxdSHaRKOmYG+KYZ/VkYsP6FuNf8oIOrflt8nH0J pW8n+AESTS+9t1PJ4H00tlfNUKnVu1gDCbFgV7lKwfIha+3oKNPnZ3Hl1gzH8vwEi9vdGnpDpiD chOnO/2oKt61rtyir3ghsoBXGy6kFnrbeBqhn3mvtqzcoUrbcEdKX4x3DFHPchuQwBeL5mCXdwF oiS0vAaTK2Fkm5IZVKax7laLj+PJOGdcipi8oQEMbVdqAuq4RMf4hrIPNGQSwsnKotoLqw5aHNC M/0qIjQDZIcH1lnxeltsErbXn20Vi62ZKK1HmxF7 X-Google-Smtp-Source: AGHT+IHGa8Y8SuMd3n9iFFlNcrZys9TGj4hZu9tApDIQ/6HUQ+OVxypeR21UpAV43u4nzDqgfgcvCA== X-Received: by 2002:a17:902:d54f:b0:21f:58fd:d215 with SMTP id d9443c01a7336-229765d1b7bmr123372805ad.11.1743790496199; Fri, 04 Apr 2025 11:14:56 -0700 (PDT) Received: from localhost ([2a03:2880:ff:49::]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-229785ad943sm35587075ad.23.2025.04.04.11.14.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Apr 2025 11:14:55 -0700 (PDT) From: Joanne Koong To: miklos@szeredi.hu, akpm@linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org Cc: jefflexu@linux.alibaba.com, shakeel.butt@linux.dev, david@redhat.com, bernd.schubert@fastmail.fm, ziy@nvidia.com, jlayton@kernel.org, kernel-team@meta.com, Miklos Szeredi Subject: [PATCH v7 2/3] mm: skip reclaiming folios in legacy memcg writeback indeterminate contexts Date: Fri, 4 Apr 2025 11:14:42 -0700 Message-ID: <20250404181443.1363005-3-joannelkoong@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250404181443.1363005-1-joannelkoong@gmail.com> References: <20250404181443.1363005-1-joannelkoong@gmail.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 63548180003 X-Stat-Signature: t44ccwfy9co9sxjscuuuax9th4e4wfyy X-HE-Tag: 1743790497-839069 X-HE-Meta: U2FsdGVkX1+QcW+DE4a4Nwep0lvU5tsAbrncwluKW0pICIgIrWC5MMqMYKZxgIng/ASkZwEOqjsH34aaXOCnFyCARn0y/A0l5gaJjTi5H667lY28A7YDJ1umQFscw4IwfzSjrSeYJm8hh0EOe3pCQMNz7bhwMIsN3Ww9/wj0ktslKX8/2nZ83NFpQinu8QoI/dHxcA+Zp7B8znMriZP3EwsdfGbH4LzwkIrU1f4P/oLThIB1nKa/uyb4vU2ySiUBdcG+/7/DF46lDoUDothhI/XlpDGwa4mNFndhcxFYVjYUgdjSb7CkL8G7Y4oeVEFYLXL4pPHhKR/RoF6QxZDYDd13r4blW9TxhGlKLri/2DYBYp/izKsi1IAERPJUEQgFXJleHZ+8uC5QCMwbDxm3qZ4JKqSn9zU1M0IGbB9GB+/LbLCHrKzxkpXzhSYUAj/Xb+etU6fGI+VQnYeXfr+0877POesjgXa0gRapyQ9aXwSdZRUwfqoPf1WD+8+CWDMaMXfEdTBOWhnhy7BZeeSE89vF67GoTwdonSVz4Yw6iuZi+MLa54MSDnvaPuW5wtn9mOoU+bM05gJpTWeNUMpkG0JoDkwerZF9SrRSQ/J4OQnID72BKD7baEbpR/9EC62YxxOpE155EBfNgBv7h47PHJ1rfovbGjoPxArdOwSULBQsw3qlF9LOEKGnSnrY2Gvr6BzVt5zVGt8EqdEaKempJ0rK0pcg2y1ewiuMpOFeI1O6gTpr754SvH8mzeV+FpvMqD6khKVA6ULMzGoPctWdfxuM0BxvSsjx67yNpCn4XTlicg+KJKXiXj6QPoE4LbByFOrsBSv4YCDsaHutZUN2QvVe0S5jbvmyj2PHiTzhHUWAZyWJdbxti3TVQAvLislwW3xX8OuDX1lVz8ZSzV5fi3nq1iV3Gd9OV0dRC5mzcnHDjMd/shBrAYpEVfLdrxngiVASVabOTh98kZmPjFE M2dPZrKw HNwfOm2xyDKMWzM9zE184BBgYnYuoD2HfXkLReFbU3Wh9g/z6EXz8+mlNx9oTukGnTnVRqfOpxSfFJyOXVSfdOZ6abA46H/rOW5GNKldEpL3qZvnHjDCWBSwZsIYlfeqerFwRZ1FntSu7iCvYZ6DefQcuVCDJfDeVIucx41ba+ULiG1BC6MBHGvOn8VOGQj4rtXyUtGl9x3WmSA8+yRgRR3/OjTfmig9byBhbRYrNF+/MMAuiMQs2kpBVXJRRRDZf3fbYONrSZNRG65PJM/pAx5pd5K4OL2zZnQN0h7Kc8/dTydBGLQlREPJanuO8qlmeV3P++mcBovuTrXAiMDxNwNeUY1Z9nOhW2H6rVuG560Eb4AM3FeE828cO7EiQ76JxRsbpCAzQPXvW9/L1CroZXJpBP3yhECpLUj6s3JwtEYIJ8nfURioEZBlTNT4rnYyzNXeAPcE2YTvoB68= 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: Currently in shrink_folio_list(), reclaim for folios under writeback falls into 3 different cases: 1) Reclaim is encountering an excessive number of folios under writeback and this folio has both the writeback and reclaim flags set 2) Dirty throttling is enabled (this happens if reclaim through cgroup is not enabled, if reclaim through cgroupv2 memcg is enabled, or if reclaim is on the root cgroup), or if the folio is not marked for immediate reclaim, or if the caller does not have __GFP_FS (or __GFP_IO if it's going to swap) set 3) Legacy cgroupv1 encounters a folio that already has the reclaim flag set and the caller did not have __GFP_FS (or __GFP_IO if swap) set In cases 1) and 2), we activate the folio and skip reclaiming it while in case 3), we wait for writeback to finish on the folio and then try to reclaim the folio again. In case 3, we wait on writeback because cgroupv1 does not have dirty folio throttling, as such this is a mitigation against the case where there are too many folios in writeback with nothing else to reclaim. For filesystems where writeback may take an indeterminate amount of time to write to disk, this has the possibility of stalling reclaim. In this commit, if legacy memcg encounters a folio with the reclaim flag set (eg case 3) and the folio belongs to a mapping that has the AS_WRITEBACK_INDETERMINATE flag set, the folio will be activated and skip reclaim (eg default to behavior in case 2) instead. Signed-off-by: Joanne Koong Reviewed-by: Shakeel Butt Acked-by: Miklos Szeredi --- mm/vmscan.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index b620d74b0f66..d37843b2e621 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -1187,8 +1187,9 @@ static unsigned int shrink_folio_list(struct list_head *folio_list, * 2) Global or new memcg reclaim encounters a folio that is * not marked for immediate reclaim, or the caller does not * have __GFP_FS (or __GFP_IO if it's simply going to swap, - * not to fs). In this case mark the folio for immediate - * reclaim and continue scanning. + * not to fs), or the writeback may take an indeterminate + * amount of time to complete. In this case mark the folio + * for immediate reclaim and continue scanning. * * Require may_enter_fs() because we would wait on fs, which * may not have submitted I/O yet. And the loop driver might @@ -1213,6 +1214,8 @@ static unsigned int shrink_folio_list(struct list_head *folio_list, * takes to write them to disk. */ if (folio_test_writeback(folio)) { + mapping = folio_mapping(folio); + /* Case 1 above */ if (current_is_kswapd() && folio_test_reclaim(folio) && @@ -1223,7 +1226,8 @@ static unsigned int shrink_folio_list(struct list_head *folio_list, /* Case 2 above */ } else if (writeback_throttling_sane(sc) || !folio_test_reclaim(folio) || - !may_enter_fs(folio, sc->gfp_mask)) { + !may_enter_fs(folio, sc->gfp_mask) || + (mapping && mapping_writeback_indeterminate(mapping))) { /* * This is slightly racy - * folio_end_writeback() might have