CN112074808A - 可编程计算机io设备接口 - Google Patents

可编程计算机io设备接口 Download PDF

Info

Publication number
CN112074808A
CN112074808A CN201980027381.3A CN201980027381A CN112074808A CN 112074808 A CN112074808 A CN 112074808A CN 201980027381 A CN201980027381 A CN 201980027381A CN 112074808 A CN112074808 A CN 112074808A
Authority
CN
China
Prior art keywords
programmable
packet
match
pipeline
memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201980027381.3A
Other languages
English (en)
Inventor
迈克尔·布赖恩·加勒斯
J·布拉德利·史密斯
赫曼特·温楚乐
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Pensando Systems Inc
Original Assignee
Pensando Systems Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Pensando Systems Inc filed Critical Pensando Systems Inc
Publication of CN112074808A publication Critical patent/CN112074808A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • G06F13/385Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30079Pipeline control instructions, e.g. multicycle NOP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Information Transfer Systems (AREA)
  • Bus Control (AREA)

Abstract

提供了用于可编程IO设备接口的方法和装置。该装置可以包括:第一存储器单元,其上存储有多个程序,该多个程序与包括更新基于存储器的数据结构、插入DMA命令或发起事件的多个动作相关联;以及第二存储器单元,用于接收和存储表结果,并且表结果由表引擎提供,该表引擎被配置为对(i)包含在报头部分中的分组报头向量和(ii)存储在可编程匹配表中的数据执行分组匹配操作;以及用于响应于表结果和该装置接收的地址来执行从多个程序中选择的程序的电路,该程序被执行直到完成并且该程序与可编程匹配表相关联。

Description

