From: "Michael S. Tsirkin" <mst@redhat.com>
To: "Zhanghaoyu (A)" <haoyu.zhang@huawei.com>
Cc: "Huangweidong (C)" <weidong.huang@huawei.com>,
Marcelo Tosatti <mtosatti@redhat.com>,
Luonengjun <luonengjun@huawei.com>,
qemu-devel <qemu-devel@nongnu.org>,
Zanghongyong <zanghongyong@huawei.com>,
Qinchuanyu <qinchuanyu@huawei.com>
Subject: Re: [Qemu-devel] [PATCH] [KVM] Needless to update msi route when only msi-x entry "control" section changed
Date: Mon, 6 May 2013 00:13:07 +0300 [thread overview]
Message-ID: <20130505211307.GB7861@redhat.com> (raw)
In-Reply-To: <D3E216785288A145B7BC975F83A2ED103FE3FFD7@szxeml556-mbx.china.huawei.com>
On Sat, May 04, 2013 at 09:12:30AM +0000, Zhanghaoyu (A) wrote:
> With regard to old version linux guest(e.g., rhel-5.5), in ISR processing, mask and unmask msi-x vector every time, which result in VMEXIT, then QEMU will invoke kvm_irqchip_update_msi_route() to ask KVM hypervisor to update the VM irq routing table. In KVM hypervisor, synchronizing RCU needed after updating routing table, so much time consumed for waiting in wait_rcu_gp(). So CPU usage in VM is so high, while from the view of host, VM's total CPU usage is so low.
> Masking/unmasking msi-x vector only set msi-x entry "control" section, needless to update VM irq routing table.
>
> Signed-off-by: Zhang Haoyu <haoyu.zhang@huawei.com>
> Signed-off-by: Huang Weidong <weidong.huang@huawei.com>
> Signed-off-by: Qin Chuanyu <qinchuanyu@huawei.com>
> ---
> hw/i386/kvm/pci-assign.c | 3 +++
> 1 files changed, 3 insertions(+)
>
> --- a/hw/i386/kvm/pci-assign.c 2013-05-04 15:53:18.000000000 +0800
> +++ b/hw/i386/kvm/pci-assign.c 2013-05-04 15:50:46.000000000 +0800
> @@ -1576,6 +1576,8 @@ static void assigned_dev_msix_mmio_write
> MSIMessage msg;
> int ret;
>
> + /* Needless to update msi route when only msi-x entry "control" section changed */
> + if ((addr & (PCI_MSIX_ENTRY_SIZE - 1)) != PCI_MSIX_ENTRY_VECTOR_CTRL){
> msg.address = entry->addr_lo |
> ((uint64_t)entry->addr_hi << 32);
> msg.data = entry->data;
> @@ -1585,6 +1587,7 @@ static void assigned_dev_msix_mmio_write
> if (ret) {
> error_report("Error updating irq routing entry (%d)", ret);
> }
> + }
> }
> }
> }
>
> Thanks,
> Zhang Haoyu
If guest wants to update the vector, it does it like this:
mask
update
unmask
and it looks like the only point where we update the vector
is on unmask, so this patch will mean we don't update
the vector ever.
I'm not sure this combination (old guest + legacy device assignment
framework) is worth optimizing. Can you try VFIO instead?
But if it is, the right way to do this is probably along the
lines of the below patch. Want to try it out?
diff --git a/kvm-all.c b/kvm-all.c
index 2d92721..afe2327 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -1006,6 +1006,11 @@ static int kvm_update_routing_entry(KVMState *s,
continue;
}
+ if (entry->type == new_entry->type &&
+ entry->flags == new_entry->flags &&
+ entry->u == new_entry->u) {
+ return 0;
+ }
entry->type = new_entry->type;
entry->flags = new_entry->flags;
entry->u = new_entry->u;
--
MST
next prev parent reply other threads:[~2013-05-05 21:13 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-04 9:12 [Qemu-devel] [PATCH] [KVM] Needless to update msi route when only msi-x entry "control" section changed Zhanghaoyu (A)
2013-05-05 21:13 ` Michael S. Tsirkin [this message]
2013-05-06 2:52 ` Zhanghaoyu (A)
2013-05-06 10:00 ` Michael S. Tsirkin
2013-05-07 1:53 ` Zhanghaoyu (A)
2013-05-12 11:48 ` Michael S. Tsirkin
2013-05-12 10:58 ` Michael S. Tsirkin
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=20130505211307.GB7861@redhat.com \
--to=mst@redhat.com \
--cc=haoyu.zhang@huawei.com \
--cc=luonengjun@huawei.com \
--cc=mtosatti@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qinchuanyu@huawei.com \
--cc=weidong.huang@huawei.com \
--cc=zanghongyong@huawei.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).