DC.p4: programming the forwarding plane of a data-center switch
- Name of article:Dc. p4: Programming the forwarding plane of a data-center switch
- Origin of the article:Sivaraman A , Kim C , Krishnamoorthy R , et al. DC.p4: programming the forwarding plane of a data-center switch.[J]. 2015.
ABSTRACT:
- program the forwarding plane of programmable packet processors
P4编程语言最近被提出作为一种高级语言来编程可编程分组处理器的转发平面,它跨越了从软件交换机到FPGA、NPU和可重构硬件交换机的范围。
本文提出了一个使用P4来表示数据中心交换机的转发平面行为的案例,其功能可与目前在许多数据中心中发现的单芯片共享存储交换机相媲美。通过这个案例研究,我们可以了解特定的P4结构在建模特定数据中心交换机功能时是如何有用的。
我们还概述了需要添加到P4以支持数据中心交换机某些功能的其他语言结构,我们讨论了在这一过程中吸取的一些经验教训,并将这些经验总结为一个建议,说明P4在未来如何发展。
1. INTRODUCTION:
with evolving application requirements
network has become smarter with network switches implementing functions such as access control, tunneling, and overlay formats
互联网一直以强调智能终端和哑网络的架构而自豪。不过,随着时间的推移,随着应用程序需求的不断发展,网络变得更加智能,网络交换机实现了访问控制、隧道和覆盖格式等功能。
- These chips support some flexibility by having a few configurable knobs, but are inherently not future-proof
- a new protocol format usually necessitates an expensive redesign of the chip that can easily take a few years given the long time scales in hardware design
今天,一个典型的交换机实现的功能总共覆盖了7000多个RFC,随着新协议的标准化,这一数字正与日俱增。这个大的功能集通常由交换芯片和支持这些功能的专用硬件来实现,这些芯片通过一些可配置的旋钮来支持一定的灵活性,但本质上不是未来的证明:一种新的协议格式通常需要对芯片进行昂贵的重新设计,考虑到硬件设计的长期规模,这很容易需要几年的时间。
- Over the last few years, several trends suggest a move towards a “top-down” view dictated by the network operator, as opposed to the “bottom-up” view mandated by the switch vendor
在过去的几年中,有几个趋势表明,网络运营商将采用“自上而下”的观点,而不是交换机供应商要求的“自下而上”的观点
首先,软件定义的网络(SDN)将交换机控制平面的公共接口标准化,并允许操作员使用该接口编写自己的控制应用程序。
其次,新兴的交换架构将现场可编程性作为一个明确的目标。
第三,像P4这样的语言提供了语言支持来表达这种架构灵活性。
第四,最近对这些语言的编译器的研究试图缩小语言和硬件之间的差距。
reviewing the P4 language proposal and abstract switch model
focus on one specific P4 program DC.p4
本文首先回顾了P4语言方案和抽象交换模型,并描述了我们的开发环境来编译和执行P4程序。然后我们关注一个特定的P4程序dc.p4,它表示了当前数据中心交换机的典型转发行为。根据我们对dc.p4的经验,我们提出了进化P4的途径。
本文中使用的P4程序是开源的,可以在http://git.io/sosr15-p4上获得,以及编译和执行它的说明。P4编译器前端和运行编译程序的软件开关也是开源的,可在http://p4.org/code.html上找到。
我们希望这些软件工件能鼓励更广泛地采用P4,并导致形成一个驱动P4开发的开源社区。
2. P4 PRIMER
本节简要回顾P4的抽象交换模型和语言结构,为本文的其余部分提供上下文。为了更详细地了解P4及其语法,我们鼓励读者参考描述P4的论文或P4规范作为设计目标。
First, P4 programs are expected to be target-independent
Second, the P4 language itself is protocol-independent in that it doesn’t natively model any specific protocols
P4试图以两种方式进行移植。首先,P4程序应该是目标独立的,允许程序员在不同的实现平台上统一地指定包处理:软件交换机、基于FPGA的交换机、NPU和可重构硬件交换机。第二,P4语言本身是独立于协议的,因为它没有对任何特定的协议进行本机建模。相反,它提供了抽象,允许程序员用一种通用语法表达现有和未来的协议格式。
3. A P4 DEVELOPMENT ENVIRONMENT:
在本文的其余部分中,我们将简要描述用于编写、编译和调试P4程序的开发环境。
- In this paper, the compiler target for our P4 programs is a software switch, to ease the task of prototyping
在本文中,我们的P4程序的编译目标是一个软件交换机,以减轻原型制作的任务。在未来,我们预计P4将被用于为各种目标(如RMT体系结构和英特尔Flexpipe)编程转发平面。
软件交换机及其与控制器关系的框图如图1所示。
- The software switch can be used as a drop-in replacement for Open vSwitch [15] within Mininet [42].
该软件交换机可用作Mininet内的Open vSwitch的替换。
这使得我们可以为更大的测试创建这样的P4编程开关的拓扑。在这种拓扑结构中,交换机像Open-vSwitch一样在终端主机之间转发通信量,允许我们使用闭环通信量(如拥塞控制的TCP)和开环通信量(如Oftest生成的测试包)来测试P4程序。我们用这两种方法对本文提出的P4程序进行了测试。
4. A DATA-CENTER SWITCH IN P4:
我们现在来看一个完整的P4程序dc.p4,它捕获了数据中心交换芯片的转发行为(表1捕获了这个程序包含的特性集)。
- measured both in the number of lines of code and the complexity of its dependency graph, allowing us to evaluate P4 in a realistic setting
该程序总共包含2500多行P4代码、25个入口表、12个出口表和一个直径为10的表依赖关系图(即由表之间的控制和数据依赖关系生成的图)。这个程序有相当大的复杂度,从代码行数和依赖关系图的复杂度两个方面来衡量,允许我们在真实的环境中评估P4。
4.1 Features captured by the original language
- Many features listed in Table 1 can be expressed naturally using the P4 constructs described in the original P4 proposal
表1中列出的许多特性可以使用原始P4方案中描述的P4结构自然地表示出来。
4.2 Language Changes
- Header stacks:
头堆栈:可变长度的头,其中可能有零个或多个相同头类型的实例,在实际的网络协议中很常见。
- Counters:
计数器:到目前为止,我们对P4的讨论还没有涉及转发平面中必须跨数据包持久化的状态。然而,在实践中,计数器形式的持久状态在跟踪遇到特定路由表条目的次数,或由ACL规则丢弃的数据包数量方面非常有用。
- Field lists:
字段列表:字段列表是表示一组字段的抽象,这些字段组合在一起生成单个标量值
- Match-select-action tables:
匹配选择操作表:匹配操作表现在在软件定义的网络中无处不在,Match Action抽象假定从匹配到操作的一对一映射,某些转发平面功能不适合此抽象。
- New actions:
新动作:p4的前提是一小组基本动作可以组合成更大的复合动作
4.3 Features that are not yet modeled in P4
P4最初不是用来表示包的调度方式(例如严格优先级、WFQ等)。这是因为与包转发不同,多路径路由和访问控制包调度要求同时查看多个包以确定下一个要调度的包。因此,今天P4将分组调度视为一个黑盒。考虑到许多使用包调度来提高数据中心应用程序性能的新想法P,很自然地会问如何扩展P4
5. LESSONS LEARNED:
- We set out to evaluate P4 through one specific case study: the forwarding plane of a data-center switch
我们通过一个具体的案例来评估P4:数据中心交换机的转发平面
5.1 What P4 gets right
- P4 has the right level of abstraction for many packetprocessing tasks
P4对于许多包处理任务具有正确的抽象级别。
- P4 has language support for specifying both packet headers and packet parsing
协议不经意间转发,会使用长度和偏移量来操作整个数据包头,需要程序员进行冗长的位操作。相比之下,P4具有指定包头和包解析的语言支持,这使得程序员可以根据头字段而不是位来思考。
5.2 Avenues for improvement
P4目前对模块化和信息隐藏的支持仅限于C的Include语句,这些语句可以嵌入P4代码中,以便将程序中不相关的部分移动到单独的文件中。这是一种相当弱的模块化形式:P4程序中的表可以操作其操作中的任何头字段,从而导致表之间不需要的耦合.
6. LOOKING FORWARD:
- The lessons learned from using P4 to describe a datacenter switch suggest a pathway to evolve P4 in the future
从使用P4来描述数据中心交换机所获得的经验教训表明,P4在未来的发展道路是可行的。
我们在下面概述一些建议:
6.1 Architecture-language separation
- One important observation is that P4 could be much more than just a switch datapath description language
一个重要的观察结果是,P4可能不仅仅是一种交换数据路径描述语言。
- To broaden the scope of P4 and accommodate such scenarios, we propose separating out the abstract switch model from the language definition
为了扩展P4的范围并适应这种情况,我们建议将抽象交换模型从语言定义中分离出来。
6.2 More complete language semantics
- the overflow semantics of integers, exception handling, casting between different data types, and the initial values of table entries and packet attributes
P4的某些方面没有完全规定。示例包括整数的溢出语义、异常处理、不同数据类型之间的转换以及表条目和数据包属性的初始值。
我们建议P4规范这些行为
6.3 Better support for modularity
目前,P4支持嵌入由C预处理器处理的Include语句,允许程序员分离出不同的功能片段。我们建议通过借用主流语言的模块化结构,如词法范围和局部变量来扩展P4。
7. RELATED WORK:
7.1 Programmable forwarding planes
最近人们对交换机的可编程转发平面产生了兴趣。RMT体系结构就是一个例子,商业产品如Intel的Flexpipe、Cavium的Xpliant和Cisco的Doppler具有类似的可编程管道,同时还提供高性能。
7.2 Packet-processing languages
包处理语言
8. CONCLUSIONS:
本文介绍了一个用P4表示数据中心交换机转发平面的实例。
我们的研究结果表明,该语言能够捕获大量的数据中心交换功能。除了这个特殊的案例研究之外,用高级语言表达转发行为还有一个重要的实际好处:交换机的功能可以由网络运营商而不是交换机供应商来决定。操作人员的要求经常变化,允许操作人员更改切换功能可提高响应能力。此外,运营商不再与供应商支持的特定协议格式集绑定。在体系结构上,用高级语言编程交换机的方法将交换机减少到其位流处理的核心功能。如何将这个位流转换成头,然后解析成包,然后根据交换机上的状态进行处理,完全取决于交换机操作员。
如果这种方法取得成果,交换机的功能将只受到程序员想象力的限制,就像今天在CPU上编程一样,我们不必把自己局限于一个“愚蠢的网络”,网络可以从创新中受益,就像过去的终端主机一样。也就是说,在可编程转发飞机变得普遍之前,还有很多工作要做。
本研究探讨一个特别的应用:资料中心交换机。
P4能否表示网络接口卡、无线接入点、蜂窝基站、核心路由器等其他交换设备的转发平面,是我们留给未来工作的问题。我们希望让读者相信,可编程转发平面的方法是卓有成效的。我们鼓励读者扩展我们的P4程序(http://git.io/sosr15-p4),为新的用例编写P4程序,并提出语言改进建议。
DC.p4: programming the forwarding plane of a data-center switch的更多相关文章
- P4: Programming Protocol-Independent Packet Processors
P4: Programming Protocol-Independent Packet Processors 摘要 P4是一门高级语言,用于编程与协议无关的数据包处理器.P4与SDN控制协议相关联,类 ...
- Table View Programming Guide for iOS---(四)---Navigating a Data Hierarchy with Table Views
Navigating a Data Hierarchy with Table Views 导航数据表视图层次 A common use of table views—and one to which ...
- Collection View Programming Guide for iOS---(三)---Designing Your Data Source and Delegate
Designing Your Data Source and Delegate 设计你的数据源和委托 Every collection view must have a data source o ...
- SDN 编程语言 p4(SDN programming language P4)
行业趋势,SND是未来. P4 是未来. SDN is inevitably, and P4 is inevitably. P4 = Programming Protocol-Independent ...
- 2017年P4中国峰会北京站 会议小结
2017 P4 中国峰会 北京 本次会议依然侧重介绍P4,并highlight P4的benifit,大致分为以下几类: 1.学术界 - 未来网络的发展,为何提出P4技术? 未来网络和实体经济.其他学 ...
- P4论文粗读笔记(一)
一 文章名称:SNAP: Stateful Network-Wide Abstractions for Packet Processing 数据包处理的带状态网络概念 发表时间:2016 期刊来源:S ...
- P4 PI库安装
repo:Github PI P4Runtime - a control plane framework and tools for the P4 programming language 这个是P4 ...
- The P4 Language Specification v1.0.2 Introduction部分
Introduction P4 is a declarative language for expressing how packets are processed by the pipeline o ...
- Task Cancellation: Parallel Programming
http://beyondrelational.com/modules/2/blogs/79/posts/11524/task-cancellation-parallel-programming-ii ...
随机推荐
- [19/09/19-星期四] Python中的字典和集合
一.字典 # 字典 # 使用 {} 来创建字典 d = {} # 创建了一个空字典 # 创建一个保护有数据的字典 # 语法: # {key:value,key:value,key:value} # 字 ...
- spring循环依赖是怎么解决的?
回答:循环依赖就是循环引用,就是两个或多个Bean相互之间的持有对方,比如CircleA引用CircleB,CircleB引用CircleA,则它们最终反映为一个环. Spring如何解决循环依赖? ...
- JS案例经验二
一 关键词:鼠标事件的触发 可以在函数中指定让鼠标事件自动触发,而不是必须要鼠标滑过才触发,例如: main.onmouseover(); // 可以把该语句看做是鼠标滑过的模拟动作 main是DOM ...
- Y7000 安装ubuntu16.04.6 的tips :禁用nouveau 、Wifi 问题 、nvidia 驱动安装
由于最近要跑DeepLearning 所以在自己的Y7000上装一个Ubuntu ,自己碰了好多壁 写下来以防止自己忘掉以便后续再用! 配置:i7-8750H +GeForce GTX 1050Ti ...
- Nginx 配置二级虚拟目录访问 Laravel 重写
server { listen 80; server_name _; root /opt/sites; index index.php index.html index.htm; etag on; g ...
- 列表、元组和range
小知识点 s = " 5 " print(int(s)) print(s.replace(" ","")) 结果: 5 5 id()#获取对 ...
- Django、Flask、Tornado的区别?
Django:Python 界最全能的 web 开发框架,battery-include 各种功能完备,可维护性和开发速度一级棒.常有人说 Django 慢,其实主要慢在 Django ORM 与数据 ...
- unsolved question's solution
因为很懒,没有时间,只会口胡等等原因,所以有些题目就不打code了 $luogu:$ P1973 [NOI2011]Noi嘉年华: 时间离散化,预处理一个区间$[l,r]$内的最多活动个数$in[l] ...
- 计算机系统结构总结_Multiprocessor & cache coherence
Textbook:<计算机组成与设计——硬件/软件接口> HI<计算机体系结构——量化研究方法> QR 最后一节来看看如何实现parallelism 在多处 ...
- asp.net table表格表头及列固定实现
http://blog.csdn.net/zdw_wym/article/details/48630337 在开发中常会遇到table表格中列特别多,下拉后,表头就看不见了,水平滚动后,第1.2列就看 ...