All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Jason Wang <jasowang@redhat.com>
Cc: virtio-dev@lists.oasis-open.org,
	Zha Bin <zhabin@linux.alibaba.com>,
	slp@redhat.com, "Liu, Jing2" <jing2.liu@linux.intel.com>,
	linux-kernel@vger.kernel.org, qemu-devel@nongnu.org,
	chao.p.peng@linux.intel.com, gerry@linux.alibaba.com
Subject: Re: [virtio-dev] Re: [PATCH v2 4/5] virtio-mmio: add MSI interrupt feature support
Date: Tue, 11 Feb 2020 09:00:21 -0500	[thread overview]
Message-ID: <20200211090003-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <fdb19ef4-2003-6c6f-5c6f-c757a6320130@redhat.com>

On Tue, Feb 11, 2020 at 08:18:54PM +0800, Jason Wang wrote:
> 
> On 2020/2/11 下午8:08, Michael S. Tsirkin wrote:
> > On Tue, Feb 11, 2020 at 08:04:24PM +0800, Jason Wang wrote:
> > > On 2020/2/11 下午7:58, Michael S. Tsirkin wrote:
> > > > On Tue, Feb 11, 2020 at 03:40:23PM +0800, Jason Wang wrote:
> > > > > On 2020/2/11 下午2:02, Liu, Jing2 wrote:
> > > > > > On 2/11/2020 12:02 PM, Jason Wang wrote:
> > > > > > > On 2020/2/11 上午11:35, Liu, Jing2 wrote:
> > > > > > > > On 2/11/2020 11:17 AM, Jason Wang wrote:
> > > > > > > > > On 2020/2/10 下午5:05, Zha Bin wrote:
> > > > > > > > > > From: Liu Jiang<gerry@linux.alibaba.com>
> > > > > > > > > > 
> > > > > > > > > > Userspace VMMs (e.g. Qemu microvm, Firecracker) take
> > > > > > > > > > advantage of using
> > > > > > > > > > virtio over mmio devices as a lightweight machine model for modern
> > > > > > > > > > cloud. The standard virtio over MMIO transport layer
> > > > > > > > > > only supports one
> > > > > > > > > > legacy interrupt, which is much heavier than virtio over
> > > > > > > > > > PCI transport
> > > > > > > > > > layer using MSI. Legacy interrupt has long work path and
> > > > > > > > > > causes specific
> > > > > > > > > > VMExits in following cases, which would considerably slow down the
> > > > > > > > > > performance:
> > > > > > > > > > 
> > > > > > > > > > 1) read interrupt status register
> > > > > > > > > > 2) update interrupt status register
> > > > > > > > > > 3) write IOAPIC EOI register
> > > > > > > > > > 
> > > > > > > > > > We proposed to add MSI support for virtio over MMIO via new feature
> > > > > > > > > > bit VIRTIO_F_MMIO_MSI[1] which increases the interrupt performance.
> > > > > > > > > > 
> > > > > > > > > > With the VIRTIO_F_MMIO_MSI feature bit supported, the virtio-mmio MSI
> > > > > > > > > > uses msi_sharing[1] to indicate the event and vector mapping.
> > > > > > > > > > Bit 1 is 0: device uses non-sharing and fixed vector per
> > > > > > > > > > event mapping.
> > > > > > > > > > Bit 1 is 1: device uses sharing mode and dynamic mapping.
> > > > > > > > > I believe dynamic mapping should cover the case of fixed vector?
> > > > > > > > > 
> > > > > > > > Actually this bit*aims*  for msi sharing or msi non-sharing.
> > > > > > > > 
> > > > > > > > It means, when msi sharing bit is 1, device doesn't want vector
> > > > > > > > per queue
> > > > > > > > 
> > > > > > > > (it wants msi vector sharing as name) and doesn't want a high
> > > > > > > > interrupt rate.
> > > > > > > > 
> > > > > > > > So driver turns to !per_vq_vectors and has to do dynamical mapping.
> > > > > > > > 
> > > > > > > > So they are opposite not superset.
> > > > > > > > 
> > > > > > > > Thanks!
> > > > > > > > 
> > > > > > > > Jing
> > > > > > > I think you need add more comments on the command.
> > > > > > > 
> > > > > > > E.g if I want to map vector 0 to queue 1, how do I need to do?
> > > > > > > 
> > > > > > > write(1, queue_sel);
> > > > > > > write(0, vector_sel);
> > > > > > That's true. Besides, two commands are used for msi sharing mode,
> > > > > > 
> > > > > > VIRTIO_MMIO_MSI_CMD_MAP_CONFIG and VIRTIO_MMIO_MSI_CMD_MAP_QUEUE.
> > > > > > 
> > > > > > "To set up the event and vector mapping for MSI sharing mode, driver
> > > > > > SHOULD write a valid MsiVecSel followed by
> > > > > > VIRTIO_MMIO_MSI_CMD_MAP_CONFIG/VIRTIO_MMIO_MSI_CMD_MAP_QUEUE command to
> > > > > > map the configuration change/selected queue events respectively.  " (See
> > > > > > spec patch 5/5)
> > > > > > 
> > > > > > So if driver detects the msi sharing mode, when it does setup vq, writes
> > > > > > the queue_sel (this already exists in setup vq), vector sel and then
> > > > > > MAP_QUEUE command to do the queue event mapping.
> > > > > > 
> > > > > So actually the per vq msix could be done through this. I don't get why you
> > > > > need to introduce MSI_SHARING_MASK which is the charge of driver instead of
> > > > > device. The interrupt rate should have no direct relationship with whether
> > > > > it has been shared or not.
> > > > > 
> > > > > Btw, you introduce mask/unmask without pending, how to deal with the lost
> > > > > interrupt during the masking then?
> > > > pending can be an internal device register. as long as device
> > > > does not lose interrupts while masked, all's well.
> > > 
> > > You meant raise the interrupt during unmask automatically?
> > > 
> > 
> > yes - that's also what pci does.
> > 
> > the guest visible pending bit is partially implemented in qemu
> > as per pci spec but it's unused.
> 
> 
> Ok.
> 
> 
> > 
> > > > There's value is being able to say "this queue sends no
> > > > interrupts do not bother checking used notification area".
> > > > so we need way to say that. So I guess an enable interrupts
> > > > register might have some value...
> > > > But besides that, it's enough to have mask/unmask/address/data
> > > > per vq.
> > > 
> > > Just to check, do you mean "per vector" here?
> > > 
> > > Thanks
> > > 
> > No, per VQ. An indirection VQ -> vector -> address/data isn't
> > necessary for PCI either, but that ship has sailed.
> 
> 
> Yes, it can work but it may bring extra effort when you want to mask a
> vector which is was shared by a lot of queues.
> 
> Thanks
> 

