DPDK X710 DDP PPPoE 实践

DPDK version: 21.08

X710 firmware-version: 6.80 0x80003cc1 1.1747.0

DDP PPPoE profile version: 1.0.0.0

# lspci |grep Ethernet |grep X710
04:00.0 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 02)
04:00.1 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 02)# ethtool  -i eth4
driver: i40e
version: 2.8.20-k
firmware-version: 6.80 0x80003cc1 1.1747.0
expansion-rom-version:
bus-info: 0000:04:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: yes

testpmd:

./dpdk-testpmd -c 0xffff --socket-mem=5120,7168 -n 2 -r 2 --no-hpet --create-uio-dev -w 0000:04:00.0 -w 0000:04:00.1 \-- -i --rxq=8 --txq=8 --pkt-filter-mode=perfect --rss-ip --rss-udp

DDP PPPoE Profile

Intel® Ethernet Controller X710/XXV710/XL710 Adapters Dynamic Device Personalization PPPoE Package 下载 DDP PPPoE Profile 解压.

启动 testpmd 加载 DDP Profile:

port stop all
ddp add 0 /sdd/tmp/ppp-oe-ol2tpv2.pkgo,/sdd/tmp/ppp-oe-ol2tpv2.pkgo.bak
ddp get list 0
Profile number is: 1Profile 0:
Track id:     0x80000006
Version:      1.0.0.0
Profile name: E710 PPPoE and PPPoL2TPv2port start all

查看当前网卡 pctype -> flowtype 映射:

testpmd> show port 0 pctype  mapping
pctype: 36  ->  flowtype: 03
pctype: 33  ->  flowtype: 04
pctype: 31  ->  flowtype: 05
pctype: 34  ->  flowtype: 06
pctype: 35  ->  flowtype: 07
pctype: 46  ->  flowtype: 09
pctype: 43  ->  flowtype: 10
pctype: 41  ->  flowtype: 11
pctype: 44  ->  flowtype: 12
pctype: 45  ->  flowtype: 13
pctype: 63  ->  flowtype: 14
pctype: 15  ->  flowtype: 15

查看 DDP PPPoE profile :

