PISCES:可编程的,协议独立的软件交换机

摘要

虚拟机监视器使用软件交换机来引导数据包进出虚拟机(vm)。这些交换机经常需要升级和定制,以支持新的协议头或用于隧道和覆盖的封装,以改进测量和调试功能,甚至添加类似于中间盒的函数。软件交换机通常基于大量的代码,包括内核代码,改变交换机是一项艰巨的任务,需要精通网络协议的设计和开发、测试,以及维护一个庞大而复杂的代码库。改变软件交换机转发数据包的方式不需要对其实现有深入的了解。相反,应该可以指定如何用高级领域特定语言(DSL)(如P4)处理和转发数据包,并将其编译为在软件交换机上运行。我们介绍了PISCES,它是一个软件交换机,派生于Open vSwitch (OVS),一个硬连接的hypervisor交换机,它的行为是使用P4定制的。PISCES不是硬连接到特定的协议;这种独立性使得添加新特性变得很容易。我们还将展示编译器如何分析高级规范以优化转发性能。我们的评估表明,PISCES的性能与OVS相当,PISCES程序的长度约为OVS源代码的1/40。

简介

软件交换机,如Open vSwitch (OVS),在现代数据中心中扮演着关键角色:除了少数例外,每个进出虚拟机(VM)的数据包都要经过软件交换机。此外,在这种环境中,服务器的数量大大超过物理交换机。因此,充满运行虚拟机监视器软件的服务器的数据中心所包含的软件交换机也远远多于硬件交换机。同样,由于每个虚拟机监视器托管多个虚拟机,这样的数据中心拥有比物理以太网端口更多的虚拟以太网端口。

软件虚拟机监视器交换机的主要优点之一是,它比硬件交换机更容易升级。因此,虚拟机监视器交换机支持新的封装头、改进的故障排除和调试特性,以及类似于中间件的功能,如负载平衡、地址虚拟化和加密。未来,随着数据中心所有者自定义和优化他们的基础设施,他们将继续向虚拟机监视器交换机添加特性。

每个新特性都需要自定义虚拟机监视器的切换,但是进行这些自定义比表面上看起来要困难得多。首先,大多数支持快速包转发的机制都位于内核中。编写内核代码需要大多数网络运营商缺乏的领域专业知识,因此为开发和部署新特性带来了很大的障碍。最近的技术可以加速用户空间中的包转发,但这些技术仍然需要大量的软件开发专业知识,并熟悉大量、复杂和复杂的代码库。此外,定制不仅需要将更改合并到开关代码中,还需要随着底层软件的发展而维护这些定制,这可能需要大量的资源。

要改变软件交换机转发数据包的方式,不需要对交换机是如何实现的了如指掌。相反,应该可以用特定于领域的语言(DSL)(如P4)指定自定义网络协议,然后将其编译为用于虚拟机监视器切换的自定义代码。这样的DSL将支持自定义交换机的转发行为,而不需要更改底层交换机实现。将自定义协议实现与底层交换机代码解耦也使得维护这些自定义变得更容易,因为它们仍然独立于底层交换机实现。使用标准化的DSL,定制也可以移植到其他支持相同语言的硬件或软件交换机上。

借用硬件交换机的类似趋势的一个关键观点是,底层交换机应该是一个基板,可以很好地处理高速数据包,但不绑定到特定的协议。在极端情况下,交换机被认为是协议独立的,这意味着在它接收到关于如何处理数据包的指令(通过DSL)之前,它不知道协议是什么。换句话说,协议由协议作者创建的DSL中编写的程序表示。

我们将类似的理念应用于软件交换机。我们假设在DSL中编写的程序指定了要解析的包报头和匹配操作表的结构(例如,匹配哪个报头字段以及对匹配的报头执行哪些操作)。底层的软件基板是一个通用引擎,经过优化以程序指定的形式解析、匹配和处理数据包头。

然而,在DSL中表达这些定制需要编译从DSL到在交换机中运行的代码。与手动实现固定协议的交换机相比,这种协议编译过程会降低底层实现的效率,从而降低性能。编译过程与硬件交换机不同,在硬件交换机中,给定有限的资源,目标是优化面积、延迟和功率等指标,同时满足资源约束。我们在本文中的目标是(1)量化在这样的DSL中表达自定义协议所产生的额外成本;(2)设计和评估领域特定的编译器优化,尽可能地减少性能开销。最后,我们证明,通过适当的编译器优化,独立于协议的软件交换机的性能——在高级DSL中支持自定义协议规范而不直接修改低级源代码的交换机——接近于本机虚拟机监视器软件交换机的性能。我们的结果很有希望,特别是考虑到我们的基础代码OVS并不是设计来支持协议独立性的。不过,我们的结果表明,在虚拟机监视器切换中,可编程性的成本可以忽略不计。我们希望我们的研究结果将启发设计新的协议无关的软件交换机,以更高的速度运行。

我们的贡献如下:

  • PISCES的设计和实现,第一个允许在高级DSL中定制协议规范的软件交换机,不需要直接修改交换机源代码。
  • 一个在GitHub上公开的PISCES的开源实现。实现是一种独立于协议的软件交换机,它来自于OVS,由(称为P4的)高级DSL编程而成。
  • 特定于领域的优化和一个后端优化器,以减少使用P4定制OVS的性能开销。我们还在P4中引入了两个新的注释来帮助优化
  • 对PISCES程序的代码复杂性及其转发性能的评估。我们的评估表明,PISCES程序平均比等效的OVS源代码更改短约40倍,而转发性能(即吞吐量)开销仅为2%左右。

我们首先通过描述来自运营网络的真实用例来引出对可定制的虚拟机监视器软件交换机的需求,并介绍P4和OVS的背景信息。

协议无关交换机的需求

我们说PISCES是一个独立于协议的软件交换机,因为它不知道协议是什么,也不知道如何代表协议处理包,直到程序员指定它。例如,如果我们想让PISCES处理IPv4数据包,那么我们需要描述在P4程序中如何处理IPv4数据包。在P4程序中(例如IPv4. P4),我们需要描述IPv4报头的格式和字段,包括IP地址、协议ID、TTL、校验和、标志等。我们还需要指定我们使用一个查找表来存储IPv4前缀,以及我们搜索最长的匹配前缀。我们还需要描述如何减少TTL,如何更新校验和,等等。P4程序捕获整个包处理管道,将其编译为OVS的源代码,OVS指定交换机的匹配、操作和解析能力。

协议无关的交换机有很多好处:

添加新的标准或私有协议头

供应商一直在提出新的协议标头,特别是对于数据中心。私有的、专有的协议也被添加进来,以提供竞争优势,例如,通过在应用程序之间创建更好的隔离,或通过引入新的拥塞标记。在许多情况下,在部署新协议之前,必须升级所有的硬件和软件交换机,以识别报头并正确处理它们。对于硬件交换机,数据中心所有者必须向他们的芯片供应商提供需求,并等待三到四年的时间,如果供应商同意添加新特性的话。在软件切换的情况下,它们必须等待下一个主要的修订、测试和部署周期。即使修改开源软件交换机也不是万能的,因为一旦数据中心所有者直接修改开源软件交换机以添加他们自己的定制协议,这些修改仍然需要与主线代码库进行维护和同步,随着原始开源交换机的不断发展,引入了大量的代码维护开销。可以向P4程序添加新协议的数据中心所有者可以更快地编译和部署新协议

删除标准协议头

数据中心网络通常比传统的校园网和企业网运行更少的协议,部分原因是大多数流量是机器对机器的,许多传统的协议不需要(例如多播)。例如,亚马逊网络服务(AWS)据说只转发使用IPv4头的数据包。因此,完全删除未使用的协议有利于数据中心所有者,从而消除了与旧协议的休眠实现进行交互的任何顾虑。必须支持许多协议已经够糟糕的了;更糟糕的是,必须理解操作人员不打算使用的协议的交互和含义。因此,数据中心所有者经常希望从他们的交换机、网卡和操作系统中消除未使用的协议。从传统交换机中移除协议是困难的;对于硬件来说,这意味着等待新的芯片,而对于软件转换来说,这意味着要通过大量的代码库来提取特定的协议。在PISCES网络中,删除未使用的协议与删除协议规范中未使用的部分并重新编译开关源代码一样简单。

添加更好的可见性

随着数据中心的规模越来越大,应用越来越多,了解网络的行为和运行状况变得越来越重要。故障可能导致巨大的收入损失,随着网络变得更大、更复杂,长时间的调试时间会加剧这一损失。人们越来越感兴趣的是如何让人们更容易地看到网络在做什么。提高网络可见性可能需要支持新的统计数据,生成新的探测包,或添加新的协议和动作来收集交换机状态。用户将希望看到队列是如何演变的,延迟是如何变化的,隧道是否正确终止,以及链接是否仍然是正常的。通常,在紧急情况下,用户希望快速添加可见性特性。让它们随时可以部署,或者能够快速修改转发和监视逻辑,可以减少诊断和修复网络故障的时间。