masking should be per vq too.

-- 
MST


WARNING: multiple messages have this Message-ID (diff)
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Jason Wang <jasowang@redhat.com>
Cc: virtio-dev@lists.oasis-open.org,
	Zha Bin <zhabin@linux.alibaba.com>,
	slp@redhat.com, "Liu, Jing2" <jing2.liu@linux.intel.com>,
	linux-kernel@vger.kernel.org, qemu-devel@nongnu.org,
	chao.p.peng@linux.intel.com, gerry@linux.alibaba.com
Subject: Re: [virtio-dev] Re: [PATCH v2 4/5] virtio-mmio: add MSI interrupt feature support
Date: Tue, 11 Feb 2020 09:00:21 -0500	[thread overview]
Message-ID: <20200211090003-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <fdb19ef4-2003-6c6f-5c6f-c757a6320130@redhat.com>

On Tue, Feb 11, 2020 at 08:18:54PM +0800, Jason Wang wrote:
> 
> On 2020/2/11 下午8:08, Michael S. Tsirkin wrote:
> > On Tue, Feb 11, 2020 at 08:04:24PM +0800, Jason Wang wrote:
> > > On 2020/2/11 下午7:58, Michael S. Tsirkin wrote:
> > > > On Tue, Feb 11, 2020 at 03:40:23PM +0800, Jason Wang wrote:
> > > > > On 2020/2/11 下午2:02, Liu, Jing2 wrote:
> > > > > > On 2/11/2020 12:02 PM, Jason Wang wrote:
> > > > > > > On 2020/2/11 上午11:35, Liu, Jing2 wrote:
> > > > > > > > On 2/11/2020 11:17 AM, Jason Wang wrote:
> > > > > > > > > On 2020/2/10 下午5:05, Zha Bin wrote:
> > > > > > > > > > From: Liu Jiang<gerry@linux.alibaba.com>
> > > > > > > > > > 
> > > > > > > > > > Userspace VMMs (e.g. Qemu microvm, Firecracker) take
> > > > > > > > > > advantage of using
> > > > > > > > > > virtio over mmio devices as a lightweight machine model for modern
> > > > > > > > > > cloud. The standard virtio over MMIO transport layer
> > > > > > > > > > only supports one
> > > > > > > > > > legacy interrupt, which is much heavier than virtio over
> > > > > > > > > > PCI transport
> > > > > > > > > > layer using MSI. Legacy interrupt has long work path and
> > > > > > > > > > causes specific
> > > > > > > > > > VMExits in following cases, which would considerably slow down the
> > > > > > > > > > performance:
> > > > > > > > > > 
> > > > > > > > > > 1) read interrupt status register
> > > > > > > > > > 2) update interrupt status register
> > > > > > > > > > 3) write IOAPIC EOI register
> > > > > > > > > > 
> > > > > > > > > > We proposed to add MSI support for virtio over MMIO via new feature
> > > > > > > > > > bit VIRTIO_F_MMIO_MSI[1] which increases the interrupt performance.
> > > > > > > > > > 
> > > > > > > > > > With the VIRTIO_F_MMIO_MSI feature bit supported, the virtio-mmio MSI
> > > > > > > > > > uses msi_sharing[1] to indicate the event and vector mapping.
> > > > > > > > > > Bit 1 is 0: device uses non-sharing and fixed vector per
> > > > > > > > > > event mapping.
> > > > > > > > > > Bit 1 is 1: device uses sharing mode and dynamic mapping.
> > > > > > > > > I believe dynamic mapping should cover the case of fixed vector?
> > > > > > > > > 
> > > > > > > > Actually this bit*aims*  for msi sharing or msi non-sharing.
> > > > > > > > 
> > > > > > > > It means, when msi sharing bit is 1, device doesn't want vector
> > > > > > > > per queue
> > > > > > > > 
> > > > > > > > (it wants msi vector sharing as name) and doesn't want a high
> > > > > > > > interrupt rate.
> > > > > > > > 
> > > > > > > > So driver turns to !per_vq_vectors and has to do dynamical mapping.
> > > > > > > > 
> > > > > > > > So they are opposite not superset.
> > > > > > > > 
> > > > > > > > Thanks!
> > > > > > > > 
> > > > > > > > Jing
> > > > > > > I think you need add more comments on the command.
> > > > > > > 
> > > > > > > E.g if I want to map vector 0 to queue 1, how do I need to do?
> > > > > > > 
> > > > > > > write(1, queue_sel);
> > > > > > > write(0, vector_sel);
> > > > > > That's true. Besides, two commands are used for msi sharing mode,
> > > > > > 
> > > > > > VIRTIO_MMIO_MSI_CMD_MAP_CONFIG and VIRTIO_MMIO_MSI_CMD_MAP_QUEUE.
> > > > > > 
> > > > > > "To set up the event and vector mapping for MSI sharing mode, driver
> > > > > > SHOULD write a valid MsiVecSel followed by
> > > > > > VIRTIO_MMIO_MSI_CMD_MAP_CONFIG/VIRTIO_MMIO_MSI_CMD_MAP_QUEUE command to
> > > > > > map the configuration change/selected queue events respectively.  " (See
> > > > > > spec patch 5/5)
> > > > > > 
> > > > > > So if driver detects the msi sharing mode, when it does setup vq, writes
> > > > > > the queue_sel (this already exists in setup vq), vector sel and then
> > > > > > MAP_QUEUE command to do the queue event mapping.
> > > > > > 
> > > > > So actually the per vq msix could be done through this. I don't get why you
> > > > > need to introduce MSI_SHARING_MASK which is the charge of driver instead of
> > > > > device. The interrupt rate should have no direct relationship with whether
> > > > > it has been shared or not.
> > > > > 
> > > > > Btw, you introduce mask/unmask without pending, how to deal with the lost
> > > > > interrupt during the masking then?
> > > > pending can be an internal device register. as long as device
> > > > does not lose interrupts while masked, all's well.
> > > 
> > > You meant raise the interrupt during unmask automatically?
> > > 
> > 
> > yes - that's also what pci does.
> > 
> > the guest visible pending bit is partially implemented in qemu
> > as per pci spec but it's unused.
> 
> 
> Ok.
> 
> 
> > 
> > > > There's value is being able to say "this queue sends no
> > > > interrupts do not bother checking used notification area".
> > > > so we need way to say that. So I guess an enable interrupts
> > > > register might have some value...
> > > > But besides that, it's enough to have mask/unmask/address/data
> > > > per vq.
> > > 
> > > Just to check, do you mean "per vector" here?
> > > 
> > > Thanks
> > > 
> > No, per VQ. An indirection VQ -> vector -> address/data isn't
> > necessary for PCI either, but that ship has sailed.
> 
> 
> Yes, it can work but it may bring extra effort when you want to mask a
> vector which is was shared by a lot of queues.
> 
> Thanks
> 

