From: Jeremy Fitzhardinge <jeremy@goop.org>
To: Ingo Molnar <mingo@elte.hu>
Cc: linux-kernel@vger.kernel.org, xen-devel@lists.xensource.com,
Jan Beulich <jbeulich@novell.com>
Subject: [PATCH 4 of 4] xen: measure how long spinlocks spend blocking
Date: Wed, 20 Aug 2008 17:02:21 -0700 [thread overview]
Message-ID: <60e01d097a1e08124f1e.1219276941@localhost> (raw)
In-Reply-To: <patchbomb.1219276937@localhost>
Measure how long spinlocks spend blocked. Also rename some fields to
be more consistent.
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
---
arch/x86/xen/spinlock.c | 60 ++++++++++++++++++++++++++++++++---------------
1 file changed, 41 insertions(+), 19 deletions(-)
diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c
--- a/arch/x86/xen/spinlock.c
+++ b/arch/x86/xen/spinlock.c
@@ -29,12 +29,14 @@
u32 released_slow;
u32 released_slow_kicked;
-#define HISTO_BUCKETS 20
- u32 histo_spin_fast[HISTO_BUCKETS+1];
- u32 histo_spin[HISTO_BUCKETS+1];
+#define HISTO_BUCKETS 30
+ u32 histo_spin_total[HISTO_BUCKETS+1];
+ u32 histo_spin_spinning[HISTO_BUCKETS+1];
+ u32 histo_spin_blocked[HISTO_BUCKETS+1];
- u64 spinning_time;
- u64 total_time;
+ u64 time_total;
+ u64 time_spinning;
+ u64 time_blocked;
} spinlock_stats;
static u8 zero_stats;
@@ -70,20 +72,28 @@
array[HISTO_BUCKETS]++;
}
-static inline void spin_time_accum_fast(u64 start)
+static inline void spin_time_accum_spinning(u64 start)
{
u32 delta = xen_clocksource_read() - start;
- __spin_time_accum(delta, spinlock_stats.histo_spin_fast);
- spinlock_stats.spinning_time += delta;
+ __spin_time_accum(delta, spinlock_stats.histo_spin_spinning);
+ spinlock_stats.time_spinning += delta;
}
-static inline void spin_time_accum(u64 start)
+static inline void spin_time_accum_total(u64 start)
{
u32 delta = xen_clocksource_read() - start;
- __spin_time_accum(delta, spinlock_stats.histo_spin);
- spinlock_stats.total_time += delta;
+ __spin_time_accum(delta, spinlock_stats.histo_spin_total);
+ spinlock_stats.time_total += delta;
+}
+
+static inline void spin_time_accum_blocked(u64 start)
+{
+ u32 delta = xen_clocksource_read() - start;
+
+ __spin_time_accum(delta, spinlock_stats.histo_spin_blocked);
+ spinlock_stats.time_blocked += delta;
}
#else /* !CONFIG_XEN_DEBUG_FS */
#define TIMEOUT (1 << 10)
@@ -94,10 +104,13 @@
return 0;
}
-static inline void spin_time_accum_fast(u64 start)
+static inline void spin_time_accum_total(u64 start)
{
}
-static inline void spin_time_accum(u64 start)
+static inline void spin_time_accum_spinning(u64 start)
+{
+}
+static inline void spin_time_accum_blocked(u64 start)
{
}
#endif /* CONFIG_XEN_DEBUG_FS */
@@ -175,10 +188,13 @@
int irq = __get_cpu_var(lock_kicker_irq);
int ret;
unsigned long flags;
+ u64 start;
/* If kicker interrupts not initialized yet, just spin */
if (irq == -1)
return 0;
+
+ start = spin_time_start();
/* announce we're spinning */
prev = spinning_lock(xl);
@@ -230,6 +246,8 @@
out:
raw_local_irq_restore(flags);
unspinning_lock(xl, prev);
+ spin_time_accum_blocked(start);
+
return ret;
}
@@ -262,12 +280,12 @@
: "1" (1)
: "memory");
- spin_time_accum_fast(start_spin_fast);
+ spin_time_accum_spinning(start_spin_fast);
} while (unlikely(oldval != 0 &&
(TIMEOUT == ~0 || !xen_spin_lock_slow(lock, irq_enable))));
- spin_time_accum(start_spin);
+ spin_time_accum_total(start_spin);
}
static void xen_spin_lock(struct raw_spinlock *lock)
@@ -385,14 +403,18 @@
&spinlock_stats.released_slow_kicked);
debugfs_create_u64("time_spinning", 0444, d_spin_debug,
- &spinlock_stats.spinning_time);
+ &spinlock_stats.time_spinning);
+ debugfs_create_u64("time_blocked", 0444, d_spin_debug,
+ &spinlock_stats.time_blocked);
debugfs_create_u64("time_total", 0444, d_spin_debug,
- &spinlock_stats.total_time);
+ &spinlock_stats.time_total);
xen_debugfs_create_u32_array("histo_total", 0444, d_spin_debug,
- spinlock_stats.histo_spin, HISTO_BUCKETS + 1);
+ spinlock_stats.histo_spin_total, HISTO_BUCKETS + 1);
xen_debugfs_create_u32_array("histo_spinning", 0444, d_spin_debug,
- spinlock_stats.histo_spin_fast, HISTO_BUCKETS + 1);
+ spinlock_stats.histo_spin_spinning, HISTO_BUCKETS + 1);
+ xen_debugfs_create_u32_array("histo_blocked", 0444, d_spin_debug,
+ spinlock_stats.histo_spin_blocked, HISTO_BUCKETS + 1);
return 0;
}
next prev parent reply other threads:[~2008-08-21 0:04 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-21 0:02 [PATCH 0 of 4] Xen spinlock updates and performance measurements Jeremy Fitzhardinge
2008-08-21 0:02 ` Jeremy Fitzhardinge
2008-08-21 0:02 ` [PATCH 1 of 4] xen: save previous spinlock when blocking Jeremy Fitzhardinge
2008-08-21 0:02 ` Jeremy Fitzhardinge
2008-08-21 7:25 ` Jan Beulich
2008-08-21 7:25 ` Jan Beulich
2008-08-21 0:02 ` [PATCH 2 of 4] xen: add debugfs support Jeremy Fitzhardinge
2008-08-21 0:02 ` [PATCH 3 of 4] xen: allow interrupts to be enabled while doing a blocking spin Jeremy Fitzhardinge
2008-08-21 7:29 ` [PATCH 3 of 4] xen: allow interrupts to be enabled while doing ablocking spin Jan Beulich
2008-08-21 7:29 ` Jan Beulich
2008-08-21 0:02 ` Jeremy Fitzhardinge [this message]
2008-08-21 11:53 ` [PATCH 0 of 4] Xen spinlock updates and performance measurements Ingo Molnar
2008-08-21 11:53 ` Ingo Molnar
2008-08-21 12:13 ` Ingo Molnar
2008-08-21 20:17 ` Jeremy Fitzhardinge
2008-08-21 20:17 ` Jeremy Fitzhardinge
2008-08-22 6:09 ` Ingo Molnar
2008-08-22 6:09 ` Ingo Molnar
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=60e01d097a1e08124f1e.1219276941@localhost \
--to=jeremy@goop.org \
--cc=jbeulich@novell.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=xen-devel@lists.xensource.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.