From patchwork Sat Apr 12 08:58:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Barry Song <21cnbao@gmail.com> X-Patchwork-Id: 14048944 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 6A96EC369A1 for ; Sat, 12 Apr 2025 08:59:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0F2E868003B; Sat, 12 Apr 2025 04:59:05 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 0A0EC68003A; Sat, 12 Apr 2025 04:59:05 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EAB2368003B; Sat, 12 Apr 2025 04:59:04 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id CBD0968003A for ; Sat, 12 Apr 2025 04:59:04 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id D9AF11CCC37 for ; Sat, 12 Apr 2025 08:59:04 +0000 (UTC) X-FDA: 83324792208.22.1D8672A Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) by imf17.hostedemail.com (Postfix) with ESMTP id 0CF5640004 for ; Sat, 12 Apr 2025 08:59:02 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=OhcNmY3S; spf=pass (imf17.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.214.173 as permitted sender) smtp.mailfrom=21cnbao@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=1744448343; 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-type: content-transfer-encoding:content-transfer-encoding:in-reply-to: references:dkim-signature; bh=rYfYOXgEMh5O4Q2aA7Im1EXD1nxKMabdz4qOFBh1C0U=; b=6rAhmCdAt0mQ8K+LKvg4aq/sbV5GfghG2Bk4wFdQyH8JhpNnaeZ08UnVxWtv1kkL5WGbmL JK0JkleRyqeJ9ki9sy/5jZxL9z0/Zuu9ERB6K30bk/d7nHMj3rf4PvTbv1Xm8SlPQeIiww WyBpHXJL7aQvy93Pr+OqyN+2uoo7Zhc= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=OhcNmY3S; spf=pass (imf17.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.214.173 as permitted sender) smtp.mailfrom=21cnbao@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744448343; a=rsa-sha256; cv=none; b=NZgvauK1NHj4UoMo6iGkSr9QXveaPHy1Rhu4ax8BVeYSZ6OlxrjW7ts9gL/0rRgj3txGNF 0ParHdzB1O7Q0AyMSjZB6Wv2mbu99u/IIv7LXrFQ2rbVa5QhN5K/iWrOK7p5ipFiSTqTAH qJhUL9spwvtANrkq2o/iYGbUcSmaMSQ= Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-227cf12df27so22374905ad.0 for ; Sat, 12 Apr 2025 01:59:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744448342; x=1745053142; darn=kvack.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=rYfYOXgEMh5O4Q2aA7Im1EXD1nxKMabdz4qOFBh1C0U=; b=OhcNmY3SI3VTtqEn9x53oAL5A5GGAv/L8rm/ukNux/qCl4SHSlBiV333JD6uylS5Gv dwVKZuHe79zEGeaTX/a4j7ublgU/WwswtJiiYP2DlihUEfozVDiMIZQF4DKlybzK9pLu g5mFSsMVcv/Sbm9UzcOHZqK7nqM1hZi/6SN4Kk0zx8hNKKaG9LADQ+NI6X04YNKB7o+P bkQL1Lifu7BcdKZTAHcJlRMLMM/oGCMtUvIvvPfLlcvML+VNxb1EqTCwZZslD9UjcaHA 6uo7eF2SbxgmBLbVEXnzkIX7JiQj9yevyI+M0SjJgi0x6Apbl98yReX0R2by1sYZWCzK b2Zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744448342; x=1745053142; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=rYfYOXgEMh5O4Q2aA7Im1EXD1nxKMabdz4qOFBh1C0U=; b=oitP3jIHf7Q1EphZ6OIN/2QfPHX3l2glrxc+WD+mIzq6YN/GNFnTW2JH9i2EIYXZhc eHkll6KMaURyf4Fr2ZWB7rMd5u9TU5ZVvkY+6KOoiB0p+TodRAb+UbhND4YqSvmN6Inm 7JEpGMkCQV18Z+AGLJMqUo240iT6zrWMTS28653FP7Fc31UsEQvPEi/pxma6E+lx1Vbw kopi4k7/TL8oQvZOOaavfmahP/FZi8DPuxT4OPBuzh4IWhjd11+dybxuk2D6FFWJvOz2 lP1OBYNe5ueQMVfhgMl+Y/IrUCjnNtCVHLaX90teE+LGleJ/YRafJOtLZSmGqYDOSbMt Nh8g== X-Forwarded-Encrypted: i=1; AJvYcCVSkP7bYy2ChiVpu3CkcD6i1NBjAa8vKKCcuX8J1GpmoORz7Zb/2amRn7L1QwofkzcTWAn++vbLTA==@kvack.org X-Gm-Message-State: AOJu0YwVH0+agK1TaTtTBAiJLcosOj6bmyq3uJ9Y4qOHNwi76m5Y9l0L 1PmX56G3rU0XALT4JxMUZufNj2q+R0tKp0HVuppqkP+j4brFA+9/ X-Gm-Gg: ASbGnctRVO3NjveAdgqMsZQghDho5wckxehM/sqRNyDYymKJSCZ8tKd61O7hjIyZAcp H9e8RPyKFkpO00oaus1EEDztmXsXPXMQsn6Uuq9oMKdW1IODogDuS6QoDWw/fhycZ3/BveWPB/I RTVsyEtdigwu66k2KPcwQUKLzQWjwEL//MeW75cluzCoBZ8A5n6Vv2TDsX3fHWiWAxogumyY8kK ooGPx0zZREl3rEuc9TkDnRT69Cwq45/QyIXV+MRAA1qpTfmUE6emg/pUeWowfbqKz2Bo1lYyVI1 zxEM1cPktopPgbn2tY2y/bqPw0egTNQ33dNFaQVC+FIWTnfER0rduddz X-Google-Smtp-Source: AGHT+IEkJ36Jz8n9hG3SinEp7XwOwkMmD9nPB2lCOsXijxusIByHPImYx/umctXng2q1f4Wv7nFt7w== X-Received: by 2002:a17:903:19c3:b0:215:6c5f:d142 with SMTP id d9443c01a7336-22bea0a9bb2mr82218175ad.20.1744448341500; Sat, 12 Apr 2025 01:59:01 -0700 (PDT) Received: from Barrys-MBP.hub ([118.93.49.111]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22ac7cb5047sm63202675ad.170.2025.04.12.01.58.57 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sat, 12 Apr 2025 01:59:00 -0700 (PDT) From: Barry Song <21cnbao@gmail.com> To: akpm@linux-foundation.org, linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org, Barry Song , Baolin Wang , David Hildenbrand , Johannes Weiner , Matthew Wilcox , Oscar Salvador , Ryan Roberts , Zi Yan Subject: [RFC PATCH] mm: don't promote exclusive file folios of dying processes Date: Sat, 12 Apr 2025 20:58:52 +1200 Message-Id: <20250412085852.48524-1-21cnbao@gmail.com> X-Mailer: git-send-email 2.39.3 (Apple Git-146) MIME-Version: 1.0 X-Rspamd-Queue-Id: 0CF5640004 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: 7jrbufg4c68gwoc5znnkn9j3ski55oz3 X-HE-Tag: 1744448342-221277 X-HE-Meta: U2FsdGVkX1+Sv/sr61PCQAylYMvpRADWDq/w/Z89doKfSDKzDN5+BuVBlvJ3uJN3KzcCtjm02IJrqyrs1P+aSXhRNEa1DuPR1cuf6LX9mICwpAxQAXqx0iAgtCHfrVZBWe22JEMvfXXZ6FXhrEQxZbVPS+RP3T7+4BEwIlFbYGLLESeu1TdZH8ShBtuoEFD++ndxPolOiZlToc6yv57bMMJJEhWWpqUTAw/vQn/Kg2givasgJ3CrVXv4FtIhaBzMrT3zGGdMJByh45U8fbHc61vFPmLMucZexy0TsfCJfScvwByRnZzWwLHxyxWY4K0FiEnB1qJlBZJcxAhCWC+S61ml3JfuwCaCk9taZ4sGOhGAqvgbt5VhsZwLZB3IzeVXQnufZpTl99B48RG4/BFYHt6JPjGzYFCN6AO4pLHOsKxpzfe+rXkFAnXu8Jcmw+sIon71qc9OQkSFob9wdVG5Y807zTYWHmitjBdpPGvkm/nLoRpjpaQNlWEXAjOkbqm+2a7q7R6qDBhdqdBTiXFcslyddTn6r+Q6aPjV/epq+icTS7pmqF1L40rJCAx4ki7s6WVH6fpUWuFiLSXKMxcdFCbUgaOhoMIBHJSg//QPWzkdKofQs9fSaHY6CQs9qwA1HeCukbvtb6oWy9lmSzi5bTSeCMXqN8N70BJz1NetZQjM0qiKenpggZTPupeJcDhjfb930y5idtKJ7J6bfPbuAp1Ss2TAqgXYV/sJLgobao6aLAgzRY28ANkPTLA5OkZDud9ZKTrixVUmg4pceQzn8wGDl643+C/Ez3jyog3BpvtD0pzvFSvbj9W/79UF9+ZpJAi2s0xvHaX5tzGYiFL690PQAh4KK+HOKa8UAx4BaZN+XO6Krj+bHfZQc6tlXnqVzpAF5bSUTbZBlJO8AGB/HAC7/5KJX3fVYAHw/qOfSQKKVTEcif8sfCnryF4TMIVbwy1G5+LN71+YIbo3e1N jsem1MHE bgrGjj6pc9inmkZGUb19XLGC+EkuKsSmTbV+E1ZnX6Ezb7FPRqPHtw8J+2b6XaFvM5v0A6eVNPPexR8iNQqpyAeKD0BajrzZ7SIMulC2yzkmXuuP0bb/a1MmHnIISOtG8kiE7k1KyNnATXWcfhTavd0DIvmT4R9XM+/hNIcVvzPXngpUzmaEJs3g8UkLLkpJFoftgnGn+bBMNI8j4BzUaDMzQbzceUnR4NV9HaBGWzq5Gb98d0AMoyAmdZTVAIZU2SH75U8QwKszIXqmBTPEjYXrFHhC4rxjM/o2qVIhG1oCWjEIVm2Kc04c1CcmAU6ZT4fFUHubzJoz1fzDpo0+RVbijgQVu/sCFSYkBhVes8mE2GjIZctXhGM6TpzOBXdxbsIv0jeP/hrKtWL28rgSj9+Cx779jYs0DSUu0rtlqGy0/o1cTOYlJUOjTAF/jJLKAJ+2PGm+/e3fslogSSSBEKO6pM0Jp/8A31F17QqbPeJpCklCqm1Utm/R6yPl6cD0qkddXSWYvdKTzKZ+TCfgy44QHZSkZKcgLBtzKc03pilVoUzZK4QDw96iJSoGJnkkuqHtcNr8PBr/NyIq7PNRq6UGwV6+k+DEKm0xXSczsPmcw4FaVofuWJIIAPnht5P8UmZd2hjc8rJIspwHx/dk3boOO2w== 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: From: Barry Song Promoting exclusive file folios of a dying process is unnecessary and harmful. For example, while Firefox is killed and LibreOffice is launched, activating Firefox's young file-backed folios makes it harder to reclaim memory that LibreOffice doesn't use at all. An exiting process is unlikely to be restarted right away—it's either terminated by the user or killed by the OOM handler. Cc: Baolin Wang Cc: David Hildenbrand Cc: Johannes Weiner Cc: Matthew Wilcox (Oracle) Cc: Oscar Salvador Cc: Ryan Roberts Cc: Zi Yan Signed-off-by: Barry Song --- mm/huge_memory.c | 4 ++-- mm/internal.h | 19 +++++++++++++++++++ mm/memory.c | 9 ++++++++- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/mm/huge_memory.c b/mm/huge_memory.c index e97a97586478..05b83d2fcbb6 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -2264,8 +2264,8 @@ int zap_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma, * Use flush_needed to indicate whether the PMD entry * is present, instead of checking pmd_present() again. */ - if (flush_needed && pmd_young(orig_pmd) && - likely(vma_has_recency(vma))) + if (!exclusive_folio_of_dying_process(folio, vma) && flush_needed && + pmd_young(orig_pmd) && likely(vma_has_recency(vma))) folio_mark_accessed(folio); } diff --git a/mm/internal.h b/mm/internal.h index 4e0ea83aaf1c..666de96a293d 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -130,6 +131,24 @@ static inline int folio_nr_pages_mapped(const struct folio *folio) return atomic_read(&folio->_nr_pages_mapped) & FOLIO_PAGES_MAPPED; } +/* + * Return true if a folio is exclusive and belongs to an exiting or + * oom-reaped process; otherwise, return false. + */ +static inline bool exclusive_folio_of_dying_process(struct folio *folio, + struct vm_area_struct *vma) +{ + if (folio_maybe_mapped_shared(folio)) + return false; + + if (!atomic_read(&vma->vm_mm->mm_users)) + return true; + if (check_stable_address_space(vma->vm_mm)) + return true; + + return false; +} + /* * Retrieve the first entry of a folio based on a provided entry within the * folio. We cannot rely on folio->swap as there is no guarantee that it has diff --git a/mm/memory.c b/mm/memory.c index b9e8443aaa86..cab69275e473 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -1515,7 +1515,14 @@ static __always_inline void zap_present_folio_ptes(struct mmu_gather *tlb, *force_flush = true; } } - if (pte_young(ptent) && likely(vma_has_recency(vma))) + + /* + * Skip marking exclusive file folios as accessed for processes that are + * exiting or have been reaped due to OOM. This prevents unnecessary + * promotion of folios that won't benefit the new process being launched. + */ + if (!exclusive_folio_of_dying_process(folio, vma) && pte_young(ptent) && + likely(vma_has_recency(vma))) folio_mark_accessed(folio); rss[mm_counter(folio)] -= nr; } else {