首页> 中国专利> 事务性处理系统的远程直接存储器操作(RDMO)

事务性处理系统的远程直接存储器操作(RDMO)

摘要

描述了用于将远程直接存储器操作(RDMO)卸载到“执行候选者”的技术。执行候选者可以是能够执行被卸载的操作的任何硬件。因此,执行候选者可以是网络接口控制器、专用协处理器、FPGA等。执行候选者可以位于远离正在对操作进行卸载的处理器的机器上,或者可以与正在对操作进行卸载的处理器在同一个机器上。提供了用于某些具体RDMO的细节,这些细节在在线事务处理(OLTP)和混合事务/分析(HTAP)工作负载中是特别有用的。

著录项

  • 公开/公告号CN112771501A

    专利类型发明专利

  • 公开/公告日2021-05-07

    原文格式PDF

  • 申请/专利权人 甲骨文国际公司;

    申请/专利号CN201980063000.7

  • 申请日2019-08-16

  • 分类号G06F9/50(20060101);G06F9/54(20060101);

  • 代理机构11038 中国贸促会专利商标事务所有限公司;

  • 代理人周衡威

  • 地址 美国加利福尼亚

  • 入库时间 2023-06-19 10:52:42

说明书

技术领域

本发明涉及远程直接存储器操作。

背景技术

改善服务可用性的一种方法是设计服务,使得该服务即使在它的一个或多个组件发生故障也可以继续正常工作。例如,2017年5月 26日提交的美国专利申请No.15/606,322描述了一种技术,其用于使请求实体(requesting entity)能够从正在执行数据库服务器实例的远程服务器机器的易失性存储器中检索该数据库服务器实例所管理的数据,而不会在该检索操作中涉及该数据库服务器实例。

因为该检索不涉及数据库服务器实例,因此即使当数据库服务器实例(或主机服务器机器本身的操作系统)已停止或变得无响应时,检索操作也可以成功。除了增加可用性之外,数据的直接检索通常比通过与数据库服务器实例的常规交互来检索相同信息要更快和更高效。

在使用RDMA技术的情况下,为了从远程机器检索数据库命令中所指定的“目标数据”而不涉及远程数据库服务器实例,请求实体首先使用远程直接存储器访问(RDMA)来访问关于目标数据驻留在服务器机器中的位置的信息。基于这样的目标位置信息,请求实体使用RDMA从主机服务器机器检索目标数据,而不涉及数据库服务器实例。请求实体所发出的RDMA读取(数据检索操作)是单方面的操作(unilateral operation),不需要主机服务器机器(RDBMS 服务器)上的CPU中断或OS内核参与。例如,可以通过远程设备的网络接口控制器(NIC)上的硬件来处置此类RDMA操作。

RDMA技术非常适合于仅涉及从崩溃的服务器机器的易失性存储器中检索数据的操作。然而,期望的是,即使故障组件负责执行比单纯的存储器访问更复杂的操作时也提供高可用性。为了满足此需求,一些系统提供了一组有限的“动词(verb)”,用于经由网络接口控制器执行远程操作,诸如存储器访问和原子操作(测试和设置、比较和交换(compare-and-swap))。只要系统被加电并且NIC可以访问主机存储器,这些操作就可以完成。然而,它们支持的操作类型是有限的。

对驻留在远程机器的存储器中的数据的更复杂的操作通常是通过对远程机器上运行的应用进行远程过程调用(RPC)来执行的。例如,需要存储在数据库中的一组数字的平均值的数据库客户端可以对管理该数据库的远程数据库服务器实例进行RPC。作为对RPC的响应,远程数据库服务器实例读取该组数字、计算平均值,并且将该平均值发送回该数据库客户端。

在这个示例中,如果远程数据库服务器发生故障,那么平均计算操作将失败。然而,可能可以使用RDMA从远程服务器检索集合中的每个数字。一旦请求实体检索到该组数字中的每个数字,请求实体就可以执行平均值计算操作。然而,使用RDMA来检索集合中的每个数字,然后在本地执行计算的效率远低于让远程服务器上的应用检索数据并执行平均值计算操作。

