On Tue, Jan 25, 2022 at 6:59 PM Max Gurtovoy <mgurto...@nvidia.com> wrote:
>
>
> On 1/25/2022 5:52 AM, Parav Pandit wrote:
> > Hi Jason,
> >
> >> From: Jason Wang <jasow...@redhat.com>
> >> Sent: Tuesday, January 25, 2022 8:59 AM
> >>
> >> 在 2022/1/19 下午12:48, Parav Pandit 写道:
> >>>> From: Jason Wang <jasow...@redhat.com>
> >>>> Sent: Wednesday, January 19, 2022 9:33 AM
> >>>>
> >>>>
> >>>> It it means IMS, there's already a proposal[1] that introduce MSI
> >>>> commands via the admin virtqueue. And we had similar requirement for
> >>>> virtio-MMIO[2] and managed device or SF [3], so I would rather to
> >>>> introduce IMS (need a better name though) as a basic facility instead
> >>>> of tie it to any specific transport.
> >>>>
> >>> IMS of [1] is a interrupt configuration by the virtio driver for the 
> >>> device is it
> >> driving, which needs a queue.
> >>> So regardless of the device type as PCI PF/VF/SF/ADI, there is desire to 
> >>> have a
> >> generic admin queue not attached to device type.
> >>> And AQ in this proposal exactly serves this purpose.
> >>>
> >>> Device configuring its own IMS vector vs PCI PF configuring VF's MSI-X max
> >> vector count are two different functionality.
> >>> Both of these commands can ride on a generic queue.
> >>> However the queue is not same, because PF owns its own admin queue
> >>> (for vf msix config), VF or SF operates its own admin queue (for IMS
> >>> config).
> >>
> >> So I think in the next version we need to clarify:
> >>
> >> 1) is there a single admin virtqueue shared by all the VFs and PF
> >>
> >> or
> >>
> >> 2) per VF/PF admin virtqueue, and how does the driver know how to find the
> >> corresponding admin virtqueue
> >>
> > Admin queue is not per VF.
> > Lets take concrete examples.
> > 1. So for example, PCI PF can have one AQ.
> > This AQ carries command to query/config MSI-X vector of VFs.
> >
> > 2. In second example, PCI PF is creating/destroying SFs. This is again done 
> > by using the AQ of the PCI PF.
> >
> > 3. A PCI VF has its own AQ to configure some of its own generic attribute, 
> > don't know which is that today.
> > May be something that is extremely hard to do over features bit.
> > Currently proposed v2 doesn't restrict admin queue to be within PCI PF or 
> > VF or that matter not limited to other transports.
> >
> >>> So a good example is,
> >>> 1. PCI PF configures 8 MSI-X or 16 IMS vectors for the VF using PF_AQ in 
> >>> HV.
> >>> 2. PCI VF when using IMS configures, IMS data, vector, mask etc using 
> >>> VF_AQ
> >> in GVM.
> >>> Both the functions will have AQ feature bit set.
> >>
> >> Where did the VF_AQ sit? I guess it belongs to the VF. But if this is
> >> true, don't we need some kind of address isolation like PASID?
> >>
> > Above one for IMS is not a good example. I replied the reasoning last week 
> > for it.
> >
> >>> Fair enough, so we have more users of admin queue than just MSI-X config.
> >>
> >> Well, what I really meant is that we actually have more users of IMS.
> >> That's is exactly what virito-mmio wants. In this case introducing admin
> >> queue looks too heavyweight for that.
> >>
> > IMS config cannot be done over AQ as described in previous email in this 
> > thread.
> >
> >>>>> 2. AQ to follows IN_ORDER and INDIRECT_DESC negotiation like rest of
> >>>>> the queues 3. Update commit log to describe why config space is not
> >>>>> chosen (scale, on-die registers, uniform way to handle all aq cmds)
> >>>> I fail to understand the scale/registeres issues. With the one of my 
> >>>> previous
> >>>> proposal (device selector), technically we don't even need any config 
> >>>> space
> >> or
> >>>> BAR for VF or SF by multiplexing the registers for PF.
> >>>>
> >>> Scale issue is: when you want to create, query, manipulate hundreds of
> >> objects, having shared MMIO register or configuration register, will be too
> >> slow.
> >>
> >>
> >> Ok, this need to be clarified in the commit log. And we need make sure
> >> it's not an issue that is only happen for some specific vendor.
> > It is present in the v2 commit log cover letter.
> > Please let me know if you think it should be in the actual patch commit log.
> >
> >
> >>> And additionally such register set doesn't scale to allow sharing large
> >> number of bytes as DMA cannot be done.
> >>
> >>
> >> That's true.
> >>
> >>
> >>>   From physical device perspective, it doesn’t scale because device needs 
> >>> to
> >> have those resources ready to answer on MMIO reads and for hundreds to
> >> thousand of devices it just cannot do it.
> >>> This is one of the reason for birth of IMS.
> >>
> >> IMS allows the table to be stored in the memory and cached by the device
> >> to have the best scalability. But I had other questions:
> >>
> >> 1) if we have a single admin virtqueue, there will still be contention
> >> in the driver side
> >>
> > AQ inherently allows out of order commands execution.
> > It shouldn't face contention. For example 1K depth AQ should be serving 
> > hundreds of descriptors commands in parallel for SF creation, VF MSI-X 
> > config and more.
> >
> > Which area/commands etc you think can lead to the contention?
> >
> >> 2) if we have per vf admin virtqueue, it still doesn't scale since it
> >> occupies more hardware resources
> >>
> > That is too heavy, and doesn’t scale. Proposal is to not have per vf admin 
> > queue.
> > Proposal is to have one admin queue in a virtio device.
>
> Right ? where did we mention something that can imply otherwise ?

