使用RSS提升DPDK应用的性能

什么是 RSS

RSS (Receive Side Scaling) 是一种能够在多处理器系统下使接收报文在多个 CPU 之间高效分发的网卡驱动技术。

  • 网卡对接收到的报文进行解析,获取 IP 地址、协议和端口五元组信息
  • 网卡通过配置的 HASH 函数根据五元组信息计算出 HASH 值,也可以根据二、三或四元组进行计算。
  • 取 HASH 值的低几位 (这个具体网卡可能不同) 作为 RETA (redirection table) 的索引
  • 根据 RETA 中存储的值分发到对应的 CPU

下图描述了完整的处理流程:

基于 RSS 技术程序可以通过硬件在多个 CPU 之间来分发数据流,并且可以通过对 RETA 的修改来实现动态的负载均衡。

在 DPDK 中配置 RSS

DPDK 支持设置静态 hash 值和配置 RETA。 不过 DPDK 中 RSS 是基于端口的,并根据端口的接收队列进行报文分发的。 例如我们在一个端口上配置了 3 个接收队列 (0,1,2) 并开启了 RSS,那么 中就是这样的:

{0,1,2,0,1,2,0.........}

运行在不同 CPU 的应用程序就从不同的接收队列接收报文,这样就达到了报文分发的效果。

在 DPDK 中通过设置 rte_eth_conf 中的 mq_mode 字段来开启 RSS 功能, rx_mode.mq_mode = ETH_MQ_RX_RSS

当 RSS 功能开启后,报文对应的 rte_pktmbuf 中就会存有 RSS 计算的 hash 值,可以通过 pktmbuf.hash.rss 来访问。 这个值可以直接用在后续报文处理过程中而不需要重新计算 hash 值,如快速转发,标识

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值