On 2024/4/18 2:34, Peter Xu wrote:
Hi, Kefeng,
On Wed, Apr 17, 2024 at 05:30:40PM +0800, Kefeng Wang wrote:
On 2024/4/17 16:23, Kefeng Wang wrote:
Directly call vmf_orig_pte_uffd_wp() in do_anonymous_page() and
set_pte_range() to save a uffd_wp and add userfaultfd_wp() check
in vmf_orig_pte_uffd_wp() to avoid the unnecessary function calls
in the most sense, lat_pagefault testcase does show improvement
though very small(~1%).
I'm ok with the change if that helps as big as 1%, but I'm a bit surprised
to see such a difference, because for file pte_marker_uffd_wp() should
check first on pte_none() then it should return already if uffd not even
registered for the vma, while orig_pte should be hot too if valid.
Yes, retest, not as big as 1%, but the perf shows vmf_orig_pte_uffd_wp
is eliminated,
[root@localhost]# perf report -i perf.data.old |grep vmf
0.17% 0.13% lat_pagefault [kernel.kallsyms] [k]
vmf_orig_pte_uffd_wp.part.0.isra.0
[root@localhost]# perf report -i perf.data |grep vmf
Signed-off-by: Kefeng Wang <wangkefeng.wang@xxxxxxxxxx>
---
mm/memory.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/mm/memory.c b/mm/memory.c
index 5ae2409d3cb9..a6afc96001e6 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -117,6 +117,9 @@ static bool vmf_orig_pte_uffd_wp(struct vm_fault *vmf)
if (!IS_ENABLED(CONFIG_PTE_MARKER_UFFD_WP))
return false;
Will add config check too,
pte_marker_uffd_wp() returns false when !PTE_MARKER_UFFD_WP, so kind of
imply this. I assume you meant to avoid checking ORIG_PTE_VALID flag, but
Just to avoid checking ORIG_PTE_VALID and the new userfaultfd_wp() since
it is not supported on most archs.
the flags is pretty hot too. Again, just want to double check with you on
whether it can have such a huge difference, e.g., how that compares with
the current code v.s. original patch v.s. this squashed.
I will change the changelog to show different about vmf_orig_pte_uffd_wp
from perf data.
Thanks.