All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <a.p.zijlstra@chello.nl>
To: linux-mm@kvack.org, linux-kernel@vger.kernel.org
Cc: miklos@szeredi.hu, akpm@linux-foundation.org, neilb@suse.de,
	dgc@sgi.com, tomoki.sekiyama.qu@hitachi.com,
	a.p.zijlstra@chello.nl, nikita@clusterfs.com,
	trond.myklebust@fys.uio.no, yingchao.zhou@gmail.com,
	richard@rsk.demon.co.uk, torvalds@linux-foundation.org
Subject: [PATCH 20/23] lib: floating proportions _single
Date: Fri, 03 Aug 2007 14:37:33 +0200	[thread overview]
Message-ID: <20070803125237.453095000@chello.nl> (raw)
In-Reply-To: 20070803123712.987126000@chello.nl

[-- Attachment #1: proportions_single.patch --]
[-- Type: text/plain, Size: 9491 bytes --]

Provide a prop_local that does not use a percpu variable for its counter.
This is useful for items that are not (or infrequently) accessed from
multiple context and/or are plenty enought that the percpu_counter overhead
will hurt (tasks).

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
---
 include/linux/proportions.h |  113 +++++++++++++++++++++++++++++++++++++--
 lib/proportions.c           |  125 ++++++++++++++++++++++++++++++++++++++++----
 2 files changed, 220 insertions(+), 18 deletions(-)

Index: linux-2.6/include/linux/proportions.h
===================================================================
--- linux-2.6.orig/include/linux/proportions.h
+++ linux-2.6/include/linux/proportions.h
@@ -45,7 +45,11 @@ void prop_change_shift(struct prop_descr
 struct prop_global *prop_get_global(struct prop_descriptor *pd);
 void prop_put_global(struct prop_descriptor *pd, struct prop_global *pg);
 
-struct prop_local {
+/*
+ * ----- PERCPU ------
+ */
+
+struct prop_local_percpu {
 	/*
 	 * the local events counter
 	 */
@@ -59,23 +63,118 @@ struct prop_local {
 	spinlock_t lock;		/* protect the snapshot state */
 };
 
-int prop_local_init(struct prop_local *pl);
-void prop_local_destroy(struct prop_local *pl);
+int prop_local_init_percpu(struct prop_local_percpu *pl);
+void prop_local_destroy_percpu(struct prop_local_percpu *pl);
 
-void prop_norm(struct prop_global *pg, struct prop_local *pl);
+void prop_norm_percpu(struct prop_global *pg, struct prop_local_percpu *pl);
 
 /*
  *   ++x_{j}, ++t
  */
 static inline
-void __prop_inc(struct prop_global *pg, struct prop_local *pl)
+void __prop_inc_percpu(struct prop_global *pg, struct prop_local_percpu *pl)
 {
-	prop_norm(pg, pl);
+	prop_norm_percpu(pg, pl);
 	percpu_counter_add(&pl->events, 1);
 	percpu_counter_add(&pg->events, 1);
 }
 
-void prop_fraction(struct prop_global *pg, struct prop_local *pl,
+void prop_fraction_percpu(struct prop_global *pg, struct prop_local_percpu *pl,
+		long *numerator, long *denominator);
+
+/*
+ * ----- SINGLE ------
+ */
+
+struct prop_local_single {
+	/*
+	 * the local events counter
+	 */
+	unsigned long events;
+
+	/*
+	 * snapshot of the last seen global state
+	 * and a lock protecting this state
+	 */
+	int shift;
+	unsigned long period;
+	spinlock_t lock;		/* protect the snapshot state */
+};
+
+int prop_local_init_single(struct prop_local_single *pl);
+void prop_local_destroy_single(struct prop_local_single *pl);
+
+void prop_norm_single(struct prop_global *pg, struct prop_local_single *pl);
+
+/*
+ *   ++x_{j}, ++t
+ */
+static inline
+void __prop_inc_single(struct prop_global *pg, struct prop_local_single *pl)
+{
+	prop_norm_single(pg, pl);
+	pl->events++;
+	percpu_counter_add(&pg->events, 1);
+}
+
+void prop_fraction_single(struct prop_global *pg, struct prop_local_single *pl,
 		long *numerator, long *denominator);
 
+/*
+ * ----- GLUE ------
+ */
+
+#undef TYPE_EQUAL
+#define TYPE_EQUAL(expr, type) \
+	__builtin_types_compatible_p(typeof(expr), type)
+
+extern int __bad_prop_local(void);
+
+#define prop_local_init(prop_local)					\
+({	int err;							\
+	if (TYPE_EQUAL(*(prop_local), struct prop_local_percpu))	\
+		err = prop_local_init_percpu(				\
+			(struct prop_local_percpu *)(prop_local));	\
+	else if (TYPE_EQUAL(*(prop_local), struct prop_local_single))	\
+		err = prop_local_init_single(				\
+			(struct prop_local_single *)(prop_local));	\
+	else __bad_prop_local();					\
+	err;								\
+})
+
+#define prop_local_destroy(prop_local)					\
+do {									\
+	if (TYPE_EQUAL(*(prop_local), struct prop_local_percpu))	\
+		prop_local_destroy_percpu(				\
+			(struct prop_local_percpu *)(prop_local));	\
+	else if (TYPE_EQUAL(*(prop_local), struct prop_local_single))	\
+		prop_local_destroy_single(				\
+			(struct prop_local_single *)(prop_local));	\
+	else __bad_prop_local();					\
+} while (0)
+
+#define __prop_inc(prop_global, prop_local)				\
+do {									\
+	if (TYPE_EQUAL(*(prop_local), struct prop_local_percpu))	\
+		__prop_inc_percpu(prop_global,				\
+			(struct prop_local_percpu *)(prop_local)); 	\
+	else if (TYPE_EQUAL(*(prop_local), struct prop_local_single))	\
+		__prop_inc_single(prop_global,				\
+			(struct prop_local_single *)(prop_local)); 	\
+	else __bad_prop_local();					\
+} while (0)
+
+#define prop_fraction(prop_global, prop_local, num, denom)		\
+do {									\
+	if (TYPE_EQUAL(*(prop_local), struct prop_local_percpu))	\
+		prop_fraction_percpu(prop_global,			\
+			(struct prop_local_percpu *)(prop_local),	\
+			num, denom);					\
+	else if (TYPE_EQUAL(*(prop_local), struct prop_local_single))	\
+		prop_fraction_single(prop_global,			\
+			(struct prop_local_single *)(prop_local),	\
+			num, denom);					\
+	else __bad_prop_local();					\
+} while (0)
+
 #endif /* _LINUX_PROPORTIONS_H */
Index: linux-2.6/lib/proportions.c
===================================================================
--- linux-2.6.orig/lib/proportions.c
+++ linux-2.6/lib/proportions.c
@@ -158,22 +158,31 @@ void prop_put_global(struct prop_descrip
 	rcu_read_unlock();
 }
 
-static void prop_adjust_shift(struct prop_local *pl, int new_shift)
+static void
+__prop_adjust_shift(int *pl_shift, unsigned long *pl_period, int new_shift)
 {
-	int offset = pl->shift - new_shift;
+	int offset = *pl_shift - new_shift;
 
 	if (!offset)
 		return;
 
 	if (offset < 0)
-		pl->period <<= -offset;
+		*pl_period <<= -offset;
 	else
-		pl->period >>= offset;
+		*pl_period >>= offset;
 
-	pl->shift = new_shift;
+	*pl_shift = new_shift;
 }
 
-int prop_local_init(struct prop_local *pl)
+#define prop_adjust_shift(prop_local, pg_shift)			\
+	__prop_adjust_shift(&(prop_local)->shift,		\
+			    &(prop_local)->period, pg_shift)
+
+/*
+ * PERCPU
+ */
+
+int prop_local_init_percpu(struct prop_local_percpu *pl)
 {
 	spin_lock_init(&pl->lock);
 	pl->shift = 0;
@@ -181,7 +190,7 @@ int prop_local_init(struct prop_local *p
 	return percpu_counter_init_irq(&pl->events, 0);
 }
 
-void prop_local_destroy(struct prop_local *pl)
+void prop_local_destroy_percpu(struct prop_local_percpu *pl)
 {
 	percpu_counter_destroy(&pl->events);
 }
@@ -193,8 +202,7 @@ void prop_local_destroy(struct prop_loca
  *     x_{j} -= x_{j}/2;
  *     c_{j}++;
  */
-void prop_norm(struct prop_global *pg,
-		struct prop_local *pl)
+void prop_norm_percpu(struct prop_global *pg, struct prop_local_percpu *pl)
 {
 	unsigned long period = 1UL << (pg->shift - 1);
 	unsigned long period_mask = ~(period - 1);
@@ -247,17 +255,112 @@ void prop_norm(struct prop_global *pg,
  *
  *   p_{j} = x_{j} / (period/2 + t % period/2)
  */
-void prop_fraction(struct prop_global *pg, struct prop_local *pl,
+void prop_fraction_percpu(struct prop_global *pg, struct prop_local_percpu *pl,
 		long *numerator, long *denominator)
 {
 	unsigned long period_2 = 1UL << (pg->shift - 1);
 	unsigned long counter_mask = period_2 - 1;
 	unsigned long global_count;
 
-	prop_norm(pg, pl);
+	prop_norm_percpu(pg, pl);
 	*numerator = percpu_counter_read_positive(&pl->events);
 
 	global_count = percpu_counter_read(&pg->events);
 	*denominator = period_2 + (global_count & counter_mask);
 }
 
+/*
+ * SINGLE
+ */
+
+int prop_local_init_single(struct prop_local_single *pl)
+{
+	spin_lock_init(&pl->lock);
+	pl->shift = 0;
+	pl->period = 0;
+	pl->events = 0;
+	return 0;
+}
+
+void prop_local_destroy_single(struct prop_local_single *pl)
+{
+}
+
+/*
+ * Catch up with missed period expirations.
+ *
+ *   until (c_{j} == c)
+ *     x_{j} -= x_{j}/2;
+ *     c_{j}++;
+ */
+void prop_norm_single(struct prop_global *pg, struct prop_local_single *pl)
+{
+	unsigned long period = 1UL << (pg->shift - 1);
+	unsigned long period_mask = ~(period - 1);
+	unsigned long global_period;
+	unsigned long flags;
+
+	global_period = percpu_counter_read(&pg->events);
+	global_period &= period_mask;
+
+	/*
+	 * Fast path - check if the local and global period count still match
+	 * outside of the lock.
+	 */
+	if (pl->period == global_period)
+		return;
+
+	spin_lock_irqsave(&pl->lock, flags);
+	prop_adjust_shift(pl, pg->shift);
+	/*
+	 * For each missed period, we half the local counter.
+	 * basically:
+	 *   pl->events >> (global_period - pl->period);
+	 *
+	 * but since the distributed nature of single counters make division
+	 * rather hard, use a regular subtraction loop. This is safe, because
+	 * the events will only every be incremented, hence the subtraction
+	 * can never result in a negative number.
+	 */
+	while (pl->period != global_period) {
+		unsigned long val = pl->events;
+		unsigned long half = (val + 1) >> 1;
+
+		/*
+		 * Half of zero won't be much less, break out.
+		 * This limits the loop to shift iterations, even
+		 * if we missed a million.
+		 */
+		if (!val)
+			break;
+
+		/*
+		 * Iff shift >32 half might exceed the limits of
+		 * the regular single_counter_mod.
+		 */
+		pl->events -= half;
+		pl->period += period;
+	}
+	pl->period = global_period;
+	spin_unlock_irqrestore(&pl->lock, flags);
+}
+
+/*
+ * Obtain an fraction of this proportion
+ *
+ *   p_{j} = x_{j} / (period/2 + t % period/2)
+ */
+void prop_fraction_single(struct prop_global *pg, struct prop_local_single *pl,
+		long *numerator, long *denominator)
+{
+	unsigned long period_2 = 1UL << (pg->shift - 1);
+	unsigned long counter_mask = period_2 - 1;
+	unsigned long global_count;
+
+	prop_norm_single(pg, pl);
+	*numerator = pl->events;
+
+	global_count = percpu_counter_read(&pg->events);
+	*denominator = period_2 + (global_count & counter_mask);
+}
+

--


WARNING: multiple messages have this Message-ID (diff)
From: Peter Zijlstra <a.p.zijlstra@chello.nl>
To: linux-mm@kvack.org, linux-kernel@vger.kernel.org
Cc: miklos@szeredi.hu, akpm@linux-foundation.org, neilb@suse.de,
	dgc@sgi.com, tomoki.sekiyama.qu@hitachi.com,
	a.p.zijlstra@chello.nl, nikita@clusterfs.com,
	trond.myklebust@fys.uio.no, yingchao.zhou@gmail.com,
	richard@rsk.demon.co.uk, torvalds@linux-foundation.org
Subject: [PATCH 20/23] lib: floating proportions _single
Date: Fri, 03 Aug 2007 14:37:33 +0200	[thread overview]
Message-ID: <20070803125237.453095000@chello.nl> (raw)
In-Reply-To: 20070803123712.987126000@chello.nl

[-- Attachment #1: proportions_single.patch --]
[-- Type: text/plain, Size: 9716 bytes --]

Provide a prop_local that does not use a percpu variable for its counter.
This is useful for items that are not (or infrequently) accessed from
multiple context and/or are plenty enought that the percpu_counter overhead
will hurt (tasks).

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
---
 include/linux/proportions.h |  113 +++++++++++++++++++++++++++++++++++++--
 lib/proportions.c           |  125 ++++++++++++++++++++++++++++++++++++++++----
 2 files changed, 220 insertions(+), 18 deletions(-)

Index: linux-2.6/include/linux/proportions.h
===================================================================
--- linux-2.6.orig/include/linux/proportions.h
+++ linux-2.6/include/linux/proportions.h
@@ -45,7 +45,11 @@ void prop_change_shift(struct prop_descr
 struct prop_global *prop_get_global(struct prop_descriptor *pd);
 void prop_put_global(struct prop_descriptor *pd, struct prop_global *pg);
 
-struct prop_local {
+/*
+ * ----- PERCPU ------
+ */
+
+struct prop_local_percpu {
 	/*
 	 * the local events counter
 	 */
@@ -59,23 +63,118 @@ struct prop_local {
 	spinlock_t lock;		/* protect the snapshot state */
 };
 
-int prop_local_init(struct prop_local *pl);
-void prop_local_destroy(struct prop_local *pl);
+int prop_local_init_percpu(struct prop_local_percpu *pl);
+void prop_local_destroy_percpu(struct prop_local_percpu *pl);
 
-void prop_norm(struct prop_global *pg, struct prop_local *pl);
+void prop_norm_percpu(struct prop_global *pg, struct prop_local_percpu *pl);
 
 /*
  *   ++x_{j}, ++t
  */
 static inline
-void __prop_inc(struct prop_global *pg, struct prop_local *pl)
+void __prop_inc_percpu(struct prop_global *pg, struct prop_local_percpu *pl)
 {
-	prop_norm(pg, pl);
+	prop_norm_percpu(pg, pl);
 	percpu_counter_add(&pl->events, 1);
 	percpu_counter_add(&pg->events, 1);
 }
 
-void prop_fraction(struct prop_global *pg, struct prop_local *pl,
+void prop_fraction_percpu(struct prop_global *pg, struct prop_local_percpu *pl,
+		long *numerator, long *denominator);
+
+/*
+ * ----- SINGLE ------
+ */
+
+struct prop_local_single {
+	/*
+	 * the local events counter
+	 */
+	unsigned long events;
+
+	/*
+	 * snapshot of the last seen global state
+	 * and a lock protecting this state
+	 */
+	int shift;
+	unsigned long period;
+	spinlock_t lock;		/* protect the snapshot state */
+};
+
+int prop_local_init_single(struct prop_local_single *pl);
+void prop_local_destroy_single(struct prop_local_single *pl);
+
+void prop_norm_single(struct prop_global *pg, struct prop_local_single *pl);
+
+/*
+ *   ++x_{j}, ++t
+ */
+static inline
+void __prop_inc_single(struct prop_global *pg, struct prop_local_single *pl)
+{
+	prop_norm_single(pg, pl);
+	pl->events++;
+	percpu_counter_add(&pg->events, 1);
+}
+
+void prop_fraction_single(struct prop_global *pg, struct prop_local_single *pl,
 		long *numerator, long *denominator);
 
+/*
+ * ----- GLUE ------
+ */
+
+#undef TYPE_EQUAL
+#define TYPE_EQUAL(expr, type) \
+	__builtin_types_compatible_p(typeof(expr), type)
+
+extern int __bad_prop_local(void);
+
+#define prop_local_init(prop_local)					\
+({	int err;							\
+	if (TYPE_EQUAL(*(prop_local), struct prop_local_percpu))	\
+		err = prop_local_init_percpu(				\
+			(struct prop_local_percpu *)(prop_local));	\
+	else if (TYPE_EQUAL(*(prop_local), struct prop_local_single))	\
+		err = prop_local_init_single(				\
+			(struct prop_local_single *)(prop_local));	\
+	else __bad_prop_local();					\
+	err;								\
+})
+
+#define prop_local_destroy(prop_local)					\
+do {									\
+	if (TYPE_EQUAL(*(prop_local), struct prop_local_percpu))	\
+		prop_local_destroy_percpu(				\
+			(struct prop_local_percpu *)(prop_local));	\
+	else if (TYPE_EQUAL(*(prop_local), struct prop_local_single))	\
+		prop_local_destroy_single(				\
+			(struct prop_local_single *)(prop_local));	\
+	else __bad_prop_local();					\
+} while (0)
+
+#define __prop_inc(prop_global, prop_local)				\
+do {									\
+	if (TYPE_EQUAL(*(prop_local), struct prop_local_percpu))	\
+		__prop_inc_percpu(prop_global,				\
+			(struct prop_local_percpu *)(prop_local)); 	\
+	else if (TYPE_EQUAL(*(prop_local), struct prop_local_single))	\
+		__prop_inc_single(prop_global,				\
+			(struct prop_local_single *)(prop_local)); 	\
+	else __bad_prop_local();					\
+} while (0)
+
+#define prop_fraction(prop_global, prop_local, num, denom)		\
+do {									\
+	if (TYPE_EQUAL(*(prop_local), struct prop_local_percpu))	\
+		prop_fraction_percpu(prop_global,			\
+			(struct prop_local_percpu *)(prop_local),	\
+			num, denom);					\
+	else if (TYPE_EQUAL(*(prop_local), struct prop_local_single))	\
+		prop_fraction_single(prop_global,			\
+			(struct prop_local_single *)(prop_local),	\
+			num, denom);					\
+	else __bad_prop_local();					\
+} while (0)
+
 #endif /* _LINUX_PROPORTIONS_H */
Index: linux-2.6/lib/proportions.c
===================================================================
--- linux-2.6.orig/lib/proportions.c
+++ linux-2.6/lib/proportions.c
@@ -158,22 +158,31 @@ void prop_put_global(struct prop_descrip
 	rcu_read_unlock();
 }
 
-static void prop_adjust_shift(struct prop_local *pl, int new_shift)
+static void
+__prop_adjust_shift(int *pl_shift, unsigned long *pl_period, int new_shift)
 {
-	int offset = pl->shift - new_shift;
+	int offset = *pl_shift - new_shift;
 
 	if (!offset)
 		return;
 
 	if (offset < 0)
-		pl->period <<= -offset;
+		*pl_period <<= -offset;
 	else
-		pl->period >>= offset;
+		*pl_period >>= offset;
 
-	pl->shift = new_shift;
+	*pl_shift = new_shift;
 }
 
-int prop_local_init(struct prop_local *pl)
+#define prop_adjust_shift(prop_local, pg_shift)			\
+	__prop_adjust_shift(&(prop_local)->shift,		\
+			    &(prop_local)->period, pg_shift)
+
+/*
+ * PERCPU
+ */
+
+int prop_local_init_percpu(struct prop_local_percpu *pl)
 {
 	spin_lock_init(&pl->lock);
 	pl->shift = 0;
@@ -181,7 +190,7 @@ int prop_local_init(struct prop_local *p
 	return percpu_counter_init_irq(&pl->events, 0);
 }
 
-void prop_local_destroy(struct prop_local *pl)
+void prop_local_destroy_percpu(struct prop_local_percpu *pl)
 {
 	percpu_counter_destroy(&pl->events);
 }
@@ -193,8 +202,7 @@ void prop_local_destroy(struct prop_loca
  *     x_{j} -= x_{j}/2;
  *     c_{j}++;
  */
-void prop_norm(struct prop_global *pg,
-		struct prop_local *pl)
+void prop_norm_percpu(struct prop_global *pg, struct prop_local_percpu *pl)
 {
 	unsigned long period = 1UL << (pg->shift - 1);
 	unsigned long period_mask = ~(period - 1);
@@ -247,17 +255,112 @@ void prop_norm(struct prop_global *pg,
  *
  *   p_{j} = x_{j} / (period/2 + t % period/2)
  */
-void prop_fraction(struct prop_global *pg, struct prop_local *pl,
+void prop_fraction_percpu(struct prop_global *pg, struct prop_local_percpu *pl,
 		long *numerator, long *denominator)
 {
 	unsigned long period_2 = 1UL << (pg->shift - 1);
 	unsigned long counter_mask = period_2 - 1;
 	unsigned long global_count;
 
-	prop_norm(pg, pl);
+	prop_norm_percpu(pg, pl);
 	*numerator = percpu_counter_read_positive(&pl->events);
 
 	global_count = percpu_counter_read(&pg->events);
 	*denominator = period_2 + (global_count & counter_mask);
 }
 
+/*
+ * SINGLE
+ */
+
+int prop_local_init_single(struct prop_local_single *pl)
+{
+	spin_lock_init(&pl->lock);
+	pl->shift = 0;
+	pl->period = 0;
+	pl->events = 0;
+	return 0;
+}
+
+void prop_local_destroy_single(struct prop_local_single *pl)
+{
+}
+
+/*
+ * Catch up with missed period expirations.
+ *
+ *   until (c_{j} == c)
+ *     x_{j} -= x_{j}/2;
+ *     c_{j}++;
+ */
+void prop_norm_single(struct prop_global *pg, struct prop_local_single *pl)
+{
+	unsigned long period = 1UL << (pg->shift - 1);
+	unsigned long period_mask = ~(period - 1);
+	unsigned long global_period;
+	unsigned long flags;
+
+	global_period = percpu_counter_read(&pg->events);
+	global_period &= period_mask;
+
+	/*
+	 * Fast path - check if the local and global period count still match
+	 * outside of the lock.
+	 */
+	if (pl->period == global_period)
+		return;
+
+	spin_lock_irqsave(&pl->lock, flags);
+	prop_adjust_shift(pl, pg->shift);
+	/*
+	 * For each missed period, we half the local counter.
+	 * basically:
+	 *   pl->events >> (global_period - pl->period);
+	 *
+	 * but since the distributed nature of single counters make division
+	 * rather hard, use a regular subtraction loop. This is safe, because
+	 * the events will only every be incremented, hence the subtraction
+	 * can never result in a negative number.
+	 */
+	while (pl->period != global_period) {
+		unsigned long val = pl->events;
+		unsigned long half = (val + 1) >> 1;
+
+		/*
+		 * Half of zero won't be much less, break out.
+		 * This limits the loop to shift iterations, even
+		 * if we missed a million.
+		 */
+		if (!val)
+			break;
+
+		/*
+		 * Iff shift >32 half might exceed the limits of
+		 * the regular single_counter_mod.
+		 */
+		pl->events -= half;
+		pl->period += period;
+	}
+	pl->period = global_period;
+	spin_unlock_irqrestore(&pl->lock, flags);
+}
+
+/*
+ * Obtain an fraction of this proportion
+ *
+ *   p_{j} = x_{j} / (period/2 + t % period/2)
+ */
+void prop_fraction_single(struct prop_global *pg, struct prop_local_single *pl,
+		long *numerator, long *denominator)
+{
+	unsigned long period_2 = 1UL << (pg->shift - 1);
+	unsigned long counter_mask = period_2 - 1;
+	unsigned long global_count;
+
+	prop_norm_single(pg, pl);
+	*numerator = pl->events;
+
+	global_count = percpu_counter_read(&pg->events);
+	*denominator = period_2 + (global_count & counter_mask);
+}
+

--

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  parent reply	other threads:[~2007-08-03 12:58 UTC|newest]

Thread overview: 364+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-03 12:37 [PATCH 00/23] per device dirty throttling -v8 Peter Zijlstra
2007-08-03 12:37 ` Peter Zijlstra
2007-08-03 12:37 ` [PATCH 01/23] nfs: remove congestion_end() Peter Zijlstra
2007-08-03 12:37   ` Peter Zijlstra
2007-08-03 12:37 ` [PATCH 02/23] lib: percpu_counter_add Peter Zijlstra
2007-08-03 12:37   ` Peter Zijlstra
2007-08-03 12:37 ` [PATCH 03/23] lib: percpu_counter variable batch Peter Zijlstra
2007-08-03 12:37   ` Peter Zijlstra
2007-08-03 12:37 ` [PATCH 04/23] lib: make percpu_counter_add take s64 Peter Zijlstra
2007-08-03 12:37   ` Peter Zijlstra
2007-08-03 12:37 ` [PATCH 05/23] lib: percpu_counter_set Peter Zijlstra
2007-08-03 12:37   ` Peter Zijlstra
2007-08-03 12:37 ` [PATCH 06/23] lib: percpu_counter_sum_positive Peter Zijlstra
2007-08-03 12:37   ` Peter Zijlstra
2007-08-03 12:37 ` [PATCH 07/23] lib: percpu_count_sum() Peter Zijlstra
2007-08-03 12:37   ` Peter Zijlstra
2007-08-03 12:37 ` [PATCH 08/23] lib: percpu_counter_init error handling Peter Zijlstra
2007-08-03 12:37   ` Peter Zijlstra
2007-08-03 12:37 ` [PATCH 09/23] lib: percpu_counter_init_irq Peter Zijlstra
2007-08-03 12:37   ` Peter Zijlstra
2007-08-03 12:37 ` [PATCH 10/23] mm: bdi init hooks Peter Zijlstra
2007-08-03 12:37   ` Peter Zijlstra
2007-08-03 12:37 ` [PATCH 11/23] containers: " Peter Zijlstra
2007-08-03 12:37   ` Peter Zijlstra
2007-08-03 12:37 ` [PATCH 12/23] mtd: " Peter Zijlstra
2007-08-03 12:37   ` Peter Zijlstra
2007-08-03 12:37 ` [PATCH 13/23] mtd: clean up the backing_dev_info usage Peter Zijlstra
2007-08-03 12:37   ` Peter Zijlstra
2007-08-03 12:37 ` [PATCH 14/23] mtd: give mtdconcat devices their own backing_dev_info Peter Zijlstra
2007-08-03 12:37   ` Peter Zijlstra
2007-08-03 12:37 ` [PATCH 15/23] mm: scalable bdi statistics counters Peter Zijlstra
2007-08-03 12:37   ` Peter Zijlstra
2007-08-03 12:37 ` [PATCH 16/23] mm: count reclaimable pages per BDI Peter Zijlstra
2007-08-03 12:37   ` Peter Zijlstra
2007-08-03 12:37 ` [PATCH 17/23] mm: count writeback " Peter Zijlstra
2007-08-03 12:37   ` Peter Zijlstra
2007-08-09 19:15   ` Christoph Lameter
2007-08-09 19:15     ` Christoph Lameter
2007-08-09 19:23     ` Peter Zijlstra
2007-08-09 19:23       ` Peter Zijlstra
2007-08-09 19:27       ` Christoph Lameter
2007-08-09 19:27         ` Christoph Lameter
2007-08-13  8:36         ` Peter Zijlstra
2007-08-03 12:37 ` [PATCH 18/23] mm: expose BDI statistics in sysfs Peter Zijlstra
2007-08-03 12:37   ` Peter Zijlstra
2007-08-03 12:37 ` [PATCH 19/23] lib: floating proportions Peter Zijlstra
2007-08-03 12:37   ` Peter Zijlstra
2007-08-03 12:37 ` Peter Zijlstra [this message]
2007-08-03 12:37   ` [PATCH 20/23] lib: floating proportions _single Peter Zijlstra
2007-08-03 12:37 ` [PATCH 21/23] mm: per device dirty threshold Peter Zijlstra
2007-08-03 12:37   ` Peter Zijlstra
2007-08-03 12:37 ` [PATCH 22/23] mm: dirty balancing for tasks Peter Zijlstra
2007-08-03 12:37   ` Peter Zijlstra
2007-08-03 12:37 ` [PATCH 23/23] debug: sysfs files for the current ratio/size/total Peter Zijlstra
2007-08-03 12:37   ` Peter Zijlstra
2007-08-03 22:21 ` [PATCH 00/23] per device dirty throttling -v8 Linus Torvalds
2007-08-03 22:21   ` Linus Torvalds
2007-08-04  6:32   ` Ingo Molnar
2007-08-04  6:32     ` Ingo Molnar
2007-08-04  7:07     ` Ingo Molnar
2007-08-04  7:07       ` Ingo Molnar
2007-08-04  7:44       ` david
2007-08-04  7:44         ` david
2007-08-04 16:01         ` Ray Lee
2007-08-04 16:01           ` Ray Lee
2007-08-04 17:15           ` david
2007-08-04 17:15             ` david
2007-08-09  5:11           ` david
2007-08-09  5:11             ` david
2007-08-04 10:33       ` Ingo Molnar
2007-08-04 10:33         ` Ingo Molnar
2007-08-04 16:17         ` Linus Torvalds
2007-08-04 16:17           ` Linus Torvalds
2007-08-04 16:37           ` Ingo Molnar
2007-08-04 16:37             ` Ingo Molnar
2007-08-04 16:51             ` Andrew Morton
2007-08-04 16:51               ` Andrew Morton
2007-08-04 16:56               ` Ingo Molnar
2007-08-04 16:56                 ` Ingo Molnar
2007-08-04 20:23                 ` Alan Cox
2007-08-04 20:23                   ` Alan Cox
2007-08-04 17:02             ` Diego Calleja
2007-08-04 17:02               ` Diego Calleja
2007-08-04 17:17               ` Ingo Molnar
2007-08-04 17:17                 ` Ingo Molnar
2007-08-04 17:38                 ` Diego Calleja
2007-08-04 17:38                   ` Diego Calleja
2007-08-04 17:51                   ` Diego Calleja
2007-08-04 17:51                     ` Diego Calleja
2007-08-08 10:43                 ` Karel Zak
2007-08-08 10:43                   ` Karel Zak
2007-08-04 17:39             ` Linus Torvalds
2007-08-04 17:39               ` Linus Torvalds
2007-08-04 18:08               ` Jeff Garzik
2007-08-04 18:08                 ` Jeff Garzik
2007-08-04 19:12                 ` Jörn Engel
2007-08-04 19:12                   ` Jörn Engel
2007-08-04 19:21                   ` Ingo Molnar
2007-08-04 19:21                     ` Ingo Molnar
2007-08-04 19:26                     ` Jörn Engel
2007-08-04 19:26                       ` Jörn Engel
2007-08-04 19:42                       ` Jörn Engel
2007-08-04 19:42                         ` Jörn Engel
2007-08-05 20:36                         ` Christoph Hellwig
2007-08-05 20:36                           ` Christoph Hellwig
2007-08-06 18:03                           ` Chuck Ebbert
2007-08-06 18:03                             ` Chuck Ebbert
2007-08-06 18:53                             ` Jeff Garzik
2007-08-06 18:53                               ` Jeff Garzik
2007-08-06 19:37                             ` Alan Cox
2007-08-06 19:37                               ` Alan Cox
2007-08-06 19:46                               ` Chuck Ebbert
2007-08-06 19:46                                 ` Chuck Ebbert
2007-08-07  7:05                                 ` Ingo Molnar
2007-08-07  7:05                                   ` Ingo Molnar
2007-08-08 21:10                           ` Martin J. Bligh
2007-08-08 21:10                             ` Martin J. Bligh
2007-08-08 21:21                             ` Andrew Morton
2007-08-08 21:21                               ` Andrew Morton
2007-08-09  0:54                               ` Martin Bligh
2007-08-09  0:54                                 ` Martin Bligh
2007-08-11 23:14                                 ` Valerie Henson
2007-08-11 23:14                                   ` Valerie Henson
2007-08-10  0:21                               ` Bill Davidsen
2007-08-10  0:21                                 ` Bill Davidsen
2007-08-14  9:57                           ` Helge Hafting
2007-08-14  9:57                             ` Helge Hafting
2007-08-04 19:47                       ` Linus Torvalds
2007-08-04 19:47                         ` Linus Torvalds
2007-08-04 19:49                         ` Linus Torvalds
2007-08-04 19:49                           ` Linus Torvalds
2007-08-04 20:00                         ` Ingo Molnar
2007-08-04 20:00                           ` Ingo Molnar
2007-08-04 20:11                           ` Ingo Molnar
2007-08-04 20:11                             ` Ingo Molnar
2007-08-04 20:13                             ` Arjan van de Ven
2007-08-04 20:13                               ` Arjan van de Ven
2007-08-05  8:18                           ` [patch] add noatime/atime boot options, CONFIG_DEFAULT_NOATIME Ingo Molnar
2007-08-05  8:18                             ` Ingo Molnar
2007-08-04 20:13                         ` [PATCH 00/23] per device dirty throttling -v8 Arjan van de Ven
2007-08-04 20:13                           ` Arjan van de Ven
2007-08-04 21:48                           ` Theodore Tso
2007-08-04 21:48                             ` Theodore Tso
2007-08-05 18:01                             ` Arjan van de Ven
2007-08-05 18:01                               ` Arjan van de Ven
2007-08-05 20:34                               ` Christoph Hellwig
2007-08-05 20:34                                 ` Christoph Hellwig
     [not found]                         ` <fa.7rstQpXif2z9y2n2HD+qxLFnueg@ifi.uio.no>
     [not found]                           ` <fa.6VOZrceT65Vh8CIRIta0zSg2V38@ifi.uio.no>
     [not found]                             ` <fa.xcZCTa5cHDOhrcyXZ2gZbzbu7g0@ifi.uio.no>
     [not found]                               ` <fa.JjZwG90x+07YaOx8h5VLN+9AL/8@ifi.uio.no>
     [not found]                                 ` <fa.V9U4mAEXVjNqblhzu7GRmxif7Uw@ifi.uio.no>
     [not found]                                   ` <fa.uq0BQtrgp66a08hpsF+vrqXUNC4@ifi.uio.no>
2007-08-15 18:16                                     ` david.balazic
2007-08-04 20:11                     ` [PATCH 00/23] " Alan Cox
2007-08-04 20:11                       ` Alan Cox
2007-08-04 20:28                       ` Jeff Garzik
2007-08-04 20:28                         ` Jeff Garzik
2007-08-04 21:47                         ` Alan Cox
2007-08-04 21:47                           ` Alan Cox
2007-08-04 23:51                           ` Claudio Martins
2007-08-04 23:51                             ` Claudio Martins
2007-08-05  0:49                             ` Alan Cox
2007-08-05  0:49                               ` Alan Cox
2007-08-05  7:28                               ` Ingo Molnar
2007-08-05  7:28                                 ` Ingo Molnar
2007-08-05 10:29                                 ` Jakob Oestergaard
2007-08-05 10:29                                   ` Jakob Oestergaard
2007-08-05 12:46                                 ` Alan Cox
2007-08-05 12:46                                   ` Alan Cox
2007-08-05 12:58                                   ` Ingo Molnar
2007-08-05 12:58                                     ` Ingo Molnar
2007-08-05 13:29                                     ` Willy Tarreau
2007-08-05 13:29                                       ` Willy Tarreau
2007-08-06  6:57                                       ` Ingo Molnar
2007-08-06  6:57                                         ` Ingo Molnar
2007-08-06 13:12                                         ` Willy Tarreau
2007-08-06 13:12                                           ` Willy Tarreau
2007-08-05 14:46                               ` Theodore Tso
2007-08-05 14:46                                 ` Theodore Tso
2007-08-05 17:55                                 ` Ingo Molnar
2007-08-05 17:55                                   ` Ingo Molnar
2007-08-05 17:59                                   ` Jeff Garzik
2007-08-05 17:59                                     ` Jeff Garzik
2007-08-05 18:09                                     ` Ingo Molnar
2007-08-05 18:09                                       ` Ingo Molnar
2007-08-05 18:08                                 ` Arjan van de Ven
2007-08-05 18:08                                   ` Arjan van de Ven
2007-08-07 21:20                             ` Bill Davidsen
2007-08-07 21:20                               ` Bill Davidsen
2007-08-05  7:18                           ` Ingo Molnar
2007-08-05  7:18                             ` Ingo Molnar
2007-08-07 18:55                         ` Bill Davidsen
2007-08-07 18:55                           ` Bill Davidsen
2007-08-07 19:35                           ` Alan Cox
2007-08-07 19:35                             ` Alan Cox
2007-08-08 17:44                             ` Bill Davidsen
2007-08-08 17:44                               ` Bill Davidsen
2007-08-04 20:28                       ` Ingo Molnar
2007-08-04 20:28                         ` Ingo Molnar
2007-08-04 20:34                         ` Arjan van de Ven
2007-08-04 20:34                           ` Arjan van de Ven
2007-08-04 21:03                         ` Ingo Molnar
2007-08-04 21:03                           ` Ingo Molnar
2007-08-04 21:51                           ` Alan Cox
2007-08-04 21:51                             ` Alan Cox
2007-08-05  7:21                             ` Ingo Molnar
2007-08-05  7:21                               ` Ingo Molnar
2007-08-05  7:29                               ` Andrew Morton
2007-08-05  7:29                                 ` Andrew Morton
2007-08-05  7:39                                 ` Ingo Molnar
2007-08-05  7:39                                   ` Ingo Molnar
2007-08-05  8:53                               ` Willy Tarreau
2007-08-05  8:53                                 ` Willy Tarreau
2007-08-05 14:17                                 ` Jörn Engel
2007-08-05 14:17                                   ` Jörn Engel
2007-08-05 18:02                                   ` Arjan van de Ven
2007-08-05 18:02                                     ` Arjan van de Ven
2007-08-05 18:37                                     ` Jörn Engel
2007-08-05 18:37                                       ` Jörn Engel
2007-08-05 20:21                                       ` Jörn Engel
2007-08-05 20:21                                         ` Jörn Engel
2007-08-05 20:33                                         ` Andrew Morton
2007-08-05 20:33                                           ` Andrew Morton
2007-08-05 12:47                               ` Alan Cox
2007-08-05 12:47                                 ` Alan Cox
2007-08-05 12:56                                 ` Ingo Molnar
2007-08-05 12:56                                   ` Ingo Molnar
2007-08-05 18:44                               ` Dave Jones
2007-08-05 18:44                                 ` Dave Jones
2007-08-05 18:58                                 ` adi
2007-08-05 18:58                                   ` adi
2007-08-06  6:39                                 ` Ingo Molnar
2007-08-06  6:39                                   ` Ingo Molnar
2007-08-06 15:59                                   ` Dave Jones
2007-08-06 15:59                                     ` Dave Jones
2007-08-06 16:16                                     ` Ingo Molnar
2007-08-06 16:16                                       ` Ingo Molnar
2007-08-05  7:37                             ` Ingo Molnar
2007-08-05  7:37                               ` Ingo Molnar
2007-08-05  9:04                               ` Jeff Garzik
2007-08-05  9:04                                 ` Jeff Garzik
2007-08-05 12:43                               ` Alan Cox
2007-08-05 12:43                                 ` Alan Cox
2007-08-05 12:54                                 ` Ingo Molnar
2007-08-05 12:54                                   ` Ingo Molnar
2007-08-05 13:37                                   ` Alan Cox
2007-08-05 13:37                                     ` Alan Cox
2007-08-05 18:08                                     ` Ingo Molnar
2007-08-05 18:08                                       ` Ingo Molnar
2007-08-05 19:11                                       ` Alan Cox
2007-08-05 19:11                                         ` Alan Cox
2007-08-08 18:22                                       ` Bill Davidsen
2007-08-08 18:22                                         ` Bill Davidsen
2007-08-08 19:39                                         ` Jeff Garzik
2007-08-08 19:39                                           ` Jeff Garzik
2007-08-08 20:31                                           ` Bill Davidsen
2007-08-08 20:31                                             ` Bill Davidsen
2007-08-08 23:18                                           ` Alan Cox
2007-08-08 23:18                                             ` Alan Cox
2007-08-07 19:09                             ` Bill Davidsen
2007-08-07 19:09                               ` Bill Davidsen
2007-08-04 21:48                         ` Alan Cox
2007-08-04 21:48                           ` Alan Cox
2007-08-05  7:13                           ` Ingo Molnar
2007-08-05  7:13                             ` Ingo Molnar
2007-08-05 13:22                             ` Diego Calleja
2007-08-05 13:22                               ` Diego Calleja
2007-08-05 19:03                               ` david
2007-08-05 19:03                                 ` david
2007-08-06  6:52                                 ` Ingo Molnar
2007-08-06  6:52                                   ` Ingo Molnar
2007-08-10  4:04                                 ` Bill Davidsen
2007-08-10  4:04                                   ` Bill Davidsen
2007-08-11  5:19                                   ` Valdis.Kletnieks
2007-08-06  6:58                               ` Ingo Molnar
2007-08-06  6:58                                 ` Ingo Molnar
2007-08-09  0:57                             ` Greg Trounson
2007-08-09  1:26                               ` david
2007-08-09  2:33                               ` Andi Kleen
2007-08-04 22:39                         ` Ilpo Järvinen
2007-08-04 22:39                           ` Ilpo Järvinen
2007-08-05 10:20                 ` Jakob Oestergaard
2007-08-05 10:20                   ` Jakob Oestergaard
2007-08-05 10:42                   ` Jeff Garzik
2007-08-05 10:42                     ` Jeff Garzik
2007-08-05 10:58                     ` Jakob Oestergaard
2007-08-05 10:58                       ` Jakob Oestergaard
2007-08-05 12:46                       ` Ingo Molnar
2007-08-05 12:46                         ` Ingo Molnar
2007-08-05 13:46                         ` Jakob Oestergaard
2007-08-05 13:46                           ` Jakob Oestergaard
2007-08-05 16:45                         ` Linus Torvalds
2007-08-05 16:45                           ` Linus Torvalds
2007-08-05 19:09                           ` Ingo Molnar
2007-08-05 19:09                             ` Ingo Molnar
2007-08-05 19:22                             ` [patch] implement smarter atime updates support Ingo Molnar
2007-08-05 19:22                               ` Ingo Molnar
2007-08-05 19:28                               ` [patch] implement smarter atime updates support, v2 Ingo Molnar
2007-08-05 19:28                                 ` Ingo Molnar
2007-08-05 20:42                                 ` Theodore Tso
2007-08-05 20:42                                   ` Theodore Tso
2007-08-06  5:36                                   ` Ingo Molnar
2007-08-06  5:36                                     ` Ingo Molnar
2007-08-05 19:53                               ` [patch] implement smarter atime updates support Arjan van de Ven
2007-08-05 19:53                                 ` Arjan van de Ven
2007-08-05 20:04                                 ` Alan Cox
2007-08-05 20:04                                   ` Alan Cox
2007-08-05 20:22                                   ` Arjan van de Ven
2007-08-05 20:22                                     ` Arjan van de Ven
2007-08-05 19:29                             ` [PATCH 00/23] per device dirty throttling -v8 Alan Cox
2007-08-05 19:29                               ` Alan Cox
2007-08-05 19:32                               ` Ingo Molnar
2007-08-05 19:32                                 ` Ingo Molnar
2007-08-05 23:43                     ` David Chinner
2007-08-05 23:43                       ` David Chinner
2007-08-04 19:16               ` Ingo Molnar
2007-08-05  0:26             ` Andi Kleen
2007-08-05  0:26               ` Andi Kleen
2007-08-05 15:00               ` Theodore Tso
2007-08-05 15:00                 ` Theodore Tso
2007-08-06 13:47                 ` Chris Mason
2007-08-06 13:47                   ` Chris Mason
2007-08-17  0:45                 ` Dave Jones
2007-08-05 20:41               ` Christoph Hellwig
2007-08-05 20:41                 ` Christoph Hellwig
2007-08-06 10:42                 ` Andi Kleen
2007-08-06 10:42                   ` Andi Kleen
2007-08-16 10:18               ` Helge Hafting
2007-08-16 10:18                 ` Helge Hafting
2007-08-09  6:25             ` Lionel Elie Mamane
2007-08-09  6:25               ` Lionel Elie Mamane
2007-08-09 15:02               ` Chuck Ebbert
2007-08-09 15:02                 ` Chuck Ebbert
2007-08-09 16:22                 ` Diego Calleja
2007-08-09 16:22                   ` Diego Calleja
2007-08-04 16:41           ` Andrew Morton
2007-08-04 16:41             ` Andrew Morton
2007-08-04 17:26             ` Nikita Danilov
2007-08-04 17:26               ` Nikita Danilov
2007-08-04 19:16             ` Florian Weimer
2007-08-04 19:16               ` Florian Weimer
2007-08-05  6:00               ` Andrew Morton
2007-08-05  6:00                 ` Andrew Morton
2007-08-05  7:57                 ` Florian Weimer
2007-08-05  7:57                   ` Florian Weimer
2007-08-05 20:43                   ` Christoph Hellwig
2007-08-05 20:43                     ` Christoph Hellwig
2007-08-05 22:46               ` Theodore Tso
2007-08-05 22:46                 ` Theodore Tso
2007-08-06  0:24               ` David Chinner
2007-08-06  0:24                 ` David Chinner
2007-08-05  0:28         ` Andi Kleen
2007-08-05  0:28           ` Andi Kleen
2007-08-04 16:15       ` Linus Torvalds
2007-08-04 16:15         ` Linus Torvalds
2007-08-05 17:22     ` Brice Figureau
2007-08-05 22:17       ` Andi Kleen
2007-08-06  8:40         ` Brice Figureau
2007-08-14  1:44           ` Stewart Smith
2007-08-14  2:25             ` Andi Kleen
2007-08-14  7:59               ` Brice Figureau
2007-08-06 20:26 ` Miklos Szeredi
2007-08-06 20:26   ` Miklos Szeredi
2007-08-08 12:25 ` richard kennedy
2007-08-08 12:25   ` richard kennedy
2007-08-08 13:54   ` Andi Kleen
2007-08-08 13:54     ` Andi Kleen
2007-08-10  4:17     ` Bill Davidsen
2007-08-10  4:17       ` Bill Davidsen

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=20070803125237.453095000@chello.nl \
    --to=a.p.zijlstra@chello.nl \
    --cc=akpm@linux-foundation.org \
    --cc=dgc@sgi.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=miklos@szeredi.hu \
    --cc=neilb@suse.de \
    --cc=nikita@clusterfs.com \
    --cc=richard@rsk.demon.co.uk \
    --cc=tomoki.sekiyama.qu@hitachi.com \
    --cc=torvalds@linux-foundation.org \
    --cc=trond.myklebust@fys.uio.no \
    --cc=yingchao.zhou@gmail.com \
    /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.