Message ID | 20220214081416.117695-21-xuanzhuo@linux.alibaba.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | virtio pci support VIRTIO_F_RING_RESET | expand |
On Mon, Feb 14, 2022 at 4:14 PM Xuan Zhuo <xuanzhuo@linux.alibaba.com> 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 etc. (The number are just copied from the 10g/40g default parameter from other vendors) Thanks > > Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> > --- > 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 >
On Wed, 16 Feb 2022 12:14:31 +0800, Jason Wang <jasowang@redhat.com> wrote: > On Mon, Feb 14, 2022 at 4:14 PM Xuan Zhuo <xuanzhuo@linux.alibaba.com> 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 Thanks. > > etc. > > (The number are just copied from the 10g/40g default parameter from > other vendors) > > Thanks > > > > > Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> > > --- > > 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 > > >
On Wed, Feb 16, 2022 at 3:52 PM Xuan Zhuo <xuanzhuo@linux.alibaba.com> wrote: > > On Wed, 16 Feb 2022 12:14:31 +0800, Jason Wang <jasowang@redhat.com> wrote: > > On Mon, Feb 14, 2022 at 4:14 PM Xuan Zhuo <xuanzhuo@linux.alibaba.com> 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? Thanks > Thanks. > > > > > > etc. > > > > (The number are just copied from the 10g/40g default parameter from > > other vendors) > > > > Thanks > > > > > > > > Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> > > > --- > > > 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 > > > > > >
On Thu, 17 Feb 2022 15:21:26 +0800, Jason Wang <jasowang@redhat.com> wrote: > On Wed, Feb 16, 2022 at 3:52 PM Xuan Zhuo <xuanzhuo@linux.alibaba.com> wrote: > > > > On Wed, 16 Feb 2022 12:14:31 +0800, Jason Wang <jasowang@redhat.com> wrote: > > > On Mon, Feb 14, 2022 at 4:14 PM Xuan Zhuo <xuanzhuo@linux.alibaba.com> 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. 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? 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@linux.alibaba.com> > > > > --- > > > > 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 > > > > > > > > > >
在 2022/2/17 下午5:30, Xuan Zhuo 写道: > On Thu, 17 Feb 2022 15:21:26 +0800, Jason Wang <jasowang@redhat.com> wrote: >> On Wed, Feb 16, 2022 at 3:52 PM Xuan Zhuo <xuanzhuo@linux.alibaba.com> wrote: >>> On Wed, 16 Feb 2022 12:14:31 +0800, Jason Wang <jasowang@redhat.com> wrote: >>>> On Mon, Feb 14, 2022 at 4:14 PM Xuan Zhuo <xuanzhuo@linux.alibaba.com> 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? > > 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@linux.alibaba.com> >>>>> --- >>>>> 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 >>>>>
在 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@redhat.com> >> wrote: >>> On Wed, Feb 16, 2022 at 3:52 PM Xuan Zhuo >>> <xuanzhuo@linux.alibaba.com> wrote: >>>> On Wed, 16 Feb 2022 12:14:31 +0800, Jason Wang >>>> <jasowang@redhat.com> wrote: >>>>> On Mon, Feb 14, 2022 at 4:14 PM Xuan Zhuo >>>>> <xuanzhuo@linux.alibaba.com> 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@linux.alibaba.com> >>>>>> --- >>>>>> 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 >>>>>>
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)
Sets the default maximum ring num based on virtio_set_max_ring_num(). The default maximum ring num is 1024. Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> --- drivers/net/virtio_net.c | 4 ++++ 1 file changed, 4 insertions(+)