CN115705306A - 多功能灵活计算存储设备 - Google Patents
多功能灵活计算存储设备 Download PDFInfo
- Publication number
- CN115705306A CN115705306A CN202210954403.4A CN202210954403A CN115705306A CN 115705306 A CN115705306 A CN 115705306A CN 202210954403 A CN202210954403 A CN 202210954403A CN 115705306 A CN115705306 A CN 115705306A
- Authority
- CN
- China
- Prior art keywords
- data
- port
- multifunction device
- present disclosure
- storage
- 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
Links
- 230000015654 memory Effects 0.000 claims abstract description 174
- 239000000872 buffer Substances 0.000 claims description 140
- 238000000034 method Methods 0.000 claims description 91
- 230000006870 function Effects 0.000 claims description 54
- 238000012545 processing Methods 0.000 claims description 53
- 238000004891 communication Methods 0.000 claims description 36
- 238000004519 manufacturing process Methods 0.000 claims description 33
- 239000000284 extract Substances 0.000 claims description 9
- 230000005540 biological transmission Effects 0.000 claims description 7
- 230000002093 peripheral effect Effects 0.000 claims description 6
- 230000003863 physical function Effects 0.000 description 45
- 230000008569 process Effects 0.000 description 36
- 238000012546 transfer Methods 0.000 description 15
- 230000008901 benefit Effects 0.000 description 8
- 230000004044 response Effects 0.000 description 7
- 239000007787 solid Substances 0.000 description 6
- 238000013519 translation Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 230000001537 neural effect Effects 0.000 description 5
- 238000007726 management method Methods 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000003491 array Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 239000004744 fabric Substances 0.000 description 3
- 230000014509 gene expression Effects 0.000 description 2
- 230000010354 integration Effects 0.000 description 2
- 230000033001 locomotion Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 239000000969 carrier Substances 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000005476 soldering Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000029305 taxis Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
- G06F13/1684—Details of memory controller using multiple buses
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
- G06F13/105—Program control for peripheral devices where the programme performs an input/output emulation function
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
- G06F13/1673—Details of memory controller using buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/382—Information transfer, e.g. on bus using universal interface adapter
- G06F13/385—Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
- G06F13/4004—Coupling between buses
- G06F13/4022—Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
- G06F13/4004—Coupling between buses
- G06F13/4027—Coupling between buses using bus bridges
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4204—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
- G06F13/4221—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations 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/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
- G06F15/17306—Intercommunication techniques
- G06F15/17331—Distributed shared memory [DSM], e.g. remote direct memory access [RDMA]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/104—Peer-to-peer [P2P] networks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0026—PCI express
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0028—Serial attached SCSI [SAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0032—Serial ATA [SATA]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0036—Small computer system interface [SCSI]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Information Transfer Systems (AREA)
- Warehouses Or Storage Devices (AREA)
Abstract
公开了一种多功能设备。第一端口可以用于与主机处理器通信。第二端口可以用于与存储设备通信。第三端口可以用于与计算存储单元通信。电路可以用于将消息从主机处理器路由到存储设备或计算存储单元中的至少一个。
Description
相关申请的交叉引用
本申请要求于2021年8月12日提交的美国临时专利申请序列号63/232,631的权益,该申请通过引用并入本文以用于所有目的。
技术领域
本公开一般涉及存储设备,更具体地,涉及允许访问存储设备和一个或多个计算存储单元的桥。
背景技术
本背景技术部分仅旨在提供上下文,并且本部分中任何概念的公开不构成承认所述概念是现有技术。
随着存储设备提供的容量增加,应用可能会处理越来越多的数据。将大量数据从存储设备传送到主存储器以供应用处理可能需要大量时间。此外,让主机处理器执行命令来处理该数据可能会给主机处理器带来负担。
仍然需要改进处理数据。
发明内容
本公开的实施例包括一个或多个桥。桥可以支持一个或多个存储设备和一个或多个计算存储单元。桥可以向主机处理器暴露(expose)类似于存储设备和计算存储单元所提供的功能。桥可以支持在存储设备和计算存储单元之间传送数据。
附图说明
下面描述的附图是如何实现本公开的实施例的示例,并且不旨在限制本公开的实施例。本公开的各个实施例可以包括在特定附图中未示出的元件和/或可以省略在特定附图中示出的元件。附图旨在提供说明,并且可能没有按比例绘制。
图1示出了根据本公开的实施例的包括支持模块化存储设备和/或计算存储单元的多功能设备的机器。
图2示出了根据本公开的实施例的图1的机器的细节。
图3示出了根据本公开的实施例的图1的多功能设备的细节。
图4示出了根据本公开的实施例的图1的存储设备的细节。
图5A示出了根据本公开的实施例的图1的计算存储单元的第一示例实施方式。
图5B示出了根据本公开的实施例的图1的计算存储单元的第二示例实施方式。
图5C示出了根据本公开的实施例的图1的计算存储单元的第三示例实施方式。
图5D示出了根据本公开的实施例的图1的计算存储单元的第四示例实施方式。
图6示出了根据本公开的实施例的使用图1的多功能设备向图1的存储设备和/或图1的计算存储单元传递请求的示例过程的流程图。
图7示出了根据本公开的实施例的使用图1的多功能设备来识别图1的存储设备和/或图1的计算存储单元的暴露功能的示例过程的流程图。
图8示出了根据本公开的实施例的使用图3的异步缓冲器的示例过程的流程图。
图9示出了根据本公开的实施例的用另一计算存储单元替换图1的计算存储单元的示例过程的流程图。
图10示出了根据本公开的实施例的使用图1的多功能设备在附接到图1的多功能设备的设备之间传递请求的示例过程的流程图。
图11A示出了根据本公开的实施例的附接到图1的多功能设备的设备共享数据的示例过程的流程图。
图11B继续根据本公开的实施例的附接到图1的多功能设备的设备共享数据的示例过程的图11A的流程图。
具体实施方式
现在将详细参考本公开的实施例,其示例在附图中示出。在以下详细描述中,阐述了许多具体细节,以使得能够彻底理解本公开。然而,应当理解,本领域普通技术人员可以在没有这些具体细节的情况下实践本公开。在其他情况下,没有详细描述公知的方法、过程、组件、电路和网络,以免不必要地模糊实施例的各方面。
应当理解,尽管术语第一、第二等可以在本文中用来描述各种元件,但是这些元件不应被这些术语所限制。这些术语仅用于区分一个元件和另一个元件。例如,在不脱离本公开的范围的情况下,第一模块可以被称为第二模块,并且类似地,第二模块可以被称为第一模块。
本文公开的描述中使用的术语仅用于描述特定实施例的目的,并不旨在限制本公开。如在本公开的描述和所附权利要求中所使用的,单数形式的“一”、“一个”和“该”也旨在包括复数形式,除非上下文清楚地另有指出。还应当理解,本文使用的术语“和/或”是指并且涵盖一个或多个相关列出项目的任何和所有可能的组合。还将理解,术语“包括”和/或“包含”在本说明书中使用时,指定所陈述的特征、整数、步骤、操作、元件和/或组件的存在,但不排除一个或多个其他特征、整数、步骤、操作、元件、组件和/或其组的存在或添加。附图的组件和特征不一定按比例绘制。
随着存储设备容量的增加,应用要处理的数据量也可能会增加。在存储设备和主存储器之间传送这种数据所需的时间可能会增加,潜在地减慢了应用的执行。此外,让主机处理器执行命令可能会给主机处理器带来负担,这可能会减少主机处理器执行其他命令的可用周期(cycle)。
本公开的实施例通过提供桥来解决这些问题。桥可以连接主机处理器、一个或多个存储设备以及一个或多个计算存储单元。桥可以确定由存储设备和计算存储单元提供的功能,并且可以向主机处理器暴露类似的功能。计算存储单元可以代表应用执行命令。主机处理器可以与桥通信,并且桥可以与存储设备和/或计算存储单元通信。
桥还可以包括缓冲器,以使存储设备和/或计算存储单元能够共享数据,而无需通过主存储器传送数据。
图1示出了根据本公开的实施例的包括加速器以减少数据维度并执行计算的机器。在图1中,机器105,也可以称为主机或系统,可以包括处理器110、存储器115和存储设备120。处理器110可以是任何种类的处理器。(为了便于说明,处理器110以及下面讨论的其他组件被示出在机器外部:本公开的实施例可以在机器内包括这些组件。)虽然图1示出了单个处理器110,但是机器105可以包括任何数量的处理器,每个处理器可以是单核或多核处理器,每个处理器可以实现精简指令集计算机(RISC)架构或复杂指令集计算机(CISC)架构(以及其他可能性),并且可以以任何期望的组合混合。
处理器110可以耦接到存储器115。存储器115可以是任何种类的存储器,诸如闪存、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、永久随机存取存储器、铁电随机存取存储器(FRAM)或非易失性随机存取存储器(NVRAM),诸如磁阻随机存取存储器(MRAM)等。根据需要,存储器115可以是易失性或非易失性存储器。存储器115也可以是不同存储器类型的任何期望组合,并且可以由存储器控制器125管理。存储器115可以用于存储可被称为“短期”的数据:即,不预期被长时间存储的数据。短期数据的示例可以包括临时文件、由应用在本地使用的数据(可能已经从其他存储位置复制)等。
处理器110和存储器115还可以支持操作系统,各种应用可以在该操作系统下运行。这些应用可以发出从任一存储器115读取数据或向其写入数据的请求(也可以称为命令)。当存储设备120用于支持经由某种文件系统读取或写入数据的应用时,可以使用设备驱动器130来访问存储设备120。虽然图1示出了一个存储设备120,但是机器105中可以有任何数量(一个或多个)的存储设备。存储设备120可以支持任何期望的一个或多个协议,包括例如非易失性存储器快速(Non-Volatile Memory Express,NVMe)协议。
虽然图1使用通用术语“存储设备”,但是本公开的实施例可以包括可以受益于计算存储单元的使用的任何存储设备格式,其示例可以包括硬盘驱动器和固态驱动器(SolidState Drive,SSD)。下面对“SSD”的任何引用都应当被理解为包括本公开的这些其他实施例。
机器105还可以包括多功能设备135(也可以称为加速器或设备)。如下所述,多功能设备135可以支持到存储设备120和计算存储单元140的连接,但是对于处理器110来说,好像存储设备120和计算存储单元140是单个设备一样。多功能设备135可以实现存储设备120和/或计算存储单元140的模块化,因为可以添加或替换存储设备120和/或计算存储单元140,而不必替换连接到多功能设备135的其他组件。
多功能设备135可以使用任何期望的硬件来实现。例如,多功能设备135或其组件可以使用现场可编程门阵列(FPGA)、专用集成电路(ASIC)、中央处理单元(CPU)、片上系统(SoC)、图形处理单元(GPU)、通用GPU(GPGPU)、数据处理单元(DPU)、神经处理单元(NPU)、网络接口卡(NIC)或张量处理单元(TPU)来实现,仅举几个可能性。多功能设备135也可以使用这些元件的组合来实现多功能设备135。
虽然图1示出了设备驱动器130,其在上面被描述为支持对存储设备120的访问,但是机器105也可以包括用于计算存储单元140和/或多功能设备135的设备驱动器(未示出)。也就是说,本公开的实施例可以支持设备驱动器130,该设备驱动器130支持存储设备120、计算存储单元140或多功能设备135中的任何一个或全部,并且本公开的实施例可以包括附加的设备驱动器以支持这些组件的任何或全部组合。
在本公开的一些实施例中,设备驱动器130(以及其他设备驱动器,诸如支持计算存储单元140的设备驱动器)可以提供应用编程接口(API)来访问存储设备120和/或计算存储单元140。通过支持现有的设备驱动器,现有的应用可以由处理器110执行,而无需改变应用(尽管本公开的实施例可以涉及对软件栈中的其他元素的修改)。例如,TPU可以有TPU设备驱动器,或者GPU可以有GPU设备驱动器:访问TPU或GPU功能的应用可以继续使用现有的TPU设备驱动器或GPU设备驱动器。此外,通过支持现有的设备驱动器,计算存储单元140可以是任何计算存储单元,即使由不同于存储设备120和/或多功能设备135的制造商制造。此外,在本公开的一些实施例中,设备驱动器130(或其他设备驱动器)可以是专有的。
本公开的实施例可以包括与存储设备120和/或计算设备140通信的任何期望机制。例如,存储设备120和/或计算设备140可以连接到总线,诸如外围组件互连快速(Peripheral Component Interconnect Express,PCIe)总线,或者存储设备120和/或计算设备140可以包括以太网接口或一些其他网络接口。到存储设备120和/或计算设备140的其他潜在接口可以包括远程直接存储器访问(RDMA)、传输控制协议/互联网协议(TCP/IP)、InfiniBand、串行附接小型计算机系统接口(SCSI)(SAS)、互联网SCSI(iSCSI)和串行AT附件(SATA)以及其他可能性。
机器105可以在存储器115中包括可由处理器110、存储设备120和/或计算存储单元140寻址的地址范围。在本公开的一些实施例中,处理器110可以分配该地址范围的子集,这些子集可以与要发送到存储设备120和/或计算存储单元140的命令相关联。此外,处理器110可以分配该地址范围的子集,该子集可以与用于存储设备120和计算存储单元140之间的对等(peer-to-peer)通信的命令相关联。也就是说,通过将命令与存储器115中的特定地址相关联,可以确定命令是打算用于存储设备120、计算存储单元140还是用于在存储设备120和计算存储单元140之间传送数据。注意,存储器115可能不包括足够的内存来包括这样的物理地址,但是存储器115不一定需要实际上足够的内存来包括这样的地址。例如,存储器115可以包括2千兆字节(GB)的内存,但是可以支持寻址高达4GB的内存。地址的子集,诸如2GB和3GB之间的地址,可以用于识别用于对等通信的命令,即使存储器115可能不能处理对那些特定地址的请求。多功能设备135可以基于分配给命令的地址来识别这样的命令,并且可以截取这样的命令进行处理。
图2示出了根据本公开的实施例的图1的机器105的细节。在图2中,通常,机器105包括一个或多个处理器110,处理器110可以包括存储器控制器125和时钟205,它们可以用于协调机器的组件的操作。处理器110还可以耦接到存储器115,作为示例,存储器115可以包括随机存取存储器(RAM)、只读存储器(ROM)或其他状态保存介质。处理器110还可以耦接到存储设备125和网络连接器210,网络连接器210可以是例如以太网连接器或无线连接器。处理器110还可以连接到总线215,用户接口220和可以使用I/O引擎225管理的输入/输出(I/O)接口端口以及其他组件可以附接到总线215。
图3示出了根据本公开的实施例的图1的多功能设备135的细节。在图3中,多功能设备135可以包括连接器305。连接器305可以提供到总线的连接,该总线可以用于与图1的处理器110通信。例如,连接器305可以提供到PCIe总线的连接,但是也可以使用其他总线。
端点(endpoint)310可以连接到连接器305(或者实现为连接器305的一部分)。端点310可以充当来自图1的处理器110的查询的端点(endpoint)。端点310可以暴露附接到多功能设备135的其他连接器(诸如连接器315和320)的设备的功能,如下面进一步讨论的。
异步缓冲器325可以连接到端点310和/或连接器305。异步缓冲器325可以充当要在图1的主机处理器110和连接到多功能设备135的其他设备之间交换的请求、消息和/或数据的登陆点。异步缓冲器325可以是异步的,因为异步缓冲器325可以以不同于处理器110的时钟周期工作。也就是说,图1的处理器110可以基于图1的处理器110的时钟周期发送请求、消息或数据,当请求、消息或数据从图1的处理器110接收时,其可以被写入异步缓冲器325;然后,可以在由多功能设备135的时钟周期操控的时间从异步缓冲器325读取请求、消息或数据。通过包括异步缓冲器325,多功能设备135可以避免需要在与处理器110相同的时钟周期下操作。
注意,在本公开的一些实施例中,多功能设备135可以使用与图1的处理器110相同的时钟周期来操作。在本公开的这些实施例中,异步缓冲器325可以被完全省略,或者用同步缓冲器来替换(以允许临时存储从图1的处理器110接收的或者将要发送到图1的处理器110的请求、消息和/或数据)。
复用器/解复用器330可以连接到异步缓冲器325。复用器/解复用器330可以访问来自异步缓冲器325的请求、消息和/或数据。复用器/解复用器330然后可以确定请求、消息或数据是针对哪个连接到多功能设备135的设备,并且可以相应地路由请求、消息或数据。为了实现该功能,复用器/解复用器330也可以连接到桥335和340,每个桥最终可以将请求、消息或数据传递到连接到多功能设备135的特定设备。在本公开的另一个实施例中,复用器/解复用器330可以与两个以上的桥通信。下文将进一步讨论复用器/解复用器330可以如何确定特定请求应当被传递到哪个桥。
桥335和340可以分别连接到异步缓冲器345和350。像异步缓冲器325一样,异步缓冲器345和350可以使多功能设备135能够以与连接到连接器315和320的各种设备不同的时钟周期工作。此外,像异步缓冲器325一样,在本公开的一些实施例中,多功能设备135可以使用与连接到连接器315和/或320的(多个)设备相同的时钟周期来操作。在本公开的这些实施例中,异步缓冲器345和/或350可以被完全省略,或者用同步缓冲器来替换(以允许临时存储从连接到连接器315和/或320的设备接收的或者将要发送到连接到连接器315和/或320的设备的请求、消息和/或数据)。
根端口355和360可以分别连接到异步缓冲器345和350(并且可以分别实现为连接器315和320的一部分)。根端口355和360可以分别与连接到连接器315和320的设备通信。例如,图1的存储设备120可以连接到连接器315,并且图1的计算存储单元140可以连接到连接器320。
根端口355和360可以向连接到连接器315和320的设备询问关于这些设备的信息。例如,连接到连接器315或320的设备可以暴露识别可能由设备做出的请求的各种功能。
在本公开的一些实施例中,这些功能可以包括一个或多个物理功能(PF)和/或一个或多个虚拟功能(VF)。每个PF可以表示一个资源,诸如由设备提供的功能。每个VF可以表示与PF相关联、但是被“虚拟化”的功能:也就是说,对于给定的PF,可以有一个以上的VF。PF和VF可以在设备被枚举时被发现:该枚举可以由根端口355和360来执行,而不是由图1的处理器110来执行。虽然PF、VF、端点和根端口是通常与PCIe设备相关联的概念,但是当使用连接到其他总线的设备时,本公开的实施例可以包括类似的概念。
一旦PF和VF被枚举,该信息可以被提供给桥335和340,并且最终被提供回复用器/解复用器330和/或端点310。以这种方式,端点310能够暴露连接到连接器315和320的各种设备的功能(PF、VF、或两者)。如果连接到连接器315和320的设备所暴露的功能之间存在任何冲突(例如,相同的功能标识符),复用器/解复用器330和/或端点310可以改变枚举以避免这种冲突。例如,设备可以从零开始枚举功能:如果连接到连接器315和320的设备都被分配了从零开始的功能编号,则复用器/解复用器330可能无法确定与功能编号零相关联的特定请求是针对哪个设备的。因此,例如,如果连接到连接器315的设备具有三个PF,而连接到连接器320的设备具有两个PF,则复用器/解复用器330可以使用编号0、1和2将PF分配给连接到连接器315的设备,并且可以使用编号3和4将PF分配给连接到连接器320的设备。只要没有两个PF被分配相同的编号,复用器/解复用器330就可以以任何期望的方式映射功能。此外,由连接到连接器315和/或320的设备暴露的VF可以被暴露为VF或PF(即,设备的VF可以映射到由多功能设备135暴露的PF)。
有了这种理解,现在可以理解复用器/解复用器330的操作。在经由连接器305从图1的处理器110接收到请求、消息或数据时,复用器/解复用器330可以确定数据相关的功能的标识符。例如,如果请求是针对图1的存储设备120的写入请求,则复用器/解复用器330可以识别写入请求中的写入功能,并且可以在内部将该写入功能映射到图1的存储设备120。复用器/解复用器330然后可以将写入请求路由到桥335或桥340,这取决于哪个桥可以通向图1的存储设备120。关于多功能设备135可以如何暴露附接到连接器315和320的设备的暴露功能的更多信息可以在2020年4月10日提交的美国专利申请序列号16/846,271中找到,该申请要求2020年1月21日提交的美国临时专利申请序列号62/964,114和2019年6月24日提交的美国临时专利申请序列号62/865,962的权益,它们通过引用整体并入本文以用于所有目的。
虽然图3示出了多功能设备135包括三个连接器305、315和320,它们可以连接到图1的处理器110、图1的存储设备120和图1的计算存储单元140,但是本公开的实施例可以包括任何数量的连接器。例如,多功能设备135可以包括四个或更多个连接器:附加的连接器可以连接到附加的存储设备和/或计算存储单元。此外,可以有任何数量(一个或多个)的存储设备和/或任何数量(一个或多个)的计算存储单元经由诸如连接器315和320的连接器连接到多功能设备135。不要求连接到多功能设备135的存储设备的数量与连接到多功能设备135的计算存储单元的数量相同。如果多功能设备135包括比连接器315和320更多的连接器,则多功能设备135还可以包括像桥335和340那样的附加桥、像异步缓冲器345和350那样的附加异步缓冲器以及像根端口355和360那样的附加根端口,以支持附加设备。
图3还包括复用器/解复用器365,它可以被插入在桥340和异步缓冲器350之间。复用器/解复用器365可以用于连接到连接器315和320的设备之间的对等通信。也就是说,使用复用器/解复用器365,附接到连接器320的设备可以与附接到连接器315的设备通信,而不需要这种通信通过图1的处理器110(经由连接器305)。为了实现这一结果,复用器/解复用器365可以例示在复用器/解复用器365处接收的请求、消息或数据中的信息。复用器/解复用器365然后可以识别从连接到连接器320的设备接收的对这些请求、消息或数据的任何响应,并且可以将这些响应返回给发出原始请求、消息或数据的组件。例如,复用器/解复用器365可以确定请求、消息或数据的标识符以及接收请求、消息或数据的源。然后,如果复用器/解复用器365从连接到与该标识符相关联的连接器320的设备接收到响应,则复用器/解复用器365可以将该响应发送到适当的组件。
如上所述,在本公开的一些实施例中,连接到连接器315和320的设备可以是PCIe设备。在本公开的这些实施例中,复用器/解复用器365可以预期处理事务层分组(transaction layer packet,TLP)。
在支持多于两个设备连接到多功能设备135的本公开的实施例中,可以有与附接到多功能设备135的设备相关联的复用器/解复用器,如复用器/解复用器365。在本公开的一些实施例中,这种复用器/解复用器可以被插入在像桥340那样的桥和像异步缓冲器350那样的异步缓冲器之间以用于所有设备;在本公开的其他实施例中,这种复用器/解复用器可以被插入在桥和异步缓冲器之间以用于像图1的计算存储单元140那样的计算存储单元(但不用于像图1的存储设备120那样的存储设备)。注意,复用器/解复用器365和类似的复用器/解复用器可以连接到一些或所有桥,如桥335和340,以支持各种设备对之间的数据交换。
注意,复用器/解复用器365可以从附接到连接器315的设备以及从附接到连接器305的图1的处理器110接收请求、消息和/或数据。在本公开的一些实施例中,复用器/解复用器365从图1的处理器110以及从附接到连接器315的设备接收的请求可以包括标识该请求的标签。例如,读取请求可以包括标识该请求的标签,使得可以返回与相同标签相关联的数据。当仅从一个源接收到这种带标签的请求时,可以预期标签不会冲突:例如,复用器/解复用器365可以合理地假设图1的处理器110不会将相同的标签分配给两个不同的读取请求。但是当从多个源接收请求时,除非多个源协调它们对标签的使用,否则可能发生从一个源接收的请求可能具有与从另一个源接收的请求相同的标签。在从图1的计算存储单元140接收到数据时,复用器/解复用器365可能不能区分哪个设备发起了读取请求:这种情况可以是冲突。
有几种方法可以避免这种冲突。一种解决方案可以是一次只处理来自一个源的请求,而另一个源可以等待直到没有来自第一个源的请求是活动的。但是这种解决方案可能无法提供最佳性能。另一种解决方案可以是在任何时候只允许具有唯一标签的请求是活动的。因此,只要每个请求具有不同于任何其他活动请求的标签,该请求就可以被处理;如果请求重复了与另一个活动请求相关联的标签,则可以缓冲该新的请求,直到具有该标签的活动请求完成。这种解决方案提供了更好的性能。另一种解决方案可以是复用器/解复用器365提供可以被各种源使用的标签:只要每个源可以被提供一组不与分配给另一个源的标签组交叉的标签,就可以避免标签冲突。另一种解决方案可以是复用器/解复用器365引入间接级别,将来自每个源的标签映射到(在复用器/解复用器365内部使用的)新标签。当接收到请求时,可以映射标签,并且可以将从原始标签到新标签的映射存储在复用器/解复用器365中的表中。当请求完成时,复用器/解复用器365可以从与响应一起接收的新标签确定原始标签。
为了支持这样的操作,桥335还能够将请求、消息或数据(无论是如经由连接器305接收的那样从图1的处理器110接收的,还是从连接到连接器315的设备接收的)引导到复用器/解复用器365。例如,如果附接到连接器315和320的设备可以支持直接存储器寻址(direct memory addressing,DMA),则可能发生这种情况。例如,假设图1的存储设备120连接到连接器315,并且图1的计算存储单元140连接到连接器320。如果图1的计算存储单元140包括存储器(诸如DRAM),并且图1的存储设备120可以发出可以将数据写入该存储器的DMA请求,则桥335可以将DMA请求引导到复用器/解复用器365(而不是复用器/解复用器330)。以这种方式,可以绕过图1的处理器110,这可以导致请求被更迅速地处理。
虽然让图1的存储设备120或图1的计算存储单元140中的任意一个直接从另一个读取或写入数据是有用的,但这并不总是可能或实际的。例如,为了支持DMA,一个设备可能需要存储器,而另一个设备可能需要从该存储器(在第一个设备中)读取数据或向该存储器写入数据的电路。如果缺少任意一个元件(例如,如果图1的计算存储单元140既不包括存储器也不包括读取或写入图1的存储设备120中的存储器的电路),则DMA可能是不可能的。
此外,如果使用DMA,则设备可能需要将数据操纵为被存储,而不进行处理。如果数据在其被使用前可能需要处理,则DMA可能不是一个选项。例如,考虑图1的计算存储单元140操作来处理视频数据。如果图1的计算存储单元140预期数据为特定格式——例如,MPEG格式——但是数据为另一种格式——例如,WVM格式——则图1的计算存储单元140可能不能处理该数据,除非该数据首先被代码转换。或者如果表中的数据以列格式存储,但是图1的计算存储单元140预期该表以行格式存储,则在图1的计算存储单元140可以处理该数据之前,该表可能需要被转置。
如果图1的存储设备120包括可以处理数据以使得数据处于可以由图1的计算存储单元140使用的格式的处理器,则图1的存储设备120可以在使用DMA将数据从图1的存储设备120传送到图1的计算存储单元140之前处理数据。但是也可以使用另一种方法。
缓冲器370可以用于存储在连接到连接器315和320的设备之间传输的数据。一旦数据被存储在缓冲器370中,数据处理器375就可以在传送到目的地设备之前适当地处理数据。一旦缓冲器370中的数据已经被数据处理器375处理,处理后的数据可以被传送到目的地设备。在本公开的一些实施例中,DMA可以被设备用来向缓冲器370写入数据或者从缓冲器370读取数据。缓冲器370可以使用任何期望的存储形式:例如DRAM、SRAM等,并且可以是片上或片外的。
数据处理器375可以对缓冲器370中的数据执行任何期望的处理。数据处理器375可以包括电路和/或软件来执行一些预期的处理。但是数据处理器375也可以足够通用以支持由图1的处理器110指示的处理。也就是说,图1的处理器110可以将程序下载到数据处理器375,数据处理器375然后可以对缓冲器370中的数据执行该程序,以将数据转换成目的地设备所预期的格式。
如上所述,在本公开的一些实施例中,可以执行数据处理以将数据置于适合于被指定接收数据的设备的格式中。但是在本公开的一些实施例中,即使被指定接收数据的设备能够处理数据,也可以执行数据处理。例如,数据可能已经是目的地设备可接受的格式,但可能还有更优的格式。在本公开的这些实施例中,即使数据已经是目的地设备可接受的格式,数据处理器375也可以处理数据。
在本公开的一些实施例中,图1的处理器110可以充当调度器。在本公开的这些实施例中,图1的处理器110可以向源设备发送请求。在从源设备接收到响应时,图1的处理器110然后可以信令通知(signal)数据处理器375处理缓冲器370中的数据。一旦数据处理器375完成了对缓冲器370中的数据的处理,数据处理器375可以向图1的处理器110信令通知处理完成,之后图1的处理器110可以请求目的地设备从缓冲器370读取数据。
在本公开的其他实施例中,数据处理器375可以充当用于数据传送的调度器。数据处理器375可以向源设备发送请求,要求将数据传送到缓冲器370。注意,桥335和340可以访问缓冲器370,以实行向缓冲器370写入数据(以及从缓冲器370读取数据)。一旦传送完成,源设备可以信令通知数据处理器375传送完成。数据处理器375然后可以适当地转换数据。一旦数据处理器375已经完成了对缓冲器370中的数据的转换,数据处理器375就可以向目的地设备信令通知数据准备好用于检索,然后目的地设备可以从缓冲器370读取数据。数据处理器375可以从图1的处理器110接收这种关于调度的指令。这些指令可以使用任何期望的协议来编码:也可以设计新的协议来支持这样的调度指令。
当图1的计算存储单元140处理来自图1的处理器110(或运行在图1的处理器110上的应用)的请求时,该处理可以使用来自缓冲器370的数据(可能由数据处理器375处理的)。但是该处理也可以涉及来自处理器110的数据。例如,如果图1的计算存储单元140正在执行图像识别,则来自图1的存储设备120的数据可以包括关于如何识别图像的各种特征的信息。但是待处理的图像本身可以由图1的处理器110提供。或者,如果图1的计算存储单元140正在处理对数据库的查询,则数据库本身可以来自图1的存储设备120,但是查询可以由图1的处理器110提供。因此,由图1的计算存储单元140处理的信息可以经由多功能设备135来自不同的源。
如上所述,多功能设备135可以包括两个以上的连接器315和320,因此可以包括两个以上的附接设备。在本公开的一些实施例中,一些或所有附接设备可以访问缓冲器370,并且可以从缓冲器370读取数据或向缓冲器370写入数据。在本公开的其他实施例中,可以有任何数量(一个或多个)的缓冲器370(也可以有一个以上的数据处理器375)。例如,可以有与连接到多功能设备135的图1的每个计算存储单元140相关联的缓冲器370。以这种方式,数据可以被写入与预期处理数据的图1的计算存储单元140相关联的缓冲器。注意,缓冲器370还可以用于在附接到多功能设备135的图1的两个(或更多个)存储设备120之间,或者在图1的两个(或更多个)计算存储单元140之间交换数据:本公开的实施例不限于使用缓冲器370在图1的存储设备120和图1的计算存储单元140之间交换数据。也可以有一个或多个数据处理器375:数据处理器375的数量可以与缓冲器370的数量一对一,或者数据处理器375的数量可以不同于缓冲器370的数量。
在本公开的一些实施例中,对等通信可以使用PCIe协议进行通信。也就是说,桥335和/或340可以使用PCIe协议来向和/或从连接到连接器315和320的设备发送请求、消息和/或数据。在本公开的其他实施例中,对等通信可以使用其他协议。在本公开的一些实施例中,连接到连接器315和320的设备可以使用不同的协议进行通信(尽管在本公开的这些实施例中,可能需要协议之间的请求、消息或数据格式和/或协议的一些映射)。
如上所述,除了其他可能性之外,图1的计算存储单元140可以是NIC。当NIC连接到连接器320时,图1的存储设备120(当连接到连接器315时)能够经由对等通信(例如,使用缓冲器370)与NIC通信。多功能设备135因此可以支持图1的存储设备120和NIC之间的通信,而这种通信不必通过图1的处理器110。注意,使用NIC作为图1的计算存储单元140,并将NIC连接到连接器320,并不妨碍图1的处理器110与NIC通信:图1的处理器110仍然可以经由多功能设备135与NIC通信。此外,如果多功能设备135包括附加的连接器,图1的另一个计算存储单元140也可以连接到多功能设备135,也使得图1的计算存储单元140能够与NIC通信,而这种通信不必通过图1的处理器110。以这种方式,NIC可被视为计算存储单元,并与图1的一个或多个存储设备和/或一个或多个其他计算存储单元140组合。
虽然图3示出了连接器315和320,并且暗示连接器315和320可以允许附接设备的替换,但是本公开的实施例可以包括一个或多个连接器315和320作为永久连接器。此外,本公开的一些实施例可以包括永久连接器和可更换连接器两者。例如,图1的存储设备120可以永久地固定到连接器315(可能经由焊接),而图1的计算存储单元140可以插入到连接器320中,这可以支持图1的计算存储单元140的拆卸和替换。在本公开的一些实施例中,更换连接到连接器315或320的设备可以作为热更换(hot-swap)来执行(即,在不关闭图1的机器105的情况下执行替换);在本公开的其他实施例中,更换连接到连接器315或320的设备可以涉及在替换设备之前关闭图1的机器105。
图4示出了根据本公开的实施例的图1的存储设备120的细节。在图4中,存储设备120的实现被示为用于固态驱动器。在图4中,存储设备120可以包括主机接口层(hostinterface layer,HIL)405、控制器410和各种闪存芯片415-1至415-8(也称为“闪存存储器”),它们可以被组织成各种通道420-1至420-4。主机接口层405可以管理存储设备120和其他组件(诸如图1的处理器110)之间的通信。主机接口层405还可以管理与远离存储设备120的设备的通信:即,不被认为是图1的多功能设备135的一部分,但是例如通过一个或多个网络连接与存储设备120通信的设备。这些通信可以包括从存储设备120读取数据的读取请求、向存储设备120写入数据的写入请求以及从存储设备120删除数据的删除请求。
主机接口层405可以管理仅跨单个端口的接口,或者它可以管理跨多个端口的接口。可替代地,存储设备120可以包括多个端口,每个端口可以具有单独的主机接口层405来管理跨该端口的接口。本发明构思的实施例也可以混合各种可能性(例如,具有三个端口的SSD可以具有一个主机接口层来管理一个端口以及第二主机接口层来管理另外两个端口)。
控制器410可以使用闪存控制器425管理闪存芯片415-1至415-8上的读取和写入操作,以及垃圾收集和其他操作。SSD控制器410还可以包括闪存转换层430、存储器435和/或DMA控制器440。闪存转换层430可以管理(如由图1的主机105使用的)逻辑块地址(logical block address,LBA)到数据实际存储在存储设备120上的物理块地址(physicalblock address,PBA)的映射。通过使用闪存转换层430,当数据在存储设备120内从一个块移动到另一个块时,不需要通知图1的主机105。
存储器435可以是由存储控制器410使用的本地存储器,诸如DRAM。存储器435可以是易失性或非易失性存储器。存储器435也可以经由DMA从除存储设备120之外的设备访问:例如,图1的计算存储单元140。可以省略存储器435,如用虚线表示的那样。
DMA440可以是使存储设备120能够在存储设备120外部的存储器中执行DMA命令的电路。例如,DMA 440可以使存储设备120能够从图1的存储器115或图1的计算存储单元140中的存储器读取数据或向其写入数据。可以省略DMA 440,如用虚线表示的那样。
虽然图4示出存储设备120为包括组织成四个通道420-1至420-4的八个闪存芯片415-1至415-8,但是本发明构思的实施例可以支持组织成任何数量的通道的任何数量的闪存芯片。类似地,虽然图4示出了SSD的结构,但是可以使用与图4所示不同的结构来实现其他存储设备(例如,硬盘驱动器)以管理读取和写入数据,但是具有类似的潜在益处。
图5A-5D示出了根据本公开的实施例的图1的计算存储单元140的示例实施方式。在图5A中,示出了存储设备505和计算设备510-1。存储设备505可以包括控制器515和存储装置520-1,并且可以跨诸如主机接口525的主机协议接口到达。主机接口525可以用于管理存储设备505和控制存储设备505的I/O两者。主机接口525的示例可以包括用于提交和完成的队列对,但是使用存储设备505支持的任何本机主机协议,其他主机接口525也是可能的。
计算设备510-1可以与存储设备505配对。计算设备510-1可以包括任何数量(一个或多个)的处理器530,其可以提供一个或多个服务535-1和535-2。为了更清楚,每个处理器530可以提供任何数量(一个或多个)的服务535-1和535-2(尽管本公开的实施例可以包括恰好包括两个服务535-1和535-2的计算设备510-1)。每个处理器530可以是单核处理器或多核处理器。计算设备510-1可以跨诸如主机接口540的主机协议接口到达,主机接口540可以用于管理计算设备510-1和/或控制计算设备510-1的I/O两者。如同主机接口525一样,主机接口540可以包括用于提交和完成的队列对,但是使用计算设备510-1支持的任何本机主机协议,其他主机接口540也是可能的。这种主机协议的示例可以包括以太网、RDMA、TCP/IP、InfiniBand、iSCSI、PCIe、SAS和SATA,以及其他可能性。此外,主机接口540可以支持与图1的系统105的其他组件的通信——例如NIC,如果该NIC没有连接到图1的多功能设备135——或者作为NIC操作并与本地和/或远程网络/云组件通信。
(多个)处理器530可以被认为是近存储处理:即,比图1的处理器110更靠近存储设备505的处理。因为(多个)处理器530更靠近存储设备505,所以与图1的处理器110执行这样的命令相比,(多个)处理器530能够更快地对存储在存储设备505中的数据执行命令。(多个)处理器530可以具有相关联的存储器545,其可以用于对存储在存储设备505中的数据的命令的本地执行。存储器545也可以类似于图4的存储器435使用,并且可以通过DMA从除计算存储单元410-1之外的设备访问。存储器545可以包括类似于图1的存储器115的本地存储器、片上存储器(其可能比诸如图1的存储器115的存储器更快,但是生产起来可能更昂贵)或两者。
计算存储单元410-1也可以包括DMA 550。DMA 550可以类似于图4的DMA 440使用,并且可以用于访问除计算存储单元410-1之外的设备中的存储器。
取决于实施方式,存储器545和/或DMA 550可以被省略,如虚线所示。
虽然图5A将存储设备505和计算设备510-1示为可跨结构555(Fabric)单独到达,但是本公开的实施例也可以包括串行连接的存储设备505和计算设备510-1,或者共享图1的多功能设备135(如图1所示)。也就是说,指向存储设备505和计算设备510-1的命令可能都在到结构555的同一物理连接处被接收,并且可以通过一个设备(或图1的多功能设备135)到达另一个设备。例如,如果计算设备510-1位于存储设备505和结构555之间,则计算设备510-1可以接收指向计算设备510-1和存储设备505两者的命令:计算设备510-1可以处理指向计算设备510-1的命令,并且可以将指向存储设备505的命令传递给存储设备505。类似地,如果存储设备505位于计算设备510-1和结构555之间,则存储设备505可以接收指向存储设备505和计算设备510-1两者的命令:存储设备505可以处理指向存储设备505的命令,并且可以将指向计算设备510-1的命令传递给计算设备510-1。
服务535-1和535-2可以提供可以对存储在存储设备505中的数据执行的多个不同功能。例如,服务535-1和535-2可以提供预定义的功能,诸如数据的加密、解密、压缩和/或解压缩、擦除编码和/或应用正则表达式。或者,服务535-1和535-2可以提供更通用的功能,诸如数据搜索和/或SQL功能。服务535-1和535-2也可以支持运行特定于应用的代码。也就是说,使用服务535-1和535-2的应用可以提供要使用存储设备505上的数据来执行的定制代码。服务535-1和535-2也可以是这些功能的任何组合。表1列出了可以由(多个)处理器530提供的服务的一些示例。
表1:服务类型
(多个)处理器530(以及实际上计算设备510-1)可以以任何期望的方式实现。示例实施方式可以包括本地处理器,诸如CPU或一些其他处理器(诸如FPGA、ASIC或SoC)、GPU、GPGPU、DPU、NPU、NIC或TPU,以及其他可能性。(多个)处理器530也可以使用FPGA或ASIC以及其他可能性来实现。如果计算设备510-1包括不止一个处理器530,则每个处理器可以如上所述实现。例如,计算设备510-1可以具有CPU、TPU和FPGA中的每一个,或者计算设备510-1可以具有两个FPGA,或者计算设备510-1可以具有两个CPU和一个ASIC,等等。
取决于期望的解释,计算设备510-1或(多个)处理器530可以被认为是计算存储单元。
本公开的一些实施例可以包括与存储设备505和/或计算设备510-1通信的其他机制。例如,存储设备505和/或计算设备510-1可以包括网络接口560,网络接口560可以支持使用以太网、RDMA、TCP/IP、InfiniBand、SAS、iSCSI或SATA以及其他可能性与其他设备的通信。网络接口560可以提供用于与存储设备505和/或计算设备510-1通信的另一接口。虽然图5A将网络接口560示为向计算设备510-1提供通信,但是本公开的实施例也可以包括到存储设备505的网络接口。此外,在本公开的一些实施例中,可以使用这样的其他接口来代替主机接口525和/或540(在这种情况下,可以省略主机接口525和/或540)。在下面的图5B-5D中示出的其他变型也可以包括这样的接口。
尽管图5A将存储设备505和计算设备510-1示为单独的设备,但是在图5B中它们可以被组合。因此,计算设备510-2可以包括控制器515、存储装置520-1、提供服务535-1和535-2的(多个)处理器530、存储器545和/或DMA 550。如同图5A的存储设备505和计算设备510-1一样,可以经由主机接口540和/或网络接口560接收管理和I/O命令。即使计算设备510-2被示为包括存储装置和(多个)处理器530两者,图5B仍可被认为包括与计算存储单元相关联的存储设备。
在图5C所示的又一变型中,示出了计算设备510-5。计算设备510-3可以包括控制器515和存储装置520-1,以及提供服务535-1和535-2的(多个)处理器530、存储器545和/或DMA 550。但是即使计算设备510-3可以被认为是包括控制器515、存储装置520-1、(多个)处理器530(也可以被认为是与计算存储单元相关联的存储设备)、存储器545和/或DMA 550的单个组件,与图5B所示的实施方式不同,控制器515和(多个)处理器530可以各自包括它们自己的主机接口525和540和/或网络接口560(同样,其可以用于管理和/或I/O)。通过包括主机接口525,控制器515可以提供对存储装置520-1的透明访问(而不是要求所有通信通过(多个)处理器530进行)。
此外,(多个)处理器530可以具有对存储装置520-1的代理存储访问565。因此,代替通过控制器515路由访问请求,(多个)处理器530能够直接从存储装置520-1访问数据。
在图5C中,控制器515和代理存储访问565都用虚线示出,以表示它们是可选的元件,并且可以取决于实施方式而被省略。
最后,图5D示出了另一种实施方式。在图5D中,示出了计算设备510-4,其可以包括控制器515、存储器545、DMA 550和类似于图5C的代理存储访问565。此外,计算设备510-4可以包括一个或多个存储装置520-1至520-4的阵列。虽然图5D示出了四个存储元件,但是本公开的实施例可以包括任何数量(一个或多个)的存储元件。此外,各个存储元件可以是其他存储设备,诸如图5A-5D中所示的那些。
因为计算设备510-4可以包括不止一个存储元件520-1至520-4,所以计算设备510-4可以包括阵列控制器570。阵列控制器570可以管理如何将数据存储在存储元件520-1至520-4上以及如何从存储元件520-1至520-4检索数据。例如,如果存储元件520-1至520-4被实现为独立磁盘冗余阵列(RAID)的某种级别,则阵列控制器570可以是RAID控制器。如果存储元件520-1至520-4使用某种形式的擦除编码来实现,则阵列控制器570可以是擦除编码控制器。
图6示出了根据本公开的实施例的使用图1的多功能设备135向图1的存储设备120和/或图1的计算存储单元140传递请求的示例过程的流程图。在图6中,在块605处,图1的多功能设备135可以在图3的端点310处接收请求。在块610处,图3的复用器/解复用器330可以从请求中识别设备。在块615处,图3的复用器/解复用器330可以将图3的根端口355或图3的根端口360识别为连接到从请求中识别的设备。在块620处,图3的复用器/解复用器330、图3的桥335或图3的桥340、以及图3的根端口355或图3的根端口360可以将请求发送到从请求中识别的设备。
图7示出了根据本公开的实施例的使用图1的多功能设备135来识别图1的存储设备120和/或图1的计算存储单元140的暴露功能的示例过程的流程图。在图7中,在块705处,图3的根端口355可以识别由连接到图3的连接器315的设备暴露的功能。在块710处,图3的根端口360可以识别由连接到图3的连接器320的设备暴露的功能。在块715处,图3的端点310可以如来自图1的多功能设备135一样暴露功能。
图8示出了根据本公开的实施例的使用图3的异步缓冲器的示例过程的流程图。在图8中,在块605处,图1的多功能设备135可以在图3的端点310处接收请求。块605使用与图6的块605相同的标识符,因为所描述的操作是相同的。在块805处,图1的多功能设备135可以将请求存储在图3的异步缓冲器325中。
在块810处,在稍后的某个时间,图3的复用器/解复用器330可以从图3的异步缓冲器325读取请求。在块610处,图3的复用器/解复用器330可以从请求中识别设备。在块615处,图3的复用器/解复用器330可以将图3的根端口355或图3的根端口360识别为连接到从请求中识别的设备。块610和615使用与图6的块610和615相同的标识符,因为所描述的操作是相同的。在块815处,图3的桥335或图3的桥340可以将请求存储在图3的异步缓冲器345或图3的异步缓冲器350中。
在块820处,在稍后的某个时间,图3的根端口355可以从图3的异步缓冲器345读取请求,或者图3的根端口360可以从图3的异步缓冲器350读取请求。在块620处,图3的根端口355或图3的根端口360可以将请求发送到从请求中识别的设备。块620使用与图6的块620相同的标识符,因为所描述的操作是相同的。
图9示出了根据本公开的实施例的用另一计算存储单元替换图1的计算存储单元140的示例过程的流程图。在块905处,图1的计算存储单元140可以从图3的连接器320断开。在块910处,新的计算存储单元可以连接到图3的连接器320。
图10示出了根据本公开的实施例的使用图1的多功能设备135在附接到图1的多功能设备135的设备之间传递请求的示例过程的流程图。在块1005处,图1的多功能设备135可以从连接到图1的多功能设备135的端口的设备接收请求。注意,所讨论的设备可以使用图3的根端口355或图3的根端口360或者连接到其他存储设备或计算存储单元的其他端口来连接,而不是连接到图3的端点310的图1的处理器110。在块1010处,图3的桥335或图3的桥340可以从请求中识别设备。在块1015处,图3的桥335或图3的桥340可以将图3的根端口355或图3的根端口360识别为连接到从请求中识别的设备。在块1020处,图3的桥335或图3的桥340可以将请求发送给从该请求中识别的设备。最后,在块1025处,发送原始请求的设备可以向在请求中识别的设备提供数据。
图11A-11B示出了根据本公开的实施例的附接到图1的多功能设备135的设备共享数据的示例过程的流程图。在图11A中,在块1105处,一个设备可以使用图4的DMA 440或图5A-5D的DMA 550将数据写入图4的存储器435或图5A-5D的存储器545。可替代地,在块1110处,一个设备可以使用图4的DMA 440或图5A-5D的DMA 550从图4的存储器435或图5A-5D的存储器545读取数据。
可替代地,在块1115处(图11B),一个设备可以将数据写入图3的缓冲器370。在块1120处,图3的数据处理器375可以处理图3的缓冲器370中的数据,或许以可以被其他设备处理的格式放置数据。注意,块1120是可选的,如虚线1125所示。最后,在块1130处,第二设备可以从图3的缓冲器370读取数据。
在图6-11B中,示出了本公开的一些实施例。但是本领域技术人员将认识到,通过改变块的顺序、省略块或包括附图中未示出的链接,本公开的其他实施例也是可能的。无论是否明确描述,流程图的所有这些变型都被认为是本公开的实施例。
本公开的实施例包括多功能设备。一个或多个存储设备和一个或多个计算存储单元可以连接到多功能设备。多功能设备将连接的存储设备和计算存储单元呈现给主机处理器,就好像它们是一个设备一样,并且暴露由附接设备提供的所有功能,提供了优于将多个单独的设备附接到主机处理器的技术优势。
多功能设备还可以包括缓冲器,允许数据在附接设备之间交换,而不通过主机处理器。多功能设备还可以包括数据处理器,该数据处理器可以用于转换在设备之间传递的数据。缓冲器的使用通过从在设备之间传递数据的过程中去除主机处理器和主存储器提供了技术优势,从而潜在地加快了数据传送。
在存储领域,数据处理是一项新兴技术。固态驱动器(SSD)已经成为现代IT基础设施中持久数据存储的重要组件。各种应用(诸如物联网(IOT)、社交网络、自动驾驶汽车等)正在生成数据。以高效的方式处理大量数据是很重要的。这种数据处理可能涉及诸如CPU周期、存储器带宽、网络带宽和功率等资源。
本公开的实施例可以包括图1的多功能设备135,包括用于提供大量计算资源的计算存储SSD架构。本公开的实施例可以提供将大量数据移动到中央处理单元(CPU)进行处理,并且可以最小化对昂贵的系统资源(诸如功率、CPU周期、网络带宽和主机存储器)的需求。
计算存储是一项新兴技术,其可在SSD内部或附近实现高效的数据处理。本公开的实施例能够更有效地解决计算需求,而不需要不同的产品库存单位(stock keeping unit,SKU’s)。图1的多功能设备135可以实现一种架构,该架构使得许多不同的计算机资源能够匹配应用的需求。本公开的实施例可以包括用于计算存储的灵活SSD架构。本公开的实施例可以使得用于计算资源的可插拔模块能够被插入到基本SSD控制器板中。本公开的实施例可以使得许多不同计算资源的使用能够除SSD控制器之外作为图1的多功能设备135呈现给主机,所述计算资源诸如现场可编程门阵列(FPGA)、图形处理单元(GPU)、张量处理单元(TPU)、神经处理单元(NPU)、网络接口卡(NIC)、中央处理单元(CPU)、片上系统(SOC)和专用集成电路(ASIC)。一个外围组件互连快速(PCIe)物理功能(PF)可以用于暴露用于存储输入/输出(I/O)操作的NVMe控制器。另一个PCIe PF可以用于向主机暴露所期望的计算资源。SSD控制器和计算资源之间的对等数据传送可以在图1的多功能设备135内部完成。这种架构可以实现针对不同使用场景的优化计算存储解决方案。
本公开的一些实施例可以包括用于计算存储应用的多功能灵活SSD。本公开的一些实施例可以包括用于存储I/O操作的一个或多个PF(NVMe)。本公开的一些实施例可以包括一个或多个PF计算资源。本公开的一些实施例可以使用连接器来附接计算资源,因此如果需要,可以替换计算资源。本公开的一些实施例可以包括对主机透明的SSD控制器和计算资源之间的对等数据传送。本公开的一些实施例可以包括由到计算资源的PCIe桥中的主机软件编程的PCIe基址寄存器(Base Address Register,BAR)窗口或地址范围,其可以用作对等(Peer-to-Peer,P2P)地址范围。本公开的一些实施例可以使主机和SSD控制器能够并发地访问计算资源。本公开的一些实施例可以包括用于P2P直接存储器访问(DMA)的主机和SSD控制器读取请求标签冲突管理。本公开的一些实施例可以包括并发的存储I/O和计算事务。本公开的一些实施例可以允许客户使用他们自己的对计算资源的专有接口。本公开的一些实施例可以包括(多个)并行PCIe到PCIe桥,其可以用于连接到SSD控制器和计算资源。本公开的一些实施例可以包括用于P2P数据传送的计算资源PF BAR范围。本公开的一些实施例可以包括许多不同种类的计算资源:FPGA、ASIC、SoC、CPU、GPU、TPU、NPU、NIC等。
本公开的实施例可以提供许多优点,诸如计算存储SSD的灵活性;针对特定使用场景的优化解决方案;允许客户使用他们自己的对计算的专有接口;和/或可以允许与现有客户系统软件栈的简单和快速集成。
示例性实施例包括灵活计算存储设备的系统和方法。新兴的计算存储技术渴望消除或减少大量数据传送到主机存储器进行处理。计算存储的基本思想是在SSD本身中或附近处理数据,并只将结果传送到主机。计算资源的使用可以预期降低功耗、等待时间、CPU利用率、主机总线带宽、主机存储器带宽和其他系统资源。
在本公开的一些实施例中,为了在存储设备内部或附近实现数据处理,一个或多个计算资源可以集成在存储设备中或位于存储设备附近。计算资源的一些示例可以包括FPGA、ASIC、SoC、GPU、TPU、NPU、NIC等。不同的应用可以使用不同的计算资源。在本公开的一些实施例中,在单个计算存储设备中实现两个或更多个这样的计算资源可能是成本有效的。在本公开的一些实施例中,最小化计算存储设备或SKU’s的种类可能更有效。因此,本公开的实施例可以使用连接器使各种计算元件能够集成在SSD中或位于SSD附近。图1的这种多功能设备135可以允许根据需要来插入各种计算资源。
图1的多功能设备135可以包括:PCIe端点,其可以通告两个或更多个物理功能(PF);PCIe根端口,其可以配置附接到其上的端点,即NVMe控制器端点和计算资源端点;异步先进先出存储器,其可以实现PCIe时钟和本地FPGA时钟之间的时钟边界交叉;复用器/解复用器(PF),其可以使用PF标识符值来操作,以转发或合并来自PCIe桥存储和PCIe桥计算的PCIe分组;PCIe-PCIe桥-计算模块,其可以用于在主机和计算资源之间执行PCIe事务的直通(pass-through):PCIe-PCIe桥-计算模块还可以实现与存储设备和计算资源之间的P2P数据传送相关的特定功能;PCIe-PCIe桥接存储模块,其可以用于在主机和NVMe SSD控制器之间执行PCIe事务的直通;PCIe-PCIe桥存储模块还可以实现与存储设备和计算资源之间的P2P数据传送相关的特定功能;以及复用器/解复用器(TLP),其可以复用和解复用主机计算资源和SSD控制器计算资源流量转换层分组(transition layer packet,TLP)。
本公开的实施例可以允许使用图1的PCIe多功能设备135将计算资源通告给主机。一个PCIe物理功能(PF0)可以用于通告基于NVMe协议的存储功能。单独的物理功能(PF1)可以用于通告计算资源的计算功能。在本公开的其他实施例中,可以有两个或更多个用于存储的PF(NVMe控制器),以及两个或更多个用于集成多个计算元件的PF。
在本公开的一些实施例中,NVMe控制器以及计算资源可以使用如图3所示的PCIe到PCIe桥连接到主机。FPGA可以用于实现两个或更多个PCIe到PCIe桥。每个PCIe桥可以将在端点(EP)上接收的主机PCIe TLP传递到NVMe控制器和计算资源的根端口(RP)。
PCIe桥可以执行这些功能中的一些或全部:在本公开的一些实施例中,PCIe桥可以向主机通告多个PCIe EP PF,其配置匹配NVMe控制器和/或计算资源;在本公开的一些实施例中,PCIe桥可以执行NVMe控制器和/或计算资源端点的PCIe配置;在本公开的一些实施例中,PCIe桥可以将主机PCIe配置周期镜像到NVMe控制器和/或计算资源PCIe端点;在本公开的一些实施例中,PCIe桥可以向/从主机和NVMe控制器或计算资源转发PCIe TLP;在本公开的一些实施例中,PCIe桥可以为直通TLP执行地址转换。
在图1的多功能设备135的一些实施例中,可以执行存储设备和计算资源之间的对等数据移动。在本公开的一些实施例中,用于计算资源的PCIe桥可以向用于SSD控制器的PCIe桥提供用于数据移动的地址范围。P2P地址范围可以是PCIe BAR窗口的一部分,或者是由PCIe桥中的主机软件编程的范围。这个地址范围和其他相关信息可以被称为P2P控制。
在本公开的一些实施例中,PCIe桥存储可以获取P2P控制信息,并且可以截取来自NVMe SSD控制器的落入P2P地址范围内的所有TLP。然后,截取的P2P PCIe事务(存储器写入和存储器读取)可以被呈现给根端口侧的复用器/解复用器模块。该复用器/解复用器模块可以合并来自主机和来自PCIe桥存储并去往计算资源的TLP。该模块可以允许主机和PCIe桥存储并发地访问计算资源。对于可以是投递式事务的写入事务,简单的TLP复用可以实现期望的功能。对于可以是非投递式的读取请求,从计算资源返回的完成分组可以被分开用于主机和PCIe桥存储。这种分离可以使用包含在每个读取请求中的读取请求标签值来实现。然而,可能需要管理主机和PCIe桥存储之间的冲突标签值,并且可以使用多种方式来处理读取请求标签冲突。
在本公开的一些实施例中,响应于来自PCIe桥存储的存储器读取请求的完成分组可以被分离并被发送到PCIe桥存储,PCIe桥存储又可以将它们转发到SSD控制器。复用器/解复用器模块可以跟踪属于主机读取请求和PCIe桥存储读取请求的存储器读取请求标签。本公开的一些实施例可以检查读取请求标签不冲突。本公开的一些实施例可以检查在任何给定时间只有一个唯一标签是活动的。在本公开的一些实施例中,图1的多功能设备135可以仅允许一个代理(主机或PCIe桥存储)向计算机发出读取请求。在本公开的其他实施例中,复用器/解复用器模块可以跟踪活动的读取标签,并且可以在表中对来自主机以及来自PCIe桥存储的所有读取请求执行查找。在本公开的一些实施例中,如果发现相同的标签已经是活动的,则复用器/解复用器模块可以延迟该请求,直到活动标签被释放。在本公开的一些实施例中,如果没有发现冲突,则复用器/解复用器模块可以允许多个并发读取请求被发送到计算资源。在本公开的一些实施例中,可以将两组读取请求标签值分配给主机和PCIe桥存储,从而可以避免标签冲突。在本公开的一些实施例中,复用器/解复用器模块可以对传入的读取请求标签执行一级间接或转换,使得不会发生标签冲突。原始的输入标签和转换后的标签值可以保存在表中,并且可以双向执行转换:对计算资源的读取请求,以及从计算资源返回的完成。
本公开的一些实施例使得SSD控制器能够对计算资源存储器执行直接存储器访问(DMA)操作,而不会加重主机CPU的负担。本公开的实施例可以包括这些特征中的一些或全部:用于计算存储应用的多功能灵活SSD;一个或多个用于存储I/O操作的PF(NVMe);用于计算资源的一个或多个PF;可以使用连接器来附接计算资源,使得如果需要,可以替换计算资源;SSD控制器和计算资源之间的对等数据传送可以对主机透明;由PCIe桥中的主机软件编程的PCIe BAR窗口或地址范围,其被用作P2P地址范围;主机和SSD控制器可以并发地访问计算资源;P2P DMA的SSD控制器和主机之间的读取请求标签冲突管理:并发存储I/O和计算事务;客户可以使用对计算资源的专有接口;用于连接SSD控制器和计算资源的(多个)并行PCIe到PCIe桥;用于P2P数据传送的计算资源PF BAR范围;许多不同种类的计算资源:FPGA、ASIC、SoC、CPU、GPU、TPU、NPU、NIC等。
以下讨论旨在提供其中可以实施本公开的特定方面的一个或多个合适机器的简要概括描述。一个或多个机器可以至少部分地由来自传统输入设备(诸如键盘、鼠标等)的输入、以及由从另一个机器接收的指令、与虚拟现实(VR)环境的交互、生物反馈或其他输入信号来控制。如本文所使用的,术语“机器”旨在广泛地涵盖单个机器、虚拟机或通信耦接的机器、虚拟机或一起操作的设备的系统。示例性机器包括计算设备,诸如个人计算机、工作站、服务器、便携式计算机、手持设备、电话、平板电脑等,以及运输设备,诸如私人或公共运输,例如汽车、火车、出租车等。
一个或多个机器可以包括嵌入式控制器,诸如可编程或不可编程逻辑器件或阵列、专用集成电路(ASIC)、嵌入式计算机、智能卡等。一个或多个机器可以利用到一个或多个远程机器的一个或多个连接,诸如通过网络接口、调制解调器或其他通信耦接。机器可以通过物理和/或逻辑网络互连,诸如内联网、互联网、局域网、广域网等。本领域技术人员将理解,网络通信可以利用各种有线和/或无线短程或远程载波和协议,包括射频(RF)、卫星、微波、电气和电子工程师协会(IEEE)802.11、蓝牙、光学、红外、电缆、激光等。
本公开的实施例可以通过参考或结合包括功能、过程、数据结构、应用程序等的关联数据来描述,它们在被机器访问时导致机器执行任务或定义抽象数据类型或低级硬件上下文。关联数据可以存储在例如易失性和/或非易失性存储器(例如RAM、ROM等)中,或者存储在其他存储设备及其相关联的存储介质中,包括硬盘驱动器、软盘、光存储装置、磁带、闪存、记忆棒、数字视频盘、生物存储装置等。关联数据可以以分组、串行数据、并行数据、传播信号等的形式在包括物理和/或逻辑网络的传输环境中传递,并且可以以压缩或加密格式使用。关联数据可以在分布式环境中使用,并且本地和/或远程存储以供机器访问。
本公开的实施例可以包括有形非暂时性机器可读介质,该介质包括可由一个或多个处理器执行的指令,该指令包括执行如本文所述的本公开的元素的指令。
上述方法的各种操作可以由能够执行操作的任何合适的装置来执行,诸如各种(多个)硬件和/或软件组件、电路和/或(多个)模块。软件可以包括用于实现逻辑功能的可执行指令的有序列表,并且可以体现在任何“处理器可读介质”中,以供指令执行系统、装置或设备(诸如单核或多核处理器或包含处理器的系统)使用或与之结合。
结合本文公开的实施例描述的方法或算法和功能的块或步骤可以直接体现在硬件、由处理器执行的软件模块或两者的组合中。如果在软件中实现,这些功能可以作为有形非暂时性计算机可读介质上的一个或多个指令或代码来存储或传输。软件模块可以驻留在随机存取存储器(RAM)、闪存、只读存储器(ROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、寄存器、硬盘、可移动磁盘、CD ROM或本领域已知的任何其他形式的存储介质中。
已经参考所示实施例描述和示出了本公开的原理,将认识到,所示实施例可以在布置和细节上进行修改而不背离这些原理,并且可以以任何期望的方式进行组合。并且,尽管前面的讨论集中在特定的实施例上,但是也可以考虑其他的配置。具体而言,尽管在本文中使用了诸如“根据本公开的实施例”等表述,但是这些短语旨在概括地指代实施例的可能性,而不旨在将本公开限制于特定的实施例配置。如本文所使用的,这些术语可以指相同或不同的实施例,这些实施例可以组合成其他实施例。
前述说明性实施例不应被解释为限制其公开内容。尽管已经描述了几个实施例,但是本领域技术人员将容易理解,在本质上不脱离本公开的新颖教导和优点的情况下,对这些实施例的许多修改是可能的。因此,所有这样的修改旨在包括在权利要求中定义的本公开的范围内。
本公开的实施例可以无限制地扩展到以下陈述:
陈述1.本公开的实施例包括一种多功能设备,包括:
与主机处理器通信的第一端口;
与存储设备通信的第二端口;
与计算存储单元通信的第三端口;和
将来自所述主机处理器的消息路由到所述存储设备或所述计算存储单元中的至少一个的电路。
陈述2.本公开的实施例包括根据陈述1所述的多功能设备,其中,所述多功能设备使用现场可编程门阵列(FPGA)、专用集成电路(ASIC)、中央处理单元(CPU)、图形处理单元(GPU)、通用GPU(GPGPU)、张量处理单元(TPU)、神经处理单元(NPU)、网络接口卡(NIC)或片上系统(SoC)中的至少一个来实现。
陈述3.本公开的实施例包括根据陈述1所述的多功能设备,还包括与第二存储设备通信的第四端口。
陈述4.本公开的实施例包括根据陈述1所述的多功能设备,还包括与第二计算存储单元通信的第四端口。
陈述5.本公开的实施例包括根据陈述1所述的多功能设备,其中,所述电路包括复用器/解复用器,所述复用器/解复用器被配置为至少部分基于所述消息中的数据将所述存储设备或所述计算存储单元中的至少一个识别为所述消息的目的地。
陈述6.本公开的实施例包括根据陈述5所述的多功能设备,其中,所述电路还包括:
连接到所述第二端口的第一桥;和
连接到所述第三端口的第二桥,
其中,所述复用器/解复用器被配置为至少部分基于所述消息中的数据将所述消息路由到所述第一桥或所述第二桥中的至少一个。
陈述7.本公开的实施例包括根据陈述1所述的多功能设备,其中:
所述第一端口包括端点;
所述第二端口包括第一根端口;并且
所述第三端口包括第二根端口。
陈述8.本公开的实施例包括根据陈述7所述的多功能设备,其中:
所述第一根端口被配置为识别所述存储设备的至少第一暴露功能;
所述第二根端口被配置为识别所述计算存储单元的至少第二暴露功能;并且
所述端点被配置为暴露至少所述第一暴露功能和所述第二暴露功能。
陈述9.本公开的实施例包括根据陈述8所述的多功能设备,其中,所述第一暴露功能包括物理功能(PF)或虚拟功能(VF)中的至少一个。
陈述10.本公开的实施例包括根据陈述8所述的多功能设备,其中,所述第二暴露功能包括PF或VF中的至少一个。
陈述11.本公开的实施例包括根据陈述1所述的多功能设备,还包括异步缓冲器。
陈述12.本公开的实施例包括根据陈述11所述的多功能设备,其中,所述异步缓冲器被配置为使用不同于所述主机处理器、所述存储设备或所述计算存储单元中的至少一个的时钟周期来操作。
陈述13.本公开的实施例包括根据陈述11所述的多功能设备,其中,所述异步缓冲器连接到所述第一端口、所述第二端口或所述第三端口之一。
陈述14.本公开的实施例包括根据陈述11所述的多功能设备,其中:
所述异步缓冲器连接到所述第一端口;并且
所述多功能设备还包括:
连接到所述第二端口的第二异步缓冲器;和
连接到所述第三端口的第三异步缓冲器。
陈述15.本公开的实施例包括根据陈述14所述的多功能设备,其中:
所述异步缓冲器被配置为使用不同于所述主机处理器的时钟周期来操作;
所述第二异步缓冲器被配置为使用不同于所述存储设备的时钟周期来操作;并且
所述第三异步缓冲器被配置为使用不同于所述计算存储单元的时钟周期来操作。
陈述16.本公开的实施例包括根据陈述1所述的多功能设备,其中,所述存储设备包括非易失性存储器快速(NVMe)存储设备。
陈述17.本公开的实施例包括根据陈述16所述的多功能设备,其中,所述NVMe存储设备包括NVMe固态驱动器(SSD)。
陈述18.本公开的实施例包括根据陈述1所述的多功能设备,其中,所述第一端口被配置为连接到外围组件互连快速(PCIe)总线。
陈述19.本公开的实施例包括根据陈述1所述的多功能设备,其中,所述多功能设备被配置为使用协议与所述主机处理器、所述存储设备或所述计算存储单元中的至少一个通信,所述协议为PCIe、以太网、远程直接存储器访问(RDMA)、传输控制协议/互联网协议(TCP/IP)、InfiniBand、串行附接小型计算机系统接口(SCSI)(SAS)、互联网SCSI(iSCSI)和串行AT附件(SATA)中的至少一个。
陈述20.本公开的实施例包括根据陈述1所述的多功能设备,其中,所述第二端口连接到连接器,所述连接器被配置为允许用第二计算存储单元替换所述计算存储单元。
陈述21.本公开的实施例包括根据陈述1所述的多功能设备,其中,所述多功能设备使得所述主机处理器和所述存储设备能够并发地与所述计算存储单元通信。
陈述22.本公开的实施例包括根据陈述1所述的多功能设备,还包括用于对等通信的第二电路。
陈述23.本公开的实施例包括根据陈述22所述的多功能设备,其中,所述第二电路包括用于所述存储设备和第二存储设备之间的通信的第三电路。
陈述24.本公开的实施例包括根据陈述22所述的多功能设备,其中,所述第二电路包括用于所述计算存储单元和第二计算存储单元之间的通信的第三电路。
陈述25.本公开的实施例包括根据陈述22所述的多功能设备,其中,所述第二电路包括用于所述存储设备和所述计算存储单元之间的通信的第三电路。
陈述26.本公开的实施例包括根据陈述25所述的多功能设备,其中:
所述存储设备包括存储器;并且
所述第二电路包括所述计算存储单元中的直接存储器寻址电路以访问所述存储器。
陈述27.本公开的实施例包括根据陈述25所述的多功能设备,其中
所述计算存储单元包括存储器;并且
所述第二电路包括所述存储设备中的直接存储器寻址电路以访问所述存储器。
陈述28.本公开的实施例包括根据陈述25所述的多功能设备,其中,所述第二电路包括缓冲器,用于存储将与所述计算存储单元共享的数据。
陈述29.本公开的实施例包括根据陈述28所述的多功能设备,其中:
所述多功能设备还包括与第二计算存储单元通信的第四端口;并且
所述第二电路还包括用于将与所述第二计算存储单元共享的数据的第二缓冲器。
陈述30.本公开的实施例包括根据陈述28所述的多功能设备,其中,所述存储设备被配置为从所述缓冲器读取数据或向所述缓冲器写入数据。
陈述31.本公开的实施例包括根据陈述28所述的多功能设备,其中,所述计算存储单元被配置为从所述缓冲器读取数据或向所述缓冲器写入数据。
陈述32.本公开的实施例包括根据陈述28所述的多功能设备,其中,所述第二电路还包括处理所述缓冲器中的数据的数据处理器。
陈述33.本公开的实施例包括根据陈述32所述的多功能设备,其中,所述数据处理器被配置为调度所述存储设备或所述计算存储单元对所述缓冲器的访问。
陈述34.本公开的实施例包括根据陈述32所述的多功能设备,其中,所述数据处理器被配置为处理所述缓冲器中的数据以生成第二数据。
陈述35.本公开的实施例包括根据陈述34所述的多功能设备,其中,所述数据处理器还被配置为将所述第二数据存储在所述缓冲器中。
陈述36.本公开的实施例包括根据陈述35所述的多功能设备,其中,所述数据处理器还被配置为从所述缓冲器中删除所述数据。
陈述37.本公开的实施例包括根据陈述34所述的多功能设备,其中,所述数据处理器被配置为对所述缓冲器中的数据进行代码转换以生成所述第二数据。
陈述38.本公开的实施例包括根据陈述25所述的多功能设备,还包括复用器/解复用器,所述复用器/解复用器被配置为使得所述计算存储单元能够与所述主机处理器和所述存储设备通信。
陈述39.本公开的实施例包括根据陈述38所述的多功能设备,其中:
路由所述消息的电路包括:
连接到所述第二端口的第一桥;和
连接到所述第三端口的第二桥;并且
所述复用器/解复用器连接到所述第一桥和所述第二桥。
陈述40.本公开的实施例包括根据陈述25所述的多功能设备,其中,所述主机处理器包括用于与所述存储设备通信的第一地址范围、用于与所述计算存储单元通信的第二地址范围、以及用于所述存储设备和所述计算存储单元之间的对等通信的第三地址范围。
陈述41.本公开的实施例包括一种方法,包括:
在多功能设备的第一端口处从主机处理器接收请求;
从所述请求中识别第一设备;
识别连接到所述第一设备的所述多功能设备的第二端口;以及
通过所述多功能设备的所述第二端口向所述第一设备发送所述请求,
其中,所述多功能设备包括连接到第二设备的第三端口,
所述第一设备从包括存储设备或计算存储单元的集合中抽取;并且
所述第二设备从包括所述存储设备或所述计算存储单元的所述集合中抽取。
陈述42.本公开的实施例包括根据陈述41所述的方法,其中,所述存储设备包括非易失性存储器快速(NVMe)存储设备。
陈述43.本公开的实施例包括根据陈述42所述的方法,其中,所述NVMe存储设备包括NVMe固态驱动器(SSD)。
陈述44.本公开的实施例包括根据陈述41所述的方法,其中,所述多功能设备使用现场可编程门阵列(FPGA)、专用集成电路(ASIC)、中央处理单元(CPU)、图形处理单元(GPU)、通用GPU(GPGPU)、张量处理单元(TPU)、神经处理单元(NPU)、网络接口卡(NIC)或片上系统(SoC)中的至少一个来实现。
陈述45.本公开的实施例包括根据陈述41所述的方法,其中,在多功能设备的第一端口处从主机处理器接收请求包括在所述多功能设备的所述第一端口处通过外围组件互连快速(PCIe)总线从所述主机处理器接收所述请求。
陈述46.本公开的实施例包括根据陈述41所述的方法,其中,所述多功能设备被配置为使用协议与所述主机处理器或所述第一设备中的至少一个通信,所述协议包括PCIe、以太网、远程直接存储器访问(RDMA)、传输控制协议/互联网协议(TCP/IP)、InfiniBand、串行附接小型计算机系统接口(SCSI)(SAS)、互联网SCSI(iSCSI)或串行AT附件(SATA)中的至少一个。
陈述47.本公开的实施例包括根据陈述41所述的方法,其中,在多功能设备的第一端口处从主机处理器接收请求包括在所述多功能设备的所述第一端口处使用协议从所述主机处理器接收所述请求,所述协议包括PCIe、以太网、RDMA、TCP/IP、InfiniBand、(SAS)、iSCSI或SATA中的至少一种。
陈述48.本公开的实施例包括根据陈述41所述的方法,其中,通过所述多功能设备的所述第二端口向所述第一设备发送所述请求包括使用协议通过所述多功能设备的所述第二端口向所述第一设备发送所述请求,所述协议包括PCIe、以太网、RDMA、TCP/IP、InfiniBand、(SAS)、iSCSI或SATA中的至少一种。
陈述49.本公开的实施例包括根据陈述41所述的方法,还包括:
在所述多功能设备的所述第一端口处从所述主机处理器接收第二请求;
从所述第二请求中识别第三设备;
识别连接到所述第三设备的所述多功能设备的第四端口;以及
通过所述多功能设备的所述第四端口向所述第三设备发送所述第二请求。
陈述50.本公开的实施例包括根据陈述49所述的方法,其中,所述第三设备从包括第二存储设备或第二计算存储单元的集合中抽取。
陈述51.本公开的实施例包括根据陈述41所述的方法,其中:
在多功能设备的第一端口处从主机处理器接收请求包括在所述多功能设备的端点处从所述主机处理器接收所述请求;
通过所述多功能设备的所述第二端口向所述第一设备发送所述请求包括通过所述多功能设备的根端口向所述第一设备发送所述请求。
陈述52.本公开的实施例包括根据陈述51所述的方法,其中:
所述第三端口包括所述多功能设备的第二根端口;并且
所述方法还包括:
通过所述根端口识别所述第一设备的至少第一暴露功能;
通过所述第二根端口识别所述第二设备的至少第二暴露功能;以及
在所述多功能设备的所述端点处将至少所述第一暴露功能和所述第二暴露功能暴露给所述主机处理器。
陈述53.本公开的实施例包括根据陈述52所述的方法,其中,所述第一暴露功能包括物理功能(PF)或虚拟功能(VF)中的至少一个。
陈述54.本公开的实施例包括根据陈述52所述的方法,其中,所述第二暴露功能包括PF或VF中的至少一个。
陈述55.本公开的实施例包括根据陈述41所述的方法,其中,在多功能设备的第一端口处从主机处理器接收请求包括将所述请求存储在连接到所述第一端口的所述多功能设备的异步缓冲器中。
陈述56.本公开的实施例包括根据陈述55所述的方法,其中,所述多功能设备的所述异步缓冲器被配置为使用不同于所述主机处理器的时钟周期来操作。
陈述57.本公开的实施例包括根据陈述55所述的方法,其中,通过所述多功能设备的所述第二端口向所述第一设备发送所述请求包括将所述请求存储在连接到所述第二端口的所述多功能设备的第二异步缓冲器中。
陈述58.本公开的实施例包括根据陈述57所述的方法,其中,所述多功能设备的所述第二异步缓冲器被配置为使用不同于所述第一设备的时钟周期来操作。
陈述59.本公开的实施例包括根据陈述58所述的方法,其中,所述多功能设备包括连接到所述第三端口的第三异步缓冲器,所述第三异步缓冲器被配置为使用不同于所述第二设备的时钟周期来操作。
陈述60.本公开的实施例包括根据陈述41所述的方法,其中:
所述第一设备包括第一计算存储单元;并且
所述方法还包括用第二计算存储单元替换所述第一计算存储单元。
陈述61.本公开的实施例包括根据陈述41所述的方法,还包括:
在所述多功能设备的所述第三端口处从所述第二设备接收第二请求;
从所述第二请求中识别所述第一设备;
识别连接到所述第一设备的所述多功能设备的所述第二端口;以及通过所述多功能设备的所述第二端口向所述第一设备发送所述第二请求。
陈述62.本公开的实施例包括根据陈述61所述的方法,其中,通过所述多功能设备的所述第二端口向所述第一设备发送所述第二请求包括与通过所述多功能设备的所述第二端口向所述第一设备发送所述请求并发地通过所述多功能设备的所述第二端口向所述第一设备发送所述第二请求。
陈述63.本公开的实施例包括根据陈述41所述的方法,还包括从所述第二设备向所述第一设备提供数据。
陈述64.本公开的实施例包括根据陈述63所述的方法,其中:
所述第一设备包括第一存储设备;
所述第二设备包括第二存储设备。
陈述65.本公开的实施例包括根据陈述63所述的方法,其中:
所述第一设备包括第一计算存储单元;
所述第二设备包括第二计算存储单元。
陈述66.本公开的实施例包括根据陈述63所述的方法,其中:
所述第一设备包括所述存储设备;
所述第二设备包括所述计算存储单元。
陈述67.本公开的实施例包括根据陈述66的方法,其中:
所述存储设备包括存储器;并且
从所述第二设备向所述第一设备提供所述数据包括由所述计算存储单元使用直接存储器寻址电路从所述存储设备的存储器读取所述数据。
陈述68.本公开的实施例包括根据陈述66所述的方法,其中:
所述计算存储单元包括存储器;并且
从所述第二设备向所述第一设备提供所述数据包括由所述存储设备使用直接存储器寻址电路将所述数据写入所述计算存储单元的存储器中。
陈述69.本公开的实施例包括根据陈述66所述的方法,其中,从所述第二设备向所述第一设备提供数据包括:
由所述第一设备将所述数据写入缓冲器;以及
由所述第二设备从所述缓冲器读取所述数据。
陈述70.本公开的实施例包括根据陈述69所述的方法,还包括:
由第一设备将第二数据写入第二缓冲器;以及
由连接到所述多功能设备的第四端口的第三设备从所述第二缓冲器读取所述第二数据。
陈述71.本公开的实施例包括根据陈述69所述的方法,其中:
所述方法还包括使用数据处理器处理所述缓冲器中的数据以生成第二数据;并且
由所述第二设备从所述缓冲器读取所述数据包括由所述第二设备从所述缓冲器读取所述第二数据。
陈述72.本公开的实施例包括根据陈述71所述的方法,其中,使用数据处理器处理所述缓冲器中的数据以生成第二数据包括至少部分基于来自所述主机处理器的命令使用所述数据处理器处理所述缓冲器中的数据以生成所述第二数据。
陈述73.本公开的实施例包括根据陈述72所述的方法,其中,使用数据处理器处理所述缓冲器中的数据以生成第二数据还包括至少部分基于所述第二数据正在生成来通知所述主机处理器。
陈述74.本公开的实施例包括根据陈述69所述的方法,其中:
由所述第一设备将所述数据写入缓冲器包括由所述第一设备至少部分基于来自所述主机处理器的第一命令将所述数据写入缓冲器;并且
由所述第二设备从所述缓冲器读取所述数据包括由所述第二设备至少部分基于来自所述主机处理器的第二命令从所述缓冲器读取所述数据。
陈述75.本公开的实施例包括根据陈述74所述的方法,其中:
由所述第一设备将所述数据写入缓冲器还包括至少部分基于所述第二数据正在被写入所述缓冲器来通知所述主机处理器;并且
由所述第二设备从所述缓冲器读取所述数据还包括至少部分基于所述第二数据正被从所述缓冲器读取来通知所述主机处理器。
陈述76.本公开的实施例包括根据陈述66所述的方法,其中,从所述第二设备向所述第一设备提供所述数据包括在与对等通信相关联的地址范围内从所述主机处理器接收命令。
陈述77.本公开的实施例包括一种制品,所述制品包括非暂时性存储介质,所述非暂时性存储介质上存储有指令,当由机器执行时,所述指令导致:
在多功能设备的第一端口处从主机处理器接收请求;
从所述请求中识别第一设备;
识别连接到所述第一设备的所述多功能设备的第二端口;以及
通过所述多功能设备的所述第二端口向所述第一设备发送所述请求,其中,所述多功能设备包括连接到第二设备的第三端口;
所述第一设备从包括存储设备或计算存储单元的集合中抽取;并且
所述第二设备从包括所述存储设备或所述计算存储单元的所述集合中抽取。
陈述78.本公开的实施例包括根据陈述77所述的制品,其中,所述存储设备包括非易失性存储器快速(NVMe)存储设备。
陈述79.本公开的实施例包括根据陈述78所述的制品,其中,所述NVMe存储设备包括NVMe固态驱动器(SSD)。
陈述80.本公开的实施例包括根据陈述77所述的制品,其中,所述多功能设备使用现场可编程门阵列(FPGA)、专用集成电路(ASIC)、中央处理单元(CPU)、图形处理单元(GPU)、通用GPU(GPGPU)、张量处理单元(TPU)、神经处理单元(NPU)、或网络接口卡(NIC)、片上系统(SoC)中的至少一个来实现。
陈述81.本公开的实施例包括根据陈述77所述的制品,其中,在多功能设备的第一端口处从主机处理器接收请求包括在所述多功能设备的所述第一端口处通过外围组件互连快速(PCIe)总线从所述主机处理器接收所述请求。
陈述82.本公开的实施例包括根据陈述77所述的制品,其中,所述多功能设备被配置为使用协议与所述主机处理器或所述第一设备中的至少一个通信,所述协议包括PCIe、以太网、远程直接存储器访问(RDMA)、传输控制协议/互联网协议(TCP/IP)、InfiniBand、串行附接小型计算机系统接口(SCSI)(SAS)、互联网SCSI(iSCSI)或串行AT附件(SATA)中的至少一个。
陈述83.本公开的实施例包括根据陈述77所述的制品,其中,在多功能设备的第一端口处从主机处理器接收请求包括在所述多功能设备的所述第一端口处使用协议从所述主机处理器接收所述请求,所述协议包括PCIe、以太网、RDMA、TCP/IP、InfiniBand、(SAS)、iSCSI或SATA中的至少一种。
陈述84.本公开的实施例包括根据陈述77所述的制品,其中,通过所述多功能设备的所述第二端口向所述第一设备发送所述请求包括使用协议通过所述多功能设备的所述第二端口向所述第一设备发送所述请求,所述协议包括PCIe、以太网、RDMA、TCP/IP、InfiniBand、(SAS)、iSCSI或SATA中的至少一种。
陈述85.本公开的实施例包括根据陈述77所述的制品,所述非暂时性存储介质上还存储有指令,当由所述机器执行时,所述指令导致:
在所述多功能设备的所述第一端口处从所述主机处理器接收第二请求;
从所述第二请求中识别第三设备;
识别连接到所述第三设备的所述多功能设备的第四端口;以及
通过所述多功能设备的所述第四端口向所述第三设备发送所述第二请求。
陈述86.本公开的实施例包括根据陈述85所述的制品,其中,所述第三设备从包括第二存储设备或第二计算存储单元的集合中抽取。
陈述87.本公开的实施例包括根据陈述77所述的制品,其中:
在多功能设备的第一端口处从主机处理器接收请求包括在所述多功能设备的端点处从所述主机处理器接收所述请求;
通过所述多功能设备的所述第二端口向所述第一设备发送所述请求包括通过所述多功能设备的根端口向所述第一设备发送所述请求。
陈述88.本公开的实施例包括根据陈述87所述的制品,其中:
所述第三端口包括所述多功能设备的第二根端口;并且
所述非暂时性存储介质上还存储有指令,当由所述机器执行时,所述指令导致:
通过所述根端口识别所述第一设备的至少第一暴露功能;
通过所述第二根端口识别所述第二设备的至少第二暴露功能;以及在所述多功能设备的所述端点处将至少所述第一暴露功能和所述第二暴露功能暴露给所述主机处理器。
陈述89.本公开的实施例包括根据陈述88所述的制品,其中,所述第一暴露功能包括物理功能(PF)或虚拟功能(VF)中的至少一个。
陈述90.本公开的实施例包括根据陈述88所述的制品,其中,所述第二暴露功能包括PF或VF中的至少一个。
陈述91.本公开的实施例包括根据陈述77所述的制品,其中,在多功能设备的第一端口处从主机处理器接收请求包括将所述请求存储在连接到所述第一端口的所述多功能设备的异步缓冲器中。
陈述92.本公开的实施例包括根据陈述91所述的制品,其中,所述多功能设备的所述异步缓冲器被配置为使用不同于所述主机处理器的时钟周期来操作。
陈述93.本公开的实施例包括根据陈述91所述的制品,其中,通过所述多功能设备的所述第二端口向所述第一设备发送所述请求包括将所述请求存储在连接到所述第二端口的所述多功能设备的第二异步缓冲器中。
陈述94.本公开的实施例包括根据陈述93所述的制品,其中,所述多功能设备的所述第二异步缓冲器被配置为使用不同于所述第一设备的时钟周期来操作。
陈述95.本公开的实施例包括根据陈述94所述的制品,其中,所述多功能设备包括连接到所述第三端口的第三异步缓冲器,所述第三异步缓冲器被配置为使用不同于所述第二设备的时钟周期来操作。
陈述96.本公开的实施例包括根据陈述77所述的制品,其中:
所述第一设备包括第一计算存储单元;并且
所述非暂时性存储介质上还存储有指令,当由所述机器执行时,所述指令导致用第二计算存储单元替换所述第一计算存储单元。
陈述97.本公开的实施例包括根据陈述77所述的制品,所述非暂时性存储介质上还存储有指令,当由所述机器执行时,所述指令导致:
在所述多功能设备的所述第三端口处从所述第二设备接收第二请求;
从所述第二请求中识别所述第一设备;
识别连接到所述第一设备的所述多功能设备的所述第二端口;以及通过所述多功能设备的所述第二端口向所述第一设备发送所述第二请求。
陈述98.本公开的实施例包括根据陈述97所述的制品,其中,通过所述多功能设备的所述第二端口向所述第一设备发送所述第二请求包括与通过所述多功能设备的所述第二端口向所述第一设备发送所述请求并发地通过所述多功能设备的所述第二端口向所述第一设备发送所述第二请求。
陈述99.本公开的实施例包括根据陈述77所述的制品,所述非暂时性存储介质上还存储有指令,当由所述机器执行时,所述指令导致从所述第二设备向所述第一设备提供数据。
陈述100.本公开的实施例包括根据陈述99所述的制品,其中:
所述第一设备包括第一存储设备;
所述第二设备包括第二存储设备。
陈述101.本公开的实施例包括根据陈述99所述的制品,其中:
所述第一设备包括第一计算存储单元;
所述第二设备包括第二计算存储单元。
陈述102.本公开的实施例包括根据陈述99所述的制品,其中:
所述第一设备包括所述存储设备;
所述第二设备包括所述计算存储单元。
陈述103.本公开的实施例包括根据陈述102所述的制品,其中:
所述存储设备包括存储器;并且
从所述第二设备向所述第一设备提供所述数据包括由所述计算存储单元使用直接存储器寻址电路从所述存储设备的存储器读取所述数据。
陈述104.本公开的实施例包括根据陈述102所述的制品,其中:
所述计算存储单元包括存储器;并且
从所述第二设备向所述第一设备提供所述数据包括由所述存储设备使用直接存储器寻址电路将所述数据写入所述计算存储单元的存储器中。
陈述105.本公开的实施例包括根据陈述102所述的制品,其中,从所述第二设备向所述第一设备提供数据包括:
由所述第一设备将所述数据写入缓冲器;以及
由所述第二设备从所述缓冲器读取所述数据。
陈述106.本公开的实施例包括根据陈述105所述的制品,所述非暂时性存储介质上还存储有指令,当由所述机器执行时,所述指令导致:
由第一设备将第二数据写入第二缓冲器;以及
由连接到所述多功能设备的第四端口的第三设备从所述第二缓冲器读取所述第二数据。
陈述107.本公开的实施例包括根据陈述105所述的制品,其中:
所述非暂时性存储介质上还存储有指令,当由所述机器执行时,所述指令导致使用数据处理器处理所述缓冲器中的数据以生成第二数据;并且
由所述第二设备从所述缓冲器读取所述数据包括由所述第二设备从所述缓冲器读取所述第二数据。
陈述108.本公开的实施例包括根据陈述107所述的制品,其中,使用数据处理器处理所述缓冲器中的数据以生成第二数据包括至少部分基于来自所述主机处理器的命令使用所述数据处理器处理所述缓冲器中的数据以生成所述第二数据。
陈述109.本公开的实施例包括根据陈述108所述的制品,其中,使用数据处理器处理所述缓冲器中的数据以生成第二数据还包括至少部分基于所述第二数据正在生成来通知所述主机处理器。
陈述110.本公开的实施例包括根据陈述105所述的制品,其中:
由所述第一设备将所述数据写入缓冲器包括由所述第一设备至少部分基于来自所述主机处理器的第一命令将所述数据写入缓冲器;并且
由所述第二设备从所述缓冲器读取所述数据包括由所述第二设备至少部分基于来自所述主机处理器的第二命令从所述缓冲器读取所述数据。
陈述111.本公开的实施例包括根据陈述110所述的制品,其中:
由所述第一设备将所述数据写入缓冲器还包括至少部分基于所述第二数据正在被写入所述缓冲器来通知所述主机处理器;并且
由所述第二设备从所述缓冲器读取所述数据还包括至少部分基于所述第二数据正被从所述缓冲器读取来通知所述主机处理器。
陈述112.本公开的实施例包括根据陈述102所述的制品,其中,从所述第二设备向所述第一设备提供所述数据包括在与对等通信相关联的地址范围内从所述主机处理器接收命令。
因此,鉴于本文描述的实施例的各种排列,该详细描述和附随材料仅旨在说明,而不应被视为限制本公开的范围。因此,本公开所要求保护的是可能落入所附权利要求及其等同物的范围和精神内的所有这种修改。
Claims (20)
1.一种多功能设备,包括:
与主机处理器通信的第一端口;
与存储设备通信的第二端口;
与计算存储单元通信的第三端口;和
将来自所述主机处理器的消息路由到所述存储设备或所述计算存储单元中的至少一个的电路。
2.根据权利要求1所述的多功能设备,其中,所述电路包括复用器/解复用器,所述复用器/解复用器被配置为至少部分基于所述消息中的数据将所述存储设备或所述计算存储单元中的至少一个识别为所述消息的目的地。
3.根据权利要求2所述的多功能设备,其中,所述电路还包括:
连接到所述第二端口的第一桥;和
连接到所述第三端口的第二桥,
其中,所述复用器/解复用器被配置为至少部分基于所述消息中的数据将所述消息路由到所述第一桥或所述第二桥中的至少一个。
4.根据权利要求1所述的多功能设备,其中:
所述第一端口包括端点;
所述第二端口包括第一根端口;并且
所述第三端口包括第二根端口。
5.根据权利要求4所述的多功能设备,其中:
所述第一根端口被配置为识别所述存储设备的至少第一暴露功能;
所述第二根端口被配置为识别所述计算存储单元的至少第二暴露功能;并且
所述端点被配置为暴露至少所述第一暴露功能和所述第二暴露功能。
6.根据权利要求1所述的多功能设备,还包括用于对等通信的第二电路。
7.根据权利要求6所述的多功能设备,其中,所述第二电路包括用于所述存储设备和所述计算存储单元之间的通信的第三电路。
8.根据权利要求7所述的多功能设备,其中,所述第二电路包括缓冲器,以存储将与所述计算存储单元共享的数据。
9.根据权利要求7所述的多功能设备,还包括复用器/解复用器,所述复用器/解复用器被配置为使得所述计算存储单元能够与所述主机处理器和所述存储设备通信。
10.根据权利要求1所述的多功能设备,其中,所述计算存储单元包括网络接口卡(NIC)。
11.根据权利要求1所述的多功能设备,其中,所述多功能设备被配置为使用协议与所述主机处理器、所述存储设备或所述计算存储单元中的至少一个通信,所述协议包括外围组件互连快速(PCIe)、以太网、远程直接存储器访问(RDMA)、传输控制协议/互联网协议(TCP/IP)、InfiniBand、串行附接小型计算机系统接口(SCSI)(SAS)、互联网SCSI(iSCSI)或串行AT附件(SATA)中的至少一个。
12.一种方法,包括:
在多功能设备的第一端口处从主机处理器接收请求;
从所述请求中识别第一设备;
识别连接到所述第一设备的所述多功能设备的第二端口;以及
通过所述多功能设备的所述第二端口向所述第一设备发送所述请求,
其中,所述多功能设备包括连接到第二设备的第三端口;
所述第一设备从包括存储设备或计算存储单元的集合中抽取;并且
所述第二设备从包括所述存储设备或所述计算存储单元的所述集合中抽取。
13.根据权利要求12所述的方法,其中:
在多功能设备的第一端口处从主机处理器接收请求包括在所述多功能设备的端点处从所述主机处理器接收所述请求;
通过所述多功能设备的所述第二端口向所述第一设备发送所述请求包括通过所述多功能设备的根端口向所述第一设备发送所述请求。
14.根据权利要求13所述的方法,其中:
所述第三端口包括所述多功能设备的第二根端口;并且
所述方法还包括:
通过所述根端口识别所述第一设备的至少第一暴露功能;
通过所述第二根端口识别所述第二设备的至少第二暴露功能;以及
在所述多功能设备的所述端点处将至少所述第一暴露功能和所述第二暴露功能暴露给所述主机处理器。
15.根据权利要求12所述的方法,还包括从所述第二设备向所述第一设备提供数据。
16.根据权利要求15所述的方法,其中:
所述第一设备包括所述存储设备;
所述第二设备包括所述计算存储单元。
17.根据权利要求16所述的方法,其中,从所述第二设备向所述第一设备提供数据包括:
由所述第一设备将所述数据写入缓冲器;以及
由所述第二设备从所述缓冲器读取所述数据。
18.根据权利要求17所述的方法,其中:
所述方法还包括使用数据处理器处理所述缓冲器中的数据以生成第二数据;并且
由所述第二设备从所述缓冲器读取所述数据包括由所述第二设备从所述缓冲器读取所述第二数据。
19.一种制品,包括非暂时性存储介质,所述非暂时性存储介质上存储有指令,当由机器执行时,所述指令导致:
在多功能设备的第一端口处从主机处理器接收请求;
从所述请求中识别第一设备;
识别连接到所述第一设备的所述多功能设备的第二端口;以及
通过所述多功能设备的所述第二端口向所述第一设备发送所述请求,
其中,所述多功能设备包括连接到第二设备的第三端口,
所述第一设备从包括存储设备或计算存储单元的集合中抽取;并且
所述第二设备从包括所述存储设备或所述计算存储单元的所述集合中抽取。
20.根据权利要求19所述的制品,所述非暂时性存储介质上还存储有指令,当由所述机器执行时,所述指令导致从所述第二设备向所述第一设备提供数据。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202163232631P | 2021-08-12 | 2021-08-12 | |
US63/232,631 | 2021-08-12 | ||
US17/669,351 | 2022-02-10 | ||
US17/669,351 US20240211418A9 (en) | 2019-06-24 | 2022-02-10 | Multi-function flexible computational storage device |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115705306A true CN115705306A (zh) | 2023-02-17 |
Family
ID=83115444
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210954403.4A Pending CN115705306A (zh) | 2021-08-12 | 2022-08-10 | 多功能灵活计算存储设备 |
Country Status (4)
Country | Link |
---|---|
EP (1) | EP4134830B1 (zh) |
KR (1) | KR20230024843A (zh) |
CN (1) | CN115705306A (zh) |
TW (1) | TW202341347A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117744118A (zh) * | 2023-12-21 | 2024-03-22 | 北京星驰致远科技有限公司 | 一种基于fpga的高速加密存储装置和方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10628353B2 (en) * | 2014-03-08 | 2020-04-21 | Diamanti, Inc. | Enabling use of non-volatile media-express (NVMe) over a network |
US10509758B1 (en) * | 2017-09-28 | 2019-12-17 | Amazon Technologies, Inc. | Emulated switch with hot-plugging |
US11809799B2 (en) * | 2019-06-24 | 2023-11-07 | Samsung Electronics Co., Ltd. | Systems and methods for multi PF emulation using VFs in SSD controller |
-
2022
- 2022-08-03 TW TW111129128A patent/TW202341347A/zh unknown
- 2022-08-03 EP EP22188425.7A patent/EP4134830B1/en active Active
- 2022-08-05 KR KR1020220097877A patent/KR20230024843A/ko unknown
- 2022-08-10 CN CN202210954403.4A patent/CN115705306A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117744118A (zh) * | 2023-12-21 | 2024-03-22 | 北京星驰致远科技有限公司 | 一种基于fpga的高速加密存储装置和方法 |
CN117744118B (zh) * | 2023-12-21 | 2024-05-28 | 北京星驰致远科技有限公司 | 一种基于fpga的高速加密存储装置和方法 |
Also Published As
Publication number | Publication date |
---|---|
EP4134830B1 (en) | 2024-07-03 |
EP4134830A1 (en) | 2023-02-15 |
TW202341347A (zh) | 2023-10-16 |
KR20230024843A (ko) | 2023-02-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110232037B (zh) | 主机系统及其方法和加速装置 | |
TWI840641B (zh) | 多重功能儲存元件以及用於操作多重功能儲存元件的方法 | |
US7516252B2 (en) | Port binding scheme to create virtual host bus adapter in a virtualized multi-operating system platform environment | |
US8949486B1 (en) | Direct memory access to storage devices | |
US7664909B2 (en) | Method and apparatus for a shared I/O serial ATA controller | |
US7849260B2 (en) | Storage controller and control method thereof | |
US9652182B2 (en) | Shareable virtual non-volatile storage device for a server | |
JP2020064634A (ja) | ホスト及びストレージサービスの動作方法並びにNVMeSSD | |
US10564898B2 (en) | System and method for storage device management | |
Hou et al. | Cost effective data center servers | |
CN101452430B (zh) | 多处理器之间的通信方法与包括多处理器的通信装置 | |
CN117631974A (zh) | 跨越基于存储器的通信队列的多信道接口的存取请求重新排序 | |
EP4134830B1 (en) | Multi-function flexible computational storage device | |
US11029847B2 (en) | Method and system for shared direct access storage | |
CN107533526B (zh) | 经由具有完全连接网格拓扑的pci express结构向存储写入数据 | |
US20230198740A1 (en) | Systems and methods for integrating fully homomorphic encryption (fhe) with a storage device | |
US20230195320A1 (en) | Systems and methods for integrating a compute resource with a storage device | |
CN117992125A (zh) | 减少用于基于存储器的通信队列的索引更新消息 | |
US20230051553A1 (en) | Multi-function flexible computational storage device | |
CN111666253B (zh) | 向具有共享存储器的共享处理元件的系统传递可编程数据 | |
EP4332747A1 (en) | Systems and methods for integrating a compute resource with a storage device | |
EP4332748A1 (en) | Systems and methods for integrating fully homomorphic encryption (fhe) with a storage device | |
CN117648203A (zh) | 多功能装置和用于多功能装置的方法 | |
CN117648052A (zh) | 多功能装置和用于多功能装置的方法 | |
JP2013196593A (ja) | データ処理装置、データ処理方法及びプログラム |
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 |