可编程计算机IO设备接口
相关申请的交叉引用
本申请要求2018年2月22提交的美国临时申请序列号62/634,090的权益,其申请通过引用并入本文。
背景技术
计算环境可以包括主机(例如,服务器),运行一个或多个进程的计算机(例如,虚拟机或容器)。主机和/或进程可以被配置为通过计算网络与其他进程或设备通信。主机系统通过输入/输出(IO)设备(例如,网络接口卡(NIC))与计算网络对接。
计算机系统通过一组指定的设备寄存器和基于存储器的数据结构对接到IO设备。这些寄存器和数据结构通常对于给定的IO设备是固定的,从而允许特定的设备驱动程序在计算机系统上运行并控制IO设备。在数据通信网络中,网络接口通常是固定定义的控制结构、描述符、寄存器等。网络数据和控制结构是基于存储器的,并且使用直接内存访问(DMA)语义访问存储。诸如交换机、路由设备的网络系统在一组输入接口之一上接收消息或数据分组,并将它们转发到一组输出接口中的一个或多个上。用户通常要求此类路由设备尽快运行,以跟上高速率的传入消息。与网络系统相关的一项挑战涉及提供灵活的网络接口,以适应网络设备结构和功能集、各种协议、操作系统、应用以及设备模型的快速发展中的变化。
发明内容
期望提供一种灵活且完全可编程的IO设备接口机制,以便可以定制IO设备以使其更适合于所需的应用或OS接口。需要提供一种可编程的IO设备接口,以与高度可配置的网络流水线,可自定义的主机接口以及用于存储、安全性和网络功能的灵活硬件分流(offload)一起工作,从而提高性能并在目标功率预算之内。本发明满足了这种需求并且还提供了相关的优点。
本文所公开的主题通过提供一种设备接口来满足该需求,该设备接口可以以设备数据结构和控制寄存器的形式可编程并且定义设备行为以与设备接口协调。可编程IO设备接口可能能够与高度可配置的网络流水线,可自定义的主机接口以及用于存储、安全性和网络功能的灵活硬件分流一起工作,从而提高性能并在目标功率预算之内。具有提供的设备接口的IO设备可能会提高性能。所提供的设备接口机制可以允许IO设备接口模拟现有的主机软件驱动程序,并有效地与各种不同的软件驱动程序进行交互。
通过匹配、动作和DMA阶段的可编程流水线代替常规的固定功能直接存储器访问(DMA)引擎、控制寄存器和设备状态机,可以提高IO设备的性能。例如,流水线中的某个阶段可以启动对主机系统的DMA读取和写入操作,获取基于存储器的描述符、分散收集列表(SGL)或描述I/O操作的自定义数据结构。提供的接口机制可以包括使用映射到数据结构的字段的堆栈来描述主机计算机数据结构(例如,描述符用于描述如何制作分组,不同类型的分组);以及将内部DMA引擎状态存储在可编程匹配表中,该表可以由硬件流水线(例如,匹配处理单元(MPU))以及主机处理器进行更新;通过单独的可编程字段定义描述设备寄存器,并通过地址重新映射机制由硬件机制支持。上述接口机制使IO设备无需主机系统的帮助即可直接与主机数据结构进行交互,从而在IO设备中实现了更低的延迟和更深的处理。
IO设备接口可以是具有高效软件编程模型的高度优化的基于环的I/O队列接口,以通过CPU和外围组件互连(PCIe)总线效率提供高性能。IO设备可以通过PCIe总线连接到主机系统的处理器。IO设备可以通过一个或多个(例如,一个到八个)物理PCIe接口对接到主机系统。
IO设备可以将分组处理任务分解为一系列表查找或匹配,并伴随着处理动作。可以提供匹配处理单元(MPU)以在网络管线的每个阶段中执行基于表的动作。一个或多个MPU可以与表引擎结合使用,该表引擎被配置为提取一组可编程字段并获取表结果。一旦表引擎完成了获取查找结果,该表引擎就可以将表结果和相关的数据包头字段传递给MPU进行处理。MPU可以基于特定于域的指令集运行目标程序,MPU可以将表查找结果和数据包头作为输入,并生成表更新和数据包头重写操作作为输出。预定数量的这种表引擎和MPU管线级可以组合以形成能够以高分组处理速率工作的可编程管线。这样可以防止MPU遇到数据丢失停顿的情况,并允许MPU程序在确定的时间内执行,然后将其流水线化在一起以维持目标数据包处理速率。在某些情况下,程序员或编译器可能会将数据包处理程序分解为一组相关或独立的表查找和动作处理阶段(匹配+动作),分别映射到表引擎和MPU阶段。在某些情况下,如果所需的级数超过了已实现的级数,则可以重新分发数据包以进行其他处理。
因此,在一方面,本文公开了一种用于可编程IO设备接口的方法。包括:提供可编程设备寄存器、基于存储器的数据结构、DMA块(DMA block)和处理实体的流水线,并且处理实体的流水线被配置为:(a)接收包括报头部分和载荷部分的分组,其中所述报头部分用于生成分组报头向量;(b)利用表引擎通过执行分组匹配操作来生成表结果,其中至少部分基于存储在可编程匹配表中的数据和所述分组报头向量生成所述表结果;(c)在匹配处理单元接收与所述可编程匹配表关联的一组指令的地址和所述表结果;(d)由所述匹配处理单元根据所加载的一组指令来执行一个或多个动作直到所述指令完成,其中所述一个或多个动作包括更新基于存储器的数据结构,插入DMA命令并且/或者发起事件;(e)由所述DMA块根据所插入的DMA命令执行DMA操作。
在一些实施例中,该方法还包括:将所述报头部分提供给后续电路,其中所述后续电路被配置成将所更改的报头部分组装到相应的载荷部分。
在一些实施例中,所述可编程匹配表包括DMA寄存器表、描述符格式或控制寄存器格式。在某些情况下,基于与关联于所述报头部分关联的分组类型有关的分组类型信息来选择所述可编程匹配表。在某些情况下,基于由以前阶段选择的匹配表的ID来选择所述可编程匹配表。
在一些实施例中,所述表结果包括与所述可编程匹配表有关的键和所述匹配操作的匹配结果。在一些实施例中,所述匹配处理单元的存储器单元被配置成存储多组指令。在某些情况下,所述多组指令与不同的动作关联。在某些情况下,多组指令中的每组指令存储在所述存储器单元的连续区域中,并且所述连续区域由所述每组指令的地址来标识。
在一些实施例中,一个或多个动作还包括更新可编程匹配表。在一些实施例中,该方法还包括:在所述匹配处理单元处理所述匹配表时,将所述匹配表锁定用于所述匹配处理单元的独占存取。在一些实施例中,所述分组以无停顿的方式处理。
在相关但又独立的方面,提供了一种具有可编程IO设备接口的装置。该装置包括:(a)其上存储有多个程序的第一存储器单元,其中所述多个程序与多个动作关联,所述多个动作包括更新基于存储器的数据结构,插入DMA命令或者发起事件;(b)用于接收和存储表结果的第二存储器单元,其中通过表引擎提供表结果,所述表引擎被配置为对包含在报头部分中的分组报头向量和存储在可编程匹配表中的数据执行分组匹配操作;(c)用于响应于所述表结果和由所述装置接收的地址来执行从所述多个程序中选择的程序的电路,其中所述程序执行直到完成,并且所述程序与所述可编程匹配表关联。
在一些实施例中,所述装置被配置成将报头部分提供给后续电路。在某些情况下,所述后续电路被配置成将所更改的报头部分组装到相应的载荷部分。
在一些实施例中,所述可编程匹配表包括DMA寄存器表、描述符格式或控制寄存器格式。在某些情况下,基于与关联于所述报头部分关联的分组类型有关的分组类型信息来选择所述可编程匹配表。在某些情况下,基于由以前阶段选择的所述匹配表的ID来选择所述可编程匹配表。
在一些实施例中,所述多个程序中的每一个都包括一组指令,所述指令存储在所述第一存储器单元的连续区域中,并且所述连续区域由所述地址来标识。在一些实施例中,所述一个或多个动作包括更新所述可编程匹配表。在一些实施例中,该事件与更改分组的报头部分无关。在一些实施例中,所述基于存储器的数据结构包括以下中的至少一种:用于发起事件的管理令牌、管理命令、处理令牌。
一种包括多个装置的系统,其中所述多个装置被协调成根据配置并发地或顺序地执行所述一组指令或者一个或多个动作。在一些实施例中,所述配置由从可操作地与所述多个装置耦合的主机设备的主存储器接收的应用指令确定。在一些实施例中,所述多个装置被安排成根据阶段的流水线来处理所述分组。
应当理解,本发明的不同方面可以单独地、共同地或彼此组合地理解。本文中所述发明的各个方面可以应用于下面提出的任何特定应用或本文中公开的任何其他类型的所述数据处理系统。本文中有关所述数据处理的任何描述都可以应用于和用于任何其他数据处理情形。此外,在所述数据处理系统或装置的情况下公开的任何实施例也适用于本文中公开的所述方法。
附图说明
专利或申请文件包含至少一张彩色附图。专利局将根据要求请求并且提供必要的费用后,提供带有彩色附图的本专利或专利申请公开的副本。在所附权利要求书中具体阐述了本发明的新颖特征。通过参考对在其中利用到本发明原理的说明性实施方式加以阐述的以下详细描述和附图,将会获得对本发明的特征和优点的更好的理解,在附图中:
图1示出了根据本发明实施例的示例性计算系统架构的框图;
图2示出了用于执行程序的多个MPU的示例性配置;
图3A是示出了PCIe配置寄存器的内部结构的示例的图;
图3B示出了P4定义的描述符环的示例;
图4示出了根据本发明实施例的匹配处理单元(MPU)的框图;
图5示出了根据本发明实施例的示例性P4入口或出口流水线(PIP流水线)的框图;
图6说明了用于以太网分组传输(即,Tx P4流水线)的示例性阶段扩展流水线;
图7示出了根据本发明实施例的示例性Rx P4流水线的框图;
图8示出了根据本发明实施例的示例性Tx P4流水线的框图;和
图9示出了扩展传输流水线(即,TxDMA流水线)的示例。
具体实施方式
在本文描述的某些实施例中,本文公开了用于处理数据(如分组或表)的网络装置、系统和方法,所述装置、系统和方法具有减少的数据停顿。
某些定义
除非另有定义,本发明使用的所有技术术语均具有与本发明所属域普通技术人员的通常理解相同的含义。
本文中所使用的单数形式“一个”、“一种”等包括复数指代,除非上下文另有明确规定。本文中任何提及“或”旨在包含“和/或”除非另有说明。
本说明书对“一些实施例”或“实施例”的引用,意味着与该实施例有关的描述的特定特征、结构或特征被包括在至少一个实施例中。因此,短语“在一些实施例中”或“在实施例中”在本说明书中各处的出现并不一定都指同一个实施例。此外,特定的特征、结构或特征可以以任何合适的方式组合在一个或多个实施例中。
如本文中使用的,术语“组件”、“系统”、“接口”、“单元”、“块”、“设备”等是指与计算机相关的实体、硬件、软件(例如,在执行中)和/或固件。例如,组件可以是处理器、在处理器上运行的进程、对象、可执行程序、程序、存储设备和/或计算机。举例来说,服务器和在服务器上运行的应用可以是组件。一个或多个组件可以驻留在进程中,而组件可以本地化在一台计算机上并/或分布在两台或更多台计算机之间。
此外,这些组件可以从其上存储有各种数据结构的各种计算机可读媒介质上执行。组件可以通过本地和/或远程进程来通信,例如根据具有一个或多个数据分组的信号(例如,来自一个组件的数据通过信号与本地系统、分布式系统中的另一个组件和/或跨网络(例如,因特网、局域网、广域网等)的另一个组件来交互)。
如另一示例,组件可以是具有特定功能的装置,由电气或电子电路操作的机械部件提供;电气或电子电路可以由由一个或多个处理器执行的软件应用或固件应用操作;一个或多个处理器可以是装置的内部或外部,并且至少可以执行软件或固件应用的一部分。如另一示例,组件可以是通过电子组件提供特定功能的装置,不需要机械部件;电子组件其中可以包括一个或多个处理器,用于执行至少部分赋予电子组件功能的软件和/或固件。
此外,在本文中使用的“示例性”一词的意思是作为示例、实例或说明。本文中描述成“示例性”的任何方面或设计不必要被理解为首选或优于其他方面或设计。相反,“示例性”一词的使用旨在以具体的方式表达概念。如在本申请中使用的,术语“或”旨在表示包含性“或”而不是排他性“或”。也就是说,除非另有说明或从上下文可以清楚得出,否则“X使用A或B”旨在表示任何自然包含的排列。也就是说,如果X使用A;X使用B;或X同时使用A和B,则“X使用A或B”在任何上述情况下均满足。另外,在本申请和所附权利要求书中使用的冠词“一”和“一个”应当通常被理解成意指“一个或多个”,除非另有说明或从上下文清楚地指向单数形式。
本发明的实施例可以用于各种应用。本发明的一些实施例可以与各种设备和系统结合使用,例如,个人计算机(PC)、台式计算机、移动计算机、膝上型计算机、笔记本计算机、平板计算机、服务器计算机、手持计算机、手持设备、个人数字助理(PDA)设备、手持PDA设备、无线通信站、无线通信设备、无线接入点(AP)、调制解调器、网络、无线网络、局域网(LAN)、无线LAN(WLAN)、城域网(MAN)、无线MAN(WMAN)、广域网(WAN)、无线WAN(WWAN)、个人局域网(PAN)、无线PAN(WPAN)、根据现有IEEE 802.11、802.11a、802.11b、802.11e、802.11g、802.11h、802.11i、802.11n、802.16、802.16d、802.16标准和/或上述标准的未来的版和/或派生和/或长期演进(LTE)来运行的设备和/或网络、属于上述网络一部分的单元和/或设备、单向和/或双向无线通信系统、蜂窝无线电话通信系统、蜂窝电话、无线电话、个人通信系统(PCS)设备、包括无线通信设备的PDA设备、多输入多输出(MIMO)收发器或设备、单输入多输出(SIMO)收发器或设备、多输入单输出(MISO)收发器或设备等。
术语“表”是指涉及数据或分组处理的各种类型的表。例如,表可以是匹配+动作阶段中使用的匹配表,如转发表(例如,用于以太网地址查找的哈希表、用于IPv4或IPv6的最长前缀匹配表、用于访问控制列表(ACL)的通配符查找)。这些表可以存储在各种存储器位置,如内部静态随机访问存储器(SRAM)、网络接口卡(NIC)DRAM或主机存储器中。
术语“匹配+动作”是指用于网络分组交换的范式(诸如那些由OpenFlow交换机或P4流水线执行的,其使用匹配表、动作表、统计存储器、计量器存储器、状态存储器和三元间接存储器的)。术语“P4”指的是一种高级语言,用于编写与协议无关的分组处理器。P4是一种说明性语言,用于表示网络转发元件(如交换机、网络接口卡、路由器或网络功能设备)的流水线如何处理分组。它基于抽象转发模型,该抽象转发模型由解析器和在入口和出口之间划分的一组匹配+动作表资源组成。解析器识别每个传入分组中存在的报头。每个匹配+动作表在报头字段的子集上执行查找,并应用与每个表中的第一匹配对应的操作。
尽管出于说明性目的,本公开的部分涉及有线和/或有线通信系统或方法,但是本发明的实施例不限于此。例如,一个或多个有线通信系统可以利用一个或多个无线通信组件、一个或多个无线通信方法或协议等。
尽管出于说明目的,本文中讨论的一些部分可能涉及快速或高速互连基础设施,具有OS旁路功能的快速或高速互连组件或适配器,具有OS旁路功能的高速互连卡或网络接口卡(NIC)或者快速或高速互连基础设施或结构,本发明的实施例不限于此,并且可以与其他基础设施、结构、组件、适配器、主机通道适配器,卡或NIC结合使用,它们可以或可以不必要是快速或高速的或者具有操作系统旁路功能。例如,本发明的一些实施例可以与无限带宽(IB)基础设施、结构、组件、适配器、主机通道适配器、卡或NIC结合使用;与以太网基础设施、结构、组件、适配器、主机通道适配器、卡或NIC结合使用;与千兆位以太网(GEth)基础设施、结构、组件、适配器、主机通道适配器、卡或NIC结合使用;与具有操作系统的基础设施、结构、组件、适配器、主机通道适配器、卡或NIC结合使用;与允许用户模式应用直接访问这些硬件并绕过呼叫到操作系统(即,具有OS旁路功能)的基础设施、结构、组件、适配器、主机通道适配器、卡或NIC的操作系统结合使用;与基础设施、结构、组件、适配器、主机通道适配器、卡或NIC结合使用;与无连接和/或无状态的基础设施、结构、组件、适配器、主机通道适配器、卡或NIC结合使用;和/或与其他合适的硬件结合使用。
计算机系统采用各种各样的外围组件或IO设备。通过外围设备组件高速互连(PCIe)(一种高速串行计算机扩展总线标准)定义的组件总线连接到IO设备的计算机系统主机处理器的示例。设备驱动程序(也被称为驱动程序)是特定于硬件的软件,其可控制连接到计算系统的硬件设备的操作。
在计算中,虚拟化技术用于允许多个操作系统同时共享处理器资源。一种这样的虚拟化技术是单根I/O虚拟化(SR-IOV),在PCI-SIG单根I/O虚拟化和共享规范中对此进行了描述。物理IO设备可以允许多个虚拟机通过SR-IOV同时使用该设备。在SR-IOV中,物理设备可能具有允许输入/输出操作和设备配置的物理功能(PF),以及允许数据输入/输出的一个或多个虚拟功能(VF)。根据SR-IOV,外围组件高速互连(PCIe)设备似乎是多个单独的物理PCIe设备。例如,具有单个端口的SR-IOV网络接口卡(NIC)最多可以具有256个虚拟功能,每个虚拟功能代表各自的NIC端口。
在一方面,提供了一种可编程设备接口。设备接口可以是具有高效软件编程模型的高度优化的基于环的I/O队列接口,以提供具有CPU和PCIe总线效率的高性能。图1示出了根据本发明实施例的示例性计算系统架构100的框图。主机计算系统120上的管理程序121可以使用PF 115和一个或多个VF 113与物理IO设备110进行交互。如图所示,计算系统110可以包括配置用于管理接口设备的管理设备117。管理设备117可以与处理实体111(例如,ARM核)和管理实体119(例如,管理虚拟机系统)通信。应当注意,所示的计算系统仅是示例机制,而没有暗示对本发明的范围的任何限制。所提供的可编程IO接口和方法可以应用于任何操作系统级虚拟化(例如,容器和Docker系统)或机器级虚拟化或不具有虚拟化特征的计算系统。
管理程序121通常为主机提供操作系统功能(例如,进程创建和控制、文件系统进程线程等)以及CPU调度和存储器管理。在某些情况下,主机计算系统120可以包括实现机器仿真器和虚拟器的程序。机器仿真器和虚拟器可以协助虚拟化虚拟机中的各个计算机IO设备,例如虚拟化的硬盘、光盘驱动器和NIC。Virtio是用于在虚拟机中实现虚拟IO设备的虚拟化标准,可以视为管理程序中一组通用仿真设备的抽象。
当使用设备仿真器时,提供的可编程IO设备接口机制允许本机硬件速度。可编程IO设备接口允许主机系统使用现有设备驱动程序与IO设备对接,而无需重新配置或更改。在某些情况下,VF设备、PF设备和管理设备可能具有相似的驱动程序接口,以使此类设备可以由单个驱动程序支持。在某些情况下,此类设备可能称为以太网设备。
IO设备110可以向作为在计算系统110上的主机操作的操作系统提供各种服务和/或功能。例如,IO设备可以向计算系统提供网络连接功能、协处理器功能(例如,图形处理、加密/解密、数据库处理等)。IO设备110可以经由例如PCIe总线与计算系统100中的其他组件对接。
如上所述,SR-IOV规范允许单个根功能(例如,单个以太网端口)在虚拟机中显示为多个物理设备。具有SR-IOV能力的物理IO设备可以被配置为在PCI配置空间中显示为多个功能。SR-IOV规范支持物理功能和虚拟功能。
物理功能是可以被发现、管理和配置为普通PCI设备的完整PCIe设备。物理功能通过分配虚拟功能来配置和管理SR-IOV功能。IO设备可以将一个或多个物理功能(PF)115暴露给主机计算系统120或管理程序121。PF115可以是全功能的PCIe设备,其包括用于IO设备的所有配置资源和能力。在某些情况下,PF可以是PCIe功能,其包括SR-IOV扩展能力,这有助于IO设备的配置或管理。PF设备本质上是以太网设备的基本控制器。PF设备最多可配置256个VF。在某些情况下,PF可能包括扩展的操作,例如分配、配置和释放VF,发现VF的硬件能力,例如接收方缩放(RSS),发现VF的硬件资源,例如队列和中断数资源,配置VF的硬件资源和特征,保存和恢复硬件状态等。在某些情况下,PF设备可以被配置为启动设备,该启动设备可以呈现Option ROM基地址寄存器(BAR)。
IO设备还可以提供一个或多个虚拟功能(VF)113。VF可以是轻量级PCIe功能,其包含数据移动所必需的资源,但是可以具有最小化的配置资源集。在某些情况下,VF可能包括支持SR-IOV的轻量级PCIe功能。为了在虚拟系统中使用SR-IOV设备,可以将硬件配置为创建多个VF。这些VF可以使管理程序可用于分配给虚拟机。可以例如通过SR-IOV物理功能设备来操纵(例如,创建、配置、监视或销毁)VF。在某些情况下,多个VF中的每一个都配置有一个或多个基址寄存器(BAR),以将NIC资源映射到主机系统。VF可以映射一个或多个逻辑接口(LIF)或端口,这些逻辑接口或端口在IO设备中用于转发和事务标识。LIF可能仅属于一个VF。在物理设备内,所有虚拟功能可能具有相同的BAR资源布局,并顺序堆叠在主机PCIe地址空间中。可以对IO设备PCIe接口逻辑进行编程,以将具有可编程访问许可(例如,读取、写入、执行)的控制寄存器和NIC存储器区域映射到VF BAR。
IO设备可以包括用于管理IO设备的管理设备117。管理设备117可能无法直接访问网络上行链路端口。管理设备可以与处理实体111通信。例如,可以将管理设备上的流量引导到内部接收队列,以由处理实体111上的管理软件进行处理。在某些情况下,管理设备可以用于通过管理程序传递给管理实体119,例如管理虚拟机。例如,可以向管理设备117分配与PF设备115不同的设备ID,使得当PF设备不要求管理设备时,可以为PF设备释放管理程序中的设备驱动程序。
图2示出了根据本发明的一些实施例的具有所描述的可编程设备接口的另一示例性IO设备系统200。系统200用作实现P4和扩展的P4管线以及各种其他功能以提供改善的网络性能的示例。在某些情况下,设备接口可能会通过以下方式提高网络性能:不要求在分组发送或接收路径中读取PCIe总线寄存器;提供单个已发布的(非阻塞)PCIe总线寄存器写操作以进行分组传输;支持消息信号中断(MSI)和消息信号扩展中断(MSI-X)模式,具有驱动程序可配置的中断缓和,以实现高性能中断处理;支持每个队列有未完成请求(例如最多64k)的I/O队列;传输具有改进的发送大小的TCP分段卸载(TSO);提供传输控制协议(TCP)/用户数据报协议(UDP)校验卸载;支持可变数量的接收队列,以支持行业标准的接收方扩展(RSS);支持多达255个虚拟功能的SR-IOV。
IO设备系统200可以是与图1中描述的相同的IO设备并且被实现为机架安装的设备,并且包括一个或多个其上安装有组件的专用集成电路(ASICS)和/或板。如图2所示,系统200可以包括四个具有相干的L1和L2高速缓存的高级RISC机器(ARM)处理器、共享的本地存储器系统、闪存非易失性存储器、DMA引擎以及用于操作和调试的其他IO设备。ARM处理器可以通过地址映射观察和控制所有NIC资源。如本文稍后所描述的,ARM处理器可以实现P4流水线和扩展的P4流水线。
该系统可以包括主机接口和网络接口。主机接口可以被配置为提供与一个或多个主机(例如,主机服务器)的通信链路。主机接口块还可以通过PCIe BAR映射观察地址空间的区域,以将NIC功能暴露给主机系统。在示例中,可以根据ARM受限的ARM存储器映射的原理最初创建地址映射,该原理为34位存储器映射提供SOC寻址准则。
网络接口可以支持与计算网络的网络连接或上行链路,该计算网络可以是例如局域网、广域网和本文其他各处所描述的各种其他网络。物理链路可以由管理代理(例如,管理实体119)通过设备驱动器来控制。例如,物理链路可以经由与设备逻辑接口(LIF)相关联的“虚拟链路”来配置。
系统200中的所有存储器事务,包括主机存储器、高带宽存储器(HBM)和寄存器,可以基于来自外部系统的IP经由芯片上的相干网络(NOC)连接。NOC可以在NOC主设备(包括P4流水线、扩展的P4流水线、DMA、PCIe和ARM)之间提供高速缓存一致性互连。互连可以使用可编程哈希算法跨多个(例如16个)HBM接口分配HBM存储器事务。所有针对HBM的流量都可以存储在NOC高速缓存中(例如,1MB高速缓存)。NOC高速缓存可以与ARM高速缓存保持一致。因为当处理小写入时HBM效率不高,NOC高速缓存可用于聚集可能小于高速缓存行(例如,64字节的大小)的HBM写入事务。NOC高速缓存可能具有高带宽,因为它领先于1.6Tb/s HBM,因此最高支持3.2Tb/s的操作。
该系统可以包括内部HBM存储器系统,用于运行Linux,存储大型数据结构(例如,流表和其他分析)并为高级功能(包括TCP终止和代理,深度分组检查,存储卸载和连接的FPGA功能)提供缓冲资源。存储器系统可以包括HBM模块,取决于封装和HBM该HBM模块可以支持4GB容量或8GB容量。
如上所述,该系统可以包括PCIe主机接口。PCIe主机接口可支持每个PCIe连接例如100Gb/s的带宽(例如,双PCIe Gen4x8或单个PCIe Gen3x16)。可以通过使用与资源映射表耦合的可配置的PCIe基地址寄存器(BAR)池来存储每个虚拟IO设备的映射信息可以实现将IO设备上可用的资源映射到与虚拟IO设备关联的存储器映射控制区域的机制或方案。可以将由IO设备提供的IO资源映射到PCIe标准框架中的主机地址,以便可以利用与物理PCIe设备进行通信的相同设备驱动程序与相应的虚拟PCIe设备进行通信。
IO设备接口可以包括可编程寄存器。这些寄存器可以包括例如PCIe基址寄存器(BAR),其可以包括包含设备资源(例如,设备命令寄存器、门铃寄存器、中断控制寄存器、中断状态寄存器、MSI-X中断表,MSI-X中断待处理位数组等)的第一存储器BAR、包含设备门铃页面的第二BAR以及映射控制器内存缓冲器的第三BAR。
设备命令寄存器是一组寄存器,用于向硬件或固件提交管理命令。例如,设备命令寄存器可以指定单个64字节的命令和单个16字节的完成响应。该寄存器接口可以一次允许单个未完成的命令。设备命令门铃是一种专用门铃,用于指示设备命令寄存器中的命令准备就绪。
第二BAR可以包含门铃页面。第二BAR的一般形式可以包含多个LIF,每个LIF带有多个门铃页面。网络设备(即,IO设备)可以具有带有至少一个门铃页面的至少一个LIF。单个/多个LIF与单个/多个门铃页面的任何组合都是可能的,并且驱动程序可以准备识别和操作不同的组合。在示例中,门铃页面可以默认情况下以4k步幅呈现,以匹配常见的系统页面大小。可以在虚拟功能设备113中调整门铃页面之间的步幅以匹配父物理功能设备115中SR-IOV能力报头中的系统页面大小配置设置。此页面大小分隔通过允许每个进程映射和访问专用于其使用的门铃页面允许进程受保护的独立直接访问一组门铃寄存器。每个页面可以提供操作LIF的数据路径队列资源所需的门铃资源,同时保护从另一个进程访问这些资源。
门铃寄存器可以由软件写入,以调整队列的生产者索引。调整生产者索引是将队列描述符环中队列条目的所有权转移到硬件的机制。某些门铃类型,例如管理队列、以太网发送队列和RDMA发送队列,可能会导致硬件队列安排对队列中可用描述符的进一步处理。在更新生产者索引之后,其他队列类型(例如,完成队列和接收队列)可能不需要硬件队列采取进一步的动作。
中断状态寄存器可以为设备的每个中断资源包含位。寄存器可以设置一个位,指示相应的中断资源已声明其中断。例如,中断状态中的位0表示已声明中断资源0,位1表示已声明中断资源1。
控制器存储器缓冲器可以是驻留在IO设备上的通用存储器的区域。用户或内核驱动程序可以在该控制器存储器BAR中进行映射,并在该区域中建立描述符环、描述符和/或有效载荷数据。可以在描述符中添加一个位,以选择将描述符地址字段解释为主机存储器地址还是相对于设备控制器存储器窗口开始的偏移。如果扩展的P4程序是主机地址,则可以设置地址的指定位(例如,位63),或者在为DMA级构建TxDMA操作时清除该位并将设备控制器存储器基地址添加到偏移中。
可以通过第一BAR映射MSI-X资源,并且可以通过PCIe基本规范来描述格式。MSI-X中断表是控制寄存器的区域,其允许操作系统代表驱动程序对MSI-X中断向量进行编程。
MSI-X中断待处理位阵列(PBA)是位的阵列,该位用于设备支持的每个MSI-X中断。
IO设备接口可以支持可编程DMA寄存器表、描述符格式和控制寄存器格式,从而允许专用的VF接口和用户定义的行为。可以对IO设备PCIe接口逻辑进行编程,以将具有可编程访问许可(例如,读取、写入、执行)的控制寄存器和NIC存储器区域映射到VF BAR。
图3A是示出PCIe配置寄存器的内部布置的示例300的图。作为地址的示例,设备ID指定特定于供应商的设备编号,供应商ID指定制造商的编号(均为偏移00h),类别代码(偏移08h)指定设备属性。偏移为10h-24h和30h的地址用于基址寄存器。SR-PCIM中包含的配置软件可以通过查找寄存器值来识别设备。当为I/O设备分配地址空间时,SR-PCIM中的配置软件将基地址寄存器用于写入基地址。设备标识和相关过程在PCIe配置周期期间发生。这样的配置周期在系统启动期间以及可能在热插拔操作之后发生。
传输环可以包括环缓冲器。图3B示出了P4定义的描述符环301的示例。在一些情况下,可以以描述符格式定义IO设备接口的存储器结构。在示例中,接收队列(RxQ)描述符可能具有以下字段:
Figure BDA0002735876470000161
Figure BDA0002735876470000171
在传输队列的情况下,传输队列描述符可以具有要发送的用于第一数据缓冲器片段的单个DMA地址字段。如果只有一个片段,则单个DMA地址足以发送整个分组。在一个以上的片段的情况下,可以使用发送分散/聚集列表来描述DMA地址和后续片段的长度。
如上所述,提供的IO设备接口将P4可编程流水线机制扩展到了主机驱动程序。例如,可以将P4编程的DMA接口直接呈现给网络设备或卸载引擎接口的主机虚拟功能和处理实体(例如,ARM CPU)。IO设备接口最多可支持2048个或更多个PCIe虚拟功能,用于具有多个发送和接收队列的直接容器映射。将可编程IO设备接口与P4流水线特征相结合允许将主机虚拟交换机/NIC卸载到可编程网络设备上,从而提高带宽和降低延迟。
匹配处理单元(MPU)
在本发明的一个方面,提供了匹配处理单元(MPU)来处理数据结构。数据结构可以包括各种类型,如数据分组、管理令牌、来自主机的管理命令、处理令牌、描述符环等。MPU可以被配置成根据正在处理的数据类型或不同的用途执行各种操作。例如,这些操作可以包括用于处理分组的基于表的动作,表维护操作(例如将时间戳记写入表或收集表数据以进行导出),管理操作(例如创建新队列或存储器映射,收集统计信息)以及可能会导致将任何类型的更改后的数据写入主机存储器的各种其他操作(诸如发起批量数据处理)。
在一些实施例中,MPU可以处理数据结构以便更新基于存储器的数据结构或发起事件。该事件可能涉及更改分组,例如,如本文其他地方所述,更改分组的PHV字段。或者,事件可以不与对分组进行更改或更新有关。例如,事件可以是管理操作,如创建新队列或存储器映射、收集统计信息、发起可能导致将任何类型的更改数据写入主机存储器的批量数据处理或者在描述符环、集散列表(SGL)上执行计算。
图4示出了根据本发明实施例的匹配处理单元(MPU)400的框图。在一些实施例中,MPU单元400可包括多个功能单元、存储器和至少一个寄存器文件。例如,MPU单元可以包括指令提取单元401、寄存器文件单元407、通信接口405、算术逻辑单元(ALU)409和各种其他功能单元。
在说明性示例中,MPU单元400可以包括写端口或通信接口405,其允许存储器读/写操作。例如,通信接口可以支持从外部存储器(例如,主机设备的高带宽存储器(HBM))或内部静态随机存取存储器(SRAM)写入或读取分组。通信接口405可以采用任何合适的协议,如高级微控制器总线架构(AMBA)先进可扩展接口(AXI)协议。AXI是用于高速/高端片上总线协议的总线协议,并具有与读、写、寻址和写响应关联的通道,这些通道分别是分开的、单独操作的,并具有事务属性,如多个未完成地址或写数据交叉。AXI接口405的特征可以包括支持使用字节选通的不对齐数据传输,仅发布起始地址的基于突发的事务,分离地址/控制和数据阶段,具有乱序响应的多个未完成地址的发布,以及易于添加寄存器阶段以提供时序收敛。例如,在MPU执行表写入指令时,MPU可以跟踪哪些字节被写入(即脏字节)以及哪些保持不变。当表条目被清回存储器时,脏字节向量可以作为写入选通提供给AXI,允许多个写入以安全地更新单个表数据结构,只要它们不写入同一个字节。在一些情况下,表中的脏字节不需要是连续的,并且MPU可以只在脏向量中设置了至少一位时写回表。尽管分组数据是依照根据本说明书的本示例性实施例的分组数据通信片上互连系统中的AXI协议来传送的,但是它也可以应用于由其他支持锁定操作的协议来操作的分组数据通信片上互连系统,如除了AXI协议外的高级高性能总线(AHB)协议或高级外围总线(APB)协议。
MPU 400可以包括指令提取单元401,其被配置成基于输入表结果或表结果的至少一部分来从MPU外部的存储器中提取指令集。指令提取单元可以支持基于由表引擎提供的表结果或表结果的一部分的分支和/或线性代码路径。在一些情况下,表结果可以包括表数据、键数据和/或一组指令/程序的起始地址。关于表引擎的细节将在本文中随后描述。在一些实施例中,指令提取单元401可以包括用于存储一个或多个程序的指令高速缓存403。在一些情况下,一个或多个程序可以在收到由表引擎提供的程序的起始地址时被加载到指令高速缓存403中。在一些情况下,一组指令或程序可以存储在存储器单元的连续区域中,并且连续区域可以由地址来标识。在一些情况下,可以通过通信接口405从外部存储器提取和加载一个或多个程序。这提供了灵活性,允许使用同一个处理单元来执行与不同类型的数据关联的不同程序。在示例中,在将管理分组报头矢量(PHV)注入到流水线中以例如执行管理表直接存储器访问(DMA)操作或条目老化功能(即,添加时间戳)时,管理MPU程序之一可以加载到指令缓存以执行管理功能。指令高速缓存403可以使用各种类型的存储器来实现,如一个或多个SRAM。
一个或多个程序可以是任何程序,如与读取表、构造报头、到/从HBM或主机设备中的存储器区域的DMA以及其他动作有关的P4程序。一个或多个程序可以在流水线的任何阶段中执行,如本文中他处所述。
MPU 400可以包括寄存器文件单元407,以在MPU的存储器和功能单元之间或在MPU外部的存储器和MPU的功能单元之间将数据分段。功能单元可以包括,例如,ALU、计量器、计数器、加法器、移位器、边缘检测器、零检测器、条件码寄存器、状态寄存器等。在一些情况下,寄存器文件单元407可以包括多个通用寄存器(例如,R0、R1、……Rn),这些寄存器最初可以加载元数据值,然后再用于在程序执行期间存储临时变量,直到程序完成。例如,寄存器文件单元407可以用于存储SRAM地址、三元内容寻址存储器(TCAM)搜索值、ALU操作数、比较源或动作结果。阶段的寄存器文件单元还可以给随后阶段的寄存器文件提供数据/程序环境,以及使数据/程序环境可用于下一阶段的执行数据路径(即,下一阶段的加法器、移位器等的源寄存器)。在一个实施例中,寄存器文件的每个寄存器都是64位,并且最初可以分别加载特殊的元数据值,如来自表的哈希值、查找、分组大小、PHV时间戳、可编程表常数等。
在一些实施例中,寄存器文件单元407还可以包括被配置成存储比较器标志的比较器标志单元(例如,C0、C1、…Cn)。比较器标志可以通过由ALU生成的计算结果来设置,其进而与编码指令中的常数值比较,以确定条件分支指令。在实施例中,MPU可以包括八个一位比较器标志。但是,应当注意,MPU可以包括任何数量的比较器标志单元,其中每个单元都可以有任何合适的长度。
MPU 400可以包括一个或多个功能单元,如ALU 409。ALU可以支持在存储于寄存器文件单元107中的值上的算术和逻辑操作。然后ALU操作(例如,加、减、与、或、异或、非、与非、移位和比较)的结果可以写回到寄存器文件。例如,MPU的功能单元可以在PHV中任何处更新或更改字段、写入存储器(例如,表刷新)或者执行与PHV更新无关的操作。例如,ALU可以被配置成在描述符环、集散列表(SGL)上执行计算,以及控制从主机存储器加载到通用寄存器中的数据结构。
MPU 400可以包括各种其他功能单元,如计量器、计数器、动作插入单元等。例如,ALU可以被配置成支持P4兼容计量器。计量器是在表匹配上可执行的用于测量数据流速率的动作类型。计量器可以包括若干段(band),通常是两个或三个段,每个段都有确定的最大数据速率和可选的突发大小。使用漏桶类比(leaky bucket analogy),计量器段是由分组数据速率填充、并以恒定允许的数据速率排水的桶。如果超过配额的数据速率的集合大于突发大小,就会发生溢出。溢出一个带会在下一个段中触发活动,这可能允许更高的数据速率。在一些情况下,分组的字段可以被认为是溢出基带的结果。这些信息可以随后用于将分组定向到不同队列,在该队列中,在拥塞的情况下时,可能更容易经受延迟或丢失。计数器可以由MPU指令实现。MPU可以包括用于不同目的一个或多个类型的计数器。例如,MPU可以包括对MPU停顿进行计数的性能计数器。动作插入单元可以被配置成将寄存器文件结果推送回到PHV,用于报头字段更改。
MPU可以能够将表锁定。在一些情况下,正被MPU处理的表可以在表引擎中被锁定或标记成“锁定”。例如,当MPU将表加载到其注册文件中时,表地址可以被报回表引擎,导致未来对同一个表地址的读取停顿,直到MPU释放了表锁。例如,当明确的表刷新指令执行时、MPU程序结束时或者MPU地址更改时,MPU可以释放锁。在一些情况下,MPU可以锁定多于一个表地址,例如,一个用于以前表回写,而另一个地址锁用于当前MPU程序。
MPU流水线化
单个MPU可以被配置成执行程序的指令,直到程序完成。可选地或附加地,多个MPU可以被配置成执行程序。在一些实施例中,表结果可以分布到多个MPU。根据为表配置的MPU分布掩码,表结果可以分布到多个MPU。这提供了在程序过长时防止数据停顿或每秒兆分组(MPPS)减少的优势。例如,如果PHV在一个阶段需要读取四个表,那么如果在800mhz的频率下操作(在这种情况中可能期望多个MPU),则每个MPU程序可能被限制成只有八条指令来维持100MPPS。
为了达到期望的性能,可以使用任何数量的MPU来执行程序。例如,可以使用至少两个、三个、四个、五个、六个、七个、八个、九个或十个个MPU来执行程序。每个MPU至少可以执行程序的一部分或指令集的子集。多个MPU可以同时地或顺序地实施执行。每个MPU可以或可以不执行相同数量的指令。配置可以根据程序的长度(即,指令数、周期)和/或可用MPU的数量来确定。在一些情况下,配置可以由从可操作地与多个MPU耦合的主机设备的主存储器接收的应用指令确定。
P4流水线
在一个方面,提供了一种灵活、高性能、可执行范围广泛的P4程序的匹配动作流水线。可以对P4流水线编程以提供各种特征,包括但不限于路由、桥接、隧道、转发、网络ACL、L4防火墙、基于流的速率限制、VLAN标签策略、隶属度、隔离、多播和组控制、标签推送/弹出操作、L4负载平衡,用于分析和特定于流的处理的L4流表、DDOS攻击检测、抑制、在任何数据分组字段或流状态以及其他各种状态下收集的遥测数据。图5示出了根据本发明实施例的示例性P4入口或出口流水线(PIP流水线)500的框图。
在一些实施例中,所提供的发明可以支持匹配+动作流水线。程序员或编译器可以将分组处理程序分解成一组从属或独立的表查找和动作处理阶段(即,匹配+动作),其分别映射到表引擎和MPU阶段。匹配+动作流水线可以包括多个阶段。例如,进入流水线的分组可以首先由解析器(例如,解析器507)根据由P4程序指定的分组报头栈来解析。分组的这种解析表示可以被称为解析报头向量。然后,解析报头向量可以通过入口匹配+行动流水线的阶段(例如,阶段501-1、阶段501-2、阶段501-3、阶段501-4、阶段501-5、阶段501-6),其中每个阶段被配置成将一个或多个表解析报头向量字段匹配到表,随后根据P4程序指定的动作来更新分组报头向量(PHV)和/或表条目。在一些情况下,如果所需的阶段数超过了实施的阶段数,则可以重新循环分组用于额外处理。在一些情况下,分组载荷可以在单独的先进先出(FIFO)队列中移动,直到它在反解析器(例如,反解析器509)中与其PHV重新组装。反解析器可以根据更改过的(例如,添加、删除或更新)PHV字段重写原始分组。在一些情况下,由入口流水线处理的分组可以位于分组缓冲器中,用于进行调度和可能的复制。在一些情况下,一旦分组被调度并离开分组缓冲器,它可以被再次解析,以创建出口解析报头向量。出口解析报头向量可以以与入口匹配+动作流水线类似的方式通过一系列匹配+动作流水线的阶段,之后,最终的反解析操作可以在分组发送到其目的地接口或再循环用于额外处理前执行。
在一些实施例中,可以使用相同的物理块或处理单元流水线来实现入口流水线和出口流水线。在一些实施例中,PIP流水线500可以包括至少一个解析器507和至少一个反解析器509。PIP流水线500可以包括多个解析器和/或多个反解析器。解析器和/或反解析器可以是P4兼容可编程解析器或反解析器。在一些情况下,解析器可以被配置成根据P4报头定义提取分组报头字段,并将分组报头字段放置到分组报头向量(PHV)中。解析器可以选择分组中的任何字段,并将所选字段的信息对齐,以创建分组报头向量。在一些情况下,在通过匹配+动作阶段的流水线之后,反解析块可以被配置根据更新的PHV重写原始分组。
由解析器产生的分组报头向量(PHV)可以具有任何大小或长度。例如,PHV可以是至少512位、256位、128位、64位、32位、8位或4位。在一些情况下,当需要长PHV(例如,6Kb)来包含所有有关报头字段和元数据时,单个PHV可以跨几个周期进行时分多路复用(TDM)。这种TDM功能提供了以下好处:允许所述发明支持可变长度的PHV,包括很长的PHV,以启用复杂的特征。PHV长度可以随着分组通过匹配+动作阶段而变化。
PIP流水线可以包括多个匹配+动作阶段。在解析器307生成PHV之后,PHV可以通过入口匹配+动作阶段。在一些实施例中,可以使用多个阶段单元501-1、501-2、501-3、501-4、501-5、501-6来实现PIP流水线,每个阶段单元可以包含表引擎505和多个MPU 503。MPU 503可以与如图1中所述的MPU相同。在说明性示例中,一个阶段单元中使用四个MPU。但是,任何其他数量的MPU,如至少一个、两个、三个、四个、五个、六个、七个、八个、九个或十个MPU,都可以通过表引擎来使用或分组。
表引擎505可以被配置成支持每个阶段的表匹配。例如,表引擎505可以被配置成哈希、查找和/或比较键与表条目。表引擎505可以被配置成通过控制表的地址和大小、用作查找键的PHV字段和定义了与表关联的P4程序的MPU指令向量来控制表匹配过程。由表引擎生成的表结果可以分布到多个MPU 303。
表引擎505可以被配置成控制表选择。在一些情况下,在进入阶段时,可以检查PHV,以选择启用哪些表用于到达的PHV。可以基于PHV中包含的信息来确定表选择标准。在一些情况下,可以基于与关联于PHV的分组类型有关的分组类型信息来选择匹配表。例如,表选择标准可以基于分组类型或协议(例如,互联网协议版本4(IPv4)、互联网协议版本6(IPv6)和多协议标签交换(MPLS))或由以前阶段或先前阶段确定的下一表ID。在一些情况下,可以通过表选择逻辑来分析传入的PHV,然后,表选择逻辑生成表选择键,并使用TCAM来比较结果以选择有效表。表选择键可用于驱动表哈希生成、表数据比较以及驱动关联数据到MPU。
在一些实施例中,表引擎505可以包括哈希生成单元。哈希生成单元可以被配置成从PHV输入生成哈希结果,并且哈希结果可以用于从DRAM或SRAM数组执行DMA读取。在示例中,可以根据表选择键中哪些位对哈希熵有贡献来屏蔽哈希生成单元的输入。在一些情况下,表引擎可以使用相同的掩码用于与返回的SRAM读取数据的比较。在一些情况下,可以根据表的大小来缩放哈希结果,然后,可以添加表基偏移量来创建存储器索引。存储器索引可以被发送到DRAM或SRAM数组并执行读取。
在一些情况下,表引擎505可以包括TCAM控制单元。TCAM控制单元可以被配置成分配存储器以存储多个TCAM搜索表。在示例中,PHV表选择键可以在SRAM查找前定向到TCAM搜索阶段。TCAM搜索表可以被配置成最多1024位宽,并是TCAM资源允许的深度。在一些情况下,可以从共享象限TCAM资源切出多个TCAM表。TCAM控制单元可以被配置成将TCAM分配到各个阶段,以防止TCAM资源冲突,或者在阶段内将TCAM分配到多个搜索表中。TCAM搜索索引结果可以被转发到表引擎用于SRAM查找。
PIP流水线500可以包括多个阶段单元501-1、501-2、501-3、501-4、501-5、501-6。PIP流水线可以包括任何数量的阶段单元,如可以在PIP流水线中使用的至少两个、三个、四个、五个、六个、七个、八个、九个、十个阶段单元。在图示的实施例中,将六个匹配+动作阶段单元501-1、501-2、501-3、501-4、501-5、501-6组成组。这组阶段单元可以共享一组通用的SRAM 511和TCAM 513。SRAM 511和TCAM 513可以是PIP流水线的组件。这种安排可以允许六个阶段单元以任何合适的比例来划分匹配表资源,这为编译器提供了方便,也简化了编译器的资源映射任务。每个PIP流水线可以使用任何合适数量的SRAM资源和任何数量的TCAM资源。例如,图示的PIP流水线可以耦合到十个SRAM资源和四个或八个TCAM资源。在一些情况下,TCAM可以垂直或水平融合,用于更广或更深的搜索。
扩展的P4流水线
在一个方面,所提供的发明可以支持扩展的P4可编程流水线,以允许与主机驱动程序的直接对接。扩展的P4可编程流水线实现了如上所述的IO设备接口。例如,P4编程的DMA接口可以直接耦合到主机虚拟函数(VF)以及高级RISC机器(ARM)CPU或卸载引擎接口。扩展的P4流水线可以处理所需的DMA操作和循环。扩展的P4流水线可以包括特征,包括但不限于无状态NIC卸载,如TCP分段卸载(TSO)和接收侧缩放(RSS);扩展的P4流水线中的存储交换表式事务服务;细粒度负载平衡决策,其可以扩展到性能关键应用的单个数据结构,如DPDK或键值匹配;TCP流终止和代理服务的发起;融合以太网上的RDMA(RoCE)和类似的远程直接存储器访问(RDMA)协议支持;可以在P4中指定自定义描述符和SGL格式,以匹配性能关键应用的数据结构;可以使用与主机驱动程序开发耦合的P4程序以及各种其他特征来将新设备和VF行为建模。
数据可以在P4流水线中的分组域到/从主机和NIC存储器系统中的存储器事务域之间传输。这个分组到存储器事务的转换可以由扩展的P4流水线执行,扩展的P4流水线包括DMA写(TxDMA)和/或DMA读(RxDMA)操作。在本说明书中,包括TxDMA的扩展的P4流水线也可以被称为Tx P4或TxDMA,并且包括RxDMA的扩展的P4流水线也可以被称为Rx P4。扩展的P4流水线可以在P4流水线中包括相同的匹配+动作阶段,以及在流水线末端的载荷DMA阶段。可以根据扩展的P4程序将分组分段或重新组装到数据缓冲器或存储器区域(例如,RDMA寄存器存储器)中。载荷DMA阶段可以是P4扩展,其使可编程的P4网络流水线能够扩展到主机存储器系统和驱动程序接口。这个P4扩展允许定制数据结构和应用交互,以适应应用或容器的需要。
扩展的P4流水线中使用的匹配表可以是可编程表。扩展的P4流水线的阶段可以包括多个可编程表,这些表可以存在于SRAM、NIC DRAM或主机存储器中。例如,主机存储器结构可以包括描述符环、SGL和控制数据结构,它们可以被读入到MPU的寄存器文件单元用于计算。MPU可以添加PHV命令来控制进出主机和NIC存储器的DMA操作,并将DMA命令插入到PHV中用于被载荷DMA阶段执行。扩展的P4程序可以包括,例如,完成队列事件、中断、计时器设置和控制寄存器写入以及各种其他程序。
图6说明了用于以太网分组传输(即,Tx P4流水线)600的示例性阶段扩展流水线。在示例中,阶段0的表引擎可以提取队列状态(例如,Q状态)表,用于被阶段0的MPU处理。在一些情况下,队列状态还可以包括基于队列对类型的指令偏移地址,以加速MPU处理。可以将其他分离的Tx P4程序写入,用于以太网Tx队列、RDMA命令队列或为特定应用定制的任何新类型的传输DMA行为。可以基于分配给每个队列对的硬件调度器资源来确定支持的Tx队列对的数量。如上所述,PHV可以通过每个阶段,在每个阶段中,关联的阶段单元可执行匹配+动作程序。最终阶段(例如,阶段5)的MPU可以将DMA命令插入到PHV中,用于被载荷DMA阶段(例如,PDMA)执行。
图7和图8示出了根据本发明实施例的示例性Rx P4流水线700和Rx P4流水线800。Rx P4阶段和/或Tx P4阶段可以与本文中其他处描述的P4流水线阶段基本相似,有一些不同的特征。在一些情况下,扩展的P4阶段可以不使用TCAM资源,并且可以使用比P4阶段更少的SRAM资源。在一些情况下,通过在流水线末端具有载荷DMA阶段,扩展的P4流水线可以包括与P4流水线不同的阶段数量。在一些情况下,扩展的P4流水线可以具有本地PHV再循环数据路径,该路径可以不使用分组缓冲器。
参考如图7中所示的Rx P4流水线(即,RxDMA P4流水线),Rx P4流水线可以包括多个阶段单元701-1、701-2、……701-n,每个阶段单元可以具有与图5中所述的阶段单元相同的物理块。Rx P4流水线中的阶段单元的数量可以或可以不与上述的P4流水线的阶段单元的数量相同。在示例中,分组可以从P4网络流水线传递到Rx P4流水线,该P4网络流水线可以包括P4转发、隔离、多播、L4安全和其他网络特征。
在一些实施例中,Rx P4流水线700可以包括被配置成生成RxDMA PHV的PHV分配器块703。例如,如RxDMA所需的PHV的元数据字段(例如,逻辑接口(LIF)ID)可以作为分组之前的连续字段块从P4网络流水线传递通过分组缓冲器。在进入RxDMA P4流水线的第一阶段之前,PHV分配器块703可以提取前置的元数据,并将其定位于RxDMA PHV中。PHV分配器块703可以维持当前在RxDMA流水线中的PHV的数量的计数,以及在流水线中的分组载荷字节的数量的计数。在一些情况下,当PHV计数或总分组字节计数超过高水标时,PHV分配器块703可以停止接受来自分组缓冲器的新分组。这提供了确保从载荷DMA块705再循环的分组具有被处理的优先级并离开流水线的好处。
Rx P4流水线可以包括被配置成控制相关事件之间的顺序的分组DMA块705。分组DMA块也可以称为载荷DMA块。分组数据可以以先进先出的方式发送到分组DMA块705,以等待Rx P4流水线中创建的DMA命令。在Rx P4流水线末端的分组DMA块可以以DMA命令在PHV中放置的顺序来执行分组DMA写入命令、DMA完成队列(CQ)写入命令、中断断言写入和门铃写入。
参考如图8中所示的Tx P4流水线800,Tx P4流水线可以包括多个阶段单元801-1、801-2、……801-k,每个阶段单元可以具有与图7中所述的阶段单元相同的物理块。Tx P4流水线中的阶段单元的数量可以或可以不与上述的Rx P4流水线的阶段单元的数量相同。在示例中,可以使用Tx P4流水线从主机或NIC存储器来传输分组。Tx队列调度器可以选择下一个用于服务的队列,并将LIF、QID提交到Tx P4流水线的开始。
Tx P4流水线可以包括空PHV块803,其被配置来生成要由阶段0中的表引擎读取的地址。空PHV块803还可以向PHV的固有字段插入信息,如LIF或LIF类型。空PHV块803还可以将再循环的PHV,以及插入软件生成的PHV,从Tx P4流水线的最终阶段插入到流水线中。TxP4流水线可以包括分组DMA块805,类似于如图7中所述的分组DMA块。在一些实施例中,TxP4流水线中生成的DMA命令可以被安排在连续的空间中,使得只要指示了第一个命令和最后一个命令,命令就可以按顺序执行。
在一些实施例中,Tx DMA流水线、Rx DMA流水线和P4流水线可以能够在各自流水线的第一阶段前插入软件生成的PHV。软件可以使用生成的PHV来启动MPU程序,执行表更改,或者启动来自扩展的P4流水线的DMA命令。
在一个方面,可以提供包括Tx DMA流水线、Rx DMA流水线和P4流水线和其他组件的系统。系统可以支持基于扩展的P4流水线的主机接口特征(例如,DMA操作和循环),提供改进的网络性能(例如,具有减少的数据停顿的增加的MMPS),故障检测和隔离,基于P4的网络特征(例如,路由、桥接、隧道、转发、网络ACL、L4防火墙、基于流的速率限制、VLAN标签策略、隶属度、隔离、多播和组控制、标签推送/弹出操作、L4负载平衡,用于分析和特定于流的处理的L4流表、DDOS附加检测、抑制,在任何数据分组字段或流状态收集的遥测数据)、安全特征以及其他各种特征。
图9示出了扩展传输流水线(即,TxDMA流水线)900的示例。所提供的IO设备接口可以支持TxDMA流水线操作以从主机系统或NIC存储器发送分组。IO设备接口可以具有改善的性能,例如每级16次读取(即500ns主机延迟),用于直接分组处理的32MPPS或更高,以及减少的延迟。所提供的IO设备接口可以包括其他功能,例如灵活的速率限制控制。例如,逻辑接口(LIF)可以由Tx调度程序独立地进行速率限制。每个LIF可以具有专用的qstate数组,该数组具有HBM中的可编程基地址和可编程数量的队列。设备接口最多可支持2K或更多的LIF。LIF可以包含八个或更多队列类型,每种队列类型具有可编程数量的队列。例如,qstate数组在HBM中可能具有单独的基地址。这允许每个LIF独立地缩放其拥有的队列对的数量和类型,直到虚拟函数创建时确定的最大数组大小。qstate数组中可能有一个或多个qstate类型(例如,八个qstate类型)。每种类型可以具有独立的条目大小控制以及独立的条目数。这使每个LIF可以灵活地混合不同类型的队列。
如上所述,IO设备接口可以是高度优化的基于环的I/O队列接口。扩展的P4程序可用于将速率限制到比基于调度程序的速率限制器更好的粒度。扩展的P4程序可以使用存储在qstate中的时间和存储桶数据对单个队列对进行速率限制。扩展的P4速率限制可以在存在调度程序(每个LIF)速率限制的情况下应用,从而允许应用每个VM或每个接口的速率,而每个队列限制会导致拥塞或其他细粒度的速率控制。例如,扩展的P4速率限制程序可以将XOFF状态设置为主数据传输环,而将其他环留给计时器,管理或拥塞消息传输。在用于实现在扩展的P4流水线中限制的每个队列速率的示例性过程中,程序可以首先确定当前队列是否低于或超过其目标速率。如果确定超过其目标速率,则程序可以丢弃当前调度程序令牌,并设置计时器资源以在将来根据当前令牌级别和速率计算出的某个时间重新调度队列。接下来,该程序可以禁用队列的调度程序位,但仅对流控制的COS中的环禁用该队列。直到对该环发生新的门铃事件,该队列才可能被再次调度,即使对主要数据传输环工作仍需要完成。
如图9所示的TxDMA流水线900可以包括阶段单元901-1、901-2、…901-8和有效载荷DMA块902的流水线。多个阶段单元901-1、901-2、...901-8中的每一个可以具有与如图8所述的相同的阶段单元的物理块。在示例中,可以使用TxDMA流水线从主机或NIC存储器发送分组。Tx队列调度程序可以选择下一个服务队列,并将LIF、QID提交到TxDMA流水线的开头。
在某些情况下,单个队列可能包括多达八个或更多的环,以允许多个事件信令选项。受到直接主机控制的队列可以包含至少一个主机可访问的环,通常是队列类型所需的主描述符环。主机对环p_index的访问可以通过门铃映射。所示示例显示了用于实施Virtio程序的多个阶段。阶段0的表引擎(TE)可以获取队列状态(例如,Q状态)表,以供阶段0的MPU处理。在某些情况下,队列状态还可以包含基于队列对类型的指令偏移地址以加快MPU处理。可以为以太网Tx队列、RDMA命令队列或为特定应用定制的任何新型传输DMA行为编写其他单独的TxDMA程序。可以基于分配给每个队列对的硬件调度程序资源来确定支持的Tx队列对的数量。
应当注意,各种实施例可以与一个或多个类型的无线或有线通信信号和/或系统结合使用,例如,射频(RF)、红外(IR)、频分多路复用(FDM)、正交FDM(OFDM)、时分多路复用(TDM),时分多路访问(TDMA)、扩展的TDMA(E-TDMA)、通用分组无线业务(GPRS)、扩展的GPRS、码分多路访问(CDMA)、宽带CDMA(WCDMA)、CDMA 2000,多载波调制(MDM)、离散多音(DMT),
Figure BDA0002735876470000301
ZigBeeTM等。本发明的实施例可用于各种其他设备、系统和/或网络。
虽然本文已经示出和描述了本主题的优选实施方式,但是对于本领域技术人员容易理解的是,这样的实施方案仅以举例的方式提供。在不脱离本发明的情况下,本领域技术人员现将想到许多变化、更改和替换。应该理解的是,本文所述主题的实施方案的各种替代方案可以在实施本发明中采用。

Claims (26)

1.一种用于可编程IO设备接口的方法,包括:提供可编程设备寄存器、基于存储器的数据结构、DMA块和处理实体的流水线,其中所述处理实体的流水线被配置为:
a)接收包括报头部分和载荷部分的分组,其中所述报头部分用于生成分组报头向量;
b)利用表引擎、通过执行分组匹配操作来生成表结果,其中至少部分基于存储在可编程匹配表中的数据和所述分组报头向量生成所述表结果;
c)在匹配处理单元接收与所述可编程匹配表相关联的一组指令的地址和所述表结果;
d)由所述匹配处理单元根据所加载的一组指令来执行一个或多个动作直到所述指令完成,其中所述一个或多个动作包括更新所述基于存储器的数据结构、插入DMA命令并且/或者发起事件;以及
e)由所述DMA块根据所插入的DMA命令执行DMA操作。
2.如权利要求1的所述方法,进一步包括将所述报头部分提供给后续电路,其中所述后续电路被配置成将所更改的报头部分组装到相应的载荷部分。
3.如权利要求1的所述方法,其中所述可编程匹配表包括DMA寄存器表、描述符格式或控制寄存器格式。
4.如权利要求3的所述方法,其中基于与分组类型有关的分组类型信息来选择所述可编程匹配表,所述分组类型关联于所述报头部分。
5.如权利要求3的所述方法,其中基于由以前阶段选择的匹配表的ID来选择所述可编程匹配表。
6.如权利要求1的所述方法,其中所述表结果包括与所述可编程匹配表有关的键和所述匹配操作的匹配结果。
7.如权利要求1的所述方法,其中所述匹配处理单元的存储器单元被配置成存储多组指令。
8.如权利要求7的所述方法,其中所述多组指令与不同的动作关联。
9.如权利要求7的所述方法,其中多组指令中的每组指令存储在所述存储器单元的连续区域中,并且所述连续区域由所述每组指令的地址来标识。
10.如权利要求1的所述方法,其中所述一个或多个动作进一步包括更新所述可编程匹配表。
11.如权利要求1的所述方法,进一步包括在所述匹配处理单元处理所述匹配表时,将所述匹配表锁定用于所述匹配处理单元的独占存取。
12.如权利要求1的所述方法,其中所述分组以无停顿的方式处理。
13.一种具有可编程IO设备接口的装置,包括:
a)其上存储有多个程序的第一存储器单元,其中所述多个程序与多个动作关联,所述多个动作包括更新基于存储器的数据结构、插入DMA命令或者发起事件;
b)用于接收和存储一表结果的第二存储器单元,其中通过表引擎提供所述表结果,所述表引擎被配置为对(i)包含在报头部分中的分组报头向量和(ii)存储在可编程匹配表中的数据执行分组匹配操作;以及
c)用于响应于所述表结果和由所述装置接收的地址来执行从所述多个程序中选择的程序的电路,其中所述程序执行直到完成,并且所述程序与所述可编程匹配表关联。
14.如权利要求13的所述装置,其中所述装置被配置成将所述报头部分提供给后续电路,并且其中所述报头部分被所述电路更改。
15.如权利要求14的所述装置,其中所述后续电路被配置成将所更改的报头部分组装到相应的载荷部分。
16.如权利要求13的所述装置,其中所述可编程匹配表包括DMA寄存器表、描述符格式或控制寄存器格式。
17.如权利要求16的所述装置,其中基于与关联于所述报头部分的分组类型有关的分组类型信息来选择所述可编程匹配表。
18.如权利要求16的所述装置,其中基于由以前阶段选择的所述匹配表的ID来选择所述可编程匹配表。
19.如权利要求13的所述装置,其中所述多个程序中的每一个都包括一组指令,所述指令存储在所述第一存储器单元的连续区域中,并且所述连续区域由所述地址来标识。
20.如权利要求13的所述装置,其中所述一个或多个动作包括更新所述可编程匹配表。
21.如权利要求13的所述装置,其中所述电路被进一步配置成在所述装置处理所述可编程匹配表时,将所述匹配表锁定用于所述装置的独占存取。
22.如权利要求13的所述装置,其中所述事件与更改所述分组的所述报头部分无关。
23.如权利要求13的所述装置,其中所述基于存储器的数据结构包括以下中的至少一种:用于发起事件的管理令牌、管理命令、处理令牌。
24.一种系统,包括多个如权利要求13的装置,其中所述多个装置被协调成根据一配置并发地或顺序地执行所述一组指令或者一个或多个动作。
25.如权利要求24的所述系统,其中所述配置由从可操作地与所述多个装置耦合的主机设备的主存储器接收的应用指令来确定。
26.如权利要求24的所述系统,其中所述多个装置被安排成根据阶段的流水线来处理所述分组。
CN201980027381.3A 2018-02-22 2019-02-19 可编程计算机io设备接口 Pending CN112074808A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201862634090P 2018-02-22 2018-02-22
US62/634,090 2018-02-22
PCT/US2019/018544 WO2019164827A1 (en) 2018-02-22 2019-02-19 Programmable computer io device interface

