• 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的更多相关文章

  1. 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 ...

  2. 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 ...

  3. 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 ...

  4. 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 ...

  5. [蓝牙] 4、Heart Rate Service module

    Detailed Description Heart Rate Service module. This module implements the Heart Rate Service with t ...

  6. 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 ...

  7. Binary Tree Zigzag Level Order Traversal (LeetCode) 层序遍历二叉树

    题目描述: Binary Tree Zigzag Level Order Traversal AC Rate: 399/1474 My Submissions Given a binary tree, ...

  8. 03 Comments in C Programming C编程中的注释

    Comments 注释简介 Let's take a quick break from programming and talk about comments. Comments help progr ...

  9. Sentry(v20.12.1) K8S 云原生架构探索,JavaScript 性能监控之采样 Transactions

    系列 Sentry-Go SDK 中文实践指南 一起来刷 Sentry For Go 官方文档之 Enriching Events Snuba:Sentry 新的搜索基础设施(基于 ClickHous ...

随机推荐

  1. css简介和属性

    CSS指的是层叠样式表(Cascading Style Sheets) 样式定义如何显示HTML元素,通常存储在样式表中. css使用方式 内联式 <!DOCTYPE html> < ...

  2. Java基础/Socket.io双向通信

    Socket.io基础知识(一) (一).socket.io提供了基于事件的实时双向通讯 Web端与服务端实时数据传输方式: 1.Ajax轮询方式(最早应用)   原理:设置定时器,定时通过Ajax同 ...

  3. .net core 学习小结之 PostMan报415

    首先415的官方解释是:对于当前请求的方法和所请求的资源,请求中提交的实体并不是服务器中所支持的格式,因此请求被拒绝. 也就是说我所准备的数据格式并不是后台代码使用的数据格式 后台代码如下 using ...

  4. git关联github远程仓库的问题

    git关联github远程仓库的时候,报fatal: remote origin already exists. 导致这个问题原因可能是之前关联的时候关联错了,再次关联就不行了. 解决办法是: 1.将 ...

  5. maven 异常 提示 cannot be read or is not a valid ZIP file

    Archive for required library: 'D:/repository/Maven/org/springframework/spring-aop/4.3.6.RELEASE/spri ...

  6. 实验3&总结5

    老师:lijin2019,助教:晨晨果 提交作业 实验三 String类的应用 实验目的 掌握类String类的使用: 学会使用JDK帮助文档: 实验内容 1.已知字符串:"this is ...

  7. java 接入微信 spring boot 接入微信

    1.pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...

  8. [Python3] 004 字符串的基本使用

    目录 1. 字符串简介 1.1 作用 1.2 注意点 2. 使用方式 2.1 用引号括起来 少废话,上例子 2.2 单.双引号可以"轮换交替" 少废话,上例子 3. 转义字符 3. ...

  9. Linux菜狗入门(不停更新)

    资料来源:<腾讯课堂> 1, 计算机硬件包括CPU,内存,硬盘,声卡等等 2, 没有安装操作系统的计算机,通常被称为裸机 如果想在裸机上运行自己所编写的程序,就必须用机器语言书写程序 如果 ...

  10. electron实现qq快捷登录!

    之前本来想不写这个功能的,结果客户死活要qq登录! 实在没办法就写了,顺便写个文章!在写之前有两个问题:1: 打开qq授权页面点击页面中的链接会又打开一个页面! .....2: 授权之后是否成功很难去 ...