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 9515CE7716D for ; Thu, 5 Dec 2024 15:29:40 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2C3FC6B00BF; Thu, 5 Dec 2024 10:19:28 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 3F6386B0103; Thu, 5 Dec 2024 10:19:23 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 94F556B00BC; Thu, 5 Dec 2024 10:19:14 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 3D9036B007B for ; Sat, 30 Nov 2024 11:44:00 -0500 (EST) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id DDD321A0AC5 for ; Sat, 30 Nov 2024 16:43:59 +0000 (UTC) X-FDA: 82843333146.22.DA58AAC Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf25.hostedemail.com (Postfix) with ESMTP id 289A2A000D for ; Sat, 30 Nov 2024 16:43:50 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=gPjK5a0C; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf25.hostedemail.com: domain of snishika@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=snishika@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1732985029; a=rsa-sha256; cv=none; b=4WSvPOpK0FO4fO/N/c3NTwLG3gQTG8y6AxZ3Q7NBur6tKycu1+ytJCC3U0oX7Fa3gTrX6U sAaRPmbrvg3yINSVlEaxGC3DWtpGUNLWgFsCJfpQWGO8QRtZkp7hzbanOTsGPj6I+NlPiU oAp5AjL2LCd5up1leG3FSklUAfX3KWc= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=gPjK5a0C; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf25.hostedemail.com: domain of snishika@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=snishika@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1732985029; 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=FRLS0gcdB1AumXGblW+zgRaLfL75WT/hgr7eTEKWACo=; b=YdoxekZ8UicxvGV9Tp1hNadi/Y5JZzgi/JC9/pQLNEsoo6YR0ensGrjm+vHPXZUA0Bstth ObnbU71oMg74AwccKrxV/JciqDHjbRHTz/spWw7b2oSquzzYVCrglLEj2a6Yav0O/DUNxh 0+tOMNLUJJ/vggKvNoxQ/DW//CX8EZk= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1732985037; 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=FRLS0gcdB1AumXGblW+zgRaLfL75WT/hgr7eTEKWACo=; b=gPjK5a0CSfeCsGaaY5d+h8Mn1Dj3/tajZ3XGTQSBpwwcsA+ieiNde7jds2TKmJook2uGny kawLVZnMBoNqEU9rDryT7KXFiUaTLJJCzTZRZjyhFythAhHqGnKlozRdzkTb7YRQZqhD3f TwbVh945XM/ogzxjM9pF9O72X4XRm3E= Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-616-qVJhnX-qMKCpsjoJ-GwJ6A-1; Sat, 30 Nov 2024 11:43:52 -0500 X-MC-Unique: qVJhnX-qMKCpsjoJ-GwJ6A-1 X-Mimecast-MFC-AGG-ID: qVJhnX-qMKCpsjoJ-GwJ6A Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id DA734195608C; Sat, 30 Nov 2024 16:43:50 +0000 (UTC) Received: from fedora.redhat.com (unknown [10.22.64.33]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 86631300018D; Sat, 30 Nov 2024 16:43:48 +0000 (UTC) From: Seiji Nishikawa To: akpm@linux-foundation.org, linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org, mgorman@techsingularity.net, snishika@redhat.com Subject: [PATCH] mm: vmscan: account for free pages to prevent infinite Loop in throttle_direct_reclaim() Date: Sun, 1 Dec 2024 01:43:45 +0900 Message-ID: <20241130164346.436469-1-snishika@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 289A2A000D X-Stat-Signature: gs91cnm31i3xn1h4ohtuqresgsbdqa3g X-Rspam-User: X-HE-Tag: 1732985030-888209 X-HE-Meta: U2FsdGVkX1/C/mkG1kvUh3Y5okDVE1Fi1Epe4okYoleiUjH7oCwoo2qjPpZHOpmZwwBKsaGWhPIUfk2eqYQUVwlfOhgoT4ZktAu1jAIkkOWAWRR/nEg2UN1DAVJIJxZdTYugtUXqGtTgmECCIhI+CL8wYNkwMpEZyyD4gMAhxspOaxnNKBvjk8PRfC7jl/mPUk6hKKH6TggmviFP8NPXukkP0O8bHqxnvj4kKP00BWvhPL/MOxsfEq0Cy5GZwEf0CL83nlOPLX4vWj08+rBMVcJjc+/o+uLM8USr+uoa8EGXW/t+vJpjVdAHa8QlC5pZgLfkmVj/YkXnz/sW0Ctzx0HfEAq1699K2rjAyjAb70WCpbSy9SYd8mRS6rJc1gu1X//1MuDkLegoxlW0V3p3P5c7Z9ODiiIl+dUoPzJOLx+uJw7wu7ujvVTqwxYLgiBzQufvd+h5BVyifNmHAGsVjCa9iClWbRZohUZoHS3ZyWrIbZevhyXfk+NHmmhtvK+ixShwW8W3GF+DugAKBDFr/6MrXPKiqqA5AGy3c9gO4xwVAdcWlAzDkAO45u8wgmAMXfyuomLF1u6Hxt+eI4X2bm7C0iIMFnl7o3qkT6LbXAOCisoH8MUpsIm4U08I7PP/N5CJE7HXphbJNi70NH0cQARO3L34V9i/xiPb+b+M8yfsLnX7ha0EYtl6oeTmd4itEnbHem7f0HxfyPCUW/fH2AU/TgkKKKfEDjUOEuAL/e3JwyjJaOOPXxggT2v4wBuMV0lxryIgPWARrRDeXb7Oogqbfmm10bw4PNXW5rG5mHBzID0KOTCj4xr0GL0cWAAkdUc1Lienft/6tBUBJxmGJbi0PIprUXKQoxEG5BHD3DOMxb7frWZy5SHSVJF8mj3Mwn1tP3U1lMQYeNLiLQMI02GOw8Mj7p2h15KbhaNi+spCEt8JWqls8nL3bvcvXW+GJ889MLjU6E/EBRAapTX 5bp2rpoB 6yO9IIdaWtljPmP6eQ22mMahmZeiyHrpJ+EpPrLBVh0XiPfD7UjyxdNaehRqQ5zRSuDssXLiyxmtIlANYZdwjNH3HEN8admQ5idG5KVWKr4AiG5UsRrVCAACK5GYDYE4igM2AYxdvEmx7+zFgNSqXZ6+oM8rgmf+utZS5SY+LEmDlYspo+Gwl5EM1ZFhuZQLQsMgmR0gvwzm0FyZ06/RHHBHBMLWJgUOQGBc+IcGNIPPf+RrInRIdMzNttUdfDq124RK2BHX0Kk87Su8IowTHN/qCg0Nd6MVKQS+hOvibcxj3NGoSVE02fh60uaLdmtFAiqnagrgjE6CxhdPNwLqA9tmvkGLTEdx75duDsvPyD2N/RLhzArEze5kfDg== 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: The task sometimes continues looping in throttle_direct_reclaim() because allow_direct_reclaim(pgdat) keeps returning false. #0 [ffff80002cb6f8d0] __switch_to at ffff8000080095ac #1 [ffff80002cb6f900] __schedule at ffff800008abbd1c #2 [ffff80002cb6f990] schedule at ffff800008abc50c #3 [ffff80002cb6f9b0] throttle_direct_reclaim at ffff800008273550 #4 [ffff80002cb6fa20] try_to_free_pages at ffff800008277b68 #5 [ffff80002cb6fae0] __alloc_pages_nodemask at ffff8000082c4660 #6 [ffff80002cb6fc50] alloc_pages_vma at ffff8000082e4a98 #7 [ffff80002cb6fca0] do_anonymous_page at ffff80000829f5a8 #8 [ffff80002cb6fce0] __handle_mm_fault at ffff8000082a5974 #9 [ffff80002cb6fd90] handle_mm_fault at ffff8000082a5bd4 At this point, the pgdat contains the following two zones: NODE: 4 ZONE: 0 ADDR: ffff00817fffe540 NAME: "DMA32" SIZE: 20480 MIN/LOW/HIGH: 11/28/45 VM_STAT: NR_FREE_PAGES: 359 NR_ZONE_INACTIVE_ANON: 18813 NR_ZONE_ACTIVE_ANON: 0 NR_ZONE_INACTIVE_FILE: 50 NR_ZONE_ACTIVE_FILE: 0 NR_ZONE_UNEVICTABLE: 0 NR_ZONE_WRITE_PENDING: 0 NR_MLOCK: 0 NR_BOUNCE: 0 NR_ZSPAGES: 0 NR_FREE_CMA_PAGES: 0 NODE: 4 ZONE: 1 ADDR: ffff00817fffec00 NAME: "Normal" SIZE: 8454144 PRESENT: 98304 MIN/LOW/HIGH: 68/166/264 VM_STAT: NR_FREE_PAGES: 146 NR_ZONE_INACTIVE_ANON: 94668 NR_ZONE_ACTIVE_ANON: 3 NR_ZONE_INACTIVE_FILE: 735 NR_ZONE_ACTIVE_FILE: 78 NR_ZONE_UNEVICTABLE: 0 NR_ZONE_WRITE_PENDING: 0 NR_MLOCK: 0 NR_BOUNCE: 0 NR_ZSPAGES: 0 NR_FREE_CMA_PAGES: 0 In allow_direct_reclaim(), while processing ZONE_DMA32, the sum of inactive/active file-backed pages calculated in zone_reclaimable_pages() based on the result of zone_page_state_snapshot() is zero. Additionally, since this system lacks swap, the calculation of inactive/ active anonymous pages is skipped. crash> p nr_swap_pages nr_swap_pages = $1937 = { counter = 0 } As a result, ZONE_DMA32 is deemed unreclaimable and skipped, moving on to the processing of the next zone, ZONE_NORMAL, despite ZONE_DMA32 having free pages significantly exceeding the high watermark. The problem is that the pgdat->kswapd_failures hasn't been incremented. crash> px ((struct pglist_data *) 0xffff00817fffe540)->kswapd_failures $1935 = 0x0 This is because the node deemed balanced. The node balancing logic in balance_pgdat() evaluates all zones collectively. If one or more zones (e.g., ZONE_DMA32) have enough free pages to meet their watermarks, the entire node is deemed balanced. This causes balance_pgdat() to exit early before incrementing the kswapd_failures, as it considers the overall memory state acceptable, even though some zones (like ZONE_NORMAL) remain under significant pressure. The new patch ensures that zone_reclaimable_pages() includes free pages (NR_FREE_PAGES) in its calculation when no other reclaimable pages are available (e.g., file-backed or anonymous pages). This change prevents zones like ZONE_DMA32, which have sufficient free pages, from being mistakenly deemed unreclaimable. By doing so, the patch ensures proper node balancing, avoids masking pressure on other zones like ZONE_NORMAL, and prevents infinite loops in throttle_direct_reclaim() caused by allow_direct_reclaim(pgdat) repeatedly returning false.