• MLNX_OFED Features Verbs and Capabilities Flow Steering


    Flow steering defines the concept of domain and priority. Each domain represents a user agent that can attach a flow. The domains are prioritized. A higher priority domain will always supersede a lower priority domain when their flow specifications overlap. Setting a lower priority value will result in a higher priority.
    In addition to the domain, there is a priority within each of the domains. Each domain can have at most 2^12 priorities in accordance with its needs.
    The following are the domains at a descending order of priority:

    • User Verbs allows a user application QP to be attached to a specified flow when using ibv_exp_create_flow and ibv_exp_destroy_flow verbs
      • ibv_exp_create_flow
        struct ibv_exp_flow *ibv_exp_create_flow(struct ibv_qp *qp, struct ibv_exp_flow_attr
        *flow)

        Input parameters:

        • struct ibv_qp - the attached QP.
        • struct ibv_exp_flow_attr - attaches the QP to the flow specified. The flow contains mandatory control parameters and optional L2, L3 and L4 headers. The optional headers are detected by setting the size and num_of_specs fields:
          struct ibv_exp_flow_attr can be followed by the optional flow headers structs: 

          struct ibv_exp_flow_spec_ib
          struct ibv_exp_flow_spec_eth
          struct ibv_exp_flow_spec_ipv4
          struct ibv_exp_flow_spec_tcp_udp
          struct ibv_exp_flow_spec_ipv6

          Note: ipv6 is applicable for ConnectX®-4 and ConnectX®-4 Lx only.

          For further information, please refer to the ibv_exp_create_flow man page. 

          Be advised that as of MLNX_OFED v2.0-3.0.0, the parameters (both the value and the mask) should be set in big-endian format.

          Each header struct holds the relevant network layer parameters for matching. To enforce the match, the user sets a mask for each parameter. 
          The mlx5 driver supports partial masks. The mlx4 driver supports the following masks:

          • All one mask - include the parameter value in the attached rule
            Note: Since the VLAN ID in the Ethernet header is 12bit long, the following parameter should be used: flow_spec_eth.mask.vlan_tag = htons(0x0fff)
          • All zero mask - ignore the parameter value in the attached rule

    When setting the flow type to NORMAL, the incoming traffic will be steered according to the rule specifications. ALL_DEFAULT and MC_DEFAULT rules options are valid only for Ethernet link type since InfiniBand link type packets always include QP number.
    For further information, please refer to the relevant man pages.

    Flow steering is a model which steers network flows based on flow specifications to specific QPs. Those flows can be either unicast or multicast network flows. In order to maintain flexibility, domains and priorities are used. Flow steering uses a methodology of flow attribute, which is a combination of L@-L4 flow specifications, a destination QP and a priority. Flow steering rules may be inserted either by using ethtool or by using InfiniBand verbs. The verbs abstraction uses a different terminology from the flow attribute (ibv_flow_attr), defined by a combination of specifications (struct ibv_flow_spec_*).

    Flow Steering Experimental vs. RDMA-Core Verbs and Capabilities

    Experimental VerbsRDMA-Core
    Verbs
    ibv_exp_create_flow ibv_create_flow

    IBV_EXP_FLOW_ATTR_*

    IBV_FLOW_ATTR

    IBV_EXP_FLOW_ATTR_FLAGS_ALLOW_LOOP_BACK

    IBV_FLOW_ATTR_FLAGS_ALLOW_LOOP_BACK

    IBV_EXP_FLOW_SPEC_ETH

    IBV_FLOW_SPEC_ETH

    IBV_EXP_FLOW_SPEC_IB

    Not supported by RDMA-CORE

    IBV_EXP_FLOW_SPEC_IPV4

    IBV_FLOW_SPEC_IPV4

    IBV_EXP_FLOW_SPEC_IPV6

    IBV_FLOW_SPEC_IPV6

    IBV_EXP_FLOW_SPEC_IPV4_EXT

    IBV_FLOW_SPEC_IPV4_EXT

    IBV_EXP_FLOW_SPEC_IPV6_EXT

    IBV_FLOW_SPEC_IPV6

    IBV_EXP_FLOW_SPEC_TCP

    IBV_EXP_FLOW_SPEC_TCP

    IBV_EXP_FLOW_SPEC_UDP

    IBV_FLOW_SPEC_UDP

    IBV_EXP_FLOW_SPEC_VXLAN_TUNNEL

    IBV_FLOW_SPEC_VXLAN_TUNNEL

    IBV_EXP_FLOW_SPEC_INNER

    IBV_FLOW_SPEC_INNER

    IBV_EXP_FLOW_SPEC_ACTION_TAG

    IBV_FLOW_SPEC_ACTION_TAG

    IBV_EXP_FLOW_SPEC_ACTION_DROP

    IBV_FLOW_SPEC_ACTION_DROP

    Ibv_exp_flow_spec_*

    Ibv_flow_spec_*

    Ibv_exp_destroy_flow

    Ibv_destroy_flow

    Capabilities 

    IBV_EXP_DEVICE_MANAGED_FLOW_STEERING

    IBV_DEVICE_MANAGED_FLOW_STEERING

     ibv_create_flow    mlx5dv_create_flow

    参考

    https://docs.mellanox.com/display/rdmacore50/Flow+Steering

    https://docs.mellanox.com/display/MLNXOFEDv461000/Flow+Steering

  • 相关阅读:
    VM网络故障问题
    Weblogic无法创建域报段错误排查过程记录
    xmind8 Pro序列号
    vs2015下载地址(安装包丢失或损坏)
    复旦大学数学学院20级高等代数I期中考试大题的高等代数II解法及其推广
    复旦高等代数I(21级)每周一题
    Nginx alias root 和 try_files 基本使用
    Nginx location 和 proxy_pass路径配置详解
    (PMP)第7版
    scheduler源码分析——preempt抢占
  • 原文地址:https://www.cnblogs.com/dream397/p/14742098.html
Copyright © 2020-2023  润新知