From: Maxime Coquelin <maxime.coquelin@redhat.com>
To: Jason Wang <jasowang@redhat.com>, "Michael S. Tsirkin" <mst@redhat.com>
Cc: yuanhan.liu@linux.intel.com, qemu-devel@nongnu.org,
peterx@redhat.com, marcandre.lureau@gmail.com, wexu@redhat.com,
vkaplans@redhat.com, jfreiman@redhat.com
Subject: Re: [Qemu-devel] [PATCH 6/6] spec/vhost-user spec: Add IOMMU support
Date: Wed, 17 May 2017 16:10:46 +0200 [thread overview]
Message-ID: <779cdcfc-80df-373a-e772-3b14cd49a2ff@redhat.com> (raw)
In-Reply-To: <c59af526-a290-1f11-2d34-6fad817a03d1@redhat.com>
On 05/17/2017 04:53 AM, Jason Wang wrote:
>
>
> On 2017年05月16日 23:16, Michael S. Tsirkin wrote:
>> On Mon, May 15, 2017 at 01:45:28PM +0800, Jason Wang wrote:
>>>
>>> On 2017年05月13日 08:02, Michael S. Tsirkin wrote:
>>>> On Fri, May 12, 2017 at 04:21:58PM +0200, Maxime Coquelin wrote:
>>>>> On 05/11/2017 08:25 PM, Michael S. Tsirkin wrote:
>>>>>> On Thu, May 11, 2017 at 02:32:46PM +0200, Maxime Coquelin wrote:
>>>>>>> This patch specifies and implements the master/slave communication
>>>>>>> to support device IOTLB in slave.
>>>>>>>
>>>>>>> The vhost_iotlb_msg structure introduced for kernel backends is
>>>>>>> re-used, making the design close between the two backends.
>>>>>>>
>>>>>>> An exception is the use of the secondary channel to enable the
>>>>>>> slave to send IOTLB miss requests to the master.
>>>>>>>
>>>>>>> Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
>>>>>>> ---
>>>>>>> docs/specs/vhost-user.txt | 75
>>>>>>> +++++++++++++++++++++++++++++++++++++++++++++++
>>>>>>> hw/virtio/vhost-user.c | 31 ++++++++++++++++++++
>>>>>>> 2 files changed, 106 insertions(+)
>>>>>>>
>>>>>>> diff --git a/docs/specs/vhost-user.txt b/docs/specs/vhost-user.txt
>>>>>>> index 5fa7016..4a1f0c3 100644
>>>>>>> --- a/docs/specs/vhost-user.txt
>>>>>>> +++ b/docs/specs/vhost-user.txt
>>>>>>> @@ -97,6 +97,23 @@ Depending on the request type, payload can be:
>>>>>>> log offset: offset from start of supplied file descriptor
>>>>>>> where logging starts (i.e. where guest address 0 would
>>>>>>> be logged)
>>>>>>> + * An IOTLB message
>>>>>>> + ---------------------------------------------------------
>>>>>>> + | iova | size | user address | permissions flags | type |
>>>>>>> + ---------------------------------------------------------
>>>>>>> +
>>>>>>> + IOVA: a 64-bit guest I/O virtual address
>>>>>> guest -> VM
>>>>> Ok.
>>>>>
>>>>>>> + Size: a 64-bit size
>>>>>> How do you specify "all memory"? give special meaning to size 0?
>>>>> Good point, it does not support all memory currently.
>>>>> It is not vhost-user specific, but general to the vhost
>>>>> implementation.
>>>> But iommu needs it to support passthrough.
>>> Probably not, we will just pass the mappings in vhost_memory_region to
>>> vhost. Its memory_size is also a __u64.
>>>
>>> Thanks
>> That's different since that's chunks of qemu virtual memory.
>>
>> IOMMU maps IOVA to GPA.
>>
>
> But we're in fact cache IOVA -> HVA mapping in the remote IOTLB. When
> passthrough mode is enabled, IOVA == GPA, so passing mappings in
> vhost_memory_region should be fine.
Not sure this is a good idea, because when configured in passthrough,
QEMU will see the IOMMU as enabled, so the the VIRTIO_F_IOMMU_PLATFORM
feature will be negotiated if both guest and backend support it.
So how the backend will know whether it should directly pick the
translation directly into the vhost_memory_region, or translate it
through the device IOTLB?
Maybe the solution would be for QEMU to wrap "all memory" IOTLB updates
& invalidations to vhost_memory_regions, since the backend won't anyway
be able to perform accesses outside these regions?
> The only possible "issue" with "all memory" is if you can not use a
> single TLB invalidation to invalidate all caches in remote TLB.
If needed, maybe we could introduce a new VHOST_IOTLB_INVALIDATE message
type?
For older kernel backend that doesn't support it, -EINVAL will be
returned, so QEMU could handle it another way in this case.
> But this
> is only theoretical problem since it only happen when we have a 1 byte
> mapping [2^64 - 1, 2^64) cached in remote TLB. Consider:
>
> - E.g intel IOMMU has a range limitation for invalidation (1G currently)
> - Looks like all existed IOMMU use page aligned mappings
>
> It was probably not a big issue. And for safety we could use two
> invalidations to make sure all caches were flushed remotely. Or just
> change the protocol from start, size to start, end. Vhost-kernel is
> probably too late for this change, but I'm still not quite sure it is
> worthwhile.
I'm not for diverging the protocol between kernel & user backends.
Thanks,
Maxime
> Thanks
next prev parent reply other threads:[~2017-05-17 14:11 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-11 12:32 [Qemu-devel] [PATCH 0/6] vhost-user: Specify and implement device IOTLB support Maxime Coquelin
2017-05-11 12:32 ` [Qemu-devel] [PATCH 1/6] vhost: propagate errors in vhost_device_iotlb_miss() Maxime Coquelin
2017-05-11 12:32 ` [Qemu-devel] [PATCH 2/6] vhost: rework IOTLB messaging Maxime Coquelin
2017-05-11 12:32 ` [Qemu-devel] [PATCH 3/6] vhost: Update rings information for IOTLB earlier Maxime Coquelin
2017-05-11 17:33 ` Michael S. Tsirkin
2017-05-12 11:21 ` Maxime Coquelin
2017-05-17 16:41 ` Michael S. Tsirkin
2017-05-18 7:35 ` Maxime Coquelin
2017-05-18 14:45 ` Maxime Coquelin
2017-05-18 15:24 ` Michael S. Tsirkin
2017-05-19 9:48 ` Maxime Coquelin
2017-05-19 20:37 ` Michael S. Tsirkin
2017-05-11 12:32 ` [Qemu-devel] [PATCH 4/6] vhost-user: add vhost_user to hold the chr Maxime Coquelin
2017-05-11 12:32 ` [Qemu-devel] [PATCH 5/6] vhost-user: add slave-req-fd support Maxime Coquelin
2017-05-11 12:32 ` [Qemu-devel] [PATCH 6/6] spec/vhost-user spec: Add IOMMU support Maxime Coquelin
2017-05-11 18:25 ` Michael S. Tsirkin
2017-05-12 14:21 ` Maxime Coquelin
2017-05-13 0:02 ` Michael S. Tsirkin
2017-05-15 5:45 ` Jason Wang
2017-05-16 15:16 ` Michael S. Tsirkin
2017-05-17 2:53 ` Jason Wang
2017-05-17 14:10 ` Maxime Coquelin [this message]
2017-05-19 6:48 ` Jason Wang
2017-05-19 8:35 ` Maxime Coquelin
2017-05-17 15:27 ` Maxime Coquelin
2017-05-16 8:19 ` Maxime Coquelin
2017-05-16 13:23 ` Michael S. Tsirkin
2017-05-17 16:48 ` Michael S. Tsirkin
2017-05-18 8:43 ` Maxime Coquelin
2017-05-19 7:46 ` Jason Wang
2017-05-19 16:42 ` Michael S. Tsirkin
2017-05-11 13:25 ` [Qemu-devel] [PATCH 0/6] vhost-user: Specify and implement device IOTLB support no-reply
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=779cdcfc-80df-373a-e772-3b14cd49a2ff@redhat.com \
--to=maxime.coquelin@redhat.com \
--cc=jasowang@redhat.com \
--cc=jfreiman@redhat.com \
--cc=marcandre.lureau@gmail.com \
--cc=mst@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=vkaplans@redhat.com \
--cc=wexu@redhat.com \
--cc=yuanhan.liu@linux.intel.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.