All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@elte.hu>
To: Theodore Tso <tytso@mit.edu>, Andi Kleen <andi@firstfloor.org>,
	Christoph Lameter <clameter@sgi.com>, Willy Tarreau <w@1wt.eu>,
	Steven Rostedt <rostedt@goodmis.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	LKML <linux-kernel@vger.kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Christoph Hellwig <hch@infradead.org>,
	"Rafael J. Wysocki" <rjw@sisk.pl>
Subject: [patch] slub: provide /proc/slabinfo
Date: Tue, 1 Jan 2008 17:23:28 +0100	[thread overview]
Message-ID: <20080101162328.GC20426@elte.hu> (raw)
In-Reply-To: <20080101124741.GH11776@mit.edu>


* Theodore Tso <tytso@MIT.EDU> wrote:

> [...] doesn't a patch to provide /proc/slabinfo for SLUB already 
> exist?

yes, the complete (and tested) patch is below. It has been through a few 
thousand random-bootup tests on x86 32-bit and 64-bit so it's v2.6.24 
material i think.

	Ingo

----------------->
Subject: slub: provide /proc/slabinfo
From: Pekka J Enberg <penberg@cs.helsinki.fi>

This adds a read-only /proc/slabinfo file on SLUB, that makes slabtop work.

[ mingo@elte.hu: build fix. ]

Cc: Andi Kleen <andi@firstfloor.org>
Cc: Christoph Lameter <clameter@sgi.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
 include/linux/slub_def.h |    2 
 mm/slub.c                |  105 +++++++++++++++++++++++++++++++++++++++++------
 2 files changed, 94 insertions(+), 13 deletions(-)

Index: linux/include/linux/slub_def.h
===================================================================
--- linux.orig/include/linux/slub_def.h
+++ linux/include/linux/slub_def.h
@@ -200,4 +200,6 @@ static __always_inline void *kmalloc_nod
 }
 #endif
 
+extern const struct seq_operations slabinfo_op;
+
 #endif /* _LINUX_SLUB_DEF_H */
Index: linux/mm/slub.c
===================================================================
--- linux.orig/mm/slub.c
+++ linux/mm/slub.c
@@ -3076,6 +3076,19 @@ void *__kmalloc_node_track_caller(size_t
 	return slab_alloc(s, gfpflags, node, caller);
 }
 
+static unsigned long count_partial(struct kmem_cache_node *n)
+{
+	unsigned long flags;
+	unsigned long x = 0;
+	struct page *page;
+
+	spin_lock_irqsave(&n->list_lock, flags);
+	list_for_each_entry(page, &n->partial, lru)
+		x += page->inuse;
+	spin_unlock_irqrestore(&n->list_lock, flags);
+	return x;
+}
+
 #if defined(CONFIG_SYSFS) && defined(CONFIG_SLUB_DEBUG)
 static int validate_slab(struct kmem_cache *s, struct page *page,
 						unsigned long *map)
@@ -3458,19 +3471,6 @@ static int list_locations(struct kmem_ca
 	return n;
 }
 
