P4 的简介
接下来,我们将通过回答问题的方式来介绍P4。
1. P4 是什么?
- P4是用于控制网络设备(如路由器和交换机)中的数据包转发平面的编程语言。与 C 或 Python 等通用语言相比,P4 是一种域特定的语言,具有许多用于网络数据转发的优化构造。
2. P4 的特点是什么?
2.1 目标独立
- 解释:P4可以在不同类型的机器上编译和运行,比如CPU、FPGA、片上系统、网络处理器和 ASIC。
- 额外补充:P4交换机称呼的来源,P4常用于数据包的转发;
2.2 协议独立
- 解释:P4 甚至不原生的支持 IP、Ethernet、TCP、VxLAN 或MPLS等常见协议。
- 实际处理:P4 程序员需要描述所需协议的标题格式和字段名称,这些协议编译好后,在目标设备进行执行。
2.3 可重新配置
- 解释:P4 能够在部署后更改处理数据包的方式(也许多次);
3. 组成部分
3.1 解析逻辑
- 解释:P4 支持定制数据包头的分析逻辑,比如 TCP/IP协议中使用的典型头部和应用程序中的特定头部。
3.2 标题
- 解释:标题定义描述数据包格式并为数据包中的字段提供名称。该语言允许自定义的标题名称和任意长度的字段,
- 举例:典型的标题格式,802.3以太网标题定义可能称为"以太网",由名为"dest"的 48 位字段组成,然后是 48 位"src"字段,然后是16 位"type"字段。
3.3 解析器
- 解释:P4 解析器是一种有限的状态机器,可走入的分节流,并根据编程解析图提取headers。
- 举例:提取以太网的源、目的地、类型字段,并根据类型字段中的价值执行进一步提取,比如 ipv4、ipv6 或 MPLS。
3.4 状态处理
- P4 支持程序员以 registers、counters、meters 的形式保持状态;
3.5 通用匹配操作表
- P4 的关键组件是一组用户定义的 match-action 表。P4 将所有匹配操作表视为通用,让用户通过控制平面添加匹配操作规则。
3.6 匹配操作处理
- P4的基础是匹配动作管道的概念。从概念上讲,转发网络数据包或帧可以分解为一系列表查找和相应的头操作。在 P4 中,这些操作称为操作,通常包括诸如根据所学转发状态的查找结果将字节字段从一个位置复制到另一个位置等内容。P4 仅处理数据包转发设备的数据平面。它没有指定控制平面,也没有指定控制平面和数据平面之间通信状态的任何确切协议。相反,P4 使用表的概念来表示转发平面状态。必须提供控制平面和各种 P4 表之间的界面,以便控制平面在程序中注入/修改状态。此接口通常称为程序 API。
3.7 表
- 解释:P4 表包含用于转发数据包的状态。表由查找键和相应的一组操作及其参数组成。
- 举例:将一组目标 MAC 地址存储为查找键,相应的操作可能会在设备上设置输出端口,并/或增加计数器。表及其关联操作几乎总是按顺序链接在一起,以实现完整的数据包转发逻辑,尽管抽象地,可以构建一个包含所有查找关键信息和完整输出操作集的单个表。
3.8 操作
- 解释:P4 中的操作描述数据包字段和元数据操作。在 P4 上下文中,元数据是关于一个未直接从解析器中提取的包的信息;
- 举例:帧到达的输入界面,示例操作的英文描述可能是"逐个减损 IPv4 TTL字段"或"将输出端口表中的 MAC 地址复制到传出的包头中"。 P4 定义所有目标必须提供的标准元数据以及由特定目标的作者提供的目标特定元数据。
4. 几种典型芯片
4.1 FPGA
-
简单理解:怎么锻造怎么做,出厂后,还可以灵活锻造;
-
解释:FPGA (Field Programmable Gate Array,现场可编程门阵列),FPGA工程师的任务就是通过改变物理上的连接关系,实现各种逻辑和运算功能;
-
优点:FPGA最强大的地方在于,可以灵活实现各种结构,对事件进行即时响应,可以灵活的支持不同的功能;
-
缺点:不可能对每个门电路进行优化,用户连接只在一定颗粒度上是可行的。比起专用芯片来,速度慢、功耗大。
受工艺限制,比起专用芯片来,量产成本高很多。
4.2 CPU
-
简单理解:怎么编程,怎么做;
-
解释:CPU(Central Processing Unit,*处理器),它在电路板上的地位是配置和控制其它所有设备;
4.3 ASIC
- 简单理解:让你怎么用,你就怎么用;
- 解释:ASIC(Application Specific Integrated Circuit,专用集成电路),为了应对某一特定领域大量的需求,优化到每一个门电路,在性能上做到极致;
- 好处:好处是批量生产成本低、速度快(比FPGA更迅速)、能耗低;
- 缺点:牺牲了通用性,主要功能无法更改;
4.2 GPU
- 解释:GPU(Graphic Processing Unit,图形处理器),用于分担CPU对显示部分主要的工作量;
- 好处:比较灵活的配置多进程,并行计算能力比CPU有数十倍的提升;
- 缺点:顺序运算能力远不如CPU;
- 应用:通常用于并行计算加速,跟图形已经没有关系了;
4.3 TPU
- 解释:TPU(Tensor Processing Unit,张量处理器),谷歌为了深度学习开发的芯片;
- 优点:对矩阵的运算做了优化,适配自己的深度学习软件框架TensorFlow;
- 缺点:由于深度学习的算法目前还处于迅速演进过程中,对深度学习ASIC的高度定制,比如针对某种神经网络的定制,是件高风险的事情。也许上午花了上千万定制的ASIC刚刚问世,下午就出现一种效率提高10倍的算法,那这块ASIC也就几乎没有什么价值了;
参考文献
- Programming Protocol-Independent Packet Processors, SIGCOMM, 2014.