All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Wang <jasowang@redhat.com>
To: Parav Pandit <parav@nvidia.com>,
	"virtualization@lists.linux-foundation.org"
	<virtualization@lists.linux-foundation.org>
Cc: Eli Cohen <elic@nvidia.com>, "mst@redhat.com" <mst@redhat.com>
Subject: Re: [PATCH linux-next v3 2/6] vdpa: Introduce query of device config layout
Date: Mon, 5 Jul 2021 12:35:17 +0800	[thread overview]
Message-ID: <386cf5c8-2f1f-8891-2448-5b6e98f51ea2@redhat.com> (raw)
In-Reply-To: <PH0PR12MB548102128B368BBE47F5F000DC1F9@PH0PR12MB5481.namprd12.prod.outlook.com>


在 2021/7/2 下午2:04, Parav Pandit 写道:
>
>> From: Jason Wang <jasowang@redhat.com>
>> Sent: Thursday, July 1, 2021 1:13 PM
>>
>>
>> Actually it depends on what attributes is required for building the config.
>>
>> We can simply reuse the existing virtio_net_config, if most of the fields are
>> required.
>>
>> struct virtio_net_config_set {
>>           __virtio64 features;
>>           union {
>>               struct virtio_net_config;
>>               __virtio64 reserved[64];
>>           }
>> };
>>
>> If only few of the is required, we can just pick them and use another
>> structure.
> The point is we define structure based on current fields. Tomorrow a new RSS or rx scaling scheme appears, and structure size might need change.
> And it demands us to go back to length based typecasting code.
> and to avoid some length check we pick some arbitrary size reserved words.
> And I do not know what network research group will come up for new rss algorithm and needed plumbing.


Yes, but as discussed, we may suffer the similar issue at the device 
level. E.g we need a command to let PF to "build" the config for a VF or SF.


>
>> Actually, I think just pass the whole config with the device_features during
>> device creation is a good choice that can simplify a lot of things.
> Yes. I totally agree to this.
>
>> We can define what is needed and ignore the others in the virtio spec.
>> Then there's no need to worry about any other things. vDPA core can just do
>> santiy test like checking size vs features.
> Yes, we are trying to have code that avoids such sanity checks based on structure size, length etc fields. :-)
>
>>
>>> Instead of doing them as individual netlink attributes, its lumped together
>> in a struct of arbitrary length. :-)
>>
>>
>> I think not? We want to have a fixed length of the structure which never
>> grow.
>>
> I am not sure defining that future now is right choice, at least for me.
>
>> So the different is:
>>
>> 1) using netlink dedicated fields
>>
>> if (nl_attrs[VDPA_ATTR_DEV_NET_CFG_MACADDR])
>>
>> 2) using netlink as transport
>>
>> if (features & VIRTIO_NET_F_MAC)
>>
>>
>>> I notice several fields of the vduse device is setup via ioctl, which I think
>> should be setup via this vdpa device add interface.
>>> Also we can always wrap above nl_attr code in a helper API so that drivers
>> to not hand-code it.
>>
>>
>> Then it would be still more like 2) above (wrap netlink back to
>> something like virtio_net_config)?
>>
>>
>>>> We may meet similar issue when provision VF/SF instance at the
>> hardware
>>>> level. So I think we may need something in the virtio spec in the near
>> future.
> Given the device config is not spelled out in the virtio spec, may be we can wait for it to define virtio management interface.


Yes.


>
>> I don't object but it needs to be done in virtio uAPI instead of
>> netlink, since it's the device ABI.
> Device config can surely be part of the virtio uAPI.
> We need not have put that in UAPI.
> More below.
>
>>> This is the reverse of netlink which offers to not reserve any arbitrary size
>> structure.
>>
>>
>> It's not arbitrary but with fixed length.
> Its fixed, but decided arbitrarily large in anticipation that we likely need to grow.
> And sometimes that fall short when next research comes up with more creative thoughts.


How about something like TLVs in the virtio spec then?


>
>> It may only work for netlink (with some duplication with the existing
>> virtio uAPI). If we can solve it at general virtio layer, it would be
>> better. Otherwise we need to invent them again in the virtio spec.
>>
> Virtio spec will likely define what should be config fields to program and its layout.
> Kernel can always fill up the format that virtio spec demands.


Yes, I wonder if you have the interest to work on the spec to support this.


>
>> I think even for the current mlx5e vDPA it would be better, otherwise we
>> may have:
>>
>> vDPA tool -> [netlink specific vDPA attributes(1)] -> vDPA core -> [vDPA
>> core specific VDPA attributes(2)] -> mlx5e_vDPA -> [mlx5e specific vDPA
>> attributes(3)] -> mlx5e_core
>>
>> We need to use a single and unified virtio structure in all the (1), (2)
>> and (3).
> This is where I differ.
> Its only vdpa tool -> vdpa core -> vendor_driver
>
> Vdpa tool -> vdpa core = netlink attribute
> Vdpa core -> vendor driver = struct_foo. (internal inside the linux kernel)
>
> If tomorrow virtio spec defines struct_foo to be something else, kernel can always upgrade to struct_bar without upgrading UAPI netlink attributes.


That's fine. Note that actually have an extra level if vendor_driver is 
virtio-pci vDPA driver (vp_vdpa).

Then we have

vdpa tool -> vdpa core -> vp_vdpa -> virtio-pci device

So we still need invent commands to configure/build VF/SF config space 
between vp_vdpa and virtio-pci device. And I think we may suffer the 
similar issue as we met here (vdpa tool -> vdpa core).


