lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240131131244.1144-1-justinjiang@vivo.com>
Date: Wed, 31 Jan 2024 21:12:44 +0800
From: Zhiguo Jiang <justinjiang@...o.com>
To: Andrew Morton <akpm@...ux-foundation.org>,
	linux-mm@...ck.org,
	linux-kernel@...r.kernel.org
Cc: opensource.kernel@...o.com,
	Zhiguo Jiang <justinjiang@...o.com>
Subject: [PATCH v2] mm:vmscan: shrink skip folio mapped by an exiting task

If the folio shrinked by shrink_inactive_list is mapped by an exiting
task, this folio should be freed in the task exit flow rather than be
reclaimed in the shrink flow, because the former takes less time.

When the exiting tasks and shrink_inactive_list occur at the same time,
the lruvecs's folios which shrink_inactive_list reclaims may be mapped
by the exiting tasks. And when system is low memory, it more likely to
occur, because more backend applidatuions will be killed.

The shrink_inactive_list reclaims the exiting tasks's folios in lruvecs
and transforms the exiting tasks's anon folios into swap memory, which
will lead to the increasing load of the current exiting tasks.

This patch can alleviate the load of the tasks exiting process. Because
it can make that the exiting tasks release its anon folios faster
instead of releasing its swap memory from its anon folios swap-in in
shrink_inactive_list.

Signed-off-by: Zhiguo Jiang <justinjiang@...o.com>
---

Change log:
v1->v2:
1.The VM_EXITING added in v1 patch is removed, because it will fail
to compile in 32-bit system.

 mm/rmap.c | 7 +++++++
 1 file changed, 7 insertions(+)
 mode change 100644 => 100755 mm/rmap.c

diff --git a/mm/rmap.c b/mm/rmap.c
index 1cf2bffa48ed..e6702bfafdde
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -840,6 +840,13 @@ static bool folio_referenced_one(struct folio *folio,
 	int referenced = 0;
 	unsigned long start = address, ptes = 0;
 
+	/* Skip this folio if it's mapped by an exiting task */
+	if (unlikely(!atomic_read(&vma->vm_mm->mm_users)) ||
+		unlikely(test_bit(MMF_OOM_SKIP, &vma->vm_mm->flags))) {
+		pra->referenced = -1;
+		return false;
+	}
+
 	while (page_vma_mapped_walk(&pvmw)) {
 		address = pvmw.address;
 
-- 
2.39.0


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