Re: [PATCH v4 00/14] virtio pci support VIRTIO_F_RING_RESET
From: Jason Wang <hidden>
Date: 2022-02-11 07:09:58
Also in:
lkml
On Fri, Feb 11, 2022 at 2:34 PM Xuan Zhuo [off-list ref] wrote:
On Fri, 11 Feb 2022 13:40:52 +0800, Jason Wang [off-list ref] wrote:quoted
On Wed, Feb 9, 2022 at 8:29 PM Xuan Zhuo [off-list ref] wrote:quoted
The virtio spec already supports the virtio queue reset function. This patch set is to add this function to the kernel. The relevant virtio spec information is here: https://github.com/oasis-tcs/virtio-spec/issues/124 Also regarding MMIO support for queue reset, I plan to support it after this patch is passed.So I had an idea, we can implement ethtool_set_ringparam() in this series to get one real users.I agree, in fact my local test is using this feature.
Right.
quoted
But this came into another question: it looks to me current virito-net just uses the maximum ring size, so it basically means we just can decrease the number from startup, so I wonder how much value if we don't limit the startup queue size to a dedicated value.I also have this consideration, so I want to add a virtio-net module parameter to specify an initial value.
But module parameters are not user friendly. Let it be changed via ethtool should be sufficient.
This initial value also has another meaning. In order to achieve high performance, the backend can provide a large ring size capability, but we also hope that the ring size can only be increased through ethtool -G when the user needs it. To implement this function, we need to add a new parameter to find_vqs(). If there is no problem, I will bring this function in the next version.
I think so, and we need to choose a sane default value. I guess something up to 1024 should be sufficient. Thanks
Thannks.quoted
Thanksquoted
Please review. Thanks. v4: 1. just the code of virtio, without virtio-net 2. Performing reset on a queue is divided into these steps: 1. reset_vq: reset one vq 2. recycle the buffer from vq by virtqueue_detach_unused_buf() 3. release the ring of the vq by vring_release_virtqueue() 4. enable_reset_vq: re-enable the reset queue 3. Simplify the parameters of enable_reset_vq() 4. add container structures for virtio_pci_common_cfg v3: 1. keep vq, irq unreleased Xuan Zhuo (14): virtio_pci: struct virtio_pci_common_cfg add queue_notify_data virtio: queue_reset: add VIRTIO_F_RING_RESET virtio_ring: queue_reset: add function vring_setup_virtqueue() virtio_ring: queue_reset: split: add __vring_init_virtqueue() virtio_ring: queue_reset: split: support enable reset queue virtio_ring: queue_reset: packed: support enable reset queue virtio_ring: queue_reset: extract the release function of the vq ring virtio_ring: queue_reset: add vring_release_virtqueue() virtio: queue_reset: struct virtio_config_ops add callbacks for queue_reset virtio_pci: queue_reset: update struct virtio_pci_common_cfg and option functions virtio_pci: queue_reset: release vq by vp_dev->vqs virtio_pci: queue_reset: setup_vq() support vring_setup_virtqueue() virtio_pci: queue_reset: vp_setup_vq() support ring_num virtio_pci: queue_reset: support VIRTIO_F_RING_RESET drivers/virtio/virtio_pci_common.c | 65 +++++++--- drivers/virtio/virtio_pci_common.h | 11 +- drivers/virtio/virtio_pci_legacy.c | 5 +- drivers/virtio/virtio_pci_modern.c | 99 ++++++++++++-- drivers/virtio/virtio_pci_modern_dev.c | 36 +++++ drivers/virtio/virtio_ring.c | 173 ++++++++++++++++++------- include/linux/virtio.h | 6 + include/linux/virtio_config.h | 13 ++ include/linux/virtio_pci_modern.h | 2 + include/linux/virtio_ring.h | 37 ++++-- include/uapi/linux/virtio_config.h | 7 +- include/uapi/linux/virtio_pci.h | 14 ++ 12 files changed, 375 insertions(+), 93 deletions(-) -- 2.31.0
_______________________________________________ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization