From: Armin Steinhoff <armin@steinhoff.de>
To: Thomas Gleixner <tglx@linutronix.de>, Henrik Austad <henrik@austad.us>
Cc: Jonathan David <jonathan.david@ni.com>,
linux-rt-users@vger.kernel.org, josh.cartwright@ni.com
Subject: Re: [RFC] e1000e: Add delays after writing to registers
Date: Fri, 6 Nov 2015 16:46:23 +0100 [thread overview]
Message-ID: <563CCB4F.90905@steinhoff.de> (raw)
In-Reply-To: <alpine.DEB.2.11.1511060929430.4032@nanos>
Thomas Gleixner schrieb:
> On Fri, 6 Nov 2015, Henrik Austad wrote:
>> On Tue, Nov 03, 2015 at 04:10:23PM -0600, Jonathan David wrote:
>>> On 11/03/2015 01:42 PM, Henrik Austad wrote:
>>>> On Tue, Nov 03, 2015 at 11:43:21AM -0600, Jonathan David wrote:
>>>>> On 10/22/2015 12:59 AM, Henrik Austad wrote:
>>>>>>> Adding a delay after long series of writes gives them time to
>>>>>>> complete, and for higher priority tasks to run unimpeded.
>>>>>> Aren't we running with threaded interrupts?
>>>>>>
>>>>>> What happens to the thread(s) pushing data to the network?
>>>>>> What about xmit-buffer once it is full? Which thread will block on send or
>>>>>> have its sk_buff dropped?
>>>>> All of this is totally irrelevant to the problem we are seeing.
>>>> If this is irrelevant, why hack at the network-driver, hmm?
>>> It is relevant to the network driver, as this is where the symptoms were
>>> discovered; however, it has no relation to the packet delivery path. This is
>>> related purely to link configuration.
>> I was under the impression that a PCI link configuration/training was down
>> to speed etc, not how many MMIO read/writes it could do. Then again, a lot
>> of this stuff is pure (black) magic.
> This is not about PCI link training. Jonathan is talking about the
> network link configuration.
>
>>>>> The issue is with PCI where issuing a large number of MMIO writes
>>>>> followed by a read (to force said writes to execute) will stall the CPU.
>>>>> When the CPU is stalled, no interrupts are serviced, including the local
>>>>> apic timer interrupt, which was responsible for waking up cyclictest.
>>>>> This behavior was observed within traces gathered from cyclictest with
>>>>> ftrace enabled.
>>>> So you get bogged down with interrupts disabled;
>>> No, interrupts are entirely enabled while the PCI MMIO writes/read are
>>> issued; but the local apic timer still arrives late, presumably because the
>>> CPU is waiting to complete whatever writes remain in the buffer.
>> Heh, strange, is the interrupt signal itself delivered late as well, or
>> just the handling of it?
> The CPU stalls on the IO read, so the interrupt cannot be handled by
> the CPU until that stall is resolved. The timer fires correctly.
>
> The problem here is that even if the I/O memory of the network device
> is mapped uncached, the PCI bus itself is allowed to buffer and do
> write combining. That's done to overcome the bottleneck of waiting for
> each single write transaction to complete.
>
> The PCI bus guarantees that the writes are not reordered versus a
> read. That's why drivers use a read after a series of writes to make
> sure that the writes have reached the device and are not longer in the
> PCI buffer queue.
>
> Now that read after a sequence of writes has the effect that the CPU
> has to wait for the writes to be finished before the read can take
> place. During that time the CPU just sits there and twiddles
> thumbs. It's a full stall.
What means "the CPU" ? Does it mean ALL CPU cores are stalled ??
> Now my question is how big is the induced latency.
>
> Thanks,
>
> tglx
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
next prev parent reply other threads:[~2015-11-06 15:46 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-21 22:07 [RFC] e1000e: Add delays after writing to registers Jonathan David
2015-10-22 5:59 ` Henrik Austad
2015-11-03 17:43 ` Jonathan David
2015-11-03 19:42 ` Henrik Austad
2015-11-03 22:10 ` Jonathan David
2015-11-06 5:53 ` Henrik Austad
2015-11-06 11:08 ` Thomas Gleixner
2015-11-06 15:46 ` Armin Steinhoff [this message]
2015-11-06 17:22 ` Thomas Gleixner
2015-11-06 18:38 ` Jonathan David
2016-01-12 15:37 ` AW: " eg Engleder Gerhard
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=563CCB4F.90905@steinhoff.de \
--to=armin@steinhoff.de \
--cc=henrik@austad.us \
--cc=jonathan.david@ni.com \
--cc=josh.cartwright@ni.com \
--cc=linux-rt-users@vger.kernel.org \
--cc=tglx@linutronix.de \
/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.