From: Keir Fraser <keir.xen@gmail.com>
To: Jan Beulich <JBeulich@novell.com>
Cc: xen-devel@lists.xensource.com
Subject: Re: [xen-unstable test] 6947: regressions - trouble: broken/fail/pass
Date: Mon, 02 May 2011 14:14:15 +0100 [thread overview]
Message-ID: <C9E46CB7.17164%keir.xen@gmail.com> (raw)
In-Reply-To: <4DBEBFE7020000780003F29F@vpn.id2.novell.com>
On 02/05/2011 13:29, "Jan Beulich" <JBeulich@novell.com> wrote:
>>>> On 02.05.11 at 14:19, Keir Fraser <keir.xen@gmail.com> wrote:
>> On 02/05/2011 13:00, "Jan Beulich" <JBeulich@novell.com> wrote:
>>
>>>> (3) Restructure the interrupt code to do less work in IRQ context. For
>>>> example tasklet-per-irq, and schedule on the local cpu. Protect a bunch of
>>>> the PIRQ structures with a non-IRQ lock. Would increase interrupt latency
>>>> if
>>>> the local CPU is interrupted in hypervisor context. I'm not sure about this
>>>> one -- I'm not that happy about the amount of work now done in hardirq
>>>> context, but I'm not sure on the performance impact of deferring the work.
>>>
>>> I'm not inclined to make changes in this area for the purpose at hand
>>> either (again, Linux gets away without this - would have to check how
>>> e.g. KVM gets the TLB flushing done, or whether they don't defer
>>> flushes like we do).
>>
>> Oh, another way would be to make lookup_slot invocations from IRQ context be
>> RCU-safe. Then the radix tree updates would not have to synchronise on the
>> irq_desc lock? And I believe Linux has examples of RCU-safe usage of radix
>
> I'm not sure - the patch doesn't introduce the locking (i.e. the
> translation arrays used without the patch also get updated under
> lock). I'm also not certain about slot recycling aspects (i.e. what
> would the result be if freeing slots got deferred via RCU, but the
> same slot is then needed to be used again before the grace period
> expires). Quite possibly this consideration is mute, just resulting
> from my only half-baked understanding of RCU...
The most straightforward way to convert to RCU with the most similar
synchronising semantics would be to add a 'live' boolean flag to each
pirq-related struct that is stored in a radix tree. Then:
* insertions into radix tree would be moved before acquisition of the
irq_desc lock, then set 'live' under the lock
* deletions would clear 'live' under the lock, then do the actual radix
deletion would happen after irq_desc lock release;
* lookups would happen as usual under the irq_desc lock, but with an extra
test of the 'live' flag.
The main complexity of this approach would probably be in breaking up the
insertions/deletions across the irq_desc-lock critical section. Basically
the 'live' flag update would happen wherever the insertion/deletion happens
right now, but the physical insertion/deletion would be moved respectively
earlier/later.
We'd probably also need an extra lock to protect against concurrent
radix-tree update operations (should be pretty straightforward to add
however, needing to protect *only* the radix-tree update calls).
This is a pretty nice way to go imo.
-- Keir
> Jan
>
>> trees -- certainly Linux's radix-tree.h mentions RCU.
>>
>> I must say this would be far more attractive to me than hacking the xmalloc
>> subsystem. That's pretty nasty.
>>
>> -- Keir
>
>
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
next prev parent reply other threads:[~2011-05-02 13:14 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-01 19:56 [xen-unstable test] 6947: regressions - trouble: broken/fail/pass xen.org
2011-05-01 20:48 ` Keir Fraser
2011-05-02 9:01 ` Jan Beulich
2011-05-02 11:22 ` Keir Fraser
2011-05-02 12:00 ` Jan Beulich
2011-05-02 12:13 ` Keir Fraser
2011-05-02 12:24 ` Jan Beulich
2011-05-02 12:19 ` Keir Fraser
2011-05-02 12:29 ` Jan Beulich
2011-05-02 13:14 ` Keir Fraser [this message]
2011-05-02 13:39 ` Keir Fraser
2011-05-02 14:04 ` Jan Beulich
2011-05-02 15:45 ` Keir Fraser
2011-05-02 16:36 ` Dan Magenheimer
2011-05-02 17:07 ` Keir Fraser
2011-05-03 9:35 ` Jan Beulich
2011-05-03 10:09 ` Keir Fraser
2011-05-03 13:36 ` Jan Beulich
2011-05-03 14:09 ` Keir Fraser
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=C9E46CB7.17164%keir.xen@gmail.com \
--to=keir.xen@gmail.com \
--cc=JBeulich@novell.com \
--cc=xen-devel@lists.xensource.com \
/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.