testpmd> ddp get info /sdd/tmp/ppp-oe-ol2tpv2.pkgoGlobal Track id:       0x80000006
Global Version:        1.0.0.0
Global Package name:   PPPoE and PPPoL2TPv2i40e Profile Track id: 0x80000006
i40e Profile Version:  1.0.0.0
i40e Profile name:     E710 PPPoE and PPPoL2TPv2Package Notes:
This profile enables PPPoE and PPPoL2TPv2 parsing
L2TPv2 Tunnel ID extracted to field 46
L2TPv2/PPPoE Session ID extracted to field 47
PPP Protocol ID extracted to field 48List of supported devices:8086:1572 FFFF:FFFF8086:1574 FFFF:FFFF8086:1580 FFFF:FFFF8086:1581 FFFF:FFFF8086:1583 FFFF:FFFF8086:1584 FFFF:FFFF8086:1585 FFFF:FFFF8086:1586 FFFF:FFFF8086:1587 FFFF:FFFF8086:1588 FFFF:FFFF8086:1589 FFFF:FFFF8086:158A FFFF:FFFF8086:158B FFFF:FFFFList of used protocols:12: IPV413: IPV615: GRENAT17: TCP18: UDP19: SCTP20: ICMP22: L2TPv2CTRL23: ICMPV626: L2TPv227: L2TPv2PAY28: PPPoL2TPv229: PPPoE33: PAY234: PAY335: PAY444: IPV4FRAG48: IPV6FRAG52: OIPV453: OIPV6List of defined packet classification types:14: L2TPv2CTRL15: PPPoE IPV416: PPPoE IPV617: PPPoE18: PPPoL2TPv2 IPV419: PPPoL2TPv2 IPV620: PPPoL2TPv221: L2TPv2PAYList of defined packet types:154: PPPoE PAY2155: PPPoE IPV4FRAG PAY3156: PPPoE IPV4 PAY3157: PPPoE IPV4 UDP PAY4158: PPPoE IPV4 TCP PAY4159: PPPoE IPV4 SCTP PAY4160: PPPoE IPV4 ICMP PAY4161: PPPoE IPV6FRAG PAY3162: PPPoE IPV6 PAY3163: PPPoE IPV6 UDP PAY4164: PPPoE IPV6 TCP PAY4165: PPPoE IPV6 SCTP PAY4166: PPPoE IPV6 ICMPV6 PAY4167: OIPV4 L2TPv2 PPPoL2TPv2 PAY3168: OIPV4 L2TPv2 PPPoL2TPv2 IPV4FRAG PAY3169: OIPV4 L2TPv2 PPPoL2TPv2 IPV4 PAY3170: OIPV4 L2TPv2 PPPoL2TPv2 IPV4 UDP PAY4171: OIPV4 L2TPv2 PPPoL2TPv2 IPV4 TCP PAY4172: OIPV4 L2TPv2 PPPoL2TPv2 IPV4 SCTP PAY4173: OIPV4 L2TPv2 PPPoL2TPv2 IPV4 ICMP PAY4174: OIPV4 L2TPv2 PPPoL2TPv2 IPV6FRAG PAY3175: OIPV4 L2TPv2 PPPoL2TPv2 IPV6 PAY3176: OIPV4 L2TPv2 PPPoL2TPv2 IPV6 UDP PAY4177: OIPV4 L2TPv2 PPPoL2TPv2 IPV6 TCP PAY4178: OIPV4 L2TPv2 PPPoL2TPv2 IPV6 SCTP PAY4179: OIPV4 L2TPv2 PPPoL2TPv2 IPV6 ICMPV6 PAY4180: OIPV6 L2TPv2 PPPoL2TPv2 PAY3181: OIPV6 L2TPv2 PPPoL2TPv2 IPV4FRAG PAY3182: OIPV6 L2TPv2 PPPoL2TPv2 IPV4 PAY3183: OIPV6 L2TPv2 PPPoL2TPv2 IPV4 UDP PAY4184: OIPV6 L2TPv2 PPPoL2TPv2 IPV4 TCP PAY4185: OIPV6 L2TPv2 PPPoL2TPv2 IPV4 SCTP PAY4186: OIPV6 L2TPv2 PPPoL2TPv2 IPV4 ICMP PAY4187: OIPV6 L2TPv2 PPPoL2TPv2 IPV6FRAG PAY3188: OIPV6 L2TPv2 PPPoL2TPv2 IPV6 PAY3189: OIPV6 L2TPv2 PPPoL2TPv2 IPV6 UDP PAY4190: OIPV6 L2TPv2 PPPoL2TPv2 IPV6 TCP PAY4191: OIPV6 L2TPv2 PPPoL2TPv2 IPV6 SCTP PAY4150: OIPV6 L2TPv2 PPPoL2TPv2 IPV6 ICMPV6 PAY412: OIPV4 L2TPv2 L2TPv2CTRL PAY413: OIPV6 L2TPv2 L2TPv2CTRL PAY414: OIPV4 L2TPv2 L2TPv2PAY PAY315: OIPV6 L2TPv2 L2TPv2PAY PAY3

注意以下信息为 DDP PPPoE profile 新定义的pctype 类型, 与文档介绍一致:

List of defined packet classification types:14: L2TPv2CTRL15: PPPoE IPV416: PPPoE IPV617: PPPoE18: PPPoL2TPv2 IPV419: PPPoL2TPv2 IPV620: PPPoL2TPv221: L2TPv2PAY

映射 pctype 15: PPPoE IPV4 到 DPDK flow type 15:

testpmd> port config 0 pctype mapping update 15 15
testpmd> port start 0
testpmd> start
testpmd> port config all rss 15
testpmd> show port 0 pctype mapping
pctype: 36  ->  flowtype: 03
pctype: 33  ->  flowtype: 04
pctype: 31  ->  flowtype: 05
pctype: 34  ->  flowtype: 06
pctype: 35  ->  flowtype: 07
pctype: 46  ->  flowtype: 09
pctype: 43  ->  flowtype: 10
pctype: 41  ->  flowtype: 11
pctype: 44  ->  flowtype: 12
pctype: 45  ->  flowtype: 13
pctype: 63  ->  flowtype: 14
pctype: 15  ->  flowtype: 15
  • port config 0 pctype mapping update 15 15 调用 rte_pmd_i40e_flow_type_mapping_update() 映射 pctype 22 到 DPDK flow type 15

  • port config all rss 22flowtype 15 启用 RSS

scapy 发送测试PPPOE IPv4报文:

from scapy.all import *pkt=Ether(dst="90:e2:ba:0a:73:0c")/PPPoE(sessionid=0x7)/PPP(proto=0x21)/IP(src="1.1.1.1",dst="2.2.2.2")/UDP(sport=4000,dport=8000)/Raw('x' * 20)
sendp(pkt, iface="enp5s0f1")
pkt=Ether(dst="90:e2:ba:0a:73:0c")/PPPoE(sessionid=0x7)/PPP(proto=0x21)/IP(src="4.4.4.1",dst="3.3.3.2")/UDP(sport=4000,dport=8000)/Raw('x' * 20)
sendp(pkt, iface="enp5s0f1")

检查 testpmd verbose 输出, 2个数据包分别到了 queue 4queue 1:

testpmd> set verbose 8
testpmd> port 0/queue 4: received 1 packetssrc=84:8F:69:FE:ED:E0 - dst=90:E2:BA:0A:73:0C - type=0x8864 - length=70 - nb_segs=1 - RSS hash=0x7054557c - RSS queue=0x4 - hw ptype: L2_ETHER_PPPOE L3_IPV4_EXT_UNKNOWN L4_UDP  - sw ptype: L2_ETHER  - l2_len=14 - Receive queue=0x4ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
port 1/queue 4: sent 1 packetssrc=84:8F:69:FE:ED:E0 - dst=90:E2:BA:0A:73:0C - type=0x8864 - length=70 - nb_segs=1 - RSS hash=0x7054557c - RSS queue=0x4 - hw ptype: L2_ETHER_PPPOE L3_IPV4_EXT_UNKNOWN L4_UDP  - sw ptype: L2_ETHER  - l2_len=14 - Send queue=0x4ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
port 0/queue 1: received 1 packetssrc=84:8F:69:FE:ED:E0 - dst=90:E2:BA:0A:73:0C - type=0x8864 - length=70 - nb_segs=1 - RSS hash=0x7f119e69 - RSS queue=0x1 - hw ptype: L2_ETHER_PPPOE L3_IPV4_EXT_UNKNOWN L4_UDP  - sw ptype: L2_ETHER  - l2_len=14 - Receive queue=0x1ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
port 1/queue 1: sent 1 packetssrc=84:8F:69:FE:ED:E0 - dst=90:E2:BA:0A:73:0C - type=0x8864 - length=70 - nb_segs=1 - RSS hash=0x7f119e69 - RSS queue=0x1 - hw ptype: L2_ETHER_PPPOE L3_IPV4_EXT_UNKNOWN L4_UDP  - sw ptype: L2_ETHER  - l2_len=14 - Send queue=0x1ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN

卸载 DDP PPPoE profile:

testpmd> port stop 0
testpmd> ddp del 0 /sdd/tmp/ppp-oe-ol2tpv2.pkgo.bak
testpmd> ddp get list 0
Profile number is: 0testpmd>

其他

DDP PPPoE 最新版本为 1.1.6.1, 新定义的 pctype 更详细

