linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: "Tobin C. Harding" <tobin@kernel.org>
To: Christoph Lameter <cl@linux.com>
Cc: "Tobin C. Harding" <tobin@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: [PATCH 2/2] tools: vm: slabinfo: Add numa information for objects
Date: Mon, 17 Feb 2020 19:48:28 +1100	[thread overview]
Message-ID: <20200217084828.9092-3-tobin@kernel.org> (raw)
In-Reply-To: <20200217084828.9092-1-tobin@kernel.org>

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



  parent reply	other threads:[~2020-02-17  8:48 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 ` Tobin C. Harding [this message]
2020-02-18 16:24   ` [PATCH 2/2] tools: vm: slabinfo: Add numa information for objects 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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200217084828.9092-3-tobin@kernel.org \
    --to=tobin@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=cl@linux.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).