【DOCA征文活动】在BlueField-2上做流量控制卸载的一些问题

416 阅读3分钟

转载自NVIDIA DOCA 中国开发者社区

原文链接看这里

作者:胡凌翔 环境配置:

宿主机linux内核5.4

虚拟机linux内核5.15

MLNX_OFED:5.6-1.0.3.1

前言

这篇文章主要描述了在bf2和cx6的基础上,研究流量控制卸载时所遇到的一些问题,并且目前也没有得到很好的解决。

T C

Linux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制,主要是通过在输出端口处建立一个队列来实现流量控制。不过这些方案有一个共同的缺点,即依赖一把设备全局的 Qdisc spinlock 来进行同步。所以现在考虑在已有的基础上进行硬件的卸载。下图是我引用的一张字节跳动做的总结图,总结了现有的一些流控方案。

图 1 总结[1]

OVS

Bf2支持了硬件卸载ovs(eswitch),并且ovs也是支持使用tc命令的,所以想通过在已经卸载ovs的基础上,在ovs端口进行流控,看能不能直接卸载到硬件中去呢。通过实验,通过tc的这一套走下来,并不会报错但是存在一个问题:如果想要卸载成功,必须处于 ovs 没有o ffload **的情况下。 **因为本质上来说,tc流控终究还是使用内核中的函数的,最终的队列还是在内核中而不是卸载到了硬件上。

在C X6 的情况

目前已经有了在cx6上卸载了htb的成果[3],本质上是利用了cx6硬件中的多队列,通过设置不同的优先等级和限流来实现htb的卸载,并且在已有硬件的基础上,是可以直接通过tc调用【offload】参数直接卸载。

图 2 mlnx_ofed features[2]

图 3 5.15内核中htb的命令参数

不过遗憾的是,这条命令我在bf的宿主机、dpu OS以及cx6服务器上都进行过尝试,都没有生效(物理机内核版本不够高,使用了5.15的虚拟机也不能生效)。可能是使用的方法存在一些问题。

MLNX _OFED

之前的研究基于了硬件多队列开发,其实Mellanox提供的驱动也能实现类似的功能。根据官网资料,驱动对CX6和bf2都是支持的,我先后尝试了CX6和Bf2,查看了一些tc的内容<mlnx_qos -i netdevice >。不过在bf2中得到了一下的结果:

图 4 bf2

Cx6中的结果如下:

图 5 cx6

从图中来看,bf2的信息有所缺失,并且在后来我改变tc队列优先级的实验中,cx6可以正常的通过配置不同tc的优先级和限速,而bf2没法从tc0以外的队列进行流量控制。

其他

以上只停留于硬件配置上的一些调研,doca中库以及dpdk都可以继续调研。不过dpdk是基于arm核的,所以要想得到性能的提升,doca应该是更好的选择。

参考资料

  1. mp.weixin.qq.com/s/64iz3X40Z…
  2. docs.nvidia.com/networking/…
  3. Kuperman Y, Mikityanskiy M, Efraim R. Hierarchical QoS Hardware Offload (HTB)[J].

NVIDIA DOCA现已开放免费注册,立刻扫码加入!

微信图片_20220715131943.jpg