Packet Transactions: High-level Programming for Line-Rate Switches
- Name of article:Packet Transactions: High-level Programming for Line-Rate Switches
- Origin of the article:Sivaraman A , Budiu M , Cheung A , et al. Packet Transactions: High-level Programming for Line-Rate Switches[J]. 2015.
ABSTRACT:
- custom processing of packets
许多用于拥塞控制、调度、网络测量、主动队列管理、安全性和负载平衡的算法,需要在数据包穿过网络交换机的数据平面时对其进行自定义处理。
要以线速率运行,这些数据平面算法必须在硬件中,而在今天的交换机硬件中,在交换机建成后,算法无法更改,也无法安装新的算法。
- program data-plane algorithms in a high-level language
本文介绍了如何用高级语言编写数据平面算法,并将这些程序编译成可以在新兴的可编程线速交换芯片组上运行的低级微码。
- algorithms create and modify algorithmic state
关键的挑战是这些算法创建和修改算法状态。
- the notion of a packet transaction
实现有状态算法的线速率可编程性的关键思想是包事务的概念:一个原子的、与其他此类代码块隔离的顺序代码块。
我们已经在Domino中开发了这个想法,Domino是一种类似于c的命令式语言,用于表示数据平面算法。我们通过许多例子说明了Domino为表达复杂的数据平面算法提供了一种方便和自然的方法,并说明了这些算法可以在适当估计模具面积开销的情况下以线速运行。
1. INTRODUCTION:
现代数据中心、企业和服务提供商网络中的网络交换机和路由器除了执行标准数据包转发之外,还执行许多任务。随着网络运营商寻求对性能和安全性的更大控制,对路由器的一系列要求只随着时间的推移而增加。
使用数据平面和控制平面机制可以提高性能和安全性。
- process and transform packets, creating and maintaining state
本文主要研究数据平面算法。这些算法处理和转换数据包,在交换机中创建和维护状态
数据平面算法的一个重要要求是能够以交换机的线速率(通常在10-100端口上为10-100gbit/s)处理数据包,因此,这些算法通常使用专用硬件来实现。然而,硬件设计是刚性的,不能在现场重新配置。因此,要实现和部署一个新的算法,甚至修改一个已部署的算法,用户必须投资新的硬件,这是一个耗时且昂贵的提议。
- active networks to network processors to software routers
为了在交换机建成后运行数据平面算法,研究人员和公司多年来一直试图构建可编程路由器,从主动网络到网络处理器再到软件路由器。所有这些努力都牺牲了性能,通常运行比硬件线速率慢一个数量级(或更糟),性能的降低意味着这些系统很少部署在生产网络中。
- does not compromise on data rates
- field-reconfigurable
可编程交换芯片在性能上与最先进的固定功能芯片组具有可竞争性,并且现在已经开始提供。这些芯片实现了一些低级硬件原语,这些硬件原语可以通过软件配置到一个处理流水线中,不会影响数据速率,并且可以现场重新配置。
就可编程性而言,现在这些芯片允许网络运营商指定数据包解析和转发,而不限制在匹配操作表中匹配数据包头时可以执行的协议格式集或操作集。像P4这样的语言正逐渐成为一种以与硬件无关的方式来表示这种匹配操作处理的方式.
- a new abstraction to program and implement data-plane algorithms
通过研究数据平面算法的需求和线速硬件的约束条件,提出了一种新的抽象数据平面算法——包事务。包事务是一个顺序代码块,它是原子的,并且与其他这样的代码块隔离)。包事务允许程序员专注于每个包所需的操作,而不必担心其他并发包。
我们设计并实现了Domino,一种用于数据平面算法的新的领域特定语言(DSL),其核心是包事务。Domino是一种具有C类语法的命令式语言,可能是第一个为线速交换机提供如此高级别的编程抽象的语言。
本文还有三点贡献:
Banzai
a compiler from Domino packet transactions to a Banzai target
an evaluation of Domino
首先,Banzai——一个用于线速可编程交换机的机器模型。Banzai概括和抽象了线速可编程开关的基本特性,模拟了限制线速有状态操作的实际约束。基于这些约束条件,我们引入原子的概念来表示可编程开关的指令集。
其次,从Domino包事务到Banzai目标的编译器。Domino编译器引入了所有编译,编译器接受的所有包事务都将以行速率运行,或者直接被拒绝。与传统的网络处理器或软件路由器一样,以较低的速度运行网络算法没有“滑坡”——编译时,Domino程序以线速运行,或者根本不运行,性能不仅是可预测的,而且是有保证的。
第三,对Domino的评估。我们通过在Domino中编程各种数据平面算法(表4)来评估Domino的表现力,并与P4进行比较。我们发现Domino为有状态数据平面算法提供了一个更简洁、更容易的编程模型。其次,由于现有的可编程交换机不支持我们的数据平面算法所需的原子集,我们设计了一组基于Banzai的编译器目标,并表明这些目标在32 nm标准单元库中是可行的,估计的芯片面积开销小于15%。我们将用Domino编写的数据平面算法编译到这些目标上,以显示目标中原子的选择如何决定它可以支持哪些算法。
2. A MACHINE MODEL FOR LINE-RATE SWITCHES:
Banzai是一个用于可编程线路速率开关的机器模型,用作Domino程序的编译器目标,Banzai抽象了这些体系结构,并用有状态处理单元扩展它们以实现数据平面算法。
2.1 Background: Programmable switches
到达可编程交换机(图1)的数据包由可编程解析器解析,该解析器将数据包转换为头字段。这些头字段首先由入口管道处理,入口管道由按阶段排列的匹配操作表组成。在一个阶段处理一个包可能会修改它的头字段以及该阶段的一些持久状态
- The challenge here is to determine primitives that allow a broad range of data-plane algorithms to be implemented, and build a compiler to map a user-friendly description of an algorithm to the primitives provided by a switch
面对的挑战是如何确定允许实现广泛的数据平面算法的原语,并构建编译器将算法的对用户友好的描述映射到交换机提供的原语。
2.2 The Banzai machine model
Banzai(图1的下半部分)对入口或出口交换机管道的数据平面组件进行建模,该管道由在每个时钟周期上同步执行的多个阶段组成。
2.3 Atoms: Banzai’s processing units
Banzai的每个管道阶段都包含一个原子矢量,矢量中的所有原子在每个时钟周期上并行执行。非正式地说,Atom是Banzai机器本机支持的包处理的原子单元,Banzai机器提供的原子构成了它的指令集。
- An atom’s body of sequential code fully specifies the atom’s behavior and serves as an interface between the compiler and the programmable switch hardware
Atom完成整个代码体的执行,并在处理下一个包之前修改一个包。一个原子还可能包含内部状态,该状态仅对该原子是本地的,并在数据包中持续存在。Atom的序列代码体完全指定Atom的行为,并充当编译器和可编程开关硬件之间的接口。
2.4 Constraining atoms
- Computational limits
计算限制:为了提供线速率性能,原子体必须在一个时钟周期内完成执行
- Resource limits
资源限制:对于任何真正的机器,我们还需要限制每个阶段的原子数量(管道宽度)和管道中的阶段数量(管道深度)。
2.5 What can Banzai not do?
- data-plane algorithms that modify a small set of packet headers and carry out small amounts of stateful or stateless computation per packet
与真正的可编程交换机一样,Banzai非常适合数据平面算法,该算法修改一组小的数据包头,并对每个数据包执行少量的有状态或无状态计算。
3. PACKET TRANSACTIONS:
为了编写数据平面算法,程序员将使用数据包事务在Domino中编写代码(图3A),然后使用Domino编译器编译成Banzai机器的Atom管道(图3B)
3.1 Domino by example
- We use flowlet switching as an example
我们以flowlet交换机为例
flowlet交换是一种负载平衡算法,它在不同的路径上发送来自tcp流的突发数据包(称为flowlet),这些突发数据包被足够大的时间间隔隔开,以确保数据包不会在TCP接收器处无序到达。
3.2 Constraints on the language
- These constraints are required for deterministic performance
Domino的语法类似于c,但有几个约束(表1),这些约束是确定性性能所必需的。内存分配、无边界迭代计数和非结构化控制流都会导致性能的变化,这可能会阻止算法实现线速。
3.3 Triggering packet transactions
- a predicate on packet fields that triggers the transaction whenever a packet matches the guard
数据包事务指定如何处理数据包头和/或状态。为了指定何时运行包事务,我们提供了一个保护:包字段上的predicate(实在不懂怎么翻译这个词好),当包与保护匹配时触发事务。
3.4 Handling multiple transactions
为了适应多个事务,我们设想了一种策略语言来指定成对的保护和事务。
4. THE DOMINO COMPILER:
Domino编译器从Domino程序编译到Banzai目标
- no smooth tradeoff between a program’s performance and its complexity
编译器提供了一个all或nothing模型:如果编译成功,编译器将保证程序在目标上以行速度运行。如果程序不能以线速运行,编译器会直接拒绝程序。程序的性能和复杂性之间没有平滑的折衷
4.1 Normalization
Branch removal 分支移除
Rewriting state variable operations 重写状态变量操作
Converting to static single-assignment form 转换为静态单分配表单
Flattening to three-address code 扁平化为三地址码
4.2 Pipelining
我们使用以下步骤创建PVSM的Codelet管道:
- 1.Create a dependency graph of all statements in the normalized packet transaction.
创建规范化数据包事务中所有语句的依赖关系图
- 2.Generate strongly connected components (SCCs) of this dependency graph and condense them into a directed acyclic graph (DAG)
生成此依赖关系图的强连接组件(SCC),并将其压缩为有向无环图(DAG)
- 3.Schedule the resulting DAG using critical path scheduling [65] by creating a new pipeline stage when one operation needs to follow another
当一个操作需要跟随另一个操作时,通过创建新的管道阶段,使用关键路径调度来调度生成的DAG
4.3 Code generation
- we consider two constraints in any Banzai machine
为了确定codelet管道是否可以编译到Banzai机器,我们考虑了任何Banzai机器中的两个约束:
资源限制,即管道宽度和深度,
管道阶段内原子的计算限制,即Banzai机器提供的原子模板
4.4 Related compiler techniques
Domino编译器采用了编译器文献中的许多技术,但以新的方式对它们进行了调整和简化,以适应行速率交换机领域(表2)
5. EVALUATION:
我们已经做了很多实验来评估Domino:
- evaluate Domino’s expressiveness by using it to program several data-plane algorithm
首先,我们通过使用Domino编程几种数据平面算法来评估Domino的表现力,并将其与在P4中编写它们进行比较。
- Next, we use the Domino compiler to compile the algorithms in Table 4 to these targets
接下来,我们使用Domino编译器将上述算法编译成这些目标,我们通过量化目标的可编程性(它可以以线速率运行的数据平面算法的空间)和目标的性能(它可以支持的最大线速率)之间的权衡得出结论。
5.1 Expressiveness
为了评估Domino的表达能力,我们使用Domino表示了几个数据平面算法(表4)。
- data-plane load balancing, in-network congestion control, active queue management, security, and measurement
这些算法包含各种数据平面功能,包括数据平面负载平衡、网络拥塞控制、主动队列管理、安全性和度量。
在所有这些情况下,算法已经可以作为来自在线源代码的命令代码块使用,将它们转换为Domino语法非常简单。相比之下,在P4中表示这些算法中的任何一个都需要手动提取算法中可以驻留在独立匹配操作表中的部分,然后将这些表链接在一起。
5.2 Compiler targets
- We design a concrete set of compiler targets for Domino based on the Banzai machine model
在Banzai机器模型的基础上,设计了一组具体的Domino编译目标
- Computational limits:
无状态原子更容易设计,因为任意无状态操作可以在不违反原子性的情况下分布在多个管道阶段
- Resource limits:
我们为表3中的有状态原子和单个无状态原子的每个组合设计一个编译器目标,分别确定有状态原子和无状态原子的资源限制
5.3 Compiling Domino programs to Banzai machines
我们现在考虑表3中的每个目标,以及表4中的每个数据平面算法,以确定该算法是否可以在特定的Banzai机器上以线速运行。
5.4 Performance vs. programmability
- While powerful atoms like Pairs can implement more data-plane algorithms, they have a performance cost.
虽然像pairs这样强大的原子可以实现更多的数据平面算法,但它们有性能代价
6. RELATED WORK:
- Abstract machines for line-rate switches
线速交换机抽象机器
- Programmable data planes
可编程数据平面
- Packet-processing languages
包处理语言
7. CONCLUSION:
本文介绍了Domino,一种类似于C的命令式语言,它允许程序员使用包事务编写包处理代码,包事务是原子的顺序代码块,与其他此类代码块隔离。
Domino编译器编译要在Banzai上执行的包事务,Banzai是一个基于可编程线路速率交换体系结构的机器模型。
我们的结果表明,只要算法确实能够以线速运行,就有可能同时拥有熟悉的编程模型和线速性能。Packet Processing语言还处于初级阶段,我们希望这些结果将促进进一步为包处理硬件编程抽象的工作。
Packet Transactions: High-level Programming for Line-Rate Switches的更多相关文章
- C# UTF8的BOM导致XML序列化与反序列化报错:Data at the root level is invalid. Line 1, position 1.
最近在写一个xml序列化及反序列化实现时碰到个问题,大致类似下面的代码: class Program { static void Main1(string[] args) { var test = n ...
- C# LoadXml System.Xml.XmlException: Data at the root level is invalid. Line 1, position 1.
去掉BOM头 writer = new XmlTextWriter(stream, new UnicodeEncoding(false,false)); 如果是UTF8 writer = new Xm ...
- DCI:The DCI Architecture: A New Vision of Object-Oriented Programming
SummaryObject-oriented programming was supposed to unify the perspectives of the programmer and the ...
- Parallelized coherent read and writeback transaction processing system for use in a packet switched cache coherent multiprocessor system
A multiprocessor computer system is provided having a multiplicity of sub-systems and a main memory ...
- [蓝牙] 4、Heart Rate Service module
Detailed Description Heart Rate Service module. This module implements the Heart Rate Service with t ...
- H.264 Profile、Level、Encoder三张简图 (fps = AVCodecContext->time_base.den / AVCodecContext->time_base.num)
H.264 Profiles Profiles are sets of capabilities. If your black box only supports the Baseline profi ...
- Binary Tree Zigzag Level Order Traversal (LeetCode) 层序遍历二叉树
题目描述: Binary Tree Zigzag Level Order Traversal AC Rate: 399/1474 My Submissions Given a binary tree, ...
- 03 Comments in C Programming C编程中的注释
Comments 注释简介 Let's take a quick break from programming and talk about comments. Comments help progr ...
- Sentry(v20.12.1) K8S 云原生架构探索,JavaScript 性能监控之采样 Transactions
系列 Sentry-Go SDK 中文实践指南 一起来刷 Sentry For Go 官方文档之 Enriching Events Snuba:Sentry 新的搜索基础设施(基于 ClickHous ...
随机推荐
- 20191127 Spring Boot官方文档学习(9.1-9.3)
9."使用方法"指南 9.1.Spring Boot应用程序 9.1.1.创建自己的FailureAnalyzer FailureAnalyzer被包装在FailureAnalys ...
- (4.24)【mysql、sql server】分布式全局唯一ID生成方案
参考:分布式全局唯一ID生成方案:https://blog.csdn.net/linzhiqiang0316/article/details/80425437 分表生成唯一ID方案 sql serve ...
- 二、JVM — 垃圾回收
JVM 垃圾回收 写在前面 本节常见面试题 本文导火索 1 揭开 JVM 内存分配与回收的神秘面纱 1.1 对象优先在 eden 区分配 1.2 大对象直接进入老年代 1.3 长期存活的对象将进入老年 ...
- CSUST 8.4 早训
## Problem A A - Memory and Crow CodeForces - 712A 题意: 分析可得bi=ai+ai+1 题解: 分析可得bi=ai+ai+1 C++版本一 #inc ...
- P2294 [HNOI2005]狡猾的商人(差分约束)
P2294 [HNOI2005]狡猾的商人 对于每个$(x,y,w)$,连边$(x-1,y,w),(y,x-1,-w)$,表示前$y$个月的收益比前$x-1$个月的收益大$w$ 这样题目就转化为询问图 ...
- onehot编码解释
什么是One-Hot编码? One-Hot编码,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效. One-Hot编码是分类变 ...
- 简洁的Asp.net菜单控件
http://www.cnblogs.com/ruinet/archive/2009/11/10/1599984.html asp.net自带的菜单控件采用的table和javascript,导致生成 ...
- linux基本命令vi和vim使用详细介绍
vi使用方法详细介绍 vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版 ...
- vue(js)点击目标div以外区域将目标div隐藏
今天开发新项目的时候,有个需求,点击一个div 展示出个弹出窗 弹出窗标题的颜色要跟点击的div图标颜色一致, 所以这就需要我遍历一下多个数据, 然后需要点击弹出div的外部其他区域,隐藏这个div. ...
- ubuntu下docker安装
首先来一个官网安装教程链接:https://docs.docker.com/install/linux/docker-ce/ubuntu/ 目前docker主要有docker-CE 与 docker- ...