栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

《深入浅出DPDK》——学习笔记——流分类

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

《深入浅出DPDK》——学习笔记——流分类

深入浅出DPDK——流分类与多队列 流分类

流分类指的是网卡依据数据包的特性将其分类的技术。分类的信息可以以不同不方式呈现给数据包的处理者,比如将分类信息记录于描述符中,将数据包丢弃或者将流导入某个或某些队列中。

包的分类

传统包的分类:IP、TCP、UDP甚至VXLAN、NVGRE等tunnel报文,该信息可以体现在数据包的接收描述符中。

DPDK:Mbuf结构中含有相应的字段来表示网卡分析出的包的类型。

网卡设备同时可以根据包的类型确定其关键字,从而根据关键字确定其收包队列。

其中RSS和Flow Director技术都是依据包的类型匹配相应的关键字,从而决定其DMA的收包队列。

RSS

负载均衡是多队列网卡最常见的应用,其含义就是将负载分摊到多个执行单元上执行。对应Packet IO而言,就是将数据包收发处理分摊到多个核上。

RSS(接收方扩展):网卡上用于将流量分散到不同队列中的技术。和硬件相关联,必须要有网卡的相关硬件支持,RSS把数据包分配到不同的队列中,其中哈希值的计算公式在硬件中完成的,也可以定制修改。

DPDK的轮询模式的驱动也提供了配置RSS的接口。

RSS就是根据关键字通过哈希函数计算出哈希值,再有哈希值确定队列。以下是各种数据包的RSS关键字:

数据包类型哈希计算输入
IPV4 UDPS-IP、D-IP、S-Port、D-Port
IPV4 TCPS-IP、D-IP、S-Port、D-Port
IPV4 SCTPS-IP、D-IP、S-Port、D-Port、Verfication-Tag
IPV4 OTHERS-IP、D-IP
IPV6 UDPS-IP、D-IP、S-Port、D-Port
IPV6 TCPS-IP、D-IP、S-Port、D-Port
IPV6 SCTPS-IP、D-IP、S-Port、D-Port、Verfication-Tag
IPV6 OTHERS-IP、D-IP

由哈希值得到分配的队列索引,是由硬件中一个哈希值与队列对应的表来决定的。如下图很好描述了这个关系

Flow Director

Flow Director技术是Intel公司提出的根据包的字段精确匹配,将其分配到某个特定队列的技术。

工作流程为:网卡上存储了一个Flow Director的表,表的大小受硬件资源限制,他记录了需要匹配字段的关键字及匹配后的动作。

驱动负责操作这张表,包括初始化、增加表项、删除表项;网卡从网线上收到数据包根据关键字查Flow Director的这张表,匹配后按照表象中的动作处理,可以是分配队列、丢弃等。关键字的选取和RSS的一样。下图表示Flow Director与队列选择

相比于RSS的负载分担功能,它更具有强调特性。

比如,用户可以为某几个特定的TCP对话(S-IP+D-IP+S-Port+D-Port)预留某个队列,那么处理这些TCP对话的应用就可以只关心这个特定的队列,从而省去了CPU过滤数据包的开销,并且可以提高cache的命中率。

服务质量

多队列应用于服务质量(QoS)流量类别:把发送队列分配给不同的流量类别,可以让网卡在发送侧做调度;把收包队列分配给不同的流量类别,可以做到基于流的限速。

根据流中优先级或业务类型字段,可以分为不同的流指定调度优先级和分配相应的带宽,一般网卡依据VLAN标签的UP(用户优先级)字段。网卡依据UP字段,将流划分到某个业务类型(TC),网卡设备根据TC业务做相应的处理,比如确定相对应的队列,根据优先级调度等。

发包方向

DCB模型可以在网卡上实现QoS的功能。

DCB disable和DCB enable状态下的描述符、报文及发送队列之间的关系。

对于没用使能QoS功能的情况下,对于描述符而言,网卡是按照轮询的方式来调度;对于数据包而言,,网卡从buffer0种获取数据包。

在使能QoS情况下,先根据UP来确定其属于哪个TC。TC内部的不同队列之间,网卡通过轮询的方式获取其描述符。不同的TC之间则是依据加权严格优先级来调度,同时不同的TC有不同的数据包buffer。

对描述符而言,网卡是依据加权严格优先级调度;

对数据包而言,网卡从对应的buffer中获取数据包。

加权严格优先级是常用的调度算法,其基于优先级来调度,优先级高的描述符或者数据包优先被获取,同时会考虑到权重,权重与为TC分配的带宽有关。

收包方向

在使能QoS的场景下,与发包方向类似,先根据UP来决策其属于哪个TC。一个TC会对应一组队列,然后再使用RSS或其他分类规则将其分配给不同队列。TC之间的调度同样采用加权严格优先级的调度算法。不同的网卡所采用的调度方法可能不尽相同。

虚拟化流分类方

不论是RSS、Flow Director、QoS等方式还是虚拟化场景下的多队列方式。都会有一组队列与虚拟化的实体相对应。

流过滤

流的合法性验证的主要任务是决定哪些数据包是合法的、可被接受的。合法性检查主要包括对外部来的流和内部流的验证。

来自外部数据包哪些是本地的、可以被接收的,哪些是不可以被接收的?

可以被接收的数据包会被网卡送到主机或者网卡内置的管理控制器,其过滤主要集中在以太网的二层功能,包括VLAN及MAC过滤。

流的过滤可以分为以下步骤:

  1. MAC地址的过滤

  2. VLAN标签的过滤

  3. 管理数据包的过滤

不同的网卡由于设计上的不一样,为了满足流分类的需求,也提供了很多分类规则技术的应用;

  1. N tuple filter :根据N元组指定队列。

  2. EtherType Filter:根据以太网报文的EtherType指定队列。

  3. Cloud Filter:针对云应用中的VXLAN等隧道报文指定队列等。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/510941.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号