虽然现代网络具有令人印象深刻的带宽,但具有RDMA能力的数据中心的往返(round-trip)时延(latency)仍然顽固地保持在略微1微秒以上。因此,对时延的改善落后于对网络带宽的改善。 (a)带宽的改善与(b)时延的改善之间不断扩大的差距为数据密集型应用暴露了“网络墙”。包括同时多线程、预取、推测性加载、事务性存储器(transactional memory)和可配置的一致性域 (configurable coherence domain)的硬件技术对于隐藏以下事实是无效的——对远程存储器的访问比访问本地存储器的时延高10倍。

这种网络墙对运行事务性工作负载的数据库系统提出了设计挑战。扩展(scaling)是具有挑战性的,因为对最简单数据结构的远程操纵都需要网络中的多次往返。问题的实质在于,在“锁定 (lock)、写入(write)、解锁(unlock)”或无锁定(lock-free) 的“获取-并且-添加然后写入(fetch-and-add,then write)”模式下,对远程存储器的一系列操作的端到端时延为10us范围。

本节中描述的方法是可以采用的方法,但不一定是先前已设想或采用的方法。因此,除非另有指示,否则不应当仅仅由于它们包括在本节中而假设本节中描述的任何方法是现有技术。

附图说明

在附图中:

图1是OLTP工作负载中SlottedAppend RDMO修改空闲指针并且然后写入槽(slot)的示例。

图2是ConditionalGather RDMO在一次操作中遍历版本的链表、执行可见性检查(visibility check)并返回匹配的元组 (matching tuple)的示例。

图3是SignaledRead RDMO在一个请求中读取任何基于锁的数据结构时省略(elide)锁的示例。

图4是ScatterAndAccumulate RDMO对分散列表(scatter list)中与baseaddr指针相距用户定义的偏移处的元素进行累积 (accumulate)的示例。

图5是可以在其上实现本文描述的技术的计算机系统的框图的示例。

图6是包括机器的系统的框图,在该机器中,FPGA用作本地和 /或远程发起的RDMO的执行候选。

具体实施方式

在下面的描述中,为了解释的目的,阐述了许多具体细节,以便提供对本发明的透彻理解。然而,将清楚的是,可以在没有这些具体细节的情况下实践本发明。在其它情况下,以框图形式示出众所周知的结构和设备,以便避免不必要地模糊本发明。

RDMOS

数据库系统可以通过新颖的软件/硬件协同设计技术来扩展这种网络墙,以进行在线事务处理(OLTP)和混合事务/分析(HTAP) 工作负载,这种软件/硬件协同设计技术隐藏了数据中心中微秒级的远程存储器时延。如下文所述,通过将数据处理逻辑组合到一个逻辑“单元(unit)”中来扩展网络墙,该逻辑“单元”可以被分派到远程节点并在一次往返中执行。该计算单元在本文中被称为远程直接存储器操作或“RDMO”。

与通常涉及琐碎的简单操作(诸如从远程机器的存储器中检索单个值)的RDMA不同,RDMO可以是任意复杂的。例如,RDMO 可以使远程机器计算一组数字的平均值,其中这些数字驻留在远程机器的存储器中。作为另一个示例,RDMO可以是简短的一系列读取、写入和原子式的存储器操作,它们将被传输和在远程节点处执行而不会中断远程CPU,类似于RDMA读取或RDMA写入操作。

在使用RDMO的情况下,可以将简单的计算卸载到远程网络接口控制器(NIC)以提高系统的效率。然而,RDMO在系统可靠性方面存在许多问题,尤其是与数据损坏(datacorruption)相关的问题。损坏可能是故意的,诸如当进行RDMA传输时RDMA认证密钥在线上被嗅探到而被恶意行为者重新使用。损坏也可能是无意的,诸如当高密度存储器中发生通过RDMA直接暴露的位翻转时。 NVRAM的非易失性性质使它特别容易受到这种形式的无意损坏。

对于关键任务用例,效率和可靠性挑战是部署可扩展且健壮的数据库系统的障碍。为事务处理系统提供了可靠且高效的机制。根据一个实施例,通过将一系列公共的操作编码为RDMO,使得事务处理更加高效并且可扩展。当数据在传送中时,通过加密的RDMA改善了可靠性,并且当数据在DRAM和NVRAM中静止时,通过故障识别RDMA改善了可靠性。

解决效率和可靠性问题允许对具有RDMA能力的事务处理系统进行多租户(multi-tenant)和云部署。这些研究进展对于实现企业级质量的事务处理至关重要。

同一机器RDMOS

在本文中,能够执行特定操作的实体被称为该操作的“执行候选者(executioncandidate)”。如上所述,RDMOS可以被用于将操作卸载到远程执行候选者,诸如远程主机机器的NIC。另外, RDMOS可以被用于将操作卸载到正在对该操作进行卸载的进程的同一机器内的执行候选者。

例如,在计算设备的主CPU上执行的进程可以将操作卸载到该同一计算设备的NIC。该本地NIC只是计算设备上可用的执行候选者类型的一个示例。

在操作(诸如RDMO)是具有高I/O和低计算要求的相对简单的操作的情况下,通过在辅助处理器中运行的执行候选者比通过在本地处理器上运行的应用可以更高效地执行操作。因此,可能期望在配置有用于执行该相对简单的操作的逻辑的现场可编程门阵列FPGA 上实现辅助处理器。另一方面,如果操作(诸如RDMO)是具有低 I/O和高计算要求的相对复杂的操作,那么使用本地处理器上运行的应用来执行操作可能是更高效的。

使用FPGA处置本地发起的RDMOS

图6是包括机器600的系统的框图,该机器600可以将操作卸载到现场可编程门阵列(FPGA)。机器600包括处理器620,其执行操作系统632和任何数量的应用,诸如应用634。用于操作系统632 和应用634的代码可以存储在持久性存储装置636上,并根据需要加载到易失性存储器630中。处理器620可以是机器600内的任何数量的处理器之一。处理器620本身可以具有许多不同的计算单元,被显示为核心622、624、622和628。

机器600包括具有加速器单元AU 652的FPGA 650。AU 652像处理器620一样具有对数据640的直接访问。处理器620包括电路 (被示为非核心642),该电路允许AU访问机器600的易失性存储器630中的数据640而无需涉及处理器620的核心622、624、622和 628。

机器600包括网络接口控制器NIC 102。NIC 102可以耦合到 FPGA 650,或者可以集成在FPGA 650上。

例如,如果从机器600本身请求的操作是具有高I/O和低计算要求的相对简单的操作,那么AU 652可能比在处理器620上运行的应用634更高效地执行该操作。因此,可能期望让在FPGA 650上实现的AU 652来执行该相对简单的操作。因此,在处理器620上运行的应用634将该操作的执行卸载到AU 652。另一方面,如果操作是具有低I/O和高计算要求的相对复杂的操作,那么使用在处理器620上运行的应用634来执行该操作可以更高效。

使用FPGA处置远程发起的RDMOS

上面的部分描述了使用FPGA作为执行候选者来执行本地发起的RDMO。以类似的方式,FPGA可以用作执行候选者来执行远程发起的RDMO。例如,假定外部请求实体610将RDMO请求发送到 NIC 602。如果该RDMO是AU 652所支持的操作,那么AU 652可以比NIC 602本身或在处理器620上运行的应用634更高效地执行该操作。因此,NIC 602将让在FGPA 650上实现的AU 652来执行该RDMO。另一方面,如果该操作是具有低I/O和高计算要求的相对复杂的操作,那么使用在处理器620上运行的应用634来执行该操作可以是更高效的。

可以通过对FPGA重新编程来添加对新操作的支持。可以例如通过在加电时向FPGA加载修正后的FPGA比特流来执行这种重新编程。

用于加速OLTP和HTAP的一组公共RDMO

如果工作负载不适合分区,那么将事务处理向外扩展是具有挑战性的。作为直接在远程存储器中运行多版本并发控制算法的一种机制,RDMA最近在研究界引起了极大的振奋。然而,许多简单的操纵(manipulation)无法在单个RDMA操作中执行。例如,基于锁的并发控制中的更新至少需要三个RDMA请求来进行锁定(RDMA CAS)、写入(RDMA写入)和解锁(RDMA写入)。使用不可变版本(immutable version)和无等待读取器(wait-free reader)的 MVCC(多版本并发控制)算法中的更新将需要对新版本进行写入 (RDMA写入)、对旧版本进行读取(RDMA读取)、以及用于以原子方式(atomically)修改旧版本的可见性的比较和交换(RDMA CAS)。在任一情况下,单次写入都需要依次执行三个相互依赖的RDMA操作。因此,事务性能受到远程数据访问时延的严重影响。下文描述了一组公共RDMO,它们在一个网络请求中执行预定义的简短的一系列读取/写入/CAS操作,以加快事务处理性能。

SLOTTEDAPPEND(槽追加)RDMO

数据库系统中的许多数据结构(包括盘页面(disk page))都被分成可变长度的槽(slot),这些槽通过间接寻址(indirection)访问。这种间接寻址的最简单形式是偏移量字段,该偏移量字段根据偏移量的位置而指向条目的第一个字节。SlottedAppend RDMO在单个网络请求中安全地操纵此类结构。伪代码如下:

SlottedAppend RDMO读取*位置110(参见图1)处的间接条目的值,并且它以原子方式将它递增要写入的缓冲区的长度。如果缓冲区的整个长度适配maxsize(最大尺寸)个字节,那么该缓冲区在* 旧位置110a处被复制,并且写入位置被返回。如果对缓冲区进行写入将超过可允许的尺寸maxsize,那么*位置100被递减,并且特殊值maxsize被返回以发信号通知空间不足以完成写入。

SlottedAppend被设计为改善写入争用。与仅RDMA的实现相比,它缩小了冲突窗口并允许在争用下实现更多的并发性。它不能保护读取者免受未完成读取(readingincomplete)或正在进行的写入 (in-progress write)的影响。在期望读取器/写入器隔离的实施例中,使用其它协调机制(诸如锁或多版本处理)来实施这种隔离。

使用示例:OLTP工作负载中SlottedAppend的一个使用示例是在页面104中插入一个元组108,如图1中所示。对应的页面104首先在存储器中被定位。然后,SlottedAppend在一个网络操作中使用获取和添加操作(fetch-and-add operation)以原子方式递增自由指针102,并将数据写入到有槽页面(slotted page)104。

CONDITIONALGATHER(条件化收集)RDMO

遍历公共数据结构(包括B-树和散列表)需要对指针进行跟踪。通过RDMA执行一系列此类查找(lookup)是低效的,因为它需要通过RDMA选择性地检查每个元素。ConditionalGather RDMO 在单个请求中遍历基于指针的数据结构并将与用户定义的谓词(predicate)相匹配的元素收集在被传回的一个缓冲区中。

ConditionalGather RDMO将输出收集在gatherbuf缓冲区220 (参见图2)处并将最多使用gatherlen个字节。ConditionalGather 从位置202开始读取count个元素。使用运算符COMP 212∈{<,≤,=,≥,>,≠}将每个指向的元素与参数值214进行比较。如果谓词210匹配,那么ConditionalGather将来自比较位置的length个字节复制到gatherbuf缓冲区204中。重复此过程,直到gatherbuf缓冲区220填满或count个条目已被处理。ConditionalGather返回 gatherbuf缓冲区220中的尺寸为length的元素的数量。

ConditionalGather RDMO有两个有趣的变体。第一变体替代地接受本地数组并将其传输到远程端,而不是访问远程存储器中的间接数组。当从先前的RDMA操作中知道位置、或者收集操作以固定的偏移量进行检索(后者与跨步访问模式(strided access pattern)对应)时,这个变体是有用的。第二变体不要求传递固定的长度 (length)参数,而是替代地接受带有记录长度(record length)的远程数组。这个变体允许在长度可变的结构上进行收集。

使用示例:多版本并发控制可以将快照事务(snapshot transaction)指向较旧版本的记录,以实现更高的并发性。识别要在页面中读取的适当记录要求确定版本可见性。在RDMA操作上执行这种可见性检查效率低下:通过RDMA操作选择性地检查每个版本是太冗长的,并且使整个操作时延受限。如图2中所示, ConditionalGather RDMO可以在一个操作中返回某个时间戳的可见版本。在涉及联接(join)的HTAP工作负载中,ConditionalGatherRDMO可以在一次往返中检索散列桶(hash bucket)中与密钥匹配的所有元组。

SIGNALEDREAD(经信号通知的读取)RDMO

许多数据结构没有已知的无锁替代方案,或者它们的无锁替代方案对所支持的并发操作的类型施加了严格的约束。这些数据结构通常回退到基于锁的同步(lock-basedsynchronization)。然而,通过 RDMA暴露基于锁的数据结构至少需要三个RDMA请求:两个RDMA操作以锁为目标,并且需要至少一个RDMA来执行预期的操作。当读入基于锁的数据结构时,SignaledRead RDMO可以被用于“省略(elide)”对锁的RDMA操作,类似于硬件中的投机性锁省略(speculative lock elision)。这避免了用于获取和释放锁的两次往返。