Well, I don't know but probably this part,

" PCI VF when using IMS configures, IMS data, vector, mask etc using VF_AQ ..."

>
>
> >
> >>>> I do see one advantage is that the admin virtqueue is transport
> >> independent
> >>>> (or it could be used as a transport).
> >>>>
> >>> I am yet to read the transport part from [1].
> >>
> >> Yes, the main goal is to be compatible with SIOV.
> >>
> > Admin queue is a command interface transport where higher layer services 
> > can be buit.
> > This includes SR-IOV config, SIOV config.
> > And v2 enables SIOV commands implementation whenever they are ready.
> >
> >>>>> 4. Improve documentation around msix config to link to sriov section of
> >> virtio
> >>>> spec
> >>>>> 5. Describe error that if VF is bound to the device, admin commands
> >>>> targeting VF can fail, describe this error code
> >>>>> Did I miss anything?
> >>>>>
> >>>>> Yet to receive your feedback on group, if/why is it needed and, why/if 
> >>>>> it
> >> must
> >>>> be in this proposal, what pieces prevents it do as follow-on.
> >>>>> Cornelia, Jason,
> >>>>> Can you please review current proposal as well before we revise v2?
> >>>> If I understand correctly, most of the features (except for the admin
> >>>> virtqueue in_order stuffs) are not specific to the admin virtqueue. As
> >>>> discussed in the previous versions, I still think it's better:
> >>>>
> >>>> 1) adding sections in the basic device facility or data structure for
> >>>> provisioning and MSI
> >>>> 2) introduce admin virtqueue on top as an device interface for those
> >>>> features
> >>>>
> >>> I didn't follow your suggestion. Can you please explain?
> >>> Specifically "data structure for provisioning and MSI"..
> >>
> >> I meant:
> >>
> >> There's a chapter "Basic Facilities of a Virtio Device", we can
> >> introduce the concepts there like:
> >>
> >> 1) Managed device and Management device (terminology proposed by
> >> Michael), and can use PF and VF as a example
> >>
> >> 2) Managed device provisioning (the data structure to specify the
> >> attributes of a managed device (VF))
> >>
> >> 3) MSI
> >>
> > Above is good idea. Will revisit v2, if it is not arranged this way.
>
> Let me make sure I understand, you would like to see a new chapter under
> "Basic Facilities of a Virtio Device" that is
>
> called "Device management" and this chapter will explain in few words
> the concept

Yes.

> and it will point to another chapter under "Basic Facilities
> of a Virtio Device"
>
> that was introduced here "Admin Virtqueues" ?

So far as I see from the proposal, it needs belong to PCI transport
part or a new transport.

>
> So you do agree that managing a managed (create/destroy/setup/etc...)
> will be done using the AQ of the managing device ?

I agree.

Thanks

>
> >
> >> And then we can introduced admin virtqueue in either
> >>
> >> 1) transport part
> >>
> >> or
> >>
> >> 2) PCI transport
> >>
> > It is not specific to PCI transport, and currently it is not a transport 
> > either.
> > So admin queue will keep as general entity for admin work.
> >
> >> In the admin virtqueue, there will be commands to provision and
> >> configure MSI.
> >>
> > Please review v2 if it is not arranged this way.
> >
> >>>> The leaves the chance for future extensions to allow those features to
> >>>> be used by transport specific interface which will benefit for
> >>>>
> >>> AQ allows communication (command, response) between driver and device
> >> in transport independent way.
> >>> Sometimes it query/set transport specific fields like MSI-X vectors of VF.
> >>> Sometimes device configure its on IMS interrupt.
> >>> Something else in future.
> >>> So it is really a generic request-response queue.
> >>
> >> I agree, but I think we can't mandate new features to a specific transport.
> >>
> > Certainly. Admin queue is transport independent.
> > PCI MSI-X configuration is PCI transport specific command, so structures 
> > are defined it accordingly.
> > It is similar to struct virtio_pci_cap, struct virtio_pci_common_cfg etc.
> >
> > Any other transport will have transport specific interrupt configuration. 
> > So it will be defined accordingly whenever that occurs.
> > For example, IMS for VF or IMS for SF.
>


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

Reply via email to