public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
From: Andrea Arcangeli <aarcange@redhat.com>
To: ltp@lists.linux.it
Cc: Eirik Fuller <efuller@redhat.com>
Subject: [LTP] [PATCH 1/1] ksm: fix occasional page_volatile false positives
Date: Wed, 11 May 2022 21:38:30 -0400	[thread overview]
Message-ID: <20220512013830.8534-2-aarcange@redhat.com> (raw)
In-Reply-To: <20220512013830.8534-1-aarcange@redhat.com>

The KSM scan keeps running while checking the KSM status in sysfs, but
during the KSM scan the the rmap_items in the stale unstable tree of
the old pass are removed from it and are later reinserted in the new
unstable tree of the current pass, leading to some page_volatile
false positives.

The fix is stop the KSM scan temporarily while the KSM status is being
read from sysfs.

For reference here's an instance of the fixed false positives:

mem.c:255: TFAIL: pages_volatile is not 0 but 1.
mem.c:255: TFAIL: pages_unshared is not 1 but 0.

Reported-by: Eirik Fuller <efuller@redhat.com>
Co-developed-by: Li Wang <liwan@redhat.com>
Tested-by: Li Wang <liwan@redhat.com>
Tested-by: Eirik Fuller <efuller@redhat.com>
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
---
 testcases/kernel/mem/lib/mem.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/testcases/kernel/mem/lib/mem.c b/testcases/kernel/mem/lib/mem.c
index 090569ebb..8ddd7adf7 100644
--- a/testcases/kernel/mem/lib/mem.c
+++ b/testcases/kernel/mem/lib/mem.c
@@ -261,14 +261,31 @@ static void final_group_check(int run, int pages_shared, int pages_sharing,
 			  int pages_volatile, int pages_unshared,
 			  int sleep_millisecs, int pages_to_scan)
 {
+	int ksm_run_orig;
+
 	tst_res(TINFO, "check!");
 	check("run", run);
+
+	/*
+	 * Temporarily stop the KSM scan during the checks: during the
+	 * KSM scan the rmap_items in the stale unstable tree of the
+	 * old pass are removed from it and are later reinserted in
+	 * the new unstable tree of the current pass. So if the checks
+	 * run in the race window between removal and re-insertion, it
+	 * can lead to unexpected false positives where page_volatile
+	 * is elevated and page_unshared is recessed.
+	 */
+	SAFE_FILE_SCANF(PATH_KSM "run", "%d", &ksm_run_orig);
+	SAFE_FILE_PRINTF(PATH_KSM "run", "0");
+
 	check("pages_shared", pages_shared);
 	check("pages_sharing", pages_sharing);
 	check("pages_volatile", pages_volatile);
 	check("pages_unshared", pages_unshared);
 	check("sleep_millisecs", sleep_millisecs);
 	check("pages_to_scan", pages_to_scan);
+
+	SAFE_FILE_PRINTF(PATH_KSM "run", "%d", ksm_run_orig);
 }
 
 void ksm_group_check(int run, int pages_shared, int pages_sharing,


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

  reply	other threads:[~2022-05-12  1:38 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-12  1:38 [LTP] [PATCH 0/1] ksm: fix occasional page_volatile false positives Andrea Arcangeli
2022-05-12  1:38 ` Andrea Arcangeli [this message]
2022-05-13  1:51   ` [LTP] [PATCH 1/1] " Li Wang
2022-05-13  8:51     ` Cyril Hrubis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220512013830.8534-2-aarcange@redhat.com \
    --to=aarcange@redhat.com \
    --cc=efuller@redhat.com \
    --cc=ltp@lists.linux.it \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox