首页 > 其他分享 >DPDK-22.11.2 [六] RSS receive side scaling 网卡分流机制

DPDK-22.11.2 [六] RSS receive side scaling 网卡分流机制

时间:2024-02-05 15:00:11浏览次数:37  
标签:RTE scaling receive 网卡 IPV4 IPV6 ETH rss RSS

这个的作用就是为了提高性能。
当分析网络数据时,可以为网口提供多个接收队列,每个cpu处理一个队列。
如果每条队列是独立的,那么就可以很好的并发。

这里有两个问题,一个是数据需要平均的分配到每个队列;二是同一组数据需要分配到同一个队列。

rss就是这个作用,可以设定以ip进行区分,或者以端口进行区分。

比如以ip进行区分,那么dpdk会根据网络包的ip创建一个哈希值,相同ip的网络包,哈希值一致,也会进入同一个接收队列。

可以从获取到的dpdk的rte_mbuf结构体的hash.rss查看生成的哈希值。如果哈希值都是0,则表示配置失败。

如何开启rss,需要通过api rte_eth_dev_configure设置,其配置如下

static const struct rte_eth_conf port_conf = {
    .rxmode = {
        .mq_mode = RTE_ETH_MQ_RX_RSS,//表示打开rss
    },
    .rx_adv_conf = {
        .rss_conf = {
            .rss_key = NULL,//自定义rsskey,如果不设置,则使用默认的
            .rss_key_len = 0,//如果设定了自定义key,需要指定自定义rsskey的大小
            .rss_hf = RTE_ETH_RSS_IPV4,//rss类型,这里就是根据ipv4区分
        },
    },
};

上面有几点需要注意:

  • 之所以需要自定义rsskey,是因为默认rsskey会把ip往返的数据所做两种哈希值,也就是a->b的网络包与b->a的网络包认为是不同的。实际上确实是不同的,但是往往我们开发是需要放到一个队列计算,所以有专门的rsskey,可以屏蔽方向,把a->b和b->a的包都算作相同的。
  • rss_hf指定的rss类型并不是所有网卡都通用的,这个需要根据对应的设备来确定,如果设置错误,会导致dpdk无法运行,并且报错Ethdev port_id=0 invalid rss_hf: 0xa38c, valid value: 0x38d34

我们可以通过dpdk的rte_eth_dev_info_get获取网卡的设备信息,在其获得的rte_eth_dev_info结构体中,有一个字段flow_type_rss_offloads给定了网卡支持的rss类型,可以通过位预算与上进行判断是否支持。这是一个bit mask

dpdk设定的常见的几种rss规则如下

#define RTE_ETH_RSS_IP ( \
	RTE_ETH_RSS_IPV4 | \
	RTE_ETH_RSS_FRAG_IPV4 | \
	RTE_ETH_RSS_NONFRAG_IPV4_OTHER | \
	RTE_ETH_RSS_IPV6 | \
	RTE_ETH_RSS_FRAG_IPV6 | \
	RTE_ETH_RSS_NONFRAG_IPV6_OTHER | \
	RTE_ETH_RSS_IPV6_EX)

#define RTE_ETH_RSS_UDP ( \
	RTE_ETH_RSS_NONFRAG_IPV4_UDP | \
	RTE_ETH_RSS_NONFRAG_IPV6_UDP | \
	RTE_ETH_RSS_IPV6_UDP_EX)

#define RTE_ETH_RSS_TCP ( \
	RTE_ETH_RSS_NONFRAG_IPV4_TCP | \
	RTE_ETH_RSS_NONFRAG_IPV6_TCP | \
	RTE_ETH_RSS_IPV6_TCP_EX)

实际上我们可以设定多重rss规则,当其中一种不符合条件时,会用另一种进行匹配。
上面的意思都比较明确,FRAG表示分片包如何处理

标签:RTE,scaling,receive,网卡,IPV4,IPV6,ETH,rss,RSS
From: https://www.cnblogs.com/studywithallofyou/p/18008194

