CN114490499A - 用于流送输入/输出数据的系统、装置和方法 - Google Patents

用于流送输入/输出数据的系统、装置和方法 Download PDF

Info

Publication number
CN114490499A
CN114490499A CN202111188982.8A CN202111188982A CN114490499A CN 114490499 A CN114490499 A CN 114490499A CN 202111188982 A CN202111188982 A CN 202111188982A CN 114490499 A CN114490499 A CN 114490499A
Authority
CN
China
Prior art keywords
data
buffer
streaming
host
application
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
CN202111188982.8A
Other languages
English (en)
Inventor
L·莫舒尔
I·甘加
R·科恩
K·A·多什
J·J·布朗
M·德巴戈
S·多伊尔
P·弗莱明
D·贾亚斯姆哈
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.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of CN114490499A publication Critical patent/CN114490499A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/62Queue scheduling characterised by scheduling criteria
    • H04L47/621Individual queue per connection or flow, e.g. per VC
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • H04L65/61Network streaming of media packets for supporting one-way streaming services, e.g. Internet radio
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/17Interprocessor communication using an input/output type connection, e.g. channel, I/O port
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/24Traffic characterised by specific attributes, e.g. priority or QoS
    • H04L47/2416Real-time traffic
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/39Credit based
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/62Queue scheduling characterised by scheduling criteria
    • H04L47/625Queue scheduling characterised by scheduling criteria for service slots or service orders
    • H04L47/6255Queue scheduling characterised by scheduling criteria for service slots or service orders queue load conditions, e.g. longest queue first
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/62Queue scheduling characterised by scheduling criteria
    • H04L47/625Queue scheduling characterised by scheduling criteria for service slots or service orders
    • H04L47/6275Queue scheduling characterised by scheduling criteria for service slots or service orders based on priority
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9005Buffering arrangements using dynamic buffer space allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/484Precedence
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5021Priority

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Multimedia (AREA)
  • Mathematical Physics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

在一个实施例中,一种系统包括设备和主机。设备包括设备流缓冲器。主机包括:用于执行至少第一应用和第二应用的处理器;主机流缓冲器;以及主机调度器。第一应用与第一发送流送信道相关联,以将第一数据从第一应用流送到设备流缓冲器。第一发送流送信道在设备流缓冲器中具有第一分配量的缓冲器空间。主机调度器至少部分地基于在设备流缓冲器中的第一分配量的缓冲器空间中的空间可用性来调度第一数据从第一应用到第一发送流送信道的入队。描述并要求保护其他实施例。

Description

