Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 78eb00cc authored by David Rientjes's avatar David Rientjes Committed by Pekka Enberg
Browse files

slub: allow stats to be cleared



When collecting slub stats for particular workloads, it's necessary to
collect each statistic for all caches before the job is even started
because the counters are usually greater than zero just from boot and
initialization.

This allows a statistic to be cleared on each cpu by writing '0' to its
sysfs file.  This creates a baseline for statistics of interest before
the workload is started.

Setting a statistic to a particular value is not supported, so all values
written to these files other than '0' returns -EINVAL.

Cc: Christoph Lameter <cl@linux-foundation.org>
Signed-off-by: default avatarDavid Rientjes <rientjes@google.com>
Signed-off-by: default avatarPekka Enberg <penberg@cs.helsinki.fi>
parent 374576a8
Loading
Loading
Loading
Loading
+58 −51
Original line number Original line Diff line number Diff line
@@ -45,8 +45,9 @@ KernelVersion: 2.6.25
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
		Christoph Lameter <cl@linux-foundation.org>
		Christoph Lameter <cl@linux-foundation.org>
Description:
Description:
		The alloc_fastpath file is read-only and specifies how many
		The alloc_fastpath file shows how many objects have been
		objects have been allocated using the fast path.
		allocated using the fast path.  It can be written to clear the
		current count.
		Available when CONFIG_SLUB_STATS is enabled.
		Available when CONFIG_SLUB_STATS is enabled.


What:		/sys/kernel/slab/cache/alloc_from_partial
What:		/sys/kernel/slab/cache/alloc_from_partial
@@ -55,9 +56,10 @@ KernelVersion: 2.6.25
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
		Christoph Lameter <cl@linux-foundation.org>
		Christoph Lameter <cl@linux-foundation.org>
Description:
Description:
		The alloc_from_partial file is read-only and specifies how
		The alloc_from_partial file shows how many times a cpu slab has
		many times a cpu slab has been full and it has been refilled
		been full and it has been refilled by using a slab from the list
		by using a slab from the list of partially used slabs.
		of partially used slabs.  It can be written to clear the current
		count.
		Available when CONFIG_SLUB_STATS is enabled.
		Available when CONFIG_SLUB_STATS is enabled.


What:		/sys/kernel/slab/cache/alloc_refill
What:		/sys/kernel/slab/cache/alloc_refill
@@ -66,9 +68,9 @@ KernelVersion: 2.6.25
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
		Christoph Lameter <cl@linux-foundation.org>
		Christoph Lameter <cl@linux-foundation.org>
Description:
Description:
		The alloc_refill file is read-only and specifies how many
		The alloc_refill file shows how many times the per-cpu freelist
		times the per-cpu freelist was empty but there were objects
		was empty but there were objects available as the result of
		available as the result of remote cpu frees.
		remote cpu frees.  It can be written to clear the current count.
		Available when CONFIG_SLUB_STATS is enabled.
		Available when CONFIG_SLUB_STATS is enabled.


What:		/sys/kernel/slab/cache/alloc_slab
What:		/sys/kernel/slab/cache/alloc_slab
@@ -77,8 +79,9 @@ KernelVersion: 2.6.25
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
		Christoph Lameter <cl@linux-foundation.org>
		Christoph Lameter <cl@linux-foundation.org>
Description:
Description:
		The alloc_slab file is read-only and specifies how many times
		The alloc_slab file is shows how many times a new slab had to
		a new slab had to be allocated from the page allocator.
		be allocated from the page allocator.  It can be written to
		clear the current count.
		Available when CONFIG_SLUB_STATS is enabled.
		Available when CONFIG_SLUB_STATS is enabled.


What:		/sys/kernel/slab/cache/alloc_slowpath
What:		/sys/kernel/slab/cache/alloc_slowpath
@@ -87,9 +90,10 @@ KernelVersion: 2.6.25
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
		Christoph Lameter <cl@linux-foundation.org>
		Christoph Lameter <cl@linux-foundation.org>
