摘要:

尽管可编程NIC可以提供更好的可扩展性以处理不断增长的网络工作量,但为硬件中的有状态网络功能编程提供表达能力却又简单的抽象仍然是一项研究挑战。

我们使用FlowBlaze解决了这个问题,FlowBlaze是一种开放式抽象,用于在硬件中构建有状态的数据包处理功能。该抽象基于扩展有限状态机(EFSM),并引入了流状态的显式定义,从而允许FlowBlaze利用流级并行性。 FlowBlaze具有表现力,支持各种复杂的网络功能且易于使用,对程序员隐藏了底层硬件实现问题。

我们在NetFPGA SmartNIC上实现FlowBlaze,实现了极低的延迟(大约几微秒),消耗的功率相对较小,可以保持成千上万个流的每个流状态,并产生40 Gb / s的速度,从而在更新的FPGA型号上实现更高的速度。

背景/问题:

网络基础设施需要一组不断发展的网络功能才能可靠地运行。鉴于现代网络的灵活性以及持续支持新应用程序的需求,运营商已转向此类功能的纯软件实现,这具有许多好处,包括可编程和易于管理。虽然网络操作必不可少,但网络功能会带来开销,而且由于它们位于网络流的路径上,因此它们增加了网络数据包的端到端延迟,并增加了运行基础架构的总体成本,需要额外的计算资源,即CPU内核

为了解决这个问题,过去几年来,人们引入了高效的可编程网络设备,这些设备可以减轻CPU处理网络数据包的负担。例如,微软在其数据中心中部署了基于FPGA的SmartNIC。这些设备可以节省CPU使用率并减少服务器PCIe总线上的流量,从而将网络功能的数据包处理延迟提高了一个数量级以上。不利的一面是,对SmartNIC进行编程以支持新的网络功能需要硬件设计专家,尽管技术巨头可以组建并分配一个专门的团队来完成任务,但大多数公司无法做到。

最近的网络编程抽象(例如P4)的明确目标是简化基于FPGA的网络设备的编程。但是,它们在描述需要保持每流状态的网络功能方面有局限性。

解决办法:

引入FlowBlaze(一种扩展了诸如P4或Microsoft的GFT之类的匹配动作语言的抽象)来解决这些缺点,以简化对L2-L4大状态函数集的描述,同时使它们适合在基于FPGA的SmartNIC上的实现(以线速实现)。

FlowBlaze的目标是提供一种系统,使几乎没有硬件设计专业经验的程序员可以在基于FPGA的SmartNIC快速实现或快速更新无状态和有状态的数据包处理功能

FlowBlaze针对以下四个要求(四个要求依次记为R1-R4)

  • 高性能:支持网络功能,这些功能可实现40-100Gb / s的吞吐量,同时每个数据包的处理延迟最多为几µs。

  • 状态可伸缩性:支持在细粒度的每流状态下运行的功能,并能够存储大量网络流(例如,最多100K)的流状态,流的数量不应影响处理延迟。

  • 易于使用:允许程序员仅专注于实现所需的功能,而不会陷入棘手、耗时的硬件性能优化。此外,硬件约束对应用程序设计的影响很小,并且程序员几乎不需要硬件设计专业知识来实现功能。

  • 富有表现力:系统的编程抽象应允许用户描述各种潜在的有状态功能,包括复杂的功能(例如,异常检测,连接跟踪等)。

实现细节:

考虑到这些要求,我们回顾了现有技术,发现对于FPGA目标,现有系统仅部分满足这些要求(参见下表)。

实际上,我们可以将先前的方法分为两类:

通用编程框架:通用编程框架是完全依赖于FPGA重新编程功能来实现新功能的解决方案,着眼于简化FPGA编程的语言和框架。在这里,我们包括硬件描述语言(HDL)和高级综合(HLS)系统。 HDL(例如Verilog)是FPGA的低级编程方法,像基于OpenCL的HLS系统一样,可以通过采用高级语言来提高易用性(R3),但是需要硬件专业知识,因为必须正确设计和注释代码以确保综合过程成功提供高性能实现。此外,更新功能需要对FPGA设计进行新的综合和更新,而这一过程需要数小时的时间。

匹配动作抽象:匹配动作抽象是基于匹配动作表(MAT)模型。 MAT是一种有效且广泛应用的工具,可将网络功能描述为由解析器和可变数量的match和action块组成的管道。解析器和动作逻辑通常相当稳定,因此可以在配置时进行编程,而匹配表的条目则在运行时插入,可用于即时更改功能的实现。 MAT是描述L2-L4网络功能的好工具,但是当前可用的MAT抽象仅支持无状态功能,因此程序员无法依赖于先前接收到的包的功能指定下一个包的处理。

我们一次满足所有四个要求吗? MAT的广泛应用表明,它们可能是提供有效抽象来描述网络功能的良好起点,并且像Domino一样已经朝着扩展MAT以支持有状态功能的方向发展。 因此,我们的问题归结为在匹配动作抽象中支持每个流状态。

诚然,FAST 和OpenState 遵循此方向来提供有状态的数据包处理抽象,从而明确定义流状态。在这两种情况下,数据包都被分组在程序员定义的网络流中(如MAT中),并且流与有限状态机(FSM)关联,然后程序员定义FSM的过渡表,该表用于在处理数据包时更新相应FSM的状态,按照这种推理,FSM似乎是将无状态MAT转换为有状态元素的不错选择。不幸的是,FSM是不可扩展的(R2),FSM由状态集S,输入I,输出O以及转换关系T描述:S×I→S×O。由于FSM需要明确定义所有可能的状态si∈S,因此系统在这种情况下可能会发生称为状态爆炸的现象。

The FlowBlaze Abstraction

为了在提供可扩展的抽象的同时保留FSM的大多数优良特性,我们求助于扩展有限状态机(EFSM)

EFSM通过引入以下内容扩展了FSM模型:

  • 变量D以描述状态

  • 使此类变量上的函数F触发转换(fi:D←{0,1},fi∈F)

  • 更新变量值的函数(ui:D←D,ui∈U)

EFSM的过渡关系表示为T:S×F×I→S×U×O

尽管采用EFSM可以部分解决状态爆炸问题,但我们仍然需要对其进行调整以确保高效的硬件实现。 我们需要解决两个问题:

  • 状态可伸缩性:标准EFSM对于系统中的每个流程都需要一个单独的过渡表(即EFSM的说明)

  • 流并行性:EFSM状态定义不包括流状态的概念,这是我们需要利用流级并行性的概念。

Machine Model

FlowBlaze的机器模型(参见下图)扩展了RMT 描述的MATs管道模型。与RMT一样,FlowBlaze数据包头(包括数据包元数据)通过管道的元素进行处理以定义转发动作,每个元素可以是无状态的或有状态的。无状态元素是MAT,类似于RMT1中使用的元素,有状态元素实现EFSM定义,管道可以结合无状态元素和有状态元素。

有状态元素的体系结构与MAT有两个显着区别:(1)这种元素在通常的匹配部分之前具有流上下文表(2)该元素将动作分为(状态)更新功能和数据包动作。

更详细地,如上图所示(标记为“有状态元素”的框),数据包处理涉及以下顺序步骤:

  1. 流上下文表:当数据包头进入元素时,它与相应的流上下文相关联。

  2. EFSM表:数据包的标头和元数据以及提取的流上下文将传递到EFSM表。该表是传统MAT的扩展,除了支持在打包程序标头字段上进行匹配外,还可以在状态标签s上进行匹配并评估启用功能。

  3. 更新功能:标头和元数据,更新指令以及状态标签的新值将传递到更新功能块。

  4. 行动:像在MAT中一样,此块将操作应用于数据包头。与MAT不同的是,流上下文寄存器的值以及全局寄存器的值也可以被使用。

FlowBlaze Programming

FlowBlaze在NIC中直接部署,其编程类似于对P4设备进行编程。在配置时,程序员必须定义解析器,MAT和EFSM转换表的匹配字段以及操作,这些操作现在还包括状态更新功能,改变这些组件需要对FPGA设计进行新的综合。

幸运的是,这些是函数更改频率较低的部分。在运行时,程序员通过配置有状态元素的流定义,选择已解析的标头字段的子集并将所需的条目写入MAT和EFSM转换表中,来定义其网络功能的逻辑,这类似于P4和OpenFlow设备的运行时编程。实际上,我们扩展了OpenFlow协议,以便从基于python的RYU OpenFlow控制器中写入此类条目。

值得强调的一件事是,程序员可以快速地实验和更新其功能逻辑,因为对网络功能逻辑进行编程就像将表写入条目一样快,与其他的解决方案不一样,这需要更新一个的综合的FPGA设计。

讨论与思考:

FlowBlaze始终会具有一定的硬盘限制,例如DoS攻击可能会利用这些限制。为了解决这个问题,FlowBlaze提供了一些原语,程序员可以使用它们来明确处理“流上下文表”已满的情况。例如,实现功能之前可以实现带有SYN泛洪检测功能的元素,以便可以丢弃执行SYN攻击的主机的流量,从而避免在Flow中创建大量后续元素的上下文表条目。

论文阅读:FlowBlaze: Stateful Packet Processing in Hardware的更多相关文章

  1. Reading Fast Packet Processing A Survey

    COMST 2018 主要内容 这是一篇有关快速包转发的综述,先介绍了包转发的有关基础知识和背景,具体介绍了包转发的主流方法,对这些方法进行了细致详尽的比较,最后介绍了最新的方法和未来的研究方向. 包 ...

  2. 论文阅读笔记 Improved Word Representation Learning with Sememes

    论文阅读笔记 Improved Word Representation Learning with Sememes 一句话概括本文工作 使用词汇资源--知网--来提升词嵌入的表征能力,并提出了三种基于 ...

  3. Fast Packet Processing - A Survey

    笔记是边读边写的旁注,比较乱,没有整理就丢上来了. 可以说不仅要说fast packet process servey,也同时是一篇packet process的综述了.packet processi ...

  4. PatentTips - Data Plane Packet Processing Tool Chain

    BACKGROUND The present disclosure relates generally to systems and methods for providing a data plan ...

  5. Nature/Science 论文阅读笔记

    Nature/Science 论文阅读笔记 Unsupervised word embeddings capture latent knowledge from materials science l ...

  6. 论文阅读(Xiang Bai——【PAMI2017】An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition)

    白翔的CRNN论文阅读 1.  论文题目 Xiang Bai--[PAMI2017]An End-to-End Trainable Neural Network for Image-based Seq ...

  7. BITED数学建模七日谈之三:怎样进行论文阅读

    前两天,我和大家谈了如何阅读教材和备战数模比赛应该积累的内容,本文进入到数学建模七日谈第三天:怎样进行论文阅读. 大家也许看过大量的数学模型的书籍,学过很多相关的课程,但是若没有真刀真枪地看过论文,进 ...

  8. 论文阅读笔记 - YARN : Architecture of Next Generation Apache Hadoop MapReduceFramework

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...

  9. 论文阅读笔记 - Mesos: A Platform for Fine-Grained ResourceSharing in the Data Center

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...

随机推荐

  1. React 中的函数式思想

    函数式编程简要概念 函数式编程中一个核心概念之一就是纯函数,如果一个函数满足一下几个条件,就可以认为这个函数是纯函数了: 它是一个函数(废话): 当给定相同的输入(函数的参数)的时候,总是有相同的输出 ...

  2. macOS Sierra 如何安装任何来源的软件

    为了安全性考虑,macos是要手动勾选来自任何来源的选项才可以安装第三方应用软件,系统升级后,在新的系统中这一项是默认不显示的,如果想要出现和这一勾选选项,可以从终端中输入 sudo spctl -- ...

  3. oracle 安装后参数调整

    关闭11g 新特性 开归档 oracle 11g安装完成需修改:1.关闭审计alter system set audit_trail=none scope=spfile sid='*'; 防止ORA- ...

  4. python:enumerate 函数

    说明 enumerate()是python的内置函数: 对于一个可迭代的(iterable)/可遍历的对象(如列表.字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值 多用于 ...

  5. Docker 环境下部署 redash

    环境: centos7 官网:https://redash.io/help/open-source/dev-guide/docker 一.安装步骤 1.虚拟机安装 安装vmware,并安装centos ...

  6. TensorFlow入门——安装

    由于实验室新配了电脑,旧的电脑就淘汰下来不用,闲来无事,就讲旧的电脑作为个人的工作站来使用. 由于在旧电脑上安装的是Ubuntu 16.04 64bit系统,系统自带的是Python 2.7,版本选择 ...

  7. Linux版本显示和区别32位还是64位系统

    查看已经安装的Linux版本信息 1.cat /etc/issue 查看版本 [root@master master]# cat /etc/issue \S Kernel \r on an \m 2. ...

  8. mybatis在spring(Controller) 中的事务配置问题

    这两天一直在折腾一个小工具,非常简单的移动端webapp. 用的是jquery mobile + ssm. 写的差不多的时候,想到解决事务问题,本来以为非常简单,只要在配置文件中加上相应的mybati ...

  9. 12、rpm

    1.什么是rpm 由红帽开发用于软件包的安装 升级 卸载 查询 2.rpm包是什么样? 组成部分是什么样的? zip-3.0-11.el7.x86_64.rpm #el7 zip-3.0-1. el6 ...

  10. deep_learning_Function_tensorflow_unpack()

    tf.unpack(A, axis)是一个解包函数.A是一个需要被解包的对象,axis是一个解包方式的定义,默认是零,如果是零,返回的结果就是按行解包.如果是1,就是按列解包. 例如: from te ...