All of lore.kernel.org
 help / color / mirror / Atom feed
From: Philippe Gerum <rpm@xenomai.org>
To: CHABAL David <david.chabal@domain.hid>
Cc: xenomai@xenomai.org
Subject: Re: [Xenomai-help] awful latencies (~110us)
Date: Wed, 10 Oct 2007 13:30:52 +0200	[thread overview]
Message-ID: <1192015852.22917.197.camel@domain.hid> (raw)
In-Reply-To: <470A26BC.506@domain.hid>

On Mon, 2007-10-08 at 14:46 +0200, CHABAL David wrote:

> :|   #begin   0x80000000   -98    0.374  __ipipe_unstall_root+0x4b
> (__ipipe_restore_root+0x1b)
> :|   +end     0x80000000   -98+   1.428  __ipipe_unstall_root+0x3a
> (__ipipe_restore_root+0x1b)
> :|   +begin   0xffffff16   -96    0.349  ipipe_ipi3+0x2e (__alloc_skb
> +0xdd)

That's your timer interrupt when the LAPIC is enabled.

> :|   +func                 -96    0.396  __ipipe_handle_irq+0x14
> (ipipe_ipi3+0x33)
> :|   +func                 -96    0.312  __ipipe_ack_apic+0x8
> (__ipipe_handle_irq+0xaf)
> :|   +func                 -95    0.454  __ipipe_dispatch_wired+0x16
> (__ipipe_handle_irq+0x68)
> :| #  func                 -95    0.329  xnintr_clock_handler+0x8
> (__ipipe_dispatch_wired+0x9f)
> :| #  func                 -95    0.400  xnintr_irq_handler+0xe
> (xnintr_clock_handler+0x17)
> :| #  func                 -94    0.312  xnpod_announce_tick+0x8
> (xnintr_irq_handler+0x3b)
> :| #  func                 -94    0.497  xntimer_do_tick_aperiodic+0xe
> (xnpod_announce_tick+0xf)
> :| #  func                 -93    0.301  xnthread_periodic_handler+0x8
> (xntimer_do_tick_aperiodic+0x217)
> :| #  func                 -93    0.375  xnpod_resume_thread+0xe
> (xnthread_periodic_handler+0x2c)
> :| #  [ 4196] samplin 99   -93    0.933  xnpod_resume_thread+0x56
> (xnthread_periodic_handler+0x2c)
> :| #  func                 -92    0.327  xnpod_schedule+0xe
> (xnintr_irq_handler+0x135)
> :| #  [ 3457] konsole -1   -91+   1.299  xnpod_schedule+0x90
> (xnintr_irq_handler+0x135)
> :| #  func                 -90    0.639  __switch_to+0xe
> (xnpod_schedule+0x493)
> :| #  [ 4196] samplin 99   -89    0.642  xnpod_schedule+0x56b
> (xnpod_suspend_thread+0x18b)
> :| #  func                 -89    0.353  __ipipe_restore_pipeline_head
> +0x12 (xnpod_wait_thread_period+0x12b)
> :| +  end     0x80000000   -88+   1.363  __ipipe_restore_pipeline_head
> +0x5c (xnpod_wait_thread_period+0x12b)
> :| +  begin   0xfffffffa   -87    0.530  common_interrupt+0x29
> (__ipipe_restore_pipeline_head+0x60)

Then a NIC interrupt is caught before the just awaken task gets back to
user-space.

> :| +  func                 -87    0.454  __ipipe_handle_irq+0x14
> (common_interrupt+0x2e)
> :| +  func                 -86    0.263  __ipipe_ack_irq+0x8
> (__ipipe_handle_irq+0x151)
> :| +  func                 -86    0.307  __ipipe_ack_level_irq+0x12
> (__ipipe_ack_irq+0x19)
> :| +  func                 -86    0.352  mask_and_ack_8259A+0x14
> (__ipipe_ack_level_irq+0x22)
> :| +  func                 -85!  30.267  __ipipe_spin_lock_irqsave+0x9
> (mask_and_ack_8259A+0x29)

I suspect the tracer to induce massive cache misses on your setup, which
limits the interpretation we can have of this log. Could you apply the
following patch, and post back the frozen log for the very same test?
TIA,

--- 2.6.20-ipipe-1.8-08/kernel/ipipe/core.c~	2007-09-16 16:54:34.000000000 +0200
+++ 2.6.20-ipipe-1.8-08/kernel/ipipe/core.c	2007-10-10 13:05:28.000000000 +0200
@@ -283,7 +283,7 @@
 	unsigned long flags;
 	int s;
 
