OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

virtio-comment message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: RE: [virtio-comment] proposal: use admin command (and aq) of the device to query config space


> From: Jason Wang <jasowang@redhat.com>
> Sent: Wednesday, August 2, 2023 2:23 PM
> 
> On Tue, Aug 1, 2023 at 3:09âPM Parav Pandit <parav@nvidia.com> wrote:
> >
> > One line proposal:
> > Let's use new admin command and admin q for all device types to query
> device config space for new fields. (always).
> 
> Before we mandate anything to admin command, we need to first invent an
> admin command over MMIO interface otherwise it would always be an issue
> for the nesting.
> 
Nesting can be independent requirement in itself.
> >
> > Details below.
> >
> > Query of device capabilities and configuration using DMA interface.
> > Need:
> > Currently device configuration space is exposed as read only registers.
> 
> This is wrong:
> 
> 1) device configuration space is transport independent, some transport already
> use DMA to access the device configuration space
You can say ccw instead of "some". :)

> 2) device configuration space is not read only, we've already had several
> examples of using it as write
> 
It is even worse to have writable.

> > It is growing rapidly.
> > Some devices may be even multi-functionality device in coming future such as
> net + clock + rdma device.
> > For a PCI transport implementing such ever-growing capabilities,
> configuration is burdensome as plain registers.
> 
> We've already fixed size VIRTIO_PCI_CAP_PCI_CFG. What's wrong with that?
> 
The wrong part is: it is still and indirect and slow, sub-optimal register interface.

> And we have a lot of device specific virtqueues that could be used for
> configuration.
> 
Sure, this is the option_3 listed in here.

> > Hence, it is required for the driver to query capabilities and configuration
> using a DMA interface.
> >
> > Interface requirements:
> > 1. Maintain backward compatibility for existing defined configuration fields to
> stay as registers.
> > 2. Any new field added must be accessed via DMA interface, regardless of
> device implementation (hw/sw etc).
> > Results in single driver code regardless of device implementation.
> 
> Virtio is flexible as it decouples transport from the device model.
> This breaks this flexibility, and this prevents non-DMA transport from being
> developed.
> 
VQ is decoupled from transport already.
So, there is no flexibility broken.
And yet you suggested transport dependent VIRTIO_PCI_CAP_PCI_CFG above making it further wrong. :)

> > 3. A device must be able to choose, starting from which field driver
> > must query such configuration via DMA interface. This field offset must be
> greater than currently defined configuration field.
> > 4. Any driver to device query operation must not be mandated to be
> > mediated by the owner device for PCI VFs or SIOV or SF devices. Driver
> > must be able to communicate query capabilities and configuration
> > fields directly to the device regardless of device type being PCI PF, VF, SF/SIOV
> device uniformly.
> > 5. When having multi-functionality device in future, it is desired to
> > not always query all the configuration but may be able to query per-
> functionality configurations.
> > For example, query only steering capabilities, query only rdma capabilities or
> query only clock capabilities.
> > 6. The driver should be able to query config/capabilities without
> > polling for the DMA completion, in other words, the driver should be
> > able to get notification from the device when DMA command completes.
> > 7. The driver should be able to utilize existing interrupt vector
> > and/or virtqueue for query and set operation without demanding
> > additional interrupt vector whenever possible.
> >
> > There are multiple options for DMA interface.
> > Some of these options are listed below that we would like to consider fulfilling
> above requirements.
> >
> > Option_1:
> > New DMA interface registers.
> > New registers which allows single outstanding DMA command per device.
> > Such as,
> > struct pci_dma_cmd_mmio_registers {
> >         le64 cmd_addr; /* rw */
> >         le32 cmd_len;   /* rw: ordered write to it after cmd_addr, this triggers
> cmd to device */
> >         le32 start_offset_cfg_space; /* fields below this offset are
> > not available as register, dma is must */ };
> >
> > struct pci_config_access_cmd {
> >         u8 opcode; /* 0 = get config, 1 to N set dev specific config */
> >         u8 reserved;
> >         le16 msix_vector_index;
> >         le64 rsp_addr; /* points to struct pci_config_access_rsp */
> >         le32 rsp_len;
> > };
> > struct pci_config_access_rsp {
> >         u8 status;
> >         u8 debug_field;
> >         u8 cmd_specific_data[];
> > };
> >
> > Cons:
> > 1. Duplication of a VQ interface which can do same work and vq is purposed
> for "bulk data transfer" in spec already like this use case.
> > 2. Some devices already have CVQ that can easily fulfil this role, which is not
> utilized.
> > 3. Requires per device additional 16 bytes of register space.
> > 4. Requires an extra msix interrupt vector to differentiate from config change
> interrupts.
> >
> > Option_2:
> > Use admin vq for all the device types regardless of its transport such as PCI PF,
> PCI VF, PCI SIOV.
> > In this method a new admin command is issued on the admin vq of the device
> itself.
> > Pros:
> > 1. Requirements 1 to 7 are fulfilled.
> > 2. Driver can reuse the same vector with CVQ that addresses requirement #7.
> > Cons:
> > 1. Requires per device unique admin queue number and count.
> > Still better than dedicated dma interface of #1, as it requires only 4 additional
> bytes as opposed to 12 bytes.
> >
> > Option_3:
> > Use control VQ for the devices that already has CVQ.
> > In this method an existing CVQ of the device is used to query device config
> space.
> > Pros:
> > 1. All 7 requirements are fulfilled.
> > 2. Does not need 4 bytes of admin queue registers.
> > 3. Save MSI-X vectors of the AQ.
> > 4. Superior to option_2 as it doesn't require extra AQ.
> > 5. Most efficient of all 3 options.
> > Cons:
> > 1. Those devices which does not have CVQ, may need to add it if at all they
> are growing.
> >
> > d. Any other option?
> 
> Transport virtqueue on top of admin virtqueue will address this seamlessly.
> 
:)

Donât see why one would create few more objects on top of aq when aq or cvq itself can fulfil the need.
Can you please elaborate?


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]