Skip to contentSkip to conversation

- kernel profiler & spinlock_contention

PATCH In review Jack Steiner 2 participants 4 messages Nov 26, 2003

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 - kernel profiler & spinlock_contention

Profiling is more useful if addresses in spinlock_contention were attributed to the caller of spinlock_contention.

arch/ia64/kernel/head.S +2 -0
diff -Naur linux_base/arch/ia64/kernel/head.S linux/arch/ia64/kernel/head.S
@@ -888,6 +888,8 @@
 	cmp4.eq p14,p0=r30,r0
 (p14)	br.cond.sptk.few b6	// lock is now free, try to acquire
 	br.cond.sptk.few .wait
+	.global ia64_spinlock_contention_pre3_4_end    // for kernprof
+ia64_spinlock_contention_pre3_4_end:
 END(ia64_spinlock_contention_pre3_4)
 
 #else
arch/ia64/kernel/time.c +11 -1
diff -Naur linux_base/arch/ia64/kernel/time.c linux/arch/ia64/kernel/time.c
@@ -202,6 +202,9 @@
 {
 	unsigned long ip, slot;
 	extern cpumask_t prof_cpu_mask;
+#ifdef CONFIG_SMP
+	extern char ia64_spinlock_contention_pre3_4[], ia64_spinlock_contention_pre3_4_end[];
+#endif
 
 	profile_hook(regs);
 
@@ -216,7 +219,14 @@
 	 * bits 2 and 3 rather than bits 0 and 1.
 	 */
 	slot = ip & 3;
-	ip = (ip & ~3UL) + 4*slot;
+	ip = (ip & ~3UL);
+#ifdef CONFIG_SMP
+	if (ip >= (unsigned long)ia64_spinlock_contention_pre3_4 &&
+			ip < (unsigned long)ia64_spinlock_contention_pre3_4_end)
+		ip = regs->r28;
+	else
+#endif
+	ip += 4*slot;
 
 	/*
 	 * Only measure the CPUs specified by /proc/irq/prof_cpu_mask.
Signature · 4 lines
Thanks

Jack Steiner ([email protected])          651-683-5302
Principal Engineer                      SGI - Silicon Graphics, Inc.
#1 lore raw
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line · Jack Steiner

Jack> Profiling is more useful if addresses in spinlock_contention Jack> were attributed to the caller of spinlock_contention.

Execuse the language, but I'm reading:

my tools suck so let's make the kernel suck!

Let's defer this discussion until next week, when I had a chance to release my profiling tool. I think you'll then agree that it's much better to leave the code as is. In fact, we should also have an out-of-line contention handler for the read/write locks.

	--david
#2 lore raw
In reply to Jack Steiner
Quoted 8 lines · David Mosberger
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line · Jack Steiner

Jack> Profiling is more useful if addresses in spinlock_contention Jack> were attributed to the caller of spinlock_contention.

Execuse the language, but I'm reading:

my tools suck so let's make the kernel suck!

I dont quite agree. The way it work right now, profiling on large systems is useless. The single hotest spot in the kernel is spinlock_contention & there is no clue why. The patch makes the kernel work the way it did before spinning for locks was moved out-of-line. I think that is a big improvement.

However, if your new tools allows me to determine the caller of spinlock_contention (I'm guessing that it does), that is even better!! If a prerelease version of the tools is available, I'll be happy to try it on our system

Quoted 5 lines

Let's defer this discussion until next week, when I had a chance to release my profiling tool. I think you'll then agree that it's much better to leave the code as is. In fact, we should also have an out-of-line contention handler for the read/write locks.

Agree!

Quoted 2 lines
	--david
Signature · 4 lines
Thanks

Jack Steiner ([email protected])          651-683-5302
Principal Engineer                      SGI - Silicon Graphics, Inc.
#3 lore raw
In reply to Jack Steiner
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line · Jack Steiner

Jack> However, if your new tools allows me to determine the caller Jack> of spinlock_contention (I'm guessing that it does), that is Jack> even better!!

Absolutely. Best of all, it requires absolutely no kernel modes. All it requires is a recent 2.6 kernel and an Itanium 2 CPU (sorry, Merced is out for this feature).

Jack> If a prerelease version of the tools is available, I'll be Jack> happy to try it on our system

I'll see what I can do.

	--david