Re: + mm-khugepaged-bypassing-unnecessary-scans-with-mmf_disable_thp-check.patch added to mm-unstable branch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hey Andrew,

Thanks for taking time to review!
I really appreciate your time!

BR,
Lance


On Mon, Jan 29, 2024 at 6:47 PM Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> wrote:
>
>
> The patch titled
>      Subject: mm/khugepaged: bypassing unnecessary scans with MMF_DISABLE_THP check
> has been added to the -mm mm-unstable branch.  Its filename is
>      mm-khugepaged-bypassing-unnecessary-scans-with-mmf_disable_thp-checkpatch
>
> This patch will shortly appear at
>      https://git.kernel.org/pub/scm/linux/kernel/git/akpm/25-new.git/tree/patches/mm-khugepaged-bypassing-unnecessary-scans-with-mmf_disable_thp-check.patch
>
> This patch will later appear in the mm-unstable branch at
>     git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
>
> Before you just go and hit "reply", please:
>    a) Consider who else should be cc'ed
>    b) Prefer to cc a suitable mailing list as well
>    c) Ideally: find the original patch on the mailing list and do a
>       reply-to-all to that, adding suitable additional cc's
>
> *** Remember to use Documentation/process/submit-checklist.rst when testing your code ***
>
> The -mm tree is included into linux-next via the mm-everything
> branch at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
> and is updated there every 2-3 working days
>
> ------------------------------------------------------
> From: Lance Yang <ioworker0@xxxxxxxxx>
> Subject: mm/khugepaged: bypassing unnecessary scans with MMF_DISABLE_THP check
> Date: Mon, 29 Jan 2024 13:45:51 +0800
>
> khugepaged scans the entire address space in the background for each given
> mm, looking for opportunities to merge sequences of basic pages into huge
> pages.  However, when an mm is inserted to the mm_slots list, and the
> MMF_DISABLE_THP flag is set later, this scanning process becomes
> unnecessary for that mm and can be skipped to avoid redundant operations,
> especially in scenarios with a large address space.
>
> This commit introduces a check before each scanning process to test the
> MMF_DISABLE_THP flag for the given mm; if the flag is set, the scanning
> process is bypassed, thereby improving the efficiency of khugepaged.
>
> Link: https://lkml.kernel.org/r/20240129054551.57728-1-ioworker0@xxxxxxxxx
> Signed-off-by: Lance Yang <ioworker0@xxxxxxxxx>
> Cc: David Hildenbrand <david@xxxxxxxxxx>
> Cc: Michal Hocko <mhocko@xxxxxxxx>
> Cc: Minchan Kim <minchan@xxxxxxxxxx>
> Cc: Muchun Song <songmuchun@xxxxxxxxxxxxx>
> Cc: Peter Xu <peterx@xxxxxxxxxx>
> Cc: Zach O'Keefe <zokeefe@xxxxxxxxxx>
> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> ---
>
>  mm/khugepaged.c |   18 ++++++++++++------
>  1 file changed, 12 insertions(+), 6 deletions(-)
>
> --- a/mm/khugepaged.c~mm-khugepaged-bypassing-unnecessary-scans-with-mmf_disable_thp-check
> +++ a/mm/khugepaged.c
> @@ -410,6 +410,12 @@ static inline int hpage_collapse_test_ex
>         return atomic_read(&mm->mm_users) == 0;
>  }
>
> +static inline int hpage_collapse_test_exit_or_disable(struct mm_struct *mm)
> +{
> +       return hpage_collapse_test_exit(mm) ||
> +              test_bit(MMF_DISABLE_THP, &mm->flags);
> +}
> +
>  void __khugepaged_enter(struct mm_struct *mm)
>  {
>         struct khugepaged_mm_slot *mm_slot;
> @@ -1422,7 +1428,7 @@ static void collect_mm_slot(struct khuge
>
>         lockdep_assert_held(&khugepaged_mm_lock);
>
> -       if (hpage_collapse_test_exit(mm)) {
> +       if (hpage_collapse_test_exit_or_disable(mm)) {
>                 /* free mm_slot */
>                 hash_del(&slot->hash);
>                 list_del(&slot->mm_node);
> @@ -2360,7 +2366,7 @@ static unsigned int khugepaged_scan_mm_s
>                 goto breakouterloop_mmap_lock;
>
>         progress++;
> -       if (unlikely(hpage_collapse_test_exit(mm)))
> +       if (unlikely(hpage_collapse_test_exit_or_disable(mm)))
>                 goto breakouterloop;
>
>         vma_iter_init(&vmi, mm, khugepaged_scan.address);
> @@ -2368,7 +2374,7 @@ static unsigned int khugepaged_scan_mm_s
>                 unsigned long hstart, hend;
>
>                 cond_resched();
> -               if (unlikely(hpage_collapse_test_exit(mm))) {
> +               if (unlikely(hpage_collapse_test_exit_or_disable(mm))) {
>                         progress++;
>                         break;
>                 }
> @@ -2390,7 +2396,7 @@ skip:
>                         bool mmap_locked = true;
>
>                         cond_resched();
> -                       if (unlikely(hpage_collapse_test_exit(mm)))
> +                       if (unlikely(hpage_collapse_test_exit_or_disable(mm)))
>                                 goto breakouterloop;
>
>                         VM_BUG_ON(khugepaged_scan.address < hstart ||
> @@ -2408,7 +2414,7 @@ skip:
>                                 fput(file);
>                                 if (*result == SCAN_PTE_MAPPED_HUGEPAGE) {
>                                         mmap_read_lock(mm);
> -                                       if (hpage_collapse_test_exit(mm))
> +                                       if (hpage_collapse_test_exit_or_disable(mm))
>                                                 goto breakouterloop;
>                                         *result = collapse_pte_mapped_thp(mm,
>                                                 khugepaged_scan.address, false);
> @@ -2450,7 +2456,7 @@ breakouterloop_mmap_lock:
>          * Release the current mm_slot if this mm is about to die, or
>          * if we scanned all vmas of this mm.
>          */
> -       if (hpage_collapse_test_exit(mm) || !vma) {
> +       if (hpage_collapse_test_exit_or_disable(mm) || !vma) {
>                 /*
>                  * Make sure that if mm_users is reaching zero while
>                  * khugepaged runs here, khugepaged_exit will find
> _
>
> Patches currently in -mm which might be from ioworker0@xxxxxxxxx are
>
> mm-khugepaged-bypassing-unnecessary-scans-with-mmf_disable_thp-check.patch
>





[Index of Archives]     [Kernel Archive]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]

  Powered by Linux