用于流送输入/输出数据的系统、装置和方法
本申请要求享有于2020年11月12日提交的题为STREAMING I/O ARCHITECTURE的美国临时专利申请第63/113,105号的优先权,该美国临时专利申请的公开内容通过引用并入本文。
技术领域
实施例涉及计算机系统中的数据通信。
背景技术
在中央处理单元(CPU)与其他设备(例如,磁盘、网络接口卡(NIC)、现场可编程门阵列(FPGA)、加速器等)之间的数据通信当前使用多个来回(back-and-forth)协调动作来操作。这些动作中的每一个持续至少几微秒,并且可能导致在CPU与其他设备之间的数据传送的整体延时。
附图说明
图1是根据各种实施例的包括流送(streaming)子系统的系统的框图表示。
图2是示出根据各种实施例的具有存储器语义的流送接口的图。
图3是根据各种实施例的包括流送子系统的系统的框图表示。
图4是根据各种实施例的包括流送子系统的系统的框图表示。
图5是根据各种实施例的经由流送子系统的对等流送流的框图表示。
图6是根据各种实施例的用于经由流送子系统的设备到主机流送流的框图表示。
图7A-7C是描述根据各种实施例的零拷贝存储器的图。
图8是示出根据各种实施例的经由流送子系统在流送信道流内的传送的图。
图9是示出根据各种实施例的用于发送流送I/O语义的应用软件到I/O交互的图。
图10是示出根据各种实施例的用于接收流送I/O语义的应用软件到I/O交互的图。
图11A和图11B是根据各种实施例的用于支持流送信道架构的命令、输入参数和输出参数的示例。
图12示出了根据各种实施例的用于实现流送信道架构的示例过程。
图13示出了根据各种实施例的适于使用以实现本文(特别是关于图1-12)描述的组件和技术的示例计算设备。
图14描绘了根据各种实施例的可以与计算设备结合使用的计算机可读存储介质。
图15示意性地示出了可以包括如本文所描述的各种实施例的计算设备。
图16是包括流送子系统的实施例的系统的框图表示。
图17是示出的实现流管理的方法的实施例的流程图表示。
图18是从主机设备到I/O设备流送数据的方法的实施例的流程图表示。
图19是包括流送子系统的实施例的系统的框图表示。
图20是从I/O设备到主机设备流送数据的方法的实施例的流程图表示。
图21是根据实施例的接口电路的框图表示。
图22是根据实施例的系统的框图表示。
具体实施方式
本文描述的实施例可以针对流送I/O架构。这种流送I/O架构的示例可以包括使用流缓冲器在CPU与设备之间来回传递数据,该流缓冲器包括流送协议、流控制、流缓冲器格式、调度器、缓冲器管理器以及流缓冲器的接口到软件(其包括应用软件)的暴露。由于减少了在旧有实现方式(其包括PCIe旧有实现方式)中发现的接口之间的多个交互的数量,因此这些实施例可以减少数据传送延时。这些实施例可以是多兆兆位(multi-terabit)流送数据递送技术的一部分。实施例还可以被称为用于在处理器与设备之间的数据流的低延时流送信道架构或流送数据递送系统(SDDS)。
本文描述的实施例可以用作向外扩展计算(scale-out computing)的基础,特别是用作软件如何与I/O设备(例如,网络设备)交互的基础。这些I/O设备可以包括网络接口卡、存储设备、加速器和其他类似设备。软件-I/O接口的旧有架构是在几十年前被确定的,并且近期已经造成了针对CPU设备的关于将数据从各种源传输到各种存储介质的数据移动和处理问题。由于以太网技术达到400Gb每秒(Gbps)并在不久的将来可能达到800Gbps-1.6兆兆位每秒(Tb/s)(这将用于解决新兴的数据中心工作负载,例如,人工智能(AI)、机器学习(ML)、流送服务等),因此这种数据移动和处理问题将可能增加。
旧有网络延时开始影响向外扩展计算。在微秒时间尺度处,软件调度方法可能过于粗粒度且不切实际,而基于硬件的方法可能要求太多资源来屏蔽数据移动和各种相关联的协调操作的延时。近期,存在一种用于将大型应用重构为许多较小的部分(其被称为微服务)的微服务趋势,特别是在云计算、数据中心计算和边缘计算方面,该微服务可以被独立开发、改进、负载均衡、扩展等,并且通过在微服务之间传送消息或执行微服务间过程调用来执行大型应用的工作。然后,这样被重构为微服务的大型应用的不同部分可以在通过网络连接的多个机器上彼此独立地放置、复制等,或者通过这些部分在分布式存储设备上更新的数据彼此交互。这增加了机器间和设备间的数据移动和处理,这使得数据移动和处理延迟加剧了数百倍,并进一步加重了如CPU、GPU等计算设备的负担,需要附加的代码来执行设备间和机器间数据移动并等待这种数据移动完成。在其他新兴领域(例如,表现出高度的设备到设备通信的物联网(IOT)计算)中,类似的数据移动和处理瓶颈限制了通过使用定制的现成组件解决问题的速度和规模,并且使得使用昂贵的、难以扩展的、专门设计的组件和软件成为必需。
大规模的微服务趋势、百万兆级的计算和数据存储、边缘计算、5G、网络功能虚拟化、数据中心内的分解(disaggregation)、异构编程以及加速器、智能存储装置、数据中心结构等的出现,都对旧有实现方式中去往和来自CPU的“最后一英寸”数据传送造成压力。“最后一英寸”指代在机器内在需要向软件任务发送数据或从软件任务接收数据的任何设备之间的协调,该软件任务逐片地或以分组、消息、页、块等各种单位分别消费或产生数据。
这些旧有实现方式是遍布从高吞吐量分解式存储元件到12+兆兆字节交换机和高速NIC的设备的。同时,支持AI的实时计算继续驱动人均(per-capita)数据创建和消费。另外地,数十亿物联网(IoT)设备的数据操作正经历与旧有实现方式类似的问题,这些问题可能会影响机器到机器(M2M)通信、存储、数据过滤、时间序列分析等。数据正在以拍字节每秒的规模产生,并且必须通过大规模并行和分布式计算被移动、处理、过滤、清洗和组织以用于计算。随着这些和其他计算变得普遍存在,高速且高效的数据传送已经变得越来越重要。
这些旧有I/O架构实现方式通常难以实现非常低的延时和非常高的吞吐量,因为这些旧有I/O架构实现方式需要在基于处理器的计算的负载存储语义与数据传送操作的I/O语义之间来回交叉,该数据传送操作是在CPU与诸如磁盘、NIC或者甚至是专用计算设备(如FPGA)或从其自己的私有高速存储器操作的加速器之类的设备之间进行的。
在以下描述中,将使用本领域技术人员通常采用的术语来描述说明性实现方式的各种方面,以将他们的工作实质传达给本领域其他技术人员。然而,对于本领域技术人员将显而易见的是,本公开的实施例可以仅利用所描述的方面中的一些来实践。出于解释的目的,阐述了特定数字、材料和配置以便提供对说明性实现方式的透彻理解。对于本领域技术人员将显而易见的是,可以在没有具体细节的情况下实践本公开的实施例。在其他实例中,省略或简化了公知的特征,以免模糊说明性的实现方式。
在以下详细描述中,参考构成了其一部分的附图,在附图中相同的附图标记始终表示相同的部分,并且其中通过说明的方式示出了其中可以实践本公开的主题的实施例。应该理解的是,可以利用其他实施例,并且可以在不脱离本公开的范围的情况下做出结构或逻辑改变。因此,以下详细描述不应被认为具有限制意义,并且实施例的范围由所附权利要求书及其等效物来限定。
出于本公开的目的,短语“A和/或B”表示(A),(B),或(A和B)。出于本公开的目的,短语“A,B和/或C”表示(A),(B),(C),(A和B),(A和C),(B和C),或(A,B和C)。
说明书可以使用基于透视的描述,例如,顶部/底部、内/外、上方/下方等。这样的描述仅用于促进讨论,并且不旨在将本文描述的实施例的应用限制到任何特定定向。
说明书可以使用短语“在实施例中”或“在多个实施例中”,这些短语可以各自指代相同或不同实施例中的一个或多个实施例。此外,关于本公开的实施例使用的术语“包括”、“包含”、“具有”等是同义的。
本文可以使用术语“与……耦合”及其衍生词。“耦合”可以表示以下中的一个或多个。“耦合”可以表示两个或更多个元件直接物理接触或电接触。然而,“耦合”还可以表示两个或更多个元件彼此间接接触,但仍然彼此协作或交互,并且“耦合”可以表示一个或多个其他元件耦合或连接在称为彼此耦合的元件之间。术语“直接耦合”可以表示两个或更多个元件直接接触。
如本文所使用的,术语“模块”可以指代以下各项、是以下各项的一部分或包括以下各项:专用集成电路(ASIC)、电子电路、执行一个或多个软件或固件程序的处理器(共享的、专用的或组)和/或存储器(共享的、专用的或组)、组合逻辑电路和/或提供所描述的功能的其他合适的组件。
参考图1,示出了根据各种实施例的包括流送子系统340的系统300的框图表示。根据各种实施例,流送子系统340被配置为处理在处理器与设备之间的数据的交换。CPU 320经由流送子系统340耦合到I/O设备330。在实施例中,CPU 320可以是多个CPU。在实施例中,CPU 320可以具有运行多个软件线程322、324、326的多个核心。在实施例中,I/O设备330可以是NIC、固态驱动器(SSD)等。在实施例中,I/O设备330可以是XPU设备,该XPU设备可以是CPU、图形处理器单元(GPU)、现场可编程门阵列(FPGA)或某种其他设备。
与可以使用分组处理和从I/O到存储器I/O的转换的旧有实现方式不同,实施例使用流送子系统340直接从数据流操作/操作到数据流。流送子系统340是向CPU 320呈现流送信道的接口。流送子系统340包括硬件辅助和加速机制,以产生对在例如CPU 320上运行的应用322、324、326无缝的抽象。I/O设备330被配置为使用流送子系统340作为到CPU 320的双向通信对等体(peer)。
在实施例中,经由流送子系统340流送数据可以是第一类操作,该第一类操作受到流送子系统340的抽象的信道(下文进一步描述)中的容量耗尽的限制,该第一类操作将数据的生产者(例如,CPU 320和I/O设备330)链接到数据的消费者(例如,CPU 320和I/O设备330)。
由概念图300所描述的架构的目标可以是:在抽象的同步编程模型下,以高多线程和多编程规模,以低延时递送多兆兆位,该抽象的同步编程模型既不涉及排队,也不会在常规情况下造成损失。异常或不常见情况的示例包括但不限于:影响在CPU 320与I/O设备330之间的通信的拥塞的缓冲器、无法与设备或处理器保持联系的拥塞的处理器或设备、以及其中软件正在处理罕见事件(例如,页错误)并且无法及时执行动作以保持其I/O动作流线化的条件。在实施例中,应用322、324、326不知道或不关心其正在与I/O设备330交谈,并且替代地在需要应用322、324、326时使用类存储器语义来访问数据。
参考图2,示出了根据各种实施例的示出具有存储器语义的流送接口的图400。图400示出了在CPU 407与I/O设备408之间的协调。CPU 407可以类似于CPU 320,并且I/O设备408可以类似于I/O设备330。在实施例中,CPU 407被配置为向I/O设备408提供流有效载荷416,并且I/O设备408被配置为处理有效载荷418。
旧有系统通常包括用于复杂的有效载荷的数百个不同的交互。图400的流送架构可以将典型地由旧有系统执行的数百个交互减少为图400的单动作交互示例。这种单动作交互可以被认为是逻辑上的单动作交互。在实施例中,为了效率,可以将单动作交互分为较小的部分,但是除非CPU周期稀缺,否则典型地不会发生交互的延时膨胀(dilation)。
参考图3,示出了根据各种实施例的包括流送子系统340的系统的框图表示。CPU520可以类似于CPU 320、407,并且I/O设备530可以类似于I/O设备330、418。在实施例中,流送信道架构(也称为流送子系统340)包括硬件组件和软件主机接口。在实施例中,图3中示出的架构包括三个功能区域。第一功能区域是流送协议功能区域540,该流送协议功能区域540可以被实现为使用作为CPU 520和I/O设备530的一部分的非核心(未示出)的接口。流送协议功能区域540包括可以作为I/O设备530的一部分的流缓冲器542以及可以作为CPU 520的一部分的流缓冲器544。在实施例中,非核心包括微处理器的功能,这些功能不在核心中,但紧密地连接到核心以实现高性能。非核心也可以称为“系统代理”。流送协议功能区域540被配置为采用流缓冲器542、544来实现在两个流缓冲器542、544之间的流控制并支持流缓冲器格式。
第二功能区域是暴露的流缓冲器到软件功能区域550,该暴露的流缓冲器到软件功能区域550可以在非核心中实现。在实施例中,暴露的流缓冲器到软件功能区域550包括流送信道554、调度器、QoS和辅助558。在实施例中,暴露的流缓冲器到软件功能区域550将流缓冲器542、544暴露为应用562可用的流送信道554。暴露的流缓冲器到软件功能区域550还可以作为用于计算和I/O的调度器执行(如下面关于图4进一步讨论的),并提供缓冲器管理功能和其他辅助558。
第三功能区域是启用的同步存储器语义功能区域560,该启用的同步存储器语义功能区域560可以在指令集架构(ISA)级别实现。启用的同步存储器语义功能区域560可以包括数据流送。在实施例中,数据流送包括使数据入队和出队,以及实现可选的零拷贝所有权。在实施例中,可以通过添加到CPU的特殊指令来实现针对入队和出队操作的零拷贝,如图7A-7C中所描述的。
实施例可以包括用于管理缓冲器和用于执行各种规范化操作的各种硬件辅助558。这些规范化操作可以包括:从报头或有效载荷中解包数据并将该数据放置在期望的(例如,解串行化)格式中,或例如从非串行化格式转换为串行化格式;选择数据元素并根据这些数据元素组成新的数据元素(例如,执行收集或分散操作);和/或将数据作为逻辑上连续的流呈现给应用,同时在辅助数据结构中记录分组和消息边界。这种规范化操作避免了数据转换、可以移除或隐藏各种I/O描述符的管理,并且可以使如压缩、加密、解压缩和解密的操作在硬件中自动执行。
在实施例中,流送I/O架构(也称为流送子系统340)包含流送信道554,该流送信道554由三个实现方式到旧有实现方式组成:流缓冲器542、544、流送指令集架构(ISA)指令、以及流缓冲器I/O协议。
流缓冲器
可以使用在处理器高速缓存、存储器侧高速缓存(例如,L4)和与CPU 520相关联的存储器中可用的容量来实现流缓冲器。在实施例中,可以利用DRAM来备份存储器。在实施例中,类似于I/O设备,流缓冲器可以被划分为虚拟提示(cue)。
流缓冲器经由流缓冲器544在CPU 520处实现,并且经由流缓冲器542在I/O设备530处实现。通过该实现方式,每个流缓冲器542、544可以将其向彼此发送/从彼此接收的数据汇集入或汇集出。数据可以在任一方向上(从CPU 520到I/O设备530或反之亦然)平滑地流动,其中流控制由下面关于流送I/O缓冲器协议描述的各种策略机制实现。
流送指令集架构(ISA)指令
ISA指令使应用562能够使数据入队到流送信道554信道和使数据从流送信道554信道出队。在实施例中,可以通过添加到CPU的特殊指令来实现针对入队和出队操作的零拷贝,如图7A-7C中所描述的。在实施例中,这些指令从旧有应用集成架构(AIA)排队指令前进,因为这些指令是定向到流的,并且包括用于引起自动动作(例如,信用管理、缓冲器空间和描述符管理、各种数据转换中的挂钩(hooking)以及控制转向操作)的逻辑。这些指令可以在硬件中实现或者被重定向到不同代的实现方式中的硬件和仿真软件的组合。
流送I/O缓冲器协议
现有的PCIe电气设备可以用于运行PCIe的扩展、快速计算链路(CXL)、或与流送信道协议组合。在实施例中,流送消息协议允许将源数据推送到目的地,该目的地包括PCIe总线、设备和功能(BDF)、进程地址空间ID(PASID)、流有效载荷和元数据。流送I/O缓冲器在两个方向上(从I/O设备530到CPU 520以及从CPU 520到I/O设备530)操作。
流送信道
在实施例中,流缓冲器544被组织为多个流送信道554。换言之,多信道抽象覆盖在流缓冲器544上,因此流送子系统340在产生端(例如,CPU 520)与消费端(例如,I/O设备530)之间双向地呈现多个流送信道554。流送信道554可以具有不同的流速率和不同的缓冲量,使得可以构建不同的服务类别,以在不同用途之间共享但灵活地划分流缓冲器554的使用。
在实施例中,可以直接从软件(例如,在应用562中找到的软件)访问流送信道554。在实施例中,应用562可以通过使用上面讨论的指令“流送入队”和“流送出队”直接从流送信道554取回数据或将数据插入到流送信道554中。这些指令与管理流送信道554和流缓冲器542、544的流送I/O缓冲器协议中的逻辑一致地工作。指令和管理流送信道554和流缓冲器542、544的逻辑呈现虚拟连续空间的抽象以从基于CPU的软件进行访问,即使不同的流送信道554在流缓冲器542、544中获得不同的空间量,并且即使任何给定流送信道554在流缓冲器542、544中获得的空间在物理上不连续。
虽然对流送信道554的重复访问可以在流送信道中产生/消费数据(分别用于出口和入口),但应用562也可以在不改变产生或消费的位置的情况下窥视流送信道554,因此允许控制随机访问的量。
此外,实施例可以包括流送指令,这些流送指令执行在(去往/来自)处理器(未示出)的各种架构寄存器与流缓冲器542、544中的指定元素之间的多元素传送。当在流送信道554中的数据被产生或消费时,可以通过跟踪流送信道554中的移位逻辑分组和消息边界的硬件来自动确定其中指定元素驻留的流缓冲器532、544中的偏移。每当检测到特定条件时(例如,当报头指针移动超过逻辑分组边界时),这些多元素传送可以一次性执行。
这允许基于CPU的软件在流送信道554上实现迭代器,而不必通过软件代码维护分组和消息边界信息。
实施例可以包括流送指令,这些流送指令执行从给定流送信道554到存储器(未示出)/从存储器到给定流送信道554的自动批传送(例如,绕过在入口期间将数据带入CPU520),并发布数据从存储器直接到流送信道554中的偏移集合中的直接移动。
微架构规定和指令选项可以支持数据在I/O设备530与CPU 520之间的无拷贝或减少拷贝的传输。例如,经由流缓冲器542、544传送到存储器空间中的数据或传送出存储器空间的数据可能不会通过基于内核的联网栈,除非例如为了与旧有软件兼容。
因此,根据流送子系统340的实施例设计的软件和运行时不必在每个应用中在内核管理的缓冲器与用户可访问范围之间移动数据。实施例可以通过间接层实现无拷贝或减少拷贝的传输,其中由流送入队或流送出队操作使用的流送信道554中的逻辑偏移的范围在硬件中被转换为位于应用地址空间中的存储器地址的集合。
流送入队和出队操作也可以直接通过存储器(未示出)将事件信令合并到应用562。因此,与通过PCIe寄存器(例如,经由门铃)执行通知和完成通知相反,软件和设备驱动器一起配置可高速缓存存储器中的地址,其中可以通过使用普通的加载-存储操作来接收或发送这种事件信号。因此,可以简化旧有轮询以检查存储器地址,并且可以简化旧有通知以存储在存储器地址中。
在实施例中,应用562或OS/运行时软件可以使用UMONITOR和UMWAIT的变型来在这样的存储器位置上轮询,而无需主动执行指令。替代实施例可以包括在多于一个存储器位置上轮询的能力,这可以等效于选择系统调用的非指令版本。
替代实施例还可以提供使用硬件单元在一个或许多位置上轮询而不停放内核线程的能力。其他实施例可以为硬件轮询提供激活自动轻量级回调的能力。自动轻量级回调可以包括保存通用寄存器(GPR)的指定子集(其典型地为rax、rsp、rip和/或rbp),以及分支到相同应用地址空间内的软件指定的地址。自动轻量级回调还可以包括在目标地址处的软件结语(epilogue),以执行其需要改换意图的寄存器的任何进一步溢出和填充。
在实施例中,在软件结束时关于轻量级回调发布的非本地返回可以在回调完成时将控制返回给被抢占的线程。这可以通过确保通过流送信道554递送的事件指向CPU 520来实现,该CPU 520具有准备好接收这种通知的停放的线程上下文。
在实施例中,回调代码的优选样式可以是运行到完成的执行和基于继续的执行。替代实施例可以包括不在DRAM中而是在可从CPU 520访问的低延时寄存器文件中的位置。
资源的敏捷复用
参考图4,示出了根据各种实施例的流送子系统340的框图表示。图4示出了根据各种实施例的流送子系统340内的调度器的细节。流送子系统340包括以下关于资源的敏捷复用描述的三个特征。这三个特征包括:硬件(H/W)调度器672;通过基于信用的反馈和流控制来执行协作软件线程调度的软件调度器674;以及服务质量(QoS)673。图4中示出的一些组件可以类似于图3中的组件,特别是CPU 620、I/O设备630、流缓冲器642、644、流送信道654和应用662可以分别类似于CPU 520、I/O设备530、流缓冲器542、544、流送信道554和应用562。
所描述的组件以协作方式操作,使得任何有限的物理资源(例如,主要是流送信道654中的缓冲器容量、CPU 620中的处理器周期、处理器高速缓存容量(未示出))可以通过对流送数据的处理的协调来实现高效利用。特别地,不是应用662针对数据进行轮询,而是应用662基于数据推进其工作。推进包括在数据变得可用时自动向前移动,而不是必须被通知并且从等待状态中唤醒,以及必须与操作系统交互以便在执行模式下进行设置。类似地,当没有足够的空间时(这可能导致停顿(stall)或过早地将数据驱逐到存储器中,并且在通常情况下,两者都会发生),与将数据推送到流缓冲器642、644中相反,流送信道654的生产者端和消费者端通过对两端的操作进行反馈驱动的调度来使其速率保持对齐。
图4示出了网络接口、流送信道654、流缓冲器642、644、硬件数据和事件递送子系统如何与软件调度器674和应用662一致地工作。为了简洁起见,图4示出了入口业务的情况,并且即使使用了联网I/O设备630作为示例,解决方案概念也同样适用于其他接口(存储装置、加速器等)。
在实施例中,H/W调度器672是硬件微调度器引擎672。硬件微调度器引擎672可以被称为微调度器或μs。硬件调度器672可以被实现为核心CPU 620微架构的扩展。硬件微调度器引擎672可以基于其监视的编程条件被触发。当硬件微调度器引擎672被触发时,硬件微调度器引擎672导致指定线程或应用662上的上下文切换。上下文切换可以是到匿名线程的地址内空间切换,该匿名线程仅具有几个GPR(rax、rsp、rbp和rip),并与在目标CPU 620上当前运行的线程共享相同应用的地址空间上下文。因此,上下文切换可以被认为是非常轻量级的陷阱(trap),但上下文切换不会导致将控制传送到内核实体。导致这种控制的传送的条件可以包括但不限于:(a)写入受监视的存储器位置,或(b)满足某种受监视的条件。受监视的条件可以包括在流送信道654中的产生偏移与在流送信道654中的消费偏移之间的距离超过阈值,或者自硬件微调度器引擎672的最后一次触发以来经过了阈值微秒数。
通过基于信用的反馈和流控制的协作软件线程调度
在旧有实现方式中,软件线程调度(例如,响应于I/O事件对应用662的调度)通常(要么通过轮询,要么通过在中断服务例程中生成的唤醒)响应于由软件监视的事件。这两种机制以不同的方式粗粒度化。中断驱动执行会导致跨栈的低效率,并且为了效率通常仅限于低频率。轮询会导致忙等待,并且因此不能一直从每个核心进行。
粗粒度轮询和中断驱动执行各自可以在旧有实现方式中产生延迟和不协调调度的挑战。特别地,软件调度器可能会太晚分派应用动作,以至于不能防止溢出流送信道的数据在入口进入存储器,或者当对等设备有空闲容量来吸收出口数据时不能足够快地产生出口数据。
在实施例中,创建元数据,该元数据可以由流送信道654的每一端采用以产生可用的流送信道654容量的存储器映射的视图或寄存器映射的视图,使得当可用的信道654容量相对于产生速率在消费速率的方向上过慢或过快得偏离得太远时,软件调度器674可以主动地适应应用调度策略。
在实施例中,也在图3中示出的QoS 673为当前代和路线图资源导向器技术(RDT)添加功能。在实施例中,例如,对于具有不同服务质量目标的不同应用662,QoS 673提供流缓冲器资源的细粒度的、敏捷的优先级排序,以便向更高优先级的流送信道654(例如,用于高带宽视频流送、实时虚拟机(VM)迁移、大规模AI/ML训练等的那些流送信道654)提供的更大容量的缓冲。在实施例中,QoS 673还使大量信用对每个流送信道654可用,以实现例如漏桶协议,以在CPU 620与I/O设备630之间以低延时每单位时间传送更多数据。其他QoS 673能力包括处理器周期的更多分配,以及优先保留由更高优先级流送信道应用线程在L1和L2高速缓存中创建的或带入L1和L2高速缓存中的数据。
在实施例中,QoS 674能力还可以包括对高速缓存容量的定义部分(在L1、L2中)和其他竞争性分配的处理资源(例如,物理寄存器文件、转换后备缓冲器(TLB)条目、分支目标缓冲器(BTB)条目等)的定义部分加防火墙,以确保当它们的应用662由硬件调度器672或软件调度器674调度时,这种(例如,高优先级)流送信道使用不会遭受资源匮乏。
在资源不受限的情况下组件的示例集成操作
在资源不受限的情况下,每当I/O设备630需要向CPU 620发送数据时,如果在流送信道654中有足够的可用容量,则I/O设备630可以继续进行。反方向的情况也是如此。此外,在不受限的情况下,CPU 620可用于要被调度的数据接收线程或数据发送线程,数据接收线程或数据发送线程分别用于在CPU 620处消费或产生数据。流送信道654简单地逐步拆分出缓冲器中所需的容量,使用该容量来保存内容,同时通过基于存储器或寄存器的指示(例如,经由更新状态标志和/或数据可用度量或容量可用度量)来指示调度器、硬件调度器672或软件调度器674。
在入口情况下,CPU 620的数据消费(接收和处理)跟上来自I/O设备630的流入速率,或者在设备处通过从CPU 620通过流送信道654到产生设备630的反馈来管理流入速率。对于出口情况,去往其他方向的数据在CPU 620产生并流向I/O设备630,处理是类似的,除了在CPU 620处产生数据的速率:(a)被不断检查,使得流送信道654中的可用容量不会过早耗尽,以及(b)保持足够高,使得设备在仍有足够的流送信道654容量时不会空闲,使得CPU620不受缓冲器容量限制。
在实施例中,对于入口情况,被调度为接收和处理数据的应用662使用指令来访问来自流送信道654的数据。
所使用的地址可以是相对于距流中的已知位置的开始的逻辑偏移。该偏移距离被转换为逻辑信道地址,该逻辑信道地址进而被映射到逻辑流缓冲器地址。在理想情况下,该流缓冲器地址指代处理器高速缓存层级(例如,L1或L2)中的高速缓存行。
因此,进行对数据的访问,这无需软件的任何努力来计算所讨论的偏移的有效存储器地址,也无需软件的任何努力来管理用于接收数据的存储器。在理想情况下,感兴趣的数据在L1或L2中找到,并且批寄存器加载指令可以简单地利用多个数据项填充各种GPR,这些数据项在批寄存器加载指令中进行了简洁的描述。在L1或L2已经耗尽近期容量阈值的情况下,L1或L2可能驱逐一些高速缓存行,并且感兴趣的数据可能位于这些被驱逐的高速缓存行中。因此,在由于数据的生产者以比数据的接收方的理想速率更高的速率运行而导致容量超出限度的情况下,访问随后可以继续进行到L3、L4中或最终进行到存储器中。软件调度策略因此可以指派CPU带宽的更高部分,并使得更多L1或L2高速缓存容量可用。这可以通过对QoS 673模块进行编程来确定。单独地且同时地,硬件调度器672计算理想的产生速率,并向I/O设备630提供接收方不能以发送方的当前速率继续进行并且发送方将降低发送速率或停止的指示,使得降低其发送速率。
注意,这样的流调整是在旧有实现方式中执行的,使得NIC不会超过NIC中的可用容量的量运行,例如,在超过容量时丢弃分组。NIC可以通过中断来通知CPU,或者在轮询模式下被动更新在PCIe寄存器处的排队的分组计数,但流控制的其余部分的责任在于软件(OS或应用,或两者)。相比之下,本文的实施例使该旧有过程中尽可能多的部分自动执行,并且虽然实施例可以依赖于在缓冲器耗尽的条件下丢弃分组,但在一般情况下,实施例消除了根据软件中的指令管理流以及从分组和分组偏移转换到逻辑流偏移的负担,反之亦然。
在资源受限的情况下组件的示例集成操作
接下来考虑资源限制的情况,其中例如在CPU 620处存在有限数量的应用662,这些应用662正在运行和消费(或产生)用于不同的流送信道654的数据。流送信道654(也可以称为连接)的数量可能远远超过应用662的数量。然而,只有这些流送信道654中的一定数量的流送信道可以如此快速地产生数据,使得对应的应用662需要持续可用,以如此快速地排空(drain)(或者在相反的情况下消费)数据,使得应用662线程需要持续可用以进行填充。
在实施例中,常见情况由响应于信道活动的线程或应用662的敏捷复用来处理,使得更多的线程可以及时地在多个逻辑硬件线程上高效地复用。然而,如果可用的(或策略配给的)硬件上下文不足以保持多个软件线程同时执行,则支持延时关键的、高带宽操作的那些软件线程在软件调度器674中获得优先权,而尽力而为应用通过其流送信道654达到饱和以及将数据从高速缓存溢出到存储器或丢弃分组来使其消费节流。在实施例中,对于不能接受分组丢失的任何应用,流送I/O架构可以使用更大容量的DRAM来保存传入数据,但是,这以尽力而为应用变慢为代价,因为尽力而为应用不得不遇到更大数量的高速缓存未命中。进而,这会触发更高级别的端到端流控制协议,例如,显式拥塞通知、基于往返延迟时间(RTT)的TIMELY协议等。
现在返回图3,其也可以称为描述了SDDS,图3定义了以超低开销和高效率针对在CPU 520与I/O设备530之间流送数据进行优化的流送子系统340。在实施例中,I/O传送的旧有门铃、描述符和数据阶段被流线化为由数据传送的源发起的“推送流”。CPU 524发送该流,并且I/O设备534接收该流。在实施例中,流送信道554支持具有先进先出(FIFO)排序的流送数据的单向流。在实施例中,所支持的流方向包括主机到设备(H2D)流方向和设备到主机(D2H)流方向。在其他实施例中,所支持的方向可以包括主机到主机(H2H)和设备到设备(D2D)。H2H和D2D的操作原理可以类似于H2D和D2H的操作原理。
可以通过划分和动态管理各种高速缓存结构中的容量的总量来支持多个流送信道554,这些高速缓存结构可以包括处理器高速缓存、存储器侧高速缓存、设备上缓冲等,这些高速缓存结构由物理存储器的区域显然地支持以用于溢出。这些物理区域被描绘为在两个硬件对等体处存在的流缓冲器542、544。
在实施例中,流缓冲器542、544被暴露给软件。基于对传送的调度将缓冲器资源动态地指派给流送信道554,使得可以高效地共享资源。缓冲器资源也可以使用“预调度”来专用,以减少延时敏感的用例的延时。在实施例中,缓冲器资源的共享是由信用方案管理的,以避免跨流送信道554的队头阻塞(head of line blocking)。这意味着当目的地端没有汇集在流送信道554中的数据时(因为这些数据以足够高的速率从源端被推送到流送信道554中),该流送信道554可用的高吞吐量高速缓存资源会自动减少。在这种情况下,在流送缓冲器中对该流送信道554可用的容量的部分受到限制,使得那些流送信道接收方从其快速排空数据的其他流送信道554具有它们需要的足够的高速缓存或缓冲资源以维持其高速率的数据流。在实施例中,对主机架构(例如,CPU 520,但不限于CPU 520)提出的改变可以允许直接从应用562访问流送信道554,和/或可以允许流送信道554中的数据流驱动及时、敏捷的线程或应用调度。在实施例中,SDDS将被分层在现有I/O标准(例如,PCIe和CXL)之上。
参考图5,示出了根据各种实施例的经由流送子系统340的对等流送流的框图表示。通过流送信道通信的对等体702、704以及在对等体702、704之间的各种支持接口在图5中描述。在左手侧是一个对等体702,其被称为主机;并且在右手侧704是另一对等体,其被称为设备。主机702和设备704角色是通用的,如下面所阐明的。
在实施例中,可以使用与网络软件接合的以太网NIC来说明这个概念,但是该以太网NIC可以移植到诸如加速器和/或存储装置之类的其他设备。
虽然所示的主机702是CPU设备,并且流送被示为在主机702上的CPU线程706与NIC704之间进行,但是主机702可以是非CPU主机,例如,GPU或者CPU和集成GPU的组合。
而且,虽然来自主机侧702的交互由CPU线程706执行指令来完成,但这并不意味着排除例如从宏操作(例如,由嵌入式张量单元执行的张量操作、由在专用CPU、GPU或ASIC内的视频编码/解码单元执行的视频编码/解码操作)中执行该角色的其他基于非软件形式的逻辑可以是执行发送/接收操作的计算代理。
在实施例中,NIC 704设备也可以是计算所在的位置。例如,智能NIC有时可以用作主机,并与CPU或GPU上的计算的接收线程或操作进行通信,其中接收线程/操作可以扮演“设备”的角色进行操作而不是扮演智能NIC的主机的角色进行操作。例如,接收线程/操作可以对经虚拟化的存储装置或数据通信器设备进行仿真。例如,这样的设备可以是软件虚拟化的网络交换机(例如“vSwitch”),并且可以用于过滤、路由、缓冲数据,并将数据从流送信道转发到系统中的其他硬件或软件实体。
因此,在扮演主机720的角色的CPU(运行软件线程或应用)与扮演设备704的角色的网络接口卡之间的H2D或对等(P2P)流送信道的概念不限于该配置,虽然主机动作被描述为由软件线程706执行的CPU动作,并且使用NIC的设备动作被用作图5中的代表性设备。
入队ISA(增强型)
在实施例中,数据传送由在CPU线程706中运行的软件(例如,应用)使用增强型入队ISA发起。在实施例中,入队操作可以包含内联数据,以优化涉及低延时和高操作率的较小传送。入队操作还可以指定用于非内联数据的描述符,以用于正常或较大的传送。较大的传送可以使用流送DMA引擎708以从主机存储器空间710读取数据,并且可以从高速缓存或从DRAM来实现该较大的传送。可以例如使用文件系统或者使用到文件、磁盘或任何其他源的映射操作来将这种数据从其他地方带入主机存储器空间710中,或者可以通过CPU的动作(例如,示为加载/存储操作712)在存储器中产生这种数据。两个路径都导致数据在H2D方向上被流送到流送信道714的发送(TX)侧。
为了使数据能够在源与目的地之间流送,与最大有效载荷大小典型地为512B的旧有PCIe写入操作相比,消息格式允许以更大的大小(例如,4KB)流送数据。这也适用于下面描述的D2H传送。
H2D方向上的信道操作和调度
H2D流送信道720包括主机侧的TX逻辑/数据路径714、设备侧的RX逻辑/数据路径716以及由所有H2D流送信道共享的设备侧的流缓冲器718。在实施例中,流送信道720被分层在底层I/O标准(例如,PCIe和CXL)之上。
来自设备的信用流和反馈
流送信道720可以向TX线程调度器722提供反馈,例如,信用可用性。TX线程调度器722可以基于信道可用性724并且基于将来自向信道720发送数据的CPU线程(或CPU线程组)706的入队操作的队列深度来决定何时调度线程。因此,例如,更靠近队列头部的线程与位于队列头部后面的线程相比具有被调度的更高的可能性。
在实施例中,流缓冲器718被划分为信用726,并且信用726可以基于其传送和配置而被指派给TX流送信道714。在实施例中,当发送流送信道714具有足够的信用用于传送时,该发送流送信道714可以仅将数据传送到RX流送信道716中。这使得数据能够在流缓冲器718处被接收,并且避免I/O接口中的背压(back-pressure)以维持前进并避免跨送信道的队头阻塞。当设备流水线728从流缓冲器718中排空数据时,信用可以返回到发送流送信道714以用于未来的数据传送。
在实施例中,图5中示出的设备架构是特定于联网设备的设备/产品。该设备架构在概念上由设备流水线728和可选的设备调度器730表示。在替代实施例中,设备架构可以具有其自己的特定于设备的调度算法和调度要求。例如,NIC可能具有基于内部NIC状态和配置参数的复杂网络出口调度算法。设备流缓冲器718具有有界容量,并且支持通过架构对分组进行高效流送,而没有队头阻塞和不必要的延迟。为了参与并获得全部益处,接收侧的设备将实现从设备侧调度730通过信用机制到主机侧TX线程调度器722的反馈路径,以确保缓冲器(设备侧的流缓冲器718和主机侧的缓冲器(未示出))不会在两侧耗尽。
D2H流送信道流(设备到主机路径)
参考图6,示出了根据各种实施例的经由流送子系统340的设备到主机流送流的框图表示。图6的D2H组件与图5的H2D框图相当,但图6中示出的数据流是在相反方向上的。根据设备架构,数据源自I/O设备804右侧远端,并进入设备流水线828。可选的设备调度器830使用来自TX流送信道816的信道可用性信息来调度从设备流水线828到主机802的数据传送。数据从设备流水线828被推送通过TX流送信道816,通过I/O接口被推送到RX流送信道814并进入受制于信用826的可用性的流缓冲器818。
流缓冲器818可以使用本文进一步描述的增强型出队ISA,通过由在CPU线程806中运行的应用提供的提示来通过流送信道排空。架构将支持各种模型,以将数据从流缓冲器高效地移动到适当的位置,该适当的位置可以是CPU寄存器、高速缓存层级或仅DRAM。例如,一些信道可以被配置为绕过高速缓存层级808,并将数据直接放置在CPU寄存器中以获得最低延时。对于这些信道,数据可能不会很大。关于旁路内联数据808,软件可以决定是处理数据并将其放置在存储器层级中还是在对数据进行提炼之后丢弃数据。
出队ISA(增强型)
出队指令由软件提交给每个流送信道814。指令可以允许不同的数据传送机制。CPU线程706对出队指令的执行导致关于图6示出的操作。在实施例中,执行可以一次发生,并且其效果是导致图6在后续时间描绘的移动和协调。
存储器绕过高速缓存层级:针对包括大型数据传送等的用途,将DMA808流送到主机存储器空间810DRAM和/或非易失性存储器(NVM)。在实施例中,流送数据不由应用立即消费。在实施例中,例如,对于被动日志复制、被动数据复制、分布式文件传送、rsync和相关类型的使用的情况,流送数据可能永远不会被消费。实施例在不干扰高速缓存层级的情况下允许应用将流送数据定向到放置在主机存储器空间810DRAM中。
主机存储器810:将DMA808流送到主机存储器中,其中数据由基于主机的操作(例如,软件线程、容器等)消费。主机存储器810的直接数据I/O(DDIO)流可以用于将数据流送到高速缓存中,并且可以在适当时溢出到DRAM中。在实施例中,可以进行附加的高速缓存提示以将数据放置到高速缓存层级的不同层中。例如,在许多情况下将数据放置到LLC中,在某种其他情况下将数据放置到存储器侧L4高速缓存中,或仅将数据放置到一些套接字中而不放置到某种其他套接字中,等等。实施例的实现方式紧密匹配用于放置线程或消费数据的集成加速器的软件策略。
旁路存储器。旁路路径808允许将用于较小传送的数据直接内联到通知中,该通知被递送到指定CPU线程806中。该通知可以到指定寄存器、向量寄存器或指定暂存存储器等的集合中,以进一步减少延时。主机侧RX调度器822负责将传入数据传送映射到特定CPU/线程806,并负责使得该线程被调度。
混合模式:RX流送信道814中的数据的一些元素可以被指定用于上述模式中的一个,并且其余元素可以被指定用于不同的模式。例如,来自分组的一些报头数据可以从接收流送信道814中过滤,并且在存储器绕过808时进行处理,即使所有数据都被发送到存储器。注意,在实施例中,流送信道是流缓冲器的逻辑部分,而不是物理部分。数据可以从流送信道流到存储器,尽管在物理上数据可以从流缓冲器流动,或者如果信道级别决定直接绕过到存储器时,则数据甚至可能不会在物理上在流缓冲器中移动。
为了实现低延时,特别是对于延时敏感的流送流,在设备调度器830与接收线程调度器822之间进行协作。
然而,对于批传送流,设备侧804和主机侧802可以是轻度/松散耦合的。在轻度/松散耦合的情况下,流送DMA引擎808可以以高容量和高带宽将数据传送直接放置到主机存储器810中。这种方法允许减轻OS线程调度延时和软件栈延迟。这与先前描述的H2D方向形成对比,其中(典型地)设备侧的小得多的缓冲容量意味着在主机侧802与设备侧804调度之间更紧密的耦合,以避免耗尽缓冲器或导致队头阻塞。
流缓冲器。流缓冲器818由所有流送信道共享,并且在一些用例中流送信道的数量可以非常大。例如,(每个方向上)100万个流送信道支持100万个队列进行大规模联网。
然而,在实施例中,由于成本原因,流缓冲器818的大小是适度的。此外,流送架构的实施例可以基于浅缓冲,使得传送延时被最小化而不是因排队延迟而激增。因此,在实施例中,用于流缓冲器818的总空间支出可能不是数百万兆字节。例如,该总空间支出可能不是信道的数量和每信道可用的缓冲器容量的量的乘积。在实施例中,流缓冲器的实际大小可以是特定于实现方式的。在每个实现方式中,实施例可以包括根据带宽延迟乘积(BDP)加上裕量(slack)来确定其大小,例如:“=设备的峰值带宽×往返(主机-设备)延时+slack_capacity”,这是关于推送数据/信用826在同一缓冲器信用826的两次连续使用之间的返回循环的。在实施例中,slack_capacity提供附加的余量以允许在缓冲器的填充与排空之间解耦,或者换言之,即使除了传送延时之外,消费者还需要花费一些附加的时间来排空和释放容量以供重用,也允许生产者将数据推送到缓冲器中。此外,裕量部分还为特定的(例如,高优先级、低抖动的)流送信道保留一些容量用于专用信用(将在下面稍后描述)。
在用于说明的一个非限制性示例中,考虑设备(例如,NIC)为800Gbps。信用循环(往返)延时为1μs。然后,流缓冲器818的大小可以被计算为800千兆位/秒×1/(1000,000)秒=800千位,或100KB,并且具有各种其他编码开销,大约为128KB。
现在考虑要支持多个业务类别的示例,其中每个类别具有独立的流缓冲器818,以提供可预测的、低延时的服务质量。假设要支持8个类别。因为类别是独立的,并且每个类别具有其自己单独的缓冲器容量,所以可以计算缓冲器大小=128KB×8=1MB(没有裕量)。
在实施例中,给定其他自由度,可以减小上述容量。在其中数据被严格排序(例如,根据规范和/或对数据的一致性要求)以进行递送的一些用途中,数据可能不会被拆分为不同的业务类别。可以减少容量的另一原因是主机侧802上的实现方式可以选择通过拆分出LLC或L4(存储器侧高速缓存)的区域并对该区域进行硬分配(例如,作为流缓冲器的一部分静态地专用于划分)来提供流缓冲器,这减少了为了满足BDP约束而提供的剩余容量的量。
信用指派和回收
在实施例中,信用826的大小由架构指定。在实施例中,64字节的信用大小可以匹配主机高速缓存行大小,并且可以是用于缓冲器共享、信用逻辑和状态管理的合理粒度。调整信用大小的实施例可以基于用于信用返回和/或实现方式所研究的编码格式。
流缓冲器818在主机802和设备804中的流送信道的接收侧上实现。流缓冲器818可以被划分为信用826,并且信用826被传递到发送流送信道816以供使用。在实施例中,信用指派和记账在设备侧804(TX)上执行,并且接收侧802(RX)仅负责将数据接收到流缓冲器818中并在空间被排空时返回信用826。这种方法为TX侧804信用算法提供了很大的灵活性,并且可以允许直接的方法来动态重新配置信用826限制,而无需冲洗进行中的传送。
图7A-7C是描述根据各种实施例的零拷贝存储器的图。零拷贝存储器可以称为ZeCoM。下面描述了用于在不实际执行数据拷贝或充分推迟不需要执行的数据拷贝的情况下实现许多类别的生产者到消费者数据传送的实施例。
实施例1:用于零拷贝存储器的瞬态(短暂)区域“ZeCoM”。
实施例1的概述:ZeCoM提供了用于通信的推送和拉取模型。ZeCoM存储器区域被映射到每个实体(发送方实体、接收方实体)的物理地址空间。对于每对实体,第二“标签空间”包含用于标签的空间,在ZeCoM中每个高速缓存行每个实体一个标签。该标签被称为OTAG,意为“所有权标签”。最初,标签可能由管理程序的根或系统所有者拥有。然后,可以将标签传送给所有者(例如,VM),该所有者接收进入到ZeCoM中对应的高速缓存行的数据。
推送模型:在当前所有者A想要将数据传送到下一所有者B时,使用CLSND(高速缓存行发送)指令来改变对应的OTAG,使得OTAG显示B为该高速缓存行的所有者。注意:每个身份(例如A、B等)与ITAG相关联,并且OTAG从发送方的ITAG改变为接收方的ITAG。CLSND指令首先针对被推送的每个高速缓存行验证该高速缓存行的OTAG与发送方或推送方的ITAG匹配。
在标签匹配时,高速缓存行的OTAG字段被更新为接收方的ITAG。这应该是常见的情况。在此之后,根据OTAG,推送方不再拥有高速缓存行。注意:如果标签不匹配,则用信号通知推送方错误,这可能会导致任何校正动作(例如,警告、通知某个处理程序、停止发送方并发起恢复过程等),因为该错误通常是逻辑错误的指示。
注意,数据不会移动,因为数据在推送之前所在的ZeCoM中的物理地址与推送之后的物理地址相同。因此没有数据拷贝。高速缓存层级携带每个高速缓存行的OTAG字段。高速缓存层级是通过对高速缓存的一部分进行分区以支持ZeCoM还是高速缓存层级支持高速缓存中所有行的OTAG来这么做,是实现方式的选择(对于非ZeCoM高速缓存行,OTAG没有意义,并且将被忽略)。
拉取模型:对于拉取模型,使用两个指令——CLRCV(高速缓存行接收)和CLMTOKEN(高速缓存行生成令牌)。当前所有者可以执行CLMKTOKEN来授权它希望允许任何后续所有者(未来的接收方)接收的高速缓存行上的CLRCV操作。拉取方执行CLRCV操作以将OTAG改变为其自己(即,拉取方)的ITAG。CLMKTOKEN指令在授权CLRCV之前验证执行CLMKTOKEN的当前所有者具有当前所有权。在成功的CLRCV之后,高速缓存行可能不再被允许第二CLRCV,直到存在CLMKTOKEN为止。
除了上述基本指令(CLSND、CLRCV和CLMKTOKEN)之外,还定义了许多附加指令以创建用于生产者-消费者通信和同步的框架——这些框架为CLPRODUCE、CLTEST和CLTICKLE。CLPRODUCE允许为ZeCoM的每个用户创建或初始化ITAG和存储ITAG,CLTEST可以用于检查当前OTAG是否匹配给定的ITAG(例如,用于编写防御代码),并且CLTICKLE可以用于在没有实际引用其数据的情况下接触ZeCoM中的高速缓存行(例如,使该数据被预取等)。
可以提供批操作(例如,REP前缀操作)以在ZeCoM中推送或拉取地址范围,而不用针对每个高速缓存行一个指令执行这些操作。
实施例2:(仅)在高速缓存层级中的经虚拟化的高速缓存行传送
避免数据拷贝的替代方法是减少在高速缓存(L1、L2、LLC)与CPU寄存器之间的数据移动,同时允许它们在存储器子系统中正常执行。由于许多生产者消费者传送是从产生直到最终消费的链,因此该替代方案避免了高速缓存层级中的拷贝,同时将从源物理地址到目的地物理地址的批拷贝委托给存储器到存储器DMA引擎。批拷贝本身可以通过将物理页从提供方传送到接收方来虚拟化。
为了避免高速缓存层级中的数据拷贝,该替代方案引入了发送方侧指令,该指令称为XFERCL(意为传送高速缓存行)。XFERCL指令检查高速缓存行是否在处理器高速缓存层级中,并且如果存在:将该高速缓存行降级到LLC,并在降级时在不改变该高速缓存行的数据的情况下将其物理地址标签从源的物理地址标签切换到目的地的物理地址标签。如果源行先前存在于LLC中(在降级之前),则XFERCL仿真MOVGET-MOVPUT组合,使得数据在LLC中从源传送到目的地,并且源行标记为“LRU”。在一种替代方案中,CLXFER操作在L1或L2中执行本地数据拷贝,而不会将数据带入和带出CPU核心。
实施例3
图7A-7B示出了另一实施例3。物理存储器的特殊区域被配置用于零拷贝操作。这可以称为ZCPY区域。该区域具有某种预定大小,这取决于处理器实现方式和配置。该区域被划分为块的集合。每个块与标签相关联。
为了存储器块的零拷贝传送,进程包含映射到该区域的各种虚拟地址。这些地址在开始时(创建进程时)已经被映射。这些地址不必在连续的虚拟页中,但在图7A中为了视觉简单而以这种方式示出。
每个进程共享该ZCPY区域。如上面所陈述的,该区域被划分为块,并且每个块与标签相关联。标签在存储器中的由正常程序指令不能直接访问的区域中。当由系统驱动程序进程调用时,特权指令可以根据需要在存储器的区域中设置标签。
每个进程与独特的令牌相关联。系统进程(例如,主机或客体操作系统)也可以具有独特的令牌。
为了将ZCPY区域中给定块X中的数据从拥有X的一个进程P1移动到第二进程P2,将实现对正常程序代码不透明的指令,将在硬件中这样做:检查X的标签具有P1的令牌(即,P1拥有X);如果X的标签不具有P1的令牌,则抛出错误(即,尝试传送不由“发送方”拥有的数据);当在指令开始时P1拥有X,硬件将P2的令牌移动到与X相关联的标签中,这使得P2成为X的所有者。
以上是“推送”流——即,X的提供方将X给予或推送给接收方。
可替代地,在该实施例内可以存在拉取流。在拉取流中,接收方P2需要能够从当前所有者(无论其是谁)那里将ZCPY存储器中的块拉取到自己中。这是通过P1首先放弃其所有权并将令牌写入X的标签来完成的,该标签指定了组所有权。当拉取时,P2需要成为该组的一部分。
要求包括如上面所描述的用于设置零拷贝区域的指令,以及用于拉取、推送或检查当前所有权的指令。
实施例4
在该实施例中,目标不是在所有情况下都实现零拷贝,而只是减少处理器高速缓存中的数据移动的量,其中频繁访问的数据无论如何都会移动。通过不减少超过处理器高速缓存的数据移动的量,不会丢失太多数据,因为只有发生在高速缓存中的数据移动的一小部分实际上会转化为存储器业务(当数据最终落在处理器高速缓存之外时会发生这种情况)。
与实施例3不同,该实施例不要求标签/令牌布置或特殊的ZCPY区域。因此,该实施例较简单、不那么麻烦,并且要求较少的设置工作。
图7C示出了处理器高速缓存中的高速缓存行。该高速缓存行具有数据。该高速缓存行还具有标签,该标签标识高速缓存行来自哪个物理地址。为了减少高速缓存中的数据移动,考虑将数据从物理地址P1拷贝或移动到另一物理地址P2。源进程和目的地进程可以相同或不同,这是操作系统中的普通页表机制如何建立存储器保护的问题。在这种情况下,在推送流与拉取流之间也没有区别,因为与作为源和目的地的进程无关。无论哪个进程正在执行移动,都提供“来自”和“去往”逻辑描述符,“来自”和“去往”都包含进程ID和虚拟地址。在一般情况下,这些传送将在相同进程中,从进程私有的一个区域到进程共享去往/来自其他进程的公共映射的另一区域。
无论传送是在相同进程内还是在不同进程之间,本实施例如下进行。
实现了称为XFERCL的指令。该指令转换“来自”和“去往”描述符,使其变为物理地址P1(“来自”)和P2(“去往”)。
该流程图仅示出了如何将物理地址从P1的物理地址切换到P2的物理地址,而不是移动数据。当源不在处理器高速缓存层级中时,替代实施例将数据从DRAM带入LLC(最后一级高速缓存),然后执行标签切换。
图8是示出根据各种实施例的流送信道流内的传送的图。实施例可以包括调度的传送1002和即时传送1004。可以在H2D方向和D2H方向两者上支持相同的流,以在发送方与接收方之间提供对称性和IP重用。在实施例中,流送信道流类似于从流送信道TX 1006、1020到流送信道RX 1008、1022的“推送数据”事务。然而,信用(例如,图5的信用726或图6的信用826)在数据被推送前进行指派,以避免缓冲器耗尽。信用在TX侧1006、1020本地管理,并由RX 1008、1022以流水线化的、延时隐藏方式返回,而无需主动的软件参与。
数据流传输的实施例包括调度的传送1002和即时传送1004。这两种传送都消费流缓冲器资源,直到设备(CPU或I/O)排空缓冲器并返回它们的信用为止。在实施例中,设备将针对两种类型的传送1002、1004迅速地排空流缓冲器以避免性能影响。即时传送1004机制使用专用信用来防止在设备无法迅速排空缓冲器的情况下跨流送信道的队头阻塞。每个流送信道可以基于软件启用的先验服务水平协议(SLA),并且可以取决于可用的信用而被配置为调度的传送、即时传送或两者。
调度的传送
在实施例中,调度的传送1002可以允许RX 1008侧确定何时发生传送。可能存在这种传送的示例是,I/O设备具有由设备支持但不存在或CPU不支持的特定调度算法。下面描述了示例流程。
在流程1010处,TX 1006通过发送请求发送(RTS)来发起传送。这在概念上类似于门铃,但可以包含附加的元数据字段来描述传送的性质,例如,传送的大小。RX 1008接收RTS并对可能导致任意延迟的操作执行调度,这取决于设备侧调度算法。
在流程1012处,当就绪时,RX 1008发送清除发送(CTS)。CTS包含用于引用原始RTS的ID,以及可选的元数据字段。TX 1006接收CTS。信用是从自由共享的信用池中指派的,或者如果要求附加信用,则存在进一步延迟。
在流程1014处,在指派了信用之后,将数据通过I/O总线推送到RX 1008。在最好的情况下,传送仅经历往返延迟,但在顶部可能潜在地存在任意调度延迟。RX接收到被推送的数据并将其放入流缓冲器中。
在流程1018处,随着数据从流缓冲器被排空到设备流水线中,可以返回信用。
在流程1016处,TX 1006接收信用并将这些信用返回到自由共享的信用池。注意,调度(RX 1008侧)与信用指派(TX 1006侧)解耦。
即时传送
在实施例中,即时传送1004允许TX侧1020立即发起传送。在RX 1022在TX 1020发起传送之前提供隐含的预先批准的意义上,这些即时传送本质上是“预先调度的”。在实施例中,信用可以专用于流送信道以支持即时传送。在实施例中,这可以典型地在创建流送信道时、在任何数据传送之前实现,但潜在地可以被动态地重新配置。因为信用是有限资源,所以在实施例中,期望信用仅专用于延时敏感的流送信道。典型地,实现失败(fall-through)延时优化可能要求相对少的信用。可以调整专用信用的数量的大小以满足在这些信道上的QoS、带宽(BW)和/或操作速率要求,但要保持足够的共享信用池用于调度的传送。
注意,在实施例中,专用信用在H2D方向上可能更重要,并且可以允许设备针对设备架构和性能特性适当地调整其流缓冲器的大小。在实施例中,主机侧流缓冲器可能不需要支持专用信用并且典型地可以仅由带宽延迟乘积来调整大小。
在实施例中,被配置为使用即时传送1004技术的流送信道将依赖于在RX 1022侧实现的调度特征。与调度的传送1002技术相比,该技术可以提供较低的延时路径。
在实施例中,即时传送1004可以仅使用专用信用。如果传送要求比被配置到流送信道的专用信用的总数更多的信用,则可以使用调度的传送1002。否则,可以根据实现方式(其可以包括影响选择的软件提示)来使用即时传送1004或调度的传送1002。因此,在实施例中,允许实现方式在等待返回专用信用与使用调度的传送1002之间进行选择。在实施例中,专用信用被指派用于传送。在等待先前使用的专用信用返回时可能会有延迟。在指派信用之后,数据被推送到RX 1008。在最好的情况下(例如,对于失败延时),即时传送完全没有延迟,并且这表示可以针对数据传送实现最低延时。下面给出示例流程。
在流程1024处,RX 1022接收到被推送的数据并将其放入流缓冲器中。在流程1026处,随着数据从流缓冲器被排空到设备流水线中,可以返回信用。在流程1028处,TX 1020接收信用并将这些信用返回到自由共享的信用池。
协调的调度
现在返回图4,本文描述的流送I/O架构的实施例使得I/O数据能够被紧密放置从而以高速缓存延时计算。这是与旧有系统的区别,并且在实施例中,可以使用若干技术来利用这种能力。一个示例包括在I/O 630与计算620之间(例如,在流送信道654与CPU 620的应用线程之间)的协调的调度。
图4示出了在硬件(H/W)事件与软件(S/W)应用662之间的协调的调度的概念。如所示的,在流送信道654架构中的H/W调度器672提供了较紧密的反馈回路,从而实现粒度和更智能的软件决策。在实施例中,S/W调度器674基于来自H/W调度器672的反馈来调度应用线程。H/W调度器672具有关于流送信道654中的发送缓冲器占用水平和接收缓冲器填充水平的信息。
因此,当应用线程被调度时,对应的流送信道654准备好发送数据或准备好接收数据。此外,I/O设备630中的网络调度器670可以向H/W调度器672发送反馈,例如,可以用于调度决策的队列级别和定时信息。
可选地,H/W调度器672被给予将库级切换事件注入CPU线程的能力,从而使该H/W调度器672执行控制到用户空间中的预指定的代码地址的预规定的传送,其中少量GPR被保存在备用栈中以处理事件。典型地,切换到的代码地址用作短的、不可抢占的、运行到完成的指令序列的起点,该指令序列用于执行应用发布的功能,然后恢复先前中断的线程。在实施例中,H/W调度器672实际上用作运行到完成处理程序的远程切换器。因此,应用可以执行它们自己的内部任务切换,而无需代价高昂的中断、用户-内核-用户转换或忙-轮询,该应用被编写为处理通信事件作为立即运行的回调并执行通过信道到达应用的数据的第一级配置。
映射到I/O事务
设想所有SDDS事务(包括数据传送和信用返回)将映射到I/O总线上的存储器写入事务。在实施例中,各种元数据字段将连同要被传送的实际数据一起被编码在存储器写入有效载荷中。TX逻辑和RX逻辑负责元数据与数据的绑定/解绑。在这些传送中使用的存储器写入地址位于强客户认证(SCA)机制的地址空间中,并且不指代在元数据中编码的主机存储器地址。
现在转向图2,图400是流送I/O接口的实施例的梯形图,其示出了每当数据准备好传输时将数据从CPU(驱动器)407推送到I/O设备408的两步过程。在实施例中,每当数据可用时,就使用存储器语义将数据推送到I/O 408设备,并且设备408完成事务。如上面所讨论的,存在流控制机制以指示设备408是否准备好接受数据以进行传输。
图9是示出了根据各种实施例的用于发送流送I/O语义的应用软件到I/O交互的图。图9示出了使用图2中示出的两步过程的流送I/O传输的实施例中改进的延时,其中估计存储器语义的总时间为300ns,与典型的旧有I/O语义相比,向上扩展了大约3-3.5倍。图9中的流送I/O架构实施例假设使用入队指令以从CPU发送到流送信道,如上面所描述的。
图10是示出了根据各种实施例的用于接收流送I/O语义的应用软件到I/O交互的图。图10示出了用于接收具有延时估计的事务的流送语义的实施例。流送架构假设使用出队指令以从流送信道接收数据到CPU。显示的总时间为300ns。与I/O语义模型相比,估计使用流送语义进行接收提供大约2倍的扩展。
图11A和图11B是根据各种实施例的用于支持流送信道架构的命令、输入参数和输出参数的示例。图11A和11B示出了围绕低级指令或虚拟指令的库级应用编程接口(API)的实施例。这些实施例是用于管理流送信道并与其交互的接口的示例。这些示例示出了涉及流送信道的一些主要操作。
图12示出了根据各种实施例的用于实现流送信道架构的示例过程。过程1600可以由本文的装置、技术、设计、架构、过程或其他公开内容中的一个或多个来实现。在实施例中,过程1600可以通过图13的流送I/O接收模块1718和/或流送I/O发送模块1719来实现。
在框1602处,过程可以包括由I/O设备从处理器设备接收包括数据有效载荷的数据流。
在框1604处,过程还可以包括由I/O设备处理接收到的数据流。
图13示出了根据各种实施例的适于使用以实现本文描述的组件和技术的示例计算设备1700。如所示的,计算设备1700可以包括一个或多个处理器或处理器核心1702以及一个或多个设备,例如,系统存储器1704、大容量存储装置1706、通信接口1710和I/O设备1708。处理器1702和设备1704-1710中的至少一个与本公开的流送I/O技术结合。在实施例中,流送I/O技术可以被实现为流送I/O接收模块1718和流送I/O发送模块1719。在实施例中,模块1718和1719可以被实现为处理器1702和其他设备1704-1710中的固件。出于本申请包括权利要求书的目的,除非上下文明确地另有要求,否则术语“处理器”和“处理器核心”可以被认为是同义的。处理器1702可以包括任何类型的处理器、微处理器等。处理器1702可以被实现为具有多核心的集成电路,例如,多核心微处理器。
计算设备1700可以包括大容量存储设备1706(例如,磁盘、硬盘驱动器、易失性存储器(例如,动态随机存取存储器(DRAM))、压缩盘只读存储器(CD-ROM)、数字通用盘(DVD)等)。通常,系统存储器1704和/或大容量存储设备1706可以是任何类型的临时和/或持久存储装置,包括但不限于易失性和非易失性存储器、光学、磁性和/或固态大容量存储装置等。易失性存储器可以包括但不限于静态和/或动态随机存取存储器。非易失性存储器可包括但不限于电可擦除可编程只读存储器、相变存储器、电阻式存储器等。
计算设备1700还可以包括I/O设备1708(例如,显示器(例如,触摸屏显示器)、键盘、光标控制、遥控器、游戏控制器、图像捕获设备、相机、一个或多个传感器等)和通信接口1710(例如,网络接口卡、串行总线、调制解调器、红外接收机、无线电接收机(例如,蓝牙)等)。
通信接口1710可以包括通信芯片(未示出),该通信芯片可以被配置为根据全球移动通信系统(GSM)、通用分组无线电服务(GPRS)、通用移动电信系统(UMTS)、高速分组接入(HSPA)、演进的HSPA(EHSPA)或长期演进(LTE)网络来操作设备1700。通信芯片还可以被配置为根据用于GSM演进的增强型数据(EDGE)、GSM EDGE无线电接入网络(GERAN)、通用陆地无线电接入网络(UTRAN)或演进的UTRAN(E-UTRAN)进行操作。通信芯片可以被配置为根据码分多址(CDMA)、时分多址(TDMA)、数字增强型无绳电信(DECT)、演进数据优化(EV-DO)及其衍生物以及被指定为3G、4G、5G及更高版本的任何其他无线协议进行操作。在实施例中,通信接口1710包括不同类型的有线协议。具有有线协议的通信设备的示例包括但不限于以太网控制器、具有以太网协议的NIC、使用存储协议(例如,FCoE、RDMA、结构上NVMe或TCP上NVMe)的存储控制器、使用HPC协议(例如,RDMA、RoCE、iWARP)的高性能计算适配器。
上面描述的计算设备1700元件可以经由系统总线1712彼此耦合,该系统总线1712可以表示一个或多个总线,并且可以包括例如PCIe总线。换言之,处理器1702、存储器1704、大容量存储装置1706、通信接口1710和I/O设备1708中的所有或选定的一些可以是PCIe设备或其他基于串行总线的设备。特别地,这些设备可以是与本公开的教导结合的PCIe设备,以实现对静默数据损坏的检测。在多个总线的情况下,这些设备可以由一个或多个总线桥(未示出)桥接。这些元件中的每一个可以执行其本领域已知的常规功能。特别地,可以采用系统存储器1704和大容量存储设备1706来存储用于计算设备1700的各种组件(包括但不限于计算设备1700的操作系统、一个或多个应用和/或统称为计算逻辑1722的系统软件/固件)的操作的编程指令的工作副本和永久副本。各种元件可以由(多个)处理器1702支持的汇编器指令或可以编译为这样的指令的高级语言来实现。
编程指令的永久副本可以在工厂或在现场中通过例如诸如压缩盘(CD)之类的分发介质(未示出)或通过通信接口1710(来自分发服务器(未示出))被放置在大容量存储设备1706中。即,可以采用具有代理程序的实现方式的一种或多种分发介质来分发代理并对各种计算设备进行编程。
元件1702、1704、1706、1708、1710和1712的数量、能力和/或容量可以变化,这取决于计算设备1700是用作固定计算设备(例如,机顶盒或台式计算机)还是用作移动计算设备(例如,平板计算设备、膝上型计算机、游戏机或智能电话)。这些元件的构成是以其他方式已知的,并且因此将不再进一步描述。
在实施例中,处理器1702中的至少一个可以与计算逻辑1722封装在一起,该计算逻辑1722被配置为实践本文描述的实施例的方面以形成系统级封装(SiP)或片上系统(SoC)。
在各种实现方式中,计算设备1700可以是数据中心、膝上型计算机、上网本、笔记本、超极本、智能电话、平板计算机、个人数字助理(PDA)、超移动PC、移动电话、数码相机或IoT用户设备的一个或多个组件。在进一步的实现方式中,计算设备1700可以是处理数据的任何其他电子设备。
图14描绘了根据各种实施例的可以与计算设备1700结合使用的计算机可读存储介质。图1800示出了示例非暂时性计算机可读存储介质1802,其具有被配置为实践与上面描述的过程相关联的操作中的全部操作或选定一个操作的指令。如所示的,非暂时性计算机可读存储介质1802可以包括多个编程指令1804(例如,包括流送I/O接收模块1718和流送I/O发送模块1719)。编程指令1804可以被配置为响应于编程指令的执行,而使得设备(例如,计算设备1700)能够执行本文描述的过程的一个或多个操作。在替代实施例中,编程指令1804可以替代地设置在多个非暂时性计算机可读存储介质1802上。在其他实施例中,编程指令1804可以被编码在瞬时计算机可读信号中。
图15示意性地示出了计算设备1900,该计算设备1900可以包括如本文所描述的各种实施例。本公开的实施例可以实现到使用任何合适的硬件和/或软件来根据需要进行配置的系统中。图15示意性地示出了根据一个实施例的计算设备1900。计算设备1900可以容纳诸如母板1902之类的板(即,壳体1951)。母板1902可以包括多个组件,包括但不限于处理器1904和至少一个通信芯片1906。处理器1904可以物理地且电气地耦合到母板1902,并结合本公开的流送I/O技术。在一些实现方式中,至少一个通信芯片1906也可以物理地且电气地耦合到母板1902。在一些实现方式中,芯片1900和1906可以光学耦合。在一些实施例中,通信芯片1906与本公开的教导结合。即,该通信芯片1906包括流送I/O架构的一个或多个实施例。在进一步的实现方式中,通信芯片1906可以是处理器1904的一部分。在其他实施例中,其他枚举的元件中的一个或多个可以与本公开的教导结合。
取决于其应用,计算设备1900可以包括可以或可以不物理地且电气地耦合到母板1902的其他组件。这些其他组件可以包括但不限于易失性存储器(例如,DRAM)1920、非易失性存储器(例如,ROM)1924、闪速存储器1922、图形处理器1930、数字信号处理器(未示出)、密码处理器(未示出)、芯片组1926、天线1928、显示器(未示出)、触摸屏显示器1932、触摸屏控制器1946、电池1936、音频编解码器(未示出)、视频编解码器(未示出)、功率放大器1941、全球定位系统(GPS)设备1940、罗盘1942、加速度计(未示出)、陀螺仪(未示出)、扬声器1950、相机1952和大容量存储设备(例如,硬盘驱动器、压缩盘(CD)、数字多功能盘(DVD)等)(未示出)。未在图15中示出的其他组件可以包括麦克风、滤波器、振荡器、压力传感器或RFID芯片。在实施例中,封装组装件组件1955中的一个或多个可以包括流送I/O架构的实施例,如本文所讨论的。
通信芯片1906可以实现用于向计算设备1900传送数据以及从计算设备1900传送数据的无线通信。在一些实现方式中,通信芯片1906可以实现有线通信。有线协议的示例包括但不限于IEEE 802.3以太网、光纤信道、Infiniband、FCoE和RoCE。术语“无线”及其派生词可以用于描述电路、设备、系统、过程、技术、通信信道等,其可以通过非固体介质通过使用经调制的电磁辐射来传送数据。该术语并不暗示相关联的设备不包含任何电线,但是在一些实施例中,这些设备可能不包含电线。通信芯片1906可以实现多种无线标准或协议中的任何一种,这些无线标准或协议包括但不限于电气和电子工程师协会(IEEE)标准,包括Wi-Fi(IEEE 802.11系列)、IEEE 802.16标准(例如,IEEE 802.16-2005修正)、长期演进(LTE)项目以及任何修正、更新和/或修订(例如,高级LTE项目、超移动宽带(UMB)项目(也称为“3GPP2”)等)。兼容IEEE 802.16的BWA网络通常被称为WiMAX网络,其是代表WorldwideInteroperability for Microwave Access(全球接入微波互操作)的首字母缩写词,该WiMAX是通过IEEE 802.16标准的一致性和互操作性测试的产品的认证标志。通信芯片1906可以根据以下各项进行操作:全球移动通信系统(GSM)、通用分组无线电服务(GPRS)、通用移动电信系统(UMTS)、高速分组接入(HSPA)、演进的HSPA(E-HSPA)或LTE网络。通信芯片1906可以根据以下各项进行操作:用于GSM演进的增强型数据(EDGE)、GSM EDGE无线电接入网络(GERAN)、通用陆地无线电接入网络(UTRAN)或演进的UTRAN(E-UTRAN)。
通信芯片1906可以根据以下各项进行操作:码分多址(CDMA)、时分多址(TDMA)、数字增强型无绳电信(DECT)、演进数据优化(EV-DO)及其衍生物以及被指定为3G、4G、5G及更高版本的任何其他无线协议。在其他实施例中,通信芯片1906可以根据其他无线协议进行操作。在实施例中,通信芯片1906可以包括流送I/O架构的一个或多个实施例,如本文所讨论的。
计算设备1900可以包括多个通信芯片1906。例如,第一通信芯片1906可以专用于较短范围的无线通信,例如,Wi-Fi和蓝牙;并且第二通信芯片1906可以专用于较长范围的无线通信,例如,GPS、EDGE、GPRS、CDMA、WiMAX、LTE、Ev-DO以及其他。
计算设备1900的处理器1904可以包括封装组装件中的管芯,例如,如本文所描述的流送I/O架构的一个或多个实施例。术语“处理器”可以指代处理来自寄存器和/或存储器的电子数据以将该电子数据转换为可以存储在寄存器和/或存储器中的其他电子数据的任何设备或设备的一部分。
在各种实现方式中,计算设备1900可以是膝上型计算机、上网本、笔记本、超极本、智能电话、平板计算机、个人数字助理(PDA)、超级移动PC、移动电话、台式计算机、服务器、打印机、扫描仪、监视器、机顶盒、娱乐控制单元、数码相机、便携式音乐播放器或数字录像机。在进一步的实现方式中,计算设备1900可以是处理数据的任何其他电子设备,例如,诸如一体机传真或打印设备之类的一体机。
参考图16,示出了包括流送子系统340的实施例的系统2000的框图表示。系统2000包括主机设备2002,该主机设备2002被配置为经由流送子系统340通信地耦合到I/O设备2004。图16示出了与数据从主机设备2002到I/O设备2004的流送相关联的数据路径。主机设备2002可以类似于图1中的CPU 320、图2中的CPU 407、图3中的CPU 520、图4中的CPU 620、图5中的主机702以及图6中的主机802。I/O设备2002可以类似于图1中的I/O设备330、图2中的I/O设备408、图3中的I/O设备530、图4中的I/O设备630、图5中的设备704以及图6中的设备804。
在实施例中,子系统340可以在包括快速计算链路(CXL)链路的系统2000中实现,快速外围组件互连(PCIe)业务可以通过该CXL链路流动。在实施例中,子系统340可以在包括(串行化器/解串行化器)SerDes(物理层)PHY类型接口的系统2000中实现。
在实施例中,主机设备2002包括处理器2006、第一应用2008A、第二应用2008B、主机调度器2010和主机流缓冲器2012。处理器2006被配置为执行应用2008A、2008B。在实施例中,主机设备2002包括硬件辅助2014。在实施例中,主机调度器2010包括软件(S/W)调度器2016和硬件(H/W)调度器2018。在实施例中,调度器2016包括软件(S/W)调度器2016、硬件(H/W)调度器2018和QoS调度器2020。在实施例中,第一应用2008A包括流送指令集架构(ISA)指令2020A,并且第二应用2008B包括流送指令集架构(ISA)指令2020B。流送指令集架构(ISA)指令2020A、2020B包括数据入队指令和数据出队指令。在实施例中,流送子系统340包括流送指令集架构(ISA)指令2020A、2020B、主机调度器2010和主机流缓冲器2012。在实施例中,流送子系统340包括流送指令集架构(ISA)指令2020A、2020B、主机调度器2010、主机流缓冲器2012和硬件辅助2014。虽然图16中示出了两个应用2008A、2008B,但是替代实施例可以包括附加应用。在替代实施例中,主机设备2002可以包括促进主机设备2002的操作的附加组件。
I/O设备2004被配置为经由流送子系统340通信地耦合到主机设备2002。在实施例中,I/O设备2004包括I/O设备流缓冲器2022和网络调度器2024。在实施例中,I/O设备2004包括I/O设备流缓冲器2022、网络调度器2024和设备调度器2026。在实施例中,流送子系统340包括I/O设备流缓冲器2022和网络调度器2024。在实施例中,流送子系统340包括I/O设备流缓冲器2022、网络调度器2024和设备调度器2026。在替代实施例中,I/O设备2004可以包括促进I/O设备2004的操作的附加组件。
当应用2008A、2008B具有要发送到I/O设备2004的数据时,数据经由发送流送信道从应用2008A、2008B被发送到I/O设备2004。发送流送信道是从主机设备2002处的应用2008A、2008B到I/O设备2004的I/O设备流缓冲器2022的逻辑数据路径。发送流送信道包括从应用2008A、2008B到主机流缓冲器2012的主机发送流送信道HTX A、HTX B以及从主机流缓冲器2012到I/O设备流缓冲器2022的缓冲器发送流送信道BTX。例如,从应用A 2008A到I/O设备流缓冲器2022的发送流送信道的逻辑数据路径包括主机发送流送信道HTX A和缓冲器发送流送信道BTX。类似地,从应用B 2008B到I/O设备流缓冲器2022的发送流送信道的逻辑数据路径的示例包括主机发送流送信道HTX B和缓冲器发送流送信道BTX。
参考图17,示出了实现流管理的方法2100的实施例的流程图表示。方法2100由流送子系统340执行。方法2100可以由流送子系统340结合系统2000的附加组件来执行。方法2100可以由硬件电路、固件、软件和/或组合来执行。
应用2008A、2008B中的每一个与发送流送信道相关联以将数据从应用2008A、2008B流送到I/O设备流缓冲器2022。每个发送流送信道在I/O设备流缓冲器2022中被分配有特定量的缓冲器空间。每个发送流送信道包括主机发送流送信道HTX A、HTX B和缓冲器发送流送信道BTX。每个主机发送流送信道HTX A、HTX B在I/O设备流缓冲器2022中被分配有特定量的缓冲器空间。每个主机发送信道HTX A、HTX B被指派有与在I/O设备流缓冲器2022中的分配量的缓冲器空间相关联的特定数量的信用。信用中的每一个与数据单元相关联。
在2102处,H/W调度器2018从I/O设备流缓冲器2022接收与主机发送流送信道HTXA、HTX B中的每一个相关联的流控制数据。与每个主机发送流送信道HTX A、HTX B相关联的流控制数据定义了在I/O设备流缓冲器2022中的分配量的缓冲器空间内可用于从该主机发送流送信道HTX A、HTX B接受附加数据的空间。在实施例中,用于每个主机发送流送信道HTX A、HTX B的接收到的流控制数据是多个信用,这些信用定义了在I/O设备流缓冲器2022中的分配量的缓冲器空间内可用于接受来自该主机发送流送信道HTX A、HTX B的附加数据的空间。随着经由主机发送流送信道HTX A、HTX B中的每一个接收到的数据从I/O设备流缓冲器2022中排空,I/O设备流缓冲器2022利用可用于每个主机发送流送信道HTX A、HTX B接受附加数据的多个信用来更新H/W调度器2018。
例如,如果主机发送流送信道HTX A被指派有100个信用,并且先前将等效于40个信用的40个数据单元从应用A 2008A流送到I/O设备流缓冲器2022,并且40个数据单元中的20个单元尚未从I/O设备流缓冲器2022中排空,则从I/O设备流缓冲器2022发送到H/W调度器2018的信用的数量为80个信用。80个信用指示主机发送流送信道HTX A可以接受来自应用A 2008A的多达80个数据单元。
在2104处,H/W调度器2018将接收到的流控制数据传送给S/W调度器2016。在实施例中,H/W调度器2018将从I/O设备流缓冲器2022接收到的与主机发送流送信道HTX A、HTXB中的每一个相关联的多个可用的信用传送给S/W调度器2016。
在2106处,S/W调度器2016基于接收到的流控制数据来调度应用2008A、2008B中的每一个,以使数据入队到相关联的主机发送流送信道HTX A、HTX B。在实施例中,S/W调度器2016基于针对相关联的主机发送流送信道HTX A、HTX B的多个可用的信用来调度应用2008A、2008B中的每一个,以使数据入队到相关联的主机发送流送信道HTX A、HTX B。然后,该方法返回到2102,在2101中,重复该过程以实现对从应用2008A、2008B中的每一个到I/O设备流缓冲器2022的数据流的平衡。
参考图18,示出了经由发送流送信道将数据从主机设备2002流送到I/O设备2004的方法2200的实施例的流程图表示。当数据从主机设备2002处的应用2008A、2008B流送到I/O设备2004的I/O设备流缓冲器2022时,方法2200由流送子系统340执行。方法2200可以由硬件电路、固件、软件和/或其组合执行。
在2202处,S/W调度器2016调度应用A 2008A以使数据入队到相关联的主机发送流送信道HTX A,并且S/W调度器2016调度应用B 2008B以使数据入队到相关联的主机发送流送信道HTX B。S/W调度器2016基于与经由H/W调度器2018从I/O设备流缓冲器2022接收到的主机发送流送信道HTX A、HTX B中的每一个相关联的流控制数据,来调度应用2008A、2008B中的每一个。在实施例中,S/W调度器2016基于经由H/W调度器2018从I/O设备流缓冲器2022接收到的多个信用来调度每个应用2008A、2008B。针对主机发送流送信道HTX A、HTX B中的每一个接收到的信用定义了在I/O设备流缓冲器2022中针对主机发送流送信道HTX A、HTXB中的每一个的分配量的缓冲器空间内可用于接受数据的空间。
在实施例中,用于软件的可用缓冲器空间是I/O设备流缓冲器2022和主机流缓冲器2012中的可用缓冲器空间的函数。用于软件入队的可用缓冲器空间等于在主机发送流送信道HTX A、HTX B中的总缓冲器——即,在I/O设备流缓冲器2022中的每个主机发送流送信道HTX A、HTX B可用的缓冲器加上主机流缓冲器2012的总和。H/W调度器2018将考虑并与S/W调度器2016通信在对应的主机发送流送信道HTX A、HTX B中的总可用空间,该总可用空间是在I/O设备流缓冲器2022中可用的缓冲器加上主机流缓冲器2012的函数。主机流缓冲器2012将不会经由用于某个主机发送流送信道HTX A、HTX B的缓冲器发送流送信道BTX将数据发送到I/O设备2004,除非信用指示针对该对应的主机发送流送信道HTX A、HTX B,缓冲器可用性从I/O设备流缓冲器2022可用。
在2204处,应用2008A、2008B使用流送指令集架构(ISA)指令2020A、2020B使数据入队到相关联的主机发送流送信道HTX A、HTX B。例如,应用A 2008A使用流送指令集架构(ISA)指令2020A使数据入队到相关联的主机发送流送信道HTX A,并且应用B 2008B使用流送指令集架构(ISA)指令2020B使数据入队到相关联的主机发送流送信道HTX B。在实施例中,应用2008A、2008B可以被调度为同时使数据入队到相关联的主机发送流送信道HTX A、HTX B。在实施例中,应用2008A、2008B可以被调度为在重叠时间段期间使数据入队到相关联的主机发送流送信道HTX A、HTX B。在实施例中,应用2008A、2008B可以被调度为在非重叠时间段期间使数据入队到相关联的主机发送流送信道HTX A、HTX B。
在2206处,经由相关联的主机发送流送信道HTX A、HTX B将入队的数据从应用2008A、2008B中的每一个流送到主机流缓冲器2012。在2208处,主机流缓冲器2012将从主机发送流送信道HTX A、HTX B中的每一个单独接收到的数据经由缓冲器发送流送信道BTX流送到I/O设备流缓冲器2022。在实施例中,主机流缓冲器2012以轮询调度(round robin)方式经由缓冲器发送流送信道BTX将从主机发送流送信道HTX A、HTX B中的每一个单独接收到的数据流送到I/O设备流缓冲器2022。
在实施例中,主机流缓冲器2012基于与主机发送流送信道HTXA、HTXB中的每一个相关联的优先级,经由缓冲器发送流送信道BTX将从主机发送流送信道HTXA、HTXB中的每一个单独接收到的数据流送到I/O设备流缓冲器2022。例如,如果主机发送流送信道HTX B具有比主机发送流送信道HTX A更高的优先级,则主机流缓冲器2012经由缓冲器发送流送信道BTX将经由主机发送流送信道HTX B接收到的数据流送到I/O设备流缓冲器2022,然后经由缓冲器发送流送信道BTX将经由主机发送流送信道HTX A接收到的数据流送到I/O设备流缓冲器2022。在实施例中,主机调度器2010建立与主机发送流送信道HTX A、HTX B中的每一个相关联的优先级。在实施例中,QoS调度器2020建立与主机发送流送信道HTX A、HTX B中的每一个相关联的优先级。在实施例中,应用2008A、2008B中的每一个与优先级相关联,并且将与应用2008A、2008B中的每一个相关联的优先级指派给相关联的主机发送流送信道HTX A、HTX B。在替代实施例中,主机流缓冲器2012可以使用加权的轮询调度、严格优先级和轮询调度的混合、加权的公平排队、其组合或其他调度机制,经由缓冲器发送流送信道BTX将从主机发送流送信道HTX A、HTX B中的每一个单独接收到的数据流送到I/O设备流缓冲器2022,以确保跨缓冲器发送流送信道BTX或整个系统的一定QoS。
在2210处,网络调度器2024管理从I/O设备流缓冲器2022到目的地设备的数据流。网络调度器2024监视从I/O设备流缓冲器2022到目的地设备的数据流的速率。来自I/O设备流缓冲器2022的数据流的速率也可以被称为数据排空速率。在实施例中,网络调度器2024监视与数据的不同的优先级中的每一个相关联的数据排空速率。例如,经由主机发送流送信道HTX B接收到的数据可以具有第一优先级,并且经由主机发送流送信道HTX A接收到的数据可以具有第二优先级。网络调度器2024监视与来自I/O设备流缓冲器2022的具有第一优先级的数据流相关联的第一数据排空速率,并且监视与来自I/O设备流缓冲器2022的具有第二优先级的数据流相关联的第二数据排空速率。数据排空速率可能会受到例如I/O设备2004下游的网络拥塞的影响。在实施例中,经由主机发送流送信道HTX A、HTX B接收到的数据具有与主机发送流送信道HTX A、HTX B相同的优先级。在实施例中,与主机发送流送信道HTX A、HTX B中的每一个相关联的优先级和与该主机发送流送信道HTX A、HTX B相关联的应用2008A、2008B的优先级相同。
在2212处,网络调度器2024向H/W调度器2018提供与不同的数据优先级中的每一个相关联的数据排空速率。在2214处,H/W调度器2018向S/W调度器2016提供与不同的数据优先级中的每一个相关联的数据排空速率。如上面所提到的,不同的主机发送流送信道HTXA、HTX B具有不同的优先级。不同的主机发送流送信道HTX A、HTX B中的每一个与应用2008A、2008B中的一个相关联。方法2200然后返回到2202。S/W调度器2016部分地基于流控制数据以及与数据优先级中的每一个相关联的数据排空速率来调度来自应用2008A、2008B中的每一个的数据的入队。在实施例中,QoS调度器2020至少部分地基于接收到的数据排空速率,来对经由主机发送流送信道HTX A、HTX B接收到的数据从主机流缓冲器2012到I/O设备流缓冲器2022的流送重新进行优先级排序。
在实施例中,QoS调度器2020确定从应用2008A、2008B入队到相关联的主机发送流送信道HTX A、HTX B的数据是否低于信道数据阈值。如果QoS调度器2020确定从应用2008A、2008B入队的数据低于信道数据阈值,则QoS调度器2020将在I/O设备流缓冲器2022中的分配量的缓冲器空间动态地调整给主机发送流送信道HTX A、HTX B中的每一个。在实施例中,QoS调度器2020基于与主机发送流送信道HTX A、HTX B中的每一个相关联的优先级,来将I/O设备流缓冲器2022中的空间量分配给主机发送流送信道HTX A、HTX B中的每一个。
实施例可以包括用于管理缓冲器和用于执行各种规范化操作的各种可编程硬件辅助2014。这些规范化操作可以包括:从报头或有效载荷中解包数据并将该数据放置在期望的(例如,解串行化)格式中,或例如从非串行化格式转换为串行化格式;选择数据元素并根据这些数据元素组成新的数据元素(例如,执行收集或分散操作);和/或将数据作为逻辑上连续的流呈现给应用,同时在辅助数据结构中记录分组和消息边界。这种规范化操作避免了数据转换、可以移除或隐藏各种I/O描述符的管理,并且可以使如压缩、加密、解压缩和解密的操作在硬件中自动执行。
参考图19,示出了包括流送子系统340的实施例的系统2000的框图表示。图19示出了与将数据从I/O设备2004流送到主机设备2002相关联的数据路径。当在I/O设备2004处接收到用于主机设备2002处的应用2008A、2008B的数据时,接收到的数据被推送到I/O设备流缓冲器2022。在各种实施例中,I/O设备2004对接收到的数据进行分类,并且标识与应用2008A、2008B相关联的分组流,并且将数据推送到I/O设备流缓冲器2022的对应的逻辑接收流送信道。I/O设备2004被编程为通过知道流送子系统340的软件将分组流(分组分类规则)分类到其相关联的应用。该信息用于将数据推送到对应的流送信道。这种分组分类机制用于将分组流(packet stream)或分组流(packet flow)与应用及其对应的流送信道进行关联。这些规则在I/O设备2004中被编程,并且实现流送信道的I/O设备2004包括将按照编程的规则分类的分组流推送到对应逻辑流送信道的机制。分类规则包括并且知道流送子系统340中的逻辑流送信道,并且包括将分组流与逻辑流送信道进行关联的机制。
数据经由接收流送信道从I/O设备流缓冲器2022被发送到应用2008A、2008B。接收流送信道是从I/O设备2004的I/O设备流缓冲器2022到主机设备2002处的应用2008A、2008B的逻辑数据路径。接收流送信道包括从I/O设备流缓冲器2022到主机流缓冲器2012的缓冲器接收流送信道BRX以及从主机流缓冲器2012到应用2008A、2008B的主机接收流送信道HRXA、HRX B。
例如,从I/O设备流缓冲器2022到应用A 2008A的接收流送信道的逻辑数据路径包括从I/O设备流缓冲器2022到主机流缓冲器2012的缓冲器接收流送信道BRX以及从主机流缓冲器2012到应用A 2008A的主机接收流送信道HRX A。类似地,从I/O设备流缓冲器2022到应用B 2008B的接收流送信道的逻辑数据路径的示例包括从I/O设备流缓冲器2022到主机流缓冲器2012的缓冲器接收流送信道BRX以及从主机流缓冲器2012到应用B2008B的主机接收流送信道HRX B。
应用2008A、2008B中的每一个与将数据从I/O设备流缓冲器2022流送到应用2008A、2008B的接收流送信道相关联。每个接收流送信道在主机流缓冲器2012中被分配有特定量的缓冲器空间。每个接收流送信道包括缓冲器接收流送信道BRX和主机接收流送信道HRX A、HRX B。每个主机接收流送信道HRX A、HRX B在主机流缓冲器2012中被分配有特定量的缓冲器空间。每个主机接收流送信道HRX A、HRX B被指派有与在主机流缓冲器2012中的分配量的缓冲器空间相关联的特定数量的信用。信用中的每一个与数据单元相关联。
设备调度器2026从主机流缓冲器2012接收与主机接收流送信道HRX A、HRX B中的每一个相关联的流控制数据。与每个主机接收流送信道HRX A、HRX B相关联的流控制数据定义了在主机流缓冲器2012中的分配量的缓冲器空间内可用于接受数据的空间,该数据经由相关联的主机接收流送信道HRX A、HRX B流送到应用2008A、2008B。在实施例中,针对每个主机接收流送信道HRX A、HRX B的接收到的流控制数据是多个信用,这些信用定义了在主机流缓冲器2012中的分配量的缓冲器空间内可用于从I/O设备流缓冲器2022接受附加数据的空间,该附加数据经由相关联的主机接收流送信道HRX A、HRX B流送到应用2008A、2008B。当在主机流缓冲器2012处从I/O设备流缓冲器2022接收到数据时,主机接收流送信道HRX A、HRX B中的每一个在将数据流送到相关联的应用2008A、2008B时将数据从主机流缓冲器2012排空。主机设备流缓冲器2012利用可用于每个主机接收流送信道HRX A、HRX B接受附加数据的多个信用来更新设备调度器2026。
例如,主机接收流送信道HRX A可以被指派有100个信用,并且等效于40个信用的40个数据单元可能已经从I/O设备流缓冲器2022流送到主机流缓冲器2012以流送到应用A。如果40个数据单元中的20个单元尚未经由主机接收流送信道HRX A从主机流缓冲器2012流送到应用A 2008A,则接收到的40个数据单元中的20个单元将不会从主机流缓冲器2012中排空。从主机流缓冲器2012发送到设备调度器2026的与主机接收流送信道HRX A相关联的信用数量是80个信用。80个信用指示主机流缓冲器2012可以接受来自I/O设备流缓冲器2022的多达80个数据单元,以经由主机接收流送信道HRX A流送到应用A 2008A。
在I/O设备流缓冲器2022处接收到的数据与特定目的地应用2008A、2008B相关联。每个应用2008A、2008B与主机接收流送信道HRX A、HRX B相关联。因此,与特定应用2008A、2008B相关联的数据与用于该应用2008A、2008B的主机接收流送信道HRX A、HRX B相关联。设备调度器2026基于用于主机接收流送信道HRX A、HRX B的多个可用信用来调度数据从I/O设备流缓冲器2022到主机流缓冲器2012的流送,该主机接收流送信道HRX A、HRX B将用于将数据流送到目的地应用2008A、2008B。主机流缓冲器2012定期利用流控制数据更新设备调度器2026,以实现对从I/O设备流缓冲器2022到目的地应用2008A、2008B的数据流的平衡。
参考图20,示出了经由接收流送信道将数据从I/O设备2004流送到主机设备2002的方法2300的实施例的流程图表示。当数据从I/O设备流缓冲器2022流送到目标应用2008A、2008B时,方法2300由流送子系统340执行。方法2300可以由流送子系统340结合系统2000的附加组件来执行。方法2300可以由硬件电路、固件、软件和/或其组合来执行。
在2302处,在I/O设备2004的I/O设备流缓冲器2022处从一个或多个源设备(未示出)接收用于流送到主机设备2002处的一个或多个目的地应用2008A、2008B的数据。在各种实施例中,源设备可以通过以下各项耦合到I/O设备2004:互连(铜或光纤)或网络(例如,以太网)或IB(Infiniband)或其他HPC互连或系统互连或存储互连(例如,光纤信道或FCoE),或其他网络元件或网络结构、交叉开关。源设备的示例包括但不限于计算服务器、交换机、路由器、负载平衡器、装置(例如,网络或安全装置),该装置包括但不限于具有GPU、FPGA、加速器(例如,AI、密码机和媒体编码器/解码器)的系统。
目的地应用2008A、2008B中的每一个与接收流送信道相关联。每个接收流送信道在主机流缓冲器2012中被分配有特定量的缓冲器空间。每个接收流送信道包括缓冲器接收流送信道BRX和主机接收流送信道HRX A、HRX B。每个主机接收流送信道HRX A、HRX B在主机流缓冲器2012中被分配有特定量的缓冲器空间。接收到的数据经由相关联的接收流送信道被流送到目的地应用。
在2304处,设备调度器2026从主机流缓冲器2012接收与应用2008A、2008B的主机接收流送信道HRX A、HRX B中的每一个相关联的流控制数据。在实施例中,流控制数据是可用于应用2008A、2008B的主机接收流送信道HRX A、HRX B中的每一个接受附加数据的多个信用。用于主机接收流送信道HRX A、HRX B的接收到的信用定义了在主机流缓冲器2012中的用于主机接收流送信道HRX A、HRX B的分配量的缓冲器空间内可用于接受附加数据的空间。
设备调度器2026基于在2306处经由缓冲器接收流送信道BRX接收到的流控制数据来调度数据从I/O设备流缓冲器2022到主机设备流缓冲器2012的流送。在实施例中,与目的地应用2008A、2008B中的每一个相关联的数据以轮询调度方式从I/O设备流缓冲器2022流送到主机流缓冲器2012。
在实施例中,与目的地应用2008A、2008B中的每一个相关联的数据以与目的地应用2008A、2008B的优先级相关联的次序从I/O设备流缓冲器2022流送到主机流缓冲器2012。例如,如果在I/O设备流缓冲器2022处接收到用于流送到目的地应用A 2008A的第一数据块,则在I/O设备流缓冲器2022处接收到用于流送到目的地应用B 2008B的第二数据块,并且应用B 2008B与比应用A2008A的优先级更高的优先级相关联,在第一数据块被调度为从I/O设备流缓冲器2022流送到主机流缓冲器2012之前将第二数据块调度为从I/O设备流缓冲器2022流送到主机流缓冲器2012。在实施例中,设备调度器2026标识与接收到的数据相关联的目的地应用2008A、2008B的优先级,并根据标识出的优先级调度接收到的数据从I/O设备流缓冲器2022到主机流缓冲器2012的流送。在替代实施例中,I/O设备流缓冲器2022可以使用加权的轮询调度、严格优先级和轮询调度的混合、加权的公平排队、其组合或其他调度机制,经由缓冲器接收流送信道BTX将数据流送到主机流缓冲器2012,以确保跨缓冲器接收流送信道BTX或整个系统的一定QoS。
在2308处,经由缓冲器接收流送信道BRX将数据从I/O设备流缓冲器2022流送到主机流缓冲器2012。在2310处,H/W调度器2018通知S/W调度器2016:用于目的地应用2008A、2008B的数据可用于经由相关联的主机接收流送信道HRX A、HRX B出队。在替代实施例中,设备调度器2026在调度数据从I/O设备流缓冲器2022到主机流缓冲器2012的流送时通知H/W调度器2018,并且H/W调度器2018通知S/W调度器2016:与目的地应用2008A、2008B相关联的数据已经被调度用于从I/O设备流缓冲器2022流送到主机流缓冲器2012。
在2312处,S/W调度器2016通知目的地应用2008A、2008B:用于目的地应用2008A、2008B的数据可用于由目的地应用2008A、2008B从相关联的主机接收流送信道HRX A、HRX B出队。在2314处,目的地应用2008A、2008B使用流送指令集架构(ISA)指令2020A、2020B使数据从相关联的主机接收流送信道HRX A、HRX B出队。在实施例中,应用2008A、2008B可以同时使数据从相关联的主机接收流送信道HRX A、HRX B出队。在实施例中,应用2008A、2008B可以在重叠时间段期间使数据从相关联的主机接收流送信道HRX A、HRX B出队。在实施例中,应用2008A、2008B可以在非重叠时间段期间使数据从相关联的主机接收流送信道HRXA、HRX B出队。方法2300然后返回到2302。
各种实施例可以包括上面描述的实施例的任何合适的组合,包括上文以连词形式(和)描述的实施例的替代(或)实施例(例如,“和”可以是“和/或”)。此外,一些实施例可以包括其上存储有指令的一个或多个制品(例如,非暂时性计算机可读介质),该指令在被执行时导致上面描述的实施例中的任一个的动作。此外,一些实施例可以包括具有用于执行上面描述的实施例的各种操作的任何合适单元的装置或系统。
参考图21,示出了根据实施例的接口电路的框图表示。接口电路2400被配置为与到链路的给定设备(例如,发送器和/或接收机)接合。在图21中示出的实施例中,接口电路2400是CXL接口电路。CXL接口电路2400包括事务层2410、链路层2420和物理层2440。参考CXL事务层2410,包括各种组件以实现用于PCIe/CXL.io通信和CXL.cache和CXL.memory事务的事务层处理。PCIe/CXL.io事务层2415包括被配置为执行各种事务层控制操作的控制电路2412。事务层2410包括PCIe事务层2416和用于处理对PCIe事务层2416的增强以处理CXL.io事务的附加电路2418。进而,CXL.cache和CXL.memory事务层2419可以针对这些协议执行事务层处理。
参考CXL链路层2420,包括各种组件以实现用于PCIe/CXL.io通信以及CXL.cache和CXL.memory事务的链路层处理。更具体地,PCIe/CXL.io链路层2425包括控制电路2422。在本文的实施例中,控制电路2422可以配置各种组件和/或自身执行链路IDE操作,包括提供如本文所描述的数据完整性和加密/解密两者。
在实施例中,控制电路2422可以包括或耦合到一个或多个配置寄存器2427。这样的配置寄存器可以包括一个或多个字段以控制包括如本文所描述的pCRC机制的各种特征。在实施例中,配置寄存器2427可以包括CXL IDE去特征寄存器(defeature register),该CXL IDE去特征寄存器可以包括pCRC启用/禁用指示符。在一种实现方式中,逻辑“1”值可以禁用以明文CRC增强MAC生成,并且当重置为逻辑“0”值时,可以默认启用该pCRC机制。
如进一步示出的,链路层2420还包括PCIe数据链路层2426和用于处理对PCIe数据链路层2426的增强以处理CXL.io事务的附加电路2428。进而,CXL.cache和CXL.memory链路层2429可以针对这些协议执行链路层处理。
进一步参考图21,链路层2420耦合到仲裁器/复用器2430以接收来自链路层2420的传入数据流,并选择数据流(或其部分)以传送到物理层2440。
在实施例中,物理层2440可以是用于进一步处理传入数据分组以在物理链路上通信的物理层,在实施例中,该物理链路可以是flex总线。如所示的,物理层2440包括PCIe/CXL逻辑电路2442和PCIe/CXL电子电路2446。这些电路包括相应的控制电路2445、2448以控制物理层2440内的处理。在所有这种处理完成后,传出事务层数据分组可以在链路上通信。类似地,传入事务层数据分组可以在物理层2440内接收,并且在接口电路2400的通信栈内处理。应理解,虽然在图214的实施例中以该高级别示出,但是许多变型和替代方案是可能的。
图22是根据实施例的系统的框图表示。如图22中示出的,设备2505可以是经由互连2589耦合到主机处理器2545的加速器或处理器设备,该互连2589可以是单个互连、总线、迹线等。设备2505和主机处理器2545可以通过链路2589进行通信以使数据和消息能够在其之间传递。主机处理器2545可以类似于图1中的CPU 320、图2中的CPU 407、图3中的CPU520、图4中的CPU 620、图5中的主机702、图6中的主机802以及图16中的主机设备2002。在实施例中,主机处理器2545可以是图形处理单元(GPU)。在实施例中,一个或多个PCIe设备可以直接从GPU存储器读取和/或写入GPU存储器。在实施例中,GPU和一个或多个PCIe设备可以在同一PCIe根联合体下。设备2505可以类似于图1中的I/O设备330、图2中的I/O设备408、图3中的I/O设备530、图4中的I/O设备630、图5中的设备704、图6中的设备804以及图16中的I/O设备2004。在一些实施例中,链路2589可以是可操作的以支持多个协议,并且经由多个互连协议(包括本文所描述的CXL协议)传送数据和消息。例如,链路2589可以支持各种互连协议,包括非一致互连协议、一致互连协议和存储器互连协议。支持的互连协议的非限制性示例可以包括PCI、PCIe、USB、IDI、IOSF、SMI、SMI3、SATA、CXL.io、CXL.cache和CXL.mem和/或其他协议。
在实施例中,设备2505可以包括具有电路2529的加速器逻辑2525。在一些实例中,加速器逻辑2525和电路2529可以提供处理和存储器能力。设备2505的示例可以包括生产者-消费者设备,例如,图形或其他专用加速器、生产者-消费者加设备、软件辅助设备存储器设备、自主设备存储器设备和巨型高速缓存设备。在一些情况下,加速器逻辑2525可以耦合到可选的加速器存储器2530。加速器逻辑2525和电路2529可以提供基于设备的处理和存储器能力。例如,加速器逻辑2525和电路2529可以使用例如用于各种功能的一致互连协议(例如,一致请求和存储器流)经由接口逻辑2513和电路2527与主机处理器2545通信。接口逻辑2513和电路2527可以基于用于通信的消息和数据来确定互连协议。应当理解,对于本文的实施例,电路2527可以包括链路IDE电路以执行本文所描述的数据完整性和数据加密/解密两者。在一些实施例中,接口逻辑2513可以耦合到具有一个或多个协议队列2512的多协议复用器2510,以与主机处理器2545发送和接收消息和数据。协议队列2512可以是特定于协议的,使得每个互连协议可以与特定的协议队列相关联。复用器2510还可以实现仲裁电路以在不同协议的通信之间进行仲裁,并向物理层2515提供选定的通信。
在各种实施例中,主机处理器2545可以是主处理器,例如,CPU。主机处理器2545可以耦合到主机存储器2540,并且可以包括一致性逻辑(或一致性和高速缓存逻辑)2555,该一致性逻辑2555可以包括高速缓存层级。一致性逻辑2555可以使用各种互连与包括电路2561的接口逻辑2563以及一个或多个核心2565a-n进行通信。在一些实施例中,一致性逻辑2555可以使得能够经由一致互连协议和存储器互连协议中的一个或多个进行通信。
在各种实施例中,主机处理器2545可以包括通过互连与总线逻辑2560通信的设备2570。在一些实施例中,设备2570可以是I/O设备,例如,PCIe I/O设备。在其他情况下,一个或多个外部设备(例如,PCIe设备)可以耦合到总线逻辑2570。
在实施例中,主机处理器2545可以包括接口逻辑2563和电路2561,以实现在主机处理器2545的组件与设备2505之间的多协议通信。接口逻辑2563和电路2561可以根据一个或多个互连协议(例如,非一致互连协议、一致互连协议和存储器互连协议)动态地处理和实现在主机处理器2545与设备2505之间的消息和数据的传送。例如,接口逻辑2563和电路2561可以确定每个消息的消息类型,并确定多个互连协议中的哪个互连协议用于处理消息中的每一个。可以利用不同的互连协议来处理消息。另外地,电路2561可以包括链路IDE电路以执行本文所描述的数据完整性和数据加密/解密两者。
在一些实施例中,接口逻辑2563可以耦合到具有一个或多个协议队列2552的多协议复用器2550以与设备2505发送和接收消息和数据。协议队列2552可以是特定于协议的,使得每个互连协议可以与特定的协议队列相关联。复用器2550还可以实现仲裁电路以在不同协议的通信之间进行仲裁,并向物理层2554提供选定的通信。
以下示例涉及进一步的实施例。
在一个示例中,一种装置,包括:处理器,该处理器用于:执行至少第一应用和第二应用,第一应用与第一发送流送信道相关联,以将第一数据从第一应用流送到设备的设备流缓冲器,其中,第一发送流送信道在设备流缓冲器中具有第一分配量的缓冲器空间;以及耦合到处理器的调度器,该调度器用于:至少部分地基于在设备流缓冲器中的第一分配量的缓冲器空间中的空间可用性来调度第一应用,以使第一数据入队到第一发送流送信道。
在示例中,调度器还用于:从设备接收与在设备流缓冲器中的第一分配量的缓冲器空间中的空间可用性相关联的流控制数据;以及至少部分地基于流控制数据来调度第一应用,以使第一数据入队到第一发送流送信道。
在示例中,第二应用与第二发送流送信道相关联,以将第二数据从第二应用流送到设备流缓冲器,第二发送流送信道在设备流缓冲器中具有第二分配量的缓冲器空间;以及装置还包括主机流缓冲器,该主机流缓冲器用于:分别经由第一发送流送信道和第二发送流送信道接收第一数据和第二数据;以及经由缓冲器发送流送信道将第一数据和第二数据从主机流缓冲器流送到设备流缓冲器。
在示例中,调度器还用于:至少部分地基于与第一应用相关联的第一优先级以及与第二应用相关联的第二优先级,来对第一数据和第二数据经由缓冲器发送流送信道从主机流缓冲器到设备流缓冲器的流送进行优先级排序。
在示例中,调度器还用于:从设备接收第一数据排空速率,该第一数据排空速率与第一数据从设备流缓冲器的排空相关联;从设备接收第二数据排空速率,该第二数据排空速率与第二数据从设备流缓冲器的排空相关联;以及至少部分地基于第一数据排空速率和第二数据排空速率,来对第一数据和第二数据从主机流缓冲器到设备流缓冲器的流送重新进行优先级排序。
在示例中,调度器还用于:从设备接收第一数据排空速率,该第一数据排空速率与第一数据从设备流缓冲器的排空相关联;以及至少部分地基于第一数据排空速率来调度第一数据从第一应用到第一发送流送信道的入队。
在示例中,第二应用与第二发送流送信道相关联,以将第二数据从第二应用流送到设备流缓冲器,并且第二发送流送信道在设备流缓冲器中具有第二分配量的缓冲器空间;以及调度器还用于:确定由第一应用提供的第一数据是否低于信道数据阈值;以及至少部分地基于确定,来动态地将在设备流缓冲器中的第一分配量的缓冲器空间调整给第一发送流送信道,并且将在设备流缓冲器中的第二分配量的缓冲器空间调整给第二发送流送信道。
在示例中,第一应用与第一优先级相关联,并且第二应用与第二优先级相关联,第二应用与第二发送流送信道相关联,以将第二数据从第二应用流送到设备流缓冲器,并且第二发送流送信道在设备流缓冲器中具有第二分配量的缓冲器空间;以及调度器还用于:至少部分地基于第一优先级,来在将设备流缓冲器中的第一分配量的缓冲器空间分配给第一发送流送信道;以及至少部分地基于第二优先级,来将在设备流缓冲器中的第二分配量的缓冲器空间分配给第二发送流送信道。
在示例中,装置还还包括:主机流缓冲器,该主机流缓冲器用于:经由第一接收流送信道从设备接收与第一应用相关联的第三数据,第一接收流送信道与第一应用相关联,并且第一接收流送信道在主机流缓冲器中具有第一分配量的缓冲器空间。
在示例中,主机流缓冲器用于:将与在主机流缓冲器中的第一分配量的缓冲器空间中的空间可用性相关联的流控制数据发送到设备。
在示例中,调度器还用于:调度通过第一应用将第三数据从第一接收流送信道的出队。
在一个示例中,一种包括存储在其上的指令的机器可读介质,该指令如果由机器执行,使得机器用于:在设备的设备流缓冲器处接收与第一应用相关联的第一数据,第一应用与第一接收流送信道相关联,以经由主机流缓冲器将第一数据从设备流缓冲器流送到主机设备处的第一应用,第一接收流送信道在主机流缓冲器中具有第一分配量的缓冲器空间;以及至少部分地基于在主机流缓冲器中的第一分配量的缓冲器空间中的空间可用性,来调度第一数据经由第一接收流送信道从设备流缓冲器到第一应用的流送。
在示例中,机器可读介质还包括用于使得机器进行以下操作的指令:从主机设备接收与在主机流缓冲器中的第一分配量的缓冲器空间中的空间可用性相关联的流控制数据;以及至少部分地基于流控制数据来调度第一数据从设备流缓冲器到主机流缓冲器的流送。
在示例中,机器可读介质还包括用于使得机器进行以下操作的指令:在设备流缓冲器处接收与第二应用相关联的第二数据,第二应用与第二接收流送信道相关联,以经由主机流缓冲器将第二数据从设备流缓冲器流送到主机设备处的第二应用,第二接收流送信道在主机流缓冲器中具有第二分配量的缓冲器空间;以及至少部分地分别基于第一应用的第一优先级和第二应用的第二优先级,来调度第一数据和第二数据经由缓冲器接收流送信道从设备流缓冲器到主机流缓冲器的流送。
在示例中,机器可读介质还包括用于使得机器进行以下操作的指令:在设备流缓冲器处,经由第一发送流送信道从第一应用接收第三数据,第一发送流送信道与第一应用相关联,并且第一发送流送信道在设备流缓冲器中具有第一分配量的缓冲器空间。
在示例中,机器可读介质还包括用于使得机器进行以下操作的指令:将与在设备流缓冲器中的第一分配量的缓冲器空间中的空间可用性相关联的流控制数据发送到主机。
在示例中,一种系统,包括设备以及耦合到设备的主机。设备包括设备流缓冲器。主机包括:处理器,该处理器用于:执行至少第一应用和第二应用,第一应用与第一发送流送信道相关联,以将第一数据从第一应用流送到设备流缓冲器,第一发送流送信道在设备流缓冲器中具有第一分配量的缓冲器空间;主机流缓冲器;以及耦合到处理器的主机调度器,该主机调度器用于:至少部分地基于在设备流缓冲器中的第一分配量的缓冲器空间中的空间可用性,来调度第一数据从第一应用到第一发送流送信道的入队。
在示例中,主机调度器还用于:接收与在设备流缓冲器中的第一分配量的缓冲器空间中的空间可用性相关联的流控制数据;以及至少部分地基于流控制数据来调度第一数据从第一应用到第一发送流送信道的入队。
在示例中,系统包括:设备调度器,其中,设备流缓冲器用于:接收与第一应用相关联的第三数据,第一应用与第一接收流送信道相关联,以将第三数据从设备流缓冲器流送到第一应用,第一接收流送信道在主机流缓冲器中具有第一分配量的缓冲器空间;以及设备调度器用于:至少部分地基于在主机流缓冲器中的第一分配量的缓冲器空间中的空间可用性,来调度第三数据从设备流缓冲器到主机流缓冲器的流送。
在示例中,设备调度器还用于:接收与在主机流缓冲器中的第一分配量的缓冲器空间中的空间可用性相关联的流控制数据;以及至少部分地基于流控制数据来调度第三数据从设备流缓冲器到主机流缓冲器的流送。
所示实现方式的以上描述(包括摘要中描述的内容)并非旨在穷举或将本公开的实施例限制为所公开的精确形式。虽然本文出于说明的目的描述了具体实现方式和示例,但是如相关领域的技术人员将认识到的,在本公开的范围内各种等效修改是可能的。
可以鉴于以上详细描述对本公开的实施例进行这些修改。在所附权利要求中使用的术语不应被解释为将本公开的各种实施例限制为在说明书和权利要求书中公开的具体实现方式。而是,范围将完全由所附权利要求确定,这些权利要求根据权利要求解释的既定原则来解释。
注意,术语“电路”和“电路系统”在本文中可互换地使用。如本文所使用的,这些术语和术语“逻辑”用于单独或以任何组合指代模拟电路、数字电路、硬连线电路、可编程电路、处理器电路、微控制器电路、硬件逻辑电路、状态机电路和/或任何其他类型的物理硬件组件。实施例可以在许多不同类型的系统中使用。例如,在一个实施例中,通信设备可以被布置为执行本文描述的各种方法和技术。当然,本发明的范围不限于通信设备,而是其他实施例可以针对用于处理指令的其他类型的装置或者包括指令的一个或多个机器可读介质,该指令响应于在计算设备上执行,使得设备执行本文描述的方法和技术中的一个或多个。
实施例可以以代码实现,并且可以存储在其上存储有指令的非暂时性存储介质上,该指令可以用于对系统进行编程以执行指令。实施例还可以以数据实现,并且可以存储在非暂时性存储介质上,如果该非暂时性存储介质由至少一个机器使用,则使得该至少一个机器制造至少一个集成电路以执行一个或多个操作。更进一步的实施例可以在包括信息的计算机可读存储介质中实现,当该信息被制造到SoC或其他处理器中时,该信息用于配置SoC或其他处理器以执行一个或多个操作。存储介质可以包括但不限于任何类型的磁盘,包括软盘、光盘、固态驱动器(SSD)、压缩盘只读存储器(CD-ROM)、可重写压缩盘(CD-RW)以及磁光盘;半导体设备,例如,只读存储器(ROM)、随机存取存储器(RAM)(例如,动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))、可擦除可编程只读存储器(EPROM)、闪速存储器、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡,或适合存储电子指令的任何其他类型的介质。
虽然本发明已经关于有限数量的实施例进行了描述,但是本领域技术人员将认识到由此产生的许多修改和变型。所附权利要求书旨在涵盖落入本发明的真实精神和范围内的所有这种修改和变型。