-static unsigned long count_partial(struct kmem_cache_node *n)
-{
-	unsigned long flags;
-	unsigned long x = 0;
-	struct page *page;
-
-	spin_lock_irqsave(&n->list_lock, flags);
-	list_for_each_entry(page, &n->partial, lru)
-		x += page->inuse;
-	spin_unlock_irqrestore(&n->list_lock, flags);
-	return x;
-}
-
 enum slab_stat_type {
 	SL_FULL,
 	SL_PARTIAL,
@@ -4123,3 +4123,82 @@ static int __init slab_sysfs_init(void)
 
 __initcall(slab_sysfs_init);
 #endif
+
+/*
+ * The /proc/slabinfo ABI
+ */
+#ifdef CONFIG_PROC_FS
+
+static void print_slabinfo_header(struct seq_file *m)
+{
+	seq_puts(m, "slabinfo - version: 2.1\n");
+	seq_puts(m, "# name            <active_objs> <num_objs> <objsize> "
+		 "<objperslab> <pagesperslab>");
+	seq_puts(m, " : tunables <limit> <batchcount> <sharedfactor>");
+	seq_puts(m, " : slabdata <active_slabs> <num_slabs> <sharedavail>");
+	seq_putc(m, '\n');
+}
+
+static void *s_start(struct seq_file *m, loff_t *pos)
+{
+	loff_t n = *pos;
+
+	down_read(&slub_lock);
+	if (!n)
+		print_slabinfo_header(m);
+
+	return seq_list_start(&slab_caches, *pos);
+}
+
+static void *s_next(struct seq_file *m, void *p, loff_t *pos)
+{
+	return seq_list_next(p, &slab_caches, pos);
+}
+
+static void s_stop(struct seq_file *m, void *p)
+{
+	up_read(&slub_lock);
+}
+
+static int s_show(struct seq_file *m, void *p)
+{
+	unsigned long nr_partials = 0;
+	unsigned long nr_slabs = 0;
+	unsigned long nr_inuse = 0;
+	unsigned long nr_objs;
+	struct kmem_cache *s;
+	int node;
+
+	s = list_entry(p, struct kmem_cache, list);
+
+	for_each_online_node(node) {
+		struct kmem_cache_node *n = get_node(s, node);
+
+		if (!n)
+			continue;
+
+		nr_partials += n->nr_partial;
+		nr_slabs += atomic_long_read(&n->nr_slabs);
+		nr_inuse += count_partial(n);
+	}
+
+	nr_objs = nr_slabs * s->objects;
+	nr_inuse += (nr_slabs - nr_partials) * s->objects;
+
+	seq_printf(m, "%-17s %6lu %6lu %6u %4u %4d", s->name, nr_inuse,
+		   nr_objs, s->size, s->objects, (1 << s->order));
+	seq_printf(m, " : tunables %4u %4u %4u", 0, 0, 0);
+	seq_printf(m, " : slabdata %6lu %6lu %6lu", nr_slabs, nr_slabs,
+		   0UL);
+	seq_putc(m, '\n');
+	return 0;
+}
+
+const struct seq_operations slabinfo_op = {
+	.start = s_start,
+	.next = s_next,
+	.stop = s_stop,
+	.show = s_show,
+};
+
+#endif /* CONFIG_PROC_FS */

  parent reply	other threads:[~2008-01-01 16:24 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-12-07 17:50 Major regression on hackbench with SLUB Steven Rostedt
2007-12-07 17:55 ` Ingo Molnar
2007-12-07 17:59 ` Linus Torvalds
2007-12-07 18:36   ` Linus Torvalds
2007-12-07 18:58     ` Steven Rostedt
2007-12-08 22:16     ` Steven Rostedt
2007-12-10  7:38       ` Björn Steinbrink
2007-12-10 14:00         ` Steven Rostedt
2007-12-09  0:28     ` Steven Rostedt
2007-12-13 22:11     ` Christoph Lameter
2007-12-11 14:33 ` Major regression on hackbench with SLUB (more numbers) Ingo Molnar
2007-12-13 22:22   ` Christoph Lameter
2007-12-14  4:24     ` Christoph Lameter
2007-12-14  6:15       ` Steven Rostedt
2007-12-21 12:09       ` Ingo Molnar
2007-12-21 12:26         ` Ingo Molnar
2007-12-21 16:26           ` Christoph Lameter
2007-12-21 16:33             ` Ingo Molnar
2007-12-21 21:56               ` Christoph Lameter
2007-12-21 16:18         ` Christoph Lameter
2007-12-21 16:44           ` Linus Torvalds
2007-12-21 22:11             ` Christoph Lameter
2007-12-21 22:16               ` Peter Zijlstra
2007-12-21 22:17                 ` Peter Zijlstra
2007-12-21 22:27                   ` Christoph Lameter
2007-12-21 22:54                     ` Ingo Molnar
2007-12-21 23:20                       ` David Miller
2007-12-22  9:45                         ` Ingo Molnar
2007-12-24 19:24                           ` Christoph Lameter
2007-12-21 23:27                       ` Andrew Morton
2007-12-21 23:51                       ` Christoph Lameter
2007-12-22  0:28                       ` Andi Kleen
2007-12-22  0:33                         ` Chuck Ebbert
2007-12-22  2:19                         ` Matt Mackall
2007-12-22  2:44                           ` Andi Kleen
2007-12-22 10:03                         ` Ingo Molnar
2007-12-22 12:37                           ` Andi Kleen
2007-12-22 12:51                             ` Pekka Enberg
2007-12-22 12:54                               ` Andi Kleen
2007-12-22 13:27                                 ` Pekka Enberg
2007-12-22 13:01                             ` Alexey Dobriyan
2007-12-22 18:01                           ` Linus Torvalds
2007-12-22 19:09                             ` Ingo Molnar
2007-12-22 19:29                               ` Ingo Molnar
2007-12-22 22:52                               ` Jason L Tibbitts III
2007-12-24  3:59                                 ` Alessandro Suardi
2007-12-22 19:25                             ` Theodore Tso
2007-12-22 21:00                               ` Linus Torvalds
2007-12-22 21:50                                 ` Al Viro
2007-12-22 23:29                                   ` Al Viro
2007-12-22 22:10                                 ` Willy Tarreau
2007-12-23  0:59                                   ` Steven Rostedt
2007-12-23  5:12                                     ` Willy Tarreau
2007-12-23 14:15                                       ` Andi Kleen
2007-12-24  3:45                                         ` Theodore Tso
2007-12-24 19:21                                           ` Christoph Lameter
2007-12-24 23:37                                             ` Theodore Tso
2007-12-25  3:34                                               ` Andi Kleen
2008-01-01 12:47                                                 ` Theodore Tso
2008-01-01 15:19                                                   ` Andi Kleen
2008-01-01 16:23                                                   ` Ingo Molnar [this message]
2008-01-05  0:27                                                     ` [patch] slub: provide /proc/slabinfo Arjan van de Ven
2008-01-05  0:49                                                       ` Linus Torvalds
2007-12-26 21:31                                               ` Major regression on hackbench with SLUB (more numbers) Christoph Lameter
2007-12-26 22:16                                                 ` Al Viro
2007-12-27  5:51                                                   ` Christoph Lameter
2007-12-27 20:28                                                     ` SLUB sysfs support Christoph Lameter
2007-12-27 22:59                                                       ` Al Viro
2007-12-27 23:22                                                         ` Christoph Lameter
2007-12-27 23:53                                                           ` Christoph Lameter
2007-12-27 23:58                                                             ` Al Viro
2007-12-28  0:02                                                               ` Christoph Lameter
2007-12-28  0:45                                                                 ` Al Viro
2007-12-28  2:19                                                                   ` Christoph Lameter
2007-12-28  3:26                                                                     ` Al Viro
2008-01-02 20:25                                                                       ` Christoph Lameter
2007-12-27 23:54                                                           ` Al Viro
2007-12-28  9:00                                                   ` Major regression on hackbench with SLUB (more numbers) Ingo Molnar
2007-12-28 14:52                                                     ` Steven Rostedt
2007-12-22 19:46                             ` slabtop replacement was " Andi Kleen
2007-12-22 23:28                               ` Karol Swietlicki
2007-12-29 18:08                                 ` Karol Swietlicki
2007-12-21 22:49               ` Linus Torvalds
2007-12-21 17:44         ` Pekka Enberg
2007-12-21 22:22           ` Christoph Lameter
2007-12-21 22:37             ` Christoph Lameter
2007-12-21 22:51               ` Linus Torvalds
2007-12-21 23:17                 ` Ingo Molnar
2007-12-21 23:40                   ` Pekka Enberg
2007-12-21 23:54                   ` Christoph Lameter
2007-12-22  0:02                     ` Chuck Ebbert
2007-12-21 22:52               ` Steven Rostedt
2007-12-21 22:56               ` Ingo Molnar
  -- strict thread matches above, loose matches on Subject: below --
2008-01-07 12:28 [PATCH] slub: provide /proc/slabinfo Pekka J Enberg

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=20080101162328.GC20426@elte.hu \
    --to=mingo@elte.hu \
    --cc=a.p.zijlstra@chello.nl \
    --cc=akpm@linux-foundation.org \
    --cc=andi@firstfloor.org \
    --cc=clameter@sgi.com \
    --cc=hch@infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rjw@sisk.pl \
    --cc=rostedt@goodmis.org \
    --cc=torvalds@linux-foundation.org \
    --cc=tytso@mit.edu \
    --cc=w@1wt.eu \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.