From: Alexander Duyck <alexander.h.duyck@redhat.com>
To: Eric Dumazet <eric.dumazet@gmail.com>,
Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Cc: netdev <netdev@vger.kernel.org>
Subject: Re: [RFC] use smp_load_acquire()/smp_store_release()
Date: Wed, 29 Oct 2014 14:13:51 -0700 [thread overview]
Message-ID: <5451588F.6020505@redhat.com> (raw)
In-Reply-To: <1414612620.631.98.camel@edumazet-glaptop2.roam.corp.google.com>
On 10/29/2014 12:57 PM, Eric Dumazet wrote:
> On Wed, 2014-10-29 at 12:27 -0700, Jeff Kirsher wrote:
>> On Wed, 2014-10-29 at 09:16 -0700, Alexander Duyck wrote:
>>> On 10/29/2014 07:49 AM, Eric Dumazet wrote:
>>>> Hi Alexander
>>>>
>>>> The memory barriers added in commit
>>>> b37c0fbe3f6dfba1f8ad2aed47fb40578a254635
>>>> ("net: Add memory barriers to prevent possible race in byte queue
>>>> limits")
>>>>
>>>> have heavy cost.
>>>>
>>>> It seems we could use smp_load_acquire() and smp_store_release()
>>>> instead ?
>>>>
>>>> I'll post a patch later today. I would be interested if someone was able
>>>> to test it, as your commit apparently was tested and known to fix a
>>>> reproducible race.
>>>>
>>>> Thanks !
>> Eric- just CC me on the patch you post and I will see what I can do
>> about getting validation eyes on it.
> Thanks guys, will do, and will CC Paul as well.
>
> Alexander, here is the following profile showing the cost of the
> 'mfence', in a typical rpc workload (a lot of IRQ are generated for TX
> completions, because RPC tend to send small packets)
>
> 0.11 │ je 33a
> │ mov -0x3c(%rbp),%esi
> 0.06 │ lea 0xc0(%rbx),%rdi
> 0.06 │ callq dql_completed
> 0.06 │ mfence
> 38.68 │ mov 0xc4(%rbx),%edx
> 1.83 │ mov 0xc0(%rbx),%eax
> │ cmp %eax,%edx
> 0.22 │ js 333
> 0.11 │ lock btrl $0x1,0x98(%rbx)
It might be worthwhile to see if it would be possible to combine BQL
with the mechanism the drivers have for handling descriptors/packets.
Otherwise you are going to be pulling one barrier just to hit another
right after it.
Also depending on what driver it is that the trace is from you may want
to check and see if you have any MMIO transactions occurring right
before you make the call, otherwise that may be the actual cause for the
significant cost as you are having to flush non-coherent memory before
you can resume operation.
Thanks,
Alex
prev parent reply other threads:[~2014-10-29 21:13 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-29 14:49 [RFC] use smp_load_acquire()/smp_store_release() Eric Dumazet
2014-10-29 16:16 ` Alexander Duyck
2014-10-29 19:27 ` Jeff Kirsher
2014-10-29 19:57 ` Eric Dumazet
2014-10-29 21:13 ` Alexander Duyck [this message]
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=5451588F.6020505@redhat.com \
--to=alexander.h.duyck@redhat.com \
--cc=eric.dumazet@gmail.com \
--cc=jeffrey.t.kirsher@intel.com \
--cc=netdev@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).