From: Peter Xu <peterx@redhat.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: qemu-devel@nongnu.org, David Gibson <david@gibson.dropbear.id.au>,
yi.l.liu@intel.com, Marcel Apfelbaum <marcel@redhat.com>,
Lan Tianyu <tianyu.lan@intel.com>,
Jason Wang <jasowang@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v4 10/10] vhost: iommu: cache static mapping if there is
Date: Mon, 29 May 2017 12:29:51 +0800 [thread overview]
Message-ID: <20170529042950.GE22816@pxdev.xzpeter.org> (raw)
In-Reply-To: <20170525211413-mutt-send-email-mst@kernel.org>
On Thu, May 25, 2017 at 09:14:55PM +0300, Michael S. Tsirkin wrote:
> On Mon, May 22, 2017 at 10:42:00AM +0800, Peter Xu wrote:
> > On Fri, May 19, 2017 at 07:55:26PM +0300, Michael S. Tsirkin wrote:
> > > On Fri, May 19, 2017 at 11:19:49AM +0800, Peter Xu wrote:
> > > > This patch pre-heat vhost iotlb cache when passthrough mode enabled.
> > > >
> > > > Sometimes, even if user specified iommu_platform for vhost devices,
> > > > IOMMU might still be disabled. One case is passthrough mode in VT-d
> > > > implementation. We can detect this by observing iommu_list. If it's
> > > > empty, it means IOMMU translation is disabled, then we can actually
> > > > pre-heat the translation (it'll be static mapping then) by first
> > > > invalidating all IOTLB, then cache existing memory ranges into vhost
> > > > backend iotlb using 1:1 mapping.
> > > >
> > > > Signed-off-by: Peter Xu <peterx@redhat.com>
> > >
> > > I don't really understand. Is this a performance optimization?
> > > Can you post some #s please?
> >
> > Yes, it is. Vhost can work even without this patch, but it should be
> > faster when with this patch.
>
> You'll have to include perf testing numbers then.
My mistake to not have compared the numbers before, since it's just so
obvious to me that this patch should help.
Though after some simple streaming tests, it shows that this patch
didn't boost performance at all. I added some traces in vhost kernel
to know what's happened, please see below.
Without this patch, boot with iommu=pt, I see IOTLB cache insertion
like this:
vhost_process_iotlb_msg: iotlb new: 1 (0x17879b240-0x17fffffff)
vhost_process_iotlb_msg: iotlb new: 2 (0x17879d240-0x17fffffff)
vhost_process_iotlb_msg: iotlb new: 3 (0x17879a000-0x17fffffff)
vhost_process_iotlb_msg: iotlb new: 4 (0x178570000-0x17fffffff)
vhost_process_iotlb_msg: iotlb new: 5 (0x178532606-0x17fffffff)
vhost_process_iotlb_msg: iotlb new: 6 (0x177bad0e2-0x17fffffff)
vhost_process_iotlb_msg: iotlb new: 7 (0x1768560e2-0x17fffffff)
(Note: we can see the pattern is (ADDR-0x17fffffff), while ADDR is
increasing, finally the range will cover all addresses that vhost
needs for DMA, then we won't have cache miss, and 0x17fffffff is the
upper limit for a 4G memory guest)
While after this patch (this is expected):
vhost_process_iotlb_msg: iotlb new: 1 (0x100000000-0x17fffffff)
vhost_process_iotlb_msg: iotlb new: 2 (0x0-0x9ffff)
vhost_process_iotlb_msg: iotlb new: 3 (0xc0000-0x7fffffff)
(Note: this is one entry per RAM memory region)
So it explained well on why performance didn't really change even
before applying this patch: currently when iommu=pt is on,
address_space_get_iotlb_entry() can get IOTLB that is bigger than page
size (if you see the code, plen decides the page mask, and plen is
only limited by memory region sizes when PT is enabled). So until the
7th cache miss IOTLB request, the range is big enough to cover the
rest of DMA addresses.
My preference is that we still apply this patch even there is no
performance gain on simple streaming test. Reasons:
- the old code has good performance depending on implementation of
address_space_get_iotlb_entry(), which may alter in the future
- after apply the patch, we are 100% sure that we won't cache miss,
while we cannot guarantee that without it. If not apply the patch,
we may still encounter cache miss (e.g., access address <0x1768560e2
after the 7th cache miss in above test), which can introduce that
cache-missed IO to be delayed.
>
> > As mentioned in the commit message and below comment [1], this patch
> > pre-heat the cache for vhost. Currently the cache entries depends on
> > the system memory ranges (dev->mem->nregions), and it should be far
> > smaller than vhost's cache count (currently it is statically defined
> > as max_iotlb_entries=2048 in kernel). If with current patch, these
> > cache entries can cover the whole possible DMA ranges that PT mode
> > would allow, so we won't have any cache miss then.
> >
> > For the comments, do you have any better suggestion besides commit
> > message and [1]?
> >
> > >
> > > Also, if it's PT, can't we bypass iommu altogether? That would be
> > > even faster ...
> >
> > Yes, but I don't yet know a good way to do it... Any suggestion is
> > welcomed as well.
> >
> > Btw, do you have any comment on other patches besides this one? Since
> > this patch can really be isolated from the whole PT support series.
> >
> > Thanks,
>
> I've applied the rest of the series.
Thank you very much.
--
Peter Xu
next prev parent reply other threads:[~2017-05-29 4:30 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-19 3:19 [Qemu-devel] [PATCH v4 00/10] VT-d: PT (passthrough) mode support and misc fixes Peter Xu
2017-05-19 3:19 ` [Qemu-devel] [PATCH v4 01/10] memory: tune last param of iommu_ops.translate() Peter Xu
2017-05-19 3:19 ` [Qemu-devel] [PATCH v4 02/10] memory: remove the last param in memory_region_iommu_replay() Peter Xu
2017-05-19 3:19 ` [Qemu-devel] [PATCH v4 03/10] x86-iommu: use DeviceClass properties Peter Xu
2017-05-19 3:19 ` [Qemu-devel] [PATCH v4 04/10] intel_iommu: renaming context entry helpers Peter Xu
2017-05-19 3:19 ` [Qemu-devel] [PATCH v4 05/10] intel_iommu: provide vtd_ce_get_type() Peter Xu
2017-05-19 3:19 ` [Qemu-devel] [PATCH v4 06/10] intel_iommu: use IOMMU_ACCESS_FLAG() Peter Xu
2017-05-19 3:19 ` [Qemu-devel] [PATCH v4 07/10] intel_iommu: allow dev-iotlb context entry conditionally Peter Xu
2017-05-19 3:19 ` [Qemu-devel] [PATCH v4 08/10] intel_iommu: support passthrough (PT) Peter Xu
2017-05-25 10:40 ` Liu, Yi L
2017-05-19 3:19 ` [Qemu-devel] [PATCH v4 09/10] intel_iommu: turn off pt before 2.9 Peter Xu
2017-05-19 3:19 ` [Qemu-devel] [PATCH v4 10/10] vhost: iommu: cache static mapping if there is Peter Xu
2017-05-19 16:55 ` Michael S. Tsirkin
2017-05-22 2:30 ` Jason Wang
2017-05-22 2:42 ` Peter Xu
2017-05-25 18:14 ` Michael S. Tsirkin
2017-05-29 4:29 ` Peter Xu [this message]
2017-05-25 8:16 ` [Qemu-devel] [PATCH v4 00/10] VT-d: PT (passthrough) mode support and misc fixes Jason Wang
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=20170529042950.GE22816@pxdev.xzpeter.org \
--to=peterx@redhat.com \
--cc=david@gibson.dropbear.id.au \
--cc=jasowang@redhat.com \
--cc=marcel@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=tianyu.lan@intel.com \
--cc=yi.l.liu@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 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).