Description:
Description:
		The alloc_slowpath file is read-only and specifies how many
		The alloc_slowpath file shows how many objects have been
		objects have been allocated using the slow path because of a
		allocated using the slow path because of a refill or
		refill or allocation from a partial or new slab.
		allocation from a partial or new slab.  It can be written to
		clear the current count.
		Available when CONFIG_SLUB_STATS is enabled.
		Available when CONFIG_SLUB_STATS is enabled.


What:		/sys/kernel/slab/cache/cache_dma
What:		/sys/kernel/slab/cache/cache_dma
@@ -117,10 +121,11 @@ KernelVersion: 2.6.31
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
		Christoph Lameter <cl@linux-foundation.org>
		Christoph Lameter <cl@linux-foundation.org>
Description:
Description:
		The file cpuslab_flush is read-only and specifies how many
		The file cpuslab_flush shows how many times a cache's cpu slabs
		times a cache's cpu slabs have been flushed as the result of
		have been flushed as the result of destroying or shrinking a
		destroying or shrinking a cache, a cpu going offline, or as
		cache, a cpu going offline, or as the result of forcing an
		the result of forcing an allocation from a certain node.
		allocation from a certain node.  It can be written to clear the
		current count.
		Available when CONFIG_SLUB_STATS is enabled.
		Available when CONFIG_SLUB_STATS is enabled.


What:		/sys/kernel/slab/cache/ctor
What:		/sys/kernel/slab/cache/ctor
@@ -139,8 +144,8 @@ KernelVersion: 2.6.25
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
		Christoph Lameter <cl@linux-foundation.org>
		Christoph Lameter <cl@linux-foundation.org>
Description:
Description:
		The file deactivate_empty is read-only and specifies how many
		The deactivate_empty file shows how many times an empty cpu slab
		times an empty cpu slab was deactivated.
		was deactivated.  It can be written to clear the current count.
		Available when CONFIG_SLUB_STATS is enabled.
		Available when CONFIG_SLUB_STATS is enabled.


What:		/sys/kernel/slab/cache/deactivate_full
What:		/sys/kernel/slab/cache/deactivate_full
@@ -149,8 +154,8 @@ KernelVersion: 2.6.25
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
		Christoph Lameter <cl@linux-foundation.org>
		Christoph Lameter <cl@linux-foundation.org>
Description:
Description:
		The file deactivate_full is read-only and specifies how many
		The deactivate_full file shows how many times a full cpu slab
		times a full cpu slab was deactivated.
		was deactivated.  It can be written to clear the current count.
		Available when CONFIG_SLUB_STATS is enabled.
		Available when CONFIG_SLUB_STATS is enabled.


What:		/sys/kernel/slab/cache/deactivate_remote_frees
What:		/sys/kernel/slab/cache/deactivate_remote_frees
@@ -159,9 +164,9 @@ KernelVersion: 2.6.25
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
		Christoph Lameter <cl@linux-foundation.org>
		Christoph Lameter <cl@linux-foundation.org>
Description:
Description:
		The file deactivate_remote_frees is read-only and specifies how
		The deactivate_remote_frees file shows how many times a cpu slab
		many times a cpu slab has been deactivated and contained free
		has been deactivated and contained free objects that were freed
		objects that were freed remotely.
		remotely.  It can be written to clear the current count.
		Available when CONFIG_SLUB_STATS is enabled.
		Available when CONFIG_SLUB_STATS is enabled.


What:		/sys/kernel/slab/cache/deactivate_to_head
What:		/sys/kernel/slab/cache/deactivate_to_head
@@ -170,9 +175,9 @@ KernelVersion: 2.6.25
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
		Christoph Lameter <cl@linux-foundation.org>
		Christoph Lameter <cl@linux-foundation.org>
