P4模块化编程ClickP4及P4网络模拟器NS4

作者简介:陈雅正,清华大学计算机系大四本科在读
范承泽,白家松,况鹏 清华大学毕军教授实验室

一、P4模块化编程ClickP4的设计与实现

1.1 引言

随着软件定义网以及网络虚拟化等新型网络技术和场景的出现,使得作为网络的基本要素之一的网络协议发展迅速。对于传统网络设备,由于设计复杂和硬件工艺限制等问题,向交换芯片添加新型数据包处理功能功能或新型网络协议堆栈往往需要较长时间,这也就导致了交换芯片更新换代缓慢,导致网络设备难以满足网络协议的发展要求。在这样的背景下,学术界提出了协议无关的可编程数据平面架构。

协议无关的可编程数据平面 ( Programmable Data Plane, PDP ) 架构以匹配动作表 ( Match-Action Table ) 为基础,通过可编程的控制逻辑,构建协议无关的数据包处理流水线,可快速地向芯片中添加新型数据包功能,改变了传统交换设备处理逻辑难以更改和不可编程的困境。领域特定语言P4的提出,为可编程数据平面提供了一套统一的高级编程抽象,使管理员便捷地定义数据平面的数据包处理行为,而无需关心底层设备的实现。相比于传统交换芯片,数据平面可编程技术以及P4语言主要的优势在于可以使管理员高效地定义交换设备中的数据包处理功能,比如负载均衡、接入控制和网络隧道功能等。

随着网络技术的不断发展和网络规模的不断扩大,可以预见可编程数据平面所支持的数据包处理功能也会越来越复杂,网络中的每一个数据包可能会被多个数据包处理功能所处理,并且不同的数据包可能需要不同的数据包处理功能。因此,管理员需要能够根据网络策略的需求编排可编程数据平面所实现的数据包处理功能。目前P4语言以及与之对应的可编程数据平面架构也面临一些局限性:

1.编程复杂:在现有的P4语言中,程序员需要在配置阶段实现满足网络数据包处理策略需求的P4程序。但是,P4程序只提供了可编程数据平面匹配动作表的高层描述,并不能直观地体现数据平面的数据包处理逻辑,造成了P4表达的语义与包处理策略之间存在差异,为程序员编写对应的数据包处理功能代码带来了复杂性;另一方面,随着网络规模和网络所支撑的业务的增长,网络数据包处理策略本身越来越复杂,进一步加大了程序员开发满足网络数据包处理策略需求的P4程序的难度。

2.编排固化:当管理员将P4程序烧到可编程网络设备上之后,就无法动态地调整可编程设备的数据包处理功能,难以适应动态的网络策略的需求。

图1 整体系统框架图

我们提出了 ClickP4,通过P4语言的模块化编程来简化可编程数据平面的编程开发,并且实现可编程数据平面上数据包处理功能的动态编排。在下面一节我们将会介绍关于ClickP4的设计以及所解决的问题。

1.2 设计

ClickP4的主要思想是通过将一个P4程序分解成多个数据包处理功能模块,并通过控制逻辑在运行时动态编排数据包处理功能。下面将通过模块化P4编程、数据包处理框架以及数据包处理流程等三个方面简要介绍ClickP4的设计。

1.2.1 模块化P4编程
模块化P4编程时ClickP4数据包处理功能动态编排的实现基础,其主要解决的是编程复杂的问题。ClickP4中将P4程序分解成数据包处理功能模块,这些数据包处理功能模块能够独立地处理数据包。因此在ClickP4中,管理员并不需要开发复杂的P4程序,而是开发可以在多个P4程序之间复用的数据包处理功能模块,并且在开发阶段无需关心数据包功能模块之间的关系,因为只有在运行阶段管理员才会根据网络策略为每个流定义对应数据包处理功能编排。

1.2.2 数据包处理框架
ClickP4提供了一套灵活的数据包处理框架,可以实现动态的编排模块化的数据包处理功能。图1展示了ClickP4的数据包处理框架,主要包含四种元素:数据包处理功能单元,控制单元,令牌检查器和数据包处理功能编排器。
(1)网络功能单元就是模块化的数据包处理功能,负责独立执行管理员所编写的数据包处理功能。
(2)控制单元则是用来提供管理能力的功能元件,主要用于实现支持动态编排数据包处理功能的控制逻辑;
(3)令牌检查器是一类特殊的管理单元,每一个数据包处理功能单元都有一个令牌检查器与之对应。主要与其他控制单元配合实现动态编排数据包处理功能。
(4)数据包处理功能编排器是为管理员提供抽象接口管理数据包处理功能。这一部分在文章中仅仅是设想,目前还在实现中。

