kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@siemens.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Avi Kivity <avi@redhat.com>,
	Marcelo Tosatti <mtosatti@redhat.com>, kvm <kvm@vger.kernel.org>
Subject: Re: [RFC][PATCH] KVM: Introduce direct MSI message injection for in-kernel irqchips
Date: Tue, 25 Oct 2011 13:41:39 +0200	[thread overview]
Message-ID: <4EA6A073.1050109@siemens.com> (raw)
In-Reply-To: <20111025112027.GA17810@redhat.com>

On 2011-10-25 13:20, Michael S. Tsirkin wrote:
> On Tue, Oct 25, 2011 at 09:24:17AM +0200, Jan Kiszka wrote:
>> On 2011-10-24 19:23, Michael S. Tsirkin wrote:
>>> On Mon, Oct 24, 2011 at 07:05:08PM +0200, Michael S. Tsirkin wrote:
>>>> On Mon, Oct 24, 2011 at 06:10:28PM +0200, Jan Kiszka wrote:
>>>>> On 2011-10-24 18:05, Michael S. Tsirkin wrote:
>>>>>>> This is what I have in mind:
>>>>>>>  - devices set PBA bit if MSI message cannot be sent due to mask (*)
>>>>>>>  - core checks&clears PBA bit on unmask, injects message if bit was set
>>>>>>>  - devices clear PBA bit if message reason is resolved before unmask (*)
>>>>>>
>>>>>> OK, but practically, when exactly does the device clear PBA?
>>>>>
>>>>> Consider a network adapter that signals messages in a RX ring: If the
>>>>> corresponding vector is masked while the guest empties the ring, I
>>>>> strongly assume that the device is supposed to take back the pending bit
>>>>> in that case so that there is no interrupt inject on a later vector
>>>>> unmask operation.
>>>>>
>>>>> Jan
>>>>
>>>> Do you mean virtio here?
>>
>> Maybe, but I'm also thinking of fully emulated devices.
> 
> One thing seems certain: actual, assigned devices don't
> have this fake "msi-x level" so they don't notify host
> when that changes.

But they have real PBA. We "just" need to replicate the emulated vector
mask state into real hw. Doesn't this happen anyway when we disable the
IRQ on the host?

If not, that may require a bit more work, maybe a special masking mode
that can be requested by the managing backend of an assigned device from
the MSI-X in-kernel service.

> 
>>> Do you expect this optimization to give
>>>> a significant performance gain?
>>
>> Hard to asses in general. But I have a silly guest here that obviously
>> masks MSI vectors for each event. This currently not only kicks us into
>> a heavy-weight exit, it also enforces serialization on qemu_global_mutex
>> (while we have the rest already isolated).
> 
> It easy to see how MSIX mask support in kernel would help.
> Not sure whether it's worth it to also add special APIs to
> reduce the number of spurious interrupts for such silly guests.

I do not get the latter point. What could be simplified (without making
it incorrect) when ignoring excessive mask accesses? Also, if "sane"
guests do not access the mask that frequently, why was in-kernel MSI-X
MMIO proposed at all?

> 
>>>
>>> It would also be challenging to implement this in
>>> a race free manner. Clearing on interrupt status read
>>> seems straight-forward.
>>
>> With an in-kernel MSI-X MMIO handler, this race will be naturally
>> unavoidable as there is no more global lock shared between table/PBA
>> accesses and the device model. But, when using atomic bit ops, I don't
>> think that will cause headache.
>>
>> Jan
> 
> This is not the race I meant.  The challenge is for the device to
> determine that it can clear the PBA.  atomic accesses on PBA won't help
> here I think.

The device knows best if the interrupt reason persists. It can
synchronize MSI assertion and PBA bit clearance. If it clears "too
late", than this reflects what may happen on real hw as well when host
and device race for changing vector mask vs. device state. It's not
stated that those changes need to be serialized inside the device, is it?

Jan

-- 
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux

  reply	other threads:[~2011-10-25 11:41 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-21  9:19 [RFC][PATCH] KVM: Introduce direct MSI message injection for in-kernel irqchips Jan Kiszka
2011-10-21  9:42 ` Sasha Levin
2011-10-21 11:06 ` Michael S. Tsirkin
2011-10-21 11:51   ` Jan Kiszka
2011-10-21 12:04     ` Michael S. Tsirkin
2011-10-21 13:00       ` Jan Kiszka
2011-10-24  9:45 ` Avi Kivity
2011-10-24 10:19   ` Jan Kiszka
2011-10-24 11:09     ` Avi Kivity
2011-10-24 12:06       ` Jan Kiszka
2011-10-24 12:43         ` Michael S. Tsirkin
2011-10-24 13:11           ` Jan Kiszka
2011-10-24 13:43             ` Jan Kiszka
2011-10-24 14:40               ` Michael S. Tsirkin
2011-10-24 15:00                 ` Jan Kiszka
2011-10-24 16:05                   ` Michael S. Tsirkin
2011-10-24 16:10                     ` Jan Kiszka
2011-10-24 17:05                       ` Michael S. Tsirkin
2011-10-24 17:23                         ` Michael S. Tsirkin
2011-10-25  7:24                           ` Jan Kiszka
2011-10-25 11:20                             ` Michael S. Tsirkin
2011-10-25 11:41                               ` Jan Kiszka [this message]
2011-10-25 12:05                                 ` Michael S. Tsirkin
2011-10-25 12:21                                   ` Jan Kiszka
2011-10-25 13:29                                     ` Michael S. Tsirkin
2011-10-24 14:25             ` Michael S. Tsirkin
2011-10-25  7:56         ` Avi Kivity

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=4EA6A073.1050109@siemens.com \
    --to=jan.kiszka@siemens.com \
    --cc=avi@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=mtosatti@redhat.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 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).