Regards,
Asaf Penso

> -----Original Message-----
> From: dev <dev-boun...@dpdk.org> On Behalf Of Ilya Maximets
> Sent: Monday, November 4, 2019 12:28 PM
> To: Shahaf Shuler <shah...@mellanox.com>; Ilya Maximets
> <i.maxim...@ovn.org>; Thomas Monjalon <tho...@monjalon.net>
> Cc: dev@dpdk.org; Jerin Jacob <jerinjac...@gmail.com>; Andrew
> Rybchenko <arybche...@solarflare.com>; Ferruh Yigit
> <ferruh.yi...@intel.com>; Stephen Hemminger
> <step...@networkplumber.org>; Roni Bar Yanai <ron...@mellanox.com>;
> Rony Efraim <ro...@mellanox.com>; declan.dohe...@intel.com;
> bernard.iremon...@intel.com; ajit.khapa...@broadcom.com; Ananyev,
> Konstantin <konstantin.anan...@intel.com>
> Subject: Re: [dpdk-dev] [PATCH v2 0/3] ethdev: configure SR-IOV VF from
> host
> 
> On 03.11.2019 7:48, Shahaf Shuler wrote:
> > Friday, November 1, 2019 11:33 AM, Ilya Maximets:
> >> Subject: Re: [dpdk-dev] [PATCH v2 0/3] ethdev: configure SR-IOV VF from
> >> host
> >>
> >> On 30.10.2019 22:42, Thomas Monjalon wrote:
> >>> 30/10/2019 17:09, Ilya Maximets:
> >>>> On 30.10.2019 16:49, Thomas Monjalon wrote:
> >>>>> 30/10/2019 16:07, Ilya Maximets:
> >>>>>> On 29.10.2019 19:50, Thomas Monjalon wrote:
> >>>>>>> In a virtual environment, the network controller may have to
> >>>>>>> configure some SR-IOV VF parameters for security reasons.
> >>>>>>>
> > [...]
> >
> >>> If we consider what Intel did, i.e. configure VF in place of
> >>> representor for some operations, there are two drawbacks:
> >>> - confusing that some ops apply to representor, others apply to VF
> >>> - some ops are not possible on representor (because targetted to VF)
> >>>
> >>> I still feel that the addition of one single bit in the port ID is an
> >>> elegant solution to target either the VF or its representor.
> >>
> >> Since we already have a confusion about what is configured when
> operations
> >> are performed on a representor port we have 2 options:
> >
> > I don't agree we have. I don't think there is any design note or API doc 
> > that
> says the ethdev configuration on representor should be applied on VF
> (please share if I missed it).
> > The fact that there are some drivers that implemented it doesn't mean it is
> correct.
> >
> >> 1. Have this proposed API to configure representor itself while
> >>      setting config to representor and configuring VF if special
> >>      bit enabled.
> >> 2. Reverse the logic of current proposal, i.e. always apply
> >>      configuration to VF while working with representor and apply
> >>      configuration to representor itself if special bit is set.
> >>
> >> I'd probably prefer option #2, because:
> >> - From the OVS and OpenStack point of view, I think, we don't
> >>     really need to configure representor itself in most cases.
> >>     And OVS really should not know if it works with representor
> >>     or some real port.
> >
> > I don't thinks OVS can be really agnostic to the fact it runs on top of
> representors:
> > 1. probing of representor has different command line -w
> <bdf>,representor=XXX
> 
> OVS doesn't care about content of devargs. It just passes them to hotplug
> engine without any parsing (except a single case that must be eliminated
> with a proper device iterators, not an OVS issue).
> 
> > 2. the whole acceleration framework based on insertion of flow rules for
> direct forward from the VF to target entity. Rules are applied on the
> representor and would not work if port is not such.
> 
> OVS tries to offload rules to the netdev from which packet was received.
> That's it.  If it succeeds - OK.  If not, OVS doesn't care.
> 
> > 3. some multi-port devices cannot do direct fwd between its different port.
> This is why rep has switch_id and application should query it and act upon.
> 
> This is part of offloading engine that doesn't affect the generic code.
> If needed, OVS could request switch_id for netdev it tries to offload rules 
> on.
> OVS should not know if it representor port or not. If this operation will not
> succeed for non-representors, OVS should not care because we can't offload
> anything for non-representors anyway.
> 
> > 4. representor carry the VF port id. This is how application know to which
> VF (or vport) they associated with on their other side.
> 
> This is just part of devargs, i.e. part of device unique identifier.
> Once again, OVS doesn't parse devargs and should not do that.
> 
> >
> >> - It seems that most of the existing code in DPDK already works
> >>     like this, i.e. applying configs to VF itself.  Intel drivers
> >>     works like this and  Mellanox drivers, as Thomas said, doesn't
> >>     have this functionality at all.
> >
> > As I said above, I don't think we need to refer to specific driver behavior,
> rather the API guidelines.
> > To me, it is a bit strange and not natural that ethdev configuration is 
> > applied
> to different port w/o any explicit request from the application.
> > This is why I would prefer #1 above.
> 
> IMHO, the whole concept of representors is that representor is a
> way of attaching same port both to VM and vSwitch/hypervisor.
> 
> If you're looking at representors as a separate ports on a switch, well..
> In this case, for me VF configuration looks like something that
> vSwitch should not do at all, because it should not configure ports
> that doesn't attached to it.  It's like configuring the other
> side of veth pair, which is nonsense.
> 
> 
> BTW, I don't know a way to find out if port is a representor of something
> or not in Linux kernel.

Specifically in OVS, in function dpdk_eth_dev_init, you can do this to detect:
*info.dev_flags & RTE_ETH_DEV_REPRESENTOR

> 
> >
> >>
> >>>
> >>>
> >>>>>> The this is that this new API will produce conceptual fragmentation
> >>>>>> between DPDK and the Linux kernel, because to do the same thing
> >>>>>> you'll have to use different ways. I mean, to change mac of VF in
> >>>>>> kernel you need to set mac to the representor, but in DPDK changing
> >>>>>> setting mac to representor will lead to changing the mac of the
> >>>>>> representor itself, not the VF. This will be really confusing for 
> >>>>>> users.
> >>>>>
> >>>>> I am not responsible of the choices in Linux.
> >>>>> But I agree it would be interesting to check the reason of such
> decision.
> >>>>> Rony, please could you explain?
> >>>
> >>> I looked at few Linux drivers:
> >>>
> >>>   bnxt_vf_rep_netdev_ops has no op to set MAC
> >>>   bnxt_netdev_ops.ndo_set_vf_mac = set VF MAC from PF
> >>>
> >>>   lio_vf_rep_ndev_ops has no op to set MAC
> >>>   lionetdevops.ndo_set_vf_mac = set VF MAC from PF
> >>>
> >>>   mlx5e_netdev_ops_rep has no op to set MAC
> >>>   mlx5e_netdev_ops.ndo_set_vf_mac = set VF MAC from PF
> >>>   mlx5e_netdev_ops_uplink_rep.ndo_set_vf_mac = set VF MAC from
> >> PF
> >>>
> >>>   nfp_repr_netdev_ops.ndo_set_mac_address = set representor
> >> MAC
> >>>   nfp_repr_netdev_ops.ndo_set_vf_mac = set VF MAC from
> >> representor
> >>>   nfp_net_netdev_ops.ndo_set_vf_mac = set VF MAC from PF
> >>>
> >>> There is a big chance that the behaviour is not standardized in Linux
> >>> (as usual). So it is already confusing for users of Linux.
> >>>
> >>>

Reply via email to