Description:
Description:
		The file deactivate_to_head is read-only and specifies how
		The deactivate_to_head file shows how many times a partial cpu
		many times a partial cpu slab was deactivated and added to the
		slab was deactivated and added to the head of its node's partial
		head of its node's partial list.
		list.  It can be written to clear the current count.
		Available when CONFIG_SLUB_STATS is enabled.
		Available when CONFIG_SLUB_STATS is enabled.


What:		/sys/kernel/slab/cache/deactivate_to_tail
What:		/sys/kernel/slab/cache/deactivate_to_tail
@@ -181,9 +186,9 @@ KernelVersion: 2.6.25
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
		Christoph Lameter <cl@linux-foundation.org>
		Christoph Lameter <cl@linux-foundation.org>
Description:
Description:
		The file deactivate_to_tail is read-only and specifies how
		The deactivate_to_tail file shows how many times a partial cpu
		many times a partial cpu slab was deactivated and added to the
		slab was deactivated and added to the tail of its node's partial
		tail of its node's partial list.
		list.  It can be written to clear the current count.
		Available when CONFIG_SLUB_STATS is enabled.
		Available when CONFIG_SLUB_STATS is enabled.


What:		/sys/kernel/slab/cache/destroy_by_rcu
What:		/sys/kernel/slab/cache/destroy_by_rcu
@@ -201,9 +206,9 @@ KernelVersion: 2.6.25
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
		Christoph Lameter <cl@linux-foundation.org>
		Christoph Lameter <cl@linux-foundation.org>
Description:
Description:
		The file free_add_partial is read-only and specifies how many
		The free_add_partial file shows how many times an object has
		times an object has been freed in a full slab so that it had to
		been freed in a full slab so that it had to added to its node's
		added to its node's partial list.
		partial list.  It can be written to clear the current count.
		Available when CONFIG_SLUB_STATS is enabled.
		Available when CONFIG_SLUB_STATS is enabled.


What:		/sys/kernel/slab/cache/free_calls
What:		/sys/kernel/slab/cache/free_calls
@@ -222,9 +227,9 @@ KernelVersion: 2.6.25
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
		Christoph Lameter <cl@linux-foundation.org>
		Christoph Lameter <cl@linux-foundation.org>
Description:
Description:
		The free_fastpath file is read-only and specifies how many
		The free_fastpath file shows how many objects have been freed
		objects have been freed using the fast path because it was an
		using the fast path because it was an object from the cpu slab.
		object from the cpu slab.
		It can be written to clear the current count.
		Available when CONFIG_SLUB_STATS is enabled.
		Available when CONFIG_SLUB_STATS is enabled.


What:		/sys/kernel/slab/cache/free_frozen
What:		/sys/kernel/slab/cache/free_frozen
@@ -233,9 +238,9 @@ KernelVersion: 2.6.25
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
		Christoph Lameter <cl@linux-foundation.org>
		Christoph Lameter <cl@linux-foundation.org>
Description:
Description:
		The free_frozen file is read-only and specifies how many
		The free_frozen file shows how many objects have been freed to
		objects have been freed to a frozen slab (i.e. a remote cpu
		a frozen slab (i.e. a remote cpu slab).  It can be written to
		slab).
		clear the current count.
		Available when CONFIG_SLUB_STATS is enabled.
		Available when CONFIG_SLUB_STATS is enabled.


What:		/sys/kernel/slab/cache/free_remove_partial
What:		/sys/kernel/slab/cache/free_remove_partial
@@ -244,9 +249,10 @@ KernelVersion: 2.6.25
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
		Christoph Lameter <cl@linux-foundation.org>
		Christoph Lameter <cl@linux-foundation.org>
Description:
Description:
		The file free_remove_partial is read-only and specifies how
		The free_remove_partial file shows how many times an object has
		many times an object has been freed to a now-empty slab so
		been freed to a now-empty slab so that it had to be removed from
		that it had to be removed from its node's partial list.
		its node's partial list.  It can be written to clear the current
		count.
		Available when CONFIG_SLUB_STATS is enabled.
		Available when CONFIG_SLUB_STATS is enabled.


What:		/sys/kernel/slab/cache/free_slab
What:		/sys/kernel/slab/cache/free_slab
@@ -255,8 +261,9 @@ KernelVersion: 2.6.25
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
		Christoph Lameter <cl@linux-foundation.org>
		Christoph Lameter <cl@linux-foundation.org>
Description:
Description:
		The free_slab file is read-only and specifies how many times an
		The free_slab file shows how many times an empty slab has been
		empty slab has been freed back to the page allocator.
		freed back to the page allocator.  It can be written to clear
		the current count.
		Available when CONFIG_SLUB_STATS is enabled.
		Available when CONFIG_SLUB_STATS is enabled.


What:		/sys/kernel/slab/cache/free_slowpath
What:		/sys/kernel/slab/cache/free_slowpath
@@ -265,9 +272,9 @@ KernelVersion: 2.6.25
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
		Christoph Lameter <cl@linux-foundation.org>
		Christoph Lameter <cl@linux-foundation.org>
Description:
Description:
		The free_slowpath file is read-only and specifies how many
		The free_slowpath file shows how many objects have been freed
		objects have been freed using the slow path (i.e. to a full or
		using the slow path (i.e. to a full or partial slab).  It can
		partial slab).
		be written to clear the current count.
		Available when CONFIG_SLUB_STATS is enabled.
		Available when CONFIG_SLUB_STATS is enabled.


What:		/sys/kernel/slab/cache/hwcache_align
What:		/sys/kernel/slab/cache/hwcache_align
@@ -346,10 +353,10 @@ KernelVersion: 2.6.26
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
		Christoph Lameter <cl@linux-foundation.org>
		Christoph Lameter <cl@linux-foundation.org>
Description:
Description:
		The file order_fallback is read-only and specifies how many
		The order_fallback file shows how many times an allocation of a
		times an allocation of a new slab has not been possible at the
		new slab has not been possible at the cache's order and instead
		cache's order and instead fallen back to its minimum possible
		fallen back to its minimum possible order.  It can be written to
		order.
		clear the current count.
		Available when CONFIG_SLUB_STATS is enabled.
		Available when CONFIG_SLUB_STATS is enabled.


What:		/sys/kernel/slab/cache/partial
What:		/sys/kernel/slab/cache/partial
+17 −1
Original line number Original line Diff line number Diff line
@@ -4371,12 +4371,28 @@ static int show_stat(struct kmem_cache *s, char *buf, enum stat_item si)
	return len + sprintf(buf + len, "\n");
	return len + sprintf(buf + len, "\n");
}
}


static void clear_stat(struct kmem_cache *s, enum stat_item si)
{
	int cpu;

	for_each_online_cpu(cpu)
		get_cpu_slab(s, cpu)->stat[si] = 0;
}

#define STAT_ATTR(si, text) 					\
#define STAT_ATTR(si, text) 					\
static ssize_t text##_show(struct kmem_cache *s, char *buf)	\
static ssize_t text##_show(struct kmem_cache *s, char *buf)	\
{								\
{								\
	return show_stat(s, buf, si);				\
	return show_stat(s, buf, si);				\
}								\
}								\
SLAB_ATTR_RO(text);						\
static ssize_t text##_store(struct kmem_cache *s,		\
				const char *buf, size_t length)	\
{								\
	if (buf[0] != '0')					\
		return -EINVAL;					\
	clear_stat(s, si);					\
	return length;						\
}								\
SLAB_ATTR(text);						\


STAT_ATTR(ALLOC_FASTPATH, alloc_fastpath);
STAT_ATTR(ALLOC_FASTPATH, alloc_fastpath);
STAT_ATTR(ALLOC_SLOWPATH, alloc_slowpath);
STAT_ATTR(ALLOC_SLOWPATH, alloc_slowpath);