添加全新的功能

如果用户和网络所有者可以修改转发行为,他们甚至可以添加全新的功能。例如,随着时间的推移,我们会承担更多的复杂的路由交换机,新的拥塞控制机制,跟踪路由,新的负载均衡算法,新方法来减轻DDoS,和新"虚拟-物理"网关功能。如果网络所有者能够升级基础设施以实现更大的利用率或更多的控制,那么他们将知道如何做。如果有了升级用DSL(如P4)编写的程序以向交换机添加新特性的方法,我们可以预期网络所有者将更快地改进他们的网络。

背景

PISCES是一个软件交换机,它的转发行为是使用特定领域的语言指定的。PISCES基于Open vSwitch (OVS)软件交换机,使用P4领域专用语言进行配置。我们在下面描述P4和OVS

领域特定语言:P4

P4是一种领域特定的语言,它表示网络转发元素的流水线应该如何使用下图所示的抽象转发模型处理数据包。在这个模型中,每个数据包首先经过一个可编程的解析器,解析器提取报头。P4程序指定了每个可能的头的结构,以及表示排序和依赖关系的解析图。然后,数据包通过一系列的匹配动作表(MATs)。P4程序指定了每个mat可能匹配的字段和它们之间的控制流,以及每个表允许的操作范围。在运行时(即,当交换机转发数据包时),控制器软件可以根据特定的匹配操作规则添加、删除和修改表项,这些规则符合P4程序的规范。最后,在将报头字段发送到适当的端口之前,发送者会将报头字段写回数据包。

可编程交换机 java 可编程交换机驱动程序_编译器

P4抽象转发模型

我们选择P4是因为它的抽象交换机模型类似于OVS内建语言OpenFlow的模型,它允许我们对带有和不带有P4前端的OVS进行简单的比较。我们考虑了其他备选基础,对于我们的目的,P4足以进行预期的比较。拥有一种通用的方法来表示跨网络中所有管道交换机的转发,并拥有可从一个交换机移植到另一个交换机的代码,这是有好处的。因此,使用相同的语言进行这些实验是有意义的。

软件交换机: Open vSwitch

Open vSwitch (OVS)广泛用于数据中心,作为运行在虚拟机监视器内部的软件交换机。在这种环境下,OVS可以在虚拟接口和物理接口之间交换报文。OVS实现了常见的以太网、GRE、IPv4等协议,以及数据中心中较新的协议。

Open vSwitch虚拟交换机有两个重要的部分,称为慢路径和快路径(即数据路径),如下图所示。慢路径是一个用户空间程序;它提供了OVS的大部分智能。快速路径作为一个缓存层,只包含实现最大性能所需的代码。值得注意的是,快速路径必须将任何导致缓存丢失的包传递给慢路径,以获得进一步处理的指令。OVS包括针对不同环境的单个、可移植的慢路径和多个快路径实现:一个基于Linux内核模块,另一个基于Windows内核模块,另一个基于Intel DPDK用户空间转发。DPDK快速路径可以产生最高的性能,因此我们在工作中使用它;通过额外的努力,我们的工作可以扩展到其他快速路径。

可编程交换机 java 可编程交换机驱动程序_网络_02

OVS转发模型

作为SDN交换机,OVS依赖于控制器的指令来确定其行为,具体使用的是OpenFlow协议。OpenFlow根据匹配操作表的集合指定行为,每个表包含许多称为流的条目。反过来,流由匹配(根据包头和元数据)、指示交换机在匹配结果为true时该做什么的动作和一个数字优先级组成。当一个包到达一个特定的匹配操作表时,交换机找到一个匹配的流并执行它的操作;如果有多个流匹配该报文,则优先级最高的流优先。

