Re: [PATCH v6 03/15] mm/khugepaged: add struct collapse_control

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

 



On Mon, Jun 6, 2022 at 9:40 AM Zach O'Keefe <zokeefe@xxxxxxxxxx> wrote:
>
> On Sun, Jun 5, 2022 at 7:42 PM kernel test robot <lkp@xxxxxxxxx> wrote:
> >
> > Hi Zach,
> >
> > Thank you for the patch! Perhaps something to improve:
> >
> > [auto build test WARNING on akpm-mm/mm-everything]
> >
> > url:    https://github.com/intel-lab-lkp/linux/commits/Zach-O-Keefe/mm-userspace-hugepage-collapse/20220606-012953
> > base:   https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
> > config: x86_64-rhel-8.3 (https://download.01.org/0day-ci/archive/20220606/202206060911.I8rRqGwC-lkp@xxxxxxxxx/config)
> > compiler: gcc-11 (Debian 11.3.0-1) 11.3.0
> > reproduce (this is a W=1 build):
> >         # https://github.com/intel-lab-lkp/linux/commit/d87b6065d6050b89930cca0814921aca7c269286
> >         git remote add linux-review https://github.com/intel-lab-lkp/linux
> >         git fetch --no-tags linux-review Zach-O-Keefe/mm-userspace-hugepage-collapse/20220606-012953
> >         git checkout d87b6065d6050b89930cca0814921aca7c269286
> >         # save the config file
> >         mkdir build_dir && cp config build_dir/.config
> >         make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash
> >
> > If you fix the issue, kindly add following tag where applicable
> > Reported-by: kernel test robot <lkp@xxxxxxxxx>
> >
> > All warnings (new ones prefixed by >>):
> >
> >    mm/khugepaged.c: In function 'khugepaged':
> > >> mm/khugepaged.c:2284:1: warning: the frame size of 4160 bytes is larger than 2048 bytes [-Wframe-larger-than=]
> >     2284 | }
> >          | ^
>
> Thanks lkp@xxxxxxxxx.
>
> This is due to config with:
>
> CONFIG_FRAME_WARN=2048
> CONFIG_NODES_SHIFT=10
>
> Where struct collapse_control has a member int
> node_load[MAX_NUMNODES], and we stack allocate one.
>
> Is this a configuration that needs to be supported? 1024 nodes seems
> like a lot and I'm not sure if these configs are randomly generated or
> are reminiscent of real systems.

I don't have a better idea other than moving it out of the
collapse_control struct. You may consider changing node_load to two
dimensions, for example:

node_load[2][MAX_NUMNODES], then define:
enum {
    /* khugepaged */
    COLLAPSE_ASYNC,
    /* MADV_COLLAPSE */
    COLLAPSE_SYNC
}

Then khugepaged and MADV_COLLAPSE get their dedicated node_load respectively.

The more aggressive approach may be just killing node_load, but I'm
not sure what impact it may incur.

>
> Thanks,
> Zach
>
> >
> > vim +2284 mm/khugepaged.c
> >
> > b46e756f5e4703 Kirill A. Shutemov 2016-07-26  2261
> > b46e756f5e4703 Kirill A. Shutemov 2016-07-26  2262  static int khugepaged(void *none)
> > b46e756f5e4703 Kirill A. Shutemov 2016-07-26  2263  {
> > b46e756f5e4703 Kirill A. Shutemov 2016-07-26  2264      struct mm_slot *mm_slot;
> > d87b6065d6050b Zach O'Keefe       2022-06-03  2265      struct collapse_control cc = {
> > d87b6065d6050b Zach O'Keefe       2022-06-03  2266              .last_target_node = NUMA_NO_NODE,
> > d87b6065d6050b Zach O'Keefe       2022-06-03  2267      };
> > b46e756f5e4703 Kirill A. Shutemov 2016-07-26  2268
> > b46e756f5e4703 Kirill A. Shutemov 2016-07-26  2269      set_freezable();
> > b46e756f5e4703 Kirill A. Shutemov 2016-07-26  2270      set_user_nice(current, MAX_NICE);
> > b46e756f5e4703 Kirill A. Shutemov 2016-07-26  2271
> > b46e756f5e4703 Kirill A. Shutemov 2016-07-26  2272      while (!kthread_should_stop()) {
> > d87b6065d6050b Zach O'Keefe       2022-06-03  2273              khugepaged_do_scan(&cc);
> > b46e756f5e4703 Kirill A. Shutemov 2016-07-26  2274              khugepaged_wait_work();
> > b46e756f5e4703 Kirill A. Shutemov 2016-07-26  2275      }
> > b46e756f5e4703 Kirill A. Shutemov 2016-07-26  2276
> > b46e756f5e4703 Kirill A. Shutemov 2016-07-26  2277      spin_lock(&khugepaged_mm_lock);
> > b46e756f5e4703 Kirill A. Shutemov 2016-07-26  2278      mm_slot = khugepaged_scan.mm_slot;
> > b46e756f5e4703 Kirill A. Shutemov 2016-07-26  2279      khugepaged_scan.mm_slot = NULL;
> > b46e756f5e4703 Kirill A. Shutemov 2016-07-26  2280      if (mm_slot)
> > b46e756f5e4703 Kirill A. Shutemov 2016-07-26  2281              collect_mm_slot(mm_slot);
> > b46e756f5e4703 Kirill A. Shutemov 2016-07-26  2282      spin_unlock(&khugepaged_mm_lock);
> > b46e756f5e4703 Kirill A. Shutemov 2016-07-26  2283      return 0;
> > b46e756f5e4703 Kirill A. Shutemov 2016-07-26 @2284  }
> > b46e756f5e4703 Kirill A. Shutemov 2016-07-26  2285
> >
> > --
> > 0-DAY CI Kernel Test Service
> > https://01.org/lkp
> >




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux