2019/07/28
- 这部分实验很难做,很大原因是因为给出的范例并不能直接使用
- 根绝官方的说法根本没有,必须去看你的网卡到底是什么驱动,到底支持哪些操作
- 这部分的调试工作,主要集中在驱动部分的代码,示例程序给出的错误提示一点用都没有
- 很多网卡并不能支持drop操作,也就是第一个
比如必须是queue,但是正常启动了多队列不设置相应的高级设置,多队列并不工作。 - 例如以太网类型过滤,都尼玛不支持ipv4,ipv6,咱也不知道为啥;
- 既然只支持将网卡包调换到某个队列上,那他工作的原理是什么,其他的不要了???
- igb的网卡驱动,
无法同时下发进出包的规则,我理解的进出包应该就是是否是从网卡发送出去的,对于是否是正常进入内网的并不关心,所以一般如果是监听的流量,那么肯定是入的流量; - 现在的情况是,按理说,他的意思是通过规则,可以改变一个数据包的方向,也就是改变成某个队列, 但是我目前的情况是,我如果不配置什么内容,我连多队列都起不来,这尼玛是什么玩意
哎,没意思,没意思
所以,我按照自己对它API的理解,过滤部分就是将数据包在硬件发往某个队列之前,将其改变一下队列的归属。
但是,目前来看, 如果想开启多队列,就必须部署相应的RSS函数等,这部分我还没看明白,如果不部署,直接就没办法运行。
然后,我按照相应的部署,没有开启队列之前就已经全部在0队列了,开了也没什么变化。
最终,话规成一个问题,多队列和过滤的话,有什么区别,他们之间是不是有影响。
2019/07/29
最后同时在实验室刀片机上以及项目中的主机网卡实现,但是实现的规则有所不同, 因为网卡驱动不同,下面分别来说明。
两边实验流程相同,都是启动两个队列,但并不在端口启动过程中进行多队列的设置,也就是哈希函数的设置;然后按照规则是否命中,进行流量的导向。
- 刀片机实验 ---网卡驱动igb
刀片机实验的是将ARP数据包转送到1队列,但是这里开始的时候一直失败的原因,是没有进行状态转换,采用的函数是RTE_BE16
,如果是直接使用uint16_t进行转换的话也不好使,所以说这就很尴尬。
但其实我在状态部分进行赋值的话,就是直接赋值的宏,因为它源码里面进行直接对比的也是头文件中的宏。
上面这个说法是错的,因为源码在解析的时候,发现了它调用了转换的地方,转换成了头文件中的宏。
所以这样说来的话, 那么就可以理解了,赋值正确的话, 肯定是能工作的。
- 项目中网卡实验 --- 网卡驱动ixgbe
本实验室进行5元祖的匹配,这部分匹配的话,只进行UDP协议的端口进行匹配,同样也需要进行一定的转换。
但是由于流量的特殊性,当前匹配的是两端端口同时匹配的规则,但是分片的流量并不能实现相应的导向。
综上所属,现在的情况就是直接部署两个队列,然后进行规则的导向,即可实现流量导向到某队列。
但也产生了一个疑问,我同时部署了两个队列,如果哪些规则没有命中的,好像直接就到了0队列,这个可能跟它底层的实现相关。也就是说,我没有从硬件层面开启多队列,只是部署了两个队列,然后硬性的将某个流量达到了某队列,默认工作的还是0队列。
文献[1]中提到的源码,应该是大致DPDK17版本时候的,我在19上已经看到到了,同时无法运行;它的博客中,对于DPDK的其他内容提到,可以看看。
网友评论