完全实现上述行为的软件交换机无法实现高性能,因为OpenFlow数据包经常要经过几个匹配操作表,每个表都需要通用的数据包分类。因此,OVS依赖缓存来实现良好的转发性能。主要的OVS缓存是它的megflow巨流缓存,它的结构很像一个OpenFlow表。巨流缓存背后的思想是,从理论上讲,可以通过计算它们的交叉乘积,将包在遍历OpenFlow管道时访问的所有匹配操作表合并到单个表中。但这是不可行的,因为k个表与可编程交换机 java 可编程交换机驱动程序_字段_03规则的叉积可能包含可编程交换机 java 可编程交换机驱动程序_字段_03规则。巨流缓存的功能有点像延迟计算的跨积:当一个包到达时,如果它不匹配任何现有的巨流缓存条目,慢速路径会计算一个新的条目,对应于理论的跨积中的一行,并将其插入缓存中。OVS使用了许多技术来提高大流量缓存性能和命中率

当一个数据包在超大流量缓存中命中时,交换机处理它的速度比缓存丢失所需要的从快路到慢路的往返速度要快得多。然而,作为一个通用的分组分类步骤,巨流缓存查找仍然有很大的成本。因此,Open vSwitch快速路径实现还包括一个微流缓存,一个从一个五元组数据包映射到一个超大流缓存条目的哈希表。微流缓存查找的结果只能是一个提示,因为巨流通常匹配更多的字段,而不仅仅是五元组,所以微流缓存条目在最好的情况下可以指向最可能的匹配。因此,快速路径必须验证巨流缓存条目确实与数据包匹配。如果匹配,则查找成本仅为单个哈希表的查找成本。这种查找成本通常比一般的包分类要低得多,因此对于具有相对较长的、稳定的数据包流的流量模式来说,它是一种重要的优化。如果不匹配,则数据包继续执行通常的兆流缓存查找过程,跳过它已经检查过的条目。

PISCES 原型

我们的PISCES原型是OVS的一个修改版本,解析、匹配和操作代码被我们的P4编译器生成的C代码替换。工作流程如下:首先,程序员创建一个P4程序,并使用P4编译器的PISCES版本为OVS生成新的解析、匹配和操作代码。其次,编译OVS(使用常规的C编译器)以创建一个依赖于协议的交换机,该交换机处理P4程序中描述的数据包。要修改协议,用户需要修改P4程序,该程序将编译成新的虚拟机监视器切换二进制文件。

我们使用OVS作为PISCES 的基础,因为它被广泛使用,并且包含一些可编程交换机的基本脚手架,因此允许我们只关注交换机需要定制的部分(即解析、匹配和操作)。代码结构良好,便于修改,并且测试环境已经存在。它还允许比较:我们可以比较未修改的OVS和P4程序的代码行数,我们也可以比较它们的性能。

PISCES 的P4-OVS编译器

P4编译器有两个部分:前端将P4代码转换为与目标无关的中间表示(IR),后端将IR映射到目标。在本例中,后端通过操作IR来优化CPU时间、延迟或其他目标,然后生成C代码来替换OVS中的解析、匹配和操作代码,如下图所示。P4-OVS编译器输出C源代码,该源代码实现了编译相应的开关可执行文件所需的一切。编译过程还生成一个独立的类型检查程序,可执行程序使用该程序来确保来自控制器的任何运行时配置指令(例如,流规则的插入)符合P4程序中指定的协议。

可编程交换机 java 可编程交换机驱动程序_可编程交换机 java_05

PISCES 的P4-OVS编译器

解析

C代码由取代结构流替换原始OVS解析器,C结构OVS用来跟踪协议头字段,包括成员每个字段指定的P4程序,并生成代码从数据包中提取头字段到结构体流。

匹配

OVS使用一种通用的分类器数据结构,基于元空间搜索来实现匹配。要执行自定义匹配,我们不需要修改这个数据结构或管理它的代码。相反,控制平面可以在运行时简单地用新的包报头字段填充分类器,从而自动地使这些字段可用于包匹配。

动作

编译器的后端通过自动生成代码来支持定制操作,我们将这些代码静态地编译成OVS二进制文件。自定义动作可以在OVS慢路径或快路径中执行;编译器决定在哪里运行一个特定的操作,以确保开关有效地执行这些操作。某些动作可以在任意一个组件中执行。程序员可以向编译器提供一些提示,告诉它动作的慢路径实现还是快路径实现是最合适的。

控制流

在交换机中,信息包的控制流是信息包所遍历的匹配操作表序列。而在P4中,控制流必须在程序的编译时指定,而在OVS中,控制流是在运行时指定的,通过流条目,这使得它更加灵活。因此,我们的编译器后端可以在不改变OVS的情况下实现P4控制语义

优化IR