masking should be per vq too.

-- 
MST


---------------------------------------------------------------------
To unsubscribe, e-mail: virtio-dev-unsubscribe@lists.oasis-open.org
For additional commands, e-mail: virtio-dev-help@lists.oasis-open.org


  reply	other threads:[~2020-02-11 14:00 UTC|newest]

Thread overview: 104+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-10  9:05 [PATCH v2 0/5] virtio mmio specification enhancement Zha Bin
2020-02-10  9:05 ` Zha Bin
2020-02-10  9:05 ` [PATCH v2 1/5] virtio-mmio: add notify feature for per-queue Zha Bin
2020-02-10  9:05   ` Zha Bin
2020-02-11 10:50   ` Michael S. Tsirkin
2020-02-11 10:50     ` [virtio-dev] " Michael S. Tsirkin
2020-02-11 10:50     ` Michael S. Tsirkin
2020-02-11 11:33   ` Michael S. Tsirkin
2020-02-11 11:33     ` [virtio-dev] " Michael S. Tsirkin
2020-02-11 11:33     ` Michael S. Tsirkin
2020-02-12  3:39     ` Jason Wang
2020-02-12  3:39       ` [virtio-dev] " Jason Wang
2020-02-12  8:18       ` Michael S. Tsirkin
2020-02-12  8:18         ` [virtio-dev] " Michael S. Tsirkin
2020-02-12  8:18         ` Michael S. Tsirkin
2020-02-12  8:53         ` Jason Wang
2020-02-12  8:53           ` [virtio-dev] " Jason Wang
2020-02-12  8:53           ` Jason Wang
2020-02-12  9:33           ` Jason Wang
2020-02-12  9:33             ` [virtio-dev] " Jason Wang
2020-02-12  9:33             ` Jason Wang
2020-02-12  9:55             ` Michael S. Tsirkin
2020-02-12  9:55               ` [virtio-dev] " Michael S. Tsirkin
2020-02-12  9:55               ` Michael S. Tsirkin
2020-02-13  3:38               ` Jason Wang
2020-02-13  3:38                 ` [virtio-dev] " Jason Wang
2020-02-10  9:05 ` [PATCH v2 2/5] virtio-mmio: refactor common functionality Zha Bin
2020-02-10  9:05   ` Zha Bin
2020-02-11 11:19   ` Michael S. Tsirkin
2020-02-11 11:19     ` [virtio-dev] " Michael S. Tsirkin
2020-02-11 11:19     ` Michael S. Tsirkin
2020-02-12  2:58     ` [virtio-dev] " Liu, Jing2
2020-02-12  2:58       ` Liu, Jing2
2020-02-12  2:58       ` Liu, Jing2
2020-02-12  7:29       ` Michael S. Tsirkin
2020-02-12  7:29         ` Michael S. Tsirkin
2020-02-12  7:29         ` Michael S. Tsirkin
2020-02-10  9:05 ` [PATCH v2 3/5] virtio-mmio: create a generic MSI irq domain Zha Bin
2020-02-10  9:05   ` Zha Bin
2020-02-11 11:16   ` Michael S. Tsirkin
2020-02-11 11:16     ` [virtio-dev] " Michael S. Tsirkin
2020-02-11 11:16     ` Michael S. Tsirkin
2020-02-12  7:40   ` Michael S. Tsirkin
2020-02-12  7:40     ` [virtio-dev] " Michael S. Tsirkin
2020-02-12  7:40     ` Michael S. Tsirkin
2020-02-10  9:05 ` [PATCH v2 4/5] virtio-mmio: add MSI interrupt feature support Zha Bin
2020-02-10  9:05   ` Zha Bin
2020-02-11  3:17   ` Jason Wang
2020-02-11  3:17     ` [virtio-dev] " Jason Wang
2020-02-11  3:35     ` Liu, Jing2
2020-02-11  3:35       ` Liu, Jing2
2020-02-11  4:02       ` Jason Wang
2020-02-11  4:02         ` Jason Wang
2020-02-11  6:02         ` Liu, Jing2
2020-02-11  6:02           ` Liu, Jing2
2020-02-11  7:40           ` Jason Wang
2020-02-11  7:40             ` Jason Wang
2020-02-11 11:58             ` Michael S. Tsirkin
2020-02-11 11:58               ` Michael S. Tsirkin
2020-02-11 11:58               ` Michael S. Tsirkin
2020-02-11 12:04               ` Jason Wang
2020-02-11 12:04                 ` Jason Wang
2020-02-11 12:08                 ` Michael S. Tsirkin
2020-02-11 12:08                   ` Michael S. Tsirkin
2020-02-11 12:18                   ` Jason Wang
2020-02-11 12:18                     ` Jason Wang
2020-02-11 14:00                     ` Michael S. Tsirkin [this message]
2020-02-11 14:00                       ` Michael S. Tsirkin
2020-02-12  9:03                       ` Jason Wang
2020-02-12  9:03                         ` Jason Wang
2020-02-12  9:15                         ` Michael S. Tsirkin
2020-02-12  9:15                           ` Michael S. Tsirkin
2020-02-12  3:54             ` Liu, Jing2
2020-02-12  3:54               ` Liu, Jing2
2020-02-12  7:33               ` Michael S. Tsirkin
2020-02-12  7:33                 ` Michael S. Tsirkin
2020-02-12  7:33                 ` Michael S. Tsirkin
2020-02-12  9:06               ` Jason Wang
2020-02-12  9:06                 ` Jason Wang
2020-02-12  9:16                 ` Michael S. Tsirkin
2020-02-12  9:16                   ` Michael S. Tsirkin
2020-02-12  9:16                   ` Michael S. Tsirkin
2020-02-13  3:40                   ` Jason Wang
2020-02-13  3:40                     ` Jason Wang
2020-02-13  3:40                     ` Jason Wang
2020-02-11 11:21       ` Michael S. Tsirkin
2020-02-11 11:21         ` Michael S. Tsirkin
2020-02-11 11:21         ` Michael S. Tsirkin
2020-02-11 11:11   ` Michael S. Tsirkin
2020-02-11 11:11     ` [virtio-dev] " Michael S. Tsirkin
2020-02-11 11:11     ` Michael S. Tsirkin
2020-02-10  9:05 ` [PATCH v2 5/5] x86: virtio-mmio: support virtio-mmio with MSI for x86 Zha Bin
2020-02-10  9:05   ` Zha Bin
2020-02-11 11:14   ` Michael S. Tsirkin
2020-02-11 11:14     ` [virtio-dev] " Michael S. Tsirkin
2020-02-11 11:14     ` Michael S. Tsirkin
2020-02-10 11:44 ` [PATCH v2 0/5] virtio mmio specification enhancement Michael S. Tsirkin
2020-02-10 11:44   ` [virtio-dev] " Michael S. Tsirkin
2020-02-10 11:44   ` Michael S. Tsirkin
2020-02-11 16:05   ` Chao Peng
2020-02-11 16:05     ` Chao Peng
2020-02-11 10:57     ` Michael S. Tsirkin
2020-02-11 10:57       ` [virtio-dev] " Michael S. Tsirkin
2020-02-11 10:57       ` 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=20200211090003-mutt-send-email-mst@kernel.org \
    --to=mst@redhat.com \
    --cc=chao.p.peng@linux.intel.com \
    --cc=gerry@linux.alibaba.com \
    --cc=jasowang@redhat.com \
    --cc=jing2.liu@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=qemu-devel@nongnu.org \
    --cc=slp@redhat.com \
    --cc=virtio-dev@lists.oasis-open.org \
    --cc=zhabin@linux.alibaba.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.