DPDK- flow Metering
flow Metering
是 DPDK 19.11
及后续版本添加的新特性. 主要针对 Mellanox ConnectX-5/ConnectX-6/ConnectX-6Dx
系列网卡硬件Metering
特性. 其支持的限速算法是 rfc2697 单色双桶
限速机制, 支持对 ingress
流量 metering
.
环境准备
DPDK 19.11
OFED 4.7-3
ConnectX-5
启用 CX5 DevX
:
mlxconfig -d d8:00.0 set UCTX_EN=1
mlxconfig -d d8:00.0 CQE_COMPRESSION=1
reset
网卡:
mlxfwreset -d d8:00.0 --level 3 --yes r
/etc/init.d/openibd restart
或者直接reboot
系统.
运行testpmd
:
./dpdk-testpmd-19.11.8 -l 26-51 --socket-mem=4096,4096 -w d8:00.0,dv_flow_en=1,mprq_en=1,rxqs_min_mprq=1,rx_vec_en=1 -- -i --rxq=16 --txq=16 --nb-cores=16 --f
orward-mode=icmpecho --numa --enable-rx-cksum -a
...
testpmd> show port meter cap 0
**** Port Meter Object Capabilities ****
cap.n_max 4096
cap.n_shared_max 4096
cap.identical 1
cap.shared_identical 1
cap.shared_n_flows_per_mtr_max 4194304
cap.chaining_n_mtrs_per_flow_max 1
cap.chaining_use_prev_mtr_color_supported 0
cap.chaining_use_prev_mtr_color_enforced 0
cap.meter_srtcm_rfc2697_n_max 4096
cap.meter_trtcm_rfc2698_n_max 0
cap.meter_trtcm_rfc4115_n_max 0
cap.meter_rate_max 1099511627776
cap.color_aware_srtcm_rfc2697_supported 0
cap.color_aware_trtcm_rfc2698_supported 0
cap.color_aware_trtcm_rfc4115_supported 0
cap.policer_action_recolor_supported 0
cap.policer_action_drop_supported 1
cap.stats_mask 88
testpmd>
Meter
配置 Meter
, 这里配置的是cir
平均速率 128000bytes * 8 = 1024000bps
, 突发速率 64000 * 8 = 512000bps
. 发包工具使用 IXIA IxNetwork
构建 64字节小包:
testpmd> add port meter profile srtcm_rfc2697 0 24 128000 64000 0
testpmd> create port meter 0 0 24 yes G Y D 0xffff 1 0
testpmd> flow create 0 ingress pattern eth / ipv4 dst is 10.245.111.173 / end actions jump group 1 / end
testpmd> flow create 0 group 1 ingress pattern eth / end actions count / meter mtr_id 0 / queue index 7 / end
testpmd> show port xstats all
testpmd> show port meter stats 0 0 no
检查限速结果:
testpmd> show port xstats all
###### NIC extended statistics for port 0
rx_good_packets: 1109034
tx_good_packets: 0
rx_good_bytes: 66542040
tx_good_bytes: 0
rx_missed_errors: 182
rx_errors: 0
tx_errors: 0
rx_mbuf_allocation_errors: 0
rx_q0packets: 0
rx_q0bytes: 0
rx_q0errors: 0
rx_q1packets: 1109009
rx_q1bytes: 66540540
rx_q1errors: 0
rx_q2packets: 0
rx_q2bytes: 0
rx_q2errors: 0
rx_q3packets: 0
rx_q3bytes: 0
....
testpmd> show port meter stats 0 0 no
Pkts G: 1030792
Bytes G: 61847520
Pkts Y: 0
Bytes Y: 0
Pkts R: 15555474066
Bytes R: 933328443960
Pkts DROPPED: 15555474066
Bytes DROPPED: 933328443960
testpmd>
注意:
启用Metering 限速后, 线速小包转发场景下会导致正常报文延迟增大 & 丢包.
感觉这是Mellanox CX5/CX6 卡的硬件瓶颈, 只要添加多条 flow 测试线速小包性能会急剧下降, 暂时已提交给官方, 等待后续进展.
令牌桶技术
以下对 令牌桶技术
与 rfc2697 单色双桶
原理做一个简单介绍:
关于令牌桶处理报文的方式,RFC中定义了以下标记算法:
•单速率三色标记(single rate three color marker,srTCM,或称为单速双桶算法)算法,主要关注报文尺寸的突发。
•双速率三色标记(two rate three color marker,trTCM,或称为双速双桶算法)算法,主要关注报文速率的突发。
令牌桶算法的评估结果都是为报文打上红、黄、绿三种颜色的标记,所以称为“三色标记”。QoS会根据报文的颜色做相应的处理,两种算法都可以工作于色盲模式和色敏模式下。以下以色盲模式为例对标记算法进行详细介绍。
srTCM
cir:承诺平均速率
cbs:承诺突发尺寸
ebs:最大突发尺寸
pir:峰值速率
要求:
cir<=pir,cbs<=ebs
MLX5 ebs=0, 不支持 pir
建议:
将 cbs、ebs 设成 cir 的 100~150倍
单速双桶
单速双桶采用RFC2697定义的单速三色标记器srTCM(Single Rate Three Color Marker)算法对流量进行测评,根据评估结果为报文打颜色标记,即绿色、黄色和红色。
为方便描述将两个令牌桶称为C桶和E桶,用Tc和Te表示桶中的令牌数量。单速双桶有3个参数:
•CIR(Committed Information Rate):承诺信息速率,表示向C桶中投放令牌的速率,即C桶允许传输或转发报文的平均速率;
•CBS(Committed Burst Size):承诺突发尺寸,表示C桶的容量,即C桶瞬间能够通过的承诺突发流量;
•EBS(Excess Burst Size):超额突发尺寸,表示E桶的容量,即E桶瞬间能够通过的超出突发流量。
系统按照CIR速率向桶中投放令牌:•若Tc<CBS,Tc增加;
•若Tc=CBS,Te<EBS,Te增加;
•若Tc=CBS,Te=EBS,则都不增加。
对于到达的报文,用B表示报文的大小:•若B≤Tc,报文被标记为绿色,且Tc减少B;
•若Tc<B≤Te,报文被标记为黄色,且Te减少B;
•若Te<B,报文被标记为红色,且Tc和Te都不减少。
单速双桶模式允许流量突发,当用户的流量速率小于配置的CIR时,报文被标记为绿色;当用户的突发流量大于配置的CBS而小于EBS时,报文被标记为黄色;当用户的突发流量大于配置的EBS时,报文被标记为红色。
单速单桶
单速双桶算法中的EBS则设置为0,此时E桶的令牌数始终为0,相当于只使用了一个令牌桶,这种情况称为单速单桶。
为方便描述将此令牌桶称为C桶,用Tc表示桶中的令牌数量。单速单桶有2个参数:
•CIR:承诺信息速率,表示向C桶中投放令牌的速率,即C桶允许传输或转发报文的平均速率;
•CBS:承诺突发尺寸,表示C桶的容量,即C桶瞬间能够通过的承诺突发流量。
系统按照CIR速率向C桶中投放令牌,当Tc<CBS时,令牌数增加,否则不增加。
对于到达的报文,用B表示报文的大小:•若B≤Tc,报文被标记为绿色,且Tc减少B;
•若B>Tc,报文被标记为红色,Tc不减少。
单速单桶模式不允许流量突发,当用户的流量速率小于配置的CIR时,报文被标记为绿色;当用户的流量大于CIR时直接被标记为红色。
参考
MLX5 poll mode driver
testpmd - Traffic Metering and Policing