相关文章

  • CATIA|Windows——如何修改网卡的MAC地址?
    如何修改网卡的MAC地址?https://blog.csdn.net/weixin_44657888/article/details/117281332现在我们使用的板卡都是其唯一标识的,在计算机相关设备中最为常见的是MAC地址,在手机端最为常见的是SID。但有些时候,我们需要修改MAC地址,本文就来分享一些计算机如何修改网卡的mac地址。方......
  • rtthread系统用 RT1062 移植网卡功能(LAN8720A)
    RT-Thread:v4.0.2(master)SOC:i.MXRT1062Board:自研控制板背景描述1.有个控制板网口一直没人调试。2.NXPRT1xxx系列ENET_MAC调试心得。3.EthernetMAC控制器调试《终极指南》。 开整RT1062移植网卡功能(LAN8720A)1、i.MXRT系列外设驱动添加指南2、LAN8720A芯片的......
  • linux单网卡双IP配置
     [root@localhost~]#more/etc/sysconfig/network-scripts/ifcfg-ens224/etc/sysconfig/network-scripts/ifcfg-ens224:1::::::::::::::/etc/sysconfig/network-scripts/ifcfg-ens224::::::::::::::TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=no#BOOTPROTO=dhcp......
  • Received fatal alert: handshake_failure
    背景从后端请求第三方的提供的https接口,一直提示握手失败javax.net.ssl.SSLHandshakeException:Receivedfatalalert:handshake_failure,但api放到浏览器直接访问是没问题的,这也证明了人家提供的api可用性。我发起请求的客户端是jdk8版本,我试着请求其他平台https接口,能获取到......
  • 解决centos7修改网卡名为eth0仍显示ens33的问题
    1.进入/etc/sysconfig/network-scripts修改网卡配置文件中的DEVICE=与NAME=参数为eth0保存退出后再修改网卡配置文件名mvifcfg-ens33ifcfg-eth02.重新生成grub2文件编辑/etc/default/grub配置文件,在GRUB_CMDLINE_LINUX这个参数后面加入:net.ifnames=0biosdevnam......
  • Linux 网卡Bonding配置
    当在Linux系统上使用Bonding技术时,实际上是将多个物理网络接口(也称为Slave接口)绑定在一起,形成一个虚拟的Bond接口。这个Bond接口可以提高网络的可靠性和性能,有助于负载均衡和容错。配置Linux系统上Bonding的步骤:步骤1:加载Bonding模块在Linux内核中,Bonding功能是通过一个模块实......
  • 详解Linux双网卡绑定之bond0
    1、什么是bond?网卡bond是通过多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在生产场景中是一种常用的技术。Kernels2.4.12及以后的版本均供bonding模块,以前的版本可以通过patch实现。2、实现原理:网卡工作在混杂(promisc)模式,接收到达网卡的所有数据包,tcp......
  • 双网卡问题及route命令使用
    双网卡问题:IP路由依次查找:路由表IP段->默认路由1->默认路由2;如果路由表有目标IP段路由,则使用该路由;如果没有则使用默认路由;双网卡通常会自动有两个默认路由,这就可能导致网络问题;1,如果两张网卡设备都连接相同网络,这种情况不会有问题,两边网络一样使用那个默认路由都可以。2,通常情况......
  • Centos 静态IP网卡格式
    TYPE="Ethernet"PROXY_METHOD="none"BROWSER_ONLY="no"BOOTPROTO="static"修改该项dhcp为staticIPADDR=192.168.1.129增加静态IP地址NETMASK=255.255.255.0子网掩码GATEWAY=192.168.1.1子网网关DNS1=114.114.114.114DNSDE......
  • git push 报错 ! [remote rejected] main -> main (pre-receive hook declined) error
    今天在用gitpush项目的时候,出现了一个报错,记录一下解决方案,以后报同样的错误可以回来看。错误下面是gitpush的详细报错信息:20866@DESKTOP-7R0VL04MINGW64/d/AllProjects/JupyterProjects(main)$gitpushoriginmainEnumeratingobjects:152,done.Countingobjects:......