21

Intel E810 Advanced RSS介绍

 3 years ago
source link: https://www.sdnlab.com/24494.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

一、Advanced RSS的特性

Legacy的RSS是对普通五元组(src ip, dst ip, src port, dst port, protocol)进行哈希,而且默认情况下是对报文的五元组同时进行哈希。Intel E810对RSS做了增强,支持Advanced RSS, 主要体现在以下方面:

(1) 支持通过RTE_FLOW API对RSS的input set, hash function等进行动态配置。如只对ipv4报文的src ip或者dst ip进行哈希; 对ipv4报文设置hash function达到对称哈希,交换src ip和dst ip的值,报文到达同一个队列。对称哈希的意义: 对上下行的业务,到达同一个core,使得效率更高。

(2) 随着DDP(Dynamic Device Personalization)的出现,可以对更多的协议进行解析并哈希,如对GTPU的teid, PPPoE的session id , L2TPv3的session id, ESP的spi, AH的spi等。

二、硬件实现概念

RSS和flow director一样,都属于分类过滤器,从高层面的角度看,分类过滤器的框图如图1,此图来源于Intel E810 Datasheet

1.png

图1 分类过滤器的框图

图1中主要模块的描述如下

Profile ID: 一个由包的类型,包的标识以及VSI生成的功能。

Field Vector: 以filter的profile id为基础,从包头中被抽取出来的内容。

Input Set: 从包头中抽取出来的一些域,一般等同于field vector或者是其中某几位的掩码。

Filter Lookup: 通过精确匹配或者是RSS来分发,并把包和一些行为(action)关联起来。

Action: 如指定到达某个queue、拒绝或接收某个类型的包等行为。

Priority Resolver: 默认的优先级从高到低是ACL, switch, FDIR, RSS。

上面描述的是RSS, FDIR等过滤器的通用模块,针对RSS,它有自己的逻辑框图,如图2。

2.png

图2 RSS的逻辑框图

Incoming packets进入到parser模块,五元组src ip、dst ip、src port、dst port和protocol中的子集作为input set,结合一个任意的hash key以及hash function(默认hash function是Toeplitz function)计算得到hash value,用hash value求模redirection table size的结果去索引redirection table以得到被最终散列到的队列,并最终被对应的CPU worker收到。

三、AVF RSS的软件实现流程

Advanced RSS同时支持DPDK PF和AVF。以AVF RSS为例,其实现机制:在AVF中对到达的flow进行解析,将解析的结果通过virtual channel传递给PF,在PF中实现创建或者删除这条规则。这里的virtual channel是作为PF和VF之间协商的消息通道,即PF和VF共用的相关数据结构。对增加或者删除一条RSS规则来说,VF传递给PF的信息是这条规则的具体信息,包括报文类型,报文协议的层数,需要哈希的域,非隧道报文或隧道报文,哈希function(用来指定对称哈希或非对称哈希)等。其流程图如图3。

3.png

图3 在AVF中配置RSS Flow的流程图

四、测试用例

(1) Example 1: 创建一个对ipv4报文的src进行哈希的规则

flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end
1
2
flow create0ingress pattern eth/ipv4/endactions rss types ipv4 l3-src-only endkey_len0queues end/end
 

一条RSS flow由pattern和action构成,pattern是eth_ipv4, action是RSS, type表示input set,即对包的哪些域进行哈希。在这个例子中,ipv4表示rss type,需和前面的pattern一致,l3-src-only是对rss type ipv4的修饰,表示对ipv4的src进行哈希。Key_len 0和queues end表示在rte_flow的命令中暂时不支持对RSS的key_len和queue的配置,但可在flow director中配置queue region。

测试结果如下: 发一个ipv4类型的报文,改变src的值,可以观察到不同src ip的报文被散列到不同的队列中。

4.png

(2) Example 2: 创建一个对ipv4-udp报文对称哈希的规则

flow create 0 ingress pattern eth / ipv4 / udp / end actions rss func symmetric_toeplitz types ipv4-udp end key_len 0 queues end / end
1
2
flow create0ingress pattern eth/ipv4/udp/endactions rss func symmetric_toeplitz types ipv4-udp endkey_len0queues end/end
 

pattern是eth_ipv4_udp,通过指定rss func为symmetric Toeplitz hash来配置对称哈希,rss type为ipv4-udp,和前面的pattern保持一致,表示对ipv4-udp的报文进行对称hash,即交换src ipv4和dst ipv4、src udp port和dst udp port,hash结果保持不变,到达同一个队列。

测试结果如下:

sendp(Ether()/IP(src="1.1.4.1",dst="2.2.2.3")/UDP(sport=20,dport=22),iface="enp175s0f3")

RSS hash=0xb4169d0

sendp(Ether()/IP(src="2.2.2.3",dst="1.1.4.1")/UDP(sport=22,dport=20),iface="enp175s0f3")

RSS hash=0xb4169d0

1
2
3
4
5
6
7
8
sendp(Ether()/IP(src="1.1.4.1",dst="2.2.2.3")/UDP(sport=20,dport=22),iface="enp175s0f3")
 
RSS hash=0xb4169d0
 
sendp(Ether()/IP(src="2.2.2.3",dst="1.1.4.1")/UDP(sport=22,dport=20),iface="enp175s0f3")
 
RSS hash=0xb4169d0
 

五、总结

本文主要介绍Intel E810 Advanced RSS的概念、硬件实现和测试用例,以及AVF Advanced RSS软件实现流程。目前Advanced RSS在5G UPF等workload中有广泛的应用。如果大家对Advanced RSS感兴趣,欢迎继续关注后续Advanced RSS在VPP中具体应用的文章。

文章转载自DPDK与SPDK开源社区

QR%20code.jpg


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK