配置自定义拥塞参数
如果用户需要自定义拥塞参数,UCC编程框架提供了4个32位空间供用户使用,具体配置步骤及说明如下所示。
- 用户在设计算法时,应设计自定义算法需要用到的数据结构,并在自定义算法中完成定义。假设用户自定义了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; - 进入配置文件所在目录“/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位空间。- 编辑param0文件。
vi param0
- 按“i”进入编辑模式。
- 以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文件。
- 通用约束
- 按“ESC”键,输入:wq!,保存并退出编辑。
- 编辑param0文件。
- 以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
- 用户在算法中调用接口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
父主题: 配置服务器