* [PATCH 0/2] slabinfo: parse all NUMA attributes @ 2020-02-17 8:48 Tobin C. Harding 2020-02-17 8:48 ` [PATCH 1/2] tools: vm: slabinfo: Replace tabs with spaces Tobin C. Harding ` (2 more replies) 0 siblings, 3 replies; 7+ messages in thread From: Tobin C. Harding @ 2020-02-17 8:48 UTC (permalink / raw) To: Christoph Lameter; +Cc: Tobin C. Harding, Andrew Morton, linux-mm, linux-kernel Hi Christoph, I found a few files in /sys/kernel/slab/foo/ that contain NUMA info that is not currently being parsed by `slabinfo.c`. I do not know whether this is intentional or not? Since I did not know this I just printed the info in the NUMA report section like is done for the per node slabs and partial slabs info. Just for your interest; I found these while re-writing slabinfo in Rust, thanks to the type-system. I guess that if they were unintentionally missed then this is a small win, if they were intentionally missed then this series is just noise :) Patch one is a one line whitespace fix. To test I comment out the code that inhibits NUMA output for single node machines and then the output looks like this (relevant bit at the bottom) $ sudo slabinfo kmem_cache_node Slabcache: kmem_cache_node Aliases: 0 Order : 0 Objects: 1877 ** Hardware cacheline aligned Sizes (bytes) Slabs Debug Memory ------------------------------------------------------------------------ Object : 64 Total : 34 Sanity Checks : Off Total: 139264 SlabObj: 64 Full : 15 Redzoning : Off Used : 120128 SlabSiz: 4096 Partial: 17 Poisoning : Off Loss : 19136 Loss : 0 CpuSlab: 2 Tracking : Off Lalig: 0 Align : 64 Objects: 64 Tracing : Off Lpadd: 0 kmem_cache_node has no kmem_cache operations kmem_cache_node: Kernel object allocation ----------------------------------------------------------------------- No Data kmem_cache_node: Kernel object freeing ------------------------------------------------------------------------ No Data NUMA nodes : 0 --------------------------- All slabs 34 Partial slabs 17 CPU slabs 2 Objects 1.8K Partial objects 789 Total objects 2.1K Tobin C. Harding (2): tools: vm: slabinfo: Replace tabs with spaces tools: vm: slabinfo: Add numa information for objects tools/vm/slabinfo.c | 69 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 63 insertions(+), 6 deletions(-) -- 2.17.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/2] tools: vm: slabinfo: Replace tabs with spaces 2020-02-17 8:48 [PATCH 0/2] slabinfo: parse all NUMA attributes Tobin C. Harding @ 2020-02-17 8:48 ` Tobin C. Harding 2020-02-18 16:19 ` Christopher Lameter 2020-02-17 8:48 ` [PATCH 2/2] tools: vm: slabinfo: Add numa information for objects Tobin C. Harding 2020-02-18 16:16 ` [PATCH 0/2] slabinfo: parse all NUMA attributes Christopher Lameter 2 siblings, 1 reply; 7+ messages in thread From: Tobin C. Harding @ 2020-02-17 8:48 UTC (permalink / raw) To: Christoph Lameter; +Cc: Tobin C. Harding, Andrew Morton, linux-mm, linux-kernel We have some rouge tabs within the output string of `slabinfo -h` causing the description output of the `--partial` option to be incorrectly aligned when printed. Replace the tabs with spaces, correctly aligning all option description strings. Signed-off-by: Tobin C. Harding <tobin@kernel.org> --- tools/vm/slabinfo.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/vm/slabinfo.c b/tools/vm/slabinfo.c index 68092d15e12b..29f8ecb59cf6 100644 --- a/tools/vm/slabinfo.c +++ b/tools/vm/slabinfo.c @@ -125,7 +125,7 @@ static void usage(void) "-n|--numa Show NUMA information\n" "-N|--lines=K Show the first K slabs\n" "-o|--ops Show kmem_cache_ops\n" - "-P|--partial Sort by number of partial slabs\n" + "-P|--partial Sort by number of partial slabs\n" "-r|--report Detailed report on single slabs\n" "-s|--shrink Shrink slabs\n" "-S|--Size Sort by size\n" -- 2.17.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] tools: vm: slabinfo: Replace tabs with spaces 2020-02-17 8:48 ` [PATCH 1/2] tools: vm: slabinfo: Replace tabs with spaces Tobin C. Harding @ 2020-02-18 16:19 ` Christopher Lameter 0 siblings, 0 replies; 7+ messages in thread From: Christopher Lameter @ 2020-02-18 16:19 UTC (permalink / raw) To: Tobin C. Harding; +Cc: Andrew Morton, linux-mm, linux-kernel On Mon, 17 Feb 2020, Tobin C. Harding wrote: > Replace the tabs with spaces, correctly aligning all option description > strings. Acked-by: Christoph Lameter <cl@linux.com> ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/2] tools: vm: slabinfo: Add numa information for objects 2020-02-17 8:48 [PATCH 0/2] slabinfo: parse all NUMA attributes Tobin C. Harding 2020-02-17 8:48 ` [PATCH 1/2] tools: vm: slabinfo: Replace tabs with spaces Tobin C. Harding @ 2020-02-17 8:48 ` Tobin C. Harding 2020-02-18 16:24 ` Christopher Lameter 2020-02-18 16:16 ` [PATCH 0/2] slabinfo: parse all NUMA attributes Christopher Lameter 2 siblings, 1 reply; 7+ messages in thread From: Tobin C. Harding @ 2020-02-17 8:48 UTC (permalink / raw) To: Christoph Lameter; +Cc: Tobin C. Harding, Andrew Morton, linux-mm, linux-kernel Currently we are not handling NUMA information for a bunch of slab attribute files, files of form `170 N0=170 ...`. These are objects objects_partial total_objects cpu_slabs For other attribute files, namely `partial` and `slabs`, we do handle the NUMA information. Add a field to the slabinfo struct for the NUMA information and output it during a NUMA report as is done for `slabs` and `partial`. reference: /sys/kernel/slab/kmeme_cache_node/ Signed-off-by: Tobin C. Harding <tobin@kernel.org> --- tools/vm/slabinfo.c | 67 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 62 insertions(+), 5 deletions(-) diff --git a/tools/vm/slabinfo.c b/tools/vm/slabinfo.c index 29f8ecb59cf6..65254c051da2 100644 --- a/tools/vm/slabinfo.c +++ b/tools/vm/slabinfo.c @@ -46,6 +46,10 @@ struct slabinfo { unsigned long cpu_partial_alloc, cpu_partial_free; int numa[MAX_NODES]; int numa_partial[MAX_NODES]; + int numa_objects[MAX_NODES]; + int numa_objects_partial[MAX_NODES]; + int numa_total_objects[MAX_NODES]; + int numa_cpu_slabs[MAX_NODES]; } slabinfo[MAX_SLABS]; struct aliasinfo { @@ -394,13 +398,49 @@ static void slab_numa(struct slabinfo *s, int mode) printf("\n"); if (mode) { printf("%-21s ", "Partial slabs"); - for(node = 0; node <= highest_node; node++) { + for (node = 0; node <= highest_node; node++) { char b[20]; store_size(b, s->numa_partial[node]); printf(" %4s", b); } printf("\n"); + + printf("%-21s ", "CPU slabs"); + for (node = 0; node <= highest_node; node++) { + char b[20]; + + store_size(b, s->numa_cpu_slabs[node]); + printf(" %4s", b); + } + printf("\n"); + + printf("%-21s ", "Objects"); + for (node = 0; node <= highest_node; node++) { + char b[20]; + + store_size(b, s->numa_objects[node]); + printf(" %4s", b); + } + printf("\n"); + + printf("%-21s ", "Partial objects"); + for (node = 0; node <= highest_node; node++) { + char b[20]; + + store_size(b, s->numa_objects_partial[node]); + printf(" %4s", b); + } + printf("\n"); + + printf("%-21s ", "Total objects"); + for (node = 0; node <= highest_node; node++) { + char b[20]; + + store_size(b, s->numa_total_objects[node]); + printf(" %4s", b); + } + printf("\n"); } line++; } @@ -1205,6 +1245,7 @@ static void read_slab_dir(void) alias->ref = strdup(p); alias++; break; + case DT_DIR: if (chdir(de->d_name)) fatal("Unable to access slab %s\n", slab->name); @@ -1214,13 +1255,27 @@ static void read_slab_dir(void) slab->aliases = get_obj("aliases"); slab->align = get_obj("align"); slab->cache_dma = get_obj("cache_dma"); - slab->cpu_slabs = get_obj("cpu_slabs"); + + slab->cpu_slabs = get_obj_and_str("cpu_slabs", &t); + decode_numa_list(slab->numa_cpu_slabs, t); + free(t); + slab->destroy_by_rcu = get_obj("destroy_by_rcu"); slab->hwcache_align = get_obj("hwcache_align"); slab->object_size = get_obj("object_size"); - slab->objects = get_obj("objects"); - slab->objects_partial = get_obj("objects_partial"); - slab->objects_total = get_obj("objects_total"); + + slab->objects = get_obj_and_str("objects", &t); + decode_numa_list(slab->numa_objects, t); + free(t); + + slab->objects_partial = get_obj_and_str("objects_partial", &t); + decode_numa_list(slab->numa_objects_partial, t); + free(t); + + slab->objects_total = get_obj_and_str("total_objects", &t); + decode_numa_list(slab->numa_total_objects, t); + free(t); + slab->objs_per_slab = get_obj("objs_per_slab"); slab->order = get_obj("order"); slab->partial = get_obj("partial"); @@ -1232,9 +1287,11 @@ static void read_slab_dir(void) slab->red_zone = get_obj("red_zone"); slab->sanity_checks = get_obj("sanity_checks"); slab->slab_size = get_obj("slab_size"); + slab->slabs = get_obj_and_str("slabs", &t); decode_numa_list(slab->numa, t); free(t); + slab->store_user = get_obj("store_user"); slab->trace = get_obj("trace"); slab->alloc_fastpath = get_obj("alloc_fastpath"); -- 2.17.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] tools: vm: slabinfo: Add numa information for objects 2020-02-17 8:48 ` [PATCH 2/2] tools: vm: slabinfo: Add numa information for objects Tobin C. Harding @ 2020-02-18 16:24 ` Christopher Lameter 2020-02-19 20:26 ` Tobin C. Harding 0 siblings, 1 reply; 7+ messages in thread From: Christopher Lameter @ 2020-02-18 16:24 UTC (permalink / raw) To: Tobin C. Harding; +Cc: Andrew Morton, linux-mm, linux-kernel On Mon, 17 Feb 2020, Tobin C. Harding wrote: > Add a field to the slabinfo struct for the NUMA information and > output it during a NUMA report as is done for `slabs` and `partial`. How will this look? Note that there are boxes now with potentially huge NUMA nodes (AMD Rome can already do 32 with an optimal BIOS layout for minimal latency). Maybe make it optional with a --numa switch or so? ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] tools: vm: slabinfo: Add numa information for objects 2020-02-18 16:24 ` Christopher Lameter @ 2020-02-19 20:26 ` Tobin C. Harding 0 siblings, 0 replies; 7+ messages in thread From: Tobin C. Harding @ 2020-02-19 20:26 UTC (permalink / raw) To: Christopher Lameter Cc: Tobin C. Harding, Andrew Morton, linux-mm, linux-kernel On Tue, Feb 18, 2020 at 04:24:54PM +0000, Christopher Lameter wrote: > On Mon, 17 Feb 2020, Tobin C. Harding wrote: > > > Add a field to the slabinfo struct for the NUMA information and > > output it during a NUMA report as is done for `slabs` and `partial`. > > How will this look? Note that there are boxes now with potentially huge > NUMA nodes (AMD Rome can already do 32 with an optimal BIOS layout for > minimal latency). > > Maybe make it optional with a --numa switch or so? Cool, can do. Thanks for the review. Tobin ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 0/2] slabinfo: parse all NUMA attributes 2020-02-17 8:48 [PATCH 0/2] slabinfo: parse all NUMA attributes Tobin C. Harding 2020-02-17 8:48 ` [PATCH 1/2] tools: vm: slabinfo: Replace tabs with spaces Tobin C. Harding 2020-02-17 8:48 ` [PATCH 2/2] tools: vm: slabinfo: Add numa information for objects Tobin C. Harding @ 2020-02-18 16:16 ` Christopher Lameter 2 siblings, 0 replies; 7+ messages in thread From: Christopher Lameter @ 2020-02-18 16:16 UTC (permalink / raw) To: Tobin C. Harding; +Cc: Andrew Morton, linux-mm, linux-kernel On Mon, 17 Feb 2020, Tobin C. Harding wrote: > I found a few files in /sys/kernel/slab/foo/ that contain NUMA info that > is not currently being parsed by `slabinfo.c`. I do not know whether > this is intentional or not? Since I did not know this I just printed > the info in the NUMA report section like is done for the per node slabs > and partial slabs info. > > Just for your interest; I found these while re-writing slabinfo in Rust, > thanks to the type-system. I guess that if they were unintentionally > missed then this is a small win, if they were intentionally missed then > this series is just noise :) It was just to make the display simpler and I did not get around to the full implementation (by adding some sort of NUMA option) since other things kept coming up. ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2020-02-19 20:27 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-02-17 8:48 [PATCH 0/2] slabinfo: parse all NUMA attributes Tobin C. Harding 2020-02-17 8:48 ` [PATCH 1/2] tools: vm: slabinfo: Replace tabs with spaces Tobin C. Harding 2020-02-18 16:19 ` Christopher Lameter 2020-02-17 8:48 ` [PATCH 2/2] tools: vm: slabinfo: Add numa information for objects Tobin C. Harding 2020-02-18 16:24 ` Christopher Lameter 2020-02-19 20:26 ` Tobin C. Harding 2020-02-18 16:16 ` [PATCH 0/2] slabinfo: parse all NUMA attributes Christopher Lameter
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).