在 2022/2/21 上午11:40, Jason Wang 写道:
在 2022/2/17 下午5:30, Xuan Zhuo 写道:
On Thu, 17 Feb 2022 15:21:26 +0800, Jason Wang <jasowang@xxxxxxxxxx>
wrote:
On Wed, Feb 16, 2022 at 3:52 PM Xuan Zhuo
<xuanzhuo@xxxxxxxxxxxxxxxxx> wrote:
On Wed, 16 Feb 2022 12:14:31 +0800, Jason Wang
<jasowang@xxxxxxxxxx> wrote:
On Mon, Feb 14, 2022 at 4:14 PM Xuan Zhuo
<xuanzhuo@xxxxxxxxxxxxxxxxx> wrote:
Sets the default maximum ring num based on
virtio_set_max_ring_num().
The default maximum ring num is 1024.
Having a default value is pretty useful, I see 32K is used by
default for IFCVF.
Rethink this, how about having a different default value based on
the speed?
Without SPEED_DUPLEX, we use 1024. Otherwise
10g 4096
40g 8192
We can define different default values of tx and rx by the way.
This way I can
just use it in the new interface of find_vqs().
without SPEED_DUPLEX: tx 512 rx 1024
Any reason that TX is smaller than RX?
I've seen some NIC drivers with default tx smaller than rx.
Interesting, do they use combined channels?
Adding Ling Shan.
I see 32K is used for IFCVF by default, this is another call for the
this patch:
# ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX: 32768
RX Mini: 0
RX Jumbo: 0
TX: 32768
Current hardware settings:
RX: 32768
RX Mini: 0
RX Jumbo: 0
TX: 32768
Thanks
One problem I have now is that inside virtnet_probe, init_vqs is
before getting
speed/duplex. I'm not sure, can the logic to get speed/duplex be put
before
init_vqs? Is there any risk?
Can you help me?
The feature has been negotiated during probe(), so I don't see any risk.
Thanks
Thanks.
Thanks
Thanks.
etc.
(The number are just copied from the 10g/40g default parameter from
other vendors)
Thanks
Signed-off-by: Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx>
---
drivers/net/virtio_net.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index a4ffd7cdf623..77e61fe0b2ce 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -35,6 +35,8 @@ module_param(napi_tx, bool, 0644);
#define GOOD_PACKET_LEN (ETH_HLEN + VLAN_HLEN + ETH_DATA_LEN)
#define GOOD_COPY_LEN 128
+#define VIRTNET_DEFAULT_MAX_RING_NUM 1024
+
#define VIRTNET_RX_PAD (NET_IP_ALIGN + NET_SKB_PAD)
/* Amount of XDP headroom to prepend to packets for use by
xdp_adjust_head */
@@ -3045,6 +3047,8 @@ static int virtnet_find_vqs(struct
virtnet_info *vi)
ctx[rxq2vq(i)] = true;
}
+ virtio_set_max_ring_num(vi->vdev,
VIRTNET_DEFAULT_MAX_RING_NUM);
+
ret = virtio_find_vqs_ctx(vi->vdev, total_vqs, vqs,
callbacks,
names, ctx, NULL);
if (ret)
--
2.31.0