1.2.3 数据包处理流程
下面简单介绍一下ClickP4中数据包处理流程,使读者能够更直观的了解ClickP4的运行方式。图1中的灰色虚线即为数据包在模块化可编程数据平面各个单元模块之间的传递顺序。图2 显示了数据包在ClickP4架构中的处理流程。
(1)数据包通过交换设备端口进入到数据包处理功能流水线中;
(2)令牌检查器判断数据包是否被初始化器处理,并为数据包分配令牌;
(3)在进入数据包处理功能单元之前,令牌检查器会检查每个数据包所携带的令牌,令牌中利用位图标识了对应的数据包处理功能是否处理该数据包;
(4)当执行完一轮数据包处理功能后,循环器会利用有限状态机检测当前数据包是否执行完对应网络数据包处理策略制定的数据包处理功能链,做出是否使用再循环原语对数据包进行重新投递的决定。

图2 数据包处理流程

1.3 实现以及实验验证

ClickP4所设计的模块化可编程架构主要基于P4语言实现,可以运行在 CPU、FPGA、NPU等多种可编程平台上。因为ClickP4要引入控制单元来实现数据包处理功能动态编排,因此会带来一定性能代价。所以我们设计了三种数据包处理功能编排情况对ClickP4的性能代价进行了初步的测量和分析。如图3所示,实验表明ClickP4所带来的性能代价是相对较小的。相比于ClickP4带来的简化P4编程开发以及数据包处理功能动态编排方面的优势,这些性能代价是可以接受的。

图3 实验对比

二、P4网络模拟器NS4设计与预想

2.1 背景

P4是针对于可编程数据平面而生的一种领域特定语言(Domain specific language)。P4的诞生时间尚短但是却受到了学术界的广泛关注和得到了持续的研究投入。

在研究过程中,我们发现对P4程序进行调试、模拟的工具有很多欠缺和可改进的空间。目前主流的P4行为模拟器是bmv2,如果需要测试网络拓扑的话需要搭配mininet。但是bmv2和mininet 的组合进行P4的网络模拟有如下问题:

  • mininet模拟的真实流量,是由计算机内核虚拟出来的网卡进行数据包转发,所以计算机CPU的性能决定了网路模拟的上限。事实上一个3GHz的商用CPU最高可以处理大约10Gbps的数据流量。而最新的P4设备Barefoot Tifino生成拥有6.5Tbps的转发速度。模拟上限和实际流量的巨大差距使得mininet应用场合非常有限。
  • 使用真实流量来进行模拟还会限制模拟网络的规模。P4使用的场景很多都是大规模网络拓扑,如运营商网络、数据中心网络等。这些场景所需要的网络设备成百上千,在这种情况下mininet所带来的单机瓶颈也是非常令人头痛的问题。

另一方面,我们发现如果将P4语言作为一个模块来引入传统网络模拟器也可以带来为网络模拟器带来明显的好处:

  • 如果所需要模拟的是传统网络设备,传统的模拟方式需要人工来为模拟器写一个设备模块,而开发这个设备模块需要利用模拟器所提供的库,也就是说模拟的设备模块和网络模拟器本身是耦合的。而P4作为数据平面的行为描述语言可以直接定义设备行为,即使需要模拟的传统的网络设备,如果用P4语言来描述其行为的话也可以带来如下好处。
  1. 低廉的学习成本:不需要对网络模拟器有先验知识,减少了学习模拟器的成本。同时如果要更换网络模拟器的话,用P4定义的模块不需要重新改动。
  2. 快速移植:在测试之后,用P4定义的设备可以直接移植到P4设备,或者经过P4-FPGA编译器部署到NetFPGA等。

图4 P4语言直接移植

我们认为将P4语言整合进网络模拟器可以有效解决上述问题:一方面为P4提供了新模拟仿真工具,另一方面P4也解决困扰传统模拟器的问题。

2.2 设计与实现

<>

图5 NS4架构

我们将P4的行为模拟器bmv2和与其配套的控制平面模拟器作为一个模块,整合进当前流行的网络仿真器ns-3。NS4实现的流程图和工作流程如Figure 2所示。

1.在编写好P4程序之后:
2.将P4程序编译,并作为参数传入P4模块;
3.在模拟器中为P4模块添加与其它设备连接的网络端口;
4.生成控制平面设备模块,并为P4模块下流表;
5.添加其他的网络组件并生成完整的网络拓扑。

NS4目前由清华大学网研院毕军教授实验室P4项目组开发维护, 预期在1-2个月内完成模型框架之后进行开源,接受社区贡献代码。

目前的工作重点是:
1.在实现P4数据平面模块的基础上,实现控制平面模块程序的编写。
2.目前NS4只支持模拟特定的P4硬件。P4-16标准提出了定义P4硬件的语言规范。未来预计支持更多P4设备的模拟,并开放P4-16语言提供的定义P4设备的接口。

参考文献

Yu Zhou and Jun Bi. 2017. ClickP4: Towards Modular Programming of P4. In Proceedings of the SIGCOMM Posters and Demos (SIGCOMM Posters and Demos '17). ACM, New York, NY, USA, 100-102. DOI: https://doi.org/10.1145/3123878.3132000


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/19959.html
分享到:
相关文章
条评论

登录后才可以评论

SDNLAB君 发表于17-10-13
3