> Netlink attributes addition will be needed only when struct_foo has newer fields.
> This will be still forward/backward compatible.
>
> An exact example of this is drivers/net/vxlan.c
> vxlan_nl2conf().
> A vxlan device needs VNI, src ip, dst ip, tos, and more.
> Instead of putting all in single structure vxlan_config as UAPI, those optional fields are netlink attributes.
> And vxlan driver internally fills up the config structure.
>
> I am very much convinced with the above vxlan approach that enables all functionality needed without typecasting code and without defining arbitrary length structs.


Right, but we had some small differences here:

1) vxlan doesn't have a existing uAPI
2) vxlan configuration is not used for hardware

Basically, I'm not against this approach, I just wonder if it's 
better/simpler to solve it at virtio layer because the semantic is 
defined by the spec not netlink.

Thanks


_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

  reply	other threads:[~2021-07-05  4:35 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-16 19:11 [PATCH linux-next v3 0/6] vdpa: enable user to set mac, mtu Parav Pandit
2021-06-16 19:11 ` [PATCH linux-next v3 1/6] vdpa: Introduce and use vdpa device get, set config helpers Parav Pandit
2021-06-22  7:08   ` Jason Wang
2021-06-16 19:11 ` [PATCH linux-next v3 2/6] vdpa: Introduce query of device config layout Parav Pandit
2021-06-22  7:20   ` Jason Wang
2021-06-22 14:03     ` Parav Pandit
2021-06-23  4:08       ` Jason Wang
2021-06-23  4:22         ` Parav Pandit
2021-06-24  5:43           ` Jason Wang
2021-06-24  6:29             ` Parav Pandit
2021-06-24  7:05               ` Jason Wang
2021-06-24  7:59                 ` Parav Pandit
2021-06-25  3:28                   ` Jason Wang
2021-06-25  6:45                     ` Parav Pandit
2021-06-28  5:03                       ` Jason Wang
2021-06-28 10:56                         ` Parav Pandit
2021-06-29  3:52                           ` Jason Wang
2021-06-29  9:49                             ` Parav Pandit
2021-06-30  4:31                               ` Jason Wang
2021-06-30  6:03                                 ` Parav Pandit
2021-07-01  3:34                                   ` Jason Wang
2021-07-01  7:00                                     ` Parav Pandit
2021-07-01  7:43                                       ` Jason Wang
2021-07-02  6:04                                         ` Parav Pandit
2021-07-05  4:35                                           ` Jason Wang [this message]
2021-07-06 17:07                                             ` Parav Pandit
2021-07-07  4:03                                               ` Jason Wang
2021-06-28 22:39                         ` Michael S. Tsirkin
2021-06-29  3:41                           ` Jason Wang
2021-06-29 20:01                             ` Michael S. Tsirkin
2021-06-30  3:46                               ` Jason Wang
2021-06-16 19:11 ` [PATCH linux-next v3 3/6] vdpa: Enable user to set mac and mtu of vdpa device Parav Pandit
2021-06-22  7:43   ` Jason Wang
2021-06-22 14:09     ` Parav Pandit
2021-06-16 19:11 ` [PATCH linux-next v3 4/6] vdpa_sim_net: Enable user to set mac address and mtu Parav Pandit
2021-06-16 19:11 ` [PATCH linux-next v3 5/6] vdpa/mlx5: Support configuration of MAC Parav Pandit
2021-06-16 19:11 ` [PATCH linux-next v3 6/6] vdpa/mlx5: Forward only packets with allowed MAC address Parav Pandit
2021-08-05  9:57 ` [PATCH linux-next v3 0/6] vdpa: enable user to set mac, mtu Michael S. Tsirkin
2021-08-05 10:13   ` Parav Pandit via Virtualization
2021-08-05 12:05     ` Michael S. Tsirkin
2021-08-06  2:50   ` Jason Wang
2021-08-06  8:42     ` Michael S. Tsirkin
2021-08-06  8:55       ` Parav Pandit via Virtualization
2021-08-09  3:07         ` Jason Wang
2021-08-09  3:13           ` Parav Pandit via Virtualization
2021-08-09  3:29             ` Jason Wang
     [not found]           ` <20210809052121.GA209158@mtl-vdi-166.wap.labs.mlnx>
2021-08-09  5:42             ` Parav Pandit via Virtualization
     [not found]               ` <20210809055748.GA210406@mtl-vdi-166.wap.labs.mlnx>
2021-08-09  6:01                 ` Parav Pandit via Virtualization
     [not found]                   ` <20210809060746.GA210718@mtl-vdi-166.wap.labs.mlnx>
2021-08-09  6:10                     ` Parav Pandit via Virtualization
2021-08-09  7:05                       ` Jason Wang
2021-08-16 20:51                         ` Michael S. Tsirkin
2021-08-09  9:40         ` Michael S. Tsirkin
2021-08-09  9:51           ` Parav Pandit via Virtualization
2021-08-16 20:54             ` Michael S. Tsirkin
2021-08-18  3:14               ` Parav Pandit via Virtualization
2021-08-18  4:31                 ` Jason Wang
2021-08-18  4:36                   ` Parav Pandit via Virtualization
2021-08-19  4:18                     ` Jason Wang
2021-08-18 17:33                   ` Michael S. Tsirkin
2021-08-19  4:22                     ` Jason Wang
2021-08-19  5:23                       ` Parav Pandit via Virtualization
2021-08-19  7:15                         ` Jason Wang

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=386cf5c8-2f1f-8891-2448-5b6e98f51ea2@redhat.com \
    --to=jasowang@redhat.com \
    --cc=elic@nvidia.com \
    --cc=mst@redhat.com \
    --cc=parav@nvidia.com \
    --cc=virtualization@lists.linux-foundation.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.