P4Spec笔记

Overview

P4(Programming Protocol-independent Packet Processors)是可编程交换机(其实也支持很多不同设备,如NIC、FPGA、路由等)数据平面定义自定义如何处理packet的一种语言。即只实现data plane的功能以及部分与control plane的通信接口。

下图给出传统固定功能交换机与P4可编程交换机的区别。

传统交换机中,数据平面的功能由芯片厂商决定,因此控制平面可以修改的数据平面中的表项也是固定的。

而可编程交换机中,最大的区别在于:

  1. 数据平面的功能不再是固定的,而是通过用户编写的P4程序决定。因此也不会再有内置的可支持网络协议。
  2. 控制平面与数据平面的通信channel与之前相同,但修改的table和有状态的object由p4程序决定。编译器会生成控制平面与数据平面通信的API。

关键部分:header定义、parser解析序列定义、MATable(构建lookup key,用key查找action,执行对应action)、control flow、external object(如checksum、hash等hard-wired)、用户定义metadata、intrinsic metadata(architecture提供,如报文进入的端口号)。

上图为p4的正常工作流程。可以看到,编译完p4程序生成的一个是dataplane runtime(对应代码的configuration),一个是控制平面管理数据平面的API。

因为p4不支持loop(只有parser可以包含,但实际上编译器还是会展开,并且循环的层数也有限制),因此p4程序的计算复杂度是线性的,某种程度上保证了能够快速处理packet。

16相比14的区别在于将很多feature都放到library中(如counter、checksum以及meter)。

Architecture Model

architecture可以看做是程序和target之间的contract。厂商需要提供一个p4编译器和对应architecture的定义。

上图是两个可编程组件的interface示例,其中control register/signal实际就是architecture定义的intrinsic metadata。同时还可以使用自定义metadata来操作。

还可以调用architecture提供的内置extern object & function,这种extern重点要看的是提供的接口。

Data Plane interface

1
2
3
control MatchActionPipe<H>(in bit<4> inputPort,
inout H parsedHeaders,
out bit<4> outputPort);

定义了一个可编程block MatchActionPipe。其中第一个参数是一个4比特的inputPort(输入,无法修改),第二个参数是一个类型为H的object(既是输入也是输出),第三个参数是一个4比特的outputPort(初始值一开始未定义,可以修改)

1
2
3
4
5
6
7
extern Checksum16 {
Checksum16(); // constructor
void clear(); // prepare unit for computation
void update<T>(in T data); // add data to checksum
void remove<T>(in T data); // remove data from existing checksum
bit<16> get(); // get the checksum for the data added since last clear
}

P4Spec笔记
http://example.com/2022/11/21/P4Spec笔记/
作者
Jiayi Guo
发布于
2022年11月21日
许可协议