testpmd> ddp get info /sdd/tmp/ppp-oe-ol2tpv2.pkg
Global Track id:       0x80000006
Global Version:        1.1.6.1
Global Package name:   PPPoE and PPPoL2TPv2i40e Profile Track id: 0x80000006
i40e Profile Version:  1.1.6.1
i40e Profile name:     PPPoE and PPPoL2TPv2Package Notes:
This profile enables PPPoE and PPPoL2TPv2 parsing
L2TPv2 Tunnel ID extracted to field 46
L2TPv2/PPPoE Session ID extracted to field 47
PPP Protocol ID extracted to field 48List of supported devices:8086:1572 FFFF:FFFF8086:1574 FFFF:FFFF8086:1580 FFFF:FFFF8086:1581 FFFF:FFFF8086:1583 FFFF:FFFF8086:1584 FFFF:FFFF8086:1585 FFFF:FFFF8086:1586 FFFF:FFFF8086:1587 FFFF:FFFF8086:1588 FFFF:FFFF8086:1589 FFFF:FFFF8086:158A FFFF:FFFF8086:158B FFFF:FFFF8086:15FF FFFF:FFFF8086:104F FFFF:FFFF8086:104E FFFF:FFFFList of used protocols:12: IPV413: IPV615: GRENAT17: TCP18: UDP19: SCTP20: ICMP21: PPPoL2TPv222: L2TPv2CTRL23: ICMPV626: L2TPv229: PPPoE33: PAY234: PAY335: PAY444: IPV4FRAG48: IPFRAG52: OIPV453: OIPV6List of defined packet classification types:0: PPPoE IPV4 UDP1: PPPoE IPV4 TCP2: PPPoE IPV4 SCTP3: PPPoE IPV44: PPPoE IPV4 IPFRAG5: PPPoE IPV6 UDP6: PPPoE IPV6 TCP7: PPPoE IPV6 SCTP8: PPPoE IPV69: PPPoE IPV6 IPFRAG10: PPPoL2TPv2 IPV4 UDP11: PPPoL2TPv2 IPV4 TCP12: PPPoL2TPv2 IPV4 SCTP13: PPPoL2TPv2 IPV414: PPPoL2TPv2 IPV4 IPFRAG15: PPPoL2TPv2 IPV6 UDP16: PPPoL2TPv2 IPV6 TCP17: PPPoL2TPv2 IPV6 SCTP18: PPPoL2TPv2 IPV619: PPPoL2TPv2 IPV6 IPFRAG20: PPPoL2TPv222: L2TPv2CTRL24: PPPoEList of defined packet types:154: PPPoE PAY2155: PPPoE IPV4FRAG PAY3156: PPPoE IPV4 PAY3157: PPPoE IPV4 UDP PAY4158: PPPoE IPV4 TCP PAY4159: PPPoE IPV4 SCTP PAY4160: PPPoE IPV4 ICMP PAY4161: PPPoE IPV6 IPFRAG PAY3162: PPPoE IPV6 PAY3163: PPPoE IPV6 UDP PAY4164: PPPoE IPV6 TCP PAY4165: PPPoE IPV6 SCTP PAY4166: PPPoE IPV6 ICMPV6 PAY4167: OIPV4 L2TPv2 PPPoL2TPv2 PAY3168: OIPV4 L2TPv2 PPPoL2TPv2 IPV4FRAG PAY3169: OIPV4 L2TPv2 PPPoL2TPv2 IPV4 PAY3170: OIPV4 L2TPv2 PPPoL2TPv2 IPV4 UDP PAY4171: OIPV4 L2TPv2 PPPoL2TPv2 IPV4 TCP PAY4172: OIPV4 L2TPv2 PPPoL2TPv2 IPV4 SCTP PAY4173: OIPV4 L2TPv2 PPPoL2TPv2 IPV4 ICMP PAY4174: OIPV4 L2TPv2 PPPoL2TPv2 IPV6 IPFRAG PAY3175: OIPV4 L2TPv2 PPPoL2TPv2 IPV6 PAY3176: OIPV4 L2TPv2 PPPoL2TPv2 IPV6 UDP PAY4177: OIPV4 L2TPv2 PPPoL2TPv2 IPV6 TCP PAY4178: OIPV4 L2TPv2 PPPoL2TPv2 IPV6 SCTP PAY4179: OIPV4 L2TPv2 PPPoL2TPv2 IPV6 ICMPV6 PAY4180: OIPV6 L2TPv2 PPPoL2TPv2 PAY3181: OIPV6 L2TPv2 PPPoL2TPv2 IPV4FRAG PAY3182: OIPV6 L2TPv2 PPPoL2TPv2 IPV4 PAY3183: OIPV6 L2TPv2 PPPoL2TPv2 IPV4 UDP PAY4184: OIPV6 L2TPv2 PPPoL2TPv2 IPV4 TCP PAY4185: OIPV6 L2TPv2 PPPoL2TPv2 IPV4 SCTP PAY4186: OIPV6 L2TPv2 PPPoL2TPv2 IPV4 ICMP PAY4187: OIPV6 L2TPv2 PPPoL2TPv2 IPV6 IPFRAG PAY3188: OIPV6 L2TPv2 PPPoL2TPv2 IPV6 PAY3189: OIPV6 L2TPv2 PPPoL2TPv2 IPV6 UDP PAY4190: OIPV6 L2TPv2 PPPoL2TPv2 IPV6 TCP PAY4191: OIPV6 L2TPv2 PPPoL2TPv2 IPV6 SCTP PAY4150: OIPV6 L2TPv2 PPPoL2TPv2 IPV6 ICMPV6 PAY412: OIPV4 L2TPv2 L2TPv2CTRL PAY413: OIPV6 L2TPv2 L2TPv2CTRL PAY416: OIPV4 UDP L2TPv2 L2TPv2CTRL PAY417: OIPV6 UDP L2TPv2 L2TPv2CTRL PAY4testpmd>

但是映射 0: PPPoE IPV4 UDP 到 DPDK flowtype 会报错, 追踪代码发现pctypei40e pmd 中预定义相冲突, 有待进一步研究:

testpmd> port config 0 pctype mapping update  0,1,2,3,4,5,6,7,8 15
invalid pctype or flow type
testpmd> port config 0 pctype mapping update  1,2,3,4,5,6,7,8 15
testpmd> show port 0 pctype mapping
pctype: 36  ->  flowtype: 03
pctype: 33  ->  flowtype: 04
pctype: 15  ->  flowtype: 05
pctype: 16  ->  flowtype: 06
pctype: 17  ->  flowtype: 07
pctype: 46  ->  flowtype: 09
pctype: 43  ->  flowtype: 10
pctype: 41  ->  flowtype: 11
pctype: 44  ->  flowtype: 12
pctype: 45  ->  flowtype: 13
pctype: 63  ->  flowtype: 14
pctype: 01,02,03,04,05,06,07,08  ->  flowtype: 15
testpmd> port config all rss 15

References

Intel® Ethernet Controller 700 Series: Hash and Flow Director Filters

Intel® Ethernet Controller XL710 datasheet

Intel Ethernet 700 Series firmware 6.01

Dynamic Device Personalization for Intel® Ethernet 700 Series

Intel® Ethernet Controller X710/XXV710/XL710 Adapters Dynamic Device Personalization PPPoE Package

DDP PPPoE/L2TPv2/PPPoL2TPv2

DPDK-Fortville Configure RSS Queue Regions Tests

DPDK X710 DDP PPPoE 实践相关推荐

  1. 动手实践看懂深度学习的DP和DDP

    摘要 为了尽可能加快训练,我们会使用两种GPU并行手段,DP和DDP,但是DP其实只会开一个进程去管理,计算资源分配不均,DDP上我们倾向于一张卡开一个进程,使得我们的计算资源能够最大化的利用.本次的 ...

  2. 「分布式训练」使用 DDP 实现程序单机多卡并行指南

    最近在大趋势的影响下,开始染指大模型.由于实验室计算资源的限制,需要使用单机多卡并行的方式运行程序,这里以 BLOOM-560m 模型为例,演示如何通过单机多卡DDP并行的方式微调完成下游任务. 目录 ...

  3. DPDK(Data Plane Development Kit)快速处理数据包 开发平台及接口 简介

    一.网络IO的处境和趋势 从我们用户的使用就可以感受到网速一直在提升,而网络技术的发展也从1GE/10GE/25GE/40GE/100GE的演变,从中可以得出单机的网络IO能力必须跟上时代的发展. 1 ...

  4. lwip协议栈优化_干货分享 | KNI性能优化实践

    友情提示:全文5000多文字,预计阅读时间15分钟 文章源自现网实践对支撑及用户态/内核态网络报文交换场景的认识,欢迎有Linux/FreeBSD内核.网络协议栈.DPDK优化实践经验的同学留言探讨- ...

  5. 从C10K到C10M高性能网络的探索与实践

    原文:https://blog.qiniu.com/archives/4941 优化整理:极客重生 hi,大家好,今天是大年初一,先祝大家新年快乐!今天依然是干货,性能优化大局观,高端食材,值得品尝. ...

  6. 初学者也能看懂的DPDK解析

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由Willko发表于云+社区专栏 一.网络IO的处境和趋势 从我们用户的使用就可以感受到网速一直在提升,而网络技术的发展也从1GE/10 ...

  7. DPDK 网卡收包流程

    Table of Contents 1.Linux网络收发包流程 1.1 网卡与liuux驱动交互 1.2  linux驱动与内核协议栈交互 题外1: 中断处理逻辑 题外2:中断的弊端 2.linux ...

  8. 绝对干货!初学者也能看懂的DPDK解析

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由Willko发表于云+社区专栏 一.网络IO的处境和趋势 从我们用户的使用就可以感受到网速一直在提升,而网络技术的发展也从1GE/10 ...

  9. Intel 万兆网卡调研 X520 X540 X550 X710 X810 对比 10GB/40GB/100GB NIC

    目录 对Intel网卡进行调研 支持SR-IOV的网卡 X520 X540 X550对比 区别 相同 X520 X710 X810系列对比 区别 X520网卡文档翻译 Overview Best ch ...

  10. DPDK官方文档说明

    目录 1.Release Notes 2.Getting Started Guide for Linux/FreeBSD/Windows 3.Programmer's Guide 4.API Refe ...

最新文章

  1. unigui 导入导出数据
  2. MATLAB从入门到精通-MATLAB零矩阵zeros()函数使用方法汇总
  3. [转]vc中socket编程步骤
  4. Sentinel(三)之如何使用
  5. android 多个按钮响应,处理Android Recyclerview中的多个按钮单击并将响应存储在Array或ArrayList中...
  6. collectors 求和_Collectors扩展接口 实现BigDecimal的相加
  7. 【探索篇】测试人员一直疏忽掉的测试用例点,你中枪了吗?
  8. 【思科百难】RIP两个版本之间能够相互通信?
  9. red flag linux双网卡,centos双网卡绑定负载均衡
  10. python使用rpa需要什么插件_使用Python制作ArcGIS插件基础篇——工具介绍
  11. Xcode6 - 更改项目Copyright
  12. 标签树状结构JSP中树状图的代码实现
  13. Maple绘图小技巧1
  14. BT656与BT1120的区别
  15. mongodb查询某个字段数据
  16. 转载:技术大停滞——范式春梦中的地球工业文明5:台阶前的坑:人类社会的宿命
  17. Android7.1.1新增Shortcuts快捷方式,让App更加快捷方便
  18. irving - 初学python
  19. 财务共享建设后,为什么比别人效率低,因为忽略了这个关键点
  20. 【golang学习总结】10 golang中map用法

热门文章

  1. [USACO DEC13] 虫洞
  2. echarts--(2)--创建一个饼图
  3. c语言键盘函数空格,C语言中关于scanf函数的用法
  4. python怎么画小海龟_python画图之“小海龟”turtle
  5. html5 职工入职后台管理系统_丽水微信社群裂变营销管理系统公司
  6. c语言输入身高计算标准体重_体质测试 | 身高 / 体重测试评分标准及方法
  7. java_web tomcat服务器的安装与配置
  8. 计算机机房里面难闻的气味,新装中央空调气味刺鼻为什么?怎么办?-中央空调 异味 刚开...
  9. access mysql oracle_Oracle访问Access实现数据同步
  10. 安卓和php开发融云聊天室,聊天室