lkml.org 
[lkml]   [2020]   [Oct]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 77/85] mm: khugepaged: recalculate min_free_kbytes after memory hotplug as expected by khugepaged
    Date
    From: Vijay Balakrishna <vijayb@linux.microsoft.com>

    commit 4aab2be0983031a05cb4a19696c9da5749523426 upstream.

    When memory is hotplug added or removed the min_free_kbytes should be
    recalculated based on what is expected by khugepaged. Currently after
    hotplug, min_free_kbytes will be set to a lower default and higher
    default set when THP enabled is lost.

    This change restores min_free_kbytes as expected for THP consumers.

    [vijayb@linux.microsoft.com: v5]
    Link: https://lkml.kernel.org/r/1601398153-5517-1-git-send-email-vijayb@linux.microsoft.com

    Fixes: f000565adb77 ("thp: set recommended min free kbytes")
    Signed-off-by: Vijay Balakrishna <vijayb@linux.microsoft.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Reviewed-by: Pavel Tatashin <pasha.tatashin@soleen.com>
    Acked-by: Michal Hocko <mhocko@suse.com>
    Cc: Allen Pais <apais@microsoft.com>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Song Liu <songliubraving@fb.com>
    Cc: <stable@vger.kernel.org>
    Link: https://lkml.kernel.org/r/1600305709-2319-2-git-send-email-vijayb@linux.microsoft.com
    Link: https://lkml.kernel.org/r/1600204258-13683-1-git-send-email-vijayb@linux.microsoft.com
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    include/linux/khugepaged.h | 5 +++++
    mm/khugepaged.c | 13 +++++++++++--
    mm/page_alloc.c | 3 +++
    3 files changed, 19 insertions(+), 2 deletions(-)

    --- a/include/linux/khugepaged.h
    +++ b/include/linux/khugepaged.h
    @@ -15,6 +15,7 @@ extern int __khugepaged_enter(struct mm_
    extern void __khugepaged_exit(struct mm_struct *mm);
    extern int khugepaged_enter_vma_merge(struct vm_area_struct *vma,
    unsigned long vm_flags);
    +extern void khugepaged_min_free_kbytes_update(void);
    #ifdef CONFIG_SHMEM
    extern void collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr);
    #else
    @@ -85,6 +86,10 @@ static inline void collapse_pte_mapped_t
    unsigned long addr)
    {
    }
    +
    +static inline void khugepaged_min_free_kbytes_update(void)
    +{
    +}
    #endif /* CONFIG_TRANSPARENT_HUGEPAGE */

    #endif /* _LINUX_KHUGEPAGED_H */
    --- a/mm/khugepaged.c
    +++ b/mm/khugepaged.c
    @@ -54,6 +54,9 @@ enum scan_result {
    #define CREATE_TRACE_POINTS
    #include <trace/events/huge_memory.h>

    +static struct task_struct *khugepaged_thread __read_mostly;
    +static DEFINE_MUTEX(khugepaged_mutex);
    +
    /* default scan 8*512 pte (or vmas) every 30 second */
    static unsigned int khugepaged_pages_to_scan __read_mostly;
    static unsigned int khugepaged_pages_collapsed;
    @@ -2177,8 +2180,6 @@ static void set_recommended_min_free_kby

    int start_stop_khugepaged(void)
    {
    - static struct task_struct *khugepaged_thread __read_mostly;
    - static DEFINE_MUTEX(khugepaged_mutex);
    int err = 0;

    mutex_lock(&khugepaged_mutex);
    @@ -2205,3 +2206,11 @@ fail:
    mutex_unlock(&khugepaged_mutex);
    return err;
    }
    +
    +void khugepaged_min_free_kbytes_update(void)
    +{
    + mutex_lock(&khugepaged_mutex);
    + if (khugepaged_enabled() && khugepaged_thread)
    + set_recommended_min_free_kbytes();
    + mutex_unlock(&khugepaged_mutex);
    +}
    --- a/mm/page_alloc.c
    +++ b/mm/page_alloc.c
    @@ -68,6 +68,7 @@
    #include <linux/lockdep.h>
    #include <linux/nmi.h>
    #include <linux/psi.h>
    +#include <linux/khugepaged.h>

    #include <asm/sections.h>
    #include <asm/tlbflush.h>
    @@ -7870,6 +7871,8 @@ int __meminit init_per_zone_wmark_min(vo
    setup_min_slab_ratio();
    #endif

    + khugepaged_min_free_kbytes_update();
    +
    return 0;
    }
    postcore_initcall(init_per_zone_wmark_min)

    \
     
     \ /
      Last update: 2020-10-12 15:57    [W:4.130 / U:0.504 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site