2023-11-20 08:43:44

by Oscar Salvador

[permalink] [raw]
Subject: [PATCH v6 4/4] mm,page_owner: Filter out stacks by a threshold counter

We want to be able to filter out the output based on a certain
threshold, so we can leave out stacks with a low counter of
outstanding allocations.

We can control the threshold value by a new file called
'page_owner_threshold', which is 0 by default.

Signed-off-by: Oscar Salvador <[email protected]>
---
mm/page_owner.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)

diff --git a/mm/page_owner.c b/mm/page_owner.c
index 509c11e506db..6ee345dafd01 100644
--- a/mm/page_owner.c
+++ b/mm/page_owner.c
@@ -41,6 +41,8 @@ static depot_stack_handle_t dummy_handle;
static depot_stack_handle_t failure_handle;
static depot_stack_handle_t early_handle;

+static unsigned long page_owner_stack_threshold;
+
static void init_early_allocated_pages(void);

static int __init early_page_owner_param(char *buf)
@@ -763,6 +765,9 @@ static int stack_print(struct seq_file *m, void *v)
int ret = 0;
struct stack_record *stack = (struct stack_record *)v;

+ if (refcount_read(&stack->count) < page_owner_stack_threshold)
+ return 0;
+
buf = kzalloc(PAGE_SIZE, GFP_KERNEL);

ret += stack_depot_get_stack_info(stack, buf);
@@ -804,6 +809,21 @@ const struct file_operations page_owner_stack_operations = {
.release = seq_release,
};

+int page_owner_threshold_get(void *data, u64 *val)
+{
+ *val = page_owner_stack_threshold;
+ return 0;
+}
+
+int page_owner_threshold_set(void *data, u64 val)
+{
+ page_owner_stack_threshold = val;
+ return 0;
+}
+
+DEFINE_SIMPLE_ATTRIBUTE(proc_page_owner_threshold, &page_owner_threshold_get,
+ &page_owner_threshold_set, "%llu");
+
static int __init pageowner_init(void)
{
if (!static_branch_unlikely(&page_owner_inited)) {
@@ -815,6 +835,8 @@ static int __init pageowner_init(void)
&proc_page_owner_operations);
debugfs_create_file("page_owner_stacks", 0400, NULL, NULL,
&page_owner_stack_operations);
+ debugfs_create_file("page_owner_threshold", 0600, NULL, NULL,
+ &proc_page_owner_threshold);

return 0;
}
--
2.42.0


2023-11-20 14:18:37

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH v6 4/4] mm,page_owner: Filter out stacks by a threshold counter

Hi Oscar,

kernel test robot noticed the following build warnings:

[auto build test WARNING on akpm-mm/mm-everything]
[also build test WARNING on linus/master v6.7-rc2 next-20231120]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Oscar-Salvador/lib-stackdepot-Add-a-refcount-field-in-stack_record/20231120-164913
base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
patch link: https://lore.kernel.org/r/20231120084300.4368-5-osalvador%40suse.de
patch subject: [PATCH v6 4/4] mm,page_owner: Filter out stacks by a threshold counter
config: arm-randconfig-001-20231120 (https://download.01.org/0day-ci/archive/20231120/[email protected]/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231120/[email protected]/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All warnings (new ones prefixed by >>):

>> mm/page_owner.c:819:5: warning: no previous prototype for function 'page_owner_threshold_get' [-Wmissing-prototypes]
819 | int page_owner_threshold_get(void *data, u64 *val)
| ^
mm/page_owner.c:819:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
819 | int page_owner_threshold_get(void *data, u64 *val)
| ^
| static
>> mm/page_owner.c:825:5: warning: no previous prototype for function 'page_owner_threshold_set' [-Wmissing-prototypes]
825 | int page_owner_threshold_set(void *data, u64 val)
| ^
mm/page_owner.c:825:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
825 | int page_owner_threshold_set(void *data, u64 val)
| ^
| static
2 warnings generated.


vim +/page_owner_threshold_get +819 mm/page_owner.c

818
> 819 int page_owner_threshold_get(void *data, u64 *val)
820 {
821 *val = page_owner_stack_threshold;
822 return 0;
823 }
824
> 825 int page_owner_threshold_set(void *data, u64 val)
826 {
827 page_owner_stack_threshold = val;
828 return 0;
829 }
830

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

2023-11-20 19:59:13

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH v6 4/4] mm,page_owner: Filter out stacks by a threshold counter

Hi Oscar,

kernel test robot noticed the following build warnings:

[auto build test WARNING on akpm-mm/mm-everything]
[also build test WARNING on linus/master v6.7-rc2 next-20231120]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Oscar-Salvador/lib-stackdepot-Add-a-refcount-field-in-stack_record/20231120-164913
base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
patch link: https://lore.kernel.org/r/20231120084300.4368-5-osalvador%40suse.de
patch subject: [PATCH v6 4/4] mm,page_owner: Filter out stacks by a threshold counter
config: arc-allmodconfig (https://download.01.org/0day-ci/archive/20231121/[email protected]/config)
compiler: arceb-elf-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231121/[email protected]/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All warnings (new ones prefixed by >>):

>> mm/page_owner.c:819:5: warning: no previous prototype for 'page_owner_threshold_get' [-Wmissing-prototypes]
819 | int page_owner_threshold_get(void *data, u64 *val)
| ^~~~~~~~~~~~~~~~~~~~~~~~
>> mm/page_owner.c:825:5: warning: no previous prototype for 'page_owner_threshold_set' [-Wmissing-prototypes]
825 | int page_owner_threshold_set(void *data, u64 val)
| ^~~~~~~~~~~~~~~~~~~~~~~~


vim +/page_owner_threshold_get +819 mm/page_owner.c

818
> 819 int page_owner_threshold_get(void *data, u64 *val)
820 {
821 *val = page_owner_stack_threshold;
822 return 0;
823 }
824
> 825 int page_owner_threshold_set(void *data, u64 val)
826 {
827 page_owner_stack_threshold = val;
828 return 0;
829 }
830

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki