F-Stack KNI 配置注意事项

更多腾讯海量技术文章,请关注云加社区:https://cloud.tencent.com/developer

作者:F-Stack

KNI介绍

KNI(Kernel NIC Interface)内核网卡接口,是DPDK中用于与内核通信的模块,在主要的业务流程中可能并不需要,但在部分场景下,如服务器所有网卡都被F-Stack接管用于业务(或服务器本身只有单网卡),其他如SSH登录管理等数据等就必须开启KNI来与内核进行数据交互。

KNI配置

因为开启KNI将对收到所有的数据包按转发策略进行检查,会对性能造成一定的影响,所以在F-Stack中默认配置关闭了KNI选项,如有需要可以在控制文件

config.ini

中修改配置开启KNI并设置转发规则。

[kni]enable=1method=rejecttcp_port=80udp_port=53

参数说明:

enable

参数配置是否开启KNI,设置为1表示开启,设置为0表示关闭,默认值为0

method

参数和tcp_port/udp_port参数配合使用,method参数可选accept或reject

当method参数设置为accept时,默认所有数据包都交由F-Stack处理,只将tcp_port/udp_port参数指定的端口的数据包通过KNI转发至系统内核。

当method参数设置为reject时,默认素有的数据包都通过KNI转发至系统内核,只将tcp_port/udp_port参数指定的端口号的数据包交由F-Stack处理。

tcp_port/udp_port

指定KNI处理的端口号,如有多个端口号用逗号","分隔,多个相连端口号也可以同时设置,如80-90

系统配置

当开启了KNI配置的F-Stack应用程序启动后,需在系统中设置虚拟网络接口并设置IP地址、掩码、MAC地址、路由表等信息才能正常完成F-Stack和内核间的数据交互。

【注意】 如果系统中没有额外的管理网卡,配置虚拟网卡地址的操作需通过执行脚本等方式与F-Stack应用程序一同启动,示例如下。

./start.sh -b /usr/local/nginx_fstack/sbin/nginx -c config.ini sleep 10 ifconfig veth0 netmask broadcast

hw ether route add -net 0.0.0.0 gw dev veth0 # route add -net [gw ] netmask dev veth0 # other route rules

注意事项:

KNI创建的虚拟网卡和F-Stack中的用户态协议栈公用同一个网卡收发数据,所以KNI虚拟网卡的网络配置要跟FreeBSD协议的配置相同。

由于F-Stack不支持设置MAC地址,是直接获取物理网卡的MAC地址,并无法设置创建的虚拟网卡的MAC地址,所以在使用

ifconfig

设置虚拟网卡的地址时需要显示指定

hw ether

为物理网卡的实际MAC地址,防止在部分内核中默认是随机值导致无法正常使用KNI。

题图

题图为DPDK官方文档中的KNI示意图 Fig. 21.1 Components of a DPDK KNI Application

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180112A0E51R00?refer=cp_1026

扫码关注云+社区