Publications (1)

Publication Number Publication Date
CN112074808A true CN112074808A (zh) 2020-12-11

Family

ID=67687248

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201980027381.3A Pending CN112074808A (zh) 2018-02-22 2019-02-19 可编程计算机io设备接口

Country Status (5)

Country Link
US (1) US11263158B2 (zh)
EP (1) EP3756088A4 (zh)
CN (1) CN112074808A (zh)
CA (1) CA3091265A1 (zh)
WO (1) WO2019164827A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114090483A (zh) * 2021-09-30 2022-02-25 上海浦东发展银行股份有限公司 一种基于协程的rdma通信方法、装置及存储介质

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA3074282A1 (en) 2017-08-31 2019-03-07 Pensando Systems Inc. Methods and systems for network congestion management
CA3081591A1 (en) 2017-11-06 2019-05-09 Pensando Systems Inc. Network system including match processing unit for table-based actions
EP3756088A4 (en) 2018-02-22 2021-12-01 Pensando Systems Inc. PROGRAMMABLE COMPUTER WITH I / O DEVICE INTERFACE
US11212227B2 (en) 2019-05-17 2021-12-28 Pensando Systems, Inc. Rate-optimized congestion management
US11294715B2 (en) * 2019-08-28 2022-04-05 Marvell Asia Pte, Ltd. System and method for queuing work within a virtualized scheduler based on in-unit accounting of in-unit entries
US11153221B2 (en) 2019-08-28 2021-10-19 Pensando Systems Inc. Methods, systems, and devices for classifying layer 4-level data from data queues
US11394700B2 (en) * 2020-01-31 2022-07-19 Pensando Systems Inc. Proxy service through hardware acceleration using an IO device
US11431681B2 (en) 2020-04-07 2022-08-30 Pensando Systems Inc. Application aware TCP performance tuning on hardware accelerated TCP proxy services
US11588734B2 (en) 2020-04-28 2023-02-21 Pensando Systems Inc. Systems for providing an LPM implementation for a programmable data plane through a distributed algorithm
US11258707B1 (en) 2020-08-21 2022-02-22 Pensando Systems Inc. Systems for building data structures with highly scalable algorithms for a distributed LPM implementation
US11949604B2 (en) * 2021-10-06 2024-04-02 Inernational Business Machines Corporation Integrated network switch operation
CN114116558A (zh) * 2021-10-14 2022-03-01 南京国电南自维美德自动化有限公司 一种io设备及微机保护装置
CN114185818B (zh) * 2022-02-15 2022-08-02 摩尔线程智能科技(北京)有限责任公司 基于扩展页表的gpu访存自适应优化方法及装置

