From: "Michael S. Tsirkin" <mst@redhat.com>
To: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Cc: Vadim Pasternak <vadimp@nvidia.com>,
linux-remoteproc@vger.kernel.org,
Alexei Starovoitov <ast@kernel.org>,
virtualization@lists.linux-foundation.org,
Eric Dumazet <edumazet@google.com>,
Alexander Gordeev <agordeev@linux.ibm.com>,
Anton Ivanov <anton.ivanov@cambridgegreys.com>,
linux-s390@vger.kernel.org, kvm@vger.kernel.org,
Daniel Borkmann <daniel@iogearbox.net>,
Richard Weinberger <richard@nod.at>,
Vincent Whitchurch <vincent.whitchurch@axis.com>,
John Fastabend <john.fastabend@gmail.com>,
Halil Pasic <pasic@linux.ibm.com>,
Jakub Kicinski <kuba@kernel.org>,
platform-driver-x86@vger.kernel.org,
Eric Farman <farman@linux.ibm.com>,
Jesper Dangaard Brouer <hawk@kernel.org>,
Vasily Gorbik <gor@linux.ibm.com>,
kangjie.xu@linux.alibaba.com, Heiko Carstens <hca@linux.ibm.com>,
linux-um@lists.infradead.org, Mark Gross <markgross@kernel.org>,
Hans de Goede <hdegoede@redhat.com>,
Bjorn Andersson <bjorn.andersson@linaro.org>,
bpf@vger.kernel.org, Paolo Abeni <pabeni@redhat.com>,
Mathieu Poirier <mathieu.poirier@linaro.org>,
netdev@vger.kernel.org, Cornelia Huck <cohuck@redhat.com>,
Sven Schnelle <svens@linux.ibm.com>,
Johannes Berg <johannes@sipsolutions.net>,
"David S. Miller" <davem@davemloft.net>
Subject: Re: [PATCH v14 37/42] virtio_net: set the default max ring size by find_vqs()
Date: Mon, 15 Aug 2022 02:00:16 -0400 [thread overview]
Message-ID: <20220815015405-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20220801063902.129329-38-xuanzhuo@linux.alibaba.com>
On Mon, Aug 01, 2022 at 02:38:57PM +0800, Xuan Zhuo wrote:
> Use virtio_find_vqs_ctx_size() to specify the maximum ring size of tx,
> rx at the same time.
>
> | rx/tx ring size
> -------------------------------------------
> speed == UNKNOWN or < 10G| 1024
> speed < 40G | 4096
> speed >= 40G | 8192
>
> Call virtnet_update_settings() once before calling init_vqs() to update
> speed.
>
> Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
> Acked-by: Jason Wang <jasowang@redhat.com>
I've been looking at this patchset because of the resent
reported crashes, and I'm having second thoughts about this.
Do we really want to second-guess the device supplied
max ring size? If yes why?
Could you please share some performance data that motivated this
specific set of numbers?
Also why do we intepret UNKNOWN as "very low"?
I'm thinking that should definitely be "don't change anything".
Finally if all this makes sense then shouldn't we react when
speed changes?
Could you try reverting this and showing performance results
before and after please? Thanks!
> ---
> drivers/net/virtio_net.c | 42 ++++++++++++++++++++++++++++++++++++----
> 1 file changed, 38 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
> index 8a5810bcb839..40532ecbe7fc 100644
> --- a/drivers/net/virtio_net.c
> +++ b/drivers/net/virtio_net.c
> @@ -3208,6 +3208,29 @@ static unsigned int mergeable_min_buf_len(struct virtnet_info *vi, struct virtqu
> (unsigned int)GOOD_PACKET_LEN);
> }
>
> +static void virtnet_config_sizes(struct virtnet_info *vi, u32 *sizes)
> +{
> + u32 i, rx_size, tx_size;
> +
> + if (vi->speed == SPEED_UNKNOWN || vi->speed < SPEED_10000) {
> + rx_size = 1024;
> + tx_size = 1024;
> +
> + } else if (vi->speed < SPEED_40000) {
> + rx_size = 1024 * 4;
> + tx_size = 1024 * 4;
> +
> + } else {
> + rx_size = 1024 * 8;
> + tx_size = 1024 * 8;
> + }
> +
> + for (i = 0; i < vi->max_queue_pairs; i++) {
> + sizes[rxq2vq(i)] = rx_size;
> + sizes[txq2vq(i)] = tx_size;
> + }
> +}
> +
> static int virtnet_find_vqs(struct virtnet_info *vi)
> {
> vq_callback_t **callbacks;
> @@ -3215,6 +3238,7 @@ static int virtnet_find_vqs(struct virtnet_info *vi)
> int ret = -ENOMEM;
> int i, total_vqs;
> const char **names;
> + u32 *sizes;
> bool *ctx;
>
> /* We expect 1 RX virtqueue followed by 1 TX virtqueue, followed by
> @@ -3242,10 +3266,15 @@ static int virtnet_find_vqs(struct virtnet_info *vi)
> ctx = NULL;
> }
>
> + sizes = kmalloc_array(total_vqs, sizeof(*sizes), GFP_KERNEL);
> + if (!sizes)
> + goto err_sizes;
> +
> /* Parameters for control virtqueue, if any */
> if (vi->has_cvq) {
> callbacks[total_vqs - 1] = NULL;
> names[total_vqs - 1] = "control";
> + sizes[total_vqs - 1] = 64;
> }
>
> /* Allocate/initialize parameters for send/receive virtqueues */
> @@ -3260,8 +3289,10 @@ static int virtnet_find_vqs(struct virtnet_info *vi)
> ctx[rxq2vq(i)] = true;
> }
>
> - ret = virtio_find_vqs_ctx(vi->vdev, total_vqs, vqs, callbacks,
> - names, ctx, NULL);
> + virtnet_config_sizes(vi, sizes);
> +
> + ret = virtio_find_vqs_ctx_size(vi->vdev, total_vqs, vqs, callbacks,
> + names, sizes, ctx, NULL);
> if (ret)
> goto err_find;
>
> @@ -3281,6 +3312,8 @@ static int virtnet_find_vqs(struct virtnet_info *vi)
>
>
> err_find:
> + kfree(sizes);
> +err_sizes:
> kfree(ctx);
> err_ctx:
> kfree(names);
> @@ -3630,6 +3663,9 @@ static int virtnet_probe(struct virtio_device *vdev)
> vi->curr_queue_pairs = num_online_cpus();
> vi->max_queue_pairs = max_queue_pairs;
>
> + virtnet_init_settings(dev);
> + virtnet_update_settings(vi);
> +
> /* Allocate/initialize the rx/tx queues, and invoke find_vqs */
> err = init_vqs(vi);
> if (err)
> @@ -3642,8 +3678,6 @@ static int virtnet_probe(struct virtio_device *vdev)
> netif_set_real_num_tx_queues(dev, vi->curr_queue_pairs);
> netif_set_real_num_rx_queues(dev, vi->curr_queue_pairs);
>
> - virtnet_init_settings(dev);
> -
> if (virtio_has_feature(vdev, VIRTIO_NET_F_STANDBY)) {
> vi->failover = net_failover_create(vi->dev);
> if (IS_ERR(vi->failover)) {
> --
> 2.31.0
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
next prev parent reply other threads:[~2022-08-15 6:00 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-01 6:38 [PATCH v14 00/42] virtio pci support VIRTIO_F_RING_RESET Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 01/42] virtio: record the maximum queue num supported by the device Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 02/42] virtio: struct virtio_config_ops add callbacks for queue_reset Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 03/42] virtio_ring: update the document of the virtqueue_detach_unused_buf for queue reset Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 04/42] virtio_ring: extract the logic of freeing vring Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 05/42] virtio_ring: split vring_virtqueue Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 06/42] virtio_ring: introduce virtqueue_init() Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 07/42] virtio_ring: split: stop __vring_new_virtqueue as export symbol Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 08/42] virtio_ring: split: __vring_new_virtqueue() accept struct vring_virtqueue_split Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 09/42] virtio_ring: split: introduce vring_free_split() Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 10/42] virtio_ring: split: extract the logic of alloc queue Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 11/42] virtio_ring: split: extract the logic of alloc state and extra Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 12/42] virtio_ring: split: extract the logic of vring init Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 13/42] virtio_ring: split: extract the logic of attach vring Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 14/42] virtio_ring: split: introduce virtqueue_reinit_split() Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 15/42] virtio_ring: split: reserve vring_align, may_reduce_num Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 16/42] virtio_ring: split: introduce virtqueue_resize_split() Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 17/42] virtio_ring: packed: introduce vring_free_packed Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 18/42] virtio_ring: packed: extract the logic of alloc queue Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 19/42] virtio_ring: packed: extract the logic of alloc state and extra Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 20/42] virtio_ring: packed: extract the logic of vring init Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 21/42] virtio_ring: packed: extract the logic of attach vring Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 22/42] virtio_ring: packed: introduce virtqueue_reinit_packed() Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 23/42] virtio_ring: packed: introduce virtqueue_resize_packed() Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 24/42] virtio_ring: introduce virtqueue_resize() Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 25/42] virtio_pci: struct virtio_pci_common_cfg add queue_notify_data Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 26/42] virtio: allow to unbreak/break virtqueue individually Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 27/42] virtio: queue_reset: add VIRTIO_F_RING_RESET Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 28/42] virtio_ring: struct virtqueue introduce reset Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 29/42] virtio_pci: struct virtio_pci_common_cfg add queue_reset Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 30/42] virtio_pci: introduce helper to get/set queue reset Xuan Zhuo
2022-08-15 6:07 ` Michael S. Tsirkin
2023-09-21 14:02 ` Michael S. Tsirkin
2023-09-22 1:49 ` Xuan Zhuo
2023-09-22 10:46 ` Michael S. Tsirkin
2023-09-25 2:02 ` Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 31/42] virtio_pci: extract the logic of active vq for modern pci Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 32/42] virtio_pci: support VIRTIO_F_RING_RESET Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 33/42] virtio: find_vqs() add arg sizes Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 34/42] virtio_pci: support the arg sizes of find_vqs() Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 35/42] virtio_mmio: " Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 36/42] virtio: add helper virtio_find_vqs_ctx_size() Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 37/42] virtio_net: set the default max ring size by find_vqs() Xuan Zhuo
2022-08-15 6:00 ` Michael S. Tsirkin [this message]
2022-08-15 6:35 ` Xuan Zhuo
2022-08-15 7:14 ` Michael S. Tsirkin
2022-08-15 7:28 ` Xuan Zhuo
2022-08-15 7:39 ` Michael S. Tsirkin
2022-08-01 6:38 ` [PATCH v14 38/42] virtio_net: get ringparam by virtqueue_get_vring_max_size() Xuan Zhuo
2022-08-01 6:38 ` [PATCH v14 39/42] virtio_net: split free_unused_bufs() Xuan Zhuo
2022-08-01 6:39 ` [PATCH v14 40/42] virtio_net: support rx queue resize Xuan Zhuo
2022-08-01 6:39 ` [PATCH v14 41/42] virtio_net: support tx " Xuan Zhuo
2022-08-01 6:39 ` [PATCH v14 42/42] virtio_net: support set_ringparam Xuan Zhuo
2022-08-30 9:13 ` [PATCH v14 00/42] virtio pci support VIRTIO_F_RING_RESET Ricardo Cañuelo
2022-08-30 9:33 ` Xuan Zhuo
2022-08-30 13:40 ` Ricardo Cañuelo
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=20220815015405-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=agordeev@linux.ibm.com \
--cc=anton.ivanov@cambridgegreys.com \
--cc=ast@kernel.org \
--cc=bjorn.andersson@linaro.org \
--cc=bpf@vger.kernel.org \
--cc=cohuck@redhat.com \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=farman@linux.ibm.com \
--cc=gor@linux.ibm.com \
--cc=hawk@kernel.org \
--cc=hca@linux.ibm.com \
--cc=hdegoede@redhat.com \
--cc=johannes@sipsolutions.net \
--cc=john.fastabend@gmail.com \
--cc=kangjie.xu@linux.alibaba.com \
--cc=kuba@kernel.org \
--cc=kvm@vger.kernel.org \
--cc=linux-remoteproc@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=linux-um@lists.infradead.org \
--cc=markgross@kernel.org \
--cc=mathieu.poirier@linaro.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=pasic@linux.ibm.com \
--cc=platform-driver-x86@vger.kernel.org \
--cc=richard@nod.at \
--cc=svens@linux.ibm.com \
--cc=vadimp@nvidia.com \
--cc=vincent.whitchurch@axis.com \
--cc=virtualization@lists.linux-foundation.org \
--cc=xuanzhuo@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 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).