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

传统交换机中,数据平面的功能由芯片厂商决定,因此控制平面可以修改的数据平面中的表项也是固定的。
而可编程交换机中,最大的区别在于:
- 数据平面的功能不再是固定的,而是通过用户编写的P4程序决定。因此也不会再有内置的可支持网络协议。
- 控制平面与数据平面的通信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 |
|
定义了一个可编程block MatchActionPipe。其中第一个参数是一个4比特的inputPort(输入,无法修改),第二个参数是一个类型为H的object(既是输入也是输出),第三个参数是一个4比特的outputPort(初始值一开始未定义,可以修改)
1 |
|