Family Cites Families (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6157955A (en) 1998-06-15 2000-12-05 Intel Corporation Packet processing system including a policy engine having a classification unit
US7215637B1 (en) 2000-04-17 2007-05-08 Juniper Networks, Inc. Systems and methods for processing packets
US6483699B1 (en) 2000-07-20 2002-11-19 Silicon Graphics, Inc. Baffle system for air cooled computer assembly
US8010469B2 (en) 2000-09-25 2011-08-30 Crossbeam Systems, Inc. Systems and methods for processing data flows
US6985988B1 (en) * 2000-11-09 2006-01-10 International Business Machines Corporation System-on-a-Chip structure having a multiple channel bus bridge
US7035948B1 (en) * 2001-03-19 2006-04-25 Transdimension, Inc. System and method for USB controllers
US7028098B2 (en) 2001-07-20 2006-04-11 Nokia, Inc. Selective routing of data flows using a TCAM
US7418536B2 (en) 2001-07-30 2008-08-26 Cisco Technology, Inc. Processor having systolic array pipeline for processing data packets
US20030229738A1 (en) * 2002-06-05 2003-12-11 Dactron Controller interface
US6906920B1 (en) 2003-09-29 2005-06-14 Google Inc. Drive cooling baffle
US7304996B1 (en) 2004-03-30 2007-12-04 Extreme Networks, Inc. System and method for assembling a data packet
US7975094B2 (en) * 2004-04-15 2011-07-05 Marvell International Technology Ltd. Programmable I/O interface
US7567567B2 (en) 2005-04-05 2009-07-28 Sun Microsystems, Inc. Network system including packet classification for partitioned resources
JP2007124495A (ja) 2005-10-31 2007-05-17 Nec Electronics Corp ストリームデータ処理装置
US7809009B2 (en) * 2006-02-21 2010-10-05 Cisco Technology, Inc. Pipelined packet switching and queuing architecture
GB2443277B (en) * 2006-10-24 2011-05-18 Advanced Risc Mach Ltd Performing diagnostics operations upon an asymmetric multiprocessor apparatus
US20080101016A1 (en) 2006-10-31 2008-05-01 Michael Brooks Airflow baffle for a computer system
US8493979B2 (en) * 2008-12-30 2013-07-23 Intel Corporation Single instruction processing of network packets
US8743877B2 (en) 2009-12-21 2014-06-03 Steven L. Pope Header processing engine
JP5753372B2 (ja) 2009-12-22 2015-07-22 キヤノン株式会社 データ処理装置およびその制御方法
US8611352B2 (en) 2010-04-20 2013-12-17 Marvell World Trade Ltd. System and method for adapting a packet processing pipeline
US9680750B2 (en) 2010-07-06 2017-06-13 Nicira, Inc. Use of tunnels to hide network addresses
US8913613B2 (en) * 2011-02-16 2014-12-16 Oracle International Corporation Method and system for classification and management of inter-blade network traffic in a blade server
US20140025852A1 (en) * 2012-07-19 2014-01-23 Lsi Corporation Configurable Response Generator for Varied Regions of System Address Space
CN103905311B (zh) 2012-12-28 2017-02-22 华为技术有限公司 流表匹配方法和装置以及交换机
US9906445B2 (en) 2013-02-01 2018-02-27 Texas Instruments Incorporated Packet processing match and action pipeline structure with dependency calculation removing false dependencies
US9712439B2 (en) 2013-02-28 2017-07-18 Texas Instruments Incorporated Packet processing match and action unit with configurable memory allocation
US9826067B2 (en) 2013-02-28 2017-11-21 Texas Instruments Incorporated Packet processing match and action unit with configurable bit allocation
US10645032B2 (en) 2013-02-28 2020-05-05 Texas Instruments Incorporated Packet processing match and action unit with stateful actions
US9891898B1 (en) 2015-06-04 2018-02-13 Netronome Systems, Inc. Low-level programming language plugin to augment high-level programming language setup of an SDN switch
US10523764B2 (en) 2015-09-24 2019-12-31 Barefoot Networks, Inc. Data-plane stateful processing units in packet processing pipelines
US9912610B2 (en) 2015-09-24 2018-03-06 Barefoot Networks, Inc. Data-plane stateful processing units in packet processing pipelines
US10511523B1 (en) 2017-05-15 2019-12-17 Barefoot Networks, Inc. Network forwarding element with data plane packet snapshotting capabilities
US10826840B1 (en) 2017-07-23 2020-11-03 Barefoot Networks, Inc. Multiple copies of stateful tables
US10721167B1 (en) 2017-10-09 2020-07-21 Barefoot Networks, Inc. Runtime sharing of unit memories between match tables in a network forwarding element
CA3081591A1 (en) * 2017-11-06 2019-05-09 Pensando Systems Inc. Network system including match processing unit for table-based actions
EP3756088A4 (en) 2018-02-22 2021-12-01 Pensando Systems Inc. PROGRAMMABLE COMPUTER WITH I / O DEVICE INTERFACE
US10997106B1 (en) * 2020-09-22 2021-05-04 Pensando Sytems Inc. Inter-smartNIC virtual-link for control and datapath connectivity

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114090483A (zh) * 2021-09-30 2022-02-25 上海浦东发展银行股份有限公司 一种基于协程的rdma通信方法、装置及存储介质

Also Published As

Publication number Publication date
WO2019164827A1 (en) 2019-08-29
US11263158B2 (en) 2022-03-01
EP3756088A1 (en) 2020-12-30
US20210103536A1 (en) 2021-04-08
EP3756088A4 (en) 2021-12-01
CA3091265A1 (en) 2019-08-29

Similar Documents

Publication Publication Date Title
US11263158B2 (en) Programmable computer IO device interface
CN111684769B (zh) 包括基于表的动作的匹配处理单元的网络系统
US10997106B1 (en) Inter-smartNIC virtual-link for control and datapath connectivity
US11588734B2 (en) Systems for providing an LPM implementation for a programmable data plane through a distributed algorithm
US11431681B2 (en) Application aware TCP performance tuning on hardware accelerated TCP proxy services
US11907751B2 (en) Resource fairness enforcement in shared IO interfaces
US11394700B2 (en) Proxy service through hardware acceleration using an IO device
US11689648B2 (en) Network interface device
CA3167334C (en) Zero packet loss upgrade of an io device
US11258707B1 (en) Systems for building data structures with highly scalable algorithms for a distributed LPM implementation
US10944696B2 (en) Variable-length packet header vectors
US20220166718A1 (en) Systems and methods to prevent packet reordering when establishing a flow entry
US20220292042A1 (en) Network interface device
US11960596B2 (en) Network interface device
US20230224261A1 (en) Network interface device
Salehi et al. A quantitative study on layer-2 packet processing on a general purpose processor

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination