Re: [LKP] Re: [mm/gup] 57efa1fe59: will-it-scale.per_thread_ops -9.2% regression

From: Xing Zhengjun
Date: Fri Jun 04 2021 - 04:38:02 EST


Hi Linus,

On 5/25/2021 11:11 AM, Linus Torvalds wrote:
On Mon, May 24, 2021 at 5:00 PM kernel test robot <oliver.sang@xxxxxxxxx> wrote:
FYI, we noticed a -9.2% regression of will-it-scale.per_thread_ops due to commit:
commit: 57efa1fe5957694fa541c9062de0a127f0b9acb0 ("mm/gup: prevent gup_fast from racing with COW during fork")
Hmm. This looks like one of those "random fluctuations" things.

It would be good to hear if other test-cases also bisect to the same
thing, but this report already says:

In addition to that, the commit also has significant impact on the following tests:

+------------------+---------------------------------------------------------------------------------+
| testcase: change | will-it-scale: will-it-scale.per_thread_ops 3.7% improvement |
which does kind of reinforce that "this benchmark gives unstable numbers".

The perf data doesn't even mention any of the GUP paths, and on the
pure fork path the biggest impact would be:

(a) maybe "struct mm_struct" changed in size or had a different cache layout
I move "write_protect_seq" to the tail of the "struct mm_struct", the regression reduced to -3.6%. The regression should relate to the cache layout.
=========================================================================================
tbox_group/testcase/rootfs/kconfig/compiler/nr_task/mode/test/cpufreq_governor/ucode:
lkp-icl-2sp1/will-it-scale/debian-10.4-x86_64-20200603.cgz/x86_64-rhel-8.3/gcc-9/50%/thread/mmap1/performance/0xb000280

commit:
  c28b1fc70390df32e29991eedd52bd86e7aba080
  57efa1fe5957694fa541c9062de0a127f0b9acb0
  f6a9c27882d51ff551e15522992d3725c342372d  (the test patch)

c28b1fc70390df32 57efa1fe5957694fa541c9062de f6a9c27882d51ff551e15522992
---------------- --------------------------- ---------------------------
         %stddev     %change         %stddev     %change %stddev
             \          |                \          | \
    341938            -9.0%     311218 ±  2%      -3.6% 329513        will-it-scale.48.threads
      7123            -9.0%       6483 ±  2%      -3.6% 6864        will-it-scale.per_thread_ops
    341938            -9.0%     311218 ±  2%      -3.6% 329513        will-it-scale.workload

diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
index 915f4f100383..34bb2a01806c 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
@@ -447,13 +447,6 @@ struct mm_struct {
                 */
                atomic_t has_pinned;

-               /**
-                * @write_protect_seq: Locked when any thread is write
-                * protecting pages mapped by this mm to enforce a later COW,
-                * for instance during page table copying for fork().
-                */
-               seqcount_t write_protect_seq;
-
 #ifdef CONFIG_MMU
                atomic_long_t pgtables_bytes;   /* PTE page table pages */
 #endif
@@ -564,6 +557,12 @@ struct mm_struct {
 #ifdef CONFIG_IOMMU_SUPPORT
                u32 pasid;
 #endif
+                /**
+                 * @write_protect_seq: Locked when any thread is write
+                 * protecting pages mapped by this mm to enforce a later COW,
+                 * for instance during page table copying for fork().
+                 */
+                seqcount_t write_protect_seq;
        } __randomize_layout;

        /*


(b) two added (nonatomic) increment operations in the fork path due
to the seqcount

and I'm not seeing what would cause that 9% change. Obviously cache
placement has done it before.

If somebody else sees something that I'm missing, please holler. But
I'll ignore this as "noise" otherwise.

Linus
_______________________________________________
LKP mailing list -- lkp@xxxxxxxxxxxx
To unsubscribe send an email to lkp-leave@xxxxxxxxxxxx

--
Zhengjun Xing