Messages in this thread Patch in this message | | | Date | Wed, 11 Aug 2004 09:42:56 +0200 | From | Ingo Molnar <> | Subject | Re: [patch] voluntary-preempt-2.6.8-rc3-O5 |
| |
* Ingo Molnar <mingo@elte.hu> wrote:
> > (jackd/12427): 10882us non-preemptible critical section violated 400 > > us preempt threshold starting at kernel_fpu_begin+0x10/0x60 and ending > > at fast_clear_page+0x75/0xa0 > > to make sure this is a real latency and not some rdtsc weirdness, could > you try the latest version of preempt-timing: > > http://redhat.com/~mingo/voluntary-preempt/preempt-timing-on-2.6.8-rc3-O5-A2 > > this adds jiffies-based latency values to the printout, e.g.:
could you also apply the patch below? This splits up fast_clear_page() overhead into 3 pieces to find out where the overhead comes from. Note that this will likely cause 'reduced' latency printouts, but those are not real because the touch_preempt_timing() lines dont show real preemptible points. You should still get a larger latency in one of those regions. The kernel-FPU code (which is triggered by the MMX ops) could be another source of overhead - but 10 msecs is so large ...
(another thing: could you turn on CONFIG_DEBUG_HIGHMEM, CONFIG_DEBUG_SPINLOCK and CONFIG_DEBUG_SPINLOCK_SLEEP? Lets make sure that what we are seeing here is not somehow caused by atomicity violations.)
Ingo
--- linux/arch/i386/lib/mmx.c.orig +++ linux/arch/i386/lib/mmx.c @@ -132,7 +132,9 @@ static void fast_clear_page(void *page) { int i; + touch_preempt_timing(); kernel_fpu_begin(); + touch_preempt_timing(); __asm__ __volatile__ ( " pxor %%mm0, %%mm0\n" : : @@ -158,7 +160,9 @@ static void fast_clear_page(void *page) __asm__ __volatile__ ( " sfence \n" : : ); + touch_preempt_timing(); kernel_fpu_end(); + touch_preempt_timing(); } static void fast_copy_page(void *to, void *from) @@ -260,8 +264,10 @@ static void fast_copy_page(void *to, voi static void fast_clear_page(void *page) { int i; - + + touch_preempt_timing(); kernel_fpu_begin(); + touch_preempt_timing(); __asm__ __volatile__ ( " pxor %%mm0, %%mm0\n" : : @@ -290,7 +296,9 @@ static void fast_clear_page(void *page) page+=128; } + touch_preempt_timing(); kernel_fpu_end(); + touch_preempt_timing(); } static void fast_copy_page(void *to, void *from) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |