P4 概述
2013年, 当时还在德州仪器(TI)的 Pat Bosshart,联合斯坦福Nick、微软研究院的 George 等人在SIGCOMM上提出了一种RMT交换机实现,其实现了网络协议的自定义解析,自定义匹配、处理、转发,这个就是现在Intel Tofino 芯片的原型。但当时相关网络编程语言与编译器还未完善。
2014年,Pat Bosshart 等人进一步完善了编程语言部分,并在 sigcomm2014 上提出了P4,Programming Protocol-independent Packet Processors。P4 通过硬件相关的编译器编译成硬件机器码,下发到硬件中,真正实现硬件的网络可编程。
发展到2021年,P4相关功能、生态逐步完善,近期进展主要体现在三个方面:
- 新特性方面:P4-16不断迭代,P4Runtime、P4架构(PSA,PNA)不断发展;一系列适配P4的开源软件、工具、网络操作系统相继出现,如SONiC,Stratum 等;
- 硬件设备方面:P4 陆续适配新的平台,如CPU用户态的p4-dpdk(实验阶段),内核态的P4-ovs, FPGAs与SmartNiC等;
- 应用场景方面:硬件卸载场景,拥塞场景,安全场景相继开始使用P4。例如,MSR,KAUST与intel提出SwitchML加速分布式机器学习框架;国内安全厂商80%开始接触PISA可编程设备。Intel试图复制其在CPU上的成功方式,开源Tofino开发环境与一些实现细节,相关内容详见OpenTofino Github项目。
未来,P4将在如下三个方向发力:
- 语言设计:语言灵活性,模块化,更多的可编程性,提供更多语言的接口;
- 架构:完善 PSA (Portable Switch Architecture),PNA(Portable NIC Architecture)与 P4-stdlib。特别是发展PNA,以将P4程序部署到智能网卡中,用于包括存储的多种网卡卸载场景,这个可能是P4的一个重要发展方向;
- APIs: 与工业级网络操作系统进行整合;
PSA 进展
Pat Bosshart 在2013年提出的PSA架构主要解决了如下问题:
- 协议头解析可随时调整;
- MAU 的数量、拓扑、宽度、大小可以调整;
- 动作域可以自定义;
- 数据包可以放到特定的队列
Pat Bosshart 在论文中证明了使用 RMT(Reconfigurable Match Tables)模型实现可编程网络的巨大潜力。 对比固定的pipeline交换机,可编程交换机多消耗20%的芯片面积,资源消耗完全在一个可以接受的范围。
可编程芯片拥有4Kbit PHV。 首先,用户定义解析器逻辑(解析图),编译器将用户定义的解析图转换为TCAM表项(256个表项,匹配域40bits,与Table中使用的TCAM物理独立),其中32bits的匹配域为数据报文头,8bits为解析状态。当TCAM表项匹配时,将触发动作执行,如更新parser的状态,将数据报文的指针偏移特定的长度,将数据报文的定义字段赋值到PHV的某个字段等。每个解析器是一个LOOP,一个LOOP可以处理32 Gb/s的带宽,事实上,由于不是每个字段都需要解析,一个Parser可很容易就支持40Gbps的速率。
可编程芯片的精确表通过Cuckoo Hash实现,采用4路,每路1K表项,占用一个SRAM block,一个stage总共106个RAM。 可编程芯片可以在一个时钟内并行读取所有路的值。每个表项保存:1)1个指向action内存(action参数值,从106个RAM块中分配)的指针;2)action大小;3)1个指向指令内存(操作函数,如add header,存储在单独的内存)的指针;4)1个指向下一跳table的指针。
此款可编程芯片最大支持640Gbps,32个stage,每个stage支持200多个action 单元,并行操作,每个单元可对一个PHV字段进行设置,总共超过7000个动作单元。 所有动作单元占总芯片面积的7.4%。动作单元都比较简单,每bit少于100个门。
PNA 进展
2021年5月,PNA将发布v0.5 版本,2021年底,将发布v1.0版本。
在NICs中,有许多与交换机相同的功能,如如 counters, meters, registers, action profiles, action selectors, hash, checksum 等。 也有许多 switch 中不同的功能,如Remote DMA offload (RDMA), IPsec encrypt/decrypt, TCP连接跟踪,TCP segmentation offloading(TSO), large receive offload (LRO), Receive Side Scaling (RSS)等。 因此,需要为网卡专门设计一种种可移植网络架构,PNA,其架构图如下所示,pipeline 被拆成了两部分,1)数据包处理:处理大部分MTU的独立的数据包;2)处理从host内存发出的、或发往hostneic的更多的数据块。更多细节参加PNA v0.5.pdf
P4-DPDK
dpdk 是 intel 的开源项目,intel 在收购 Barefoot 后,很自然地将 P4 与 dpdk 联系了在一起,于是产生了P4-DPDK项目。 通过 P4-DPDK 项目,开发者可以将 P4 语言翻译为dpdk实现,让其跑在多个CPU核上,从而让数据面: 1)代码更加简洁; 2)不需要预定义任何东西,只需定义协议、元数据、table、action,stats等; 3)提供分类器、ACL、FIB、Tunnel、NAT、Meters、Markers、Stats等能力; 3)解耦控制面,直接通过P4Runtime控制。
相关 P4-DPDK 的特性集合如下:
通过 P4-DPDK 工作流程如下:
- 线下处理:将
.p4
的文件转换为.spec
中间文件; .spec
中间文件定义了产生pipeline的P4对象,如header, metedata, actions, tables,datapath等;- P4 action 与 apply代码块被翻译为预定义指令,预定义的指令不是底层X86指令,而是如上所述的P4对象。事实上,p4-dpdk是一个p4虚拟机;
- 外部控制器连接target-agent,加载
.spec
文件,从而使agent可以操作table; - target agent 为每个pipeline产生p4对象,将每个 pipeline 运行到一个cpu核上,一个pipeline一个线程,一个CPU核可以执行一个或多个pipeline。
相关链接:
- P4C compiler: https://github.com/p4lang/p4c/tree/main/backends/dpdk
- DPDK back-end: http://git.dpdk.org/dpdk/tree/lib/pipeline
- DPDK Target agent: http://git.dpdk.org/dpdk/tree/examples/pipeline
其他进展
- Minlan Yu 分享了P4的近似方法,包括 sketch, sampling, coding, lossy compression, distributed algorithmls。并分享了两篇文章:1)PINT: Probabilistic In-band network telemetry;2)Cheetah: Database queries with switch pruning;
- Jennifer 分享了使用可编程设备进行高阶遥测的一些思路;
- ONF 分享了P4用于5G边缘场景的优势与挑战;
- 星融对其4D-P4交换机进行了简单介绍;
- 思科分享了其使用P4设备对无线接入点流量进行聚合的实践;
- google分享了其使用P4实现拥塞控制算法swift的方法,另外,分享了PINS,其将P4Runtime整合到控制面;
- 阿里云Yiqun Cai分享了其从2016年开始使用可编程交换机的历程,并简单分享了其两篇论文NetSeer,与Lyra;
- 百度分享了其在P4方面的实践,主要讲了其XGW产品,方案与案例的XGW类似;
- Keysight Technologies 公司分享了一种通过P4消除重复数据报文的方法;
- Intel Barefoot 提出一种使用P4抽象出一个大交换机的思路;NDP的SAI接口实现;
- Axbryd 提出扩展 p4 已实现流缓存机制的思路,并在p4模拟器上进行了实现;
- Sándor 助理教授提出使用树莓派进行P4教学的思路P4PI,以及分享了将可编程应用于工业互联网的思考;
- intel正在开发P4-DPDK项目,将P4代码编译为DPDK程序;
- Pensando Systems公司提出使用多级内存结构解决P4内存不足的问题的思路;分享了在边缘网络使用P4的价值;
- CodiLime 分享了使用ONOS控制P4可编程网卡的经验;
- Canopus Networks 公司分享了利用P4-PUSH遥测测量宽带的体验;
- Intel的Yanfang Le提出一种使用可编程在rack-scale网络中获得确定性实验的方法;
- OpenNets 公司提出一种使用中间层将不同的编程语言互相转换的思路;
趋势总结
近几年,工业界与学术界在P4上的研究点主要集中在如下几个方面:
- P4的新控制面,如PINS,AsterOS
- P4的新应用场景,如智能网卡、边缘5G、无线接入点
- P4的编译器,如 Lyra,大交换机的概念
- P4的新硬件形态,如星融的X3-T系列产品(使用ARM智能网卡扩展内存)、阿里的XGW(使用FGPA卡扩展内存)、P4多级缓存
- 网络测量,如PINT,NetSeer
- 网内计算,如SwitchML
- 新的P4语言语法,如支持有状态存储
- 新的P4后端,如DPDK
总体来看,更加可编程的P4控制面、智能网卡应用场景、可编程网络(从原来的单点可编程到未来的多点协同编程,大交换机概念,集中编译,分布式部署)、服务化/多租户化可编程资源(用于网络测量、网内计算)是可编程网络趋势。
参考
- SwitchML: Switch-Based Training Acceleration for Machine Learning
- 2021 P4 Workshop
- OpenNets 可编程网络解决方案初创公司(起步阶段)
- Canopus Networks 利用可编程网络与AI可视化网络的初创公司
相关人物
Yubico 科首席产品官。曾任VMware云与网络首席技术官。联合创立Big Switch Networks 与 Voltage Security 公司,分别担任首席执行官/首席技术官。天使投资人。斯坦福大学咨询教授。世界经济论坛科技先锋,麻省理工学院TR100,被评为最具吸引力企业家100强。斯坦福大学的计算机科学博士。
引用最高的论文有:1)Flowvisor: A network virtualization layer-2009