访问存储在服务器上高速缓存中的数据记录的设备和方法

文档序号:6544831阅读:220来源:国知局
访问存储在服务器上高速缓存中的数据记录的设备和方法
【专利摘要】服务器和/或客户端存储元数据哈希映射,所述元数据哈希映射包括与用于存储在服务器上的高速缓存中的数据记录的键相关联的一个或多个条目。每个条目存储对应的数据记录的元数据,其中所述元数据包括服务器侧远程指针以及所述键的版本标识符,所述服务器侧远程指针引用存储在所述高速缓存中的对应的数据记录。使用所提供的键通过以下访问所选择的数据记录:(1)使用所提供的键标识在所述元数据哈希映射中的可能匹配的条目;(2)使用来自可能匹配的条目的服务器侧远程指针来访问存储在高速缓存中的数据记录;以及(3)使用所提供的键和来自可能匹配的条目的版本标识符来确定所访问的数据记录是否匹配于所选择的数据记录。
【专利说明】访问存储在服务器上高速缓存中的数据记录的设备和方法

【技术领域】
[0001] 本发明一般而言涉及由计算机进行的数据库管理系统,并且特别地涉及RDMA优 化的高性能分布式高速缓存(cache)。

【背景技术】
[0002] 当今的消费者要求即时响应的驱动器应用以开发多种缓存方案。小规格的应 用可以依赖本地高速缓存和复制(replication)。然而,在各请求之间的服务器相似性 (affinity)不能被确保且涉及的数据空间是庞大的情况下,当向外扩展因特网应用和使用 云时,不再能够使用本地高速缓存。替代地,系统不得不依赖于必须被远程访问的划分的并 分布的高速缓存(例如 WebSphere Extreme Scale? 或 Oracle Coherence?)。
[0003] 常规的键-值(key-value)高速缓存架构是使得客户端通过将键作为参数而传递 的网络发送对数据的请求到服务器。服务器在其高速缓存中为了所关联的对象-值、例如 对于数据对象的句柄(handle)或到数据对象指针而进行键查找(通常基于哈希(hash))。 如果找到,则数据对象被串行化并被返回给客户端。在接收到串行化的数据对象时,客户端 对其去串行化并将其返回到进行请求的应用。


【发明内容】

[0004] 根据本发明的一个或多个实施例,提供了用于访问存储在服务器上的高速缓存中 的一个或多个数据记录的方法、设备和制造品。服务器和/或客户端存储元数据哈希映 射(map),其包括一个或多个与用于存储在服务器上的高速缓存中的数据记录的键相关联 的条目(entry)。每一个条目存储用于对应的数据记录的元数据,其中该元数据包括引用 (reference)存储在高速缓存中的对应的数据记录的服务器侧远程指针以及键的版本标识 符。通过以下使用所提供的键访问所选择的数据记录:(1)使用所提供的键标识在元数据 哈希映射中的可能匹配的条目;(2)使用来自元数据哈希映射中的可能匹配的条目的服务 器侧远程指针来访问存储在高速缓存中的一个或多个数据记录;和(3)使用所提供的键和 来自元数据哈希映射中的可能匹配的条目的版本标识符来确定所访问的数据记录是否匹 配于所选择的数据记录。

【专利附图】

【附图说明】
[0005] 现在参考附图,附图中相同的参考数字通篇代表相应的部分:
[0006] 图1是图解可以用于实现本发明的至少一个实施例的要素的示例网络数据处理 系统的图。
[0007] 图2是图解可以用于实现本发明的至少一个实施例的要素的示例数据处理系统 的图。
[0008] 图3是图解可以用于实现本发明的至少一个实施例的要素的示例数据处理系统 的图。
[0009] 图4A是图解根据本发明的至少一个实施例的使用RDM用于高速缓存的系统环境 的示意图。
[0010] 图4B是图解根据本发明的至少一个实施例的与RDMA操作一起使用的元数据哈希 映射的不意图。
[0011] 图4C是图解根据本发明的至少一个实施例的服务器在某个指定的时间将来自元 数据哈希映射的条目传输到一个或多个客户端的示意图。
[0012] 图5是图解根据本发明的至少一个实施例的使用RDMA优化的高速缓存来访问存 储在服务器上的高速缓存中的数据记录的一般步骤或功能的流程图。

【具体实施方式】
[0013] 在以下描述中,参考附图,该附图形成本说明书的一部分并且在附图中通过图解 示出其中可以实施本发明的一个或多个具体实施例。应该理解,可以利用其它实施例,并且 可以不脱离本发明的范围而进行结构的和功能的改变。
[0014] 鍵
[0015] 在以上"【背景技术】"中描述的流程需要至少四次通过TCP/IP堆栈,例如,客户端到 网络接口控制器(NIC)、NIC到服务器、服务器到NIC和NIC到客户端。此外,数据对象需要 两次经历(去)串行化操作,并且数据对象在其流经众多的I/O堆栈层时被多次复制。因 此,远程访问可能比本地访问慢了多达三个数量级(即数百微妙vs.纳秒)。这或者完全阻 止了向外扩展应用,或者使得应用过分地慢。
[0016] 在此描述的本发明的实施例包括重新架构的、分布式键-值对高速缓存,其被适 当地配置用于RDMA (Remote Direct Memory Access远程直接存储器访问)通信,避免上面 描述的TCP/IP协议堆栈问题,并降低数据传输的操作系统涉及。这得到通过网络的极其快 的、基于键的高速缓存查找。
[0017] 代替为客户端提供到存储在服务器上的高速缓存的远程获得/放置接口(get/ put interface),服务器提供了客户端可访问的元数据哈希映射,其包括由高速缓存条目 的键配对到包括它们的远程RDMA指针和键的版本标识符的元数据而组成的键-值对。元 数据哈希映射允许客户端使用键来查找高速缓存条目的元数据,然后在单侧RDMA操作中 使用远程RDMA指针并进行与键的版本标识符的比较来访问在服务器上的高速缓存条目。
[0018] 单侧RDMA操作不涉及服务器侧的软件,因为这些操作由RDMA NIC进行,其中NIC 进行直接到或来自于服务器的存储器的DMA操作,这导致甚至在重负载以下的非常低的服 务器CPU利用率。具体地,可以使用单侧RDMA操作来实现读取、更新和删除操作,而创建操 作需要一些服务器侧的软件涉及,因为创建操作引入了新键。
[0019] 因此,本发明可以用于诸如零售、旅行、银行业务、信息服务等的与上下文高度相 关的和个人化的应用的更快的页面呈现。本发明的实施例还可以用于诸如零售、移动、信用 卡等的"大数据"应用的更快的实时分析中。另外,本发明的实施例可以用于诸如高速数据 捕捉、实时(on-the-fly)的数据丰富等的任何以因特网规模通信速率的数据处理。
[0020] 因此,本发明的实施例所展示的优点是实际的并且自然几乎是颠覆性的。RDMA优 化的高速缓存通过增加总处理能力并加速依赖于对分布式数据的访问的等待时间至关重 要的消费者情景而"超越(leapfrog) " 了现有技术的性能。
[0021] 本申请与以上标识的交叉引用的申请提供了另外的改进:
[0022] 1.消除了保留键的客户端侧复制本的必要性。
[0023] 2.消除了广播者将服务器侧修改多播(multicast)到客户端的必要性。
[0024] 3.弓丨入了对键的版本控制(versioning)。
[0025] 在此实施例中,服务器在大的预分配的并固定的(pinned)/登记的存储器页中存 储所有高速缓存条目。对于每个被添加到高速缓存的条目,创建包含关于条目在高速缓存 中的位置的信息以及对于条目的键的版本的元数据。该元数据可以用于经由RDMA网络适 配器从服务器的外部访问高速缓存条目。
[0026] 服务器在通过RDMA已知的存储而分配的存储器区域中连续地存储条目的键和数 据值。键也包括唯一的版本标识符,其等同于在它的元数据中存储的标识符。服务器存储到 高速缓存条目的句柄或指针以及在元数据哈希映射中的通过条目的键而散列的(hashed) 键的版本标识符。
[0027] 元数据哈希映射被存储在服务器上,而客户端可以仅存储来自该元数据哈希映射 的条目的子集。通过使用实质上减少冲突(collision)并因此避免在客户端存储器中存储 键的高级散列技术,元数据哈希映射被保持为相对小,对于甚至具有几十千兆字节(GB)大 小的大的高速缓存具有几十兆字节(MB)的大小。
[0028] 在启动时,客户端以空的元数据哈希映射开始,该空的元数据哈希映射充当本地 元数据高速缓存。因此,客户端对于高速缓存丢失(miss)、高速缓存命中和陈旧元数据不同 地做出反应。客户端使用它的元数据哈希映射来本地查找远程高速缓存条目的句柄并使用 它来通过RDMA直接对条目进行CRUD (创建、读取、更新、删除)操作。
[0029] 硬件和软件环塏
[0030] 如本领域技术人员将认识到的,本发明的方面可以体现为系统、方法或计算机程 序产品。因而,本发明的方面可以采取完全硬件实施例、完全软件实施例(包括固件,常驻 软件,微代码等)或组合了软件和硬件方面的实施例的形式,其所有通常可以在此称为"电 路" "模块"或"系统"。此外,本发明的方面可以采取体现在一个或多个具有在其上包括的 计算机可读程序代码的计算机可读介质的计算机程序产品的形式。
[0031] 可以利用一个或多个计算机可读介质的组合。计算机可读介质可以是计算机可读 信号介质或计算机可读存储介质。计算机可读存储介质可以是例如但不限于电、磁、光、电 磁、红外线或半导体系统、设备或装置、或以上的任意适当的组合。计算机可读存储介质的 更具体的示例(非穷尽的列表)将包括如下:具有一条或多条导线的电连接、便携计算机磁 盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪 存)、光纤、便携式致密盘只读存储器(⑶-ROM)、光存储设备、磁存储设备、或以上的任意适 当的组合。在本文档的上下文中,计算机可读存储介质可以是可以包含或存储用于由指令 执行系统、设备或者装置使用或与该指令执行系统、设备或者装置结合使用的程序的任何 切实的介质。
[0032] 计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号, 其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限 于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可 读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于 由指令执行系统、装置或者设备使用或者与其结合使用的程序。
[0033] 体现在计算机可读介质上的程序代码可以用任何适当的介质传输,所述介质包括 但不限于:无线、有线、光缆、RF等,或上述的任意合适的组合。
[0034] 可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机 程序代码,所述程序设计语言包括面向对象的程序设计语言一诸如Java、Smalltalk、C++, 还包括常规的过程式程序设计语言一诸如"C"语言或类似的程序设计语言。程序代码可以 完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部 分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在 涉及远程计算机的情形中,远程计算机可以通过任意种类的网络--包括局域网(LAN)或 广域网(WAN)-连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提 供商来通过因特网连接)。
[0035] 以下参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/ 或框图描述本发明的方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框 图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用 计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些 计算机程序指令通过计算机的处理器或其它可编程数据处理装置执行,产生了实现流程图 和/或框图中的方框中规定的功能/动作的装置。
[0036] 也可以把这些计算机程序指令存储在能使得计算机、其它可编程数据处理装置或 其它设备以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令产 生出包括实现流程图和/或框图中的方框中规定的功能/动作的指令的制造品。
[0037] 也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备 上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计 算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图 和/或框图中的方框中规定的功能/动作的过程。
[0038] 附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程 序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以 代表模块、程序段或代码的一部分,该模块、程序段或代码的一部分包含一个或多个用于实 现规定的逻辑功能的可执行指令。也应当注意,在有些替换的实现中,方框中所标注的功能 也可以以不同于附图中所标注的顺序发生。例如,连续示出的两个方框实际上可以基本并 行地执行,或者这些块有时也可以按相反的顺序执行,这依赖于所涉及的功能。也要注意的 是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合可以由执行规 定的功能或动作的专用的基于硬件的系统或者由专用硬件与计算机指令的组合来实现。
[0039] 现在参考图1,给出了其中可以实现本发明的网络数据处理系统100的图形表示。 网络数据处理系统100包含网络102,其是用于提供在网络数据处理系统100内连接在一起 的各种装置和计算机之间的通信链接的介质。网络102可以包括诸如导线、无线通信链接 或光纤电缆等的连接。
[0040] 在所描述的示例中,服务器104与存储单元106 -起连接到网络102。另外,客户 端108、110和112连接到网络102。这些客户端108、110和112可以是例如个人计算机或 网络计算机。在所描述的示例中,服务器104提供诸如引导文件、操作系统图像和程序的数 据到客户端108、110和112。客户端108、110和112是对于服务器104的客户端。网络数 据处理系统100可以包括另外的服务器、客户端和其它未示出的装置。在所描述的示例中, 网络数据处理系统100是具有代表使用TCP/IP协议套件来彼此通信的网络和网关的世界 范围集合的网络102的因特网。
[0041] 参考图2,依照本发明的实施例描绘了可以实施为服务器、例如图1的服务器104 的数据处理系统的框图。数据处理系统200可以是包括多个连接到系统总线206的处理器 202和204的对称多处理器(SMP)系统。替代地,可以采用单处理器系统。存储器控制器/ 高速缓存208也连接到系统总线206,该存储器控制器/高速缓存208提供到本地存储器 209的接口。I/O总线桥210连接到系统总线206,并提供到I/O总线212的接口。存储器 控制器/高速缓存208和I/O总线桥210可以如所绘而被集成。
[0042] 连接到I/O总线212的外围组件互连(PCI)总线桥214提供到PCI局部总线216 的接口。多个调制解调器可以连接到PCI局部总线216。典型的PCI总线实现将支持四个 PCI扩展槽或内插(add-in)连接器。可以通过经内插板连接到PCI局部总线216的调制解 调器218和网络适配器220来提供到图1中的网络计算机108U10和112的通信链接。另 外的PCI总线桥222和224提供用于另外的PCI局部总线226和228的接口,从这些另外 的PCI局部总线可以支持另外的调制解调器和网络适配器。以此方式,数据处理系统200 允许到多个网络计算机的连接。存储器映射的图形适配器230和硬盘232也可以如所绘直 接或间接地连接到I/O总线212。
[0043] 本领域技术人员会理解,图2中描述的硬件可以变化。例如,除了或替代所描述的 硬件,也可以使用诸如光盘驱动器等的其它外围装置。所描述的示例并不打算暗示对本发 明的架构限制。
[0044] 在图2描述的数据处理系统200可以是例如运行高级交互执行(AIX)操作系统或 LINUX操作系统的IBM e-服务器p系列系统,其是位于纽约阿芒克的国际商业机器公司的 产品。
[0045] 服务器104可以提供可以被用户访问以允许对于本发明的实施例的方面的用户 交互的合适的网站或其它基于因特网的图形用户界面。在一个实施例中,网景(Netscape) 网页服务器、IBM的WebSphere因特网工具套件、用于Linux、Unix和Windows的IBM DB2 (也 称为"用于LUW的IBM DB2")平台和Sybase的数据库平台与Sun Solaris操作系统平台 结合而使用。另外,诸如JBDC驱动器,IBM连接池化(pooling)和IBM MQ系列连接方法的 组件可以用于提供到几个源的数据访问。如在此使用的术语网页并不打算限制可以用于与 用户交互的文档或程序的类型。例如,除标准HTML文档以外,典型的网站可以包括多种形 式、Java小应用程序、Java脚本、动态服务器页面(ASP)、Java服务器页面(JSP)、公共网关 接口脚本(CGI)、可扩展标记语言(XML)、动态HTML,级联样式表(CSS)、帮助程序、插件等。
[0046] 现在参考图3,描绘了图解其中可以实现本发明的实施例的方面的数据处理系统 的框图。数据处理系统300是客户端计算机的示例。数据处理系统300使用外围组件互 连(PCI)局部总线架构。尽管所描述的示例使用PCI总线,但是可以使用诸如加速图形端 口(AGP)和工业标准架构(ISA)的其它总线架构。处理器302和主存储器304通过PCI桥 308连接到PCI局部总线306。PCI桥308也可以包括集成存储器控制器和用于处理器302 的高速缓存存储器。到PCI局部总线306的另外的连接可以通过直接组件互连或通过内插 板来完成。在所描述的示例中,局域网(LAN)适配器310、小型计算机系统界面(SCSI)主机 总线适配器312和扩展总线接口 314通过直接组件连接而连接到PCI局部总线306。与此 相对,音频适配器316、图形适配器318和音频/视频适配器319通过插入到扩展槽中的内 插板而连接到PCI局部总线306。
[0047] 扩展总线接口 314提供用于键盘和鼠标适配器320、调制解调器322和另外的存 储器324的连接。SCSI主机总线适配器312提供用于硬盘驱动器326、磁带驱动器328和 ⑶-ROM驱动器330的连接。典型的局部总线实施将支持三个或四个PCI扩展槽或内插连接 器。
[0048] 操作系统运行于处理器302上,并用于协调和提供在图3的数据处理系统300内 的各种组件的控制。该操作系统可以是商业上可用的操作系统,比如Windows XP?,其 可从微软公司获得。诸如Java的面向对象的编程系统可以与操作系统结合运行并通过从 Java程序或者在数据处理系统300上执行的程序对操作系统的调用。"Java"是太阳微系 统公司的注册商标。用于操作系统的指令、面向对象的操作系统和程序位于诸如硬盘驱动 器326的存储设备中,并可以被加载到主存储器304中用于由处理器302执行。
[0049] 本领域技术人员会理解,图3中的硬件可以取决于实现而变化。除了或替代图3 中所描述的硬件,可以使用其它内部硬件或外围设备、比如闪存R〇M(或等效的非易失存储 器)或光学驱动器等。同样,本发明的处理可以应用到多处理器数据处理系统。
[0050] 作为另一示例,数据处理系统300可以是独立的系统,被配置为不依靠某种类型 的网络通信接口而可启动,无论数据处理系统300是否包括某种类型的网络通信接口。作 为进一步的示例,数据处理系统300可以是个人数字助理(PDA)设备,其被配置有ROM和/ 或快闪ROM以便提供非易失存储器用于存储操作系统文件和/或用户生成的数据。
[0051] 图3中所绘的示例和以上描述的示例不打算暗示架构性限制。例如,数据处理系 统300可以是笔记本计算机或手持计算机以及PDA。另外,数据处理系统300也可以是信 息站(kiosk)或网页装置。另外,本发明可以存在于任意的由计算机系统使用的数据存储 介质(即,软盘、致密盘、硬盘、磁带、R〇M、RAM等)上。(术语"计算机"、"系统"、"计算机系 统"和"数据处理系统"在此可互换使用。)
[0052] RDMA优化的高谏缓存
[0053] 图4A是图解使用RDMA用于高速缓存的系统环境的示意图,该系统环境包括通过 RDMA NIC404和406连接到客户端402的服务器400,其中RDMA NIC404和406使用标准联 网协议而通信。RDMA的核心概念是远程指针408a、408b的使用。服务器400输出服务器侧 远程指针408a到客户端402,其查阅(refer to)在存储在服务器400的存储器414中的 固定的/登记的页412中的数据记录410。类似地,客户端402可以具有客户端侧远程指 针408b,其查阅在存储在客户端402的存储器416中的固定的/登记的页412中的数据记 录410,该指针可以输出或可以不输出到服务器400。在这两个实例中,指针408a、408b包 括句柄,该句柄包括页412值和记录410的地址值。存储在服务器400的存储器414中的 页412中的记录410提供高速缓存,而存储在客户端402的存储器416中的页412中的记 录410提供用于由客户端402执行的一个或多个应用的数据(未示出)。单侧的RDMA操作 允许客户端402使用服务器侧远程指针408a直接访问(读取和盖写)存储在服务器400 的存储器414中的页412中的记录410。
[0054] 具体地,客户端402的RDMA NIC406远程控制服务器400的RDMANIC404。从客户 端402的存储器416取回远程指针408a。RDMA NIC406然后将该远程指针408a传输到服务 器400的RDMA NIC404。RDMA NIC404进行DMA(直接存储器访问)操作,将记录410传送到 服务器400的存储器414中和从服务器400的存储器414中传送出去,如远程指针408a所 指定的。类似地,客户端402的RDMA NIC406进行DMA操作,将记录410传送到客户端402 的存储器416中和从客户端402的存储器416中传送出去,这可以指定或否则与远程指针 408b相关联。
[0055] 这些RDMA操作不需要任何软件在服务器400或客户端402中的执行,由此没有 CPU涉及并且没有在服务器400或客户端402上的CPU利用。从而,这得到客户端402进入 和离开服务器400的存储器414的非常快的、近似线速(wire speed)的远程访问(以及类 似地,服务器400进入和离开客户端402的存储器416的远程访问)。例如,由客户端402 对存储在服务器400的存储器414中的记录410的读取或盖写可以在单个数位的微秒内发 生。
[0056] 在本发明的一个实施例中,与RDMA操作一起使用元数据哈希映射418,如图4B所 示。服务器400创建元数据哈希映射418,其中在元数据哈希映射418中的每个条目或槽与 记录410的键420相关联,其中键420被散列以选择哈希映射418中的槽。在元数据哈希 映射418中的相关联的条目存储包括用于记录410的元数据的对象-值422,其中该元数 据包括用于记录410的服务器侧远程指针408a以及键420的版本标识符422c,该服务器 侧远程指针408a包括存储了记录410的页412的地址422a和记录410在页412内的地址 422b。该元数据还可以包括数据410的大小(未示出)。
[0057] 元数据哈希映射418的大小通常仅是为记录410和页412所分配的存储器414的 量的一小部分。例如,与为记录410所分配的可以具有几十千兆字节的大小的存储器414 中的页412相比较,元数据哈希映射418可以具有几十兆字节的大小。通过使用实质上减 少了冲突的高级散列技术,元数据哈希映射418可以被保持为相对小(例如元数据哈希映 射418不需要包含所有条目的键420,而仅需要包含具有实际冲突的那些槽的键)。
[0058] 如图4C所示,服务器400在某个指定的时间将来自元数据哈希映射418的一个或 多个条目传输到一个或多个客户端,如箭头(1)所表示的。一般而言,这将在响应于由服务 器400在客户端402的指示(direction)下进行的CRUD(创建、读取、更新、删除)操作而 更新服务器400上的元数据哈希映射418时发生。
[0059] 典型地,客户端402将仅在它们的元数据哈希映射418的本地复制本中维持在服 务器400的元数据哈希映射418中发现的条目的子集。客户端402可以使用它们的元数 据哈希映射418的本地复制本来使用键420本地查找与记录410相关联的元数据,以便对 存储在服务器400的存储器414中的记录410进行使用RDMA的CRUD (创建、读取、更新、删 除)操作。
[0060] 最后,服务器400在某个其他指定的时间将来自其元数据哈希映射418的一个或 多个条目传输到一个或多个客户端402,如箭头(3)所表示的。例如,这也可以发生在例如 由客户端402请求时、在客户端402启动时、在由服务器400请求时、在服务器400启动时、 在元数据哈希映射418为了其它原因而改变时或在其它间隔时等等。
[0061] CRUD 操作
[0062] 使用本发明的实施例的RDM优化的高速缓存进行的CRUD操作的细节在以下详细 描述。如之前所述,对记录410的读取和盖写很少涉及或不涉及任意软件在服务器400中 的执行,由此有很少的或没有CPU涉及以及很少的或没有在服务器400上的CPU利用。另 一方面,对记录410的创建或删除可能需要软件在服务器400中的更多的执行。
[0063] 此外,记录410的创建、删除或更新还可能需要将维持在服务器400上的元数据哈 希映射418中条目的复制本传输到客户端402,使得在记录410被创建、删除或更新时客户 端402上的元数据哈希映射418的复制本可以被更新。
[0064] 创律
[0065] 在创建(或插入)操作中,进行以下步骤:
[0066] ?客户端402进行RDMA-发送操作并传递来自新记录410的键420、用于键420的 哈希码和用于键420的值。
[0067] ?服务器400在它的存储器414中的页412中分配和登记新记录410。与新记录 410相关联的是从客户端402接收的键420和用于键420的值、以及包括新记录410的元数 据的对象-值422,其中该元数据包括用于新记录410的服务器侧远程指针408a (即到服务 器400的本地指针)以及键420的版本标识符422c,该服务器侧远程指针408a包括存储记 录410的页412的地址422a和记录410在页412之内的地址422b。
[0068] ?服务器400使用键420的哈希码来标识元数据哈希映射418中的槽并将包括新 记录410的元数据的对象-值422添加到元数据哈希映射418中的槽,其中该元数据包括 新记录410的服务器侧远程指针408a (即到服务器400的本地指针)以及键420的版本标 识符422c,该服务器侧远程指针408a包括存储记录410的页412的地址422a和记录410 在页面412内的地址422b。如果成功,则服务器400将确认(acknowledgement,ACK)传输 到客户端402,其包括对于新记录410的来自元数据哈希映射418的对象-值422。当客户 端402接收到ACK时,通过在元数据哈希映射418的槽中添加该对象-值422而更新它的 元数据哈希映射418。
[0069] ?否则,如果未成功,服务器400将非确认(non-acknowledgement NACK)传输到客 户端402。当客户端402接收到NACK时,其返回错误指示到一个或多个应用。
[0070] 创建(或插入)操作的结果包括以下:
[0071] ?服务器400上的高速缓存包括新记录410。
[0072] ?服务器400上的元数据哈希映射418被更新为反映服务器400上的高速缓存的 当前状态。
[0073] ?在客户端402上的元数据哈希映射418中的一个或多个条目被更新为反映服务 器400上的高速缓存的当前状态。
[0074] 创建(或插入)操作的等待时间是:
[0075] ?对于在服务器400上的创建操作通常为10-30 μ s。
[0076] ?直至客户端402已经接收到对象-值422的另外的10-15 μ s。
[0077] MM
[0078] 在读取操作中,进行以下步骤:
[0079] ?客户端402散列期望的记录410的键420以在它的元数据哈希映射418的复制 本中标识存储了包括记录410的元数据的对象-值422的一个或多个条目,其中该元数据 包括记录410的服务器侧远程指针408a以及键420的版本标识符422c,该服务器侧远程指 针408a包括存储记录410的页412的地址422a和记录410在页412内的地址422b。
[0080] ?具体地,键420的散列返回来自元数据哈希映射418的一个或多个可能匹配的条 目的集合。低冲突散列功能确保了具有超过一个来自元数据哈希映射418的可能匹配的条 目的集合是稀少的。
[0081] ?对于每一个可能匹配的条目,进行以下步骤:
[0082] 客户端402在它的存储器416中的页412中分配和登记用于记录410的本地数 据结构。(这可以在启动时进行一次,并且对随后的操作再次使用。)与本地数据结构相关 联的并引用记录410和页412两者的是客户端侧远程指针408b。
[0083] 客户端402使用来自哈希映射418的服务器侧远程指针408a作为源并使用客 户端侧远程指针408b作为目标进行在服务器400上的单侧RDMA-读取操作,并且服务器 400上的记录410被复制到客户端402上的记录410中。
[0084] 客户端402确定从服务器400返回的记录410中的键420是否匹配于期望的记 录410的键420。
[0085] 如果键420匹配,则客户端402确定从服务器400返回的记录410中的版本标 识符422c是否匹配于在客户端402上存储的元数据哈希映射418的对象-值422中发现 的版本标识符422c。
[0086] 如果版本标识符422c匹配,则键420有效,并且记录410有效。客户端402可 以照原样使用在其记录410中的数据或将其复制到别处。
[0087] 如果版本标识符422c不匹配,则元数据哈希映射418中的条目是陈旧的,并且 该条目被从元数据哈希映射418移除。
[0088] 在完成之后,客户端402可以保持或清空任意被分配的存储器。
[0089] ?如果键420不匹配,或如果键420匹配但是版本标识符422c不匹配,则客户端 402发送键420到服务器400并且主动请求取回相关联的数据记录410。作为响应,服务器 400可以将确认(ACK)传输到客户端402并返回包括键420的相关联的数据记录410和对 象-值422,且客户端402返回数据记录410到一个或多个应用并利用对象-值422更新 其元数据哈希映射418。否则,如果不成功,则服务器400将非确认(NACK)传输到客户端 402,并且客户端402返回错误指示到一个或多个应用。读取操作的结果包括如下:
[0090] ?可以用所请求的键420的新的或有效的对象-值422更新在客户端402上的元 数据哈希映射418。
[0091] ?数据记录410或错误指示可以被返回到一个或多个应用。
[0092] 读取操作的等待时间是:
[0093] ?当键和版本标识符匹配时,通常是3-10 μ s ;否则,是10-30 μ s以请求来自服务 器400的数据记录410。
[0094] 审新
[0095] 在更新操作中,进行以下步骤:
[0096] ?客户端402散列期望的记录410的键420以在它的元数据哈希映射418的复制 本中标识存储了包含用于记录410的元数据的对象-值422的一个或多个条目,其中该元 数据包括用于记录410的服务器侧远程指针408a以及键420的版本标识符422c,该服务器 侧远程指针408a包括存储了记录410的页412的地址422a和记录410在页412之内的地 址 422b。
[0097] ?具体地,键420的散列返回来自元数据哈希映射418的一个或多个可能匹配的条 目的集合。低冲突散列功能确保了具有超过一个来自元数据哈希映射418的可能匹配的条 目的集合是稀少的。
[0098] ?对于每一个可能匹配的条目,进行以下步骤:
[0099] 客户端402在它的存储器416中的页面412中分配和登记用于记录410的本地 数据结构。(这可以在启动时进行一次,并且对随后的操作再次使用。)与本地数据结构相 关联的并引用记录410和页412两者的是客户端侧远程指针408b。
[0100] 客户端402使用来自哈希映射418的服务器侧远程指针408a作为源并使用客 户端侧远程指针408b作为目标进行在服务器400上的单侧RDMA-读取操作,并且服务器 400上的记录410被复制到客户端402上的记录410中。
[0101] 客户端402确定从服务器400返回的记录410中的键420是否匹配于期望的记 录410的键420。
[0102] 如果键420匹配,则客户端402确定从服务器400返回的记录410中的版本标 识符422c是否匹配于在客户端402上存储的元数据哈希映射418的对象-值422中发现 的版本标识符422c。
[0103] 如果版本标识符422c匹配,则键420有效,并且记录410有效。客户端402使 用客户端侧远程指针408b作为源并使用来自哈希映射418的服务器侧远程指针408a作为 目标在服务器400上进行单侧的RDMA-写入操作。
[0104] 如果版本标识符422c不匹配,则元数据哈希映射418中的条目是陈旧的,并且 该条目被从元数据哈希映射418移除。
[0105] 在完成之后,客户端402可以保持或清空任意被分配的存储器。
[0106] ?如果(a)键420不匹配,或(b)键420匹配但是版本标识符422c不匹配,或(c) 键420匹配且版本标识符422c匹配但是之前的数据记录410的大小小于新数据记录410 的大小,则客户端402发送该数据记录410到服务器400并且主动请求更新存储在服务器 400上的相关联的数据记录410。服务器400产生新的版本标识符并更新数据记录410以 及元数据哈希映射418。
[0107] ?在接收到更新请求之后,服务器400在它的元数据哈希映射418中定位用于由客 户端402在消息中传递的键420的槽。
[0108] ?如果该槽有效,则服务器400在它的存储器414中的页412中分配和登记新记录 410。与新记录410相关联的是从客户端402接收的键420和用于键420的值、以及包括新 记录410的元数据的对象-值422,其中该元数据包括用于新记录410的服务器侧远程指针 408a(即到服务器400的本地指针)以及键420的版本标识符422c,该服务器侧远程指针 408a包括存储记录410的页412的地址422a和记录410在页面412内的地址422b。
[0109] ?-旦新记录410被创建,服务器400用来自新记录410的信息来替换用于键420 的元数据哈希映射418中的相关联的槽中的旧记录410,并且通过将其版本标识符设置为 无效和返回其存储器区域到分配器的空闲池来移除旧记录410。
[0110] ?如果成功,则服务器400将确认(ACK)传输到客户端402,并且返回键420和更新 的对象-值422,其中客户端402返回成功指示到一个或多个应用,并用被更新的对象-值 422来更新其元数据哈希映射418。
[0111] ?否则,如果不成功,则服务器400将非确认(NACK)传输到客户端402,并且客户 端402返回错误指示到一个或多个应用。
[0112] 更新操作的结果包括如下:
[0113] ?在客户端402上的记录410被复制到服务器400上的记录410中,由此更新服务 器400上的高速缓存。
[0114] ?可以用所请求的键420的新的或有效的对象-值422来更新服务器400和客户 端402两者上的元数据哈希映射418。
[0115] 更新操作的等待时间是:
[0116] ?当匹配发生时,通常是2-5 μ s ;否则是10-30 μ s。
[0117] 臟
[0118] 在删除操作中,进行以下步骤:
[0119] ?客户端402散列键420并进行RDMA-发送操作,将键420和用于键420的哈希码 传递到服务器400。
[0120] ?服务器400使用键420和用于键420的哈希码在它的元数据哈希映射418的复 制本中标识存储了对象-值422的条目。
[0121] ?如果来自服务器400上的元数据哈希映射418的键420匹配于从客户端402接 收的键420,则从服务器400上的元数据哈希映射418移除该条目,并从服务器400上的高 速缓存移除该数据记录410 (即,该版本标识符被设置为无效,并且其存储器被返回到分配 器的空闲池)。
[0122] ?如果成功,服务器400将确认(ACK)传输到客户端402,其包括对象-值422,并 且客户端402返回成功指示到一个或多个应用并从其元数据哈希映射418移除该条目。
[0123] ?否则,如果不成功,则服务器400将非确认(NACK)传输到客户端402,并且客户 端402返回错误指示到一个或多个应用。
[0124] 删除操作的结果包括如下:
[0125] ?在服务器400上的记录410可以被删除,服务器400上的元数据哈希映射418可 以被更新。
[0126] ?客户端402上的记录410可以被删除,服务器400上的元数据哈希映射418可以 被更新。
[0127] 删除操作的等待时间是:
[0128] ?通常是 10-30 μ s。
[0129] 与删除操作有关的其它考虑包括:
[0130] ?服务器400可以对其删除的记录410进行"垃圾收集",然后更新哈希映射418来 反映服务器400上的高速缓存的当前状态。
[0131] ?在一个或多个客户端402上的元数据哈希映射418可能包含陈旧的对象-值 422。然而,这将不会打破一致性,因为客户端402应该为了正确性而检查对象-值422中 的版本标识符422。
[0132] 元数据哈希映射审新
[0133] 如上所述,服务器400可以在某个指定的时间将来自其元数据哈希映射418的一 个或多个条目传输到一个或多个客户端402,例如当由服务器400在客户端402的指示下进 行的CRUD操作导致元数据哈希映射418的一个或多个条目被更新时,并且仅那些被更新的 条目被服务器400传输并被客户端402接收。此外,服务器400可以在某个指定的时间将 来自其元数据哈希映射418的一个或多个条目传输到一个或多个客户端402,例如当客户 端402请求时、在客户端402启动时、当服务器400请求、在服务器400启动时、当元数据哈 希映射418为其它原因而改变时、或在其它间隔时等等。另外,对哈希映射418的更新可以 大量地发生(例如整个哈希映射418)或递增地发生(例如仅哈希映射418中的改变的条 目)或使用其一些组合而发生。
[0134] 在一个实施例中,当在客户端402的本地元数据哈希映射418中还未发现键420 时,客户端402可以以空的元数据哈希映射418开始并且将"缓存丢失"传达(relay)到 服务器400,导致包括用于记录410的元数据的对象-值422被服务器400返回到客户端 402,其中该元数据包括用于记录410的服务器侧远程指针408a以及键420的版本标识符 422c,该服务器侧远程指针408a包括存储了记录410的页412的地址422a和记录410在 页面412内的地址422b。此实施例具有以下含义:
[0135] ?本地元数据哈希映射418的大小可以被调整为期望数量的条目。
[0136] ?可以在用户机402上实现自动化条目收回(eviction)来释放本地元数据哈希映 射418中的条目,尽管诸如活动时间(TTL)、最近最少使用(LRU)、最不常用(LFU)的所使用 的策略是依赖于应用的并且可以从本发明的一个实施例到另一个实施例变化。
[0137] 在其它实施例中,可以在将元数据哈希映射418中的条目从服务器400传输到客 户端402以及随后从客户端402更新服务器400上的元数据哈希映射418时使用任意数量 的不同技术。
[0138] 逻辑流稈
[0139] 图5是图解根据本发明的一个实施例的用于访问存储在服务器400上的高速缓存 中的数据记录410的一般步骤或功能的流程图。
[0140] 块500表示在服务器400和/或一个或多个客户端402上存储元数据哈希映射 418的步骤或功能,其中该元数据哈希映射418包括与用于存储在服务器400上的高速缓 存中的数据记录410的键420相关联的一个或多个条目,并且每一个条目存储了包括用于 相应的数据记录410的元数据的对象-值422,其中该元数据包括引用相应的数据记录410 的服务器侧远程指针408a以及键420的版本标识符422c,该服务器侧远程指针408a包括 存储了记录410的页面412的地址422a和记录410在页面412内的地址422b。通常,客户 端402上的元数据哈希映射418仅存储在服务器400上的元数据哈希映射418中存储的条 目的子集,并且仅当在客户端402的指示下由服务器400进行的创建、读取、更新或删除操 作导致元数据哈希映射418的一个或多个条目被更新时,更新在客户端402上的元数据哈 希映射418,并且仅那些被更新的条目被服务器400传输并被客户端402接收。
[0141] 块502表示客户端402或服务器400使用所提供的键420通过以下来访问存储在 服务器400上的高速缓存中的所选择的数据记录410的步骤或功能:(1)使用所提供的键 420来标识在元数据哈希映射418中的一个或多个可能匹配的条目;(2)使用来自元数据哈 希映射418中的可能匹配的条目的服务器侧远程指针408a来访问存储在服务器400上的 高速缓存中的一个或多个数据记录410 ;并使用所提供的键420和来自元数据哈希映射418 中的可能匹配的条目的版本标识符422c来确定所访问的数据记录410是否匹配于所选择 的数据记录410。具体地,可以通过使用服务器侧远程指针来进行在客户端402上的一个 或多个RDMA操作以经由RDMA NIC直接访问存储在服务器400上的高速缓存中的数据记录 410来访问数据记录410。
[0142] 块504表示除了在块500中进行的更新之外、将来自元数据哈希映射418的一个 或多个条目从服务器400传输到一些或全部的客户端402以便更新元数据哈希映射418的 可选步骤或功能(通常由与块500中所述的事件不同的事件而触发)。
[0143] 结论
[0144] 这结束对本发明的详细描述。以下描述了用于完成本发明的一些替代实施例。
[0145] 本领域的技术人员将认识到,可以不脱离本发明的范围而对此配置进行许多修 改。具体地,本领域的技术人员将认识到,可以使用以上组件的任意组合或任意数量的不同 组件、包括计算机程序、外围设备和其它装置来实现本发明,只要通过其进行类似的功能。
[0146] 例如,任意类型的计算机、比如主机、小型计算机或个人计算机可以与本发明的实 施例一起使用或用于本发明的实施例。另外,不同于高速缓存应用的许多类型的应用可以 从本发明获益。具体地,进行远程访问的任意应用可以从本发明获益。
[0147] 为了例示和描述的目的给出了对本发明的优选实施例的以上描述。不意图穷尽或 限制本发明到所公开的精确形式。依照上述教导,许多修改和变化是可能的。意图本发明 的范围不被此详细描述所限制,而是由附于此的权利要求限定。
【权利要求】
1. 一种用于访问存储在服务器上的高速缓存中的数据记录的设备,包括: (a) 服务器或客户端,存储元数据哈希映射,其中所述元数据哈希映射包括与用于存储 在服务器上的高速缓存中的数据记录的键相关联的一个或多个条目,每个条目存储对应的 数据记录的元数据,并且所述元数据包括服务器侧远程指针以及所述键的版本标识符,所 述服务器侧远程指针引用存储在所述服务器上的高速缓存中的对应的数据记录;以及 (b) 所述服务器或客户端使用所提供的键通过以下来访问存储在所述服务器上的高速 缓存中的所选择的数据记录: (1) 使用所提供的键标识在所述元数据哈希映射中的一个或多个可能匹配的条目; (2) 使用来自所述元数据哈希映射中的可能匹配的条目的服务器侧远程指针来访问存 储在所述服务器上的高速缓存中的一个或多个数据记录;以及 (3) 使用所提供的键和来自所述元数据哈希映射中的可能匹配的条目的版本标识符来 确定所访问的数据记录是否匹配于所选择的数据记录。
2. 根据权利要求1所述的设备,其中在客户端上的所述元数据哈希映射存储在所述服 务器上的元数据哈希映射中存储的条目的子集。
3. 根据权利要求1所述的设备,其中当由所述服务器在所述客户端的指示下进行的创 建、读取、更新或删除操作导致元数据哈希映射被更新时,更新在客户端上的元数据哈希映 射。
4. 根据权利要求3所述的设备,还包括所述客户端从所述服务器接收对所述元数据哈 希映射的更新。
5. 根据权利要求1所述的设备,其中所述访问(2)包括使用服务器侧远程指针在所述 客户端上进行一个或多个远程直接存储器访问(RDMA)操作,以经由RDMA网络接口控制器 直接地访问存储在所述服务器上的高速缓存中的数据记录。
6. 根据权利要求5所述的设备,其中进行所述一个或多个RDMA操作还包括所述客户端 通过以下进行创建操作: 所述客户端进行到服务器的发送操作,并将键、所述键的哈希码和所述键的值传递到 服务器; 所述服务器使用所述键和所述键的值来在所述高速缓存中分配新的数据记录;以及 使用哈希码更新所述服务器上的元数据哈希映射以将用于新数据记录的键、新数据记 录的服务器侧远程指针和所述键的版本标识符添加到该元数据哈希映射。
7. 根据权利要求5所述的设备,其中进行所述一个或多个RDMA操作还包括客户端通过 以下进行读取操作: 客户端使用来自元数据哈希表中的可能匹配的条目的服务器侧远程指针来进行在所 述服务器上的单侧RDMA读取操作。
8. 根据权利要求5所述的设备,其中进行所述一个或多个RDMA操作还包括客户端通过 以下进行更新操作: 客户端使用来自元数据哈希表中的可能匹配的条目的服务器侧远程指针来进行在所 述服务器上的单侧RDMA读取操作, 当所访问的数据记录之一匹配于所选择的数据记录时,所述客户端使用所述服务器侧 远程指针来进行到服务器的单侧RDMA写入操作并盖写所述所访问的记录之一,以及 当所访问的数据记录不匹配于所选择的数据记录时,所述客户端进行到所述服务器的 发送操作并将键、该键的哈希码和该键的值传递到所述服务器用于更新所述服务器上的高 速缓存。
9. 根据权利要求5所述的设备,其中进行所述一个或多个RDMA操作还包括客户端通过 以下进行删除操作: 客户端进行到服务器的发送操作并将键、该键的哈希码和该键的值传递到所述服务器 用于删除在所述服务器上的高速缓存中存储的所选择的数据记录。
10. -种用于访问存储在服务器上的高速缓存中的数据记录的方法,包括: (a) 在服务器或客户端上存储元数据哈希映射,其中所述元数据哈希映射包括与用于 存储在服务器上的高速缓存中的数据记录的键相关联的一个或多个条目,每个条目存储对 应的数据记录的元数据,并且所述元数据包括服务器侧远程指针以及所述键的版本标识 符,所述服务器侧远程指针引用存储在所述服务器上的高速缓存中的对应的数据记录;以 及 (b) 所述服务器或客户端使用所提供的键通过以下访问存储在所述服务器上的高速缓 存中的所选择的数据记录: (1) 使用所提供的键标识在所述元数据哈希映射中的一个或多个可能匹配的条目; (2) 使用来自所述元数据哈希映射中的可能匹配的条目的服务器侧远程指针来访问存 储在所述服务器上的高速缓存中的一个或多个数据记录;以及 (3) 使用所提供的键和来自所述元数据哈希映射中的可能匹配的条目的版本标识符来 确定所访问的数据记录是否匹配于所选择的数据记录。
11. 根据权利要求10所述的方法,其中在客户端上的所述元数据哈希映射存储在所述 服务器上的元数据哈希映射中存储的条目的子集。
12. 根据权利要求10所述的方法,其中当由所述服务器在所述客户端的指示下进行的 创建、读取、更新或删除操作导致元数据哈希映射被更新时,更新在客户端上的元数据哈希 映射。
13. 根据权利要求12所述的方法,还包括所述客户端从所述服务器接收对所述元数据 哈希映射的更新。
14. 根据权利要求10所述的方法,其中所述访问(2)包括使用服务器侧远程指针在所 述客户端上进行一个或多个远程直接存储器访问(RDMA)操作,以经由RDMA网络接口控制 器直接地访问存储在所述服务器上的高速缓存中的数据记录。
15. 根据权利要求14所述的方法,其中进行所述一个或多个RDMA操作还包括所述客户 端通过以下进行创建操作: 所述客户端进行到服务器的发送操作,并将键、所述键的哈希码和所述键的值传递到 服务器; 所述服务器使用所述键和所述键的值来在所述高速缓存中分配新的数据记录;以及 使用哈希码更新所述服务器上的元数据哈希映射以将用于新数据记录的键、新数据记 录的服务器侧远程指针和所述键的版本标识符添加到该元数据哈希映射。
16. 根据权利要求14所述的方法,其中进行所述一个或多个RDMA操作还包括客户端通 过以下进行读取操作: 客户端使用来自元数据哈希表中的可能匹配的条目的服务器侧远程指针来进行在所 述服务器上的单侧RDMA读取操作。
17. 根据权利要求14所述的方法,其中进行所述一个或多个RDMA操作还包括客户端通 过以下进行更新操作: 客户端使用来自元数据哈希表中的可能匹配的条目的服务器侧远程指针来进行在所 述服务器上的单侧RDMA读取操作, 当所访问的数据记录之一匹配于所选择的数据记录时,所述客户端使用所述服务器侧 远程指针来进行到服务器的单侧RDMA写入操作并盖写所述所访问的记录之一,以及 当所访问的数据记录不匹配于所选择的数据记录时,所述客户端进行到所述服务器的 发送操作并将键、该键的哈希码和该键的值传递到所述服务器用于更新所述服务器上的高 速缓存。
18. 根据权利要求14所述的方法,其中进行所述一个或多个RDMA操作还包括客户端通 过以下进行删除操作: 客户端进行到服务器的发送操作并将键、该键的哈希码和该键的值传递到所述服务器 用于删除在所述服务器上的高速缓存中存储的所选择的数据记录。
【文档编号】G06F12/08GK104123235SQ201410171220
【公开日】2014年10月29日 申请日期:2014年4月25日 优先权日:2013年4月26日
【发明者】X.R.格林, T.J.萨洛 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1