Claims (25)

1.一种用于流送数据的装置,包括:
处理器,所述处理器用于:执行至少第一应用和第二应用,所述第一应用与第一发送流送信道相关联,以将第一数据从所述第一应用流送到设备的设备流缓冲器,其中,所述第一发送流送信道在所述设备流缓冲器中具有第一分配量的缓冲器空间;以及
耦合到所述处理器的调度器,所述调度器用于:至少部分地基于在所述设备流缓冲器中的所述第一分配量的缓冲器空间中的空间可用性来调度所述第一应用,以使所述第一数据入队到所述第一发送流送信道。
2.根据权利要求1所述的装置,其中,所述第二应用与第二发送流送信道相关联,以将第二数据从所述第二应用流送到所述设备流缓冲器,所述第二发送流送信道在所述设备流缓冲器中具有第二分配量的缓冲器空间;以及
所述装置还包括主机流缓冲器,所述主机流缓冲器用于:
分别经由所述第一发送流送信道和所述第二发送流送信道接收所述第一数据和所述第二数据;以及
经由缓冲器发送流送信道将所述第一数据和所述第二数据从所述主机流缓冲器流送到所述设备流缓冲器。
3.根据权利要求2所述的装置,其中,所述调度器还用于:至少部分地基于与所述第一应用相关联的第一优先级以及与所述第二应用相关联的第二优先级,来对所述第一数据和所述第二数据经由所述缓冲器发送流送信道从所述主机流缓冲器到所述设备流缓冲器的流送进行优先级排序。
4.根据权利要求2所述的装置,其中,所述调度器还用于:
从所述设备接收第一数据排空速率,所述第一数据排空速率与所述第一数据从所述设备流缓冲器的排空相关联;
从所述设备接收第二数据排空速率,所述第二数据排空速率与所述第二数据从所述设备流缓冲器的排空相关联;以及
至少部分地基于所述第一数据排空速率和所述第二数据排空速率,来对所述第一数据和所述第二数据从所述主机流缓冲器到所述设备流缓冲器的流送重新进行优先级排序。
5.根据权利要求1所述的装置,其中,所述调度器还用于:
从所述设备接收第一数据排空速率,所述第一数据排空速率与所述第一数据从所述设备流缓冲器的排空相关联;以及
至少部分地基于所述第一数据排空速率来调度所述第一数据从所述第一应用到所述第一发送流送信道的所述入队。
6.根据权利要求1所述的装置,其中,所述第二应用与第二发送流送信道相关联,以将第二数据从所述第二应用流送到所述设备流缓冲器,并且所述第二发送流送信道在所述设备流缓冲器中具有第二分配量的缓冲器空间;以及
所述调度器还用于:
确定由所述第一应用提供的所述第一数据是否低于信道数据阈值;以及
至少部分地基于所述确定,来动态地将在所述设备流缓冲器中的所述第一分配量的缓冲器空间调整给所述第一发送流送信道,并且将在所述设备流缓冲器中的所述第二分配量的缓冲器空间调整给所述第二发送流送信道。
7.根据权利要求1所述的装置,其中,所述第一应用与第一优先级相关联,并且所述第二应用与第二优先级相关联,所述第二应用与第二发送流送信道相关联,以将第二数据从所述第二应用流送到所述设备流缓冲器,并且所述第二发送流送信道在所述设备流缓冲器中具有第二分配量的缓冲器空间;以及
所述调度器还用于:
至少部分地基于所述第一优先级,来将在所述设备流缓冲器中的所述第一分配量的缓冲器空间分配给所述第一发送流送信道;以及
至少部分地基于所述第二优先级,来将在所述设备流缓冲器中的所述第二分配量的缓冲器空间分配给所述第二发送流送信道。
8.根据权利要求1所述的装置,还包括:主机流缓冲器,所述主机流缓冲器用于:经由第一接收流送信道从所述设备接收与所述第一应用相关联的第三数据,所述第一接收流送信道与所述第一应用相关联,并且所述第一接收流送信道在所述主机流缓冲器中具有第一分配量的缓冲器空间。
9.根据权利要求8所述的装置,其中,所述主机流缓冲器用于:将与在所述主机流缓冲器中的所述第一分配量的缓冲器空间中的空间可用性相关联的流控制数据发送到所述设备。
10.根据权利要求8所述的装置,其中,所述调度器还用于:调度通过所述第一应用将所述第三数据从所述第一接收流送信道的出队。
11.根据权利要求1-10中任一项所述的装置,其中,所述调度器还用于:
从所述设备接收与在所述设备流缓冲器中的所述第一分配量的缓冲器空间中的所述空间可用性相关联的流控制数据;以及
至少部分地基于所述流控制数据来调度所述第一应用,以使所述第一数据入队到所述第一发送流送信道。
12.一种用于流送数据的方法,包括:
在设备的设备流缓冲器处接收与第一应用相关联的第一数据,所述第一应用与第一接收流送信道相关联,以经由主机流缓冲器将所述第一数据从所述设备流缓冲器流送到主机设备处的所述第一应用,所述第一接收流送信道在所述主机流缓冲器中具有第一分配量的缓冲器空间;以及
至少部分地基于在所述主机流缓冲器中的所述第一分配量的缓冲器空间中的空间可用性,来调度所述第一数据经由所述第一接收流送信道从所述设备流缓冲器到所述第一应用的流送。
13.根据权利要求12所述方法,还包括:
从所述主机设备接收与在所述主机流缓冲器中的所述第一分配量的缓冲器空间中的空间可用性相关联的流控制数据;以及
至少部分地基于所述流控制数据来调度所述第一数据从所述设备流缓冲器到所述主机流缓冲器的流送。
14.根据权利要求12所述的方法,还包括:
在所述设备流缓冲器处接收与第二应用相关联的第二数据,所述第二应用与第二接收流送信道相关联,以经由所述主机流缓冲器将所述第二数据从所述设备流缓冲器流送到所述主机设备处的所述第二应用,所述第二接收流送信道在所述主机流缓冲器中具有第二分配量的缓冲器空间;以及
至少部分地分别基于所述第一应用的第一优先级和所述第二应用的第二优先级,来调度所述第一数据和所述第二数据经由缓冲器接收流送信道从所述设备流缓冲器到所述主机流缓冲器的流送。
15.根据权利要求12所述的方法,还包括:在所述设备流缓冲器处,经由第一发送流送信道从所述第一应用接收第三数据,所述第一发送流送信道与所述第一应用相关联,并且所述第一发送流送信道在所述设备流缓冲器中具有第一分配量的缓冲器空间。
16.根据权利要求12所述的方法,还包括:将与在所述设备流缓冲器中的所述第一分配量的缓冲器空间中的空间可用性相关联的流控制数据发送到所述主机。
17.一种计算机可读存储介质,其包括计算机可读指令,所述计算机可读指令在被执行时,用于实现根据权利要求12-16中任一项所述的方法。
18.一种用于流送数据的系统,包括:
设备,所述设备包括:
设备流缓冲器;以及
耦合到所述设备的主机,所述主机包括:
处理器,所述处理器用于:执行至少第一应用和第二应用,所述第一应用与第一发送流送信道相关联,以将第一数据从所述第一应用流送到所述设备流缓冲器,所述第一发送流送信道在所述设备流缓冲器中具有第一分配量的缓冲器空间;
主机流缓冲器;以及
耦合到所述处理器的主机调度器,所述主机调度器用于:至少部分地基于在所述设备流缓冲器中的所述第一分配量的缓冲器空间中的空间可用性,来调度所述第一数据从所述第一应用到所述第一发送流送信道的入队。
19.根据权利要求18所述的系统,其中,所述主机调度器还用于:
接收与在所述设备流缓冲器中的所述第一分配量的缓冲器空间中的空间可用性相关联的流控制数据;以及
至少部分地基于所述流控制数据来调度所述第一数据从所述第一应用到所述第一发送流送信道的所述入队。
20.根据权利要求18所述的系统,还包括设备调度器,其中,所述设备流缓冲器用于:接收与所述第一应用相关联的第三数据,所述第一应用与第一接收流送信道相关联,以将所述第三数据从所述设备流缓冲器流送到所述第一应用,所述第一接收流送信道在所述主机流缓冲器中具有第一分配量的缓冲器空间;以及
所述设备调度器用于:至少部分地基于在所述主机流缓冲器中的所述第一分配量的缓冲器空间中的空间可用性,来调度所述第三数据从所述设备流缓冲器到所述主机流缓冲器的流送。
21.根据权利要求18-20中任一项所述的系统,其中,所述设备调度器还用于:
接收与在所述主机流缓冲器中的所述第一分配量的缓冲器空间中的所述空间可用性相关联的流控制数据;以及
至少部分地基于所述流控制数据来调度所述第三数据从所述设备流缓冲器到所述主机流缓冲器的流送。
22.一种用于流送数据的装置,包括:
处理器单元,所述处理器单元用于:执行至少第一应用和第二应用,所述第一应用与第一发送流送信道相关联,以将第一数据从所述第一应用流送到设备的设备流缓冲器,其中,所述第一发送流送信道在所述设备流缓冲器中具有第一分配量的缓冲器空间;以及
耦合到所述处理器单元的调度器单元,所述调度器单元用于:至少部分地基于在所述设备流缓冲器中的所述第一分配量的缓冲器空间中的空间可用性来调度所述第一应用,以使所述第一数据入队到所述第一发送流送信道。
23.根据权利要求22所述的装置,其中,所述第二应用与第二发送流送信道相关联,以将第二数据从所述第二应用流送到所述设备流缓冲器,所述第二发送流送信道在所述设备流缓冲器中具有第二分配量的缓冲器空间;以及
所述装置还包括主机流缓冲器单元,所述主机流缓冲器单元用于:
分别经由所述第一发送流送信道和所述第二发送流送信道接收所述第一数据和所述第二数据;以及
经由缓冲器发送流送信道将所述第一数据和所述第二数据从所述主机流缓冲器单元流送到所述设备流缓冲器。
24.根据权利要求23所述的装置,其中,所述调度器单元用于:至少部分地基于与所述第一应用相关联的第一优先级以及与所述第二应用相关联的第二优先级,来对所述第一数据和所述第二数据经由所述缓冲器发送流送信道从所述主机流缓冲器单元到所述设备流缓冲器的流送进行优先级排序。
25.根据权利要求22-24中任一项所述的装置,其中,所述调度器单元用于:
从所述设备接收与在所述设备流缓冲器中的所述第一分配量的缓冲器空间中的所述空间可用性相关联的流控制数据;以及
至少部分地基于所述流控制数据来调度所述第一应用,以使所述第一数据入队到所述第一发送流送信道。
CN202111188982.8A 2020-11-12 2021-10-12 用于流送输入/输出数据的系统、装置和方法 Pending CN114490499A (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202063113105P 2020-11-12 2020-11-12
US63/113,105 2020-11-12
US17/313,353 US20210281618A1 (en) 2020-11-12 2021-05-06 System, apparatus, and method for streaming input/output data
US17/313,353 2021-05-06

Publications (1)

Publication Number Publication Date
CN114490499A true CN114490499A (zh) 2022-05-13

Family

ID=77556402

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111188982.8A Pending CN114490499A (zh) 2020-11-12 2021-10-12 用于流送输入/输出数据的系统、装置和方法

Country Status (3)

Country Link
US (1) US20210281618A1 (zh)
EP (1) EP4002119A1 (zh)
CN (1) CN114490499A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115017063A (zh) * 2022-08-08 2022-09-06 北京紫光芯能科技有限公司 一种先进先出的数据缓存器及数据缓存系统
CN115098430A (zh) * 2022-06-27 2022-09-23 西安电子科技大学 一种基于amp架构的核间通信优先级调度方法

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11748181B2 (en) * 2021-04-28 2023-09-05 EMC IP Holding Company, LLC System and method for efficient scalable software-defined NVMEoF front-end connectivity
US20230214346A1 (en) * 2021-12-30 2023-07-06 Ati Technologies Ulc Allocating peripheral component interface express (pcie) streams in a configurable multiport pcie controller
US20230214337A1 (en) * 2022-01-06 2023-07-06 Vmware, Inc. Methods and systems for extablishing direct communications between a server computer and a smart network interface controller
US11937279B2 (en) * 2022-06-21 2024-03-19 Skyworks Solutions, Inc. Systems, devices, and methods related to configuring a multi-stream network with a messaging schedule
US20240320072A1 (en) * 2023-03-20 2024-09-26 Google Llc Selective re-execution of instruction streams for reliability

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5699361A (en) * 1995-07-18 1997-12-16 Industrial Technology Research Institute Multimedia channel formulation mechanism
US6519686B2 (en) * 1998-01-05 2003-02-11 Intel Corporation Information streaming in a multi-process system using shared memory
US20040160971A1 (en) * 2002-11-27 2004-08-19 Edward Krause Apparatus and method for dynamic channel mapping and optimized scheduling of data packets
JP2006518948A (ja) * 2003-02-13 2006-08-17 ノキア コーポレイション マルチメディア・ストリーミングにおけるストリーミング品質適合と制御機構のシグナリング方法
US20070025242A1 (en) * 2005-07-27 2007-02-01 Broadcom Corporation Dynamic allocation of aggregate buffer
US9626216B2 (en) * 2012-05-09 2017-04-18 Nvidia Corporation Graphics processing unit sharing between many applications
US9977745B2 (en) * 2016-01-05 2018-05-22 Knuedge, Inc. Flow control through packet router
US10558254B2 (en) * 2017-04-01 2020-02-11 Intel Corporation Power consumption management for communication bus
US10303594B2 (en) * 2017-04-17 2019-05-28 Intel Corporation Guaranteed forward progress mechanism
US11855881B2 (en) * 2019-05-23 2023-12-26 Hewlett Packard Enterprise Development Lp System and method for facilitating efficient packet forwarding using a message state table in a network interface controller (NIC)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115098430A (zh) * 2022-06-27 2022-09-23 西安电子科技大学 一种基于amp架构的核间通信优先级调度方法
CN115098430B (zh) * 2022-06-27 2024-03-19 西安电子科技大学 一种基于amp架构的核间通信优先级调度方法
CN115017063A (zh) * 2022-08-08 2022-09-06 北京紫光芯能科技有限公司 一种先进先出的数据缓存器及数据缓存系统

Also Published As

Publication number Publication date
EP4002119A1 (en) 2022-05-25
US20210281618A1 (en) 2021-09-09

Similar Documents

Publication Publication Date Title
EP4002119A1 (en) System, apparatus, and method for streaming input/output data
EP3754498B1 (en) Architecture for offload of linked work assignments
EP3754511A1 (en) Multi-protocol support for transactions
US11916800B2 (en) Dynamic virtual cut-through and dynamic fabric bandwidth allocation between virtual cut-through and store-and-forward traffic
US9485188B2 (en) Virtual switching based flow control
CN107995129B (zh) 一种nfv报文转发方法和装置
US20190280991A1 (en) Quality of service traffic management in high-speed packet processing systems
US20170308394A1 (en) Networking stack of virtualization software configured to support latency sensitive virtual machines
JP6392745B2 (ja) サーバノード相互接続デバイス及びサーバノード相互接続方法
US20220261367A1 (en) Persistent kernel for graphics processing unit direct memory access network packet processing
US20150281126A1 (en) METHODS AND APPARATUS FOR A HIGH PERFORMANCE MESSAGING ENGINE INTEGRATED WITHIN A PCIe SWITCH
US20140198799A1 (en) Scheduling and Traffic Management with Offload Processors
US20210359955A1 (en) Cache allocation system
WO2002031672A2 (en) Method and apparatus for interprocessor communication and peripheral sharing
EP3563534B1 (en) Transferring packets between virtual machines via a direct memory access device
EP4187869A1 (en) Egress packet scheduling
US20220321478A1 (en) Management of port congestion
WO2017151236A1 (en) Traffic shaper with policer(s) and adaptive timers
US20230401109A1 (en) Load balancer
EP4134804A1 (en) Data access technologies
US20240348562A1 (en) Multi-host isolation in a shared networking pipeline
US20240111691A1 (en) Time-aware network data transfer
US20240272931A1 (en) Method and apparatus for dynamic optimization of single root input/output virtualization workloads performance on a server and a client device
WO2024013830A1 (ja) サーバ内データ転送装置、データ転送システム、サーバ内データ転送方法およびプログラム
US20230353508A1 (en) Packet traffic management

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