SignaledRead RDMO尝试对cas位置300(参见图3)执行比较和交换操作,并将值从expectedval改为desiredval。如果该比较和交换操作失败,那么RDMO将重试该比较和交换几次,然后返回最后读取的值(目的是在假性失败的情况下,在几次重试中分摊往返的网络时延)。如果比较和交换成功,那么SignaledRead RDMO读取读取位置310处的length个字节,然后将cas位置300重置为 expectedval。

注意的是,在自前一次存储器复制起的存储器护栏(memory fence)之后,读取位置310的前四个字节最后被复制。目的是在读取位置310指向非易失性存储器的崩溃(crash)的情况下,允许该前四个字节充当是否成功完成了存储器复制的测试。

使用示例:SignaledRead RDMO可以被用于在读入基于锁的数据结构时省略对锁的显式RDMA操作。这大大增加了并发性:避免用于获取和释放锁的两次往返意味着锁被保持短得多的持续时间。使用SignaledRead保证读取是一致的,因为传入的更新将无法获取锁。

WRITEANDSEAL(写入和签章)RDMO

SignaledRead的变体是WriteThenSeal(写入然后签章) RDMO。可以在基于锁的同步中使用这个RDMO,以在一个RDMA 操作中更新和释放锁。如果签章位置(seal location)位于持久性存储器中,那么不可能提供摇摆的写保护(torn write protection),因为对于签章写入(sealing write)没有原子性或一致性保证。为持久性而使用WriteThenSeal将要求针对非易失性存储器的原子性和持久性原语(primitive),如下文所讨论的。

WriteAndSeal(写入和签章)RDMO将length个字节的数据在写入位置处写入缓冲区中、等待存储器护栏、然后在签章位置写入值。注意的是,写入位置和签章位置可以重叠。该操作被保证是顺序的,但可能不是原子的。

SCATTERANDACCUMULATE(分散和累积)RDMO

常见的并行操作是分散(scatter),其中元素的密集数组被复制到稀疏数组中。对于数据库系统更有用的原语是分散操作,该操作涉及(诸如通过散列函数或索引)间接地寻址到目的地。此外,数据库系统常常期望将值累积到目的地中已经存在的值,而不是覆盖该数据。ScatterAndAccumulate RDMO实现了这个目标。

ScatterAndAccumulate RDMO接受长度为count的元素分散列表420的数组。对于每个元素,ScatterAndAccumulate访问偏移量列表410数组中的基地址baseaddr 430以及用户定义的偏移量。然后,ScatterAndAccumulate对在传入的数据和已在目的地位置处的数据之间的运算OP∈{FETCHANDADD,SUM,MAX,MIN, COUNT}的结果进行累积。

使用示例:在HTAP工作负载中,ScatterAndAccumulate RDMO可以对基于并行散列的聚合(parallel hash-based aggregation)进行加速:发送方执行本地聚合,然后为每个元素计算散列桶目的地。ScatterAndAccumulate然后在一个操作中传输数据并对这些桶执行聚合。

此外,此RDMO可以被用于最小散列速写(min-hash sketching)以进行集合相似性估计。

具有RDMO功能的OLTP内核

为了在常规事务处理活动中最好地利用这些RDMO,可以将 RDMO集成到数据库系统的存储引擎中,并通过RDMA直接暴露存储器内(in-memory)存储结构(诸如索引)。这种设计不要求对数据库系统体系架构进行大量改变,但是它不将RDMO用于事务管理模块和并发性控制。因此,RDMO感知(RDMO-aware)的存储引擎将克服物理数据访问级别的低效,诸如优化或省略闩锁(latch) (即,对数条指令长的关键区段进行保护的短期锁)。

通过将RDMO功能集成在并发性控制协议本身中,可以实现进一步的效率增益。这与最近的研究相吻合,该研究将并发性控制和存储结合在一起,以在某些事务处理系统中实现高性能。在一个实施例中,RDMO被用于通过直接访问远程存储器而不是使用存储引擎作为访问共享状态的“中介”来核实分布式事务的可串行性。此外,这种设计选择允许我们在并发性控制协议本身中交织事务管理方面(诸如准入控制、事务重启和服务级别目标)。机会是使用RDMO在逻辑级别上绕过或加速同步,诸如针对写入异常(anomaly)或幻像(phantom)的同步。这种逻辑同步常常要求在事务的整个持续时间内保持的锁。