编译器后端包含一个优化器来检查和修改IR,以便生成高性能的C代码。例如,P4程序可能包含一个完整的IP校验和,但优化器可以将此操作转换为一个增量的IP校验和,以使其更快。编译器还对IR执行数据流分析,允许它合并和专门化C代码。优化器还决定数据包处理管道中的何时何地编辑数据包头。一些硬件交换机将编辑推迟到流水线的末尾,而软件交换机通常在流水线的每个阶段编辑头文件。如果需要,优化器会将IR转换为内嵌编辑。

与其他P4编译器的情况一样,P4- OVS编译器也为匹配操作表生成API,并扩展了OVS命令行工具来处理新的字段。

改进OVS

我们需要对OVS进行三处修改,使其能够实现任何P4程序中描述的转发行为。

任意封装和解封装。

OVS不支持P4程序可能需要的任意封装和解封装。每个OVS快速路径都为各种固定形式的封装提供了自定义支持。Linux内核快速路径和DPDK快速路径分别实现了GRE、VXLAN、STT等封装。为隧道封装和解封装数据包所需的元数据是静态配置的。交换机使用数据包的入口端口将其映射到适当的隧道;在报文出接口时,根据此静态隧道配置将报文封装在相应的IP报头中。因此,我们在OVS中添加了两个新的原语,添加header()和删除header(),分别执行封装和解封装,并在快速路径中执行这些操作。

基于报头字段比较的条件。

OpenFlow只直接支持对报头字段的按位相等测试。相关测试,如<和比;将k位域与常数进行比较,可以表示为最多有k个使用位相等匹配的规则。两个k位域之间的关系测试,例如x <Y,需要k(k + 1)=2个这样的规则。为了同时测试两个单独使用n1和n2规则的条件,我们需要n1和n2规则。P4直接支持这类测试,但在OpenFlow中以这种方式实现它们的开销太大,所以我们在OVS中添加了对它们的直接支持,作为条件操作,一种用于OpenFlow操作的if语句。例如,我们的扩展允许P4编译器发出一个形式的动作,如果x <Y,转到表2,否则转到表3。

一般的校验和验证/更新。

IP路由器应该在入口验证校验和,然后在出口重新计算,大多数硬件交换机都是这样做的。软件路由器通常在进入时跳过校验和验证以减少CPU周期。相反,如果它改变了任何字段(例如TTL),它只是增量地更新校验和目前,OVS只支持增量校验和,但我们希望以程序员希望的方式支持校验和的其他用途。因此,我们添加了增量校验和优化。这种优化是否有效取决于P4交换机是作为给定数据包的转发元素还是终端主机(如果它是终端主机的话),然后它必须验证校验和,所以它需要P4程序员的注释。

编译器的后端优化器

软件交换机的最终影响转发性能两个方面:(1)快速路径处理的每个包的成本(增加100周期成本降低了开关s吞吐量约500 Mbps),和(2)发送的数据包数量缓慢的路径,以50 +倍周期的快速路径处理数据包。下表列出了我们已经实现的优化,以及优化是否减少了慢路径的行程、快路径的CPU周期,或者两者都减少了。本节的其余部分将详细介绍这些优化。

可编程交换机 java 可编程交换机驱动程序_编译器_06

后端优化以及它们如何提高性能

内联编辑vs.流水线后编辑

OVS快速路径执行内联编辑,立即应用包修改(缓慢路径做一些简单的优化,以避免冗余或不必要的修改)。如果许多报头字段被修改,删除或插入,它可以成为昂贵的移动和调整数据包数据的动态。相反,延迟编辑直到头文件被处理后(就像硬件开关通常做的那样)会更有效。优化器分析IR,以确定在流水线中一个包可能需要修改多少次。如果值低于某个阈值,则优化器执行内联编辑;否则,它将执行流水线后编辑。我们允许程序员使用一个pragma指令来覆盖这个启发式。

增量校验和。

通过用高级程序描述(如P4)来表示校验和操作,程序员可以向编译器提供必要的上下文信息,以便更有效地实现校验和。例如,程序员可以通过注释通知编译器,每个包的校验和可以递增计算,然后,优化器可以执行数据流分析,以确定哪个包报头字段发生了变化,从而使校验和的重新计算更加有效。

解析器专业化

协议无关的软件交换机可以优化包解析器的实现,因为定制的包处理管道(在高级语言如P4中指定)提供了关于包中的哪些字段被修改或用作转发决策的基础的特定信息。例如,不根据其他层的信息做出转发决策的第二层交换机可以避免在那些层中解析包报头字段。在高级语言中指定转发行为可以为编译器提供可以用来优化解析器的信息。

动作专业化

OVS快速路径中的内联编辑操作将经常同时设置的相关字段组合在一起。例如,OVS实现了一个单一的快速路径动作,设置IPv4源、目的、服务类型和TTL值。当多个字段同时更新时,这种方法是有效的,如果只更新一个字段,边际成本很小。IPv4有许多其他字段,但快速路径不能设置其中任何一个。

OVS这方面的设计需要领域专业知识:其设计者知道哪些领域对于能够快速改变非常重要。P4编译器不具备将哪些字段组合在一起的专家知识,这可能会导致将太少或太多的字段组合到单个操作中产生成本。幸运的是,匹配操作控制流的高级P4描述允许优化器使用诸如死代码消除之类的优化来识别和消除快速路径设置操作中的冗余检查。这样,优化器只检查将在匹配操作控制流中实际设置的set操作中的那些字段。

动作合并

通过分析P4程序中的控制流和匹配操作处理,编译器可以发现哪些字段实际上被修改了,并可以生成一个有效的、单一的操作来直接更新这些字段。因此,如果一个规则修改了两个字段,那么优化器在OVS中只安装一个操作。

缓存字段修改

网络协议数据平面很少需要对报头字段进行算术操作。TTL减量操作是最明显的反例;上面已经讨论过的校验和是另一个问题。因此,OVS快速路径不包括通用的算术运算。事实上,它们也不包括特殊用途的TTL减量操作。相反,要实现专用的OpenFlow动作来减少TTL,慢路径依赖于这样一个事实:来自给定源的大多数包都具有相同的TTL。因此,它会发出一个缓存条目,与它正在转发的包中观察到的TTL值匹配,并用一个比观察到的值小的值覆盖这个值,这种方法我们称为match-and-set。对于TTL的减少,这种解决方案是可以接受的,因为OVS设计者知道这种缓存方式在实践中会产生很高的命中率

match-and-set并不总是合适的。考虑更新IPv4或IPv6的校验和给定的一些其他IP字段的变化。使用匹配和设置方法,缓存条目必须匹配每一个对校验和有贡献的字段,即每一个IP字段,这将使缓存条目的命中率几乎降低到零。对于P4支持的更简单的算术操作也是如此,比如增加或减少字段值,最后,PISCES无法知道在给定的情况下match-and-set是否合适。

PISCES所采用的解决方案是,通过自动生成快速路径操作来实现P4程序所需的特定算术操作,在可能的情况下避免匹配和设置。例如,如果程序增加一个特定的字段,PISCES会生成一个快速路径操作来增加该字段。这在P4程序盲目执行算术操作时是有效的,否则不会匹配修改后的字段的值。如果程序确实匹配它,那么,按照通常的缓存规则,缓存条目必须匹配字段,因此需要匹配和设置方法。

分阶段指派算法

OVS实现分段查找,以减少到慢路径的次数。分段查找将字段划分为一个有序的组列表,称为阶段。每个阶段都是累积的,因此第一个阶段之后的每个阶段都包含前一个阶段的所有字段以及其他字段。最后一个阶段包含每个字段。OVS在其元组空间搜索分类器中将每个阶段实现为一个单独的哈希表。分类器查找将按顺序搜索每个阶段。如果任何搜索都没有得到匹配,整个搜索将终止,只有最后阶段包含的字段必须在缓存条目中匹配。

OVS使用了四个阶段:第一个阶段是元数据字段(如报文的入端口),第二个阶段是元数据和二层字段,第三个阶段是添加三层字段,第四阶段是所有字段(即元数据、二层、三层、二层、二层).这种顺序是基于这样的原则:对于网络,当阶数对应于场观测值熵的增加阶数时,阶数最有效。例如,在通常情况下,只匹配元数据的缓存条目可能比只匹配第四层字段的缓存条目的命中率更高,因此元数据首先出现在更早的阶段(第一阶段),而不是第四层字段(最后阶段)。

分段查找可推广到任意P4程序。这个顺序不能从P4程序中推断出来,所以PISCES需要帮助来选择合适的阶段。我们增强了P4语言,使用户能够用阶段编号注释每个头文件。阶段的数量与头文件的数量相同。