CN107667364A - 使用硬件事务存储器控制索引的原子更新 - Google Patents

使用硬件事务存储器控制索引的原子更新 Download PDF

Info

Publication number
CN107667364A
CN107667364A CN201680032621.5A CN201680032621A CN107667364A CN 107667364 A CN107667364 A CN 107667364A CN 201680032621 A CN201680032621 A CN 201680032621A CN 107667364 A CN107667364 A CN 107667364A
Authority
CN
China
Prior art keywords
hardware
mapping table
lock
thread
htm
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
Application number
CN201680032621.5A
Other languages
English (en)
Other versions
CN107667364B (zh
Inventor
J·勒万多斯基
R·斯图斯曼
D·马克瑞珊斯基
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN107667364A publication Critical patent/CN107667364A/zh
Application granted granted Critical
Publication of CN107667364B publication Critical patent/CN107667364B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/217Database tuning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2379Updates performed during online database operations; commit processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

访问映射表中一个或多个条目的当前状态,该一个或多个条目与使用间接映射表的数据结构的无锁存更新关联。控制映射表中的一个或多个条目的当前状态到映射表中的条目的经转换的状态的转换。该控制包括:使用驻留在设备处理器中的硬件事务存储器(HTM)发起对多个字的原子多字比较和交换(MWCAS)操作,并且经由设备处理器使用HTM的硬件原语操作来执行MWCAS操作。经由映射表中一个或多个条目的当前状态到映射表中条目的经转换的状态的转换,控制数据结构的当前状态到数据结构的经更新的状态的转换。

Description

使用硬件事务存储器控制索引的原子更新
背景技术
电子设备的用户经常需要访问数据库系统,以便获得各种类型的信息和/或执行各种操作。已经设计了多种不同的技术来控制数据项的存储和检索。例如,一些最近的硬件平台已经利用最近的硬件进展(诸如多核处理器、多层存储器层次结构和各种存储设备),以便努力为电子设备提供更高的性能。
发明内容
根据一个总体方面,一种系统可以包括至少一个硬件设备处理器和计算机可读存储介质,该计算机可读存储介质存储可执行指令,该可执行指令当被执行时,使得至少一个硬件设备处理器中的一个或多个硬件设备处理器:控制将映射表中的一个或多个条目的当前状态以无锁存的方式转换为映射表中的条目的经更新的状态。通过使用驻留在设备处理器中的硬件事务存储器(HTM)发起对多个字的原子多字比较和交换(MWCAS)操作,来控制该转换。MWCAS操作使用HTM的硬件原语操作,并且一个或多个映射表条目与数据库的无锁索引相关联。
根据另一方面,控制映射表中的一个或多个条目的第一状态到映射表中与无锁存更新相关联的条目的第二状态的转换,该无锁存更新与使用间接映射表的数据结构相关联。该控制包括:使用驻留在设备处理器中的硬件事务存储器(HTM)发起对多个字的原子多字比较和交换(MWCAS)操作。MWCAS操作经由设备处理器使用HTM的硬件原语操作而被执行。
根据另一方面,访问映射表中的一个或多个条目的当前状态,该条目与使用间接映射表用于锁自由的数据结构的无锁存更新相关联。控制映射表中的一个或多个条目的当前状态到映射表中的条目的经转换的状态的转换。该控制包括:使用驻留在设备处理器中的硬件事务存储器(HTM)发起多个字上的原子多字比较和交换(MWCAS)操作,并且经由设备处理器使用HTM的硬件原语操作执行MWCAS操作。经由映射表中的一个或多个条目的当前状态到映射表中的条目的经转换的状态的转换,控制数据结构的当前状态到数据结构的经更新的状态的转换。
提供本发明内容以便以简化形式介绍将下文在具体实施方式中进一步描述的概念的选择。本发明内容不是旨在标识所要求保护的主题的关键特征或必要特征,也不是旨在用于限制所要求保护的主题的范围。下文在附图和描述中阐述一个或多个实现方式的细节。其他特征将从描述和附图以及权利要求中而显而易见。
附图说明
图1图示用于高速缓存/存储层的访问方法的示例体系架构分层100。
图2A至图2E图示了使用映射表的示例更新。
图3图示指示读取操作吞吐量结果的示例实验数据。
图4图示测量异常中止率的示例实验数据结果。
图5图示测量异常中止率的示例实验数据结果。
图6图示用于通过重试执行锁消除的示例技术。
图7图示并发写入器对两种不同类型的B树的读取器的影响。
图8描绘对映射表中页面的示例多时隙更新。
图9图示用于将MWCAS更新用于映射表的示例技术。
图10描绘与示例基线无锁性能相比的两个MW-CAS全局锁和无限重试技术的示例性能。
图11是用于对数据库管理系统(DBMS)的映射表的原子更新的示例体系架构的框图。
图12是图示图11的系统的示例操作的流程图。
图13是图示图11的系统的示例操作的流程图。
图14是图示图11的系统的示例操作的流程图。
具体实施方式
I.介绍
为了努力提供更高性能(例如,速度、效率),硬件平台中的最新进展已经利用多核处理器、多层存储器层次结构和各种存储设备。例如,中央处理单元(CPU)改变已经包括涉及多级高速缓存的多核处理器和主存储器访问。
诸如SQL SERVER HEKATON之类的多种主存储器数据库系统有利地使用高性能无锁索引技术,以便高效地更新和检索数据。然而,如下文进一步所讨论的,设计和实现无锁索引方法(诸如B+树)可能是困难的。这种困难的一个示例来源在于在不使用互斥锁的情况下,对跨存储器地址的索引做出状态改变。本文中所讨论的示例技术利用硬件原语(例如,使用硬件事务存储器(HTM)),以便原子地修改多个值(例如,存储器地址),而同时保持无锁特性和高性能两者。
作为一个实例,尽管本文中所讨论的示例技术不仅限于存储器内B+树结构,但是本文中所讨论的这些示例技术可以包括映射表间接方法,以实现对存储器内B+树结构(例如,在LOMET等人在美国专利No.9,003,162中讨论的关于BW树所讨论的存储器内B+树结构)的无锁更新,这是因为可以意图的是,这些技术还可以用于多种其他类型结构。
如本文中所使用的,“比较和交换”操作或“CAS”可以指可以在多线程环境中使用以实现同步的原子指令或操作。例如,CAS可以将存储器位置的内容与给定值进行比较,如果它们相同,则CAS将该存储器位置的内容修改为给定的新值。原子性可以保证新值是基于最新信息而计算的。例如,如果该值在此期间已由其他线程更新,则写入操作将失败。操作的结果指示是否执行替换,该替换可以利用布尔进行响应或可以通过返回从存储器位置读取的值(而不是写入它的值)来完成。例如,比较和交换操作可以经由CAS指令来实现。计算领域的技术人员将理解,在不背离本文中的讨论的情况下,其他指令或操作也可以用于实现这个(或者类似)功能。
图1图示了用于高速缓存/存储层的访问方法的示例体系架构分层100。如图1所示,访问方法层102(例如,B树层)是最上层。访问方法层102与作为中间层的高速缓存层104进行交互。应用编程接口(API)106可以被用于访问方法层102和高速缓存层104之间的活动。示例存储层108(例如,闪存层)可以与映射表110进行交互,该映射表110可以在缓存层104和存储层108之间共享。例如,存储层可以支持日志结构化闪存存储装置。例如,日志结构化存储装置可能管理闪存和磁盘存储两者。这种设计可能在体系架构上与现有数据库内核相兼容,同时还适合作为独立或DEUTERONOMY风格的原子记录存储装置(ARS)。
例如,可以支持页面抽象,并且还可以用于支持高速缓存/存储层的访问方法实现。进一步,事务部件(例如,DEUTERONOMY风格的事务部件)可以被添加在顶部。
例如,可以针对多种访问方法,设计用于无锁存的日志结构化存储的体系架构。例如,事务部件可以支持事务键值存储装置,并且可以与可以包括原子键值存储装置的数据部件一起操作。例如,数据部件可以包括无锁存有序索引和/或无锁存线性散列索引。例如,数据部件还可以进一步包括示例无锁存的、日志结构化的、访问方法感知(LLAMA)存储引擎。
示例API 106可以是“数据不透明的”,即意味着示例实现方式未“查看”(例如,未检查或未分析或未取决于)什么访问方法(例如,访问方法层102)正在放入页面或delta记录中,并且独立于访问方法在页面或delta记录中提供的内容而做出动作。因此,示例实现方式可以响应于未取决于由访问方法提供的内容的特定操作而做出动作。
在该上下文中,“页面”可以指存储中的对象,其可以经由物理存储地址而被访问。如本文中所使用的,“页面”可以与灵活大小相关联,并且可以表示可以分布在多个不连续存储的存储片段上的存储页面单元。存储装置可以包括易失性存储装置和/或稳定的存储装置。在该上下文中,“逻辑页面”可以包括基本页面以及指示页面更新的零个或更多个delta记录。
在该上下文中,通常“键值存储装置”可以指数据库管理系统的形式,其可以存储相应键(或术语)和值对,以及当相应键已知时对值进行检索。例如,键值存储装置可以包括具有与相应术语相关联的相应对象列表的术语(例如,键)。例如,键值存储装置可以存储索引,这些索引包括与相应术语相关联的相应的文档标识符列表。
如图1所示,访问方法层102可以包括B树搜索/更新逻辑。进一步,访问方法层102可以与存储器内页面一起工作。
如图1所示,高速缓存层104可以包括用于B树层(102)的逻辑页面抽象。进一步,高速缓存层104可以维护映射表110,并且在需要时将页面从闪存带到RAM。
如图1所示,存储层108可以管理对闪存的写入操作。进一步,存储层108可以处理(至少)闪存垃圾收集。
例如,间接地址映射表可以被维护为高速缓存层的部分。例如,间接地址映射表可以(例如,通过将逻辑页面标识符映射到物理地址)将逻辑页面映射到物理页面。
例如,逻辑页面标识符(PID)可以被用于链接(无锁存的)BW树结构的节点。因此,例如,在BW树的节点之间,链路可以是PID,而非磁盘或存储器地址。例如,间接地址映射表(间接表)可以将PID转换成稳定存储装置上的页面的地址或存储器中的页面的地址,从而提供用于管理(至少)“分页”存储装置的中心位置。
其中使用物理位置将节点链接在一起并且其中更新改变物理位置的树索引,可以涉及将更新改变级联到树的根。然而,间接表可以切断物理位置和节点间链路之间的连接,从而使得节点能够经由更新并且当在未将位置改变传播到无锁存数据结构(例如,BW树)的根的情况下,页面被写入稳定存储时“重新定位”。例如,这种“重新定位”容错可以使得能够进行主存储器中的节点的delta更新以及稳定存储的结构化两者。
例如,节点可以是逻辑的并且可以不占用在稳定存储上或者在主存储器中的固定物理位置。例如,节点的“页面”因此可以根据如何表示节点的方式以及根据它们可能变得多大,来提供策略。例如,因为拆分大小约束可以被减轻,页面在方便时可能被拆分,所以页面大小可能是“弹性的”。进一步,页面可以被更新,而没有“就地更新”的约束。
例如,对页面(例如,BW树)的状态改变可以基于将delta记录预先加到在先页面状态,并且可以基于经由原子“比较和交换”指令(CAS指令)在页面的映射表时隙上安装状态改变。例如,这种技术可以被用于数据改变和管理改变(例如,将页面清除到稳定存储装置),从而利用页面的虚拟化及其弹性以使得CAS能够方便使用。
例如,利用新的(或更新后的)页面状态替换页面的在先(或当前)状态可以包括以下操作中的至少一个:利用与页面的新状态相关联的delta记录的物理地址替换包括表示页面的在先状态的所存储的信息的第一存储对象的物理地址,或者利用页面的新状态的物理地址替换包括表示页面的在先状态的所存储的信息的第一存储对象的物理地址。
例如,利用新状态替换页面的在先状态可以包括:生成当前页面的修改后的版本,或者确定用于替换当前页面的另一页面,以及经由对间接映射表的原子比较和交换操作,利用页面(例如,修改后的版本或用于替换的其他页面)的新状态的物理地址替换当前页面的物理地址。
例如,由于不对与BW树相关联的页面执行就地更新,所以BW树可能是不可变的。相反,页面更新可以以delta记录的形式预先加到页面。例如,delta记录可以以无锁存的方式提供对页面状态的delta更新。例如,为了更新页面P,可以生成(物理地)指向P的当前状态的新delta记录D。例如,可以从间接映射表中的P的物理地址条目,获得该当前状态指针。delta记录可能表示页面的新物理存储器地址。为了将该地址安装到间接映射表中P的物理地址位置中,可以利用原子比较和交换(CAS)指令来移除当前地址并且安装D的新地址。如上文所讨论的,CAS指令是原子(非阻塞的)CPU指令,该指令将给定值(例如,P的旧地址)与存储器位置(例如,间接映射表中的物理地址条目)中的现有值进行比较,并且如果这些值相同,则指令将新值(例如,delta记录的地址)写入到间接映射表中的存储器位置。在CAS返回成功后,由D表示的更新在页面上生效。
例如,由于示例BW树节点之间的指针是符合逻辑的,因此间接映射表上的CAS可能是安装页面更新所涉及的唯一物理指针改变。此外,这种无锁存技术可能是更新示例BW树中的页面的指定方式,并且可能在修改页面的所有操作中统一。如本文中所使用的,“delta安装操作”可以指CAS更新页面的用途。
例如,树操作可以包括BW树上的搜索和更新操作。例如,间接映射表可以包括映射指示符,其将逻辑存储对象标识符映射到物理存储地址。
例如,存储管理器可以在位于一个或多个存储设备上的存储区域上发起操作,该一个或多个存储设备包括与物理存储地址相关联的存储空间。例如,物理存储地址可以包括易失性存储器中的页面的存储地址中的一个或多个,或者稳定存储中的页面的存储地址。
例如,如图2A所示,可以经由映射表204访问页面212,该映射表204可以将页面标识符(PID)206(例如,经由存储在映射表204中的“物理地址”210)映射到在主存储器高速缓存中或者在辅存储装置上的状态208。例如,主存储器高速缓存可以包括随机访问存储器(RAM)。例如,辅存储装置可以包括闪存。例如,页面212可以根据需要从辅存储装置读取到主存储器高速缓存中,页面212可以被清除到辅存储装置,并且页面212可以被更新以在处于存储器内高速缓存中时改变页面状态。例如,根据本文中所讨论的示例技术,基本上所有页面状态改变(数据状态和管理状态两者)可以被提供作为原子操作。数据处理领域的技术人员将领会,(例如,除64位表示之外)存在多种表示“物理地址”的方式。
数据库管理系统(DBMS)通过其API可以经由映射表204上的比较和交换(CAS)原子操作,提供无锁存页面更新(例如,代替保护页面不通过阻塞线程并发访问的常规锁存)。例如,有利地CAS策略可以增加处理器利用并且改进多核缩放。
例如,对映射表的更新可以被包括在硬件事务中,以便一次原子地更新多个表“时隙”,从而获得对索引的多个状态改变(例如,B+树节点拆分或合并),这在下文可以被称为“多字比较和交换”(MWCAS)技术。这些示例技术可能引入开销,因此可以利用(如在本文中所讨论的)示例优化,以使得这些示例技术能够有利地与现有技术的无锁设计基本上相同地执行。
在该上下文中,“事务”可以指事务功能的单个单位,其包括要对各种对象(例如,数据库对象、键值存储对象等)执行的一个或多个操作(指令)。例如,单个“事务”可以包括要作为单位而执行(实施)的多种不同操作,以使得在事务执行结束时所有这些操作被成功完成,或者它们都不成功。例如,事务可以被表征为一致性和恢复的原子单位。例如,事务可以包括多个数据操纵以及构成事务的定义语句。
例如,事务可以被表征为ACID:原子(意味着全有或全无)、一致(如果用户在全部由其自己执行时,正确地为他的应用编写他的程序,那么它将在事务内部正确地工作,其中在事务外部的系统中可以存在正在进行的并发活动)、隔离(事务做的改变不可见,直到事务完成(提交)为止,或者如果事务被中止,则这些改变消失)、以及可持久(即,即使系统在不合时宜的情况下崩溃,所提交的事务的结果保证持续)。例如,在“可串行性理论”中,如果可以将事务视为具有与它们按某个系列次序执行相同的效果,则事务可以被认为是可串行化的。由当前HTM实现方式提供的事务仅适用于在易失性存储器中执行的操作,因此当前HTM事务只涵盖ACID保证的子集。例如,由于HTM事务仅限存储器,所以它们既不能提供持久性(ACID中的“D”),也不提供可恢复性保证。
使用事务处理的计算机系统可以采用提交协议,以便确保在数据项中未做出永久改变,或者直到执行指定“提交”为止没有对系统的其他节点可见改变。在该上下文中,为了“提交”事务通常可以指将事务结果安装在数据库中。提交的能力暗示如果事务被中止,则数据库系统就不能安装事务的结果。并非所有开始的事务最终都会被提交。没有提交的事务被认为是中止。事务可能中止的原因包括电源可能错误、系统可能崩溃、与其他事务可能发生并发冲突、或者用户(或他的应用程序)可能检测到另一误差并且显式地中止。
例如,若干个进程可以在各种节点上执行,其中每个进程都能以如下方式临时执行事务的动作,以使得如果事务需要被中止,那么动作可以被“撤销”。
例如,“冲突事务”可以指包括至少一个事务的两个或更多事务,该至少一个事务至少可能访问由事务中另一事务更新的数据。因此,冲突事务中的至少一个冲突事务所生成的结果将取决于事务被执行的次序。
提交协议可以具有多个特性。例如,它可能涉及事务的原子性。一旦事务被提交,提交或者达到完全完成状态,或者完全没有完成,其中没有部分完成,所以如果一个站点或分布式系统的任何部分在提交操作期间崩溃,则系统恢复到所有部分完成的部分被移除的状态。此外,系统可能能在一段时间后“忘记”提交处理的结果,即,其不会继续携带陈旧数据,这是因为当没有崩溃发生时需要数据的可能性随着时间迅速减小。
对于支持“撤销”操作的系统,系统可以通过“撤销”其动作(如果有的话)和“忘记”事务来中止事务。
对于支持锁的系统,“数据锁”是用于将排他权限指派给数据库中的数据或记录的机构。对于这样的系统,第一事务可以锁定特定数据段,以确保在第一事务提交或中止之前,没有其他事务访问该数据。
通常,在计算中,高速缓存可以指透明地存储数据的部件,以使得可以更快地服务对该数据的未来请求。例如,存储在高速缓存内的数据可以是早先已经计算的值或存储在别处的原始值的副本。如果所请求的数据存储在高速缓存中(高速缓存命中),则可以通过简单地读取高速缓存来服务该请求,这相对较快。否则(高速缓存未命中),数据必须从其原始存储位置重新计算或检索,这相对较慢。因此,可以从高速缓存服务的请求数目越多,则整个系统的性能就变得越快。
如在本文中进一步所讨论的,可以利用示例“全局消除锁”方法来实现多字比较和交换,该方法将对映射表的所有访问包括在硬件事务中。
此外,如本文中进一步所讨论的,可以利用示例“无限重试”方法,以便实现多字比较和交换,该方法仅将对映射表的多时隙更新包括在硬件事务中(例如,单例访问离开事务)。如下文进一步所讨论的,这种方法可以有利地实现高性能水平。
此外,如本文中进一步所讨论的,可以利用示例技术来保证旨在减少硬件事务的虚假中止的“无限重试”方法的进展。
因此,本文中所讨论的示例技术可以利用诸如HTM之类的设备,在无锁索引内提供多个原子更新,同时维持高性能。
近来,每代中央处理单元(CPU)增加了芯片上的处理器的数目,这导致大量的并行性。事务存储器(TM)已经被提出作为帮助利用这种并行性,同时减轻程序员的负担的一种解决方案。例如,TM允许对关键区段的所有加载和存储装置进行原子执行,从而减轻程序员对细粒度并行性的担忧,而这是个可能非常困难的工程任务。商业CPU中的硬件事务存储器(HTM)运送提供有前途的事务存储器实现方式,这可以实现有利性能,并且广泛可用。
在主存储器数据库中,多核可伸缩性可以提供良好的性能。这在访问方法(索引)层处可能很重要,因为它是数据操纵和检索的热路径。作为示例,细粒度锁(锁存)协议已被用于实现索引并行性。然而,在主存储器系统中,由于在关键路径上没有输入/输出(I/O),因此锁(锁存器)可能是个实质瓶颈,这导致设计和实现“无锁”索引技术。例如,存在具有无锁索引的商业系统。例如,MEMSQL使用无锁跳过列表,而MICROSOFT的HEKATON主存储器引擎使用BW-TREE(无锁B树)。为了实现锁自由,这些设计使用原子CPU硬件原语(诸如比较和交换(CAS))来操纵索引状态。这虽然高效,但是因为原子指令通常限于单个字,所以无锁设计可能难以设计和制造,并且非平凡数据结构可能涉及多字更新(例如,B树拆分和合并)。
无锁索引设计用于在主存储器系统中实现出色性能。近年来,HTM已经被用于通过推测地以及并发地执行操作,将单线程索引方法无缝地转换成高性能多线程索引。这种方法可以简化索引的设计和实现方式,它提供多字原子更新并且将冲突判定推送到硬件事务中。
本文中的讨论涉及HTM和无锁索引技术的相互作用。HTM目前涉及几个限制和异常状态,诸如由于容量限制而造成的高中止率,这可能使其作为生产系统遇到广泛多种的数据和工作量的通用解决方案而不受欢迎。例如,HTM在高竞争场景下可能表现出不良性能。例如,基于HTM的方法可能会中止触摸“热”数据项的读取器,而无锁设计可能出于任何原因既不能阻止也不能中止读取器。如本文中进一步所讨论的,HTM可以用于帮助简化无锁设计技术,而同时维持良好性能。使用HTM作为构建块以创建多字CAS指令可以有利地帮助简化性能影响最小的无锁索引设计。
根据本文中所讨论的示例技术,HTM可以被用于使用来自GOOGLE的CPP-BTREE在B树架构中提供并行性。例如,这种方法可以为具有小(8字节)固定大小的密钥和有效载荷的适度大小的数据集提供有利的可扩展性。然而,对于反映多种真实世界部署的数据(例如,具有长度可变的密钥、大记录计数),这种基于HTM的方法可能表现出不良性能,在一些情况下,执行比串行化执行更不利。进一步,HTM当前可能不适合实现诸如锁耦合之类的细粒度B树并行性技术。
在下文的讨论中,在基于HTM的B树与BW树之间进行比较,MICROSOFT当前在MICROSOFT产品中使用的无锁B树包括HEKATON主存储器数据库管理系统(DBMS)。例如,锁自由可能涉及额外机构(例如,由于写时复制造成的存储器安全和维护的历元保护)。然而,(由于写时复制语义)无锁方法可能从不中止读取器。例如,该特征可能有利于读取性能,尤其是当读取更新速率较高的数据时。同时,如果它们的读取集合与写入重叠,则执行就地更新的基于HTM的方法可能中止读取器,从而在最坏场景中,读取性能降低达4倍(4x)。
如下文进一步所讨论的,使用HTM作为用于执行多字CAS操作(MWCAS)的技术可以有利地帮助简化无锁设计,这是因为其允许跨多个任意位置的操作的原子安装(例如,用于B树页面拆分和合并)。例如,MWCAS是HTM的有利应用,因为它避免了多种中止异常状态(因为事务很小)并且提供了有利性能。
针对主存储器数据结构开发高性能并行访问方案可能是导致死锁和竞争条件的繁琐且容易出错的任务。例如,事务存储器可以通过将冲突检测和解析从开发人员委托给系统,来减轻这种负担。使用事务存储器,程序员可以指定CPU操作集合,并且系统确保这些操作的原子和隔离执行,或在冲突时中止。例如,对于事务存储器,程序员可以指定这样CPU操作集合:
atomic{
Withdraw(A,X)(1)
Deposit(B,X)
}
系统确保上述(1)的这些操作的原子和隔离执行,或者在冲突时中止(例如,全有或全无)。
例如,HTM捎带CPU微体系架构中的现有特征,以支持事务。例如,CPU高速缓存可以被用于存储事务缓冲区并且提供隔离。例如,CPU高速缓存相干协议可以被用于检测冲突事务访问。通过这些修改,CPU可以为运行时间开销低的事务存储器提供硬件支持。然而,存在可能限制HTM的用处的约束。例如,一个潜在约束是事务的读取和写入集合必须适合依序高速缓存以使其被执行。因此,多种特性可能会限制事务的大小,这包括高速缓存容量、高速缓存集合关联性、超线程、转换后备缓冲区(TLB)容量等。
例如,TLB可以指存储器管理硬件用来改善虚拟地址转换速度的高速缓存。例如,设备处理器可以在存储器管理硬件(特别是用于利用分页或分段的虚拟存储器的硬件)中包括一个或多个TLB。
另一潜在约束是事务持续时间。多种硬件事件(诸如中断、上下文切换或页面错误)可能中止事务。进一步,冲突检测可以以高速缓存行的粒度进行,这可能导致错误共享的情况,其中由于访问和修改同一高速缓存行上的单独项目的线程而发生中止。
这些潜在问题可能使HTM实现方式难以保证事务即使被“无限”重试也会成功。因此,为了尝试保证前向进度,可以提供非事务回退。例如,一种解决方案可能涉及使用锁消除(例如,参见RAJWAR等人在Proceedings of the 34th Annual ACM/IEEE InternationalSymposium on Microarchitecture(2001)中的“Speculative Lock Elision:EnablingHighly Concurrent Multithreaded Execution”),其可以通过回退到非事务的基于锁的同步,来保证进度。例如,锁消除的潜在有利特征是它与用锁编程基本相同。例如,程序员可以通过使用诸如以下各项之类的CPU操作集合,来利用锁消除:
AcquireElided(Lock)
Withdraw(A,X)(2)
Deposit(B,X)
ReleaseElided(Lock)
然而,与传统的基于锁的同步的不同之处在于,锁消除首先尝试事务性地执行关键区段,并且仅当事务中止时,才通过获取锁来执行关键区段。例如,有利地锁消除可以为使用简单粗粒锁的程序提供乐观的并行性。例如,硬件可以确保只要并发线程执行没有冲突访问的关键区段,则它们就可以并行运行,从而达到与使用细粒度同步相似的性能。锁消除涉及在事务的读取集合中包括锁字,以使当另一线程获取锁(从而导致冲突)时,事务中止。因此,一旦线程通过采取锁诉诸于非事务执行,则所有其他并发执行的事务就会中止,从而拖延整体进度。
参考HASWELL CPU,INTEL支持表示包括这种功能的主流CPU的事务存储器。可以理解,与上文所讨论的方法类似:32KB L1 8路集合关联高速缓存缓冲区读取和写入集合,并且以缓存行粒度执行冲突检测。可以理解(参见例如,“INTEL 64和IA-32体系架构优化参考手册(2014年9月INTEL 64and IA-32Architectures Optimization ReferenceManual)”),即使无限重试,其也不能保证事务最终会成功。因此,在所有情况下,都可以提供锁消除或一些其他形式的非事务回退,以确保取得前向进度。INTEL的事务同步扩展(TSX)提供了两个接口。
例如,硬件锁消除(HLE)添加两个新指令前缀(XACQUIRE和XRELEASE)以与实现锁的指令结合使用,从而如上文所解释的提供锁消除功能。
例如,有限事务存储器(RTM)添加几个指令(XBEGIN、XEND和XABORT)以组成自定义事务逻辑。例如,RTM允许在事务中止的情况下,指定自定义回退代码路径。例如,RTM可能当实现锁消除时,提供更多灵活性。例如,在诉诸于获取锁(而非依赖于INTEL的默认HLE实现方式)之前,关键区段可以被事务重试指定次数。
由于它们在数据库系统中的普遍性,所以本文中的讨论(至少)涉及主存储器B+树实现方式,并且做出用于基于HTM对无锁索引的实验性比较。当前这样的比较对于其他高性能主存储器索引方法困难。例如,ART(参见例如,LEIS等人在Proceedings of the IEEEInternational Conference on Data Engineering(2013年4月8日)中的“The AdaptiveRadix Tree:ARTful Indexing for Main-memory Databases”)可以提供有利的单线程性能,但是可能没有多线程无锁对应方。
CPP-BTREE是高性能的存储器优化的B+树,其支持单线程访问。CPP-BTREE不包括在多种当前B+树实现方式中常见的细粒度锁技术和并发协议(例如,页面锁或锁耦合),因此在本文中进行进一步讨论,这是因为HTM可能与细粒度并发技术(如下文进一步所讨论的)不兼容。进一步,HTM可以无缝地向非线程安全的数据结构提供可伸缩的多线程性能。在内部,CPP-BTREE是典型的B+树,这是因为数据存储在叶节点中,并且内部索引节点包含分隔符键和指向子页面的指针。
示例BW树可以作为完全无锁的B+树存在,这意味着在读取或写入索引时,线程可能从不因任何原因而阻塞。例如,目前在若干个MICROSOFT产品(包括SQL SERVER HEKATON)中使用BW树(参见例如,DIACONU等人在Proceedings of the ACM SIGMOD InternationalConference on Management of Data(2013年6月22日)中的“Hekaton:SQL Server'sMemory-Optimized OLTP Engine”)和AZURE DOCUMENTDB。
BW树的锁自由是基于其对映射表的维护,该映射表将逻辑页面标识符(LPID)映射到虚拟地址。BW树节点之间的所有链路都是LPID,这意味着遍历索引的线程将通过映射表将每个LPID转换成指向目标页面的指针。
例如,无锁更新可以通过由BW树利用写时拷贝更新页面实现。例如,更新可以创建描述更新的delta记录,并且将delta记录预先加到目标页面。例如,delta记录允许以无锁方式对页面进行delta更新。例如,可以使用原子比较和交换(CAS)来安装delta,该原子比较和交换(CAS)将映射表204中的当前页面地址替换为delta的地址。图2A描绘了页面P 212的delta更新,图2A中的虚线表示P的原始地址,而图2A中的实线表示P的新地址208。如果CAS失败(例如,由于对赢得CAS的页面的并发更新),则失败的更新器将重试。例如,如图2B所示,一旦在页面上累积了若干个delta,页面就可以被合并(218),以防止搜索性能的降低。例如,合并可以涉及通过所应用的所有delta更新,创建新的紧凑搜索优化页面216,其在对映射表204中的物理地址202执行CAS时,使用图2B中所图示的CAS将旧页面版本替换成被标识为页面P的页面。
无锁B+树设计中的示例问题涉及结构修改操作(SMO),诸如页面拆分和合并,其引入对多于一个页面的改变,这是因为多个任意页面可能不使用单个CAS来更新。例如,BW树可能会将SMO分解为一系列原子步骤,每个步骤可以使用CAS安装到单个页面。
下文对示例无锁页面拆分进行讨论,可以在例如LEVANDOSKI等人在InProceedings of 29th IEEE International Conference on Data Engineering(ICDE2013)(2013年4月8日至11日)中第302页至第313页的“The Bw-Tree:A B-tree for NewHardware Platforms”找到页面删除的示例讨论。
如图2C至图2E所描绘的,示例无锁页面拆分以两个阶段工作,并且基于B链路设计。现有页面P222通过首先创建具有来自P的键范围的上半部分的记录的新页面Q226来拆分。接下来,在P 222上安装(240)“拆分delta”228,其在逻辑上描述拆分并且提供到新同级Q 226的侧链路。然后,如图2E所示,对于具有delta记录230的父O处的Q 226,再次使用CAS发布(242)(搜索关键字,PID)索引项202、206。如图2E所示,页面R 224表示拆分之后的节点220的右分支。如下文进一步所讨论的,为了确保没有线程必须等待SMO完成,遇到正在进行的部分SMO的线程将在继续自己的操作之前完成它。有利地无锁设计是高效的,然而,这种性能是以成本来实现的,可能难以设计和实现诸如B+树的非平凡无锁数据结构。
下文所讨论的实验比较和对比在几个工作载荷下的CPP-BTREE和BW树实现方式,以便向并发B树突出显示使用HTM和无锁方法之间的差异。每个实验预先加载两种类型的树中的一种。然后,各自指派固定数目的线程,以连续执行查找操作或更新操作。在实验中,每个结构的记录计数、记录大小、密钥大小、访问偏差以及查找/更新线程计数是变化的。此外,HTM冲突处理和无锁技术的几种方法可以与基本自旋锁相比较。下文所讨论的结果包括操作吞吐量和硬件事务中止率。
除非另有说明,否则工作载荷使用8字节密钥和8字节有效载荷(总共61MB)或256字节有效载荷(总共1.2GB)集中在400万条记录的树上。实验使用发布查找的4个硬件线程以及发布更新的4个硬件线程。
下文的表1描述用于下文所讨论的实验的示例机器。示例HASWELl代CPU配有INTEL(TSX)。
表1
B树可以有利地使用硬件锁消除,存在当前使用自旋锁或读写锁来实现多核并发的B树实现方式。HTM锁消除不太费力,并且可以仅通过替换底层同步库来,在乐观同步性的情况下,简单地检查现有基于锁的数据结构。
如下文所讨论的,通过分析其与两个基于锁的同步方案(单个全局锁和细粒锁耦合)的潜在拟合,锁消除可以潜在用于B树。例如,如本文中所讨论的,HTM可以有效地并行化使用单个的(消除的)全局锁的简单B树,尽管这可能涉及一些限制。附加地,示例HTM接口可能与锁耦合不兼容。
硬件锁消除可以将微粒度锁的执行或无锁编程提供给粗粒度锁的简单性。因此,示例方法可能涉及将每个B树操作封装在由一个全局锁保护的关键区段中。然后,锁获取可以被硬件消除,以提供互操作并行性。
例如,可以使用针对单线程存储器内访问优化并且使用全局消除锁并行化的现有B+树实现方式(例如,CPP-BTREE),来评估该方法。为了理解该方法的潜力并且理解其开销,图3的图300使用消除锁、使用常规自旋锁和根本不使用锁(其可以表示“理想”性能并且可能仅在只读工作载荷下是安全的)比较读取操作吞吐量与该树。该树预先填充了4百万个8字节密钥和有效载荷,并且驱动只读一致随机访问工作载荷的线程的数目是变化的。例如,实验结果表明,在固定长度的密钥和有效载荷的小工作载荷下,HTM可以在不费力的情况下提供高吞吐量。例如,基本HLE的执行速度可能比非同步访问慢33%左右。
然而,一般而言,全局消除锁在简单工作载荷上的有利结果可能不成立。示例复杂问题源于硬件事务的容量限制。在后台,硬件跟踪事务中线程访问的所有高速缓存行的读写集合。示例HTM实现方式可以利用其32KB L1高速缓存,来缓冲事务的写入并且跟踪其读写集合。从事务的写入集合中高速缓存行的任何驱逐可能导致中止。因此,事务不会比可以适合于L1的事务写的更多。关联性可能加重这一点,例如,其L1可以是8路关联,并且例如,写入映射到相同的高速缓存集合的9个不同的高速缓存行可能导致中止。由于读取集合也在L1中被跟踪,所以它们可能遭受类似的容量约束,尽管读取集合可能受到未指定的二级高速缓存(潜在是载荷单元)的保护。最后,超线程还可能引起与容量有关的中止,这是因为公共内核上的硬件线程可能共享L1高速缓存和其他资源。
总的来说,这些容量约束使得HTM的使用在并行化B树时具有挑战性,确定给定树的HTM中止率的多种特性可能直到运行时间才可能得知。例如,树的密钥大小、有效载荷大小、总大小和地址访问模式都可能影响性能。例如,树大小可能是有问题的,这是因为在遍历期间访问的节点的数目随着树大小以对数增长,这也增加了所需的事务大小。最终,这些HTM容量约束意味着当使用全局消除锁时,具有大密钥和/或大有效载荷的树可能不会有利地并行化。
为了调查这些限制在实践中的影响,在变化密钥和有效载荷大小同时由于只读树遍历的容量约束而中止的事务的百分比是通过实验测量。例如,树被预先填充了不同数目的记录,并且工作载荷在超线程均开或关的情况下运行。测量事务中止率,其与所实现的并行性相关。如果中止率接近0%,则所有操作都在事务中执行,并且达到最大并行性(类似于如图3所示的HLE性能趋势)。如果中止率接近于100%,则锁消除回落到获取导致没有并行性的全局锁(这类似于如图3所示的自旋锁性能趋势)。
图4至图5图示了各种密钥和有效载荷大小的实验事务中止率。例如,图4图示了在固定大小的8字节的有效载荷的情况下示例中止率与密钥大小,而图5图示了在固定大小的8字节的密钥的情况下示例中止率与有效载荷大小。图4至图5所示的结果图示了通过这种简单方法,具有相对较小的密钥和有效载荷的even树可能并不总是并行化。作为示例HTM,即使事务缓冲区存储在32KB高速缓存中,几乎所有事务都以大于几千字节的有效载荷而中止(例如,如图5所示),从而说明了8路高速缓存集合关联性的有限效果以及与超线程共享的高速缓存。密钥大小可能会受到更多约束,这是因为单个事务在每次查找期间遇到多种密钥。对于在一百万个记录树中只有64个字节的密钥,中止率可能上升到50%(例如,如图4所示)。
硬件容量是采用HTM的一个示例难点,另一难点在于预测由于事务冲突而造成的性能。上文的讨论避免了冲突,并且通过使用只读工作载荷,来隔离硬件容量的影响。在实践中,只有当工作载荷可能存在冲突更新时,才可能需要HTM。当事务由于真实数据冲突而中止时,性能自然受到影响。然而,还有另外两种潜在有问题的方式是事务中止可能会影响性能。首先,推测不是免费的:事务启动开销以及它在运行的同时消耗的资源可能导致工作白费。其次是所谓的“旅鼠(lemming)效应”(参见例如,DICE等人在Proceedings of 3rdACM SIGPLAN Workshop on Transactional Computing(2008年2月23日)中的“Applications of the Adaptive Transactional Memory Test Platform”)。例如,HTM可能涉及所有事务,当事务中止时,HTM最终会回退到使用锁,这是因为它可能没有做出任何前向进度保证。当事务回退并且获取锁时,关键区段中的所有其他事务中止,并且在释放锁之前,该关键区段中的该所有其他事务无法重新启动。效果是执行完全串行化,直到释放锁为止,即使其他事务对非冲突缓存行进行操作。因此,并行性通常不必要地受到强有力的约束。在其中即使对于对低争用值进行操作的事务,执行几乎都被完全串行化的高错位工作载荷中,这个问题可能会变得显而易见。
用于减轻旅鼠效应的示例技术涉及在回退以获取锁之前,使事务重试不止一次。重试有争议的事务可能是昂贵的,但是获取锁并且串行化执行的成本可能甚至更为不利。与HLE相对比,示例RTM指令可以提供灵活接口,其允许当事务中止时执行自定义代码。作为优化,在诉诸于获取锁之前,RTM可以用来多次重试关键区段的事务执行。图6提供了示意图600,其图示了使用示例RTM指令利用重试执行锁消除的示例技术。例如,图6描绘了使用具有可配置重试阈值602的RTM的示例锁消除技术。如图6所示,锁604被用于执行关键区段。例如,在重试区段606中,如果锁604已被占用,或者如果中止发生,则执行回退区段608,以处理关键区段。
下文对当工作载荷错位和每个事务乐观尝试计数变化时,比较性能的实验结果进行讨论。为了实验目的,B树预先填充了4百万个8字节的密钥和有效载荷项目,8个线程执行查找为50%和更新为50%的工作载荷。工作载荷是Zipfian,其分布的错位参数(θ)在0到3之间变化(通过极高错位一致随机),每个事务的事务尝试数目从0到64变化,其中0对应于与自旋锁同步。重试计数为1表现出与示例默认锁消除实现方式(例如,HLE)相对应的性能。性能度量是吞吐量,其被归一化为自旋锁的吞吐量。
结果表明随着工作载荷错位的增加,锁消除的性能显著下降。在某个时候,锁消除不如自旋锁执行有利,从而从多核硬件中没有实现并行性。增加事务尝试的数目会延迟性能断崖,并且随着错位的增加而导致性能更显著下降。
一般而言,无限期移向更大的重试限制可能不起作用,重试注定事务具有成本,并且盲目重试事务可能导致性能不如通过自旋锁进行串行化执行更有利。问题根源在于,通过现有HTM冲突解决策略(似乎是“攻击者赢”),事务可能会不断地相互中止,而没有全局进度的任何保证。结果在于对于并发事务集合它们可能都没有提交比使用自旋锁更不有利的结果。
导致这个问题的一个因素是事务内第一冲突访问的位置。在先前的实验中,当在树遍历操作结束时更新8字节的有效载荷时,冲突访问发生,该访问在事务内晚了。如果有效载荷的大小明显大于8个字节,则更新它可能变成更长的操作,其会在事务内更早地移位第一冲突访问。这可能会增加重试会彼此重复干扰的可能性。例如,线程T1可以事务性地在树中找到值并且适当更新其有效载荷。同时,线程T2可以尝试更新相同的有效载荷,从而中止T1。当T2仍在更新有效载荷时,T1可能已经重新启动,如果与索引搜索相比较,更新有效载荷需要很长时间,则T1可能会导致T2的事务中止。即使只有这两个线程,也不能保证更新会完成。
上文所讨论的实验利用256字节(而非8字节)有效载荷重新运行。结果表明,随着事务尝试的次数增加,性能达到高峰,然后下降(甚至低于串行化性能)。事务尝试的最佳次数可能取决于工作载荷,并且可能会有很大变化。在没有根据工作载荷动态选择事务尝试次数的解决方案的情况下,对于未来的实验,重试尝试的次数固定为8次,这提供了有利的总体性能,并且避免了在实际错位下崩溃。
当HTM用于并行性时,单个全局锁可能足够,但是在没有HTM的情况下,它可能是有问题的。相反,实际高并行性的高性能B树依赖于细度锁技术。B树上的有效细粒度锁不容易被正确获得。存在多种技术,但是锁耦合是广泛使用的方法(例如,参见GRAEFE,GOETZ在Journal of ACM Transactions on Database Systems(2010年7月,第35卷,第3期)中的“A-Tree of B-tree Locking Techniques”以及SRINIVASAN等人在InternationalJournal on Very Large Data Bases(1993年10月,第2卷,第4期)中的“Performance of B+Tree Concurrency Algorithms”)。
在锁耦合中,在工作人员遍历页面时,一对锁被保持,即一个在“源”页面上,另一个在“目标”页面上。随着遍历继续进行,首先获取遍历中目标页面的锁,然后才释放源页面上的锁。这种排序避免了在读取源页面和访问目标页面之间的竞态(例如,这可以防止目标页面在遍历移向该目标页面时而消失)。
锁耦合还可以应用于使用HTM来并行化B树,其具有提高容量和冲突中止两者的潜力。例如,事务可以在它们沿着树遍历时保持更小的恒定大小的读取集,并且它们可以在向下工作时可以避免树的较高级别上的冲突。显著的是,这些恒定大小的读取集合可以有效地消除树大小对中止率的影响。
然而,示例HTM接口可能太严格以至于不能支持锁耦合。例如,单个线程上的HTM事务可能是嵌套的,但是可能不会如锁耦合的非两阶段模式所涉及的那样重叠。为了进行这个工作,TSX将需要对他们的读取集给出线程控制。例如,AMD提出的ASF指令集(参见例如CHUNG等人在Proceedings of the 43rd Annual IEEE/ACM International Symposium onMicroarchitecture(2010年12月4日)中的“ASF:AMD64Extension for Lock-Free DataStructures and Transactional Memory”)包括“释放”指令,该指令从正在执行的事务的读取集中移除指定项目。如果没有这样的支持,在示例HTM下,通过消除页面锁进行锁耦合可能不如使用单个消除全局锁执行更为有利。
使用锁消除(例如,经由HLE或RTM)可以有利地操作用于具有可预测高速缓存足迹的简单B树索引。然而,中止率对多种参数敏感,其中一些参数可能不会得知,直到运行时间为止。数据结构大小、访问错位、访问速率、物理地址模式和虚假共享可能都起作用。进一步,在一些情况下,使用HTM作为全局锁方法可能由于中止和事务初始化开销的浪费,而导致比单线程执行(或通过自旋锁进行串行化执行)更不利的性能。附加地,现有的商品HTM接口可能与细粒度锁技术(诸如锁耦合)不兼容,否则其可能会减少冲突并且消除中止与数据结构大小之间的依赖关系。
在将HTM与硬件加速无锁编程的概念进行比较时,这些方法不同并且每个都进行折衷。例如,HTM提供了原子就地更新抽象,无锁编程技术可以使用有限的(通常是单字)原子就地更新,并且可以使用写时复制来组成更大的操作。因此,每种方法都伴随着不同的成本和潜在问题集合。
因为这两种方法以不同方式执行更新,所以它们之间显著的潜在性能差异是由于更新对并发操作的影响而造成的,具体地,写入如何影响并发读取。
表2
如表2所图示的,无论何时读取高速缓存行被并发修改,HTM都中止,但是无锁技术通常不会干扰读取器。
例如,如表2所示,在两种方法下,写入-写入冲突都导致重试和工作浪费,然而,无锁技术避免了HTM无法进行的读取-写入冲突下的工作浪费。例如,通过避免就地更新,经由指针公布的无锁更新不会中断读取。对于并发读取,旧值保持不变,而稍后读取发现一个或多个新版本。
图7探讨了这种影响,从而说明在执行更新和工作载荷错位的线程的数目变化时,使用两种B树实现方式的四个读取器线程的总读取吞吐量。在这个实验中,每个树包括400万条记录。图7图示了并发读取器对两种不同类型B树的读取器的影响。如图7所图示的,在通过基于RTM的CPP-BTREE进行并发更新下,读取器性能可能受到影响,而读取器不受通过无锁BW树进行更新的影响。
小工作载荷使用8字节密钥和8字节有效载荷,大工作载荷使用30个子节到70个字节的可变长度密钥和256个字节的有效载荷。例如,可以根据ZIPFIAN分布来选择密钥(参见例如,GRAY等人在Proceedings of ACM SIGMOD Record(1994年6月,第23卷,第2期)中的“Quickly Generating Billion-record Synthetic Databases”)。
对于低争用工作载荷(θ=0,其是一致随机访问模式),HTM使能的CPP-BTREE和无锁BW树都不会由执行写入的线程的存在而显著地受到影响。然而,对于高争用工作载荷(θ≥2),CPP-BTREE所能够承受的读取器吞吐量开始下降。相比之下,BW树从有争议的写入繁重工作载荷中获得双重好处。首先,由于写入器不会对读取器造成伤害,所以读取器受益于高访问本地性。其次,写入器可能会使读取器受益:读取器可以从高速缓存中读取新近写入(除了本地性错位给出的益处之外)。
无锁技术可以减少并发写入器对读取器的影响,然而,这种益处带来了潜在的成本,诸如出于存储器安全性而潜在需要类似垃圾回收机构、针对原子更新而潜在需要间接、以及写时复制的潜在成本。这些成本被交织在一起:针对每个的折衷影响其他的成本。
与无锁结构分开的每个对象可以继续被持有对其的引用的线程访问。这是个有利益处,然而,为了安全起见,系统可以跟踪线程何时不再持有对未链接对象的引用。否则,过早重用对象的存储器可能会产生读取损坏数据的线程。
例如,BW树使用历元机构(例如,参见LEVANDOSKI等人在Proceedings of 29thIEEE International Conference on Data Engineering(ICDE 2013)(2013年4月8日至11日,第302页至第313页)中的“The Bw-Tree:A B-tree for New Hardware Platforms”),其跟踪每个线程何时访问树。例如,无论线程何时访问树,它们可以将自己放置在当前历元的列表上,并且它们可能只有在它们丢弃对树内部对象的所有引用之后,才能移除它们自己。例如,当页面被去链接时,它可能被放置在当前历元的队列上,直到所有的线程都移动到稍后历元上为止,在此之后,该页面可以被安全地重复使用并且可以被释放。
用于提供这种“指针稳定性”的不同方案具有不同的性能折衷,但是所有都可能增加潜在开销,并且多种非平凡无锁数据结构利用某个这样的机构。由于上文所讨论的具有θ=3的错位的“大工作负载”的历元,在BW树中引起的示例开销可能涉及内核,其分别在查找和更新的历元保护上花费其周期的8%和18%。本文中所讨论的BW树的所有测量都包括其历元保护的开销。
多种无锁结构还包括另一潜在成本:锁自由可能影响结构的存储器内布局。例如,无锁数据结构可以被设计成经由指针类的字段将需要是原子的更新组合在一起,其然后可以经由单个比较和交换来公布。例如,这可能会融合同步和存储器布局,并且可能强制附加间接。BW树的映射表是这种情况的示例。每个页面访问都经由映射表经过间接,这可能会有效地使遍历树时访问的高速缓存行的数目加倍。在有关BW树的经验以及关于无锁事务引擎更新近的工作中(例如,参见LEVANDOSKI等人2015年1月4日在Proceedings of SeventhBiennial Conference on Innovative Data Systems Research中的“High PerformanceTransactions in Deuteronomy”)已经验证:这种间接性并不繁琐,它通常可能与可变长度列表或数据一致,这可能使得间接性的有效处理成为合期望的。
这种附加间接还可能加重存储器分配器负担,这是因为更新不能使用旧值的存储器位置。因此,专用和/或无锁存储器分配器可以被用于对此进行补偿。
进一步,当使用分页写时复制语义时,无锁结构还可能招致附加的复制成本。写时复制的示例成本可能涉及页面大小、访问错位、有效载荷大小的一致性以及分配成本,所有这些都可能在写时复制的有效性中起作用。例如,为了提高效率,数据结构可以通过几次查找和更新,来分摊每次完整页面复制的成本。
例如,在一些情况下,写时复制可以改善性能。例如,写时复制可以有利地改进与更新并发的查找的性能,并且BW树的delta更新和盲写可以有利地改善写入器的性能。
如上文所讨论的,对无锁索引设计可能存在有利的性能益处。然而,增益可能涉及成本,这是因为可能难以构造和构建诸如B+树之类的复杂无锁数据结构。下文的讨论通常针对使用HTM来缓解构建无锁索引的难度的中间立场,而不会大幅牺牲性能。讨论的第一部分是针对无锁索引设计中的潜在困难,随后讨论了使用HTM来实现多字比较和交换(MWCAS)以供例如在BW树内用于以原子方式安装多页面结构修改(例如,拆分和合并)的方法。虽然下文可以对BW树进行特定讨论,但是该方法更一般地(至少)适用于使用间接以用于锁自由的数据结构。
无锁索引设计遇到的潜在问题的示例源于对原子CPU原语(例如,CAS或提取和递增操作)的依赖,以便对数据结构进行状态改变(例如,以便将数据结构从当前状态转换到更新后的转换状态)。这些示例指令以单个字(例如,在当前CPU体系架构上通常为64位字)的粒度运转。因此,如果数据结构上的所有操作仅需要单个原子指令,则设计数据结构可以依赖于这些特征。然而,对于非平凡数据结构来说,情况可能并非如此。例如,当操作必须跨多个原子操作时,可能会出现困难。
例如,在BW树中,诸如页面拆分和合并之类的结构修改操作(SMO)跨多个原子步骤。例如,拆分涉及两个原子步骤,每个步骤使用CAS安装:一个用于将拆分安装到具有新同级R的现有页面P,而另一个用于将新搜索关键字和逻辑页面指针安装到父页面R处的同级R。例如,页面合并可能涉及三个步骤:一个将页面P标记为已删除,第二个更新P的同级Q以合并P的现有密钥中的任一密钥,以及第三个从父O删除P的ID和搜索关键字。本文中所讨论的示例技术可以用于提供结构修改(例如,SMO)的原子性(全有或全无)。
当操作跨多个原子步骤时,可能出现的一个潜在问题是处理其他线程观察“进行中”操作的情况。在基于锁的设计中,这种情形下的安全性可以通过在由执行SMO的线程设置的锁上停止的线程来保证(例如,参见SRINIVASAN等人在International Journal onVery Large Data Bases(1993年10月,第2卷,第4期)中的“Performance of B+TreeConcurrency Algorithms”)。在无锁场景下,这个过程可能涉及更多的处理努力:例如,系统可以处理(a)如何检测没有锁的这种冲突,以及(b)在检测到冲突之后怎么做而不会阻塞或破坏数据两者。例如,如下文所讨论的,示例BW树设计可以解决这些问题。
例如,工作人员可以通过确定(检测)页面的边界密钥不包括搜索关键字,来检测正在进行的拆分,可以通过遍历包括“页面删除”delta记录的页面,来检测正在进行的删除。例如,如果任何BW树线程遇到正在进行的SMO,则在完成自身操作之前,它有助于完成SMO。该示例“促进”协议可以在多种无锁设计中用于执行,以保证进度和正确性(例如,以便串行化彼此“进入”的SMO(例如,参见LEVANDOSKI等人在Proceedings of 29th IEEEInternational Conference on Data Engineering(ICDE 2013)(2013年4月8日至11日,第302页至第313页)中的“The Bw-Tree:A B-tree for New Hardware Platforms”)。示例可替换策略可能涉及在遇到SMO时使得线程简单重试(例如,自旋形式以等待SMO)。然而,在这种情况下,等待可能是广泛的:SMO线程可能被操作系统(OS)调度出来,或者在树中“迷失方向”,并且可能需要重新定位自身以完成SMO(例如,当上至父并且发现它被拆分时)。例如,“促进”协议可以确保(例如,保证)SMO以及时的方式而完成。
无锁设计还可能涉及微妙的竞态条件,其可能涉及关于它们的推理、围绕它们进行工程设计、并且对其进行调试的潜在问题。例如当利用BW树时,在同一页上基本上同时拆分和合并可能会在父处发生冲突,并且如果不处理,则可能导致索引损坏。例如,当线程t1查看页面P正在被拆分成P'和R,并且尝试通过在父O处安装R的新索引术语来促进。同时,另一线程t2可能已经删除R,并且已经移除其在O处的条目(其可能已经通过另一线程t3安装)。在这种情况下,t1可能需要能够检测到R被删除的事实,并且避免修改O。因此,通常希望包括正确的页面删除协议,以供在BW树中使用。在构建诸如BW树之类的结构时,可能会遇到其他竞态和问题,但是该单个示例提供了在构建无锁基础架构时,可能遇到的潜在类型的问题。
在下文的讨论中,一个目标可以是缓解构建无锁数据结构的潜在问题。讨论了使用HTM的示例技术,例如以便通过构建高性能多字比较和交换来组合可能涉及一系列多原子步骤的操作,来简化无锁设计。
如本文中所讨论的,对于BW树无锁设计可能出现的示例问题是处理跨间接映射表中的任意位置上的多个原子操作的操作。如本文中所讨论的,对任意存储器位置执行原子多字比较和交换(MWCAS)的能力可以有助于简化BW树的设计和实现方式(至少)。按照本文中所讨论的示例技术,可以利用HTM,来原子地更新任意字。
使用HTM来实现MWCAS,对于多种当前的HTM实现方式可能是有利的,这是因为多种应用可能仅需要MWCAS来跨越少量字。例如,BW树最多可能需要三字MWCAS来安装页面删除,因此即使在当前严格的HTM限制下,MWCAS事务也不会由于容量约束而经历中止。进一步,MWCAS事务可能是短暂的(例如,对于每个字仅涉及加载、比较和存储),并且可以避免可能虚假地中止更长运行事务的中断(例如,参见LEIS等人2014年3月31日在Proceedings ofthe30th IEEE International Conference on Data Engineering中的“ExploitingHardware Transactional Memory in Main-Memory Databases”)。
例如,一种方法可以在BW树间接映射表上放置全局消除锁。为了实现全局锁,可以使用上文所讨论的基于RTM的方法,这是因为它可以比默认HLE有利地执行。例如,如果线程在其重试阈值后不能进行,则它可能获取全局排他锁,并且执行孤立的关键区段。下文提供了这种方法的讨论。
例如,对映射表的写入可以归类(bracket)HTM锁的获取和释放内的一个或多个比较和交换。图8图示了保护示例页面间接映射表的全局HTM锁。如图8的示例所示,在访问表之前,所有的读写操作都会消除。
图8描绘了对映射表808中的页面A 804和C 806的示例多时隙更新802以及更新810单个页面G 812的另一示例线程810。例如,在HTM锁下执行每个CAS可以确保如果冲突被检测到,则对映射表的所有改变都可以被回滚,事务可能在重试中最终成功(如果需要,则可能获取全局锁)。例如,为了避免潜在虚假中止,可以在MWCAS操作之外分配和准备所有页面数据,以避免例如由于共享访问分配器或访问随机共享高速缓存行而导致的HTM中止。例如,在执行MWCAS以将其两个改变安装到映射表之前,在BW树中安装拆分的线程可以为父分配和准备拆分delta和索引术语delta两者。
作为另一示例,索引遍历可以被归类。例如,表示从根到叶的索引遍历的事务内的多次读取可以被归类。这个示例技术可能使索引遍历与正在进行的SMO完全隔离。然而,示例技术可能会增加中止率,这是因为事务可能包括逻辑,以便访问页面存储器并且对内部索引节点执行二进制搜索。如上文所讨论的,这种粗粒度的事务的成功率可能取决于独立因素(例如,页面大小、密钥大小)。
作为另一示例,可以利用单例读取事务。例如,单个8字节映射表字的每次读取可以被放置在它自己的事务中,这可以避免由于高速缓存容量而导致的中止,因为事务可能仅包括单个读取。然而,读取器可能会遇到“正在进行的”SMO操作,例如,当读取器访问“旧”父(无需所应用的拆分)的时间和访问“新”子(使用所应用的拆分)的时间之间安装拆分时。虽然这样的示例情况可能需要检测,但是处理这样的情况的代码看起来似乎更简单来确定:例如,遍历可以从有效祖先节点重试。该示例技术可以针对读取器确保MWCAS写入是原子的,因此SMO以原子方式安装。因此,读取器可能不需要担心复杂情形,诸如帮助完成SMO、当进入冲突的多个正在进行的SMO时做些什么等等。
作为另一示例,可以利用非事务读取。例如,所有读取都可以非事务性地执行。因此,例如,读取器可以有利地避免硬件事务的建立和拆卸时间。然而,读取器不能保证他们会查看以原子方式安装的SMO,例如,当读取器从其锁的回退路径内执行的事务中观察到写入。例如,读取器可以观察写入器处于映射表写入之间的索引状态,如果在事务内部进行读取或者在保持回退锁的同时,则可能不会发生。一个可能的结果是,代码复杂度几乎没有减少,这是因为可能需要准备非事务访问来帮助完成SMO(或者自旋等待它完成)。另一潜在问题是写入器可能需要谨慎地在回退路径中命令其存储操作,这是因为非事务读取将按照它们出现的次序来查看这些存储。虽然这可能不存在已经谨慎命令SMO写入的无锁结构(例如,BW树)的问题,但是在一些一般情况下,它可能涉及一些问题。
作为另一示例,可以从HTM事务中移除单例读取和写入两者,这在本文中可以被称为示例“无限重试”技术。例如,该技术可以有利地利用单例读取或更新(其是非事务的)的示例特性,它们仍然可以针对其目标高速缓存行触发高速缓存一致性协议。例如,因为HTM事务可能卸载这个协议,所以在事务内运行的多字CAS将查看对其写入集合的改变。与上文所讨论的非事务读取技术不同,这个示例技术可以维持读取器查看MWCAS写入的原子安装的特性。
本文中所进一步讨论的是示例技术,该示例技术帮助保证事务写入的进度,以便避免由于与单例(非事务)读取和写入的持续数据冲突而导致的虚假中止以及饥饿。
图9图示了用于针对映射表902进行的MWCAS更新的示例技术(例如,在图的左侧)。如图9所示,如读取器904对于时隙F 906所描绘的以及如更新908对于时隙G 910所描绘的,单例映射表读取和更新可以不在HTM事务内操作。如示例中所示,仅多时隙更新(例如,对A914和C 916的多时隙更新912)在硬件事务内操作并且执行MWCAS 912。在该示例中,如果与单例读取或更新冲突,则MWCAS 912可以中止,从而通过高速缓存一致性协议检测到冲突。在这种情况下,MWCAS 912可以不断地重试事务。实际上,对于这个示例来说,与单例读取/更新相比较,这可以使MWCAS 912处于更低的优先级,这是因为它们可以中止MWCAS事务,但是反之亦然。
由于单例读取/更新未感知到锁,所以MWCAS 912可能不会回退到保护映射表的单个消除锁上。例如,这可以通过允许事务在它已经重试预先确定的(例如,可配置的)次数之后失败,来解决。对于BW树,这实际上可能涉及放弃SMO,其最终随后可能会被另一线程重试(此时可能会成功)。然而,如果需要进度,则MWCAS 912可以重试“无限”次数,直到事务成功为止(这也是该方法的名称的原因)。因此,MWCAS 912可能经历饥饿,然而,对于所有无锁数据结构来说,这可能是真实的。
然而,无限次地重试事务不能保证MWCAS会成功,这是因为不能保证硬件事务会成功(而例如,对于单字CAS而言,总是可能存在获胜者)。下文对示例技术进行讨论,以有助于保证这种方法的进度,同时尝试避免单个消除锁。例如,图9的右侧图示了涉及这些方法的示例。
例如,因为MWCAS事务可能实质上较短,并且可能触及相当少量的高速缓存行,所以可以避免由于实质上长时间运行的事务而导致的容量约束或中断而导致的虚假中止的可能性。然而,这些可能不是作为示例HTM实现方式进行中止的唯一原因。
例如,按照下文所讨论的示例技术,可以避免存储器页面错误。当事务遇到页面错误时,可能会中止。进一步,推测事务执行可以抑制页面错误事件,以使在没有一些外部帮助的情况下,推测性地重试事务可能总是失败。例如,HTM设计者可以指示包括页面错误的同步异常事件“被抑制,就好像它们从未发生过”(例如,参见“INTEL64and IA-32Architectures Optimization Reference Manual”,2014年9月)。例如,如果没有使用回退锁,则运行对不存在的页面运行单个访问的单个事务可能总是中止,即,操作系统可能不会收到页面错误事件。
结果,当省略回退锁时,回退代码路径可能需要(至少)预先错误化(pre-fault)事务意图访问的地址。通常,映射表可能会存在于存储器中,但是系统的正确性和进度可能不需要依赖它。图9的右侧图示了用于“安全”引起页面错误的示例技术。例如,在回退路径上,MWCAS 912可以读取其目标字(在这种情况下,即映射表时隙A 914和C 916),并且可以对这些字中的每个字执行CAS(920)以向目标字指派与刚读取的值相同的值。例如,CAS可能引起任何页面错误,同时确保将相同的值存储回存储器位置。例如,使用简单存储可能会导致在并发操作下将不正确的值存储回映射表时隙中,并且使用简单的加载可能会使页面处于共享的写时复制状态(例如,如果页面是新鲜“零页”)。在执行该回退路径之后,MWCAS 912可以重试其更新。
作为另一示例,可以利用线程本地读/写锁。例如,如果处理器设计者不能保证提交硬件事务,则即使对于短的事务也避免页面错误不能保证进度。例如,具有读/写集合重叠的两个事务可能在数据冲突上碰撞并且持续地中止。因此,例如可以利用示例“全局停顿”技术潜在地保证MWCAS,可以通过授予其独占访问权来非事务性地更新其目标字来取得进度。例如,如图9的右侧所描绘的,排他性被实现,同时可以通过向每个线程指派线程本地读/写锁来避免全局共享锁。这种在本文中可以被称为“旁路锁”(lockaside)的示例技术(例如,参见CALCIU等人2013年2月23日至27日在18th ACM SIGPLAN Symposium onPrinciples and Practice of Parallel Programming(PPoPP’13)中的“NUMA-AwareReader-Writer Locks”)维护每个线程的读/写锁(例如,可能对每个相应线程是“本地”的相应锁,即,“线程本地”读/写锁)。例如,在开始操作之前,线程可能获取对自己锁的独占访问。在MWCAS已经重试了若干次(例如,预先确定的或可配置的次数)而没有进度之后,它可以尝试通过从集合中的其他线程获取所有锁(例如,以确定性次序)来获得对映射表的独占访问,例如,这可能是锁被另一线程修改的唯一时间。一旦MWCAS获得所有这样的锁,它就可以修改其映射表条目,并且然后可以释放所有锁。
例如,旁路锁表可以被实现为高速缓存行大小的条目的阵列,其中每个条目被指派给针对索引而执行读取或更新的线程。例如,获取所有锁的确定性技术可以包括:从锁阵列中的第一(第0)索引开始,以单调递增的次序获取索引中的锁,直到获取所有锁为止。该示例的确定性次序可以避免通常所说的“死锁”。
在多种情况下,由于线程本地锁获取涉及修改已经在线程的本地套接字上的CPU高速缓存中的字,因此该示例技术可以有利地是高效的,从而避免了在套接字(或内核)上的“乒乓”。例如,用于锁获取(和释放)的可扩展性可能是关于相当大的多种内核机器(例如,INTEL的XEON PHI)的问题。对于具有HTM(当前为单套接字)的当前处理器来说,特别是在线程的数目等于内核的数目(如果使用只存储器非阻塞数据结构,则通常可以保持)的情况下,锁计数可能不成问题。
图10描绘了与示例基线无锁性能相比的两个MW-CAS全局锁和无限重试技术的示例性能。
图10图示了如上文所讨论的示例MWCAS技术以及纯无锁BW树实现方式(在图中缩写为“无HTM”)的实验评估的示例结果。对于这个实验评估,实验工作载荷包括4个更新线程和4个读取线程,其中每个线程使用Zipf分布,从10M个密钥范围内随机选择下一记录以便更新/读取。如图10所图示的,针对各种Zipf错位参数(x轴)绘制总吞吐量(y轴)。由于其性能(由于中止)可能不会紧密地接近其他可替换方案,所以省略了在事务中归类整个树遍历的示例技术的编号。使用全局消除锁来归类所有操作(包括单例读取,并且在图中缩写为“全局锁”)并不难实现。然而,由于事务设置和拆卸的附加开销(例如,本文中所讨论的实验机器上的大约65个周期),性能可能降低多达25%。从全局消除锁(在图中被缩写为“无HTM读取”)中移除读取可能产生“无HTM”的10%以内的性能。然而,如上文所提及的,这可能以不降低代码复杂度为代价而发生。示例“无限重试”技术还可以表现出与“无HTM读取”类似的性能。因此,例如大部分开销可能是由于写入本身而导致的。
如本文中所讨论的,HTM可以提供对基本“简单”的数据结构的基本容易的并行访问。例如,对于中等大小的索引、小的固定长度的密钥和有效载荷大小,HTM可以以很小努力实现有利的线程可扩展性。
然而,预测索引中的HTM性能可能更困难,并且可能基本上限制其有用性。例如,多种因素可能会影响并行性(进而影响性能),其中一些因素可能会在运行时间发生变化。例如,预测中止率可以结合预测页表查询的复杂度、由于容量和关联性(例如,索引中的密钥和有效载荷大小)而导致的高速缓存未命中、应用访问模式以及线程调度。此外,这些变量中的每个变量的参数都可能随着每个新的CPU而改变:TLB覆盖、高速缓存配置、内核技术和硬件线程配置可能会一代一代地变化。
如本文中所讨论的,将HTM用于主存储器索引的基本简单且基本上可预测的方法可以涉及小原语,其中所访问的高速缓存行的数目对于每个事务是恒定的(例如,而非数据结构大小或工作载荷错位的一些函数)。例如,如上文所讨论的,HTM可以用作多字CAS。例如,这些事务中的多种中止可能是由于数据访问冲突(例如,而非其他虚假中止)所导致,并且重试成本可能有利地足够低,以使得它可能不如自旋锁技术有利地执行,该自旋锁技术包括涉及“无限重试”的情况。
如上文所讨论的,BW树具有多种用途,并且当前在包括SQL SERVER HEKATON和AZURE DOCUMENTDB的多种MICROSOFT产品中使用。本文讨论了使用HTM来仲裁多个任意高速缓存行上的冲突的多字比较和交换(MWCAS)的几种设计。例如,因为事务可以是短小的,所以MWCAS(例如,作为HTM的应用)可以避免中止,可以提供有利的性能益处,并且可以有利地简化无锁数据结构设计。
II.示例操作环境
本文中所讨论的特征被提供作为示例实施例,在不背离本文中所讨论的精神的情况下,该示例实施例可以以计算领域的技术人员可理解的多种不同方式实现。这些特征仅被解释为示例实施例特征,而不旨在被解释为仅限于那些详细的描述。
图11图示了可以在其上实现本文中所讨论的主题的方面的合适的计算系统环境1100的示例。计算系统环境1100仅是合适的计算环境的一个示例,并不旨在对本文中所讨论的主题的方面的使用范围或功能提出任何限制。计算环境1100也不应被解释为具有与示例操作环境1100中所示的部件中的任一或其组合有关的任何依赖性或要求。
本文中所讨论的主题的方面可以与多种其他通用或专用计算系统环境或配置一起操作。可以适用于本文中所描述的主题的方面的公知计算系统、环境或配置的示例包括个人计算机、(无论是在裸机上还是作为虚拟机的)服务器计算机、手持式或膝上型设备、多处理器系统、基于微控制器的系统、机顶盒、可编程和不可编程的消费电子产品、网络PC、小型计算机、大型计算机、个人数字助理(PDA)、游戏设备、打印机、器具(包括机顶盒、媒体中心或其他器具)、汽车嵌入的或附接的计算设备、其他移动设备、电话设备(包括蜂窝电话、无线电话和有线电话)、包括任何上述系统或设备的分布式计算环境等。尽管各种实施例可以限于上述设备中的一个或多个设备,但是除非另外指出否则术语计算机旨在包括上述设备。
本文中所描述的主题的方面可以在可由计算机执行的诸如程序模块之类的计算机可执行指令的一般上下文中描述。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、部件、数据结构等等。本文中所描述的主题的方面还可以在分布式计算环境中实践,其中任务由通过通信网络链接的远程处理设备执行。在分布式计算环境中,程序模块可以位于包括存储器存储设备的本地计算机存储介质和远程计算机存储介质两者中。
可替代地或附加地,本文中所描述的功能可以至少部分地由一个或多个硬件逻辑部件执行。例如但不限于,可以使用的、硬件逻辑部件的说明性类型包括现场可编程门阵列(FPGA)、程序专用集成电路(ASIC)、程序专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑器件(CPLD)等。
现在参考图11,用于实现本文中所讨论的主题的方面的示例系统包括计算机1110形式的通用计算设备。计算机可以包括能够执行指令的任何电子设备。计算机1110的部件可以包括处理单元1120、系统存储器1130以及将包括系统存储器的各种系统部件耦合到处理单元1120的一个或多个系统总线(由系统总线1121表示)。系统总线1121可以是包括存储器总线或存储器控制器、外围总线以及使用多种总线体系架构中的任一种总线体系架构的本地总线的若干类型总线结构中的任一种。作为示例而非限制,这样的体系架构包括工业标准体系架构(ISA)总线、微通道架构(MCA)总线、增强ISA(EISA)总线、视频电子标准协会(VESA)本地总线、还被称为Mezzanine总线的外围部件互连(PCI)总线、外围部件互连扩展(PCI-X)总线、高级图形端口(AGP)和PCI总线(PCIe)。
处理单元1120可以连接到硬件安全设备1122。安全设备1122可以存储并且能够生成可以用来保护计算机1110的各种不同方面的密码密钥。在一个实施例中,安全设备1122可以包括可信平台模块(TPM)芯片、TPM安全设备等。
计算机1110通常包括多种计算机可读介质。计算机可读介质可以是能够由计算机1110访问的任何可用介质,并且包括易失性和非易失性介质两者以及可移除和不可移除介质。作为示例而非限制,计算机可读介质可以包括计算机存储介质和通信介质。
计算机存储介质(或“计算机可读存储介质”)包括以任何方法或技术实现的易失性和非易失性、可移除和不可移除介质,以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据。计算机存储介质包括RAM、ROM、EEPROM、固态存储装置、闪存或其他存储技术、CD-ROM、数字多功能光盘(DVD)、蓝光光盘(BD)或其他光盘存储器(例如,通用串行总线(USB)驱动器、硬盘驱动器)、磁带盒、磁带、磁盘存储器或其他磁性存储设备、或可被用于存储所需信息并且可以被计算机1110访问的任何其他介质。“计算机存储介质”不包括“通信介质”。因此,如本文中所使用的,术语“计算机可读存储介质”本身不是信号,也不是任何类型的传播信号本身。
“通信介质”通常包括计算机可读指令、数据结构、程序模块或在诸如载波或其他传送机制之类的调制的数据信号中的其他数据,并且“通信介质”包括任何信息递送介质。术语“经调制的数据信号”是指使得信号中一个或多个特征以这样的方式被设置或改变以便在该信号中对信息进行编码的信号。作为示例而非限制,通信介质包括诸如有线网络或直接有线连接之类的有线介质、以及诸如声学、RF、红外线和其他无线介质之类的无线介质。上述任何各项的组合也应被包括在计算机可读介质的范围内。
系统存储器1130可以包括诸如只读存储器(ROM)1131和随机访问存储器(RAM)1132之类的易失性和/或非易失性存储器形式的计算机存储介质。非易失性存储器可以代替部分或全部ROM 1131和/或RAM 1132。例如,代替ROM 1131和/或RAM 1132或除了ROM1131和/或RAM 1132之外,HIA可以使用忆阻器存储器、相变存储器(PCM)或一些其他类型的非易失性存储器。如图11所示,针对存储器使用,还可以存在硬件事务存储器(HTM)1138。
包含诸如在启动期间有助于在计算机1110内元件之间传送信息的基本例程的基本输入/输出系统1133(BIOS),通常被存储在ROM1131中。RAM1132通常包含可由处理单元1120立即访问和/或当前正在处理单元1120上操作的数据和/或程序模块。作为示例而非限制,图11图示了操作系统1134、应用程序1135、其他程序模块1136和程序数据1137。
计算机1110还可以包括其他可移除/不可移除计算机存储介质、易失性/非易失性计算机存储介质。仅作为示例,图11图示了从不可移除的非易失性磁介质读取或向其写入的硬盘驱动器1141、从可移除的非易失性磁盘1152读取或向其写入的磁盘驱动器1151、以及从不可移除的非易失性光盘1156(诸如CD ROM、DVD、BD或其他光学介质)读取或向其写入的光盘驱动器1155。
在一个实现方式中,代替硬盘驱动器1141或者除了硬盘驱动器1141之外,可以使用忆阻器存储器、相变存储器或一些其他类型的非易失性存储器。
可以在示例性操作环境中使用的其他可移除/不可移除计算机存储介质、易失性/非易失性计算机存储介质(或“计算机可读存储介质”)包括盒式磁带、闪存卡和其他固态存储设备、数字多用途盘、其他光盘、数字录像带、固态RAM、固态ROM等。硬盘驱动器1141可以通过接口140连接到系统总线1121,并且磁盘驱动器1151和光盘驱动器1155可以通过用于诸如接口1150之类的可移除非易失性存储器的接口连接到系统总线1121。
上文所讨论的并且在图11中图示的驱动器及其相关联的计算机存储介质向计算机1110提供计算机可读指令、数据结构、程序模块和其他数据的存储。在图11中,例如,硬盘驱动器1141被图示为存储操作系统1144、应用程序1145、其他程序模块1146和程序数据1147。注意,这些部件可以与操作系统1134、应用程序1135、其他程序模块1136和程序数据1137相同或不同。操作系统1144、应用程序1145、其他程序模块1146和程序数据1147在本文中被给予不同的数字,以说明它们可以是不同副本。
用户可以通过诸如键盘1162和指向设备1161(通常被称为鼠标、轨迹球或触摸板)之类的输入设备,将命令和信息录入到计算机1110中。其他输入设备(未示出)可以包括麦克风(例如,用于输入话音或其他音频)、操纵杆、游戏手柄、圆盘性卫星天线、扫描仪、触敏屏幕、书写板、相机(例如,其用于输入手势或其他视觉输入)等。这些以及其他输入设备通常通过耦合到系统总线的用户输入接口1160,连接到处理单元1120,但是也可以通过其他接口和总线结构(诸如并发端口、游戏端口或通用串行总线(USB))连接。
通过使用上文所提及的输入设备中的一个或多个输入设备,可以建立自然用户接口(NUI)。NUI可以依赖语音识别、触摸和触控笔识别、屏幕上和靠近屏幕的手势识别、空中手势、头和眼睛跟踪、话音和语音、视觉、触摸、手势、机器智能等。可以用于与用户交互的一些示例性NUI技术包括触敏显示器、话音和语音识别、意图和目标理解、使用深度相机(诸如立体相机系统、红外相机系统、RGB相机系统及其组合)的运动手势检测、使用加速度计/陀螺仪的运动手势检测、面部识别、3D显示、头部、眼睛和注视跟踪、沉浸式增强现实和虚拟现实系统、以及使用电场感应电极(EEG和相关方法)来感测大脑活动的技术。
监视器1191或其他类型的显示设备还经由诸如视频接口1190之类的接口,连接到系统总线1121。除了监视器之外,计算机还可以包括其他外围输出设备(诸如扬声器1197和打印机1196),该其他外围输出设备可以通过输出外围接口1195而被连接。
计算机1110可以使用到一个或多个远程计算机(诸如远程计算机1180)的逻辑,连接在联网环境中操作。远程计算机1180可以是个人计算机、服务器、路由器、网络PC、对等设备或其他公共网络节点,并且尽管在图11中仅图示了存储器存储设备1181,但是远程计算机1180通常还包括上文关于计算机1110所描述的多种或全部元件。图11中描绘的逻辑连接包括局域网(LAN)1171和广域网(WAN)1173,并且还可以包括电话网络、近场网络和其他网络。这样的网络环境在办公室、企业范围的计算机网络、内联网和因特网中是常见的。
当在LAN联网环境中使用时,计算机110通过网络接口或适配器1170,连接到LAN1171。当在WAN联网环境中使用时,计算机1110可以包括调制解调器1172或用于通过诸如因特网之类的WAN1173建立通信的其他手段。可以在内部或外部的调制解调器1172可以经由用户输入接口1160或其他适当的机构,连接到系统总线1121。在联网环境中,相对于计算机1110而描绘的程序模块或其部分可以被存储在远程存储器存储设备中。作为示例而非限制,图11将远程应用程序185图示为驻留在存储器设备181上。应当领会,所示的网络连接是示例性的,并且可以使用在计算机之间建立通信链路的其他手段。
在该上下文中,“处理器”可以包括被配置成处理与计算系统相关联的指令的单个处理器或多个处理器。因此,处理器可以包括以并发和/或以分布式方式执行指令的一个或多个处理器。例如,图11所示的系统可以包括一个或多个处理器(例如,硬件处理器)。
例如,系统可以包括至少一个硬件设备处理器和存储用于由设备处理器执行的可执行指令的计算机可读存储介质,以用于实现表格状态控制模块,该表格状态控制模块被构造成通过使用驻留在设备处理器中的硬件事务存储器(HTM)发起对多个字的原子多字比较和交换(MWCAS)操作,以无锁存的方式控制映射表中的一个或多个条目的当前状态到映射表中的条目的经更新的状态的转换。MWCAS操作使用HTM的硬件原语操作,并且映射表条目与数据库的无锁索引相关联。
例如,表格状态控制模块可以包括上文关于图11讨论的模块中的一个或多个。
例如,表格状态控制模块可以被构造成通过将对映射表的访问归类在硬件事务中,控制转换。例如,控制转换可以包括:将整个索引遍历归类在硬件事务中。例如,控制转换可以包括:仅将单例读取操作归类在硬件事务中。
例如,控制转换可以包括:非事务性地执行读取操作。
例如,表格状态控制模块可以被构造成通过仅将对映射表的多时隙更新归类在硬件事务中,控制转换。
例如,表格状态控制模块可以被构造成通过将对映射表的访问归类在硬件事务中,控制转换,并且通过执行回退代码路径,避免存储器页面错误。
例如,表格状态控制模块可以被构造成通过执行预先错误化将由硬件事务中的一个或多个硬件事务执行的地址的回退代码路径,避免存储器页面错误。
例如,预先错误化由硬件事务中的一个或多个硬件事务执行的地址可以包括:执行原子MWCAS以读取相应目标字的值,并且对相应的每个读取字执行比较和交换(CAS)操作,该比较和交换(CAS)操作将每个相应读取字的读取的值指派给每个相应的目标字位置。
例如,表格状态控制模块可以被构造成重试执行预先错误化将由硬件事务中的一个或多个硬件事务执行的地址的回退代码路径。例如,执行回退代码路径的重试可以针对可配置数目的重试而被执行。
例如,表格状态控制模块可以被构造成通过将对映射表的访问归类在硬件事务中来控制转换并且将经由旁路锁操作对目标字进行独占访问提供给原子MWCAS。
例如,表格状态控制模块可以被构造成维护多个并发执行的线程中的每个线程的相应的线程本地读/写锁,并且在由线程中的一个线程开始操作之前,获取线程中的一个线程的对用于线程中的一个线程的相应线程本地读/写锁的独占访问,其中旁路锁操作包括:通过从多个并发执行的线程中的其他线程,获取所有相应的线程本地读/写锁,获得对映射表的独占访问。
例如,获得对映射表的独占访问可以包括:以确定性次序从多个并发执行的线程中的其他线程,获取所有相应的线程本地读/写锁。
例如,表格状态控制模块可以被构造成通过线程中的一个线程来修改目标映射表条目,并且在修改目标映射表条目之后,释放来自其他线程的所有相应的线程本地读/写锁。
例如,表格状态控制模块可以被构造成控制映射表中的一个或多个条目的第一状态到映射表中与无锁存更新相关联的条目的第二状态的转换,该无锁存更新与使用包括映射表的间接映射表的数据结构相关联,该控制包括:使用驻留在设备处理器中的硬件事务存储器(HTM)发起对多个字的原子多字比较和交换(MWCAS)操作,该MWCAS操作经由设备处理器使用HTM的硬件原语操作而被执行。
例如,控制转换可以包括:通过将对映射表的访问归类在硬件事务中以及通过将经由旁路锁操作对目标字的独占访问提供给原子MWCAS,控制不能保证成功的硬件事务的进度。
例如,表格状态控制模块可以被构造成访问映射表中一个或多个条目的当前状态,该一个或多个条目与使用用于锁自由的间接映射表的数据结构的无锁存更新相关联,控制映射表中的一个或多个条目的当前状态到映射表中的条目的经转换的状态的转换,该控制包括:使用驻留在设备处理器中的硬件事务存储器(HTM)发起对多个字的原子多字比较和交换(MWCAS)操作,该MWCAS操作经由设备处理器使用HTM的硬件原语操作而被执行,并且经由映射表中的一个或多个条目的当前状态到映射表中的条目的经转换的状态的转换,控制数据结构的当前状态到该数据结构的经更新的状态的转换。
例如,控制映射表中的一个或多个条目的当前状态的转换可以包括:将对映射表的访问归类在硬件事务中。
例如,对映射表的访问归类在硬件事务中可以包括:对整个索引遍历的访问归类在硬件事务中。
计算领域的技术人员将领会,多种不同的技术可以被用于实现本文中所讨论的特征。
III.流程图描述
本文中所讨论的特征被提供作为示例实施例,在不背离本文中所讨论的精神的情况下,该示例实施例可以计算领域的技术人员可以理解的多种不同方式来实现。这些特征仅被解释为示例实施例特征,而不旨在被解释为仅限于那些详细的描述。
图12是根据示例实施例的、图示了图11的系统的示例操作的流程图。如图12的示例所示,通过使用驻留在设备处理器中的硬件事务存储器(HTM)发起对多个字的原子多字比较和交换(MWCAS)操作发,以无锁存的方式控制映射表中的一个或多个条目的当前状态到映射表中的条目的经更新的状态的转换,MWCAS操作使用HTM的硬件原语操作,一个或多个映射表条目与数据库的无锁索引(1202)相关联。
例如,可以通过将对映射表的访问归类在硬件事务中,控制转换。
例如,控制转换包括:将整个索引遍历归类在硬件事务中。
例如,控制转换包括:仅将单例读取操作归类在硬件事务中。
例如,控制转换包括:非事务性地执行读取操作。
例如,可以通过仅将对映射表的访问归类在硬件事务中,控制转换。
例如,可以通过将对映射表的访问归类在硬件事务中,控制转换。存储器页面错误可以通过执行回退代码路径来避免。
例如,可以通过执行预先错误化将由一个或多个硬件事务执行地址的回退代码路径,避免存储器页面错误。
例如,预先错误化将由硬件事务中的一个或多个硬件事务执行的地址可以包括:执行原子MWCAS以读取相应目标字的值,并且对相应的每个读取字执行比较和交换(CAS)操作,该比较和交换(CAS)操作将每个相应读取字的读取的值指派给每个相应的目标字位置。
例如,可以重试执行预先错误化将由一个或多个硬件事务执行的地址的回退代码路径。
例如,执行回退代码路径的重试针对可配置数目的重试而执行。
例如,可以通过将对映射表的访问归类在硬件事务中,控制转换。例如,原子MWCAS可以被提供有经由旁路锁操作对目标字的独占访问。
例如,维护针对多个并发执行的线程中的每个线程的相应线程本地读/写锁,并且在由线程中的一个线程开始操作之前,可以获取线程中的一个线程对用于线程中的一个线程的相应的线程本地读/写锁的独占访问,其中旁路锁操作包括:通过从多个并发执行的线程中的其他线程获取所有相应的线程本地读/写锁,获得对映射表的独占访问。
例如,获得对映射表的独占访问可以包括:以确定性次序从多个并发执行的线程中的其他线程,获取所有相应的线程本地读/写锁。
例如,可以由线程中的一个线程修改目标映射表条目并且可以在修改目标映射表条目之后,释放来自其他线程的所有相应的线程本地读/写锁。
图13是根据示例实施例的、图示了图13的系统的示例操作的流程图。如图13的示例所示,访问映射表中一个或多个条目的当前状态(1302),该一个或多个条目与使用用于锁自由的间接映射表的数据结构的无锁存更新关联。
控制映射表中的一个或多个条目的当前状态到映射表中的条目的经转换的状态的转换,该控制包括:使用驻留在设备处理器中的硬件事务存储器(HTM)发起对多个字的原子多字比较和交换(MWCAS)操作,该MWCAS操作经由设备处理器使用HTM的硬件原语操作而被执行(1304)。
经由映射表中的一个或多个条目的当前状态到映射表中的条目的经转换的状态的转换,控制数据结构的当前状态到数据结构的经更新的状态的转换(1306)。
例如,控制映射表中的一个或多个条目的当前状态的转换包括:将对映射表的访问归类在硬件事务中。
例如,将对映射表的访问归类在硬件事务中包括:将对整个索引遍历的访问归类在硬件事务中。
图14是根据示例实施例的、图示了图11的系统的示例操作的流程图。如图14的示例所示,控制映射表中的一个或多个条目的第一状态到映射表中与无锁存更新相关联的条目的第二状态的转换,该无锁存更新与使用包括映射表的间接映射表的数据结构相关联,该控制包括:使用驻留在设备处理器中的硬件事务存储器(HTM)发起对多个字的原子多字比较和交换(MWCAS)操作,该MWCAS操作经由设备处理器使用HTM的硬件原语操作而被执行(1402)。
例如,控制转换可以包括:通过将对映射表的访问归类在硬件事务中以及通过将经由旁路锁操作对目标字的独占访问提供给原子MWCAS,控制不能保证成功的硬件事务的进度。
计算领域的技术人员将领会,多种其他类型的技术可以被用于实现高性能事务处理。
本文中所讨论的特征被提供作为示例实施例,在不背离本文中所讨论精神的情况下,该示例实施例可以以计算领域的技术人员可以理解的多种不同方式实现。这些特征仅被解释为示例实施例特征,而不旨在被解释为仅限于那些详细的描述。
在该上下文中,“处理器”可以包括被配置成处理与计算系统相关联的指令的单个处理器或多个处理器。因此,处理器可以包括以并行方式和/或以分布式方式,执行指令的一个或多个处理器。
例如,系统1100可以包括一个或多个处理器。例如,系统1100可以包括存储可由一个或多个处理器执行的指令的至少一个有形计算机可读存储介质,该可执行指令被配置成使得至少一个处理器执行本文中所讨论的、与系统1100中包括的各种示例部件相关联的操作。例如,一个或多个处理器可以被包括在至少一个处理装置中。计算领域的技术人员将理解,在不背离这种讨论的精神的情况下,存在可以按照本文中的讨论,配置的处理器和处理装置的多种配置。
在该上下文中,“部件”或“模块”可以指可以被配置成执行某些操作的指令或硬件。这样的指令可以被包括在指令的部件组内,或者其可以分布在多于一个组上。例如,与第一部件的操作相关联的一些指令可以被包括在与第二部件(或多个部件)的操作相关联的指令组中。例如,本文中的“部件”可以指可以由指令来实现的功能的类型,该指令可以位于单个实体中,或者其可以被分散或分布在多个实体上,并且可以和与其他部件相关联的指令和/或硬件相重叠。
在该上下文中,“存储器”可以包括被配置成存储数据和/或指令的单个存储器设备或多个存储器设备。进一步,存储器可以跨多个分布式存储设备。进一步,存储器可以分布在多个处理器中。
IV.某些实施例的方面
本文中所讨论的特征被提供作为示例实施例,该示例实施例不背离本文中所讨论的精神的情况下,该示例实施例可以以计算领域的技术人员可以理解的多种不同方式来实现。这些特征仅被解释为示例实施例特征,而不旨在被解释为仅限于那些详细的描述。
如本文中所讨论的,示例系统包括至少一个硬件设备处理器和存储可执行指令的计算机可读存储介质,该可执行指令当被执行时,使得至少一个硬件设备处理器中的一个或多个硬件设备处理器:通过使用驻留在设备处理器中的硬件事务存储器(HTM)发起对多个字的原子多字比较和交换(MWCAS)操作,以无锁存的方式控制映射表中的一个或多个条目的当前状态到映射表中的条目的经更新的状态的转换,该MWCAS操作使用HTM的硬件原语操作,该一个或多个映射表条目与数据库的无锁索引相关联。
例如,当可执行指令被执行时,使得至少一个硬件设备处理器中的一个或多个硬件设备处理器:通过将对映射表的访问归类在硬件事务中,控制转换。
例如,控制转换包括:将整个索引遍历归类在硬件事务中。
例如,控制转换包括:仅将单例读取操作归类在硬件事务中。
例如,控制转换包括:非事务性地执行读取操作。
例如,当可执行指令被执行时,使得至少一个硬件设备处理器中的一个或多个硬件设备处理器:通过仅将对映射表的多时隙更新归类在硬件事务中,控制转换。
例如,当可执行指令被执行时,使得至少一个硬件设备处理器中的一个或多个硬件设备处理器:通过将对映射表的访问归类在硬件事务中,控制转换,并且通过执行回退代码路径,避免存储器页面错误。
例如,当可执行指令被执行时,使得至少一个硬件设备处理器中的一个或多个硬件设备处理器:通过执行预先错误化将由硬件事务中的一个或多个硬件事务执行的地址的回退代码路径,避免存储器页面错误。
例如,预先错误化将由硬件事务中的一个或多个硬件事务执行的地址可以包括:执行原子MWCAS以读取相应目标字的值,并且对相应的每个读取字执行比较和交换(CAS)操作,该比较和交换(CAS)操作将每个相应读取字的读取的值指派给每个相应的目标字位置。
例如,当可执行指令被执行时,使得至少一个硬件设备处理器中的一个或多个硬件设备处理器:重试执行预先错误化将由硬件事务中的一个或多个硬件事务执行的地址的回退代码路径。
例如,执行回退代码路径的重试是针对可配置数目的重试而被执行。
例如,当可执行指令被执行时,使得至少一个硬件设备处理器中的一个或多个硬件设备处理器:通过将对映射表的访问归类在硬件事务中,控制转换,并且将经由旁路锁操作对目标字的独占访问提供给原子MWCAS。
例如,当可执行指令被执行时,使得至少一个硬件设备处理器中的一个或多个硬件设备处理器:维护多个并发执行的线程中的每个线程的相应的线程本地读/写锁,并且在通过线程中的一个线程开始操作之前,获得线程中的一个线程对用于该线程中的该一个线程的相应线程本地读/写锁的独占访问。
该旁路锁操作包括:通过从多个并发执行的线程中的其他线程,获取所有相应的线程本地读/写锁,获得对映射表的独占访问。
例如,获得对映射表的独占访问包括:以确定性次序从多个并发执行的线程中的其他线程,获取所有相应的线程本地读/写锁。
例如,当可执行指令被执行时,使得至少一个硬件设备处理器中的一个或多个硬件设备处理器:通过线程中的一个线程修改目标映射表条目,并且在修改目标映射表条目之后,释放来自其他线程的所有相应的线程本地读/写锁。
一种方法包括:控制映射表中的一个或多个条目的第一状态到该映射表中与无锁存更新相关联的条目的第二状态的转换,该无锁存更新与使用包括映射表的间接映射表的数据结构相关联,该控制包括:使用驻留在设备处理器中的硬件事务存储器(HTM)发起对多个字的原子多字比较和交换(MWCAS)操作,该MWCAS操作经由设备处理器使用HTM的硬件原语操作而被执行。
例如,控制转换包括:通过将对映射表的访问归类在硬件事务中以及通过将经由旁路锁操作对目标字的独占访问提供给原子MWCAS,控制不能保证成功的硬件事务的进度。
一种计算机程序产品,其包括存储可执行指令的计算机可读存储介质,该可执行指令当由至少一个处理器执行时,使得至少一个计算设备:访问映射表中一个或多个条目的当前状态,该一个或多个条目与使用用于锁自由的间接映射表的数据结构的无锁存更新相关联,控制映射表中的一个或多个条目的当前状态到映射表中的条目的经转换的状态的转换,该控制包括:使用驻留在设备处理器中的硬件事务存储器(HTM)发起对多个字的原子多字比较和交换(MWCAS)操作,该MWCAS操作经由设备处理器使用HTM的硬件原语操作而被执行,并且经由映射表中的一个或多个条目的当前状态到该映射表中的条目的经转换的状态的转换,控制数据结构的当前状态到数据结构的经更新的状态的转换。
例如,控制映射表中的一个或多个条目的当前状态的转换包括:将对映射表的访问归类在硬件事务中。
例如,将对映射表的访问归类在硬件事务中包括:将对整个索引遍历的访问归类在硬件事务中。
计算领域的技术人员将理解,可能存在很多完成本文中所讨论的特征的方式。
客户的隐私和机密多年来一直在计算环境中被考虑。因此,用于更新数据库的示例技术可以使用由用户提供的用户输入和/或数据,该用户已经经由具有与这样的技术相关联的相关联的应用或服务的一个或多个订阅协议(例如,“服务条款”(TOS)协议)而被提供有许可。例如,虽然用户可以明确地指示(例如,经由用户接受协议的)每一方可以控制传输和/或存储如何发生,并且可以维护存储的什么级别或持续时间(如果有的话),但是用户可以同意让他们的输入/数据在设备上被传送并且被存储。进一步,被用于标识用户使用的设备的标识符可以例如通过散列化实际用户信息而被混淆。应当理解,任何用户输入/数据都根据任何相关辖区的隐私法律和规定而获得。
本文中所描述的各种技术的实现方式可以以数字电子电路或计算机硬件、固件、软件或其组合(例如,被配置程执行指令以执行各种功能的装置)而实现。
实现方式可以被实现为以信号实现的计算机程序(例如,诸如纯传播信号的纯信号)。这样的实现方式在本文中被称为经由“计算机可读传输介质”实现,其在本文中不具有如下文所讨论的“计算机可读存储介质”或“计算机可读存储设备”的资格。
可替代地,可以经由机器可用存储设备或机器可读存储设备(例如诸如通用串行总线(USB)存储设备、磁带、硬盘驱动器、数字化视频光盘(CD)等之类的磁性或数字介质)来实现上述实现方式,该机器可用或机器可读存储设备存储用于由计算设备(例如,数据处理装置)执行或控制其操作的可执行指令(例如,计算机程序),该计算设备例如是可编程处理器、专用处理器或设备、计算机或多台计算机。这样的实现方式在本文中可以被称为经由“计算机可读存储介质”或“计算机可读存储设备”来实现,并且因此不同于诸如纯传播信号的纯信号实现方式(并且因此在本文中不具有上文所讨论的“计算机可读传输介质”的资格)。因此,如本文中所使用的,对“计算机可读存储介质”或“计算机可读存储设备”的引用明确地排除信号(例如,传播的信号)本身。
诸如上文所描述的计算机程序的计算机程序,可以以包括编译、解释或机器语言的任何形式的编程语言来编写,并且可以以包括作为独立程序或作为模块、部件、子例程或适用于计算环境的其他单元的任何形式来部署。计算机程序可以被有形地实现为机器可用存储设备或机器可读存储设备(例如,计算机可读介质)上的可执行代码(例如,可执行指令)。可以实现上文所讨论的技术的计算机程序可以被部署成在一个计算机上执行,或者在一个站点处的多个计算机上执行,或者分布在多个站点上并且通过通信网络互连。
方法步骤可以由执行计算机程序的一个或多个可编程处理器执行,以通过对输入数据进行操作并且生成输出以便执行功能。一个或多个可编程处理器可以并发地执行指令,和/或可以以用于分布式处理的分布式配置来布置。本文中所讨论的示例功能还可以由一个或多个硬件逻辑部件执行,并且装置可以至少部分地被实现为一个或多个硬件逻辑部件。作为示例但不限于,可使用的硬件逻辑部件的说明性类型可以包括现场可编程门阵列(FPGA)、程序专用集成电路(ASIC)、程序专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑器件(CPLD)等。
作为示例,适合于执行计算机程序的处理器包括通用和专用微处理器以及任何类型的数字计算机的任何一个或多个处理器。通常,处理器将从只读存储器或随机访问存储器或两者,接收指令和数据。计算机的元件可以包括用于执行指令的至少一个处理器以及用于存储指令和数据的一个或多个存储器设备。通常,计算机还可以包括用于存储数据的一个或多个大容量存储设备,该大容量存储设例如是磁盘、磁光盘或光盘,或者计算机可操作地耦合来从一个或多个大容量存储设备接收数据或向其传送数据或者两者兼而有之。适合于实现计算机程序指令和数据的信息载体,包括所有形式的非易失性存储器,其包括作为示例的半导体存储器设备,该半导体存储器设备例如EPROM、EEPROM和闪存设备、磁盘(例如,内部硬盘或可移除磁盘)、磁光盘、以及CD ROM和DVD-ROM盘。处理器和存储器可以由专用逻辑电路补充或者并入到专用逻辑电路。
为了提供与用户的交互,可以在具有用于向用户显示信息的显示设备(例如,阴极射线管(CRT)、液晶显示器(LCD)或等离子体监视器)以及用户可以通过其向计算机提供输入的键盘和指向设备(例如,鼠标或轨迹球)的计算机上,实现该实现方式。其他类型的设备也可以用于提供与用户的交互,例如,提供给用户的反馈可以是任何形式的感官反馈(例如视觉反馈、听觉反馈或触觉反馈)。例如,可以经由任何形式的感官输出,提供输出,该感官输出包括(但不限于)视觉输出(例如,视觉手势、视频输出)、音频输出(例如,话音、设备声音)、触觉输出(例如,触摸、设备移动)、温度、气味等。
进一步,可以以任何形式接收来自用户的输入,该输入包括声学、语音或触觉输入。例如,可以经由任何形式的感官输入从用户接收输入,该感官输入包括(但不限于)视觉输入(例如,手势、视频输入)、音频输入(例如,话音、设备声音)、触觉输入(例如,触摸、设备移动)、温度、气味等。
进一步,自然用户接口(NUI)可以被用于与用户进行交互。在该上下文中,“NUI”可以指使得用户能够以不受输入设备(诸如鼠标、键盘、遥控器等)施加的人为约束的“自然”方式,与设备交互的任何接口技术。
NUI技术的示例可以包括依赖语音识别、触摸和触控笔识别、屏幕上和与屏幕相邻的手势识别、空中手势、头部和眼睛跟踪、话音和语音、视觉、触摸、手势、和机器智能的那些技术。示例NUI技术可以包括但不限于,触敏显示器、话音和语音识别、意图和目标理解、使用深度相机(例如,立体相机系统、红外相机系统,RGB(红、绿、蓝))相机系统及其组合)的运动姿势检测、使用加速度计/陀螺仪的运动姿势检测、面部识别、3D显示、头部、眼睛和注视跟踪、沉浸式增强现实和虚拟现实系统(上述所有这些都可以提供更自然的接口)以及用于使用电场感测电极(例如,脑电图(EEG)和相关技术)来感测大脑活动的技术。
可以在包括后端部件(例如,作为数据服务器)或者包括中间件部件(例如,应用服务器)或者包括前端部件(例如,具有用户可以与实现方式交互的图形用户接口或Web浏览器的客户端计算机)或者这样的后端部件、中间件部件或前端部件的任意组合的计算系统中,实现该实现方式。部件可以通过数字数据通信的任何形式或介质(例如,通信网络)互连。通信网络的示例包括局域网(LAN)和广域网(WAN),该通信网络例如是因特网。
尽管已经以特定于结构特征和/或方法行为的语言描述了主题,但是应当理解,所附权利要求中限定的主题不一定限于上文所描述的特定特征或动作。相反,上文所描述的具体特征和动作被公开为实现权利要求的示例形式。虽然如本文中所描述的,所描述的实现方式的某些特征已经进行了说明,但是对于本领域技术人员而言,多种修改、替换、改变和等同物将会出现。因此,应该理解,所附权利要求旨在包括落入实施例范围内的所有这样的修改和变化。

Claims (15)

1.一种系统,其包括:
至少一个硬件设备处理器;以及
计算机可读存储介质,其存储可执行指令,所述可执行指令当被执行时,使得所述至少一个硬件设备处理器中的一个或多个硬件设备处理器:
通过使用驻留在所述设备处理器中的硬件事务存储器(HTM)发起对多个字的原子多字比较和交换(MWCAS)操作,以无锁存的方式控制映射表中的一个或多个条目的当前状态到所述映射表中的所述条目的经更新的状态的转换,所述MWCAS操作使用所述HTM的硬件原语操作,所述一个或多个映射表条目与数据库的无锁索引相关联。
2.根据权利要求1所述的系统,其中所述可执行指令当被执行时,使得所述至少一个硬件设备处理器中的所述一个或多个硬件设备处理器:
通过将对所述映射表的访问归类在硬件事务中来控制所述转换。
3.根据权利要求1所述的系统,其中所述可执行指令当被执行时,使得所述至少一个硬件设备处理器中的所述一个或多个硬件设备处理器:
通过仅将对所述映射表的多时隙更新归类在硬件事务中来控制所述转换。
4.根据权利要求1所述的系统,其中所述可执行指令当被执行时,使得所述至少一个硬件设备处理器中的所述一个或多个硬件设备处理器:
通过将对所述映射表的访问归类在硬件事务中来控制所述转换;以及
通过执行回退代码路径来避免存储器页面错误。
5.根据权利要求4所述的系统,其中所述可执行指令当被执行时,使得所述至少一个硬件设备处理器中的所述一个或多个硬件设备处理器:
通过执行回退代码路径来避免所述存储器页面错误,所述回退代码路径预先错误化将由所述硬件事务的一个或多个硬件事务执行的地址。
6.根据权利要求5所述的系统,其中
预先错误化将由所述硬件事务中的所述一个或多个硬件事务执行的所述地址包括执行原子MWCAS以读取相应目标字的值,并且对每个相应读取字执行比较和交换(CAS)操作,所述字执行比较和交换(CAS)操作将所述每个相应读取字的读取的所述值指派给每个相应目标字位置。
7.根据权利要求5所述的系统,其中所述可执行指令当被执行时,使得所述至少一个硬件设备处理器中的所述一个或多个硬件设备处理器:
重试执行预先错误化将由所述硬件事务中的一个或多个执行的地址的所述回退代码路径。
8.根据权利要求1所述的系统,其中所述可执行指令当被执行时,使得所述至少一个硬件设备处理器中的所述一个或多个硬件设备处理器:
通过将对所述映射表的访问归类在硬件事务中来控制所述转换;以及
将经由旁路锁操作对目标字的独占访问提供给原子MWCAS。
9.根据权利要求8所述的系统,其中所述可执行指令当被执行时,使得所述至少一个硬件设备处理器中的所述一个或多个硬件设备处理器:
维护用于多个并发执行的线程中的每个线程的相应的线程本地读/写锁;以及
在由所述线程中的一个线程开始操作前,获取所述线程中的所述一个线程对用于所述线程中的所述一个线程的所述相应线程本地读/写锁的独占访问,
其中所述旁路锁操作包括:通过从所述多个并发执行的线程中的其他线程获取所有相应的线程本地读/写锁,获得对所述映射表的独占访问。
10.根据权利要求9所述的系统,其中
获得对所述映射表的所述独占访问包括:以确定性次序从所述多个并发执行的线程中的其他线程,获取所有相应的线程本地读/写锁。
11.根据权利要求10所述的系统,其中所述可执行指令当被执行时,使得所述至少一个硬件设备处理器中的所述一个或多个硬件设备处理器:
通过所述线程中的所述一个线程修改目标映射表条目,并且在所述目标映射表条目的所述修改之后,释放来自所述其他线程的所有相应的线程本地读/写锁。
12.一种方法,其包括:
控制映射表中一个或多个条目的第一状态到所述映射表中的所述条目的第二状态的转换,所述一个或多个条目与无锁存更新相关联,所述无锁存更新与使用间接映射表的数据结构相关联,所述间接映射表包括所述映射表,所述控制包括:使用驻留在设备处理器中的硬件事务存储器(HTM)发起对多个字的原子多字比较和交换(MWCAS)操作,所述MWCAS操作经由所述设备处理器使用硬件原语操作HTM而被执行。
13.一种计算机程序产品,其包括存储可执行指令的计算机可读存储介质,所述可执行指令当被至少一个处理器执行时,使得至少一个计算设备:
访问映射表中与数据结构的无锁存更新相关联的一个或多个条目的当前状态,所述数据结构使用用于锁自由度的间接映射表。
控制所述映射表中的所述一个或多个条目的所述当前状态到所述映射表中的所述条目的经转换的状态的转换,所述控制包括:使用驻留在设备处理器中的硬件事务存储器(HTM)发起对多个字的原子多字比较和交换(MWCAS)操作,所述MWCAS操作经由所述设备处理器使用所述HTM的硬件原语操作而被执行;以及
经由所述映射表中的所述一个或多个条目的所述当前状态到所述映射表中的所述条目的所述经转换的状态的所述转换,控制所述数据结构的当前状态到所述数据结构的经更新的状态的转换。
14.根据权利要求13所述的计算机程序产品,其中
控制所述映射表中的所述一个或多个条目的所述当前状态的所述转换包括:将对所述映射表的访问归类在硬件事务中。
15.根据权利要求14所述的计算机程序产品,其中
将对所述映射表的访问归类在所述硬件事务中包括:将对整个索引遍历的访问归类在所述硬件事务中。
CN201680032621.5A 2015-06-04 2016-06-03 使用硬件事务存储器控制索引的原子更新 Active CN107667364B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/731,379 2015-06-04
US14/731,379 US10067960B2 (en) 2015-06-04 2015-06-04 Controlling atomic updates of indexes using hardware transactional memory
PCT/US2016/035606 WO2016196855A1 (en) 2015-06-04 2016-06-03 Controlling atomic updates of indexes using hardware transactional memory

Publications (2)

Publication Number Publication Date
CN107667364A true CN107667364A (zh) 2018-02-06
CN107667364B CN107667364B (zh) 2022-04-26

Family

ID=56133100

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680032621.5A Active CN107667364B (zh) 2015-06-04 2016-06-03 使用硬件事务存储器控制索引的原子更新

Country Status (4)

Country Link
US (1) US10067960B2 (zh)
EP (1) EP3304298B1 (zh)
CN (1) CN107667364B (zh)
WO (1) WO2016196855A1 (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110764880A (zh) * 2019-09-06 2020-02-07 长沙新弘软件有限公司 一种基于原子操作的三态控制方法
CN112702275A (zh) * 2020-12-29 2021-04-23 迈普通信技术股份有限公司 基于每包转发的方法、装置、网络设备及计算机存储介质
CN114707478A (zh) * 2022-06-06 2022-07-05 飞腾信息技术有限公司 映射表生成方法、装置、设备及存储介质
CN117271531A (zh) * 2023-11-21 2023-12-22 苏州元脑智能科技有限公司 一种数据存储方法、系统、设备及介质

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9928264B2 (en) 2014-10-19 2018-03-27 Microsoft Technology Licensing, Llc High performance transactions in database management systems
US11163498B2 (en) 2015-07-01 2021-11-02 Oracle International Corporation System and method for rare copy-on-write in a distributed computing environment
WO2017086983A1 (en) * 2015-11-19 2017-05-26 Hewlett Packard Enterprise Development Lp Prediction models for concurrency control types
US10558636B2 (en) * 2016-04-27 2020-02-11 Sap Se Index page with latch-free access
KR20170136382A (ko) * 2016-06-01 2017-12-11 주식회사 맴레이 메모리 컨트롤러, 그리고 이를 포함하는 메모리 모듈 및 프로세서
CN106776823B (zh) * 2016-11-25 2018-12-07 华为技术有限公司 一种时序数据管理方法、设备和装置
US11157407B2 (en) * 2016-12-15 2021-10-26 Optimum Semiconductor Technologies Inc. Implementing atomic primitives using cache line locking
US10394454B2 (en) 2017-01-13 2019-08-27 Arm Limited Partitioning of memory system resources or performance monitoring
US10268379B2 (en) 2017-01-13 2019-04-23 Arm Limited Partitioning of memory system resources or performance monitoring
US10649678B2 (en) 2017-01-13 2020-05-12 Arm Limited Partitioning of memory system resources or performance monitoring
US10664306B2 (en) * 2017-01-13 2020-05-26 Arm Limited Memory partitioning
US20180203807A1 (en) 2017-01-13 2018-07-19 Arm Limited Partitioning tlb or cache allocation
US10331500B2 (en) 2017-04-05 2019-06-25 Cavium, Llc Managing fairness for lock and unlock operations using operation prioritization
US10248420B2 (en) * 2017-04-05 2019-04-02 Cavium, Llc Managing lock and unlock operations using active spinning
WO2018192645A1 (en) * 2017-04-19 2018-10-25 Huawei Technologies Co., Ltd. Updating metadata in hardware transactional memory user aborts
US10664400B2 (en) 2017-07-11 2020-05-26 Arm Limited Address translation cache partitioning
US10599485B2 (en) * 2018-01-31 2020-03-24 Microsoft Technology Licensing, Llc Index structure using atomic multiword update operations
US10931450B1 (en) * 2018-04-27 2021-02-23 Pure Storage, Inc. Distributed, lock-free 2-phase commit of secret shares using multiple stateless controllers
CN110737392B (zh) * 2018-07-20 2023-08-25 伊姆西Ip控股有限责任公司 管理存储系统中的地址的方法、设备和计算机可读存储介质
US11237829B2 (en) * 2019-02-13 2022-02-01 International Business Machines Corporation Performing composable transactions in a dispersed storage network
US11256625B2 (en) 2019-09-10 2022-02-22 Arm Limited Partition identifiers for page table walk memory transactions
US11874796B1 (en) 2019-09-27 2024-01-16 Amazon Technologies, Inc. Efficient garbage collection in optimistic multi-writer database systems
US11080262B1 (en) * 2019-09-27 2021-08-03 Amazon Technologies, Inc. Optimistic atomic multi-page write operations in decoupled multi-writer databases
CN112052193B (zh) * 2020-09-28 2023-04-07 成都佰维存储科技有限公司 一种垃圾回收方法、装置、可读存储介质及电子设备
CN112565437B (zh) * 2020-12-07 2021-11-19 浙江大学 一种面向跨界服务网络的服务缓存方法
US20220179679A1 (en) * 2020-12-07 2022-06-09 Cisco Technology, Inc. Compilation of expressions to employ software transactional memory concurrency control of an in-memory database
CN115858554A (zh) * 2021-09-23 2023-03-28 华为云计算技术有限公司 数据库事务的控制方法、装置及相关设备
US11575647B1 (en) * 2021-11-24 2023-02-07 Amazon Technologies, Inc. Distributed network address allocation management

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1477564A (zh) * 2002-06-06 2004-02-25 ������������ʽ���� 执行合并处理和注册/删除处理的全文搜索装置
CN1770162A (zh) * 2002-06-06 2006-05-10 株式会社理光 管理数据库的数据库管理系统
CN101317160A (zh) * 2005-12-30 2008-12-03 英特尔公司 软件辅助的嵌套硬件事务
US20090121765A1 (en) * 2007-11-08 2009-05-14 Nec Electronics Corporation Latch circuit and flip-flop circuit
CN101889266A (zh) * 2007-09-18 2010-11-17 微软公司 事务存储器中的并行嵌套事务
CN103365652A (zh) * 2012-03-30 2013-10-23 国际商业机器公司 用于数据库系统事务管理的方法和系统
US20140181821A1 (en) * 2012-12-20 2014-06-26 Massachusetts Institute Of Technology Methods and Systems for Enhancing Hardware Transactions Using Hardware Transactions in Software Slow-Path

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7921407B2 (en) 2004-08-10 2011-04-05 Oracle America, Inc. System and method for supporting multiple alternative methods for executing transactions
US7395382B1 (en) 2004-08-10 2008-07-01 Sun Microsystems, Inc. Hybrid software/hardware transactional memory
US7669015B2 (en) 2006-02-22 2010-02-23 Sun Microsystems Inc. Methods and apparatus to implement parallel transactions
US8108627B2 (en) 2006-03-31 2012-01-31 Intel Corporation Array comparison and swap operations
US7669040B2 (en) 2006-12-15 2010-02-23 Sun Microsystems, Inc. Method and apparatus for executing a long transaction
US7793052B2 (en) 2007-12-31 2010-09-07 Oracle America, Inc. System and method for implementing hybrid single-compare-single-store operations
US8140497B2 (en) 2007-12-31 2012-03-20 Oracle America, Inc. System and method for implementing nonblocking zero-indirection transactional memory
US8914620B2 (en) 2008-12-29 2014-12-16 Oracle America, Inc. Method and system for reducing abort rates in speculative lock elision using contention management mechanisms
US8170997B2 (en) 2009-01-29 2012-05-01 Microsoft Corporation Unbundled storage transaction services
US8539465B2 (en) * 2009-12-15 2013-09-17 Microsoft Corporation Accelerating unbounded memory transactions using nested cache resident transactions
US8402227B2 (en) 2010-03-31 2013-03-19 Oracle International Corporation System and method for committing results of a software transaction using a hardware transaction
US9003162B2 (en) 2012-06-20 2015-04-07 Microsoft Technology Licensing, Llc Structuring storage based on latch-free B-trees
US9342380B2 (en) 2013-03-05 2016-05-17 Oracle International Corporation System and method for implementing reader-writer locks using hardware transactional memory
US9519591B2 (en) 2013-06-22 2016-12-13 Microsoft Technology Licensing, Llc Latch-free, log-structured storage for multiple access methods
US9588801B2 (en) 2013-09-11 2017-03-07 Intel Corporation Apparatus and method for improved lock elision techniques
US9720667B2 (en) * 2014-03-21 2017-08-01 Intel Corporation Automatic loop vectorization using hardware transactional memory
US9524257B2 (en) * 2014-06-27 2016-12-20 International Business Machines Corporation Transactional execution enabled supervisor call interruption while in TX mode
US9514211B2 (en) 2014-07-20 2016-12-06 Microsoft Technology Licensing, Llc High throughput data modifications using blind update operations
US9928264B2 (en) 2014-10-19 2018-03-27 Microsoft Technology Licensing, Llc High performance transactions in database management systems

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1477564A (zh) * 2002-06-06 2004-02-25 ������������ʽ���� 执行合并处理和注册/删除处理的全文搜索装置
CN1770162A (zh) * 2002-06-06 2006-05-10 株式会社理光 管理数据库的数据库管理系统
CN101317160A (zh) * 2005-12-30 2008-12-03 英特尔公司 软件辅助的嵌套硬件事务
CN101889266A (zh) * 2007-09-18 2010-11-17 微软公司 事务存储器中的并行嵌套事务
US20090121765A1 (en) * 2007-11-08 2009-05-14 Nec Electronics Corporation Latch circuit and flip-flop circuit
CN103365652A (zh) * 2012-03-30 2013-10-23 国际商业机器公司 用于数据库系统事务管理的方法和系统
US20140181821A1 (en) * 2012-12-20 2014-06-26 Massachusetts Institute Of Technology Methods and Systems for Enhancing Hardware Transactions Using Hardware Transactions in Software Slow-Path

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
VIKTOR LEIS等: "exploiting hardware transactional memory in main-memory database", 《2014 IEEE 30TH INTERNATIONAL CONFERENCE ON DATA ENGINEERING》 *
林英建: "数据库逻辑设计性能优化关键技术研究", 《计算机技术与发展》 *
王永会等: "硬件事务存储系统研究综述", 《小型微型计算机系统》 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110764880A (zh) * 2019-09-06 2020-02-07 长沙新弘软件有限公司 一种基于原子操作的三态控制方法
CN112702275A (zh) * 2020-12-29 2021-04-23 迈普通信技术股份有限公司 基于每包转发的方法、装置、网络设备及计算机存储介质
CN114707478A (zh) * 2022-06-06 2022-07-05 飞腾信息技术有限公司 映射表生成方法、装置、设备及存储介质
CN114707478B (zh) * 2022-06-06 2022-09-02 飞腾信息技术有限公司 映射表生成方法、装置、设备及存储介质
CN117271531A (zh) * 2023-11-21 2023-12-22 苏州元脑智能科技有限公司 一种数据存储方法、系统、设备及介质
CN117271531B (zh) * 2023-11-21 2024-02-23 苏州元脑智能科技有限公司 一种数据存储方法、系统、设备及介质

Also Published As

Publication number Publication date
WO2016196855A1 (en) 2016-12-08
US10067960B2 (en) 2018-09-04
EP3304298A1 (en) 2018-04-11
CN107667364B (zh) 2022-04-26
US20160357791A1 (en) 2016-12-08
EP3304298B1 (en) 2021-01-27

Similar Documents

Publication Publication Date Title
CN107667364A (zh) 使用硬件事务存储器控制索引的原子更新
US11288252B2 (en) Transactional key-value store
CN107077495B (zh) 数据库管理系统中的高性能事务
Zhang et al. In-memory big data management and processing: A survey
CN106575297B (zh) 使用盲更新操作的高吞吐量数据修改
US9003162B2 (en) Structuring storage based on latch-free B-trees
US11023453B2 (en) Hash index
Shriraman et al. An integrated hardware-software approach to flexible transactional memory
US20180011892A1 (en) Foster twin data structure
Makreshanski et al. To lock, swap, or elide: On the interplay of hardware transactional memory and lock-free indexing
CN105408895A (zh) 用于多个访问方法的无锁存、日志结构化的存储
US20100332765A1 (en) Hierarchical bloom filters for facilitating concurrency control
US11645241B2 (en) Persistent memory file store for directly mapped persistent memory database
US11100083B2 (en) Read only bufferpool
Wongkham et al. Are updatable learned indexes ready?
Leis et al. Scaling HTM-supported database transactions to many cores
Shaull Retro: a methodology for retrospection everywhere
Chirigati et al. Virtual lightweight snapshots for consistent analytics in NoSQL stores
Kang et al. Making application-level crash consistency practical on flash storage
Nguyen et al. Why Files If You Have a DBMS
Bortnikov et al. Reconciling transactional and non-transactional operations in distributed key-value stores
IX 19th USENIX Conference on File and Storage Technologies (FAST’21)
Cruz et al. Guest Editorial: Special Section on the
Herlihy A Case Study in Optimizing HTM-Enabled Dynamic Data Structures: Patricia Tries
Ohene-Kwofie O2-tree: a shared memory resident index in multicore architectures

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