通过RDMA和RDMO在数据中心中的可靠通信

当前基于RDMA的OLTP解决方案忽略了数据损坏的可能性。然而,NVRAM中的单个位翻转(bit flip)触发硬件错误,该错误(在最好的情况下)中断RDMA连接或者(在最坏的情况下)使整个数据库系统崩溃。数据库系统的事务处理能力呈现了有趣的研究机会:如果将数据损坏封装在事务概念之内,那么数据库系统可以通过依靠现有的异常终止/重试/日志重放动作而比一般的非事务性应用更优雅地处理数据损坏。

密钥管理和加密

RDMA已经被设计用于数据中心内的可信组件,以进行高效通信。RDMA协议具有32位R密钥和Q密钥形式的粗略认证机制,这些密钥分别验证远程发送方有权访问本地存储器窗口和接收队列。然而,通过网络传输的有效负载未被加密,因为这通常会在两侧都消耗大量CPU资源。此外,无法对RDMA消息报头进行加密而不使 HCA不可能解释这些报头。

然而,企业越来越担心恶意行为者能够在数据中心的物理网络级别拦截信息。实际上,RDMA加剧了网络安全漏洞:拦截所传输的RDMA密钥的恶意行为者可以伪造有效的RDMA请求,以读取或修改与这个密钥相关联的整个存储器窗口。此外,因为RDMA绕过了目的地处的CPU,所以恶意网络活动被OS和接收应用忽略,因此恶意网络活动将不会被反映在目标节点上的网络统计信息或审核日志中。

在一个实施例中,为RDMA连接的应用提供了端到端加密。这包括可靠地形成连接以及安全且私有地传送数据。当前的设施将用于认证。RDMA队列对(Queue Pair)是在参与者之间已经创建经过恰当认证的SSL连接并协商要用于RDMA的协议和网络之后创建的。在这种协商的某个点,应用或者创建仅用于这两个过程之间的通信的安全队列对,或者访问适当的Q密钥以访问端点。队列对可以被用于创建队列对的操作系统或持有有效队列对、R密钥或Q密钥的已破坏应用破坏。

替代方法是使用DTLS,它可以在不可靠的数据报协议之上的任何应用中工作,但这会干扰硬件加速。目的是研究是否可以修改 RoCE上的IPSec以使新连接更便宜。

数据损坏和NVRAM

低时延、高容量NVRAM(诸如Intel 3DXP)将很快在市场上可售。未来的NVRAM将比DRAM具有更高的密度。然而,用于企业部署的关键先决条件是存储器介质损坏。此外,由于NVRAM模块将跨存储器通道和CPU套接字(socket)而分布,因此每个高速缓存线损坏的概率可能不是均匀的。因此,不可避免的结果是,一些存储器位置(无论是由于磨损还是固件错误)将导致微妙的数据损坏或变得无法访问。这种硬件错误将通过机器-检查-体系架构(Machine-Check-Architecture,MCA)设施被报告给OS。MCA提供了一种机制来处置存储器损坏,而不是使整个机器崩溃或传播错误的值。

启用对NVRAM的RDMA访问是会聚的数据中心体系架构中的必要优化,因为通过现有OS原语访问远程存储器将使NVRAM的类似DRAM的速度蒙上阴影。由于低时延NVRAM将直接附接在存储器总线上,因此这意味着从HCA进行的远程访问必须感知通过 MCA报告的硬件错误并检查存储器中毒位(poison bit)。然而,当前的RDMA框架没有检测、处置和清除中毒位的设施。一种可能性是RDMA客户端将静默地接收被损坏的数据。这可以通过(软件或者在硬件中的)校验和来缓解。然而,更严重的错误将是丢失整个 RDMA连接,这将使得整个节点仅由于单个数据损坏而不可用。我们的解决方案包括两种方法,它们具有不同的完成时间线。

在一个实施例中,使用纯软件解决方案,其仅涉及网络设备驱动程序而没有任何固件或硬件改变。该缓解机制将应用感知的重试机构与损坏检测设施相耦合。

当数据损坏产生机器检查异常(MCE)时,该异常进而触发内核恐慌(kernelpanic)。这表现为与RDMA客户端断开连接。实施例还可以包括透明的软件级别重试,其要求用于可重试的数据访问的更高级别的API,例如,键-值存储库API或用于DBMS的事务性接口。

也可以是节点抑制MCE并静默地返回损坏的存储器的情况。在这种情况下,使用基于校验和的损坏检测机制。这要求更高级别的 API来维护校验和并重试访问。一个实施例涉及到HCA的硬件卸载。

替代实施例涉及硬件/软件协同设计。特别地,使堆栈意识到存储器中毒位,以便用户模式应用可以选择处置应用中的存储器损坏。这要求改变固件和网络设备的驱动程序,并且还用用于处置数据损坏的回调注册机制来扩展标准RDMA动词API。

硬件概述

根据一个实施例,本文描述的技术由一个或多个专用计算设备实现。专用计算设备可以是硬连线的以执行这些技术,或者可以包括数字电子设备(诸如永久地编程以执行这些技术的一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA)),或者可以包括被编程为按照固件、存储器、其它存储装置或其组合中的程序指令来执行这些技术的一个或多个通用硬件处理器。这种专用计算设备还可以将定制的硬连线逻辑、ASIC或FPGA与定制的编程相结合,以实现这些技术。专用计算设备可以是台式计算机系统、便携式计算机系统、手持式设备、联网设备或者结合硬连线和/或程序逻辑以实现这些技术的任何其它设备。

例如,图5是图示可以在其上实现本发明实施例的计算机系统 500的框图。计算机系统500包括总线502或用于传送信息的其它通信机制、以及与总线502耦合以处理信息的硬件处理器504。硬件处理器504可以是例如通用微处理器。计算机系统500还包括耦合到总线502的主存储器506,诸如随机存取存储器(RAM)或其它动态存储设备,用于存储信息和将由处理器504执行的指令。主存储器 506还可以被用于在执行要由处理器504执行的指令期间存储临时变量或其它中间信息。当存储在处理器504可访问的非瞬态存储介质中时,这些指令使计算机系统500成为被定制以执行指令中指定的操作的专用机器。

计算机系统500还包括耦合到总线502的只读存储器(ROM) 508或其它静态存储设备,用于存储用于处理器504的静态信息和指令。存储设备510(诸如磁盘、光盘或固态驱动器)被提供并被耦合到总线502,用于存储信息和指令。计算机系统500可以经由总线 502耦合到显示器512(诸如阴极射线管(CRT)),用于向计算机用户显示信息。包括字母数字键和其它键的输入设备514被耦合到总线502,用于将信息和命令选择传送到处理器504。另一种类型的用户输入设备是光标控件516(诸如鼠标、轨迹球或光标方向键),用于将方向信息和命令选择传送到处理器504并用于控制显示器512上的光标移动。这种输入设备通常在两个轴上具有两个自由度,第一轴 (例如,x)和第二轴(例如,y),这允许设备指定平面中的位置。

计算机系统500可以使用定制的硬连线逻辑、一个或多个ASIC 或FPGA、固件和/或程序逻辑(它们与计算机系统相结合,使计算机系统500成为或将计算机系统500编程为专用机器)来实现本文所述的技术。根据一个实施例,响应于处理器504执行包含在主存储器506中的一个或多个指令的一个或多个序列,计算机系统500执行本文的技术。这些指令可以从另一个存储介质(诸如存储设备510)读入到主存储器506中。包含在主存储器506中的指令序列的执行使得处理器504执行本文所述的处理步骤。在替代实施例中,可以使用硬连线的电路系统代替软件指令或与软件指令组合。

如本文所使用的,术语“存储介质”是指存储使机器以特定方式操作的数据和/或指令的任何非瞬态介质。这种存储介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘、磁盘或固态驱动器,诸如存储设备510。易失性介质包括动态存储器,诸如主存储器506。存储介质的常见形式包括例如软盘、柔性盘、硬盘、固态驱动器、磁带或任何其它磁数据存储介质、CD-ROM、任何其它光学数据存储介质、任何具有孔模式的物理介质、RAM、PROM 和EPROM、FLASH-EPROM、NVRAM、任何其它存储器芯片或盒式磁带。

存储介质不同于传输介质但可以与传输介质结合使用。传输介质参与在存储介质之间传递信息。例如,传输介质包括同轴电缆、铜线和光纤,包括包含总线502的导线。传输介质也可以采用声波或光波的形式,诸如在无线电波和红外数据通信期间生成的那些。

各种形式的介质可以参与将一个或多个指令的一个或多个序列携带到处理器504以供执行。例如,指令最初可以在远程计算机的磁盘或固态驱动器上携带。远程计算机可以将指令加载到其动态存储器中,并使用调制解调器通过电话线发送指令。位于计算机系统500本地的调制解调器可以在电话线上接收数据并使用红外发送器将数据转换成红外信号。红外检测器可以接收红外信号中携带的数据,并且适当的电路系统可以将数据放在总线502上。总线502将数据携带到主存储器506,处理器504从主存储器506检索并执行指令。由主存储器506接收的指令可以可选地在由处理器504执行之前或之后存储在存储设备510上。

计算机系统500还包括耦合到总线502的通信接口518。通信接口518提供耦合到网络链路520的双向数据通信,其中网络链路520 连接到本地网络522。例如,通信接口518可以是综合业务数字网 (ISDN)卡、电缆调制解调器、卫星调制解调器或者提供与对应类型的电话线的数据通信连接的调制解调器。作为另一个示例,通信接口518可以是局域网(LAN)卡,以提供与兼容LAN的数据通信连接。还可以实现无线链路。在任何此类实现中,通信接口518都发送和接收携带表示各种类型信息的数字数据流的电信号、电磁信号或光信号。

网络链路520通常通过一个或多个网络向其它数据设备提供数据通信。例如,网络链路520可以通过本地网络522提供到主计算机 524或到由互联网服务提供商(ISP)526操作的数据设备的连接。 ISP 526进而通过全球分组数据通信网络(现在通常称为“互联网”528)提供数据通信服务。本地网络522和互联网528都使用携带数字数据流的电信号、电磁信号或光信号。通过各种网络的信号以及网络链路520上并通过通信接口518的信号(其将数字数据携带到计算机系统500和从计算机系统500携带数字数据)是传输介质的示例形式。

计算机系统500可以通过(一个或多个)网络、网络链路520和通信接口518发送消息和接收数据,包括程序代码。在互联网示例中,服务器530可以通过互联网528、ISP 526、本地网络522和通信接口518发送对应用程序的所请求代码。接收到的代码可以在被接收到时由处理器504执行,和/或存储在存储设备510或其它非易失性存储器中以供稍后执行。

云计算

本文一般地使用术语“云计算”来描述计算模型,该计算模型使得能够按需访问计算资源的共享池,计算资源诸如计算机网络、服务器、软件应用和服务,并且允许以最少的管理工作或服务提供商交互来快速提供和释放资源。

一般而言,云计算模型使得先前可能已经由组织自己的信息技术部门提供的那些职责中的一些职责代替地作为云环境内的服务层来输送,以供消费者使用(根据云的公共/私有性质,在组织内部或外部)。取决于特定实现,由每个云服务层提供或在每个云服务层内提供的组件或特征的精确定义可以有所不同,但常见示例包括:软件即服务(SaaS),其中消费者使用在云基础设施上运行的软件应用,同时SaaS提供商管理或控制底层云基础设施和应用。平台即服务 (PaaS),其中消费者可以使用由PaaS提供商支持的软件编程语言和开发工具,以开发、部署和以其它方式控制它们自己的应用,同时 PaaS提供商管理或控制云环境的其它方面(即,运行时执行环境下的一切)。基础设施即服务(IaaS),其中消费者可以部署和运行任意软件应用,和/或提供处理、存储、网络和其它基础计算资源,同时IaaS提供商管理或控制底层物理云基础设施(即,操作系统层下面的一切)。数据库即服务(DBaaS),其中消费者使用在云基础设施上运行的数据库服务器或数据库管理系统,同时DBaaS提供商管理或控制底层云基础设施、应用和服务器(包括一个或多个数据库服务器)。

扩展和替代

在前面的说明书中,已经参考众多具体细节描述了本发明的实施例,这些细节可以从实现到实现有所变化。因而,说明书和附图应被视为说明性的而非限制性的。本发明范围的唯一和排他性指示,以及申请人意图作为本发明范围的内容,是以这种权利要求发出的具体形式从本申请发出的权利要求集合的字面和等同范围,包括任何后续更正。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号