-	local_irq_save_hw(flags);
+	local_irq_save_hw_notrace(flags);
 	__raw_spin_lock(lock);
 	ipipe_load_cpuid();
 	ipd = per_cpu(ipipe_percpu_domain, cpuid);
@@ -302,7 +302,7 @@
 	ipd = per_cpu(ipipe_percpu_domain, cpuid);
 	if (!raw_demangle_irq_bits(&x))
 		__clear_bit(IPIPE_STALL_FLAG, &ipd->cpudata[cpuid].status);
-	local_irq_restore_hw(x);
+	local_irq_restore_hw_notrace(x);
 }
 
 /*

> :| #  func                 -55    0.385
> __ipipe_spin_unlock_irqrestore+0x9 (mask_and_ack_8259A+0x73)
> :| +  func                 -54    0.349  __ipipe_walk_pipeline+0xe
> (__ipipe_handle_irq+0x81)
> :| +  end     0xfffffffa   -54+   2.204  common_interrupt+0x38
> (__ipipe_restore_pipeline_head+0x60)

Another NIC interrupt, still not running the task...

> :| +  begin   0xfffffff1   -52    0.331  common_interrupt+0x29
> (__ipipe_restore_pipeline_head+0x60)
> :| +  func                 -52    0.804  __ipipe_handle_irq+0x14
> (common_interrupt+0x2e)
> :| +  func                 -51    0.371  __ipipe_ack_irq+0x8
> (__ipipe_handle_irq+0x151)
> :| +  func                 -50    0.321  __ipipe_ack_level_irq+0x12
> (__ipipe_ack_irq+0x19)
> :| +  func                 -50    0.252  mask_and_ack_8259A+0x14
> (__ipipe_ack_level_irq+0x22)
> :| +  func                 -50!  38.784  __ipipe_spin_lock_irqsave+0x9
> (mask_and_ack_8259A+0x29)
> :| #  func                 -11    0.367
> __ipipe_spin_unlock_irqrestore+0x9 (mask_and_ack_8259A+0x73)
> :| +  func                 -11    0.346  __ipipe_walk_pipeline+0xe
> (__ipipe_handle_irq+0x81)
> :| +  end     0xfffffff1   -10    0.715  common_interrupt+0x38
> (__ipipe_restore_pipeline_head+0x60)

Then an IDE interrupt.

> :| +  begin   0x80000001   -10    0.351  __ipipe_dispatch_event+0x180
> (__ipipe_syscall_root+0x44)
> :| +  end     0x80000001    -9+   3.002  __ipipe_dispatch_event+0x154
> (__ipipe_syscall_root+0x44)

Your task is back, way too late obviously. Still, the additional
interrupts do not cause the massive jitter, even if they increase the
worst-case. The next frozen log may tell us more.

-- 
Philippe.




  reply	other threads:[~2007-10-10 11:30 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-05  7:52 [Xenomai-help] awful latencies (~110us) CHABAL David
2007-10-05  8:30 ` Gilles Chanteperdrix
2007-10-05  9:04   ` CHABAL David
2007-10-05  9:20     ` Philippe Gerum
2007-10-05 10:29       ` CHABAL David
2007-10-05 12:35         ` Jan Kiszka
2007-10-05 14:02         ` Philippe Gerum
2007-10-08 12:46           ` CHABAL David
2007-10-10 11:30             ` Philippe Gerum [this message]
2007-10-12 14:05               ` CHABAL David
2007-10-12 14:21                 ` Jan Kiszka
2007-10-12 14:26                   ` CHABAL David
2007-10-12 15:34                   ` Philippe Gerum
2007-10-12 15:49                     ` Jan Kiszka
2007-10-12 16:43                       ` Philippe Gerum
2007-10-17  8:25                         ` CHABAL David
2007-10-17  8:41                           ` Philippe Gerum
2007-10-17  8:55                             ` CHABAL David
2007-10-17  9:17                               ` Philippe Gerum
2007-10-17 13:14                                 ` CHABAL David
2007-10-17 13:46                                   ` Philippe Gerum
2007-10-17 14:52                                     ` CHABAL David
2007-10-17 15:24                                       ` Philippe Gerum
2007-10-17 15:46                                         ` CHABAL David
2007-10-17 16:05                                           ` Philippe Gerum
2007-10-18 12:38                                             ` CHABAL David
2007-10-18 13:18                                               ` Philippe Gerum
2007-10-22 14:28                                                 ` CHABAL David
2007-10-17  8:56                             ` Philippe Gerum
2007-10-17  8:43                           ` Philippe Gerum

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=1192015852.22917.197.camel@domain.hid \
    --to=rpm@xenomai.org \
    --cc=david.chabal@domain.hid \
    --cc=xenomai@xenomai.org \
    /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.