鲲鹏社区首页
EN
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

配置自定义拥塞参数

如果用户需要自定义拥塞参数,UCC编程框架提供了4个32位空间供用户使用,具体配置步骤及说明如下所示。

  1. 用户在设计算法时,应设计自定义算法需要用到的数据结构,并在自定义算法中完成定义。
    假设用户自定义了2个32位参数结构,示例代码如下所示。
    typedef struct roce_ucc_1_param {
        union {
            struct {
    #if defined(BYTE_ORDER) && defined(BIG_ENDIAN) && ((BYTE_ORDER == BIG_ENDIAN))
                u32 key1 : 8;
                u32 key2 : 8;
                u32 key3 : 8;
                u32 key4 : 8;
    #else
                u32 key4 : 8;
                u32 key3 : 8;
                u32 key2 : 8;
                u32 key1 : 8;
    #endif
            } bs;
            u32 value;
        } dw0;
    
        union {
            struct {
    #if defined(BYTE_ORDER) && defined(BIG_ENDIAN) && ((BYTE_ORDER == BIG_ENDIAN))
                u32 key5 : 16;
                u32 key6 : 8;
                u32 rsvd : 8;
    #else
                u32 rsvd : 8;
                u32 key6 : 8;
                u32 key5 : 16;
    #endif
            } bs;
            u32 value;
        } dw1;
     
        u32 rsvd_dw[2];
    } roce_ucc_1_param_s;
  2. 进入配置文件所在目录“/sys/class/net/ens4f0/ecn/roce3_ucc/”,修改param值。
    [root@localhost ~]# ll /sys/class/net/ens4f0/ecn/roce3_ucc/
    total 0
    -rw-r-----. 1 root root 4096 Jun 13 19:20 param0
    -rw-r-----. 1 root root 4096 Jun 13 19:20 param1
    -rw-r-----. 1 root root 4096 Jun 13 19:20 param2
    -rw-r-----. 1 root root 4096 Jun 13 19:20 param3
    param0~param3按顺序分别对应数据结构中的4个32位空间。
    1. 编辑param0文件。
      vi param0
    2. “i”进入编辑模式。
    3. 1中定义的2个32位数据结构为例,按照“key:value:bits”形式填写定义内容。

      其中key表示参数名、value表示参数值,bits表示参数占用比特值。

      param0示例如下所示。
      key1:1:8
      key2:2:8
      key3:3:8
      key4:4:8
      param1示例如下所示。
      key5:1:16
      key6:2:8

      param的配置内容,相关约束及注意事项如下所示。

      • 通用约束
        • 输入格式需满足“key:value:bits”,其中value和bits应为数字,冒号为英文格式,允许用户输入空格,后续读文件时会将空格省略。
        • param文件中字符串总长度小于或等于1022。
      • 参数名key约束
        • 参数名key的长度小于或等于31(建议key跟数据结构中的参数名保持一致)。
        • 同一param文件中不能有重复的参数名key。
      • 参数值value约束
        • 每一个参数key所赋的value值不可大于该参数占位bits所能表示的最大值。
      • 参数占用比特值约束:
        • 所有的参数bits占位相加不超过32,不足32位时默认缺省位对应key的value为0。如步骤1中数据结构的第2个32位空间,存在8位未使用的rsvd空间,在配置文件时可省略,会默认该缺省位对应key的value为0。
      • 注意事项
        • 自定义参数未满足上述要求时,param0~param3配置文件无法保存成功,具体错误信息可通过dmesg查询。
        • hiroce3驱动被卸载(rmmod hiroce3)时,param0~param3配置文件会被删除,用户配置的文件无备份,用户若想使用原有拥塞算法参数配置需加载hiroce3驱动(modprobe hiroce3)后重新配置param0~param3文件。
    4. “ESC”键,输入:wq!,保存并退出编辑。
  3. 1中定义的2个32位数据结构为例,完成2中配置后,查询当前配置。
    [root@localhost roce3_ucc]# cat param0
    key1:1:8
    key2:2:8
    key3:3:8
    key4:4:8
    [root@localhost roce3_ucc]# cat param1
    key5:1:16
    key6:2:8
  4. 用户在算法中调用接口flexda_ucc_get_current_algo_params获取指向所存储拥塞参数的指针,获取拥塞参数的值。
    const roce_ucc_1_param_s *ucc_param = (roce_ucc_1_param_s *)flexda_ucc_get_current_algo_params();
    u32 key1 = ucc_param->dw0.bs.key1;
    u32 key3 = ucc_param->dw0.bs.key3;
    u32 key5 = ucc_param->dw1.bs.key5;
    u32 rsvd = ucc_param->dw1.bs.rsvd; // 获取到的是0