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 B662BC83F1A for ; Thu, 10 Jul 2025 19:52:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4A6966B00A1; Thu, 10 Jul 2025 15:52:54 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 458586B00A2; Thu, 10 Jul 2025 15:52:54 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 346006B00A3; Thu, 10 Jul 2025 15:52:54 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 2109C6B00A1 for ; Thu, 10 Jul 2025 15:52:54 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id E0E3DBEA5E for ; Thu, 10 Jul 2025 19:52:53 +0000 (UTC) X-FDA: 83649403026.02.E24E39C Received: from out-171.mta0.migadu.com (out-171.mta0.migadu.com [91.218.175.171]) by imf18.hostedemail.com (Postfix) with ESMTP id 20C161C000B for ; Thu, 10 Jul 2025 19:52:51 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=jC12DlPS; spf=pass (imf18.hostedemail.com: domain of roman.gushchin@linux.dev designates 91.218.175.171 as permitted sender) smtp.mailfrom=roman.gushchin@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752177172; 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:references:dkim-signature; bh=VAJIzs1k5PJmMiuNehnBSG5JTWt8fBOFOIeN9czotfU=; b=6M7UfmYgRV5nANWSdV1+PJtrO7zjExf6Msjo8XkezIXPFB4AjT/hMhO93FpFk2iTW56zJr O0m8o/vy1ABEJtzQYxFqKsTGRmOhp6w8Ax8TReGlcp+86ZDKvwoYkMx68/0vhJ7VEu3my5 fn5w9uJqcsE821Jes5LI4/zoqEkNk8k= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=jC12DlPS; spf=pass (imf18.hostedemail.com: domain of roman.gushchin@linux.dev designates 91.218.175.171 as permitted sender) smtp.mailfrom=roman.gushchin@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752177172; a=rsa-sha256; cv=none; b=SlN1e6r97UU6B76v/ioJTMt6cqrMLN3Gqs/qgQqgyvYRfMN+7o9gYZsgSnp9DzzMZY2ugu Pt7yE+Ln2gQQHzb9e6vrt1kUcxZo8pC+HkQqObRk9rfT+4IofyUz8Sy4xZ177YXuxmRMQD IRYqBVfSBvJxCu5SJLcH6u7OZattELU= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1752177169; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=VAJIzs1k5PJmMiuNehnBSG5JTWt8fBOFOIeN9czotfU=; b=jC12DlPSbf3Yn+pxBPgxnL+wyHILCUV+EE9TL3COxCqI1wUi2kaypgoHn9nRR3zuKvdEVR nQgYdpont0t9I4DL1l/+dQuZiN7deun1Y84Vt5krcNFA0HoCpvqonvB/orsGMPqx0bm3VH +OHSaAYm+IawQQdgubAVLA52MF56a5M= From: Roman Gushchin To: Andrew Morton Cc: Jan Kara , Matthew Wilcox , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Liu Shixin , Roman Gushchin Subject: [PATCH] mm: consider disabling readahead if there are signs of thrashing Date: Thu, 10 Jul 2025 12:52:32 -0700 Message-ID: <20250710195232.124790-1-roman.gushchin@linux.dev> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Migadu-Flow: FLOW_OUT X-Rspam-User: X-Rspamd-Queue-Id: 20C161C000B X-Rspamd-Server: rspam09 X-Stat-Signature: a6z81bmpq98iebrfiqq7gr6mgrxtb7wc X-HE-Tag: 1752177171-4681 X-HE-Meta: U2FsdGVkX1+YJT1w9fJuGq8OXXSX4R5HAwJcu1gajdaD+RiUL5DGt37TWxIwPLwDrTp3fJCp3C940cA0CWO88ER29DLoEDiakdkCzpnWXkza5VhMdwulWaaVgxyVEw7m9XQuR0LPPwvALzLBRgoj/+1V92fl9NDEEkCfDedRq3Avka+2g6H9odTrfjInZB7aORKcAnbl9tIPsTx0Z36ArznWWW9M52p3A91fBCP4OQ46d8e/t6vRPzNo9nLOQ3VpI8ySvGcobh6zsVDeWBTzAWGz89CaVRgUybYjqlYtDSCiiWAjCTXf7E+hOi0JQg2/OW/xMibPvIodYbXwAMjr34piMBImOQ6o4UhG99til1BFiBapYLUAcO7FV50Y8E+x/lCtTpMd9t+PCagjUGvmco/8OQ1QNfXJFzF5rfmRUtSal/6oJ9OKZpf6wB303juF4W+1W9Wi8e60jpLzZQ0hVya+Hrp+jeT8HZGp87mihT89ajVx/zTRtgoOG1ZKXZG0XLqg9pUBs4ufp7h4ZApgV3vAzAUYaO3VMH8Ve9NQs+cXX5fJAFFdlcqPhBZL/cMyv+dAjNBcM9lq8HR8rDY+l6v6VKyfI2dnZvkJoB4NM2ypFADYCR9B4TDn4boN8cFQCcO7jju7KuM+7o9j+f33d6GXZrJyOfnZP/8jYjInyoiLDqPv4bo2hZ2WGQh56qhviNhHWM6pKRpLbHMXwunzKikuktoWwvkSGUYEVCaqatrHjPXFC7q0dzw4SSz6J5cwQfWu7GGGB3p/kzOq++257N8MDKwLky/MaEHzVmiSphfbWPNjGFbMvufbqs9HYjSRgQEf/F840yXKPywI0MvOI9sQ0Zj7o/a3TdLZY9P//SbVe5IvHNob14qteQIuAiOxFXyAEPSfuWd7VydRv8L05a++4u799XkZ8UotKQqqZn7z7ZPNlZkkWXdL93xthTVGzLFcKHKTL9xlQB1oxMI QwrIyjdB VDP5jWbTmu25Sbeo9MGHuI5yFZUQ2hCdrawR3p1RIMB76xnCtLAHFvku06kRmvoRBzyJ5Suyjgn0SZtjNqymcvHin2Bg1Yd01lxJZSDRQhk+ZPD7axyUdzd+FnP7ffctwzlFuWd2He2R5zOdMou07jP2StlcY4A7391WG5O5lvphwkQwJsShpcxLuDtM1o6THL6RTLY4RT0nAjai+aSsHUW41liGyrj2ILrwp9Mdu6zy54cv74vqhr2CgoH3jkItoIUtpzwGR5cJHwufcRaFlu5Bi+SnbvON5FFKnY0mNdNcawjDaU6ikKYazJLdKSpRiffYTeu5BySNog1/9O/9fZMTUq6IKSwchRQx0 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: We've noticed in production that under a very heavy memory pressure the readahead behavior becomes unstable causing spikes in memory pressure and CPU contention on zone locks. The current mmap_miss heuristics considers minor pagefaults as a good reason to decrease mmap_miss and conditionally start async readahead. This creates a vicious cycle: asynchronous readahead loads more pages, which in turn causes more minor pagefaults. This problem is especially pronounced when multiple threads of an application fault on consecutive pages of an evicted executable, aggressively lowering the mmap_miss counter and preventing readahead from being disabled. To improve the logic let's check for !uptodate and workingset folios in do_async_mmap_readahead(). The presence of such pages is a strong indicator of thrashing, which is also used by the delay accounting code, e.g. in folio_wait_bit_common(). So instead of decreasing mmap_miss and lower chances to disable readahead, let's do the opposite and bump it by MMAP_LOTSAMISS / 2. Signed-off-by: Roman Gushchin Cc: Matthew Wilcox (Oracle) Cc: Jan Kara Cc: Liu Shixin Cc: linux-mm@kvack.org --- mm/filemap.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/mm/filemap.c b/mm/filemap.c index 0d0369fb5fa1..ec3f611c3320 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -3324,6 +3324,17 @@ static struct file *do_async_mmap_readahead(struct vm_fault *vmf, return fpin; mmap_miss = READ_ONCE(ra->mmap_miss); + if (unlikely(!folio_test_uptodate(folio) && + folio_test_workingset(folio))) { + /* + * If there are signs of thrashing, take a big step + * towards disabling readahead. + */ + mmap_miss += MMAP_LOTSAMISS / 2; + mmap_miss = min(mmap_miss, MMAP_LOTSAMISS * 10); + WRITE_ONCE(ra->mmap_miss, mmap_miss); + return fpin; + } if (mmap_miss) WRITE_ONCE(ra->mmap_miss, --mmap_miss); -- 2.50.0