CN111061425A - 主机、非易失性存储器快速固态驱动器及存储服务的方法 - Google Patents
主机、非易失性存储器快速固态驱动器及存储服务的方法 Download PDFInfo
- Publication number
- CN111061425A CN111061425A CN201910860087.2A CN201910860087A CN111061425A CN 111061425 A CN111061425 A CN 111061425A CN 201910860087 A CN201910860087 A CN 201910860087A CN 111061425 A CN111061425 A CN 111061425A
- Authority
- CN
- China
- Prior art keywords
- message
- tunnel
- local
- statement
- procedure call
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 192
- 239000007787 solid Substances 0.000 title claims abstract description 36
- 230000002093 peripheral effect Effects 0.000 claims abstract description 28
- 239000000872 buffer Substances 0.000 claims description 339
- 239000003795 chemical substances by application Substances 0.000 claims description 101
- 230000005641 tunneling Effects 0.000 claims description 71
- 230000008569 process Effects 0.000 claims description 13
- 238000013500 data storage Methods 0.000 claims description 5
- 239000000945 filler Substances 0.000 claims 1
- 238000004519 manufacturing process Methods 0.000 description 67
- 230000032258 transport Effects 0.000 description 36
- 230000006870 function Effects 0.000 description 17
- 238000012545 processing Methods 0.000 description 17
- 230000008901 benefit Effects 0.000 description 12
- 238000004891 communication Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 10
- 230000005540 biological transmission Effects 0.000 description 9
- 230000007246 mechanism Effects 0.000 description 7
- 230000004044 response Effects 0.000 description 6
- 230000004048 modification Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000009467 reduction Effects 0.000 description 5
- 238000013459 approach Methods 0.000 description 4
- 238000001914 filtration Methods 0.000 description 4
- 238000004806 packaging method and process Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 230000007723 transport mechanism Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000007405 data analysis Methods 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 230000006855 networking Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 230000036316 preload Effects 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 241000270295 Serpentes Species 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 239000005441 aurora Substances 0.000 description 1
- 239000000969 carrier Substances 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
- 230000000694 effects Effects 0.000 description 1
- 238000005265 energy consumption Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 238000001926 trapping method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3027—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0653—Monitoring storage devices or systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0661—Format or protocol conversion arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Quality & Reliability (AREA)
- Computer And Data Communications (AREA)
- Information Transfer Systems (AREA)
- Paper (AREA)
- Lubricants (AREA)
- Noodles (AREA)
Abstract
本发明公开一种主机、非易失性存储器快速固态驱动器及存储服务的方法。所述主机可包括:主机处理器;存储器;操作系统,在所述主机处理器上运行;以及应用,在所述主机处理器上的所述操作系统下运行。所述主机还可包括:外围组件互连快速隧道,通往非易失性存储器快速固态驱动器;以及远程过程调用俘获模块,可俘获来自所述应用的所述远程过程调用并就像从所述主机处理器一样将所述远程过程调用的结果递送到所述应用,其中所述非易失性存储器快速固态驱动器可执行所述远程过程调用以产生所述结果。
Description
[相关申请的交叉参考]
本申请主张在2018年10月16日提出申请的美国临时专利申请第62/746,550号的权利,所述美国临时专利申请出于所有目的而并入本文供参考。
技术领域
本发明概念大体来说涉及计算机系统,且更具体来说涉及存储装置。
背景技术
在现代信息技术(Information Technology,IT)基础设施中,各种装置及过程产生极大量的数据。这些数据产生器的一些实例是智能机器、自主车辆、社交网络及物联网(Internet-of-Things,IOT)装置。正在开发新的人工智能(Artificial Intelligence,AI)及机器学习(Machine Learning,ML)算法来有效地分析所收集数据并使用所收集数据来实现甚至更大的应用效率及生产率。此类系统中最关键的事情是处理及分析数据。
在传统的系统架构中,将数据从持久存储装置提取到昂贵的高性能服务器,这些服务器使用高性能网络连接到存储装置。将这样大量的原始数据移动到中央处理器(central processing unit,CPU)以进行处理及分析在所消耗的能量以及所部署的计算及网络资源方面是昂贵的。其增加了例如网络带宽、CPU循环及CPU存储器等资源的负担。将大量原始数据移动到服务器以进行处理也会增加应用所经历的等待时间。在完成处理并作出决策之前,应用必须先等待数据被提取到服务器。这些增加的资源需求导致高资本及运营支出。
仍然需要一种减少成本并提高涉及大量数据处理的计算机系统的性能的方式。
发明内容
[发明所要解决的问题]
本发明概念的目标是提供一种处理大量数据、从而减少成本并提高性能的计算机系统。
[解决问题的技术手段]
根据本发明概念的一种主机包括:主机处理器;存储器;操作系统,在所述主机处理器上运行;应用,在所述主机处理器上的所述操作系统下运行,所述应用包括远程过程调用(remote procedure call,RPC);外围组件互连快速(Peripheral ComponentInterconnect Express,PCIe)隧道,通往非易失性存储器快速(Non-Volatile MemoryExpress,NVMe)固态驱动器(Solid State Drive,SSD);以及RPC俘获模块,位于所述操作系统中,用以俘获来自所述应用的所述RPC并就像从所述主机处理器一样将所述RPC的结果递送到所述应用。所述NVMe SSD可执行所述RPC以产生所述结果。
根据本发明概念的一种非易失性存储器快速(NVMe)固态驱动器(SSD)包括:接口,通往主机;数据存储装置;消息接收器,用以跨越所述接口经由外围组件互连快速(PCIe)隧道从所述主机接收第一消息,所述第一消息包含远程过程调用(RPC);消息解包器,用以从所述第一消息解包出所述RPC;存储内处理器,用以执行所述RPC,从而生成所述RPC的结果;消息包装器,用以将所述RPC的所述结果包装在第二消息中;以及消息发送器,用以跨越所述接口经由所述PCIe隧道将所述第二消息传输到所述主机。
根据本发明概念的一种存储服务的方法包括:拦截从应用到主机处理器的远程过程调用(RPC);通过外围组件互连快速(PCIe)隧道将所述RPC递送到非易失性存储器快速(NVMe)固态驱动器(SSD);通过所述PCIe隧道从所述NVMe SSD接收所述RPC的结果;以及就像从所述主机处理器一样将所述RPC的所述结果递送到所述应用。
[发明的效果]
根据本发明概念,将服务器的远程过程调用(RPC)卸载给NVMe SSD。由于服务器的任务负载降低,因此提供了成本减少且性能改善的计算机系统。
附图说明
图1示出根据本发明概念实施例向客户端计算机提供服务的一组服务器。
图2示出图1所示服务器的细节。
图3示出图1所示服务器及图2所示存储装置中的软件堆栈。
图4示出图3所示应用将远程过程调用(RPC)发送到图3所示微服务并接收对所述RPC的响应。
图5示出图1所示服务器的额外细节。
图6示出图3所示软件堆栈中可俘获由图3所示应用发出的RPC的各种位点。
图7示出用于跨越图3所示PCIe隧道进行通信的隧道代理及隧道代理缓冲器。
图8示出图7所示隧道代理的细节。
图9示出直接存储器存取(Direct Memory Access,DMA)引擎及图7所示隧道代理缓冲器的可能放置形式。
图10示出图2所示非易失性存储器快速(NVMe)固态驱动器(SSD)中的各种组件。
图11示出根据本发明概念实施例用于使图1所示服务器拦截来自图3所示应用的RPC并将其发送到图2所示NVMe SSD的示例性程序的流程图。
图12A至图12B示出用于使图1所示服务器俘获来自图3所示应用的RPC的示例性程序的流程图。
图13示出用于使图7所示主机隧道代理将消息发送到图7所示NVMe SSD隧道代理的示例性程序的流程图。
图14示出用于使图7所示主机隧道代理从图7所示NVMe SSD隧道代理接收消息的示例性程序的流程图。
图15示出根据本发明概念实施例用于使图2所示NVMe SSD处理来自图1所示服务器的RPC的示例性程序的流程图。
图16A至图16B示出用于使图2所示NVMe SSD通过图3所示PCIe隧道接收RPC的示例性程序的流程图。
图17示出用于使图7所示NVMe SSD隧道代理从图7所示主机隧道代理接收消息的示例性程序的流程图。
图18示出用于使图7所示NVMe SSD隧道代理将消息发送到图7所示主机隧道代理的示例性程序的流程图。
具体实施方式
现在将详细参照本发明概念的实施例,所述实施例的实例示出在附图中。在以下详细说明中,阐述许多具体细节以使得能够透彻地理解本发明概念。然而,应理解,所属领域中的一般技术人员无需这些具体细节便可实践本发明概念。在其他情形中,未对众所周知的方法、程序、组件、电路及网络予以详细阐述,以避免使实施例的各个方面不必要地模糊不清。
应理解,尽管本文中可能使用“第一”、“第二”等用语来阐述各种元件,然而这些元件不应受这些用语限制。这些用语仅用于区分各个元件。举例来说,在不背离本发明概念的范围的条件下,可将第一模块称为第二模块,且类似地,可将第二模块称为第一模块。
本文中在对本发明概念的说明中所使用的术语仅用于阐述具体实施例,而并非旨在限制本发明概念。除非上下文中清楚地另外指明,否则在对本发明概念的说明及随附权利要求书中所使用的单数形式“一(a/an)”及“所述(the)”旨在也包含复数形式。还应理解,本文中所用用语“和/或(and/or)”指代且囊括相关联的列出项中的一个或多个项的任意及所有可能组合。还应理解,当在本说明书中使用用语“包括(comprises及/或comprising)”时,是指明所陈述特征、整数、步骤、操作、元件和/或组件的存在,但不排除一个或多个其他特征、整数、步骤、操作、元件、组件和/或其群组的存在或添加。图式中的组件及特征未必按比例绘示。
尽可能地在存储装置内处理原始数据对于将数量增长的原始数据货币化所需的数据分析使用案例来说是一种具成本效益的解决方案。另外,通过消除数据移动,应用的响应等待时间可显著改善。此外,数据分析任务通常读取大量数据、处理所述数据并通过过滤及其他减少操作来减少所述数据。这些以及许多其他相似的任务完全符合基于固态驱动器(SSD)的服务,因为其两者均利用了装置内较高的可用带宽并通过仅移动减少的结果而在SSD与中央处理器(CPU)之间(即,外围组件互连快速(PCIe)接口))保留有限带宽。因此,能够较靠近存储装置或在存储装置内处理数据的技术是“数据时代(Data Age)”所需的新系统架构的基本部分。
在系统架构中使用客户端-服务器协议来清楚且高效地划分信息技术(IT)服务器基础设施。应用服务器(也被称为面向客户的前端服务器)托管面向终端用户的应用软件,而提供各种用户服务所需的实际重载数据处理是在后端服务器上完成。在前端服务器及后端服务器上运行的应用软件堆栈通常使用“客户端-服务器”协议来彼此进行通信。gRPC、JSON及HTTP是由一个主机机器上的应用软件堆栈用以存取一个或多个功能、程序或者更一般地在不同机器上托管及运行的“服务”的远程过程调用(RPC)机制及协议的实例。此客户端-服务器协议在逻辑级上实现驻留在不同的主机机器上且通过某些网络连接的各种应用程序之间的通信。客户端-服务器协议将客户端机器与服务器机器之间的通信的网络传送方面抽象化,从而简化应用程序设计。
顾名思义,远程过程调用远程地在服务器上执行特定程序,所述服务器代表呼叫客户端来提供此服务。所述程序因同一系统上的虚拟地址空间分隔(但物理地址空间相同)或者因通过网络分隔开而被称为“远程”的。当远程运行时,所述程序可涉及在其本地的数据,且这样一来会更高效地处理呼叫者的等待时间。所述RPC是一种在呼叫者的侧处对受呼叫程序的输入参数进行封装(也称为编组(marshalling))的机制。接收服务器侧上的RPC接收存根(stub)对所包装的输入进行解包并将其传递给服务。这样一来,实际内容的传输可为不透明的,而不管传输是本地的(不同的地址空间)还是远程的(通过网络连接的不同的系统)。由于RPC可在本地或远程地工作且可隐藏其地点,因此作出呼叫的应用无需知道服务器驻留在何处。众所周知的RPC使用实例为NFS、Microsoft.NET Remoting、XML-RPC、JSON-RPC及COBRA,此处仅举几例。
关于基于装置的服务机制,出现第三种使用类型,其中装置为本地的,但通过虚拟地址空间以及物理地址空间而分隔开。这是因为装置及应用托管其自身的物理地址空间,而所述物理地址空间无需像在x86架构上构建的传统系统中那样为同一个。这些独立的物理地址空间为装置供应商提供了将装置作为服务器进行托管的新途径。例如RPC等机制对于桥接应用与通过装置托管的服务器之间的通信来说是理想的,且这样一来可将现有使用方式无缝地过渡到新的装置特有实施方案。
通常,使用例如传输控制协议/互联网协议(Transmission Control Protocol/Internet Protocol,TCP/IP)等网络协议堆栈来实施RPC协议以进行通信。作为使用TCP/IP的替代方案,本发明概念的实施例可通过外围组件互连快速(PCIe)来传送RPC消息。PCIe并非是网络协议,而是在主机服务器或机箱内使用以将终端装置及外围设备连接到主机的总线接口。接着,可使用通过PCIe实现的gRPC隧道化(gRPC tunneling over PCIe)来将在x86主机上运行的软件堆栈连接到在直接附接到所述主机的非易失性存储器快速(NVMe)固态驱动器(SSD)上管托的服务。此种机制容许某些应用功能被卸载到直接附接存储(Direct-Attached Storage,DAS)NVMe SSD上并被加速,而无需对主机堆栈作出显著改变。
为便于举例,以下具体参照gRPC(即,最初在谷歌(Google)LLC开发的一种开放式源代码RPC实施方案)来阐述本发明概念的实施例,但本发明概念的实施例同样适用于其他RPC系统实施方案。对gRPC的任何参考应被理解为也适用于其他客户端-服务器协议,例如XML、JSON、HTTP等以及基于REST API的协议。
通过PCIe将gRPC隧道化
例如gRPC等“客户端-服务器”协议通常是在客户端及服务器位于使用网络互连而连接的不同服务器机器上时使用。使用例如以太网上TCP/IP等的网络协议来作为传送机制。并非以此种方式使用TCP/IP及以太网,本发明概念的实施例使“客户端”能够位于服务器机器上且“服务器”能够位于NVMe SSD上。NVMe SSD使用PCIe主机接口来与主机CPU进行通信。NVMe SSD直接附接到CPU(DAS),而非使用网络协议作为传送机制。因此,需要一种用于在DAS模式中使能主机CPU与NVMe SSD之间的“客户端-服务器”通信的解决方案。出于此种目的,需要一种可将在主机上运行的“客户端-服务器”协议隧道化到NVMe SSD的方法。通过此种方法,使用客户端-服务器方法学的现有应用将在此种系统架构中工作,而无需作出任何显著改变(且可能根本无需任何改变)。另外,可使用“客户端-服务器”方法学来开发可受益于从存储装置提供的数据处理服务的新应用。使用本发明概念实施例的应用可为便携式的且对于基础的存储及联网基础设施并不知晓。此类应用可受益于尽可能地在存储装置本身中进行数据处理,从而显著缩减向主机CPU的数据移动。数据移动的减少在能量消耗的减少、计算资源的减少及网络基础设施成本的降低方面提供显著益处。
通过PCIe将gRPC隧道化需要两个主要组成部分:1)拦截gRPC消息;以及2)跨越PCIe接口以可靠的有序方式传送gRPC消息。
存在多种可在通过网络接口发送gRPC消息之前俘获所述gRPC消息的方式。接着,可将所俘获gRPC消息转交给PCIe隧道模块,以传送到另一侧。此种gRPC隧道化可以全双工方式在两个方向上完成。所提出的PCIe隧道可为消息提供可靠的有序传送。也就是说,PCIe隧道模块可以gRPC消息被接收的相同次序来传送gRPC消息。PCIe隧道可管理消息流控制以及因PCIe级错误而需要的任何重传。存在多种可以不同的折衷方案来实施PCIe隧道的方式。本文所述的隧道化方法也可应用于其他主机-装置接口,例如Gen-Z、CCIX及OpenCAPI。后续章节阐述gRPC消息俘获/重放及PCIe隧道的细节。
gRPC呼叫拦截
为跨越PCIe来隧道化传输gRPC消息,在gRPC客户端与gRPC服务器之间行进的那些消息首先需要在一端上被俘获并被递送且在另一端上被重放。
消息的拦截点决定了消息在进入PCIe隧道中之前所遍历的主机软件堆栈深度。这又影响整体客户端-服务器堆栈的性能。一般来说,主机软件堆栈中的俘获点越高,性能越佳,但对软件堆栈的改变可能越复杂。
1)gRPC中间人(Man-in the-Middle,MitM)方法
在本发明概念的一些实施例中,可使用中间人(MitM)模块来俘获gRPC消息。基本上,MitM填充码(shim)模块俘获gRPC消息并将gRPC消息发送到PCIe隧道模块。
MitM模块使用以下两种函数:
bool PUSH(queue,msg_data);//返回成功或失败。不应失败。
msg_data POP(queue);//返回数据,或者如果通道为空的,则返回NULL。
这些消息推送/弹出函数连同两个队列一起使用:请求消息队列及响应消息队列。PCIe隧道模块实质上通过这两个队列与MitM模块介接,以交换gRPC消息。
2)系统呼叫俘获方法
在本发明概念的其他实施例中,gRPC及其他客户端-服务器协议使用套接字系统呼叫来建立通信通道。用于执行gRPC连接的系统呼叫的实例包括Socket()、Sendmsg()、Rescvmsg()。所识别系统呼叫可被重新实施并取代原始库函数。作为实例,Linux操作系统(operating system,OS)中的动态链接器可使用LD_PRELOAD特征链接到所识别系统呼叫的新定义。LinuxOS中的LD_PRELOAD特征提供一种供应标准库的替代性符号定义的机制。接着,可使用所拦截的系统呼叫来俘获gRPC消息并将gRPC消息转发到PCIe隧道模块。
还可仅将原始系统呼叫包装在新定义中而非完全地取代所述原始系统呼叫。也就是说,所识别系统呼叫的新定义又可为除被隧道化的gRPC及/或其他客户端-服务器协议之外的所有应用呼叫原始函数。
3)以太网帧传送
在本发明概念的其他实施例中,可通过PCIe隧道发送携载gRPC消息的以太网帧。本发明概念的这些实施例可涉及对软件堆栈的显著较少的改变,但具有增加等待时间的潜在成本。过滤模块可基于对网络协议字段的检验来识别适当的以太网帧。此种过滤可检查以太网、TCP、UDP、IP等报头,以识别与受关注gRPC连接有关的以太网帧。接着,将所识别帧传递到PCIe隧道上以发送到NVMe SSD,而非通过以太网媒体存取控制(Medium AccessControl,MAC)沿着正常路径发送到远程网络目的地。可在相反方向上(即,从NVMe SSD到主机)执行相似的以太网帧过滤操作。
4)gRPC端点虚函数表(vtable)
在本发明概念的其他实施例中,可使用端点虚函数表定义来定义gRPC传送层。传统上,gRPC定义三种传送:HTTP/2、Cronet及In-Process。在本发明概念的这些实施例中,可使用通过grpc_endpoint_vtable提供的抽象化来定义第四种传送机制。由于RPC可在本地及远程地扩展所述定义,因此在利用此种传送时,本发明概念的此类实施例可将本地服务器及远程服务器抽象化。还可将此类gRPC传送抽象化成例如远程直接存储器存取(RemoteDirect Memory Access,RDMA)及TCP等网络接口。
以下表1提供可使用本发明概念的这些实施例公开的虚函数表中的示例性程序呼叫。
表1
为建立gRPC传送,可实施创建函数来建立端点表。
PCIe隧道
PCIe隧道提供一种用于将消息从主机传送到NVMe SSD及从NVMeSSD传送到主机的方法。PCIe隧道对实际消息内容并不知晓且不对消息进行解译。就PCIe隧道而言,消息只是正以可靠的有序方式输送到隧道另一侧的数据块。PCIe隧道可使用PCIe存储器读取与PCIe存储器写入事务来执行数据输送。存在多种以不同的折衷方案来实施PCIe隧道的方法。
1)单独的存储器模型
在本发明概念的一些实施例中,主机及NVMe SSD可具有可由彼此写入的单独的隧道代理缓冲器。本发明概念的此类实施例不使用来自两侧的PCIe存储器读取事务。由于PCIe存储器读取事务是非发布操作(non-posted operation),因此其往往具有性能影响。当一端需要向另一侧发送消息时,所述一端可将所述消息写入到远程缓冲器。远程端可监视对其本地接收缓冲器的写入并从所述缓冲器检索消息。隧道代理通过将各缓冲器的适当读取指针及写入指针彼此进行交换来实现进行通信所需的流程控制。通过消除PCIe读取,本发明概念的此类实施例可提供高性能、全双工PCIe隧道。
可在隧道的每一端处使用隧道代理(Tunnel Agent,TA)。PCIe隧道在如下意义上是对称的:可在两端处将同一TA模块实例化。每一TA具有本地缓冲存储器,以从远程TA接收消息。TA可使用四个指针来进行消息交换及流程控制。TA维持两个指针:1)RL(本地读取),用以从其本地缓冲器读取所接收的消息;以及2)WR(远程写入),用以将新消息传输到远程端。所述TA从远程TA将另两个指针接收在缓冲器中的固定位置处:3)RR(远程读取),用以知道远程TA是否具有可用于新消息的空间;以及4)WL(本地写入),用以知道已由远程TA写入了多少可由本地TA读取的消息数据。在这些指针中,“R”表示读取地址且“W”表示写入地址;“L”表示本地地址且“R”表示远程地址。
在适用的情况下,可通过较高级软件或固件来向每一TA实例告知本地缓冲器及远程缓冲器的基址及大小。使用这四个缓冲器指针并仅使用PCIe存储器写入事务,两个TA可建立高性能、全双工PCIe隧道以交换可变大小的消息。
当TA想要传输消息时,其使用其WR指针来将所述消息写入到远程TA缓冲器。在写入所述消息之后,所述TA可更新远程缓冲器中固定位置处的WR指针。接着,远程TA可使用经更新WR指针来知道其已接收到新消息。所述TA还可更新RL指针来告知远程TA:其具有用以接收更多消息的空间(例如,在从所述TA本地的缓冲器去除消息时)。每一TA使用所述四个缓冲器指针来计算可用于读取的本地数据量及可用于写入的远程空间量。这些数据及空间可用值又用于实现可靠的消息输送。各缓冲器是以环形方式使用:读取指针及写入指针在达到最大值(即,缓冲器大小)之后绕回到零。表2示出四个缓冲器指针,且表3示出可从所述四个缓冲器指针推断出何种信息。
表2
用语 | 注释 |
W<sub>L</sub> | 缓冲器的本地写入指针,从远程TA接收,在缓冲器中的固定位置处。 |
R<sub>R</sub> | 缓冲器的远程读取指针,从远程TA接收,在缓冲器中的固定位置处。 |
W<sub>R</sub> | 远程写入指针,用以将消息发布到远程对等者。 |
R<sub>L</sub> | 本地读取指针,用以排出从远程对等者接收的消息。 |
以上四个指针用于如以下所述来计算本地数据及远程空间可用状态。
表3
可通过位于SSD基址寄存器(Base Address Register,BAR)地址空间中固定偏移处的寄存器来报告主机存储器及SSD存储器中单独的缓冲器的位置及大小。SSD可在电源开启之后通过可由主机读取的BAR寄存器来告示其本地缓冲器地址及大小。主机可将主机存储器中其自身缓冲器的位置及大小配置到SSD BAR地址空间中可由SSD读取的众所周知的寄存器。如果需要,则可通过使用多个缓冲器来支持多个消息通道。
在本发明概念的这些实施例中,在任一侧上相应指针应仅存在一个拥有者。对于主机及应用,可使用中央内核装置驱动程序或用户空间中相似的内容来实施TA及缓冲器。
在使用环形队列缓冲器模型的本发明概念一些实施例中,TA可仅公开短缓冲器,所述短缓冲器包含位于可由远程TA存取的其他存储器部分中的物理页集合。本发明概念的此类实施例提供对实际隧道数据缓冲器位置的间接通达。可如上所述来处理指针,但可将实际隧道数据放置在这些短缓冲器内列出的页位置中。此种模型提供了具有可由其本地拥有者改变的数据缓冲器位置的可扩缩缓冲器方案。举例来说,一个TA可最初请求16M字节的总数据缓冲器大小,且稍后随着时间推移将总数据缓冲器大小改变成256M字节。可更新SSD或主机隧道代理缓冲器位置,以便以对应的缓冲器值反映出新的大小。由于包含数据缓冲器地址集合的任一端处的环形缓冲器队列均为小的,因此可随着时间推移视需要将所述环形缓冲器队列复制并扩展成多个队列。
2)共享存储器模型
在本发明概念的其他实施例中,NVMe SSD(或主机)可提供通过PCIe接口与另一装置共享的存储器缓冲器。基本上,存储装置或主机可提供使用PCIe BAR向另一侧告示的存储器缓冲器。接着,所述另一侧可使用PCIe存储器读取/写入事务来对共享缓冲器进行读取或写入。换句话说,正从PCIe接口的另一侧存取共享存储器的一方可负责跨越PCIe接口将消息移动到缓冲器。举例来说,如果NVMe SSD将其存储器缓冲器与主机共享,则主机负责在主机存储器缓冲器与NVMe SSD存储器缓冲器之间来回移动消息;NVMe SSD从本地缓冲存储器读取及向本地缓冲存储器写入其消息。共享缓冲器在托管装置中的位置可相对于BAR地址为固定的,或者可通过BAR地址空间中固定位置处的寄存器被告示给另一方。可通过另一固定BAR偏移来载明缓冲器的大小。消息流控制相关信息也相似地通过BAR地址空间中固定位置处的寄存器而在主机与NVMe SSD之间共享。可通过多个此类缓冲器来支持多个隧道通道。
如果NVMe SSD使用本发明概念的这些实施例将其存储器缓冲器与主机共享,则主机软件可执行所有PCIe事务以在主机与NVMe SSD之间移动消息。从性能观点来看,此种实施方案可能并非是最优的。
如以上所表明,共享存储器也可位于主机侧上,且存储装置可对所述缓冲器执行所有PCIe读取/写入事务。在本发明概念的此类实施例中,主机不执行PCIe事务,因此整体性能可更佳。主机软件可轮询共享缓冲器,以检查是否从NVMe SSD接收到消息。NVMe SSD还可在将消息存放在主机存储器中之后向主机发出中断,例如MSI或MSI-X。通过使用中断模型,主机软件可无需轮询其传入缓冲器,而是仅使用所接收中断作为触发来读出所接收消息。可通过位于NVMe SSD BAR地址空间中固定偏移处的寄存器来向NVMe SSD隧道代理指示主机存储器中共享缓冲器的位置及大小。消息流控制相关信息也通过SSD BAR地址空间中的固定位置而在主机与NVMe SSD之间共享。可使用多个缓冲器来支持数个消息通道。
图1示出根据本发明概念实施例向客户端计算机提供服务的一组服务器。在图1中,示出服务器105-1、105-2及105-3通过网络115与客户端机器110进行通信。一般来说,服务器系统包括提供服务的多于一个服务器,但可存在任何数目的服务器,甚至恰好一个。
网络115可为任何所需种类的网络,包括局域网(Local Area Network,LAN)、广域网(Wide Area Network,WAN)、城域网(Metropolitan Area Network,MAN)及例如互联网等全球网。另外,网络115可包括有线网络、无线网络或这两者。网络115还可包括这些网络的组合:例如,客户端机器110可经由LAN(包含客户端机器110)、全球网及LAN(包含服务器105-1)与服务器105-1连接。
虽然图1将服务器105-1、105-2及105-3绘示为服务器(其可为独立式服务器或机架式服务器),但本发明概念的实施例可包括任何所需类型的服务器105-1、105-2及105-3,而不受限制。相似地,客户端机器110可为任何所需类型,而不受限制。举例来说,服务器105-1可被替换成桌上型或膝上型计算机、或者可受益于本发明概念实施例的任何其他机器。服务器105-1也可包括专门化便携式计算机器、平板计算机、智能电话及其他计算机器。
图2示出图1所示服务器105-1、105-2及105-3(在本文的其余部分,简称为服务器105)的细节。在图2中,通常,服务器105包括一个或多个处理器205,处理器205可包括存储器控制器210及时钟215,时钟215可用于协调服务器105的各组件的操作。处理器205可为任何种类的处理器:例如,英特尔至强(Intel Xeon)、赛扬(Celeron)、安腾(Itanium)、或凌动(Atom)处理器、AMD皓龙(AMD Opteron)处理器、ARM处理器等。尽管图2示出服务器105中的单个处理器205,但服务器105可包括任何数目的处理器,所述处理器中的每一者可为单核处理器或多核处理器且可以任何所需组合进行混合。
处理器205还可耦合到存储器220。存储器220可为任何种类的存储器,作为实例,例如闪存存储器、动态随机存取存储器(Dynamic Random Access Memory,DRAM)、静态随机存取存储器(Static Random Access Memory,SRAM)、持久随机存取存储器、铁电随机存取存储器(Ferroelectric Random Access Memory,FRAM)、非易失性随机存取存储器(Non-Volatile Random Access Memory,NVRAM)(例如磁阻随机存取存储器(MagnetoresistiveRandom Access Memory,MRAM)等或其他状态保存介质)。存储器220还可为不同存储器类型的任何所需组合。
处理器205还可耦合到存储装置225。如以下所述,存储装置225可为通过外围组件互连快速(PCIe)接口与处理器205进行通信的任何所需形式的存储装置:以下使用非易失性存储器快速(NVMe)固态驱动器(Solid State Drive,SSD)作为实例。
处理器205还可耦合到网络连接器230,网络连接器230可例如为以太网连接器或无线连接器。处理器205还可连接到总线235,用户接口240以及可使用输入/输出引擎245以及其他组件进行管理的输入/输出接口端口可附接到总线235。
图3示出图1所示服务器105及图2所示存储装置225中的软件堆栈。在图3中,示出可在图2所示处理器205上运行的应用305-1及305-2。尽管图3示出两个应用305-1及305-2,但本发明概念的实施例可支持在任何给定时间运行的任何数目的应用,且在图2所示处理器205上执行的应用305-1及305-2的数目可随着时间而变化。每一应用305-1或305-2可起始远程过程调用(RPC)。在传统的服务器中,应用305-1及305-2预期使图2所示处理器205来执行RPC。本发明概念的实施例可不需要对应用305-1及305-2进行修改,从而允许现有应用受益于对RPC的存储内执行(in-storage execution)。
传统上,当应用305-1及305-2发出RPC时,所述RPC由RPC客户端310-1及310-2接收。尽管图3示出应用305-1及305-2中的每一者与单个RPC客户端310-1及310-2进行交互,但可存在任何数目的RPC客户端310-1及310-2(例如,由一个RPC客户端来支持通过RPC提供的每一服务),且由哪一RPC客户端310-1及310-2处理RPC可取决于所请求的服务。因此,本发明概念的实施例可包括任何数目的RPC客户端310-1及310-2,且应用305-1及305-2可视需要与任何及/或所有RPC客户端310-1及310-2进行交互。
RPC客户端310-1及310-2可将所述RPC(可能以适当的传送协议进行包装:例如,以载明由哪一RPC客户端310-1及310-2处理了所述RPC)传递给RPC层315。接着,RPC层315可以另一传送协议进一步包装所述RPC,以将所述RPC传递给网络堆栈330。接着,网络堆栈330可以又一传送协议包装所述RPC(例如,作为使用传输控制协议/互联网协议(TCP/IP)发送的以太网数据),所述RPC将接着经由网络端口325通过网络连接被发送到其目的地(其可为与应用305-1及305-2在同一服务器105内的图2所示处理器205,或者可位于物理上不同的服务器中)。RPC客户端310-1及310-2、RPC层315及网络堆栈330均可为在图2所示处理器205上运行的操作系统335的一部分。应注意,图3是软件堆栈的简化图,且未必示出软件堆栈的(或操作系统335的)所有元件。另外,视实施方案而定,软件堆栈可省略图3中所示的一些元件(或者将其替换成可以相似方式运行但具有不同名称的元件)。
NVMe SSD 225传统上不支持网络连接,而是使用PCIe接口来与图2所示处理器205进行通信。如果NVMe SSD 225包括网络连接,则可将NVMe SSD 225简单地实施成通过所述网络连接提供传统RPC及接收所述RPC;但在没有网络连接的情况下,如同在传统系统中一样,NVMe SSD 225可不支持接收通过网络连接发送的RPC请求。因此,解决方案是在某一点处拦截(或俘获)RPC呼叫并跨越PCIe隧道320将所拦截的RPC呼叫发送到NVMe SSD 225,PCIe隧道320连接图2所示处理器205与NVMe SSD 225。
如以下所述,在服务器105中的软件堆栈内存在可俘获RPC的各种不同的位点。在本发明概念的大多数实施例中,预期可将RPC(由NVMe SSD 225执行)的结果在同一点处插回到软件堆栈中。举例来说,如果RPC是在RPC客户端310-1或310-2与RPC层315之间俘获,则预期将在同一点处将RPC的结果插入到软件堆栈中;如果RPC是在网络堆栈下方俘获,则预期将在同一点处将RPC的结果插入到软件堆栈中。然而,尽管将RPC呼叫的结果在同一位点处插入软件堆栈中是有用的,但并不要求在所述位点处插入结果:此选择仅仅是为了方便对称起见(且避免可能因软件堆栈中的任何层对原本可能在更高层处插入到软件堆栈中的回复进行跟踪而出现的任何复杂因素)。因此,可能存在如下情况:可在软件堆栈中的一个层处俘获RPC且可在软件堆栈的另一层处插入RPC的结果。
还值得注意的是,在服务器105内可并行使用多种技术来俘获RPC。举例来说,服务器105可在网络堆栈下方俘获RPC(以确保可发送到NVMe SSD的任何RPC均被识别出),但也提供可作为来自应用的新系统呼叫的结果而使用的新传送层实施方案(new transportlayer implementation)。任何给定服务器105均可实施任何数目的RPC俘获技术。
为支持可包括任何数目的不同RPC俘获技术的服务器105,NVMe SSD 225可包括镜射在服务器105上实施的软件堆栈。这样一来,NVMe SSD可能够确保使RPC的结果在软件堆栈中的适当点处返回到服务器105。为此,NVMe SSD 225可包括微服务340-1及340-2、RPC服务器345-1及345-2、RPC层350、以及网络堆栈355、以及PCIe隧道320的端部。微服务340-1及340-2可为由NVMe SSD 225支持的单独服务:尽管图3示出两个微服务340-1及340-2,但本发明概念的实施例可包括任何数目的微服务340-1及340-2。RPC服务器345-1及345-2用作RPC客户端310-1及310-2的镜像,其中每一微服务340-1及340-2有一个RPC服务器345-1及345-2。RPC服务器345-1及345-2(最终)接收RPC并将RPC的参数传递给微服务340-1及340-2以由存储内处理器(图3中未示出)执行。通过添加/去除适当的协议信息以与软件堆栈中的相邻层介接,RPC层350及网络堆栈355可与RPC层315及网络堆栈330相似地发挥作用。
图4示出图3所示应用305-1将远程过程调用(RPC)发送到图3所示微服务340-1并接收对所述RPC的响应。在图4中,应用305-1可发出RPC 405。如以上所述,应用305-1可假定RPC 405将由图2所示处理器205处理,且可能不知晓RPC 405实际上最终由图2所示NVMeSSD 225处理。在图3所示软件堆栈中的某一点处,RPC 405被俘获并被重新引导到图2所示NVMe SSD 225,NVMe SSD 225最后将RPC 405引导到微服务340-1以进行执行。在执行RPC405之后,微服务340-1产生结果410,结果410接着可被发送回到应用305-1(例如,反转用于将RPC 405从应用305-1“发送”到微服务340-1的路径)。
图5示出图1所示服务器105的额外细节。在图5中,服务器105被示作包括处理器205、存储器控制器210、存储器220、应用305-1、操作系统335及RPC俘获模块505。处理器205、存储器控制器210及存储器220是如上所述被配置;应用305-1可在处理器205上运行且与操作系统335进行通信,操作系统335又可包括例如图3所示那些元件等的元件。
与图3所示操作系统335相比,图5中的操作系统335还可包括RPC俘获模块505。如以上所述,由应用305-1发出的RPC可在图3所示软件堆栈内的任何数目的位点处被俘获:因此,RPC俘获模块505的具体实施方案可随着其放置而变化。RPC俘获模块505可实施为在处理器205上运行的软件(例如,实施为操作系统335的一部分或操作系统335的插件)、实施为在适当硬件上运行的固件、或者甚至实施为严格的硬件模块(例如,被设计成就在通过导线发出以太网帧之前俘获所述以太网帧)。
图6示出图3所示软件堆栈中可俘获由图3所示应用305-1发出的图4所示RPC 405的各种位点。在图6中,再次示出图3所示软件堆栈,但这次示出图5所示RPC俘获模块505的一些可能实施方案。
在本发明概念的一些实施例中,图5所示RPC俘获模块505可实施为中间人(MitM)填充码605。MitM填充码605可俘获由RPC客户端310-2发出的RPC。接着,MitM填充码605可安排经由路径610(其可例如为PCIe总线)跨越PCIe隧道320将所俘获RPC发送到图2所示NVMeSSD 225。
使用MitM填充码605的优点是,图4所示RPC 405非常早地被俘获。这避免了需要软件堆栈中的额外层(例如RPC层315及网络堆栈330)来处理图4所示RPC 405,这又减少处理图4所示RPC 405所花费的时间量。使用MitM填充码605的缺点是,每一RPC客户端310-1及310-2均可需要具有其自身的MitM填充码605,这取决于由所述RPC客户端处理的RPC是否可通过PCIe隧道320被重新引导到图2所示NVMe SSD 225,从而导致代码的多重性(MitM填充码605可存在与RPC客户端一样多的副本)。
在本发明概念的其他实施例中,可使用系统呼叫615来实施图5所示RPC俘获模块505。可对这些系统呼叫(例如Socket()、Sendmsg()及Rescvmsg())进行修改,以支持经由路径610将各种RPC引导到图2所示NVMe SSD 225。
在本发明概念的一些实施例中,可重新实施所讨论的系统呼叫,以将其原始定义替换成新的定义。接着,可将这些被重新实施的系统呼叫链接到操作系统中,以代替原始实施方案来加以使用。举例来说,在Linux操作系统中,可使用LD_PRELOAD环境变量来载明替换库位于何处,以提取系统呼叫的被重新实施的版本。这些实施方案避免了对改变应用或重建操作系统的需要,代价是使被重新实施的系统呼叫能够正确地处置所有RPC,这是因为一些RPC可通过PCIe隧道320被重新引导到图2所示NVMeSSD 225且其他RPC可如同在传统的系统中一样通过网络端口325被发出。
在本发明概念的其他实施例中,所讨论的系统呼叫可被“包装”。也就是说,可定义由操作系统首先呼叫的新系统呼叫。这些新系统呼叫接着判断是将调用原始系统呼叫还是特殊系统呼叫,所述特殊系统呼叫通过PCIe隧道320发送图4所示RPC 405。这些实施方案因为仍使用原始系统呼叫而需要较少的编码,但需要重建操作系统(因为应呼叫包装器而非原始系统呼叫)。
在本发明概念的又一些实施例中,图5所示RPC俘获模块505可实施为帧检验器620。帧检验器620可审查由网络堆栈330产生的以太网帧,识别包含图4所示RPC 405的帧,并经由路径610通过PCIe隧道320来发送那些帧;不包含图4所示RPC 405的帧可被正常地发送到网络端口325。帧检验器可对帧进行“解包”,以去除用于包装RPC的各种协议,从而判断单独的帧是否与图4所示RPC 405相关。
帧检验器620的优点是,需要对软件堆栈作出极少改变来实施RPC俘获模块505。帧检验器620的缺点是,应检验每一帧来判断其是否包含RPC,这可使对不包含将通过PCIe隧道320被重新引导到图2所示NVMe SSD 225的图4所示RPC 405的数据的处理减速,且图4所示RPC 405将会经历软件堆栈中的众多层级的处理,从而增加图4所示RPC 405的响应等待时间。
在本发明概念的又一些实施例中,图5所示RPC俘获模块505可实施为新传送层625。也就是说,可将整个新传送层定义成处置将经由路径610通过PCIe隧道320被重新引导到图2所示NVMe SSD 225的图4所示RPC 405。以上表1中示出了可被定义成实施新传送层625的命令的实例。
使用新传送层625的优点是,可在软件堆栈中相当高处俘获图4所示RPC 405,从而减少图2所示NVMe SSD 225的响应等待时间以处理图4所示RPC 405。使用新传送层625的缺点是,为了使用新传送层625,可需要修改RPC客户端310-1及310-2,从而以超出图5所示RPC俘获模块505的方式修改软件堆栈。
尽管图6示出本发明概念的所有各种实施例是经由单个路径610与PCIe隧道320进行通信,但本发明概念的实施例可使用不同的路径来将图4所示RPC 405发送到PCIe隧道320。图6不应被理解为暗示:仅存在一个到达PCIe隧道320的路径610,且本发明概念的所有实施例应使用所述单个路径610。
如以上所提及,软件堆栈可包括可俘获图4所示RPC 405的多个点。因此,图6所示软件堆栈可包括图5所示RPC俘获模块505的所述实施方案中的任一者或全部(以及可能以上未具体阐述的其他实施方案)。由于RPC俘获模块505可包装在软件堆栈中的数个不同点处俘获的图4所示RPC 405,因此RPC俘获模块505可将任何数目的不同数据形式包装成消息以通过图3所示PCIe隧道320进行传输。
此外,如以上参照图3所述,图2所示NVMe SSD 225可包括其自身的镜射图3所示软件堆栈的软件堆栈。因此,图2所示NVMe SSD 225可包括与RPC俘获模块505的实施方式对应的类似元件,以帮助将图4所示RPC 405的图4所示结果410在适当位置中插回到图3所示服务器105中的软件堆栈中。对图2所示NVMe SSD 225的软件堆栈添加的这些元件未在图6中示出,但应被理解为适当地对应于图6所示且以上所述的元件。
图7示出用于跨越图3所示PCIe隧道320进行通信的隧道代理及隧道代理缓冲器。在图7中,再次示出PCIe隧道320连接图2所示主机处理器205与图2所示NVMe SSD 225。在PCIe隧道320的每一侧上有隧道代理:在图2所示主机处理器205的侧上示出隧道代理705-1,且在图2所示NVMe SSD 225的侧上示出隧道代理705-2。应注意,隧道代理705-1与705-2的操作为相同的(如果彼此互为镜像地运行),且因此可使用共同的软件库及/或硬件库来实施。
PCIe隧道320的每一侧还包括隧道代理缓冲器:在图2所示主机处理器205的侧上示出隧道代理缓冲器710-1,且在图2所示NVMe SSD 225的侧上示出隧道代理缓冲器710-2。隧道代理缓冲器710-1及710-2是用以跨越PCIe隧道320传递消息的机构。如以下将进一步论述,隧道代理缓冲器710-1及710-2可以或可不物理上位于PCIe隧道320的相应侧上,但可以像如图所示被定位的那样使用。隧道代理缓冲器710-1及710-2可实施为可被读取及写入的存储装置:例如,被实施为存储器或其他存储装置。隧道代理缓冲器710-1及710-2可使用任何所需方法来实施,但记住应依序传递消息的目标,先进先出(First In,First Out,FIFO)队列是可取的,例如,其可使用环形缓冲器来实施。
值得理解的是,尽管隧道代理705-1及705-2知晓彼此,但其彼此部分独立地运行。也就是说,任一隧道代理可从隧道代理缓冲器710-1及710-2读取消息或向隧道代理缓冲器710-1及710-2写入消息,只要隧道代理缓冲器710-1及710-2能够执行读取及写入即可。举例来说,如果隧道代理缓冲器中不存在要读取的消息,则隧道代理可能读取不到任何消息,且如果隧道代理缓冲器是满的,则隧道代理可能不能写入新的消息。
从PCIe隧道320的一侧的角度来看,PCIe隧道320的那一侧上的隧道代理及隧道代理缓冲器可被称为本地隧道代理及本地隧道代理缓冲器,且PCIe隧道320的另一侧上的隧道代理及隧道代理缓冲器可被称为远程隧道代理及远程隧道代理缓冲器。因此,举例来说,在图2所示主机处理器205的侧上,隧道代理705-1及隧道代理缓冲器710-1为本地的,且隧道代理705-2及隧道代理缓冲器710-2为远程的,而在图2所示NVMe SSD 225的侧上为相反情况。因此,用语“本地”及“远程”是相对于PCIe隧道320的从中观察系统的侧而言的。“本地”也不一定被视为意指“在…内部”。举例来说,如以下参照图9所述,在PCIe隧道320的主机侧上,可使用PCIe隧道320的共享缓冲器模型,其中隧道代理缓冲器710-1及710-2两者在物理上位于同一存储器内。但即使在特定隧道代理“本地”的隧道代理缓冲器可在物理上位于PCIe隧道320的“远程”侧上,所述隧道代理缓冲器仍应被理解为“本地”的。
每一隧道代理705-1及705-2包括进入隧道代理缓冲器710-1及710-2的两个指针:一个指针用于从本地隧道代理缓冲器读取消息,且另一指针用于向远程隧道代理缓冲器写入消息。可基于这些指针是用于读取消息还是写入消息以及这些指针是指向本地隧道代理缓冲器还是远程隧道代理缓冲器来标记这些指针。因此,使用以上表2中所示的标记并使用隧道代理705-1的角度,指针715-1为指针RL,指针715-2为指针RR,指针720-1为指针WR,且指针720-2为指针WL。另一方面,从隧道代理705-2的角度来看,指针715-2为指针RL,指针715-1为指针RR,指针720-2为指针WR,且指针720-1为指针WL。两个隧道代理可存取另一隧道代理所“拥有”的指针的值。从现在开始,将通过指针的标记而非其图参考编号来指代所述指针。
现在考虑隧道代理705-1。隧道代理705-1可通过对指针RL与WL的值进行比较来检查以查看是否存在要从(本地)隧道代理缓冲器710-1读取的任何消息:如果各值相等,则不存在要读取的消息。否则,隧道代理705-1可读取消息并更新RL(基于消息的大小)。
如果隧道代理705-1想要向(远程)隧道代理缓冲器710-2写入消息,则隧道代理705-1可通过对指针RR与WR的值进行比较来检查以查看是否存在用以写入所述消息的空间:如果隧道代理缓冲器710-2的大小减去由未决消息占据的空间量(在数学上,SIZERTAB–(WR–RR))(以SIZERTAB为模)小于隧道代理705-1想要写入的消息的大小,则不存在充足空间来写入所述消息。否则,隧道代理705-1可写入消息并更新WR。(隧道代理705-2以相同方式操作,但因哪一隧道代理缓冲器被视为本地的及哪一隧道代理缓冲器被视为远程的而使用不同的指针来操作。)
就消息本身来说,存在可用于发送消息的两种不同的方式。在本发明概念的一些实施例中,本地隧道代理可将消息725(全部地)写入到远程隧道代理缓冲器中。但由于消息的大小可变化,因此此种方法需要较复杂的方法来判断远程隧道代理缓冲器是否具有用于任何单独消息的容量。在本发明概念的其他实施例中,本地隧道代理可将消息725写入到某一其他共享位置,且接着将地址730写入到远程隧道代理缓冲器中。由于地址730具有可预测(且通常固定的)大小,因此通过进行(WR+SIZEMessage)==RR(以远程隧道代理缓冲器的大小为模)的较简单比较来判断远程隧道代理缓冲器是否具有用于另一消息的容量,代价是增加了将消息725从地址730解除参考的复杂性。(当然,如果消息的大小始终为固定的,则甚至在消息725被直接放置在远程隧道代理缓冲器中时,也可使用较简单方程式。)
图8示出图7所示隧道代理705-1的细节。在图8中,隧道代理705-1被示作包括消息包装器805、消息发送器810、容量检查815、信号器820、消息接收器825、消息解包器830、接收器835及指针存储装置840。消息包装器805可包装用于跨越图3所示PCIe隧道320递送的消息。举例来说,如果消息包含由图3所示应用305-1请求的图4所示RPC 405,则消息包装器805可将图4所示RPC 405存储成其自身的数据结构,所述数据结构具有适当的报头信息(例如,载明图5所示RPC俘获模块505在何点处俘获了图4所示RPC 405、或者打算使哪一微服务340-1或340-2执行图4所示RPC 405)。消息发送器810可将消息放置在远程隧道代理缓冲器中。消息发送器810还可负责使用容量检查815(如上所述)来验证远程隧道代理缓冲器是否具有用于消息的容量;如果远程隧道代理缓冲器不具有用于消息的容量,则消息发送器810可等待以直到远程隧道代理缓冲器具有用以存储消息的容量才发送所述消息(以及等待发送的任何后续消息)。最终,在本发明概念的一些实施例中,(本地)隧道代理705-1可包括信号器820,以向图7所示(远程)隧道代理705-2发送已将新消息放置在图7所示(远程)隧道代理缓冲器710-2中的信号。举例来说,信号器820可向(远程)隧道代理发送新消息等待被读取的中断信号。
消息接收器825可从本地隧道代理缓冲器读取消息。消息解包器830可对所读取消息进行解包,以提取内容。举例来说,如果消息是图4所示结果410,则消息解包器830可从所述消息提取图4所示结果410并将图4所示结果410递送到图3所示应用305-1,好像图2所示主机处理器205执行了图4所示RPC 405一样。最后,在本发明概念的一些实施例中,(本地)隧道代理705-1可包括接收器835,以在新消息已被放置在图7所示(本地)隧道代理缓冲器710-1中时从图7所示(远程)隧道代理705-2接收信号。如果不包括接收器835,则隧道代理705-1可周期性地(以任何所需间隔)轮询本地隧道代理缓冲器,以查看是否存在要读取的新消息。
最后,指针存储装置840可存储隧道代理705-1所“拥有”的本地指针的值。
图9示出图7所示隧道代理缓冲器710-1及710-2的可能放置形式。如以上参照图7所述,隧道代理缓冲器710-1及710-2被视为在图3所示PCIe隧道320的相关侧的本地,但其不必在物理上位于那一侧上。在本发明概念的一些实施例中,即使隧道代理缓冲器710-1及710-2在逻辑上被视为位于图3所示PCIe隧道320的分开的两侧上,隧道代理缓冲器710-1及710-2两者也可在物理上位于图3所示PCIe隧道320的同一侧上。举例来说,NVMe SSD 225可包括支持共享缓冲器的存储器(以下图10中示出),所述共享缓冲器包括隧道代理缓冲器710-1及710-2两者:也就是说,所述共享缓冲器可由隧道代理705-2(在NVMe SSD 225上)及隧道代理705-1(在图2所示主机处理器205的侧上)两者进行读取及写入。
包括共享缓冲器的侧可在无任何复杂性的情况下直接从共享缓冲器读取及向共享缓冲器写入。另一方面,另一侧可使用直接存储器存取(DMA)引擎来存取共享缓冲器(以从本地隧道代理缓冲器读取消息或向远程隧道代理缓冲器写入消息)。因此,如果共享缓冲器包含在NVMe SSD 225中,则图2所示主机处理器205可包括DMA引擎905-1以存取所述共享缓冲器;如果共享缓冲器包含在存储器220中,则NVMe SSD 225可包括DMA引擎905-2以存取所述共享缓冲器。
如果共享缓冲器位于作为NVMe SSD 225一部分的存储器中,则图2所示主机处理器205可承担在图2所示主机处理器205与NVMe SSD 225之间移动所有消息的负担。此种安排可能并非是最优的,因为其对图2所示主机处理器205施加了额外负担。相反地,通过将共享缓冲器放置在(主机)存储器220中,图2所示主机处理器205被解除了执行PCIe事务以移动消息的负担,从而释放图2所示主机处理器205来执行其他任务。
还可使共享缓冲器与DMA引擎905-1及/或905-2位于图3所示PCIe隧道320的同一侧上。也就是说,DMA引擎905-1及/或905-2可与共享缓冲器的物理位置独立地位于图3所示PCIe隧道320的任一侧上。举例来说,共享缓冲器与DMA引擎905-2两者可为NVMe SSD 225的一部分,在此情形中,NVMe SSD 225可负责使用DMA引擎905-2将消息移动到图2所示存储器220以供图2所示主机处理器205使用。
图10示出图2所示NVMe SSD 225中的各种组件。在图10中,NVMe SSD 225可包括接口1005、主机接口逻辑1010、SSD控制器1015及各种闪存存储器芯片1020-1至1020-8,闪存存储器芯片1020-1至1020-8可被组织成各种通道1025-1至1025-4。接口1005可为通往图1所示服务器105的物理接口:具体来说,即NVMe SSD 225上的PCIe连接点。主机接口逻辑1010可管理NVMe SSD 225与图1所示服务器105之间的通信。SSD控制器1015可管理对闪存存储器芯片1020-1至1020-8的读取操作及写入操作以及无用单元收集及其他操作。尽管图10将NVMe SSD 225示作包括被组织成四个通道1025-1至1025-4的八个闪存存储器芯片1020-1至1020-8,但本发明概念的实施例可支持被组织成任何数目的通道的任何数目的闪存存储器芯片。
SSD控制器1015可包括闪存转换层1030。闪存转换层1030可执行如下传统功能:将由图1所示服务器105使用的逻辑块地址(logical block address,LBA)转换成NVMe SSD225中所存储的数据的物理块地址(physical block address,PBA)。
SSD控制器1015还可包括存储内处理器1035。存储内处理器1035可为以上所述的任何种类的处理器,且可执行由NVMe SSD 225提供的图3所示微服务340-1及340-2。尽管图10将存储内处理器1035示作SSD控制器1015的一部分,但本发明概念的实施例可包括位于NVMe SSD 225内的任何处的存储内处理器。
最后,SSD控制器1015可包括存储器1040。如以上参照图10所述,NVMe SSD 225可包括用以存储图7所示隧道代理缓冲器710-1及/或710-2的存储器:存储器1040可用以存储图7所示隧道代理缓冲器710-1及/或710-2。且在隧道代理缓冲器710-2被托管在图2所示存储器220中的情况下,SSD控制器1015还可包括图9所示DMA引擎905-2(图10中未示出),以便利于跨越图3所示PCIe隧道320在图7所示隧道代理缓冲器710-1及710-2之间移动消息。
图11示出根据本发明概念实施例用于使图1所示服务器105-1拦截来自图3所示应用305-1的图4所示RPC 405并将其发送到图2所示NVMe SSD 225的示例性程序的流程图。在图11中,在框1105处,图5所示RPC俘获模块505可俘获由图3所示应用305-1发送的图4所示RPC 405并将图4所示RPC 405递送到图7所示隧道代理705-1。在框1110处,图7所示隧道代理705-1可将图4所示RPC 405作为图7所示消息725递送到图7所示隧道代理705-2。在框1115处,图7所示隧道代理705-1可从图7所示隧道代理705-2接收图4所示RPC 405的图4所示结果410。在框1120处,隧道代理705-1可将图4所示结果410递送到图3所示应用305-1,就像图2所示主机处理器205执行了图4所示RPC 405一样。
图12A至图12B示出用于使图1所示服务器105-1俘获来自图3所示应用305-1的图4所示RPC 405的示例性程序的流程图。在图12A中,在框1205处,图6所示MitM填充码605可俘获图4所示RPC 405并将其递送到图7所示隧道代理705-1以跨越图3所示PCIe隧道320进行发送,且在框1210处,图6所示MitM填充码605可从图7所示隧道代理705-1接收图4所示结果410并将其递送到图3所示应用305-1。
作为另外一种选择,在框1215处,图3所示RPC客户端310-1可作出可用以调用图4所示RPC 405的图6所示系统呼叫615,图6所示系统呼叫615可代替地将图4所示RPC 405递送到图7所示隧道代理705-1以跨越图3所示PCIe隧道320进行发送,且在框1220处,图7所示隧道代理705-1可作出另一图6所示系统呼叫615以将图4所示结果410返回到图3所示RPC客户端310-1(且因此返回到图3所示应用305-1)。
作为另外一种选择,在框1225(图12B)处,图6所示帧检验器620可检验帧以寻找图4所示RPC 405。在框1230处,图6所示帧检验器620判断所述帧是否包含图4所示RPC 405。如果不包含,则图6所示帧检验器620可将帧置于导线上(或者将其递送到软件堆栈中的另一层)。但如果所述帧包含图4所示RPC 405,则在框1235处,图6所示帧检验器620可将帧递送到图7所示隧道代理705-1以跨越图3所示PCIe隧道320进行发送。最后,在框1240处,图6所示帧检验器620可找到包含图4所示结果410的帧并将其沿软件堆栈往回向上递送,最终递送到图3所示应用305-1。
作为另外一种选择,在框1245处,图3所示RPC客户端310-1可使用图6所示新传送层命令625将图4所示RPC 405递送到图7所示隧道代理705-1以跨越图3所示PCIe隧道320进行发送,且在框1250处,图7所示隧道代理705-1可作出另一图6所示新传送层命令625以将图4所示结果410返回到图3所示RPC客户端310-1(且因此返回到图3所示应用305-1)。
图13示出用于使图7所示隧道代理705-1将图7所示消息725发送到图7所示隧道代理705-2的示例性程序的流程图。在图13之前,在某一点处,图7所示隧道代理705-1已从图5所示RPC俘获模块505接收到了图4所示RPC 405。在图13中,在框1305处,图8所示消息包装器805可将图4所示RPC 405包装在图7所示消息725中。在框1310处,图8所示容量检查815可检查以验证图7所示隧道代理缓冲器710-2是否具有用于图7所示消息725的容量。如果不具有,则图7所示隧道代理705-1可保存图7所示消息725,直到图8所示容量检查815确定图7所示隧道代理缓冲器710-2具有用于图7所示消息725的容量为止,如箭头1315所示。应注意,保存图7所示消息725并不暗示图7所示隧道代理705-1阻止:图7所示隧道代理705-1可在等待图7所示隧道代理缓冲器710-2具有用于图7所示消息725的容量的同时执行其他操作。举例来说,图7所示隧道代理705-1可处理从图7所示隧道代理缓冲器710-1读取的消息。
一旦图8所示容量检查815确定图7所示隧道代理缓冲器710-2具有用于图7所示消息725的容量,则在框1320处,图8所示消息发送器810将图7所示消息725写入到图7所示隧道代理缓冲器710-2,且在框1325处,图8所示信号器820可向图7所示隧道代理705-2发送已将图7所示消息725写入到图7所示隧道代理缓冲器710-2的信号。可省略框1325,如虚线1330所示。
图14示出用于使图7所示隧道代理705-1从图7所示隧道代理705-2接收图7所示消息725的示例性程序的流程图。在图14中,在框1405处,图8所示接收器835可从图7所示隧道代理705-2接收已将图7所示消息725写入到图7所示隧道代理缓冲器710-1的信号。作为另外一种选择,在框1410处,图7所示隧道代理705-1可轮询图7所示隧道代理缓冲器710-1,直到图7所示隧道代理缓冲器710-1具有要处理的消息为止。不管哪种方式,在框1415处,图8所示消息接收器825可从图7所示隧道代理缓冲器710-1读取图7所示消息725,且在框1420处,图8所示消息解包器830可从图7所示消息725解包出图4所示结果410,此后隧道代理705-1可将图4所示结果410往回朝向图3所示应用305-1发送。
图15示出根据本发明概念实施例用于使图2所示NVMe SSD 225处理来自图1所示服务器105-1的图4所示RPC 405的示例性程序的流程图。在图15中,在框1505处,图2所示NVMe SSD 225可通过图3所示PCIe隧道320从图1所示服务器105-1接收图4所示RPC 405。在框1510处,图10所示存储内处理器1035可根据图3所示微服务340-1或340-2来执行图4所示RPC 405。最后,在框1515处,图2所示NVMe SSD 225可通过图3所示PCIe隧道320将图4所示结果410发送回到图1所示服务器105-1。
图16A至图16B示出用于使图2所示NVMe SSD 225通过图3所示PCIe隧道320接收图4所示RPC 405的示例性程序的流程图。如以上参照图3所述,图2所示NVMe SSD 225可具有与图1所示服务器105-1的软件堆栈中所示的那些组件对应的组件,以处理跨越图3所示PCIe隧道320接收的消息:以下,对将位于图2所示NVMe SSD 225中的此类组件的参考被指派与图1所示服务器105-1的软件堆栈中的那些组件相同的图参考编号。
在图16A中,在框1605处,图7所示隧道代理705-2可通过图3所示PCIe隧道320接收包含图4所示RPC 405的图7所示消息725并将图4所示RPC 405递送到图6所示MitM填充码605。接着,在框1610处,图6所示MitM填充码605可将图4所示结果410发送到图7所示隧道代理705-2,使得图7所示隧道代理705-2可将图4所示结果410包装在图7所示消息725中并通过图3所示PCIe隧道320往回发送图7所示消息725。
作为另外一种选择,在框1615处,图3所示RPC服务器345-1可从图7所示隧道代理705-2接收图6所示系统呼叫615,系统呼叫615用以调用图3所示微服务340-1,以执行由图7所示隧道代理705-2通过图3所示PCIe隧道320作为图7所示消息725而接收的图4所示RPC405。接着,在框1620处,图3所示RPC服务器345-1可作出另一图6所示系统呼叫615,以将图4所示结果410返回到图7所示隧道代理705-2,从而包装在图7所示消息725中以通过图3所示PCIe隧道320进行发送。
作为另外一种选择,在框1625(图16B)处,图6所示帧检验器620可从图7所示隧道代理705-2接收包含图4所示RPC 405的帧,所述帧被包装在图7所示消息725中且是通过图3所示PCIe隧道320而接收。接着,在框1630处,图6所示帧检验器620可将包含图4所示结果410的帧发送到图7所示隧道代理705-2,以包装在图7所示消息725中并通过图3所示PCIe隧道320进行发送。
应注意,与图1所示服务器105-1的软件堆栈相比,图2所示NVMe SSD 225通常不发送或接收以太网帧(因为图2所示NVMe SSD 225通常不发送或接收以太网数据或者甚至不具有以太网端口),因此图6所示帧检验器620在作为图2所示NVMe SSD 225的一部分时无需检验以太网帧:以太网帧均包含图4所示RPC 405或图4所示结果410。然而,在其中图2所示NVMe SSD 225直接支持以太网通信的本发明概念实施例中,在框1625及1630中所述的帧检验器620可被修改成以与在图1所示服务器105-1内操作时的图6所示帧检验器620(如以上参照图12B所述)相似的方式操作。
作为另外一种选择,在框1635处,图3所示RPC服务器345-1可从图7所示隧道代理705-2接收图6所示新传送层命令625,新传送层命令625用以调用图3所示微服务340-1以执行由图7所示隧道代理705-2通过图3所示PCIe隧道320作为图7所示消息725而接收的图4所示RPC 405。接着,在框1640处,图3所示RPC服务器345-1可作出另一图6所示新传送层命令625,以将图4所示结果410返回到图7所示隧道代理705-2,从而包装在图7所示消息725中以通过图3所示PCIe隧道320进行发送。
图17示出用于使图7所示隧道代理705-2从图7所示隧道代理705-1接收图7所示消息725的示例性程序的流程图。在图17中,在框1705处,图8所示接收器835可从图7所示隧道代理705-1接收已将图7所示消息725写入到图7所示隧道代理缓冲器710-2的信号。作为另外一种选择,在框1710处,图7所示隧道代理705-2可轮询图7所示隧道代理缓冲器710-2,直到图7所示隧道代理缓冲器710-2具有要处理的消息为止。无论何种方式,在框1715处,图8所示消息接收器825可从图7所示隧道代理缓冲器710-2读取图7所示消息725,且在框1720处,图8所示消息解包器830可从图7所示消息725解包出图4所示RPC 405,此后隧道代理705-2可将图4所示RPC 405发送到图2所示NVMe SSD 225中的软件堆栈内RPC俘获模块505的類似部分(analog)。
图18示出用于使图7所示隧道代理705-2将图7所示消息725发送到图7所示隧道代理705-1的示例性程序的流程图。在图18之前,在某一点处,图7所示隧道代理705-2已从图2所示NVMe SSD 225的软件堆栈中图5所示RPC俘获模块505的類似部分接收到了图4所示结果410。在图18中,在框1805处,图8所示消息包装器805可将图4所示结果410包装在图7所示消息725中。在框1810处,图8所示容量检查815可检查以验证图7所示隧道代理缓冲器710-1是否具有用于图7所示消息725的容量。如果不具有,则图7所示隧道代理705-2可保存图7所示消息725,直到图8所示容量检查815确定图7所示隧道代理缓冲器710-1具有用于图7所示消息725的容量为止,如箭头1815所示。应注意,保存图7所示消息725并不暗示图7所示隧道代理705-2阻止:图7所示隧道代理705-2可在等待图7所示隧道代理缓冲器710-1具有用于图7所示消息725的容量的同时执行其他操作。举例来说,图7所示隧道代理705-2可处理从图7所示隧道代理缓冲器710-2读取的消息。
一旦图8所示容量检查815确定图7所示隧道代理缓冲器710-1具有用于图7所示消息725的容量,则在框1820处,图8所示消息发送器810将图7所示消息725写入到图7所示隧道代理缓冲器710-1,且在框1825处,图8所示信号器820可向图7所示隧道代理705-1发送已将图7所示消息725写入到图7所示隧道代理缓冲器710-1的信号。可省略框1825,如虚线1830所示。
在图11至图18中,示出了本发明概念的一些实施例。但所属领域中的技术人员将认识到,通过改变所述框的次序、通过省略框、或通过包括图式中所未示出的链路,本发明概念还可具有其他实施例。所述流程图的所有此类变型均应被视为本发明概念的实施例,而无论是否明确地如此阐述。
本发明概念的实施例相比现有技术提供了技术优点。通过将RPC卸载给图2所示NVMe SSD 225,图2所示主机处理器205上的处理负载得以减少,从而允许图2所示主机处理器205执行其他命令。此外,通过使用图5所示RPC俘获模块505,可在对图1所示服务器105-1中的软件堆栈作出相对微小的改变且无需修改图3所示应用305-1及305-2的情况下将RPC处理卸载给图2所示NVMe SSD 225。因此,现有应用可受益于在图2所示NVMe SSD 225上执行图4所示RPC 405,而并不知晓图2所示NVMe SSD 225执行图4所示RPC 405。
以下论述旨在提供对可在其中实施本发明概念某些方面的一个或多个适合的机器的简短大体说明。所述一个或多个机器可至少部分地通过以下来控制:来自例如键盘、鼠标等传统输入装置的输入;以及自另一机器接收到的指令、与虚拟现实(virtual reality,VR)环境的交互作用、生物特征反馈(biometric feedback)、或其他输入信号。本文中所用用语“机器(machine)”旨在广泛地囊括单一机器、虚拟机器、或由以通信方式耦合的一起运行的机器、虚拟机器、或装置形成的系统。示例性机器包括:计算装置,例如个人计算机、工作站、服务器、便携式计算机、手持式装置、电话、平板计算机(tablet)等;以及运输装置,例如私人或公共运输(例如汽车、火车、计程车等)。
所述一个或多个机器可包括嵌入式控制器,例如可编程或不可编程逻辑装置或阵列、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、嵌入式计算机、智能卡等。所述一个或多个机器可利用连接至一个或多个远程机器(例如通过网络接口、调制解调器、或其他通信耦合)的一个或多个连接。机器可采用例如内联网(intranet)、互联网、局域网、广域网等物理网络和/或逻辑网络的方式进行互连。所属领域中的技术人员将理解,网络通信可利用各种有线和/或无线短距离或长距离载体及协议,所述载体及协议包括射频(radio frequency,RF)、卫星、微波、电气及电子工程师学会(Institute ofElectrical and Electronics Engineers,IEEE)802.11、光学、红外、缆线、激光等。
可通过参照或结合相关联数据来阐述本发明概念的实施例,所述相关联数据包括当由机器存取时使得所述机器执行任务或定义抽象数据类型或低层阶硬件上下文的功能、流程、数据结构、应用程序等。相关联数据可存储在例如易失性和/或非易失性存储器(例如,随机存取存储器(random access memory,RAM)、只读存储器(read only memory,ROM)等)中,或存储于包括硬驱动器、软盘、光学存储装置、磁带、闪存存储器、记忆棒(memorystick)、数字视频盘、生物存储装置等其他存储装置及其相关联存储介质中。相关联数据可采用数据包、串行数据、并行数据、传播信号等形式通过包括物理网络和/或逻辑网络在内的传输环境来递送,且可以压缩或加密格式使用。相关联数据可用于分布式环境中,且可在本地和/或远程存储以供机器存取。
本发明概念的实施例可包括包含可由一个或多个处理器执行的指令的有形非暂时性机器可读介质(machine-readable medium),所述指令包括用于执行本文所述本发明概念的要素的指令。
上述方法的各种操作可通过能够执行所述操作的任何适合的手段(例如,各种硬件组件和/或软件组件、电路和/或模块)来执行。软件可包括用于实施逻辑功能的可执行指令的有序列表,且可被收录在任何“处理器可读介质”中以由指令执行系统、设备或装置(例如,单核处理器或多核处理器或者含有处理器的系统)使用或与指令执行系统、设备或装置结合使用。
结合本文中所公开的实施例阐述的方法或算法的框或步骤以及功能可直接以硬件实施、以由处理器执行的软件模块实施或者以两者的组合来实施。如果以软件实施,则可将功能作为一个或多个指令或代码存储在有形非暂时性计算机可读介质上或通过有形非暂时性计算机可读介质传输。软件模块可驻留在随机存取存储器(RAM)、闪存存储器、只读存储器(ROM)、电可编程只读存储器(EPROM)、电可擦可编程只读存储器(EEPROM)、寄存器、硬盘、可移式盘(removable disk)、压缩盘只读存储器(compact disk ROM,CD ROM)或所属领域中所知的任何其他形式的存储介质中。
已参照所示实施例阐述并示出了本发明概念的原理,应认识到,所示实施例可在排列及细节上加以修改而并不背离此类原理,且可以任何所需方式加以组合。并且,尽管以上论述着重于具体实施例,然而预期存在其他配置。具体来说,尽管本文中使用例如“根据本发明概念的实施例”等表达,然而这些短语意在笼统地提及实施例可能性,而并非旨在将本发明概念限制为具体实施例配置。本文所用的这些用语可提及相同或不同的实施例,这些相同或不同的实施例可组合成其他实施例。
前述说明性实施例不应被视为限制本发明概念。尽管已阐述了几个实施例,然而所属领域中的技术人员将易于理解,可对这些实施例作出许多修改,而此并不实质上背离本公开的新颖教示内容及优点。因此,所有这种修改均旨在包含于由权利要求书所界定的本发明概念的范围内。
本发明概念的实施例可扩展到以下声明,但并不仅限于此:
声明1、本发明概念的实施例包括一种主机,所述主机包括:
主机处理器;
存储器;
操作系统,在所述主机处理器上运行;
应用,在所述主机处理器上的所述操作系统下运行,所述应用包括远程过程调用(RPC);
外围组件互连快速(PCIe)隧道,通往非易失性存储器快速(NVMe)固态驱动器(SSD);以及
RPC俘获模块,位于所述操作系统中,用以俘获来自所述应用的所述RPC并就像从所述主机处理器一样将所述RPC的结果递送到所述应用,
其中所述NVMe SSD可执行所述RPC以产生所述结果。
声明2、本发明概念的实施例包括根据声明1所述的主机,其中所述RPC俘获模块包括中间人(MitM)填充码。
声明3、本发明概念的实施例包括根据声明1所述的主机,其中所述RPC俘获模块包括:第一系统呼叫,用以俘获来自所述应用的所述RPC;以及第二系统呼叫,用以通过所述PCIe隧道从所述NVMe SSD接收所述RPC的所述结果。
声明4、本发明概念的实施例包括根据声明3所述的主机,其中所述第一系统呼叫包括取代性系统呼叫或经包装系统呼叫。
声明5、本发明概念的实施例包括根据声明3所述的主机,其中所述第二系统呼叫包括取代性系统呼叫或经包装系统呼叫。
声明6、本发明概念的实施例包括根据声明1所述的主机,其中所述RPC俘获模块包括以太网帧检验器,所述以太网帧检验器用以检验以太网帧以确定所述以太网帧包含所述RPC。
声明7、本发明概念的实施例包括根据声明1所述的主机,其中所述RPC俘获模块包括用以接收所述RPC的第一新传送层命令及用以接收所述RPC的所述结果的第二新传送层命令。
声明8、本发明概念的实施例包括根据声明1所述的主机,所述主机进一步包括用以从所述RPC俘获模块接收所述RPC的本地隧道代理,所述本地隧道代理包括:
消息包装器,用以将所述RPC包装在消息中;以及
消息发送器,用以将所述消息放置在远程隧道代理缓冲器中。
声明9、本发明概念的实施例包括根据声明8所述的主机,其中所述存储器包括所述远程隧道代理缓冲器。
声明10、本发明概念的实施例包括根据声明8所述的主机,其中所述NVMe SSD包括所述远程隧道代理缓冲器。
声明11、本发明概念的实施例包括根据声明8所述的主机,其中所述本地隧道代理可操作以使用在所述主机处理器本地的直接存储器存取(DMA)引擎。
声明12、本发明概念的实施例包括根据声明8所述的主机,其中所述本地隧道代理可操作以使用在所述NVMe SSD本地的DMA引擎。
声明13、本发明概念的实施例包括根据声明8所述的主机,其中所述本地隧道代理可操作以将所述消息的地址放置在所述远程隧道代理缓冲器中。
声明14、本发明概念的实施例包括根据声明8所述的主机,其中所述本地隧道代理进一步包括远程隧道代理缓冲器容量检查,所述远程隧道代理缓冲器容量检查用以确定所述远程隧道代理缓冲器具有用于所述消息的容量。
声明15、本发明概念的实施例包括根据声明8所述的主机,其中所述本地隧道代理进一步包括信号器,所述信号器用以向所述NVMe SSD发送已将所述消息放置在所述远程隧道代理缓冲器中的信号。
声明16、本发明概念的实施例包括根据声明1所述的主机,所述主机进一步包括用以将所述RPC的所述结果递送到所述RPC俘获模块的本地隧道代理,所述本地隧道代理包括:
消息接收器,用以从本地隧道代理缓冲器读取消息,所述消息包含所述RPC的所述结果;以及
消息解包器,用以从所述消息解包出所述RPC的所述结果。
声明17、本发明概念的实施例包括根据声明16所述的主机,所述本地隧道代理进一步包括接收器,所述接收器用以从所述NVMe SSD接收已将所述消息放置在所述本地隧道代理缓冲器中的信号。
声明18、本发明概念的实施例包括根据声明16所述的主机,其中所述本地隧道代理缓冲器对于所述主机处理器是本地的。
声明19、本发明概念的实施例包括根据声明16所述的主机,其中所述本地隧道代理缓冲器对于所述NVMe SSD是本地的。
声明20、本发明概念的实施例包括根据声明16所述的主机,其中所述本地隧道代理可操作以使用在所述主机处理器本地的DMA引擎。
声明21、本发明概念的实施例包括根据声明16所述的主机,其中所述本地隧道代理可操作以使用在所述NVMe SSD本地的DMA引擎。
声明22、本发明概念的实施例包括根据声明16所述的主机,其中所述消息接收器可操作以从本地隧道代理缓冲器读取所述消息的地址;以及
所述消息接收器可操作以使用所述消息的所述地址来检索所述消息。
声明23、本发明概念的实施例包括根据声明1所述的主机,所述主机进一步包括所述NVMe SSD,所述NVMe SSD包括:
接口,通往所述主机;
数据存储装置;
消息接收器,用以跨越所述接口经由所述PCIe隧道从所述主机接收第一消息,所述第一消息包含所述RPC;
消息解包器,用以从所述第一消息解包出所述RPC;
存储内处理器,用以执行所述RPC,从而生成所述RPC的所述结果;
消息包装器,用以将所述RPC的所述结果包装在第二消息中;以及
消息发送器,用以跨越所述接口经由所述PCIe隧道将所述第二消息传输到所述主机。
声明24、本发明概念的实施例包括根据声明23所述的主机,所述NVMeSSD进一步包括中间人(MitM)填充码,所述MitM填充码包括所述消息解包器及所述消息包装器。
声明25、本发明概念的实施例包括根据声明23所述的主机,其中:
所述消息解包器可操作以使用第一系统呼叫来呼叫所述RPC;以及
所述消息包装器可操作以从第二系统呼叫接收所述RPC的所述结果。
声明26、本发明概念的实施例包括根据声明25所述的主机,其中所述第一系统呼叫包括取代性系统呼叫或经包装系统呼叫。
声明27、本发明概念的实施例包括根据声明25所述的主机,其中所述第二系统呼叫包括取代性系统呼叫或经包装系统呼叫。
声明28、本发明概念的实施例包括根据声明23所述的主机,其中:
所述消息解包器可操作以对所述第一消息中包含所述RPC的以太网帧进行解包;以及
所述消息包装器可操作以将包含所述RPC的所述结果的以太网帧包装在所述第二消息中。
声明29、本发明概念的实施例包括根据声明23所述的主机,其中:
所述消息解包器可操作以对所述第一消息中包含所述RPC的第一新传送层命令进行解包;以及
所述消息包装器可操作以将包含所述RPC的所述结果的第二新传送层命令包装在所述第二消息中。
声明30、本发明概念的实施例包括根据声明23所述的主机,所述NVMeSSD包括本地隧道代理,所述本地隧道代理用以从本地隧道代理缓冲器读取所述第一消息及将所述第二消息写入到远程隧道代理缓冲器。
声明31、本发明概念的实施例包括根据声明30所述的主机,其中所述本地隧道代理缓冲器对于所述主机处理器是本地的。
声明32、本发明概念的实施例包括根据声明30所述的主机,其中所述本地隧道代理缓冲器对于所述NVMe SSD是本地的。
声明33、本发明概念的实施例包括根据声明30所述的主机,其中所述远程隧道代理缓冲器对于所述主机处理器是本地的。
声明34、本发明概念的实施例包括根据声明30所述的主机,其中所述远程隧道代理缓冲器对于所述NVMe SSD是本地的。
声明35、本发明概念的实施例包括根据声明30所述的主机,其中所述本地隧道代理可操作以使用DMA引擎来从所述本地隧道代理缓冲器读取所述第一消息及将所述第二消息写入到所述远程隧道代理缓冲器。
声明36、本发明概念的实施例包括根据声明35所述的主机,其中所述DMA引擎对于所述主机处理器是本地的。
声明37、本发明概念的实施例包括根据声明35所述的主机,其中所述DMA引擎对于所述NVMe SSD是本地的。
声明38、本发明概念的实施例包括根据声明30所述的主机,其中所述本地隧道代理可操作以从所述本地隧道代理缓冲器读取所述第一消息的地址及使用所述第一消息的所述地址来读取所述第一消息。
声明39、本发明概念的实施例包括根据声明30所述的主机,其中所述本地隧道代理可操作以将所述第二消息写入到所述第二消息的地址及将所述第二消息的所述地址写入到所述远程隧道代理缓冲器。
声明40、本发明概念的实施例包括根据声明30所述的主机,其中所述本地隧道代理可操作以至少部分地基于具有所述第一消息的所述本地隧道代理缓冲器而从所述本地隧道代理缓冲器读取所述第一消息。
声明41、本发明概念的实施例包括根据声明30所述的主机,其中所述本地隧道代理进一步包括远程隧道代理缓冲器容量检查,所述远程隧道代理缓冲器容量检查用以确定所述远程隧道代理缓冲器具有用于所述第二消息的容量。
声明42、本发明概念的实施例包括一种非易失性存储器快速(NVMe)固态驱动器(SSD),所述非易失性存储器快速(NVMe)固态驱动器(SSD)包括:
接口,通往主机;
数据存储装置;
消息接收器,用以跨越所述接口经由外围组件互连快速(PCIe)隧道从所述主机接收第一消息,所述第一消息包含远程过程调用(RPC);
消息解包器,用以从所述第一消息解包出所述RPC;
存储内处理器,用以执行所述RPC,从而生成所述RPC的结果;
消息包装器,用以将所述RPC的所述结果包装在第二消息中;以及
消息发送器,用以跨越所述接口经由所述PCIe隧道将所述第二消息传输到所述主机。
声明43、本发明概念的实施例包括根据声明42所述的NVMe SSD,所述NVMe SSD进一步包括中间人(MitM)填充码,所述MitM填充码包括所述消息解包器及所述消息包装器。
声明44、本发明概念的实施例包括根据声明42所述的NVMe SSD,其中:
所述消息解包器可操作以使用第一系统呼叫来呼叫所述RPC;以及
所述消息包装器可操作以从第二系统呼叫接收所述RPC的所述结果。
声明45、本发明概念的实施例包括根据声明44所述的NVMe SSD,其中所述第一系统呼叫包括取代性系统呼叫或经包装系统呼叫。
声明46、本发明概念的实施例包括根据声明44所述的NVMe SSD,其中所述第二系统呼叫包括取代性系统呼叫或经包装系统呼叫。
声明47、本发明概念的实施例包括根据声明42所述的NVMe SSD,其中:
所述消息解包器可操作以对所述第一消息中包含所述RPC的以太网帧进行解包;以及
所述消息包装器可操作以将包含所述RPC的所述结果的以太网帧包装在所述第二消息中。
声明48、本发明概念的实施例包括根据声明42所述的NVMe SSD,其中:
所述消息解包器可操作以对所述第一消息中包含所述RPC的第一新传送层命令进行解包;以及
所述消息包装器可操作以将包含所述RPC的所述结果的第二新传送层命令包装在所述第二消息中。
声明49、本发明概念的实施例包括根据声明42所述的NVMe SSD,所述NVMe SSD进一步包括本地隧道代理,所述本地隧道代理用以从本地隧道代理缓冲器读取所述第一消息及将所述第二消息写入到远程隧道代理缓冲器。
声明50、本发明概念的实施例包括根据声明49所述的NVMe SSD,其中所述本地隧道代理缓冲器对于主机处理器是本地的。
声明51、本发明概念的实施例包括根据声明49所述的NVMe SSD,其中所述本地隧道代理缓冲器对于所述NVMe SSD是本地的。
声明52、本发明概念的实施例包括根据声明49所述的NVMe SSD,其中所述远程隧道代理缓冲器对于主机处理器是本地的。
声明53、本发明概念的实施例包括根据声明49所述的NVMe SSD,其中所述远程隧道代理缓冲器对于所述NVMe SSD是本地的。
声明54、本发明概念的实施例包括根据声明49所述的NVMe SSD,其中所述本地隧道代理可操作以使用直接存储器存取(DMA)引擎来从所述本地隧道代理缓冲器读取所述第一消息及将所述第二消息写入到所述远程隧道代理缓冲器。
声明55、本发明概念的实施例包括根据声明54所述的NVMe SSD,其中所述DMA引擎对于主机处理器是本地的。
声明56、本发明概念的实施例包括根据声明54所述的NVMe SSD,其中所述DMA引擎对于所述NVMe SSD是本地的。
声明57、本发明概念的实施例包括根据声明49所述的NVMe SSD,其中所述本地隧道代理可操作以从所述本地隧道代理缓冲器读取所述第一消息的地址及使用所述第一消息的所述地址来读取所述第一消息。
声明58、本发明概念的实施例包括根据声明49所述的NVMe SSD,其中所述本地隧道代理可操作以将所述第二消息写入到所述第二消息的地址及将所述第二消息的所述地址写入到所述远程隧道代理缓冲器。
声明59、本发明概念的实施例包括根据声明49所述的NVMe SSD,其中所述本地隧道代理可操作以至少部分地基于具有所述第一消息的所述本地隧道代理缓冲器而从所述本地隧道代理缓冲器读取所述第一消息。
声明60、本发明概念的实施例包括根据声明49所述的NVMe SSD,其中所述本地隧道代理进一步包括远程隧道代理缓冲器容量检查,所述远程隧道代理缓冲器容量检查用以确定所述远程隧道代理缓冲器具有用于所述第二消息的容量。
声明61、本发明概念的实施例包括一种方法,所述方法包括:
拦截从应用到主机处理器的远程过程调用(RPC);
通过外围组件互连快速(PCIe)隧道将所述RPC递送到非易失性存储器快速(NVMe)固态驱动器(SSD);
通过所述PCIe隧道从所述NVMe SSD接收所述RPC的结果;以及
就像从所述主机处理器一样将所述RPC的所述结果递送到所述应用。
声明62、本发明概念的实施例包括根据声明61所述的方法,其中:
拦截从应用到主机处理器的RPC包括使用中间人(MitM)填充码来俘获由RPC客户端发送的所述RPC;以及
通过所述PCIe隧道从所述NVMe SSD接收所述RPC的结果包括在所述MitM填充码处通过所述PCIe隧道从所述NVMe SSD接收所述RPC的所述结果。
声明63、本发明概念的实施例包括根据声明61所述的方法,其中:
拦截从应用到主机处理器的RPC包括使用第一系统呼叫来俘获来自所述应用的所述RPC;以及
通过所述PCIe隧道从所述NVMe SSD接收所述RPC的结果包括使用第二系统呼叫从所述NVMe SSD接收所述RPC的所述结果。
声明64、本发明概念的实施例包括根据声明63所述的方法,其中所述第一系统呼叫包括取代性系统呼叫或经包装系统呼叫。
声明65、本发明概念的实施例包括根据声明63所述的方法,其中所述第二系统呼叫包括取代性系统呼叫或经包装系统呼叫。
声明66、本发明概念的实施例包括根据声明61所述的方法,其中:
拦截从应用到主机处理器的RPC包括:
检验以太网帧以确定所述以太网帧包含所述RPC;以及
至少部分地基于包含所述RPC的所述以太网帧,俘获所述以太网帧;以及
通过所述PCIe隧道从所述NVMe SSD接收所述RPC的结果包括在第二以太网帧中从所述NVMe SSD接收所述RPC的所述结果。
声明67、本发明概念的实施例包括根据声明61所述的方法,其中:
拦截从应用到主机处理器的RPC包括使用第一新传送层命令来俘获来自所述应用的所述RPC;以及
通过所述PCIe隧道从所述NVMe SSD接收所述RPC的结果包括使用第二新传送层命令通过所述PCIe隧道从所述NVMe SSD接收所述RPC的所述结果。
声明68、本发明概念的实施例包括根据声明61所述的方法,其中通过PCIe隧道将所述RPC递送到NVMe SSD包括:
由本地隧道代理将所述RPC包装在消息中;以及
由所述本地隧道代理将所述消息放置在远程隧道代理缓冲器中。
声明69、本发明概念的实施例包括根据声明68所述的方法,其中所述远程隧道代理缓冲器对于所述主机处理器是本地的。
声明70、本发明概念的实施例包括根据声明68所述的方法,其中所述远程隧道代理缓冲器对于所述NVMe SSD是本地的。
声明71、本发明概念的实施例包括根据声明68所述的方法,其中由所述本地隧道代理将所述消息放置在远程隧道代理缓冲器中包括使用在所述主机处理器本地的直接存储器存取(DMA)引擎。
声明72、本发明概念的实施例包括根据声明68所述的方法,其中由所述本地隧道代理将所述消息放置在远程隧道代理缓冲器中包括使用在所述NVMe SSD本地的DMA引擎。
声明73、本发明概念的实施例包括根据声明68所述的方法,其中由所述本地隧道代理将所述消息放置在远程隧道代理缓冲器中包括:
在所述消息的地址处写入所述消息;以及
由所述本地隧道代理将所述消息的所述地址放置在所述远程隧道代理缓冲器中。
声明74、本发明概念的实施例包括根据声明68所述的方法,其中由所述本地隧道代理将所述消息放置在远程隧道代理缓冲器中包括:至少部分地基于具有用于所述消息的容量的所述远程隧道代理缓冲器,由所述本地隧道代理将所述消息放置在所述远程隧道代理缓冲器中。
声明75、本发明概念的实施例包括根据声明68所述的方法,其中通过PCIe隧道将所述RPC递送到NVMe SSD进一步包括向所述远程隧道代理发送已将所述消息放置在所述远程隧道代理缓冲器中的信号。
声明76、本发明概念的实施例包括根据声明61所述的方法,其中通过所述PCIe隧道从所述NVMe SSD接收所述RPC的结果包括:
由本地隧道代理从本地隧道代理缓冲器检索消息;以及
由所述本地隧道代理从所述消息解包出所述RPC的所述结果。
声明77、本发明概念的实施例包括根据声明76所述的方法,其中所述本地隧道代理缓冲器对于所述主机处理器是本地的。
声明78、本发明概念的实施例包括根据声明76所述的方法,其中所述本地隧道代理缓冲器对于所述NVMe SSD是本地的。
声明79、本发明概念的实施例包括根据声明76所述的方法,其中通过所述PCIe隧道从所述NVMe SSD接收所述RPC的结果进一步包括从所述远程隧道代理接收已将所述消息放置在所述本地隧道代理缓冲器中的信号。
声明80、本发明概念的实施例包括根据声明76所述的方法,其中由本地隧道代理从本地隧道代理缓冲器检索消息包括:至少部分地基于具有所述消息的所述本地隧道代理缓冲器,由本地隧道代理从本地隧道代理缓冲器检索所述消息。
声明81、本发明概念的实施例包括根据声明76所述的方法,其中由本地隧道代理从本地隧道代理缓冲器检索消息包括使用在所述主机处理器本地的DMA引擎。
声明82、本发明概念的实施例包括根据声明76所述的方法,其中由本地隧道代理从本地隧道代理缓冲器检索消息包括使用在所述NVMe SSD本地的DMA引擎。
声明83、本发明概念的实施例包括根据声明76所述的方法,其中由本地隧道代理从本地隧道代理缓冲器检索消息包括:
由所述本地隧道代理在所述远程隧道代理缓冲器中检索所述消息的地址;以及
使用所述消息的所述地址来检索所述消息。
声明84、本发明概念的实施例包括根据声明61所述的方法,所述方法进一步包括:
在所述NVMe SSD处通过所述PCIe隧道接收包含所述RPC的第一消息;
从所述第一消息解包出所述RPC;
在所述NVMe SSD上的存储内处理器上执行所述RPC,从而生成所述RPC的所述结果;
将所述RPC的所述结果包装在第二消息中;以及
通过所述PCIe隧道从所述NVMe SSD发送所述第二消息。
声明85、本发明概念的实施例包括根据声明84所述的方法,其中:
在所述NVMe SSD处通过所述PCIe隧道接收包含所述RPC的第一消息包括在中间人(MitM)填充码处接收所述第一消息;以及
通过所述PCIe隧道从所述NVMe SSD发送所述第二消息包括使用所述MitM填充码通过所述PCIe隧道从所述NVMe SSD发送所述第二消息。
声明86、本发明概念的实施例包括根据声明84所述的方法,其中:
在所述NVMe SSD处通过所述PCIe隧道接收包含所述RPC的第一消息包括使用第一系统呼叫来接收所述第一消息;以及
通过所述PCIe隧道从所述NVMe SSD发送所述第二消息包括使用第二系统呼叫通过所述PCIe隧道从所述NVMe SSD发送所述第二消息。
声明87、本发明概念的实施例包括根据声明86所述的方法,其中所述第一系统呼叫包括取代性系统呼叫或经包装系统呼叫。
声明88、本发明概念的实施例包括根据声明86所述的方法,其中所述第二系统呼叫包括取代性系统呼叫或经包装系统呼叫。
声明89、本发明概念的实施例包括根据声明84所述的方法,其中:
在所述NVMe SSD处通过所述PCIe隧道接收包含所述RPC的第一消息包括接收包含所述RPC的第一以太网帧;以及
通过所述PCIe隧道从所述NVMe SSD发送所述第二消息包括通过所述PCIe隧道从所述NVMe SSD发送包含所述RPC的所述结果的第二以太网帧。
声明90、本发明概念的实施例包括根据声明84所述的方法,其中:
在所述NVMe SSD处通过所述PCIe隧道接收包含所述RPC的第一消息包括使用第一新传送层命令来接收所述第一消息;以及
通过所述PCIe隧道从所述NVMe SSD发送所述第二消息包括使用第二新传送层命令通过所述PCIe隧道从所述NVMe SSD发送所述第二消息。
声明91、本发明概念的实施例包括根据声明84所述的方法,其中在所述NVMe SSD处通过所述PCIe隧道接收包含所述RPC的第一消息包括由本地隧道代理从本地隧道代理缓冲器读取所述第一消息。
声明92、本发明概念的实施例包括根据声明91所述的方法,其中所述本地隧道代理缓冲器对于所述主机处理器是本地的。
声明93、本发明概念的实施例包括根据声明91所述的方法,其中所述本地隧道代理缓冲器对于所述NVMe SSD是本地的。
声明94、本发明概念的实施例包括根据声明91所述的方法,其中由本地隧道代理从本地隧道代理缓冲器读取所述第一消息包括使用在所述主机处理器本地的DMA引擎。
声明95、本发明概念的实施例包括根据声明91所述的方法,其中由本地隧道代理从本地隧道代理缓冲器读取所述第一消息包括使用在所述NVMe SSD本地的DMA引擎。
声明96、本发明概念的实施例包括根据声明91所述的方法,其中由本地隧道代理从本地隧道代理缓冲器读取所述第一消息包括:
由所述本地隧道代理从所述本地隧道代理缓冲器读取所述第一消息的地址;以及
使用所述第一消息的所述地址来读取所述第一消息。
声明97、本发明概念的实施例包括根据声明91所述的方法,其中由本地隧道代理从本地隧道代理缓冲器读取所述第一消息包括:至少部分地基于具有所述第一消息的所述本地隧道代理缓冲器,由本地隧道代理从本地隧道代理缓冲器读取所述第一消息。
声明98、本发明概念的实施例包括根据声明91所述的方法,其中在所述NVMe SSD处通过所述PCIe隧道接收包含所述RPC的第一消息进一步包括从远程隧道代理接收已将所述第一消息放置在所述本地隧道代理缓冲器中的信号。
声明99、本发明概念的实施例包括根据声明84所述的方法,其中通过所述PCIe隧道从所述NVMe SSD发送所述第二消息包括由本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中。
声明100、本发明概念的实施例包括根据声明99所述的方法,其中由本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中包括:至少部分地基于具有用于所述第二消息的容量的所述远程隧道代理缓冲器,由本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中。
声明101、本发明概念的实施例包括根据声明99所述的方法,其中所述远程隧道代理缓冲器对于所述主机处理器是本地的。
声明102、本发明概念的实施例包括根据声明99所述的方法,其中所述远程隧道代理缓冲器对于所述NVMe SSD是本地的。
声明103、本发明概念的实施例包括根据声明99所述的方法,其中由本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中包括使用在所述主机处理器本地的DMA引擎。
声明104、本发明概念的实施例包括根据声明99所述的方法,其中由本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中包括使用在所述NVMe SSD本地的DMA引擎。
声明105、本发明概念的实施例包括根据声明99所述的方法,其中由所述本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中包括由所述本地隧道代理将所述第二消息的地址放置在所述远程隧道代理缓冲器中。
声明106、本发明概念的实施例包括一种方法,所述方法包括:
在非易失性存储器快速(NVMe)固态驱动器(SSD)处通过外围组件互连快速(PCIe)隧道接收包含远程过程调用(RPC)的第一消息;
从所述第一消息解包出所述RPC;
在所述NVMe SSD上的存储内处理器上执行所述RPC,从而生成所述RPC的结果;
将所述程序呼叫的所述结果包装在第二消息中;以及
通过所述PCIe隧道从所述NVMe SSD发送所述第二消息。
声明107、本发明概念的实施例包括根据声明106所述的方法,其中:
在NVMe SSD处通过PCIe隧道接收包含RPC的第一消息包括在中间人(MitM)填充码处接收所述第一消息;以及
通过所述PCIe隧道从所述NVMe SSD发送所述第二消息包括使用所述MitM填充码通过所述PCIe隧道从所述NVMe SSD发送所述第二消息。
声明108、本发明概念的实施例包括根据声明106所述的方法,其中:
在NVMe SSD处通过PCIe隧道接收包含RPC的第一消息包括使用第一系统呼叫来接收所述第一消息;以及
通过所述PCIe隧道从所述NVMe SSD发送所述第二消息包括使用第二系统呼叫通过所述PCIe隧道从所述NVMe SSD发送所述第二消息。
声明109、本发明概念的实施例包括根据声明108所述的方法,其中所述第一系统呼叫包括取代性系统呼叫或经包装系统呼叫。
声明110、本发明概念的实施例包括根据声明108所述的方法,其中所述第二系统呼叫包括取代性系统呼叫或经包装系统呼叫。
声明111、本发明概念的实施例包括根据声明106所述的方法,其中:
在NVMe SSD处通过PCIe隧道接收包含RPC的第一消息包括接收包含所述RPC的第一以太网帧;以及
通过所述PCIe隧道从所述NVMe SSD发送所述第二消息包括通过所述PCIe隧道从所述NVMe SSD发送包含所述程序呼叫的所述结果的第二以太网帧。
声明112、本发明概念的实施例包括根据声明106所述的方法,其中:
在NVMe SSD处通过PCIe隧道接收包含RPC的第一消息包括使用第一新传送层命令来接收所述第一消息;以及
通过所述PCIe隧道从所述NVMe SSD发送所述第二消息包括使用第二新传送层命令通过所述PCIe隧道从所述NVMe SSD发送所述第二消息。
声明113、本发明概念的实施例包括根据声明106所述的方法,其中在NVMe SSD处通过PCIe隧道接收包含RPC的第一消息包括由本地隧道代理从本地隧道代理缓冲器读取所述第一消息。
声明114、本发明概念的实施例包括根据声明113所述的方法,其中所述本地隧道代理缓冲器对于主机处理器是本地的。
声明115、本发明概念的实施例包括根据声明113所述的方法,其中所述本地隧道代理缓冲器对于所述NVMe SSD是本地的。
声明116、本发明概念的实施例包括根据声明113所述的方法,其中由本地隧道代理从本地隧道代理缓冲器读取所述第一消息包括使用在主机处理器本地的直接存储器存取(DMA)引擎。
声明117、本发明概念的实施例包括根据声明113所述的方法,其中由本地隧道代理从本地隧道代理缓冲器读取所述第一消息包括使用在所述NVMe SSD本地的DMA引擎。
声明118、本发明概念的实施例包括根据声明113所述的方法,其中由本地隧道代理从本地隧道代理缓冲器读取所述第一消息包括:
由所述本地隧道代理从所述本地隧道代理缓冲器读取所述第一消息的地址;以及
使用所述第一消息的所述地址来读取所述第一消息。
声明119、本发明概念的实施例包括根据声明113所述的方法,其中由本地隧道代理从本地隧道代理缓冲器读取所述第一消息包括:至少部分地基于具有所述第一消息的所述本地隧道代理缓冲器,由本地隧道代理从本地隧道代理缓冲器读取所述第一消息。
声明120、本发明概念的实施例包括根据声明113所述的方法,其中在NVMe SSD处通过PCIe隧道接收包含RPC的第一消息进一步包括从远程隧道代理接收已将所述第一消息放置在所述本地隧道代理缓冲器中的信号。
声明121、本发明概念的实施例包括根据声明106所述的方法,其中通过所述PCIe隧道从所述NVMe SSD发送所述第二消息包括由本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中。
声明122、本发明概念的实施例包括根据声明121所述的方法,其中由本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中包括:至少部分地基于具有用于所述第二消息的容量的所述远程隧道代理缓冲器,由本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中。
声明123、本发明概念的实施例包括根据声明121所述的方法,其中所述远程隧道代理缓冲器对于主机处理器是本地的。
声明124、本发明概念的实施例包括根据声明121所述的方法,其中所述远程隧道代理缓冲器对于所述NVMe SSD是本地的。
声明125、本发明概念的实施例包括根据声明121所述的方法,其中由本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中包括使用在主机处理器本地的DMA引擎。
声明126、本发明概念的实施例包括根据声明121所述的方法,其中由本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中包括使用在所述NVMe SSD本地的DMA引擎。
声明127、本发明概念的实施例包括根据声明121所述的方法,其中由所述本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中包括由所述本地隧道代理将所述第二消息的地址放置在所述远程隧道代理缓冲器中。
声明128、本发明概念的实施例包括一种制品,所述制品包括有形非暂时性存储介质,所述有形非暂时性存储介质上存储有指令,所述指令在由机器执行时引起以下操作:
拦截从应用到主机处理器的远程过程调用(RPC);
通过外围组件互连快速(PCIe)隧道将所述RPC递送到非易失性存储器快速(NVMe)固态驱动器(SSD);
通过所述PCIe隧道从所述NVMe SSD接收所述RPC的结果;以及
就像从所述主机处理器一样将所述RPC的所述结果递送到所述应用。
声明129、本发明概念的实施例包括根据声明128所述的制品,其中:
拦截从应用到主机处理器的RPC包括使用中间人(MitM)填充码来俘获由RPC客户端发送的所述RPC;以及
通过所述PCIe隧道从所述NVMe SSD接收所述RPC的结果包括在所述MitM填充码处通过所述PCIe隧道从所述NVMe SSD接收所述RPC的所述结果。
声明130、本发明概念的实施例包括根据声明128所述的制品,其中:
拦截从应用到主机处理器的RPC包括使用第一系统呼叫来俘获来自所述应用的所述RPC;以及
通过所述PCIe隧道从所述NVMe SSD接收所述RPC的结果包括使用第二系统呼叫从所述NVMe SSD接收所述RPC的所述结果。
声明131、本发明概念的实施例包括根据声明130所述的制品,其中所述第一系统呼叫包括取代性系统呼叫或经包装系统呼叫。
声明132、本发明概念的实施例包括根据声明130所述的制品,其中所述第二系统呼叫包括取代性系统呼叫或经包装系统呼叫。
声明133、本发明概念的实施例包括根据声明128所述的制品,其中:
拦截从应用到主机处理器的RPC包括:
检验以太网帧以确定所述以太网帧包含所述RPC;以及
至少部分地基于包含所述RPC的所述以太网帧,俘获所述以太网帧;以及
通过所述PCIe隧道从所述NVMe SSD接收所述RPC的结果包括在第二以太网帧中从所述NVMe SSD接收所述RPC的所述结果。
声明134、本发明概念的实施例包括根据声明128所述的制品,其中:
拦截从应用到主机处理器的RPC包括使用第一新传送层命令来俘获来自所述应用的所述RPC;以及
通过所述PCIe隧道从所述NVMe SSD接收所述RPC的结果包括使用第二新传送层命令通过所述PCIe隧道从所述NVMe SSD接收所述RPC的所述结果。
声明135、本发明概念的实施例包括根据声明128所述的制品,其中通过PCIe隧道将所述RPC递送到NVMe SSD包括:
由本地隧道代理将所述RPC包装在消息中;以及
由所述本地隧道代理将所述消息放置在远程隧道代理缓冲器中。
声明136、本发明概念的实施例包括根据声明135所述的制品,其中所述远程隧道代理缓冲器对于所述主机处理器是本地的。
声明137、本发明概念的实施例包括根据声明135所述的制品,其中所述远程隧道代理缓冲器对于所述NVMe SSD是本地的。
声明138、本发明概念的实施例包括根据声明135所述的制品,其中由所述本地隧道代理将所述消息放置在远程隧道代理缓冲器中包括使用在所述主机处理器本地的直接存储器存取(DMA)引擎。
声明139、本发明概念的实施例包括根据声明135所述的制品,其中由所述本地隧道代理将所述消息放置在远程隧道代理缓冲器中包括使用在所述NVMe SSD本地的DMA引擎。
声明140、本发明概念的实施例包括根据声明135所述的制品,其中由所述本地隧道代理将所述消息放置在远程隧道代理缓冲器中包括:
在所述消息的地址处写入所述消息;以及
由所述本地隧道代理将所述消息的所述地址放置在所述远程隧道代理缓冲器中。
声明141、本发明概念的实施例包括根据声明135所述的制品,其中由所述本地隧道代理将所述消息放置在远程隧道代理缓冲器中包括:至少部分地基于具有用于所述消息的容量所述远程隧道代理缓冲器,由所述本地隧道代理将所述消息放置在所述远程隧道代理缓冲器中。
声明142、本发明概念的实施例包括根据声明135所述的制品,其中通过PCIe隧道将所述RPC递送到NVMe SSD进一步包括向所述远程隧道代理发送已将所述消息放置在所述远程隧道代理缓冲器中的信号。
声明143、本发明概念的实施例包括根据声明128所述的制品,其中通过所述PCIe隧道从所述NVMe SSD接收所述RPC的结果包括:
由本地隧道代理从本地隧道代理缓冲器检索消息;以及
由所述本地隧道代理从所述消息解包出所述RPC的所述结果。
声明144、本发明概念的实施例包括根据声明143所述的制品,其中所述本地隧道代理缓冲器对于所述主机处理器是本地的。
声明145、本发明概念的实施例包括根据声明143所述的制品,其中所述本地隧道代理缓冲器对于所述NVMe SSD是本地的。
声明146、本发明概念的实施例包括根据声明143所述的制品,其中通过所述PCIe隧道从所述NVMe SSD接收所述RPC的结果进一步包括从所述远程隧道代理接收已将所述消息放置在所述本地隧道代理缓冲器中的信号。
声明147、本发明概念的实施例包括根据声明143所述的制品,其中由本地隧道代理从本地隧道代理缓冲器检索消息包括:至少部分地基于具有所述消息的所述本地隧道代理缓冲器,由本地隧道代理从本地隧道代理缓冲器检索所述消息。
声明148、本发明概念的实施例包括根据声明143所述的制品,其中由本地隧道代理从本地隧道代理缓冲器检索消息包括使用在所述主机处理器本地的DMA引擎。
声明149、本发明概念的实施例包括根据声明143所述的制品,其中由本地隧道代理从本地隧道代理缓冲器检索消息包括使用在所述NVMe SSD本地的DMA引擎。
声明150、本发明概念的实施例包括根据声明143所述的制品,其中由本地隧道代理从本地隧道代理缓冲器检索消息包括:
由所述本地隧道代理在所述远程隧道代理缓冲器中检索所述消息的地址;以及
使用所述消息的所述地址来检索所述消息。
声明151、本发明概念的实施例包括根据声明128所述的制品,所述有形非暂时性存储介质上存储有另一些指令,所述另一些指令在由所述机器执行时引起以下操作:
在所述NVMe SSD处通过所述PCIe隧道接收包含所述RPC的第一消息;
从所述第一消息解包出所述RPC;
在所述NVMe SSD上的存储内处理器上执行所述RPC,从而生成所述RPC的所述结果;
将所述RPC的所述结果包装在第二消息中;以及
通过所述PCIe隧道从所述NVMe SSD发送所述第二消息。
声明152、本发明概念的实施例包括根据声明151所述的制品,其中:
在所述NVMe SSD处通过所述PCIe隧道接收包含所述RPC的第一消息包括在中间人(MitM)填充码处接收所述第一消息;以及
通过所述PCIe隧道从所述NVMe SSD发送所述第二消息包括使用所述MitM填充码通过所述PCIe隧道从所述NVMe SSD发送所述第二消息。
声明153、本发明概念的实施例包括根据声明151所述的制品,其中:
在所述NVMe SSD处通过所述PCIe隧道接收包含所述RPC的第一消息包括使用第一系统呼叫来接收所述第一消息;以及
通过所述PCIe隧道从所述NVMe SSD发送所述第二消息包括使用第二系统呼叫通过所述PCIe隧道从所述NVMe SSD发送所述第二消息。
声明154、本发明概念的实施例包括根据声明153所述的制品,其中所述第一系统呼叫包括取代性系统呼叫或经包装系统呼叫。
声明155、本发明概念的实施例包括根据声明153所述的制品,其中所述第二系统呼叫包括取代性系统呼叫或经包装系统呼叫。
声明156、本发明概念的实施例包括根据声明151所述的制品,其中:
在所述NVMe SSD处通过所述PCIe隧道接收包含所述RPC的第一消息包括接收包含所述RPC的第一以太网帧;以及
通过所述PCIe隧道从所述NVMe SSD发送所述第二消息包括通过所述PCIe隧道从所述NVMe SSD发送包含所述RPC的所述结果的第二以太网帧。
声明157、本发明概念的实施例包括根据声明151所述的制品,其中:
在所述NVMe SSD处通过所述PCIe隧道接收包含所述RPC的第一消息包括使用第一新传送层命令来接收所述第一消息;以及
通过所述PCIe隧道从所述NVMe SSD发送所述第二消息包括使用第二新传送层命令通过所述PCIe隧道从所述NVMe SSD发送所述第二消息。
声明158、本发明概念的实施例包括根据声明151所述的制品,其中在所述NVMeSSD处通过所述PCIe隧道接收包含所述RPC的第一消息包括由本地隧道代理从本地隧道代理缓冲器读取所述第一消息。
声明159、本发明概念的实施例包括根据声明158所述的制品,其中所述本地隧道代理缓冲器对于所述主机处理器是本地的。
声明160、本发明概念的实施例包括根据声明158所述的制品,其中所述本地隧道代理缓冲器对于所述NVMe SSD是本地的。
声明161、本发明概念的实施例包括根据声明158所述的制品,其中由本地隧道代理从本地隧道代理缓冲器读取所述第一消息包括使用在所述主机处理器本地的DMA引擎。
声明162、本发明概念的实施例包括根据声明158所述的制品,其中由本地隧道代理从本地隧道代理缓冲器读取所述第一消息包括使用在所述NVMe SSD本地的DMA引擎。
声明163、本发明概念的实施例包括根据声明158所述的制品,其中由本地隧道代理从本地隧道代理缓冲器读取所述第一消息包括:
由所述本地隧道代理从所述本地隧道代理缓冲器读取所述第一消息的地址;以及
使用所述第一消息的所述地址来读取所述第一消息。
声明164、本发明概念的实施例包括根据声明158所述的制品,其中由本地隧道代理从本地隧道代理缓冲器读取所述第一消息包括:至少部分地基于具有所述第一消息的所述本地隧道代理缓冲器,由本地隧道代理从本地隧道代理缓冲器读取所述第一消息。
声明165、本发明概念的实施例包括根据声明158所述的制品,其中在所述NVMeSSD处通过所述PCIe隧道接收包含所述RPC的第一消息进一步包括从远程隧道代理接收已将所述第一消息放置在所述本地隧道代理缓冲器中的信号。
声明166、本发明概念的实施例包括根据声明151所述的制品,其中通过所述PCIe隧道从所述NVMe SSD发送所述第二消息包括由本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中。
声明167、本发明概念的实施例包括根据声明166所述的制品,其中由本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中包括:至少部分地基于具有用于所述第二消息的容量的所述远程隧道代理缓冲器,由本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中。
声明168、本发明概念的实施例包括根据声明166所述的制品,其中所述远程隧道代理缓冲器对于所述主机处理器是本地的。
声明169、本发明概念的实施例包括根据声明166所述的制品,其中所述远程隧道代理缓冲器对于所述NVMe SSD是本地的。
声明170、本发明概念的实施例包括根据声明166所述的制品,其中由本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中包括使用在所述主机处理器本地的DMA引擎。
声明171、本发明概念的实施例包括根据声明166所述的制品,其中由本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中包括使用在所述NVMe SSD本地的DMA引擎。
声明172、本发明概念的实施例包括根据声明166所述的制品,其中由所述本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中包括由所述本地隧道代理将所述第二消息的地址放置在所述远程隧道代理缓冲器中。
声明173、本发明概念的实施例包括一种制品,所述制品包括有形非暂时性存储介质,所述有形非暂时性存储介质上存储有指令,所述指令在由机器执行时引起以下操作:
在非易失性存储器快速(NVMe)固态驱动器(SSD)处通过外围组件互连快速(PCIe)隧道接收包含远程过程调用(RPC)的第一消息;
从所述第一消息解包出所述RPC;
在所述NVMe SSD上的存储内处理器上执行所述RPC,从而生成所述RPC的结果;
将所述程序呼叫的所述结果包装在第二消息中;以及
通过所述PCIe隧道从所述NVMe SSD发送所述第二消息。
声明174、本发明概念的实施例包括根据声明173所述的制品,其中:
在NVMe SSD处通过PCIe隧道接收包含RPC的第一消息包括在中间人(MitM)填充码处接收所述第一消息;以及
通过所述PCIe隧道从所述NVMe SSD发送所述第二消息包括使用所述MitM填充码通过所述PCIe隧道从所述NVMe SSD发送所述第二消息。
声明175、本发明概念的实施例包括根据声明173所述的制品,其中:
在NVMe SSD处通过PCIe隧道接收包含RPC的第一消息包括使用第一系统呼叫来接收所述第一消息;以及
通过所述PCIe隧道从所述NVMe SSD发送所述第二消息包括使用第二系统呼叫通过所述PCIe隧道从所述NVMe SSD发送所述第二消息。
声明176、本发明概念的实施例包括根据声明175所述的制品,其中所述第一系统呼叫包括取代性系统呼叫或经包装系统呼叫。
声明177、本发明概念的实施例包括根据声明175所述的制品,其中所述第二系统呼叫包括取代性系统呼叫或经包装系统呼叫。
声明178、本发明概念的实施例包括根据声明173所述的制品,其中:
在NVMe SSD处通过PCIe隧道接收包含RPC的第一消息包括接收包含所述RPC的第一以太网帧;以及
通过所述PCIe隧道从所述NVMe SSD发送所述第二消息包括通过所述PCIe隧道从所述NVMe SSD发送包含所述程序呼叫的所述结果的第二以太网帧。
声明179、本发明概念的实施例包括根据声明173所述的制品,其中:
在NVMe SSD处通过PCIe隧道接收包含RPC的第一消息包括使用第一新传送层命令来接收所述第一消息;以及
通过所述PCIe隧道从所述NVMe SSD发送所述第二消息包括使用第二新传送层命令通过所述PCIe隧道从所述NVMe SSD发送所述第二消息。
声明180、本发明概念的实施例包括根据声明173所述的制品,其中在NVMe SSD处通过PCIe隧道接收包含RPC的第一消息包括由本地隧道代理从本地隧道代理缓冲器读取所述第一消息。
声明181、本发明概念的实施例包括根据声明180所述的制品,其中所述本地隧道代理缓冲器对于主机处理器是本地的。
声明182、本发明概念的实施例包括根据声明180所述的制品,其中所述本地隧道代理缓冲器对于所述NVMe SSD是本地的。
声明183、本发明概念的实施例包括根据声明180所述的制品,其中由本地隧道代理从本地隧道代理缓冲器读取所述第一消息包括使用在主机处理器本地的直接存储器存取(DMA)引擎。
声明184、本发明概念的实施例包括根据声明180所述的制品,其中由本地隧道代理从本地隧道代理缓冲器读取所述第一消息包括使用在所述NVMe SSD本地的DMA引擎。
声明185、本发明概念的实施例包括根据声明180所述的制品,其中由本地隧道代理从本地隧道代理缓冲器读取所述第一消息包括:
由所述本地隧道代理从所述本地隧道代理缓冲器读取所述第一消息的地址;以及
使用所述第一消息的所述地址来读取所述第一消息。
声明186、本发明概念的实施例包括根据声明180所述的制品,其中由本地隧道代理从本地隧道代理缓冲器读取所述第一消息包括:至少部分地基于具有所述第一消息的所述本地隧道代理缓冲器,由本地隧道代理从本地隧道代理缓冲器读取所述第一消息。
声明187、本发明概念的实施例包括根据声明180所述的制品,其中在NVMe SSD处通过PCIe隧道接收包含RPC的第一消息进一步包括从远程隧道代理接收已将所述第一消息放置在所述本地隧道代理缓冲器中的信号。
声明188、本发明概念的实施例包括根据声明173所述的制品,其中通过所述PCIe隧道从所述NVMe SSD发送所述第二消息包括由本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中。
声明189、本发明概念的实施例包括根据声明188所述的制品,其中由本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中包括:至少部分地基于具有用于所述第二消息的容量的所述远程隧道代理缓冲器,由本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中。
声明190、本发明概念的实施例包括根据声明188所述的制品,其中所述远程隧道代理缓冲器对于主机处理器是本地的。
声明191、本发明概念的实施例包括根据声明188所述的制品,其中所述远程隧道代理缓冲器对于所述NVMe SSD是本地的。
声明192、本发明概念的实施例包括根据声明188所述的制品,其中由本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中包括使用在主机处理器本地的DMA引擎。
声明193、本发明概念的实施例包括根据声明188所述的制品,其中由本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中包括使用在所述NVMe SSD本地的DMA引擎。
声明194、本发明概念的实施例包括根据声明188所述的制品,其中由所述本地隧道代理将所述第二消息放置在远程隧道代理缓冲器中包括由所述本地隧道代理将所述第二消息的地址放置在所述远程隧道代理缓冲器中。
因此,考虑到本文所述实施例的各种变更,此详细说明及随附材料旨在仅为说明性的,而不应视为对本发明概念的范围进行限制。因此,作为本发明概念所主张的权利要求范围是可落于以上权利要求书及其等效形式的范围及精神内的所有这种修改。
Claims (20)
1.一种主机,包括:
主机处理器;
存储器;
操作系统,在所述主机处理器上运行;
应用,在所述主机处理器上的所述操作系统下运行,所述应用包括远程过程调用;
外围组件互连快速隧道,通往非易失性存储器快速固态驱动器;以及
远程过程调用俘获模块,位于所述操作系统中,用以俘获来自所述应用的所述远程过程调用并就像从所述主机处理器一样将所述远程过程调用的结果递送到所述应用,
其中所述非易失性存储器快速固态驱动器可执行所述远程过程调用以产生所述结果。
2.根据权利要求1所述的主机,其中所述远程过程调用俘获模块包括中间人填充码。
3.根据权利要求1所述的主机,其中所述远程过程调用俘获模块包括:第一系统呼叫,用以俘获来自所述应用的所述远程过程调用;以及第二系统呼叫,用以通过所述外围组件互连快速隧道从所述非易失性存储器快速固态驱动器接收所述远程过程调用的所述结果。
4.根据权利要求1所述的主机,其中所述远程过程调用俘获模块包括以太网帧检验器,所述以太网帧检验器用以检验以太网帧以确定所述以太网帧包含所述远程过程调用。
5.根据权利要求1所述的主机,进一步包括用以从所述远程过程调用俘获模块接收所述远程过程调用的本地隧道代理,所述本地隧道代理包括:
消息包装器,用以将所述远程过程调用包装在消息中;以及
消息发送器,用以将所述消息放置在远程隧道代理缓冲器中。
6.根据权利要求5所述的主机,其中所述本地隧道代理进一步包括远程隧道代理缓冲器容量检查,所述远程隧道代理缓冲器容量检查用以确定所述远程隧道代理缓冲器具有用于所述消息的容量。
7.根据权利要求1所述的主机,进一步包括用以将所述远程过程调用的所述结果递送到所述远程过程调用俘获模块的本地隧道代理,所述本地隧道代理包括:
消息接收器,用以从本地隧道代理缓冲器读取消息,所述消息包含所述远程过程调用的所述结果;以及
消息解包器,用以从所述消息解包出所述远程过程调用的所述结果。
8.根据权利要求1所述的主机,进一步包括所述非易失性存储器快速固态驱动器,所述非易失性存储器快速固态驱动器包括:
接口,通往所述主机;
数据存储装置;
消息接收器,用以跨越所述接口经由所述外围组件互连快速隧道从所述主机接收第一消息,所述第一消息包含所述远程过程调用;
消息解包器,用以从所述第一消息解包出所述远程过程调用;
存储内处理器,用以执行所述远程过程调用,从而生成所述远程过程调用的所述结果;
消息包装器,用以将所述远程过程调用的所述结果包装在第二消息中;以及
消息发送器,用以跨越所述接口经由所述外围组件互连快速隧道将所述第二消息传输到所述主机。
9.一种非易失性存储器快速固态驱动器,包括:
接口,通往主机;
数据存储装置;
消息接收器,用以跨越所述接口经由外围组件互连快速隧道从所述主机接收第一消息,所述第一消息包含远程过程调用;
消息解包器,用以从所述第一消息解包出所述远程过程调用;
存储内处理器,用以执行所述远程过程调用,从而生成所述远程过程调用的结果;
消息包装器,用以将所述远程过程调用的所述结果包装在第二消息中;以及
消息发送器,用以跨越所述接口经由所述外围组件互连快速隧道将所述第二消息传输到所述主机。
10.根据权利要求9所述的非易失性存储器快速固态驱动器,进一步包括本地隧道代理,所述本地隧道代理用以从本地隧道代理缓冲器读取所述第一消息及将所述第二消息写入到远程隧道代理缓冲器。
11.根据权利要求10所述的非易失性存储器快速固态驱动器,其中所述本地隧道代理可操作以至少部分地基于具有所述第一消息的所述本地隧道代理缓冲器而从所述本地隧道代理缓冲器读取所述第一消息。
12.根据权利要求10所述的非易失性存储器快速固态驱动器,其中所述本地隧道代理进一步包括远程隧道代理缓冲器容量检查,所述远程隧道代理缓冲器容量检查用以确定所述远程隧道代理缓冲器具有用于所述第二消息的容量。
13.一种存储服务的方法,包括:
拦截从应用到主机处理器的远程过程调用;
通过外围组件互连快速隧道将所述远程过程调用递送到非易失性存储器快速固态驱动器;
通过所述外围组件互连快速隧道从所述非易失性存储器快速固态驱动器接收所述远程过程调用的结果;以及
就像从所述主机处理器一样将所述远程过程调用的所述结果递送到所述应用。
14.根据权利要求13所述的方法,其中:
拦截从所述应用到所述主机处理器的所述远程过程调用包括使用中间人填充码来俘获由远程过程调用客户端发送的所述远程过程调用;以及
通过所述外围组件互连快速隧道从所述非易失性存储器快速固态驱动器接收所述远程过程调用的所述结果包括在所述中间人填充码处通过所述外围组件互连快速隧道从所述非易失性存储器快速固态驱动器接收所述远程过程调用的所述结果。
15.根据权利要求13所述的方法,其中:
拦截从所述应用到所述主机处理器的所述远程过程调用包括使用第一系统呼叫来俘获来自所述应用的所述远程过程调用;以及
通过所述外围组件互连快速隧道从所述非易失性存储器快速固态驱动器接收所述远程过程调用的所述结果包括使用第二系统呼叫从所述非易失性存储器快速固态驱动器接收所述远程过程调用的所述结果。
16.根据权利要求13所述的方法,其中:
拦截从所述应用到所述主机处理器的所述远程过程调用包括:
检验以太网帧以确定所述以太网帧包含所述远程过程调用;以及
至少部分地基于包含所述远程过程调用的所述以太网帧,俘获所述以太网帧;以及
通过所述外围组件互连快速隧道从所述非易失性存储器快速固态驱动器接收所述远程过程调用的所述结果包括在第二以太网帧中从所述非易失性存储器快速固态驱动器接收所述远程过程调用的所述结果。
17.根据权利要求13所述的方法,其中通过所述外围组件互连快速隧道将所述远程过程调用递送到所述非易失性存储器快速固态驱动器包括:
由本地隧道代理将所述远程过程调用包装在消息中;以及
由所述本地隧道代理将所述消息放置在远程隧道代理缓冲器中。
18.根据权利要求17所述的方法,其中由所述本地隧道代理将所述消息放置在所述远程隧道代理缓冲器中包括:至少部分地基于具有用于所述消息的容量的所述远程隧道代理缓冲器,由所述本地隧道代理将所述消息放置在所述远程隧道代理缓冲器中。
19.根据权利要求13所述的方法,其中通过所述外围组件互连快速隧道从所述非易失性存储器快速固态驱动器接收所述远程过程调用的所述结果包括:
由本地隧道代理从本地隧道代理缓冲器检索消息;以及
由所述本地隧道代理从所述消息解包出所述远程过程调用的所述结果。
20.根据权利要求19所述的方法,其中由所述本地隧道代理从所述本地隧道代理缓冲器检索所述消息包括:至少部分地基于具有所述消息的所述本地隧道代理缓冲器,由所述本地隧道代理从所述本地隧道代理缓冲器检索所述消息。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201862746550P | 2018-10-16 | 2018-10-16 | |
US62/746,550 | 2018-10-16 | ||
US16/362,604 | 2019-03-22 | ||
US16/362,604 US10846155B2 (en) | 2018-10-16 | 2019-03-22 | Method for NVMe SSD based storage service using RPC and gRPC tunneling over PCIe + |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111061425A true CN111061425A (zh) | 2020-04-24 |
CN111061425B CN111061425B (zh) | 2024-07-12 |
Family
ID=70162343
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910860087.2A Active CN111061425B (zh) | 2018-10-16 | 2019-09-11 | 主机、非易失性存储器快速固态驱动器及存储服务的方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US10846155B2 (zh) |
JP (1) | JP7250656B2 (zh) |
KR (1) | KR102505220B1 (zh) |
CN (1) | CN111061425B (zh) |
TW (1) | TWI777072B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117033330A (zh) * | 2023-10-08 | 2023-11-10 | 南京翼辉信息技术有限公司 | 一种多核文件共享系统及其控制方法 |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10009324B2 (en) | 2015-06-29 | 2018-06-26 | American Express Travel Related Services Company, Inc. | Host card emulation systems and methods |
US11080409B2 (en) * | 2018-11-07 | 2021-08-03 | Ngd Systems, Inc. | SSD content encryption and authentication |
US11848989B2 (en) | 2019-05-30 | 2023-12-19 | Hewlett Packard Enterprise Development Lp | Separate routing of NVMe-over-fabric packets and non-NVMe packets |
US11777804B2 (en) * | 2019-06-11 | 2023-10-03 | Hewlett Packard Enterprise Development Lp | Automatic system provisioning for NVME-over-fabric storage |
DE112019007502T5 (de) | 2019-06-25 | 2022-09-22 | Hewlett Packard Enterprise Development Lp | Zuordnen von nvme-over-fabric-paketen mithilfe von virtuellen ausgangswarteschlangen |
CN110830304B (zh) * | 2019-11-13 | 2022-11-11 | 深圳竹芒科技有限公司 | 一种主从通讯系统、从机位置识别方法和移动电源的租借装置 |
US11314673B2 (en) | 2019-12-27 | 2022-04-26 | Texas Instruments Incorporated | Configurable multi-function PCIe endpoint controller in an SoC |
CN111367659B (zh) * | 2020-02-24 | 2022-07-12 | 苏州浪潮智能科技有限公司 | 一种Kubernetes中节点的资源管理方法、设备以及介质 |
US20210329100A1 (en) * | 2020-04-10 | 2021-10-21 | Oracle International Corporation | System and method for use of remote procedure call with a microservices environment |
US20210357119A1 (en) * | 2020-05-15 | 2021-11-18 | Rey Bruce | Artificial intelligence-based hybrid raid controller device |
US11570257B1 (en) | 2020-08-25 | 2023-01-31 | Neureality Ltd. | Communication protocol, and a method thereof for accelerating artificial intelligence processing tasks |
CN113296979B (zh) * | 2021-05-13 | 2022-10-14 | 中国人民解放军军事科学院战争研究院 | 一种虚幻引擎与外部程序的数据通信方法 |
WO2024036463A1 (en) * | 2022-08-16 | 2024-02-22 | Qualcomm Incorporated | Remote procedure call virtualization |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101452411A (zh) * | 2007-12-07 | 2009-06-10 | 国际商业机器公司 | 用于管理向远程备份服务器进行备份的系统和方法 |
US20150317091A1 (en) * | 2014-05-02 | 2015-11-05 | Cavium, Inc. | Systems and methods for enabling local caching for remote storage devices over a network via nvme controller |
CN105408875A (zh) * | 2014-02-23 | 2016-03-16 | 拉姆伯斯公司 | 在存储器接口上的分布式过程执行和文件系统 |
CN105556930A (zh) * | 2013-06-26 | 2016-05-04 | 科内克斯实验室公司 | 针对远程存储器访问的nvm express控制器 |
US20160127468A1 (en) * | 2014-11-04 | 2016-05-05 | Pavilion Data Systems, Inc. | Virtual non-volatile memory express drive |
US20180089101A1 (en) * | 2016-09-28 | 2018-03-29 | Intel Corporation | Computer product, method, and system to provide a virtual target to virtualize target system storage resources as virtual target storage resources |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3459165B2 (ja) * | 1996-09-30 | 2003-10-20 | 株式会社沖データ | パケット処理方法とネットワ−クア−キテクチャ |
US7171494B2 (en) | 2001-01-31 | 2007-01-30 | Hewlett-Packard Development Company, L.P. | Extending a standard-based remote file access protocol and maintaining compatibility with a standard protocol stack |
US7320141B2 (en) * | 2001-03-21 | 2008-01-15 | International Business Machines Corporation | Method and system for server support for pluggable authorization systems |
EP1320037A1 (en) * | 2001-12-11 | 2003-06-18 | Thomson Licensing S.A. | Storage device |
US7596634B2 (en) | 2002-12-12 | 2009-09-29 | Millind Mittal | Networked application request servicing offloaded from host |
JP2005228183A (ja) * | 2004-02-16 | 2005-08-25 | Hitachi Ltd | プログラム実行方法、および、プログラム実行のための計算機システム |
US7801912B2 (en) * | 2005-12-29 | 2010-09-21 | Amazon Technologies, Inc. | Method and apparatus for a searchable data service |
US9069790B2 (en) * | 2013-03-14 | 2015-06-30 | Stephen P. LORD | Multi-threaded message passing journal |
US9424273B2 (en) * | 2013-05-01 | 2016-08-23 | Netapp, Inc. | System and method for asynchronous use of a network-based file system |
ES2866156T3 (es) * | 2013-05-02 | 2021-10-19 | Huawei Tech Co Ltd | Sistema informático, método para acceder a un terminal de interconexión de componentes periféricos exprés, y equipo |
US10089192B2 (en) * | 2013-06-13 | 2018-10-02 | Hytrust, Inc. | Live restore for a data intelligent storage system |
US20160259568A1 (en) * | 2013-11-26 | 2016-09-08 | Knut S. Grimsrud | Method and apparatus for storing data |
US20150301964A1 (en) * | 2014-02-18 | 2015-10-22 | Alistair Mark Brinicombe | Methods and systems of multi-memory, control and data plane architecture |
CN105897805B (zh) | 2015-01-04 | 2019-12-27 | 伊姆西公司 | 对多层架构的数据中心的资源进行跨层调度的方法和装置 |
US10735513B2 (en) * | 2016-09-08 | 2020-08-04 | Toshiba Memory Corporation | Remote NVMe activation |
US10713203B2 (en) | 2017-02-28 | 2020-07-14 | Cisco Technology, Inc. | Dynamic partition of PCIe disk arrays based on software configuration / policy distribution |
US10552332B2 (en) * | 2018-05-10 | 2020-02-04 | Alibaba Group Holding Limited | Rapid side-channel access to storage devices |
US10795612B2 (en) * | 2018-07-31 | 2020-10-06 | EMC IP Holding Company LLC | Offload processing using storage device slots |
-
2019
- 2019-03-22 US US16/362,604 patent/US10846155B2/en active Active
- 2019-07-09 TW TW108124065A patent/TWI777072B/zh active
- 2019-09-11 CN CN201910860087.2A patent/CN111061425B/zh active Active
- 2019-09-18 KR KR1020190114589A patent/KR102505220B1/ko active IP Right Grant
- 2019-10-16 JP JP2019189178A patent/JP7250656B2/ja active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101452411A (zh) * | 2007-12-07 | 2009-06-10 | 国际商业机器公司 | 用于管理向远程备份服务器进行备份的系统和方法 |
CN105556930A (zh) * | 2013-06-26 | 2016-05-04 | 科内克斯实验室公司 | 针对远程存储器访问的nvm express控制器 |
CN105408875A (zh) * | 2014-02-23 | 2016-03-16 | 拉姆伯斯公司 | 在存储器接口上的分布式过程执行和文件系统 |
US20150317091A1 (en) * | 2014-05-02 | 2015-11-05 | Cavium, Inc. | Systems and methods for enabling local caching for remote storage devices over a network via nvme controller |
US20160127468A1 (en) * | 2014-11-04 | 2016-05-05 | Pavilion Data Systems, Inc. | Virtual non-volatile memory express drive |
US20180089101A1 (en) * | 2016-09-28 | 2018-03-29 | Intel Corporation | Computer product, method, and system to provide a virtual target to virtualize target system storage resources as virtual target storage resources |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117033330A (zh) * | 2023-10-08 | 2023-11-10 | 南京翼辉信息技术有限公司 | 一种多核文件共享系统及其控制方法 |
CN117033330B (zh) * | 2023-10-08 | 2023-12-08 | 南京翼辉信息技术有限公司 | 一种多核文件共享系统及其控制方法 |
Also Published As
Publication number | Publication date |
---|---|
US20200117525A1 (en) | 2020-04-16 |
KR102505220B1 (ko) | 2023-03-03 |
TWI777072B (zh) | 2022-09-11 |
TW202016744A (zh) | 2020-05-01 |
KR20200042846A (ko) | 2020-04-24 |
US10846155B2 (en) | 2020-11-24 |
JP7250656B2 (ja) | 2023-04-03 |
JP2020064634A (ja) | 2020-04-23 |
CN111061425B (zh) | 2024-07-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111061425B (zh) | 主机、非易失性存储器快速固态驱动器及存储服务的方法 | |
US7941613B2 (en) | Shared memory architecture | |
US10275375B2 (en) | Network interface controller with compression capabilities | |
JP4347247B2 (ja) | データ転送要求を実行するための方法、システム、およびプログラム | |
CN110647480A (zh) | 数据处理方法、远程直接访存网卡和设备 | |
US7581015B2 (en) | Communication device having transmitting and receiving units supports RDMA communication | |
CN108701004A (zh) | 一种数据处理的系统、方法及对应装置 | |
US20190079895A1 (en) | System and method for maximizing bandwidth of pci express peer-to-peer (p2p) connection | |
CN113490927B (zh) | 具有硬件集成和乱序放置的rdma输送 | |
EP1883240B1 (en) | Distributed multi-media server system, multi-media information distribution method, program thereof, and recording medium | |
US20230027178A1 (en) | Composable infrastructure enabled by heterogeneous architecture, delivered by cxl based cached switch soc and extensible via cxloverethernet (coe) protocols | |
EP1839162A1 (en) | RNIC-BASED OFFLOAD OF iSCSI DATA MOVEMENT FUNCTION BY TARGET | |
US20050187939A1 (en) | Method, system, and program for managing data read operations | |
CN114201421B (zh) | 一种数据流处理方法、存储控制节点及可读存储介质 | |
CN114138707B (zh) | 一种基于fpga的数据传输系统 | |
US20150199298A1 (en) | Storage and network interface memory share | |
KR100723879B1 (ko) | TOE를 이용한 iSCSI 타겟 시스템 상의 하드웨어가속 장치 및 그 장치를 이용한 읽기/쓰기 명령 수행방법 | |
CN117992125A (zh) | 减少用于基于存储器的通信队列的索引更新消息 | |
Nguyen et al. | Reducing data copies between gpus and nics | |
CN112019450A (zh) | 设备间流式通信 | |
US10452579B2 (en) | Managing input/output core processing via two different bus protocols using remote direct memory access (RDMA) off-loading processing system | |
US11960768B2 (en) | Memory-side cache directory-based request queue | |
US20240070078A1 (en) | Recall pending cache line eviction | |
KR20230095014A (ko) | 네트워크 인터페이스와 함께 스토리지 디바이스를 사용하는 컨텐츠 배포를 위한 시스템, 방법 및 디바이스 | |
CN115933973A (zh) | 远程更新数据的方法、rdma系统及存储介质 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |