linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 0/2] mremap refactor: check src address for vma boundaries first.
@ 2024-08-14  7:14 jeffxu
  2024-08-14  7:14 ` [PATCH v1 1/2] mseal:selftest mremap across VMA boundaries jeffxu
                   ` (3 more replies)
  0 siblings, 4 replies; 21+ messages in thread
From: jeffxu @ 2024-08-14  7:14 UTC (permalink / raw)
  To: akpm, willy, torvalds, Liam.Howlett, pedro.falcato
  Cc: linux-kernel, linux-kselftest, linux-mm, linux-hardening, jeffxu,
	lorenzo.stoakes, mpe, oliver.sang, vbabka, keescook, Jeff Xu

From: Jeff Xu <jeffxu@chromium.org>

mremap doesn't allow relocate, expand, shrink across VMA boundaries,
refactor the code to check src address range before doing anything on
the destination, i.e. destination won't be unmapped, if src address
failed the boundaries check.

This also allows us to remove can_modify_mm from mremap.c, since
the src address must be single VMA, can_modify_vma is used.

It is likely this will improve the performance on mremap, previously 
the code does sealing check using can_modify_mm for the src address range,
and the new code removed the loop (used by can_modify_mm).

In order to verify this patch doesn't regress on mremap, I added tests in
mseal_test, the test patch can be applied before mremap refactor patch or
checkin independently.

Also this patch doesn't change mseal's existing schematic: if sealing fail,
user can expect the src/dst address isn't updated. So this patch can be
applied regardless if we decided to go with current out-of-loop approach 
or in-loop approach currently in discussion.

Regarding the perf test report by stress-ng [1] title:
8be7258aad: stress-ng.pagemove.page_remaps_per_sec -4.4% regression

The test is using below for testing:
stress-ng --timeout 60 --times --verify --metrics --no-rand-seed --pagemove 64

I can't repro this using ChromeOS, the pagemove test shows large value
of stddev and stderr, and can't reasonably refect the performance impact.

For example: I write a c program [2] to run the above pagemove test 10 times
and calculate the stddev, stderr, for 3 commits:

1> before mseal feature is added:
Ops/sec:
  Mean     : 3564.40
  Std Dev  : 2737.35 (76.80% of Mean)
  Std Err  : 865.63 (24.29% of Mean)

2> after mseal feature is added:
Ops/sec:
  Mean     : 2703.84
  Std Dev  : 2085.13 (77.12% of Mean)
  Std Err  : 659.38 (24.39% of Mean)

3> after current patch (mremap refactor)
Ops/sec:
  Mean     : 3603.67
  Std Dev  : 2422.22 (67.22% of Mean)
  Std Err  : 765.97 (21.26% of Mean)

The result shows 21%-24% stderr, this means whatever perf improvment/impact
there might be won't be measured correctly by this test.

This test machine has 32G memory,  Intel(R) Celeron(R) 7305, 5 CPU.
And I reboot the machine before each test, and take the first 10 runs with
run_stress_ng 10 

(I will run longer duration to see if test still shows large stdDev,StdErr)

[1] https://lore.kernel.org/lkml/202408041602.caa0372-oliver.sang@intel.com/
[2] https://github.com/peaktocreek/mmperf/blob/main/run_stress_ng.c


Jeff Xu (2):
  mseal:selftest mremap across VMA boundaries.
  mseal: refactor mremap to remove can_modify_mm

 mm/internal.h                           |  24 ++
 mm/mremap.c                             |  77 +++----
 mm/mseal.c                              |  17 --
 tools/testing/selftests/mm/mseal_test.c | 293 +++++++++++++++++++++++-
 4 files changed, 353 insertions(+), 58 deletions(-)

-- 
2.46.0.76.ge559c4bf1a-goog



^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2024-08-21 15:21 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-08-14  7:14 [PATCH v1 0/2] mremap refactor: check src address for vma boundaries first jeffxu
2024-08-14  7:14 ` [PATCH v1 1/2] mseal:selftest mremap across VMA boundaries jeffxu
2024-08-14  7:14 ` [PATCH v1 2/2] mseal: refactor mremap to remove can_modify_mm jeffxu
2024-08-14 14:39 ` [PATCH v1 0/2] mremap refactor: check src address for vma boundaries first Liam R. Howlett
2024-08-14 16:57   ` Jeff Xu
2024-08-14 19:55     ` Liam R. Howlett
2024-08-15  3:45       ` Jeff Xu
2024-08-15 16:49         ` Liam R. Howlett
2024-08-15 17:22           ` Jeff Xu
2024-08-15 20:14             ` Liam R. Howlett
2024-08-15 20:23               ` Jeff Xu
2024-08-15 20:40                 ` Liam R. Howlett
2024-08-15 18:16 ` Jeff Xu
2024-08-15 20:19   ` Jeff Xu
2024-08-16  2:39     ` Oliver Sang
2024-08-16  2:58       ` Jeff Xu
2024-08-18  9:28         ` Oliver Sang
2024-08-19  1:38           ` Oliver Sang
2024-08-19  6:35             ` Oliver Sang
2024-08-21  6:19               ` Oliver Sang
2024-08-21 15:21                 ` Jeff Xu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox