CN115118445A - 用于在hpc集群中获取授权的方法、装置和系统 - Google Patents
用于在hpc集群中获取授权的方法、装置和系统 Download PDFInfo
- Publication number
- CN115118445A CN115118445A CN202111149514.XA CN202111149514A CN115118445A CN 115118445 A CN115118445 A CN 115118445A CN 202111149514 A CN202111149514 A CN 202111149514A CN 115118445 A CN115118445 A CN 115118445A
- Authority
- CN
- China
- Prior art keywords
- file
- node
- access node
- authorization
- request
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000013475 authorization Methods 0.000 title claims abstract description 409
- 238000000034 method Methods 0.000 title claims abstract description 89
- 230000015654 memory Effects 0.000 claims abstract description 103
- 230000002146 bilateral effect Effects 0.000 claims description 66
- 238000003860 storage Methods 0.000 claims description 48
- 230000004044 response Effects 0.000 description 23
- 238000004891 communication Methods 0.000 description 19
- 230000008569 process Effects 0.000 description 19
- 239000003795 chemical substances by application Substances 0.000 description 12
- 238000010586 diagram Methods 0.000 description 11
- 238000012545 processing Methods 0.000 description 11
- 230000002085 persistent effect Effects 0.000 description 10
- 230000007246 mechanism Effects 0.000 description 9
- 238000013459 approach Methods 0.000 description 6
- 238000013461 design Methods 0.000 description 6
- 230000001133 acceleration Effects 0.000 description 5
- 239000004744 fabric Substances 0.000 description 4
- 230000001960 triggered effect Effects 0.000 description 4
- 230000003111 delayed effect Effects 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- 239000000872 buffer Substances 0.000 description 2
- 230000007774 longterm Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 229940057373 c-time Drugs 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007787 long-term memory Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000004904 shortening Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000004557 technical material Substances 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/08—Network architectures or network communication protocols for network security for authentication of entities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
- G06F15/17306—Intercommunication techniques
- G06F15/17331—Distributed shared memory [DSM], e.g. remote direct memory access [RDMA]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Computing Systems (AREA)
- Computer Security & Cryptography (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种授权获取方法及其系统,所述系统包括至少一个第一接入节点(DPC1)和所有者节点。所述方法包括:在第一接入节点(DPC1)处接收来自客户端节点的第一I/O请求,所述第一I/O请求标识存储在所有者节点中的文件(F1)的文件区域;所述DPC1对所述所有者节点执行基于单边远程直接内存访问(Remote Direct Memory Access,RDMA)协议的原子比较和交换(compare‑and‑swap,CAS)操作,以从所述文件的所述文件区域获取第一文件范围的授权,而不向所述文件发送所述第一I/O请求;在成功执行原子CAS操作后,所述DPC1接收所述第一文件范围的第一授权许可;以及在所述DPC1的本地数据缓存中创建的本地文件的所述第一文件范围内执行所述第一I/O请求。
Description
技术领域
此处描述的本发明通常涉及信息技术领域,具体涉及高性能计算(HighPerformance Computing,HPC)集群中的基于远程直接内存访问(Remote Direct MemoryAccess,RDMA)协议的授权管理方法。
背景技术
计算系统包括通过例如网络或总线结构的互连结构彼此连接的各种设备。这些设备通常包含本地存储器,并且多个设备并行运行,以在计算环境中提供处理速度和灵活性。
远程直接内存访问(Remote Direct Memory Access,RDMA)是网络接口卡(network interface card,NIC)特征,其使得计算设备能够访问另一计算设备的存储器中的信息。具体地,通过RDMA技术,计算设备可以从另一计算设备的存储器读取信息,也可以将信息写入另一计算设备的存储器,而不涉及相应计算设备的主机操作系统(hostoperating system,OS)或中央处理器(Central Processing Unit,CPU)。
集群通常是指一组计算机系统,也称为节点,它们被链接或互连以紧密地一起运行,从而在许多方面形成单个计算机。与单个计算机相比,集群通常提供大幅改进的性能和/或可用性。与速度和可用性相当的单个计算机相比,集群通常更具成本效益。
通过减少时延并增加消息解析操作的带宽,例如InfiniBand的RDMA架构在提高高性能计算(High Performance Computing,HPC)集群应用的性能方面取得了巨大成功。RDMA架构通过内核旁路、直接数据放置将网络接口移近应用来提高性能,并允许更好地控制I/O操作以匹配应用要求。
集群包括多个客户端,并且为了获取集群中共享资源的处理权限,例如写入权限或读取权限,客户端需要使用RDMA协议来应用锁定。通常,写入权限也称为写入锁或排它锁,读取权限称为读取锁或共享锁。通过由客户端对实际文件的所有者节点的存储器中的文件区域应用写入锁,执行基于RDMA的协议的原子比较和交换(Compare-and-Swap,CAS)操作。如果CAS操作成功,将写入锁分配给相应的客户端。如果另一客户端执行相同文件范围的原子CAS操作,该操作将失败。除非第一客户端释放写入锁,否则另一客户端处于写入锁等待状态。
在由HPC集群提供的存储方案中,实际文件存储在所有者节点中。接入节点从作为实际文件所有者的所有者节点获取实际文件的文件数据和元数据。这里的文件数据是指文件的内容,而元数据是指文件的大小、修改时间、创建时间等。接入节点从所有者节点获取实际文件涉及集群间时延,并且能够增加客户端接入的总体时延。在目前的方案中,为了获得更高的性能并避免集群间时延,在接入节点上放置缓存,以便能够将最近访问的文件数据和元数据存储在缓存中。为了提高P-Shim层(在接入节点中运行的协议层)中接入节点中的这些缓存的一致性,进一步采用授权机制。在这里,可以将授权定义为机制,客户端能够借以确保接入节点的本地数据缓存将具有来自拥有实际文件的所有者节点的永久性存储器的最新信息。因此,想要对同一文件执行读取或写入操作的任意客户端将始终具有最新信息。此外,授权确保授权给接入节点的文件范围不会发生冲突写入。获取由客户端对文件区域应用锁的文件的每个最小允许文件范围(例如,1MB)的授权,即,如果客户端希望对存储在所有者节点的永久性存储器中的实际文件(F1)的100MB文件区域应用锁,则获取相应100MB文件区域的每个1MB文件范围的授权。横向扩展网络连接存储(network-attachedstorage,NAS)支持接入节点的P-Shim层中数据和元数据缓存。P-Shim中存在数据缓存,以最小化客户端协议的操作时延。数据缓存用于从NAS客户端(SMB/NFS协议)读取操作和写入操作。NAS服务器(SMB/NFS协议)使用这些缓存来服务于NFS客户端请求,而无需转到文件所在的所有者节点。这还有助于最小化集群间流量。支持授权特征,为P-Shim层中的本地缓存提供一致性。当多个P-Shim节点(充当接入节点)访问文件数据时,这特别有用。在写入新数据时,SMB/NFS客户端应使用写入缓存;在读取数据时,应使用预读缓存。
类似地,P-Shim中存在元数据缓存,也称为iNode,以最小化来自NAS客户端的元数据操作的操作时延。在大多数协议和应用场景中,元数据操作非常常见。这里,元数据意味着iNode元数据,例如:iNodenumber、m-time、c-time、ACL、权限等。当NFS/SMB客户端操作改变这些属性时,P-Shim中的缓存无效。元数据缓存的一致性由元数据授权实现。文件的名称也是文件元数据的一部分。文件的名称由元数据授权保护(重命名时)。P-Shim还对目录条目使用元数据授权,即由D-entry授权保护的D-entry缓存。
通常,一些存储方案涉及在接入节点之间不提供一致性,这使得数据不一致,并且使得该方案不适用于除只读之外的任何工作负载。不希望强一致性的应用不能使用一致性模型。一些现有方案使用最终一致性,该最终一致性不能用于所有类型的工作负载。
但是,在涉及HPC集群的大多数情况下,一致性是接入节点之间的授权,由接入节点使用节点间消息获取其授权许可。图1示出了一种此类现有技术存储方案的应用场景,其中,接入节点尝试对存储在所有者节点中的文件范围执行写入操作,并且还请求来自所有者节点的文件范围的授权许可。分布式锁管理器(distributed lock manager,DLM)用于跨集群提供锁语义。DLM代理是在接入节点处的模块,该模块负责请求授权许可,并从接入节点获取授权许可。类似地,DLM主控制器是在所有者节点处的模块,该模块处理从接入节点接收的授权许可请求。P-Shim是托管数据缓存和元数据缓存的协议层,称为“iNode”缓存。FS-Shim是所有者节点的文件系统层,该文件系统层托管对应于存储在所有者节点的永久性存储器中的文件和目录的信息。使用“FSS”表示的文件子系统服务召回必要的功能,以对例如硬盘驱动器(Hard Disk Drive,HDD)或固态设备(Solid State Device,SSD)的后端永久性介质上的文件执行写入/读取操作。FSS充当FS-Shim与永久性存储介质之间的接口,并使得能够对所有者节点的永久性存储器中的文件执行读取/写入操作。
现有技术(图1)表示节点间消息流,即在客户端节点、接入节点与所有者节点之间交换的消息,以对所有者节点中的文件执行写入操作。在下文中,获取授权的现有技术方法应称为基于双边消息的授权或基于双边ICP/IP消息的授权,因为在接入节点与所有者节点之间交换的此类消息可以基于TCP/IP协议。
1、接入节点接收来自客户端节点的输入/输出(Input/Output,I/O)操作,在这种情况下,I/O操作是写入请求。I/O操作标识存储在所有者节点的永久性存储器中的文件(F1)的文件区域(例如,10MB)。
2、在发送I/O操作时,客户端节点实现对文件(F1)的文件区域的预锁定,使得来自同一接入节点的其它客户端不能请求对文件(F1)的同一文件区域执行I/O操作。在这种情况下,应避免冲突写入,而只允许共享读取。这样做是为了避免来自同一接入节点上的另一客户端的并行I/O请求,最终请求同一重复范围。一旦进入预锁定状态,新的I/O请求将需要等待,直至前一个请求完成。
3、接入节点向所有者节点发送操作,即具有有效载荷的写入请求,即文件的所有相关细节和最小允许文件范围的授权请求。始终获取小范围以及每个此类小范围的文件的授权。例如,必须获取10MB文件区域的每个1MB的授权请求。因此,在获取授权请求的同时,对所有者节点的FS-Shim层执行I/O操作。
4、FSS接收写入操作请求。
5、FSS基于接收到的具有有效载荷的I/O操作执行写入操作,并将称为“应用授权”的授权请求发送到所有者节点的DLM主控制器模块。
6、DLM主控制器检查所有者节点的锁语义,并且如果到目前为止没有获取该文件范围的锁,则将许可授权。
7、DLM主控制器发送授权许可,并且FSS在对接入节点执行写入操作时发送响应。
如果另一客户端尝试对图1的接入节点执行同一文件范围授权的排他性操作,接入节点的DLM代理接收来自所有者节点的DLM主控制器的召回消息,该召回消息实现通过图1中的步骤1至步骤7所示的同一基于消息的路径。
在图1所示的现有码流中,在请求授权的同时执行文件操作(图1所示的写入操作)。随着在节点之间执行I/O操作和处理文件操作的延迟,授权许可也会延迟,从而限制并发I/O请求访问数据缓存,以等待前一个请求完成。类似地,在冲突期间,召回该许可授权还遵循基于消息的路径,从而导致实际I/O请求受阻并延迟更长时间。高性能计算逐渐从CPU密集型转换到I/O密集型。系统的I/O效率对性能有重要影响,这要求存储系统具有非常高的I/O操作性能。此外,因特网的快速发展也对HPC的海量存储系统的操作性能提出了更高的要求。
发明内容
提供了本发明内容,以引入与高性能计算集群中授权获取流程相关的概念,该高性能计算集群包括至少一个所有者节点和至少两个接入节点。
本发明的主要目的是提供一种授权获取机制,通过使用单边RDMA来满足对接入节点的更快文件数据授权许可的要求,从而提高HPC工作负载的端到端性能,由此确保能够快速地将数据写入本地缓存,并且还能够随后读取数据。本发明还能够容易地扩展,以支持例如大小、m-time等元数据操作以及许可目录授权。
在第一种实现方式中,本发明提供了一种授权获取方法。所述方法包括:在第一接入节点(DPC1)处接收来自客户端节点的第一I/O请求,所述第一I/O请求标识存储在所有者节点中的文件(F1)的文件区域。此外,所述方法还包括:由所述第一接入节点(DPC1)对所述所有者节点执行基于单边远程直接内存访问(Remote Direct Memory Access,RDMA)协议的原子比较和交换(compare-and-swap,CAS)操作,以从所述文件的所述文件区域获取第一文件范围的授权,而不向所述文件发送所述第一I/O请求。此外,所述方法还包括:在成功执行原子CAS操作后,由所述第一接入节点(DPC1)接收所述第一文件范围的第一授权许可;以及在所述第一接入节点(DPC1)的本地数据缓存中创建的本地文件的所述第一文件范围内执行所述第一I/O请求。
在第二种实现方式中,本发明公开了一种用于获取授权的系统。所述系统至少包括第一接入节点(DPC1)和所有者节点。所述第一接入节点(DPC1)用于:接收来自客户端节点的第一I/O请求,所述第一I/O请求标识存储在所有者节点中的文件(F1)的文件区域;以及对所述所有者节点执行基于单边远程直接内存访问(Remote Direct Memory Access,RDMA)协议的原子比较和交换(compare-and-swap,CAS)操作,以从所述文件(F1)的所述文件区域获取第一文件范围的授权,而不向所述文件(F1)发送所述第一I/O请求。此外,所述第一接入节点(DPC1)用于:在成功执行原子CAS操作后,接收所述第一文件范围的第一授权许可;以及在所述第一接入节点(DPC1)的本地数据缓存中创建的本地文件的所述第一文件范围内执行所述第一I/O请求。
在本发明的第三种实现方式中,提供了一种用于在高性能计算(HighPerformance Computing,HPC)集群中获取授权的第二接入节点(DPC2),所述集群包括至少一个所有者节点、所述第二接入节点(DPC2)以及根据所述第二种实现方式的所述第一接入节点(DPC1)。所述第二接入节点包括存储器,所述存储器包括代理分布式锁管理器(Distributed Lock Manager,DLM)模块、本地数据缓存、网络接口卡(Network InterfaceCard,NIC)、所述NIC中的RDMA注册存储器以及本地RDMA接口,其中,所述本地RDMA接口经由相应的RDMA总线与所述所有者节点的主RDMA接口通信。
在本发明的第四种实现方式中,提供了一种用于在高性能计算(HighPerformance Computing,HPC)集群中许可授权的所有者节点,所述集群至少包括所述所有者节点、根据所述第二种实现方式的所述第一接入节点(DPC1)以及根据所述第三种实现方式的所述第二接入节点(DPC2)。
在本发明的第五种实现方式中,公开了一种用于在高性能计算(HighPerformance Computing,HPC)集群中获取和许可授权的系统,所述集群包括至少一个所有者节点和至少两个接入节点(DPC1、DPC2)。所述系统包括根据所述第二种实现方式的所述第一接入节点(DPC1)、根据所述第三种实现方式的所述第二接入节点(DPC2)以及根据所述第四种实现方式的所述所有者节点。
附图说明
具体实施方案是参考附图描述的。在附图中,参考编号最左边的数字表示所述参考编号在该附图中首次出现。所有附图使用相同数字指示相同特征和组件。
图1示出了现有技术方案中基于双边TCP/IP消息的授权获取方法;
图2示出了根据本发明提供的用于实施基于单边RDMA协议的授权获取方法的HPC集群的示意图;
图3示出了基于单边RDMA协议的授权获取方法;
图4示出了根据本发明的一实现方式提供的主节点的RDMA注册存储器中维护的哈希表和HPC集群中客户端节点的RDMA注册存储器中维护的本地哈希表的示意图;
图5示出了根据本发明的一实施例提供的在HPC集群中执行的方法;
图6a,6b示出了根据本发明的一实施例提供的RB树和冲突列表的示意图;
图7示出了根据本发明的一实施例提供的在HPC集群中执行的方法;
图8示出了根据本发明的一实施例提供的在HPC集群中执行的方法;
图9至图22示出了根据本发明的各种实施例提供的在HPC集群中执行的方法;
图23A,23B示出了根据本发明的实施例提供的包括HPC集群的接入节点和所有者节点的系统;
图24示出了本发明中所讨论的HPC集群的节点的图示表征。
应当理解,附图是为了说明本发明的概念,并且不应被理解为对本发明的限制。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。
本发明可以有多种方式实现,包括实现为过程、装置、系统、物质组成、计算机可读介质,例如计算机可读存储介质,或者其中程序指令经由光学或电子通信链路发送的计算机网络。在本说明书中,这些实现方式或者本发明可以采取的任何其它形式可以称为技术。通常,所公开过程的步骤顺序可以在本发明的范围内进行更改。
下面提供了本发明的一个或多个实施例的详细描述以及说明本发明原理的附图。本发明是结合这些实施例进行描述,但是本发明不限于任何实施例。本发明的范围仅由权利要求书限制,并且本发明包括许多替代方案、修改和等同物。为了提供对本发明的透彻理解,下文描述中阐述了许多具体细节。提供这些细节用于举例,本发明可以根据权利要求书实现,不需要部分或者所有这些具体细节。为了清楚描述,没有对与本发明相关技术领域中已知的技术材料进行详细描述,以免对本发明造成不必要地模糊。
下文描述中陈述许多具体细节,以对本发明各实施例进行透彻理解。但是,本领域的技术人员将明白可以在没有这些具体细节的情况下实践本发明。在其它实例中,没有详细描述众所周知的方法、流程、组件、模块、单元,和/或电路,以免对本发明造成模糊。
尽管本发明实施例对此不作限制,但是利用术语例如“处理”、“计算”、“计算”、“确定”、“建立”、“分析”以及“检查”等进行的讨论可以指的是计算机、计算平台、计算系统或其它电子计算设备的操作和/或处理,其将表示为计算机寄存器和/或存储器中的物理(例如,电子)量的数据操作和/或转换为类似地表示为计算机寄存器和/或存储器中的物理量的其它数据或可以存储执行操作和/或处理指令的非瞬时性存储介质中的其它信息。
尽管本发明实施例对此不作限制,但是本文使用的术语“多个”可以包括“多个”或“两个或多个”等。整个说明书中都可以使用术语“多个”描述两个或多个组件、设备、元件、单元或者参数等。除非明确说明,否则本文描述的方法实施例不限于特定顺序。此外,部分所描述的方法实施例或其元件可以在同一时间点或同时发生或同时执行。
本发明涉及一种基于单边远程直接内存访问(Remote Direct Memory Access,RDMA)协议的授权许可过程,使得能够对接入节点的本地数据缓存中的文件快速执行I/O操作,从而缩短端到端处理时间。RDMA是网络接口卡(network interface card,NIC)特征,其使得计算设备能够访问另一计算设备的存储器中的信息,而不涉及相应计算设备的主机操作系统(host operating system,OS)或中央处理器(Central Processing Unit,CPU)。根据本发明实施例,本发明对在所有者节点处维护的哈希表执行基于RDMA,也称为“RDMA协议”的原子比较和交换(compare-and-swap,CAS)操作,以请求或获取存储在所有者节点中的文件的文件范围的授权。CAS是用于实现同步的原子指令,其中,将存储器位置的内容与给定值进行比较,并且只有在它们相同时,才将存储器位置的内容修改为新的给定值。在集群方案中,已知使用原子CAS来执行原子CAS以由客户端应用锁定。如果CAS操作成功,将写入锁定分配给相应的客户端。如果另一客户端执行相同文件范围的原子CAS操作,该操作将失败。除非第一客户端释放写入锁,否则另一客户端处于写入锁等待状态。在本发明中,由接入节点执行基于单边RDMA的原子CAS以获取快速授权许可。如果原子CAS成功,则快速向接入节点授予授权,并且可以直接对接入节点的本地数据缓存执行例如写入操作的数据I/O操作。因此,节省了使用基于消息的路径(如图1所示)执行I/O操作所花费的相当长的延迟时间。术语“单边”强调使用RDMA将授权请求直接发送到文件的存储器位置,并且因此由接入节点快速获取授权许可,而不依赖于在节点之间交换的各种双边消息流,如图1所示。
在原子CAS操作失败的情况下,本发明还提供了基于双边RDMA协议的操作,该操作执行以获取授权。在这里,双边RDMA包括有效载荷数据消息以及从接入节点发送到所有者节点的授权请求,并且还包括控制处理单元,也称为涉及的(相应接入节点和所有者节点的)处理单元。有效载荷数据包括与客户端想要读/写数据的文件范围相关联的文件信息以及与写/读操作相关联的有效载荷数据。但是,基于双边RDMA协议的授权请求仍然比现有技术(图1)的基于TCP/IP消息的授权操作更快。发明人发现,与现有技术机制(图1)的基于TCP/IP消息的授权操作相比,基于单边RDMA协议的授权操作至少快4至5倍,而基于双边RDMA协议的授权操作至少快3到5倍。在前述公开中,应当理解,基于单边RDMA协议的授权请求仅涉及要从接入节点发送到所有者节点的文件范围的授权请求;基于双边RDMA协议的授权请求涉及要从接入节点发送到所有者节点的文件范围的授权请求以及有效载荷数据;并且基于TCP/IP消息的授权请求涉及要与要从接入节点发送到所有者节点的文件范围的I/O操作一起发送的授权请求,并且是图1中示出的现有技术机制。为了便于引用,根据本发明使用基于单边RDMA的原子CAS操作执行的授权请求称为“尝试锁定”,而根据本发明使用双边RDMA操作执行的授权请求称为“应用锁定”或“通过消息应用锁定”,因为文件和接入节点的有效载荷数据和其它信息在接入节点与所有者节点之间共享。
根据本发明的进一步实施例,还使用基于单边RDMA协议的原子CAS操作来加速许可给接入节点的授权的授权召回。前述描述应参考示出的附图更详细地描述本发明。
图2示出了包括多个节点的HPC集群100,其中,一些节点也称为存储节点和/或计算节点。集群100的多个节点用于允许使用通信网络在多个节点之间进行数据交换。为此,通信网络可以包括节点之间的多个有线和/或无线连接。在一实施例中,通信网络可以包括以太网通信网络。在一实施例中,HPC集群100是大规模通用并行计算系统,例如,分布式存储器超级计算机集群或数据中心中的大规模服务器网络。尽管未示出,但应当理解,每个节点可以包括处理单元和本地存储器。在一实施例中,可以通过跨通信网络的节点间通信来处理非本地存储器引用,该通信网络互连集群100的节点。
每个集群中的计算节点相互并行工作,从而提高处理速度以实现高性能计算。在这里,将这些计算节点寻址为接入节点和所有者节点。在本发明中,表示为DPC1、DPC2的接入节点充当分布式专用客户端(Distributed Private Client,DPC)。DPC作为存储客户端在接入节点上运行,并通过网络协议与后端存储节点交换数据。鉴于纵向扩展在经济上变得不可行,大多数存储供应商现在都采用存储节点的横向扩展。这就是使用多个存储节点来形成存储集群的原因。在集群环境中,计算和存储都分布在作为集群的一部分的节点之间。这就是将存储对象(文件/目录)均匀地分布在作为集群的一部分的节点之间的原因。为实现位置透明性,网络接入存储(Network Access Storage,NAS)客户端可以连接到任何存储节点,以访问存储在任何其它节点上的文件/目录。NAS协议和文件系统管理如何向客户端提供统一的文件系统视图。例如,在具有三个节点(节点-1、节点-2、节点-3)的存储集群(例如,HPC集群100)上,给定文件可以位于节点-2文件系统上,但这可以通过连接到节点-1、节点-2或节点-3进行访问。NAS客户端是从文件实际所在的所有者节点抽象出来的。实际存储文件的节点称为所有者节点。在横向扩展NAS产品中,协议客户端(SMB/NFS)可以从不同的接入节点访问存储服务器。接入节点是iNode缓存的所有者,DPC在接入节点上运行,接入节点还包括向SMB/NFS客户端公开的逻辑接口。文件可能存在于其中一个集群存储节点(FSP所有者)中。因此,访问文件需要不同存储节点之间的通信,即向客户端公开的接入节点和实际存储文件的所有者节点之间的通信。
如上所述,计算节点分类为接入节点(也称为DPC)和所有者节点。在图2中,示出了集群100,该集群具有三个节点:一个所有者节点、第一接入节点DPC1和第二接入节点DPC2。第一接入节点DPC1可以包括向第一SMB客户端(图2中未示出)公开的逻辑接口,而第二接入节点DPC2可以包括向第二SMB/NFS客户端(图2中未示出)公开的逻辑接口。第一接入节点DPC1和第二接入节点DPC2中的每一个包括结合图1描述的协议层,即P-Shim层中的相应iNode缓存和数据缓存。
根据一实施例,可以具有到第一SMB/NFS客户端的逻辑接口的第一接入节点DPC1包括存储器200、支持远程直接内存访问(Remote Direct Memory Access,RDMA)的网络接口卡(Network Interface Card,NIC)202和本地数据缓存204。存储器200包括代理分布式锁管理器(Distributed Lock Manager,DLM)模块200-1。就实现方式而言,代理DLM 200-1被视为类似于结合图1描述的锁语义管理器DLM。但是,在角色中,代理DLM请求从SMB/NFS客户端接收的任何I/O操作的授权许可,而无需首先发送I/O操作。当接收到授权许可时,可以直接对在第一接入节点(即DPC1)的本地数据缓存204中创建的本地文件执行I/O操作。本地数据缓存204位于与图1所示的接入节点的本地数据缓存类似的P-Shim层中。应当理解,P-Shim层还托管元数据缓存iNode(图2中未示出)。授权提供了一种一致性机制来缓存接入节点上的文件/目录的内容和属性,使得能够避免由节点间通信引起的时延,如图1所示,从而减少操作时延。此外,授权还确保节点之间共享的数据和属性是同步的,如果发生任何更改,将使较旧数据和属性无效。
本发明能够使用基于单边RDMA的方法快速地向接入节点授予授权,使得即使对于第一写入I/O操作,也可以有效地将数据写入本地缓存。稍后,也可以有效地处理属于同一锁定范围的一组写入I/O操作。在这里,锁定范围是指SMB/NFS客户端为执行I/O操作而锁定的文件区域。应当理解,在本发明中,SMB/NFS客户端针对文件区域(如存储在所有者节点处的0-10MB的文件)获取锁定。使用结合图1所示的通信经由接入节点获取锁定。尽管授权由第一接入节点DPC1获取,对于最小允许文件限制,例如对于由SMB/NFS客户端锁定的0-10MB文件中的每1MB,DPC1向所有者节点请求授权。一旦获取文件范围的授权许可,就可以对本地缓存执行属于同一文件范围的任何写入I/O操作,从而减少总体I/O时延。
为了获取授权许可,第一接入节点DPC1对所有者节点执行基于单边RDMA协议的原子CAS操作。根据本发明的一特定实施例,对所有者节点中维护锁结构的哈希表执行原子CAS操作,以从所有者节点获取特定文件范围的授权,而不向所有者节点发送实际I/O操作。如果原子操作成功,可以从本地数据缓存204本身写入或读取数据。类似地,可以使用同一单边RDMA路径来支持元数据操作,并且还许可目录授权。目录授权将使客户端能够在本地缓存204本身中创建和写入大小<8KB的小文件,而无需转到实际所有者节点。在另一实施例中,在客户端(SMB/NFS客户端)的工作完成之后,该基于单边RDMA的路径重新用于解锁。在又一实施例中,当另一客户端(即另一SMB/NFS客户端)进行冲突访问时,基于单边RDMA的路径用于召回授权。在图3所示的示图中,这里描述的基于单边RDMA的原子CAS操作不同于现有技术(图1)的基于消息的授权请求机制。
图3示出了与图1的现有技术方案形成对比的本发明的应用场景。以图1的相同示例为例,接入节点尝试对存储在所有者节点中的文件范围执行写入操作。在与图1所示的流程类似的步骤2中获取预锁定之后,接入节点的DLM代理根据本发明的教导,在步骤3中执行基于单边RDMA的原子CAS操作,而不是将I/O操作发送到所有者节点。如果原子CAS操作成功,将I/O写入操作定向到接入节点的本地数据缓存而不是所有者节点的存储器,从而与图1所示的基于消息的方法相比减少了I/O操作的总体时延。应当理解,图3所示的接入节点和所有者节点的结构实现方式与图1所示的类似。DLM代理是在接入节点处的模块,该模块负责请求授权许可,并从接入节点获取授权许可。类似地,DLM主控制器是在所有者节点处的模块,该模块处理从接入节点接收的授权许可请求。P-Shim是托管数据缓存和元数据缓存的协议层,称为“iNode”缓存。FS-Shim是所有者节点的文件系统层,该文件系统层托管对应于存储在所有者节点的永久性存储器中的文件和目录的信息。使用“FSS”表示的文件子系统服务召回必要的功能,以对例如硬盘驱动器(Hard Disk Drive,HDD)或固态设备(SolidState Device,SSD)的后端永久性介质上的文件执行读取/写入操作。FSS充当FS-Shim与永久性存储器之间的接口,并使得能够对所有者节点的永久性存储器中的文件执行读取/写入操作。
图3示出了从接入节点发送到所有者节点的基于单边RDMA协议的授权请求的流程以及客户端节点(例如,SMB/NFS客户端)与接入节点之间的节点间通信,以便对所有者节点中的文件执行写入操作。
1、接入节点接收来自客户端节点(例如,SMB/NFS客户端)的输入/输出(Input/Output,I/O)操作,在这种情况下,I/O操作是写入请求。I/O操作标识存储在所有者节点的永久性存储器中的文件(F1)的文件区域(例如,10MB)。
2、在发送I/O操作时,客户端节点实现对文件(F1)的文件区域的预锁定,使得其它客户端不能对文件(F1)的同一文件区域执行I/O操作。在这种情况下,应避免冲突写入器,而只允许共享读取。
3、根据本发明的教导,DLM代理模块对在所有者节点处维护的哈希表执行基于单边RDMA的原子CAS操作以请求授权许可,而不向所有者节点发送具有有效载荷的I/O写入请求,即不向所有者节点发送文件的所有相关细节。授权请求针对最小允许文件范围,例如,10MB文件区域的0-1MB。因此,授权请求不会将I/O操作发送到所有者节点的FS-Shim层。在这里,经由基于单边RDMA的原子CAS操作的单边授权请求在本发明中称为“尝试锁定”。
4、在成功执行CAS操作后,所有者节点的DLM主控制器模块向第一接入节点许可授权,从而检测到请求的文件范围没有冲突。
5、在接收授权许可后,DLM代理将从客户端接收的I/O写入操作定向到其本地数据缓存。对于已授权给接入节点的同一文件范围,可以直接对接入节点的本地数据缓存执行来自客户端的任何后续I/O操作。
6、接入节点(DPC)在其本地数据缓存上完成I/O写入操作后向客户端报告写入成功。
如果另一客户端尝试对授权给图2的接入节点的同一文件范围执行排他性操作,接入节点的DLM代理从实施同一基于单边RDMA的方法的所有者节点的DLM主控制器接收召回消息,这应在前述描述中阐明。此外,该同一路径还可用于存储更新的元数据和获取目录授权。使用该方案,我们还可以在客户端的工作完成之后加速解锁,并在另一客户端进行冲突访问时召回授权。
从图3的流程结构可以明显看出,与图1相比,HPC 100的I/O性能效率有所提高,这是对HPC的海量存储系统的操作性能的持续要求。
再次参考图2,第一接入节点DPC1包括NIC 202中的基于RDMA的注册存储器2021,也称为第一基于RDMA的注册存储器2021,以及经由RDMA通信总线302A与所有者节点的主RDMA接口通信的RDMA本地接口2022。RDMA注册存储器2021包括图4示出的本地哈希表。本地哈希表40A包括1到m个本地锁槽。1到m个槽的每个本地锁槽y对应于所有者节点的基于RDMA的注册存储器中维护的相应哈希表的锁槽x中的一个,该注册存储器也称为第二基于RDMA的注册存储器。哈希表的重要性是标识在原子CAS操作期间由哈希操作标识的特定锁槽的锁语义。在成功执行原子CAS操作后,获取所识别的锁槽的64位锁条目,或者称为64位锁信息,并且基于64位锁信息来检索特定锁槽的接入节点的授权。在基于单边RDMA协议的原子CAS操作期间成功执行原子CAS操作后,本地哈希表的相应锁槽y提供64位锁信息,该锁信息将进行比较并更新到在所有者节点处维护的哈希表的相应锁槽x。接入节点DPC1和所有者节点的相应哈希表维护在NIC卡的相应RDMA注册存储器中,该哈希表通过RDMA通信总线302A在所述节点之间共享。
此外,存储文件F1的所有者节点包括存储器300和支持远程直接内存访问(RemoteDirect Memory Access,RDMA)的主网络接口卡(Network Interface Card,NIC)202。存储器300包括主分布式锁管理器(Distributed Lock Manager,DLM)模块300-1。就实现方式而言,主DLM 230-1被视为类似于结合图1描述的DLM主控制器。DLM主控制器300-1检查所有者节点的锁语义,并且如果到目前为止没有对请求授权的文件范围应用锁定,则将许可授权。但是,由于该操作是单边RDMA操作,DLM主控制器300-1不需要像现有技术机制(图1)那样向FSS发送授权许可。所有者节点包括支持RDMA的主NIC 302中的基于RDMA的注册存储器3021,也称为第二基于RDMA的注册存储器3021,以及经由RDMA总线通信与接入节点DPC1、DPC2的本地RDMA接口通信的RDMA主接口3022。例如,RDMA主接口3022经由RDMA通信总线302A与第一接入节点DPC1的RDMA本地接口2022通信。在另一示例中,RDMA主接口3022经由RDMA通信总线302B与第二接入节点DPC2的RDMA本地接口4022通信。此外,基于RDMA的注册存储器3021包括图4所示的哈希表。哈希表40B也称为主哈希表,包括1到n个锁槽。1到n个槽的每个锁槽x从在相应接入节点(例如,第一接入节点DPC1)处维护的本地哈希表的本地槽y获取相应的锁信息。
根据本发明的一个实施例,第一接入节点DPC1对所有者节点执行基于单边远程直接内存访问(Remote Direct Memory Access,RDMA)协议的原子比较和交换(compare-and-swap,CAS)操作,以从文件(F1)的文件区域获取第一文件范围的授权,而不向文件(F1)发送I/O请求。可以对存储在所有者节点的RDMA注册存储器(如图2所示的基于RDMA的注册存储器3021)中的哈希表执行原子CAS操作。在一个此类实现方式中,当I/O请求(例如,写入操作请求)到达第一接入节点DPC1时,第一接入节点(DPC1)从I/O检索称为文件范围的RangeID以及文件或目录的唯一标识符。为了执行单边基于RDMA的原子CAS操作,执行哈希操作,以从在所有者节点处维护的1到n个可用锁槽中标识锁槽x。对该特定锁槽x执行一次原子CAS操作。考虑到锁槽x为空,即当前没有保存和锁定条目,原子CAS操作是成功的。锁槽x的锁条目在前述描述中进行了说明。
在成功执行原子CAS操作后,第一接入节点DPC1获取锁条目,即锁槽x的64位锁信息,该第一接入节点DPC1请求文件范围的授权许可,并且对锁槽x执行基于单边RDMA协议的原子CAS操作。换句话说,在基于单边RDMA的原子CAS操作期间,比较锁槽x的值,并且自动获取锁槽x的64位锁信息。这直接影响HPC工作负载的端到端性能,因为这导致更快授权文件范围。作为64位锁数据/信息的每个锁条目标识所有者节点的哈希表中的条目,该条目具有特定文件的rangeID和目录的某种唯一标识符,以及已获取授权锁的接入节点(例如,DPC1)的细节。作为示例,槽x的锁结构或锁条目可以如下所示:
客户端ID标志:4字节数据,如LSID,其唯一地标识授权接入节点(例如,DPC1);
部分UUID:2字节标识符标志,用于存储相应文件或相应目录的唯一标识符(unique identifier,UUID)的压缩数据;
RangeID:1字节数据,标识要获取授权的文件范围。例如,它可以是最小允许锁定范围的压缩数据;
保留位:保留3位以供将来使用。例如,保留位可以是1位脏标志,其设置为0以标识接入节点的本地数据缓存的内容尚未刷新到所有者节点中的文件(F1)中;
模式:1位模式标志,其设置为1以标识许可的授权已共享,或者设置为0以标识许可的授权是排他性的;
数据标志:1位数据标志,其设置为0以标识锁槽x不存在哈希冲突,该哈希冲突应在后面进行更详细的说明。
DLGType:2位的授权类型标志,用于标识授权许可是数据类型授权还是元数据类型;以及
解析标志:1位解析类型标志,其设置为0以指示槽x不需要进行解析,或者设置为1以指示锁槽x正在进行解析。
文件句柄(UUID)和rangeID或文件/目录的唯一标识符将进行哈希,以获取哈希槽。执行哈希操作基本上是为了确定要对其执行单边RDMA原子CAS操作的锁槽x,以便获取锁条目,或该槽的64位锁信息。作为示例,使用以下哈希算法确定槽x:
(UUID+RangeID/唯一标识符)→槽ID(例如,锁槽x的标识符)
在这里,RangeID是请求授权的文件范围,唯一标识符是在请求I/O进行授权读取/写入操作的情况下标识目录范围,UUID是文件或目录的唯一标识符。此外,slotID是槽x的标识符。每个槽将保持64位压缩锁结构,该锁结构将具有关于文件或目录的最小信息,并且可以使用单边RDMA CAS操作从另一节点(即接入节点)进行操作/读取。
如前所述,接入节点还维护具有锁槽y的本地哈希表,如图4所示。接入节点(例如,DPC1)的本地哈希表的锁槽y对应于在所有者节点处维护的哈希表的锁槽x。这是在原子CAS操作期间与锁槽x的值进行比较的锁槽y的值,这些值在此期间进行比较和交换。在成功执行原子CAS操作后,由锁槽y提供的64位锁条目更新为64位锁条目x。应当理解,第一接入节点DPC1和所有者节点将其相应哈希表注册到RDMA总线,该总线与相应节点的RDMA接口建立通信。这些哈希表仅应使用RDMA接口进行访问,以确保原子性。
根据本发明的另一实施例,如果锁槽x的锁条目被占用,基于单边RDMA的原子CAS操作将失败,从而导致第一接入节点采用应用锁定路径,即,根据本发明的另一实施例的基于双边RDMA的操作。但是,当存在哈希冲突时,本发明提供了关于如何标识锁槽x持有的是排他性授权还是共享授权的方案,并且相应地也标识持有该授权的接入节点,以便发起基于应用锁定路径的授权。
考虑到第一接入节点DPC1和所有者节点的上述实施例,应当理解,它们也可以反之亦然的方式实施。例如,第一接入节点DPC1可以是另一文件(F2)的所有者节点,并且在这种情况下所有者节点可以是接入节点。在一种情况下,集群100中的每个节点可以充当服务器,即文件所有者,而在另一种情况下,同一节点可以充当客户端,即DPC。
集群100包括第二接入节点DPC2,其可以与第一接入节点DPC1相同的方式实施。如图所示,类似于第一接入节点DPC1,第二接入节点DPC2可以具有向第二SMB/NFS客户端(也称为“另一”客户端节点)的逻辑接口,并且包括存储器400、支持远程直接内存访问(RemoteDirect Memory Access,RDMA)的网络接口卡(Network Interface Card,NIC)402和本地数据缓冲404。存储器400包括代理分布式锁管理器(Distributed Lock Manager,DLM)模块400-1。应当理解,第二接入节点(DPC2)还用于实施基于单边RDMA的原子CAS操作,以使用代理DLM 400-1从所有者节点获取文件的授权,如结合图3描述的。此外,第二接入节点DPC2包括NIC 402中的基于RDMA的注册存储器4021,也称为第一基于RDMA的注册存储器4021,以及经由RDMA通信总线302B与所有者节点的主RDMA接口通信的RDMA本地接口4022。RDMA注册存储器4021包括类似于图4所示的一个本地哈希表40A的本地哈希表。第二接入节点DPC2和所有者节点的相应哈希表维护在NIC卡的相应RDMA注册存储器中,该哈希表通过RDMA通信总线302B在该节点之间共享。尽管如此,第二接入节点DPC2执行第一接入节点DPC2的所有功能,并且还执行基于单边RDMA协议的原子CAS操作,以便获取存储在所有者节点中的文件的文件范围的授权。在本发明中,第二接入节点DPC2的功能在一不同的上下文中进行了说明。作为示例,第一接入节点DPC1请求存储在所有者节点中的文件(F1)的文件范围的第一授权,并获取第一授权。随后,接收来自第二SMB/NFS客户端的I/O请求的第二接入节点DPC2请求存储在所有者节点中的文件(F1)的同一文件范围的授权。第二接入节点DPC2还对所有者节点执行基于单边RDMA协议的原子比较和交换(compare-and-swap,CAS)操作。根据本发明的实施例,对在所有者节点处维护的哈希表执行单边原子CAS操作,并且根据本发明的教导获取锁槽x。但是,已获文件(F1)的文件范围的第一授权许可的第一接入节点DPC1持有第一接入节点DPC1的64位锁条目。在这种情况下,由第二接入节点DPC2执行的基于单边RDMA的原子CAS操作将失败。在失败执行原子CAS操作后,第二接入节点DPC2的代理DLM模块400-1根据本发明的其它实施例请求应用锁定路径,即双边RDMA操作。为此,现在参考图5,该图示出了本发明的两个实施例。
根据本发明的实施例,图5示出了旨在从服务器(即所有者节点)获取文件的授权的基于单边RDMA的操作(尝试锁定)的流程图,以及当基于单边RDMA的操作失败时旨在从服务器获取同一文件范围的授权的基于双边RDMA的操作(应用锁定)的流程图。在本发明上下文中,基于单边RDMA的原子CAS操作也称为图5所示的“尝试锁定”,并且双边RDMA授权操作称为“通过消息应用锁定”。此外,图5所示的DPC1、DPC2和服务器被视为与图2所示的集群100的第一接入节点DPC1、第二接入节点DPC2和所有者节点相同。因此,这些节点的结构实现方式在这里不再赘述。在本示例中,认为对于存储在服务器中的文件(F1)的文件范围,未能实现锁定,即处于图5所示的无锁状态。第一接入节点DPC1请求文件F1的文件区域(例如,0-10MB)的排它锁。第一接入节点DPC1请求文件(F1)的文件范围的授权许可,请求最小允许文件范围(例如,0-1MB)的第一授权。因此,在步骤501,根据本发明的教导,第一接入节点DPC1通过单边RDMA操作应用尝试锁定。第一接入节点DPC1对在服务器端维护的哈希表执行哈希操作,以确定锁槽x。基于单边RDMA协议的原子CAS操作成功,锁槽x为空。由第一接入节点DPC1获取锁槽x的锁条目,由服务器快速向第一接入节点DPC1授予授权。授予的授权可以用于排他性I/O操作,即图5中示例所示的写入操作。在步骤502,授权许可由第一接入节点DPC1确定为成功。现在,将文件(F1)的文件范围(0-1MB)的锁条目x授权给第一接入节点DPC1,并且可以直接对第一接入节点DPC1的本地缓存执行文件F1的相同文件范围(0-1MB)的相应I/O操作和任何后续I/O操作。随后,当第二接入节点DPC2在服务器处接收到针对文件F1的同一文件范围的相应I/O请求时,由于第一接入节点DPC1已经持有文件F1的该文件范围的授权,因此将存在原子CAS操作失败的情况。这种情况在图5中描述为场景“A”。在场景A中,当第二接入节点DPC2在步骤503通过执行基于单边RDMA协议的原子CAS操作来请求“尝试锁定”时,由于第一接入节点DPC1已经获取的锁槽x的哈希冲突,原子CAS操作将失败。因此,在步骤504,第二接入节点DPC2确定“尝试锁定”失败。此后,在步骤505,第二接入节点DPC2执行“通过消息应用锁定”,即其中,也发送有效载荷数据的双边RDMA操作,以获取文件(F1)的同一文件范围的授权。当服务器,即所有者节点从第二接入节点DPC2接收到基于授权的消息请求时,服务器节点标识当前具有授权许可的第一接入节点DPC1的信息,并且在步骤506向第一接入节点DPC1发送召回请求以召回,即发布文件(F1)的文件范围的授权。在成功执行召回后,在步骤507,服务器将向第二接入节点DPC2许可锁定。应当理解,从第二接入节点DPC2接收的基于双边RDMA的授权请求涉及请求相应I/O操作的文件的所有信息以及与第二接入节点相关联的其它信息。基于双边RDMA的授权操作涉及在所有者节点不具有当前已获授权许可的接入节点的完整信息的情况下搜索精确匹配条目,作为从所有者节点发起的召回操作的一部分。授权许可通过从服务器到第二接入节点DPC2的返回消息获得通知。一旦向第二接入节点DPC2许可授权,第一接入节点DPC1可以再次请求服务器的文件(F1)的同一文件范围的授权。场景“B”示出了第一个接入节点DPC1对共享锁执行“应用锁定”消息。由于先前将文件(F1)的文件范围排他性地授权给第二接入节点DPC2,因此必须首先召回授权。因此,在步骤509,第一接入节点DPC1在场景B中通过消息应用锁定。在步骤510,服务器通过消息向第二接入节点DPC2发送召回。在成功执行召回后,向第一接入节点DPC1授予共享授权。
根据本发明,可以支持通过用于不同客户端的排它(写)和共享(读)锁的“应用锁定”路径执行基于单边RDMA的“尝试锁定”和基于双边RDMA消息的授权。任何冲突访问都将以召回先前许可的授权而告终,除非它是来自另一客户端的同一锁条目的共享访问。将共享锁升级为排它锁将导致所有共享客户端的读缓存失效,并在稍后许可排它锁。将排它锁降级为共享锁将导致排他性客户端刷新,并在稍后授权给共享锁,随后同步进行该读取请求。在图5所示的示例中,在场景A中,第二接入节点DPC2以“通过消息应用锁定”的方式从所有者节点接收文件(F1)的特定文件范围的排他性授权许可。在场景B中,当第一接入节点DPC1对文件(F1)的同一文件范围执行应用共享锁时,所有者节点召回第二接入节点DPC2的排它锁,从而刷新第二接入节点DPC2的写入缓存。此后,向第一接入节点DPC1和第二接入节点DPC2两者授予文件(F1)的特定文件范围的共享授权。
前述描述将结合第一接入节点DPC1说明基于单边RDMA的操作,并将结合第二接入节点DPC2说明哈希冲突的情形并转移到双边RDMA操作,或者通过消息应用锁定。由第一接入节点的代理DLM模块200-1执行基于单边RDMA的操作,而由所有者节点的主DLM模块300-1许可授权。此外,由第二接入节点DPC2的代理DLM模块400-1对第二接入节点DPC2执行基于单边RDMA的CAS操作。在失败执行原子CAS操作后,第二接入节点的代理DLM 400-1执行基于双边RDMA消息的授权操作,其中,还将文件和接入节点的有效载荷数据和其它相关信息发送到所有者节点。由所有者节点的主DLM模块300-1召回第一接入节点DPC1的授权,并且在刷新第一接入节点DPC1的本地缓存的数据时,经由基于双边RDMA消息的授权向第二接入节点DPC2授予授权。在这里,假设来自第一接入节点DPC1和第二接入节点DPC2的授权请求针对同一文件范围,例如所有者节点的文件(F1)的0-1MB(R1)。但是,在另一实施例中,对第一接入节点DPC1的授权请求和随后的授权许可可能针对文件(F1)的文件范围(R1),而从第二接入节点DPC2接收的授权请求针对不同的文件范围,例如所有者节点的同一文件(F1)的2-3MB(R2)。作为示例,根据本发明的教导,第二接入节点DPC2执行基于单边RDMA的CAS操作,以获取文件(F1)的不同文件范围(R2)的授权。在基于单边RDMA的CAS操作期间,执行哈希操作,并且标识所有者节点的哈希表的槽x。槽x的锁条目已由第一接入节点DPC1获取,该第一接入节点持有所有者节点的文件(F1)的文件范围(R1)的授权许可。在这种情况下,原子CAS操作必定失败,并且第二个接入节点DPC2向所有者节点发送基于双边RDMA消息的授权请求。然后,所有者节点向第一接入节点DPC1发送授权召回消息。但是,由于授权给第一接入节点DPC1的文件范围(R1)和第二接入节点DPC2请求授权的文件范围(R2)不同,因此第一接入节点DPC1发送授权响应消息,告知所有者节点R2与R1不重叠。在这种情况下,所有者节点经由基于双边RDMA的授权响应消息向第二接入节点DPC2授予文件(F1)的文件范围(R2)的授权,并且还允许哈希表的锁槽x保存相应第一接入节点DPC1和第二接入节点DPC2的锁信息。在这种情况下,所有者节点使用RB树和冲突列表,冲突列表存储在所有者节点的存储器中。RB树和冲突列表的示例如图6a所示。如图6a所示,RB树61可以被认为具有多个节点,如61a、61b、61c,其中,每个节点对应于所有者节点的哈希表的锁条目。例如,在上述实施例中考虑的锁槽x对应于RB树61的节点61c。由于锁槽x获取第一接入节点DPC1(针对文件F1的文件范围R1)和第二接入节点DPC2(针对文件F1的文件范围R2)的锁信息,因此更新对应于RB树的节点61c的冲突列表62。根据获取锁槽x的锁信息的接入节点,冲突列表62可以具有项目62a、62b、62c,或者可以具有节点62c。在当前讨论的示例中,更新冲突列表的第一项目62a以包含锁槽x的第一64位锁信息,其中,第一64位锁信息对应于向第一接入节点DPC1授予的文件F1的范围R1的授权,以及对应于第一接入节点DPC1的进一步信息。此外,更新冲突列表的第二项目62b以包含锁槽x的第二64位锁信息,其中,第二64位锁信息对应于向第二接入节点DPC2授予的文件F1的范围R2的授权,以及对应于第二接入节点DPC2的进一步信息。在这里,进一步信息可以包括许多细节,以标识继而节点和由相应接入节点预锁定以执行与基于双边RDMA消息的授权操作相关联的相应I/O操作的文件。但是,锁槽x现在保存对应于至少两个接入节点DPC1和DPC2的锁信息,由此产生哈希冲突的情况。在这种情况下,锁槽的锁条目的数据/冲突标志的最后一位设置为1。如果来自接入节点DPC2的另一I/O请求从另一客户端到达文件(F1)的文件范围(R1/R2)进行I/O操作,并且在执行单边原子CAS操作的同时在哈希操作期间标识同一锁槽x,将发生哈希冲突,并且锁槽x的解析标志设置为1。在这种情况下,所有者节点必须解析RB树以标识对应于锁槽x的节点61c,然后从节点61c所指向的冲突列表中检索分别包含第一锁信息和第二锁信息的第一项目62a和第二项目62b。使用冲突列表,所有者节点将标识已持有文件范围的授权的实际接入节点,对于该文件范围,另一I/O请求已到达DPC2并且当前正在请求授权。随后,在标识相关接入节点,即文件(F1)的文件范围(R1)的第一接入节点DPC1和文件(F2)的文件范围(R2)的第二接入节点DPC2后,所有者节点将向所标识的接入节点发送授权召回消息。
因此,通过维护单独的树来处理哈希冲突,其中,键/节点作为槽ID,值作为向客户端(DPC)授予授权的不同文件的所有锁定范围的链表/冲突列表。该树将同时在客户端和服务器端维护。图6a所示的RB树是指服务器端和客户端RB树。具有哈希冲突的后续授权许可过程涉及检查哈希表中的冲突,检查RB树,然后将锁目添加到相应冲突列表树中,从而加速冲突过程。这将避免耗时的基于消息的过程、不同级别的串行化锁和资源树遍历。
此外,图6b示出了在客户端(即相应的DPC)和服务器端(即所有者节点)处维护的RBT树和相应冲突列表。一旦特定资源被添加到冲突树中,将在哈希表条目中标记标志以触发双边消息以获取锁,并且也标识锁条目是否在主哈希表中维护还是在冲突树中维护。因此,在授权许可过程中,如果碰巧发生哈希冲突,将触发双边消息以获取锁,解析冲突树,并为此更新标志。稍后,还将在客户端的RB树中更新类似的视图。在锁冲突的情况下,在此阶段,我们还遵循基于双边RDMA消息的召回过程。
因此,使用基于单边RDMA的原子CAS操作,可以加速I/O写入和I/O读取的文件范围的授权。以同样的方式,还可以使用在本发明中描述的相同原则原理来加速元数据I/O操作的授权以及目录I/O操作的授权。文件范围的读取I/O授权、文件范围的写入I/O授权、元数据和目录授权汇总如下:
1、写入加速授权:当在接入节点(例如,第一接入节点DPC1)处接收的I/O是写入操作,并且第一接入节点DPC1请求对应于此类I/O请求的文件范围的授权时,在本发明的上下文中,该授权可以称为写入授权。参考上述图3,写入授权用于保护写入缓存(即P-Shim中的数据缓存)的一致性。写入授权基于可以更改的范围/文件范围。在本发明中,当前范围设置为1MB。这意味着,在最佳一致性的情况下,每次向数据缓存写入1MB都将需要授权相应的(长度和偏移量)1MB。授权由P-Shim模块从授权主控制器(即位于所有者节点上的主DLM模块)获取。在现有技术机制中,NFS协议使用写入缓存授权,以最小化横向扩展NAS中写入操作的时延。仅当从NFS客户端进行异步写入时,NFS才使用写入缓存。来自客户端(DPC)的写入请求/授权可以通过使用基于单边RDMA的授权进行加速。一旦针对排他性请求的基于单边RDMA的授权,也称为“尝试锁定”通过,即成功,客户端(DPC)可以从第一写入请求开始写入本地接入节点的缓存。如果单边操作失败,则触发对所有者节点的基于双边消息的授权,也称为“应用锁定”。然后,所有者节点向持有该特定范围的授权的旧客户端(DPC)发送召回消息,即授权召回消息。将数据从旧客户端(DPC)的数据缓存刷新到后端存储节点中后,旧客户端(DPC)的DLM代理向所有者节点的主DLM回复成功。随后,主DLM向新的客户端授予该范围的授权。在特定时间间隔期间,如果对于来自不同节点的特定冲突范围存在频繁召回,则将该范围列入黑名单,并且将在进一步的固定期限内拒绝授权,从而强制所有请求进入同步路径。该授权获取逻辑通过使用基于单边RDMA的方法更快地向接入节点提供授权许可,从而提高HPC工作负载的性能,使得从第一写入请求本身能够有效地将数据写入本地接入节点缓存。然后,还可以加速对同一范围的后续写入请求。这将避免集群间的网络有效载荷,并减少客户端操作的时延。作为示例,图7示出了用于写入授权的基于单边RDMA的操作的序列图。
如图7的序列图所示,在接收到来自偏移量为0且大小为100字节的文件的写入请求时,如果接入节点(DPC)不具有授权,将在不存在冲突的情况下使用“尝试锁定”的单边快速RDMA路径,或者在存在冲突的情况下使用双边“应用锁定”路径直接请求对所有者节点的授权。如序列图所示,接入节点(DPC)的P-Shim可以首先获取要对其执行写入操作的文件的预锁定。接入节点(DPC)的DLM代理执行单边RDMA“尝试锁定”。所有者节点的DLM主控制器在许可授权之前检查是否存在任何冲突。如果不存在冲突,为“尝试锁定”路径本身中的授权块许可授权。例如在这里,由于写入来自偏移量为0且大小为100字节的文件,将向接入节点授予0-1MB的授权。如果写入跨多个授权块拆分,将许可多个授权。在获取授权后,所有后续写入都可以由接入节点的数据缓存进行缓存。此外,如图7的序列图所示,如果“尝试锁定”失败,执行“应用锁定”,即基于双边RDMA消息的授权以由接入节点获取授权。
2、读取加速授权:当在接入节点(例如,第一接入节点DPC1)处接收的I/O是读取操作,并且第一接入节点DPC1请求对应于此类I/O请求的文件范围的授权时,在本发明的上下文中,该授权可以称为读取授权。读取授权用于保护P-Shim中读取缓存的一致性。读取授权基于可以更改的范围(当前范围设置为1MB)。这意味着,在最佳一致性的情况下,每次向数据缓存读取1MB都将需要授权相应的(长度和偏移量)1MB。授权由接入节点(DPC)的P-Shim从授权主控制器(即位于所有者节点上的DLM主控制器)获取。读取操作的加速类似于如上所述的写入流程。读取流程的唯一不同之处在于锁定应用于共享模式。多个客户端可以将读取授权保持在同一范围内,直到某些节点请求排他性授权。如果在存在多个读取器时请求排他性授权,此类读取器的所有数据缓存将作为撤销消息(即授权召回消息)的一部分失效,并且将向新的客户端(新的DPC)授予排它锁。持有排他性授权的同一客户端(DPC)甚至还可以支持读取数据。如果另一客户端(另一DPC)具有读取授权请求,将在刷新数据后撤销排它锁所有者,并且该请求将失败,使得能够从后端以同步模式服务读取请求。一旦硬件可以支持超过8字节(例如,32字节或64字节)数据的原子CAS操作,多个客户端(DPC)就可以使用“尝试锁定”本身获取读取授权。可以通过使用第二“尝试锁定”请求更新客户端条目来许可使用共享模式请求同一文件的读取授权范围的所有后续客户端(DPC)。
3、元数据加速授权:iNode缓存(参考图1和图3)将更新的文件元数据保存在P-Shim中,以最小化横向扩展NAS中元数据操作的时延。在这里,元数据是指iNode元数据,例如:iNode编号、文件大小、m-time等。当NFS/SMB客户端操作更改这些属性时,P-Shim中的缓存将失效。由元数据授权确保元数据缓存的一致性。通过P-Shim缓存和元数据授权,将最小化这些元数据操作的时延。在获取最新元数据的所有操作的返回路径上,还应更新授权。一旦硬件可以支持超过8字节(例如,32字节或64字节)数据的原子CAS操作,例如文件大小和时间的文件元数据也可以存储在锁条目中。通过使用唯一的attributeID而不是rangeID来更新锁内容,并将授权类型更新为“大小”或“时间”,可以重新使用同一“尝试锁定”路径向客户端授予元数据授权。基于单边RDMA的授权路径将允许在对应于I/O操作的“尝试锁定”路径本身中原子地更新锁条目内容,从而帮助从作为CAS的一部分返回的相同内容提供后续元数据操作。
4、目录授权:目录授权将使客户端能够获取对特定目录的授权,使得客户端能够快速创建大小<8KB的小文件并将其写入本地接入节点缓存本身,而无需转到实际所有者节点。稍后,一旦缓存水印达到或文件大小超过限制,就可以将这些文件写入存储节点。通过使用唯一的attributeID而不是rangeID来更新锁内容,并将授权类型更新为“目录”,可以重新使用同一“尝试锁定”路径向客户端授予目录授权。如果“尝试锁定”路径未能许可目录授权,可以实施基于双边RDMA消息的授权,以将当前目录授权锁所有者返回给新的客户端(新的DPC)。稍后,新的客户端(新的DPC)可以直接写入请求以锁定所有者的缓存。
根据本发明的其它实施例,如果确定达到其本地缓存的存储限制,接入节点(DPC)可以发布其授权许可。在确定后,接入节点(DPC)将本地数据缓存的内容刷新到所有者节点中的文件(F1)中,并发布授权许可。本发明的这一特征也可以称为“解锁加速”。在客户端节点/接入节点(DPC)已经使用基于单边RDMA的“尝试锁定”获取对文件的特定范围的授权或对目录的授权后,还可以重新使用同一路径原子地对此执行解锁。根据另一实现方式,所有者节点可以通过将服务器哈希表中的当前锁定数据重置为空闲状态来在“尝试锁定”路径中执行解锁。由于达到水印或某些内部资源清理LRU周期,在文件I/O操作或截断操作或读取缓存逐出情况完成后,所有者节点可能会触发解锁。
根据本发明的又一实施例,还可以加速授权召回过程。在客户端节点/接入节点(DPC)已经使用基于单边RDMA的“尝试锁定”获取对文件的特定范围的授权或获取对目录的授权后,还可以重新使用同一路径原子地对此执行解锁。所有者节点可以通过将服务器哈希表中的当前锁定数据重置为空闲状态来在“尝试锁定”路径中执行解锁。如果由于某种原因,单边RDMA召回操作失败,因为DPC尚未将数据刷新到存储节点中,会触发基于双边RDMA消息的召回。在获取授权后,DPC客户端将设置脏标志,例如,相应锁槽x的64位锁条目的保留标志,然后在写入缓存时,一旦数据被刷新到存储节点中,重置该标志。该标志稍后在召回过程和读取操作期间将十分有用。作为示例,图8示出了接入节点与所有者节点之间用于加速召回过程的序列流程。在图8中描述的序列流程中。在由数字80指示的召回加速期间,服务器,即所有者节点利用DPC2执行单边RDMA召回操作,DPC2当前可能在服务器处持有文件的文件范围的授权。如果DPC2的本地缓存中的数据已清除,如数字8A所示,即本地缓存的数据已刷新到服务器的存储器中,单边RDMA路径的调用过程取得成功。
根据一种实现方式,由所有者节点执行基于单边RDMA协议的原子CAS操作,以加速授权召回过程。在一个示例中,第一接入节点DPC1持有存储在所有者节点中的文件(F1)的文件范围的授权。当DPC1已获授权许可时,所有者节点的哈希表的锁槽x由DPC1获取,并且锁槽x的64位锁目保存文件(F1)的文件范围和授权的接入节点DPC1的信息。与所有者节点的哈希表类似地,接入节点DPC1的本地哈希表的本地锁槽y最初保存64位锁条目,然后在成功执行原子CAS操作后将其更新为所有者节点的哈希表的锁槽x。已经结合图4讨论了接入节点的本地哈希表和所有者节点的哈希表。在该示例中,认为接入节点DPC1的本地哈希表中本地锁槽的数量m等于所有者节点的哈希表中锁槽的数量n,即m=n。此外,还假设保存64位锁条目的本地哈希表的锁槽ID y等于最终获取锁槽y的64位锁条目的所有者节点的哈希表的锁槽ID x,即x=y。在该实现方式中,所有者节点通过执行哈希操作来执行基于单边RDMA协议的原子CAS操作,以标识对应于第一接入节点DPC1在接收到授权许可时获取的锁槽x的本地槽y。所有者节点获取本地锁槽y的64位锁信息,并从中检索脏标志的值。如果脏标志的标志值为1,所有者节点确定接入节点的本地数据缓存DPC1的内容已刷新到所有者节点的存储器中。在这种情况下,由于脏标志已由相应的接入节点DPC1设置为1,因此所有者节点召回已授权给接入节点DPC1的文件范围的授权。
再次参考图8,如果由数字8B指示的接入节点DPC2的本地缓存的数据未清除,在步骤802,服务器通过消息执行召回,即基于双边消息的召回操作。以上述同一示例为例,由所有者节点执行基于单边RDMA的召回操作并获取本地锁槽y的64位锁信息时,如果确定脏标志的标志值为0,所有者节点确定接入节点DPC1的本地数据缓存的内容尚未刷新到所有者节点的存储器中。在这种情况下,由于由相应接入节点DPC1设置的脏标志仍然为0,因此所有者节点针对文件(F1)的第一文件范围向接入节点DPC1发送双边授权召回消息,以便从第一接入节点DPC1召回第一文件范围的第一授权。
此外,如图8所示,在步骤802通过消息召回后,在成功召回授权后,在步骤803,接入节点DPC2向服务器发送返回消息。在图8所示的下一个示例中,即由数字81指示的由接入节点DPC1执行的写入I/O操作,当DPC1当前持有授权时,在步骤804对其本地缓存执行写入操作,并且设置脏标志,即将其设置为0。在步骤805,接入节点DPC1将本地缓存的写入内容刷新到服务器的存储器中,并且在刷新后,在步骤806,将脏标志设置为1,或者换句话说,在刷新后,设置清除标志。以相应的方式,对于由数字82指示的由接入节点DPC1执行的读取I/O操作,当DPC1持有授权时,在步骤807对其本地缓存执行读取操作。在所示的示例中,示出了DPC1对特定文件F1的文件范围4-8k执行读取操作。在步骤808,另一写入I/O操作来自DPC2,而DPC1持有读取授权,该写入I/O操作对应于同一文件F1的文件范围4-16K。现在,写入I/O的文件范围4-8k与由DPC1持有的读取授权的文件范围4-8k冲突。因此,在本发明的上下文中,在步骤809,触发服务器以由单边RDMA执行召回。这里的理念是避免冗长的召回过程,并且通过单边操作实现加速。在步骤804至步骤806,在DPC1完成写入后,缓存将具有最新数据,并且这可以通过检查标志来服务于例如4-8K的读取请求。从DPC2写入4-16K的数据发生冲突时,数据将在DPC2缓存中更新,并且DPC1的缓存不会称为最新缓存,因为它在召回期间失效。一旦DPC2完成写入缓存,DPC1的后续读取请求就可以检查脏标志值,并将数据从后端提取到其缓存。根据该可选优化,只有冲突写入器才会触发召回。
鉴于在本发明中公开的各种实施例,在前述描述中对由相应的第一接入节点DPC1、第二接入节点DPC2和所有者节点在HPC集群(如图2所示的集群100)中执行的方法进行了描述。应当理解,DPC1、DPC2和所有者节点与图2所示内容相同。此外,还应当理解,DPC1、DPC2和所有者节点可以与结合图5至图8描述的各个实施例相同。在本发明中使用术语“第一”、“第二”、“第三”等来按顺序区分接入节点处的传入I/O操作与由所有者节点许可的授权。类似地,可以使用术语“下一个”、“后续”、“前者”和“后者”、“不同”来按顺序区分在所有者节点处接收的初始授权请求与未来授权请求。这些术语还可以用于由所有者节点授权的文件的文件范围。
图9示出了根据本发明的一实施例提供的授权获取方法900。授权获取方法可以在高性能计算(High Performance Computing,HPC)集群中执行,该集群包括至少一个所有者节点和至少两个接入节点(DPC1、DPC2)。在步骤902,第一接入节点DPC1接收来自客户端节点的第一I/O请求,该第一I/O请求标识存储在所有者节点中的文件(F1)的文件区域。在这里,客户端节点是指图3所示的SMB/NFS客户端。在这里,假设到目前为止,文件区域处于无锁状态,因此在与存储在所有者节点中的文件(F1)的文件区域相关的该第一I/O请求之前没有I/O请求待决。为了清楚起见,类似于本发明的其它示例,文件称为文件(F1)。文件区域可以是0-10MB的文件大小。但是,授权始终针对最小允许文件范围获取,并且必须针对由客户端节点锁定的整个文件区域的每个此类最小文件范围获取。目前,最小允许文件范围可以被认为1MB的文件范围。因此,必须针对文件F1的0-10MB文件区域中的每1MB请求授权。在步骤904,DPC1对所有者节点执行基于单边远程直接内存访问(Remote Direct MemoryAccess,RDMA)协议的原子比较和交换(compare-and-swap,CAS)操作,以从文件F1的文件区域(例如,0-10MB)获取第一文件范围(例如,0-1MB)的授权。在一个实现方式中,可以对所有者节点的RDMA注册存储器中维护的哈希表执行基于单边RDMA协议的原子CAS操作。可以通过与图2和图4相关的上述实施例理解哈希表。如果在由第一接入节点DPC1执行的哈希操作期间确定哈希表的特定锁槽x为空,即未锁定,原子CAS操作是成功的。因此,在步骤906,在成功执行原子CAS操作后,DPC1接收第一文件范围的第一授权许可。这里的术语“第一”用于授权许可,以暗示第一文件范围已被首先授权给第一接入节点,并且在第一授权之前没有其它接入节点持有授权。通过在本发明中使用的示例,假设对于存储在所有者节点中的文件F1的文件区域0-10MB,第一I/O请求(排他性或共享)已经到达DPC1。根据本发明的一个实施例,第一接入节点DPC1预锁定第一文件范围0-1MB。然后,DPC1请求从文件F1的文件区域0-10MB授权第一文件范围0-1MB。在成功执行原子CAS后,将第一个文件范围0-1MB授权给DPC1。在接收第一文件范围0-1MB的第一授权后,由第一接入节点DPC1锁定第一文件范围0-1MB,以避免I/O与第一文件范围存在任何冲突。因此,如果第一I/O是写入操作,在接收授权后,第一接入节点DPC1锁定文件范围,使得由另一接入节点执行的任何其它写入不会与文件F1的同一文件区域的同一文件范围0-1MB存在任何冲突。
此外,在步骤908,DPC1在DPC1的本地缓存中创建的本地文件的第一文件范围内执行第一I/O请求。因此,根据本发明的教导,使用基于单边RDMA的方法可以更快地向接入节点授予授权,使得能够从第一写入请求本身开始有效地将数据写入本地接入节点缓存。然后,也可以加速对同一范围的后续写入请求以及对同一范围或无冲突范围的读取请求。为此,图11示出了由第一接入节点DPC1执行的方法1100,其中,在步骤1102,DPC1接收来自客户端节点的第二I/O请求,该第二I/O请求标识授权给DPC1的第一文件范围内的子文件范围。例如,对应于同一文件范围(0-10MB)的第二I/O请求到达DPC1,并且由于第一文件范围(0-1MB)已授权给第一接入节点,因此对应于同一文件范围(0-1MB)的第二I/O请求(读取/写入)可以在DPC1本地执行,而无需向所有者节点发送对该文件范围(0-1MB)的授权请求。因此,在步骤1104,已经持有根据结合图9讨论的实施例的第一文件范围的授权的DPC1在DPC1的本地缓存中创建的本地文件的子文件范围内执行第二I/O请求。
根据另一实施例,图10示出了根据结合图9讨论的实施例已经接收到第一文件范围的第一授权许可的第一接入节点DPC1执行的方法1000。在步骤1002,DPC1对所有者节点中维护的哈希表执行基于单边RDMA协议的原子CAS操作,以从文件(F1)的文件区域获取后续文件范围的授权。作为示例,在获取第一文件范围0-1MB的授权后,DPC1请求对后续文件范围的授权,例如对应于从客户端节点接收的第一I/O请求的同一文件区域0-10MB的1-2MB。在步骤1004,在成功执行原子CAS操作后,DPC1接收后续文件范围的后续授权许可。在这里,根据本发明的教导,还执行基于单边RDMA协议的原子CAS操作,其中,从哈希表标识锁槽,并且对特定锁槽执行原子CAS操作。在成功执行原子CAS操作后,向DPC1授予该后续文件范围的授权。在步骤1006,在DPC1的本地数据缓存中的本地文件的后续文件范围内执行第一I/O请求。以上面讨论的同一示例为例,如果后续授权请求针对文件F1的1-2MB,在许可后续授权后,在DPC1的本地数据缓存中创建的本地文件的1-2MB文件范围内执行第一I/O请求。因此,由接入节点针对每个最小文件范围请求并锁定授权,以在本地执行I/O操作,从而提高整体集群速度和性能。
根据本发明的实施例,根据结合图9至图11讨论的实施例,可以在以下至少一项中召回对第一接入节点DPC1的第一授权许可和/或向其授予的后续授权。在第一种情况下,如果第一I/O执行完成,可以加速授权召回,并且接入节点可以将其本地缓存的内容刷新到所有者节点的存储器中,即刷新到所有者节点的文件F1的文件区域中。假设针对授权给第一接入节点DPC1的每个文件范围完成I/O操作。在刷新后,第一接入节点可以在其本地哈希表的本地槽的锁条目中设置清除标志=0或脏标志=1。当对应于来自另一接入节点(例如,第二接入节点DPC2)的另一I/O请求的授权请求到达所有者节点时,所有者节点还可以执行单边RDMA操作以召回授权请求,检索对应于同一文件区域的本地锁槽的锁条目,检查脏标志的值,并相应地发布第一接入节点的授权。在另一种情况下,当对应于来自另一接入节点(例如,第二接入节点DPC2)的另一I/O请求的授权请求到达所有者节点时,所有者节点可以向第一接入节点DPC1发送授权召回消息,并且考虑到其它授权请求是否是针对同一文件范围的冲突I/O请求,强制发布对DPC1的授权。在又一种情况下,如果第一接入节点DPC1的本地缓存已满,即达到本地数据缓存的存储限制,DPC1自动将本地数据缓存的内容刷新到所有者节点的存储器中,即自动将本地文件的内容刷新到所有者节点的文件F1中。在刷新后,第一接入节点DPC1发布对刷新到所有者节点的存储器中的文件范围的授权许可。为此,图12和图13示出了本发明的两个此类相应的实施例。
图12示出了由持有存储在所有者节点中的文件F1的第一文件范围的第一授权许可的第一接入节点DPC1执行的方法1200。在步骤1202,DPC1接收来自所有者节点的关于授权给DPC1的第一文件范围的授权召回消息。在本发明的一个此类实现方式中,授权召回消息是通过本发明说明的双边授权召回消息。在接收到授权召回消息后,在步骤1204,DPC1将本地数据缓存的内容刷新到所有者节点中的文件(F1)中。在此阶段之前,与第一文件范围有关的所有I/O操作都是针对在DPC1的本地数据缓存中创建的本地文件进行的。随后,在完成刷新阶段后,在步骤1206,DPC1发布第一文件范围的第一授权许可。
图13示出了由持有存储在所有者节点中的文件(F1)的第一文件范围的第一授权许可的第一接入节点DPC1执行的方法1300。在步骤1302,DPC1确定已经达到本地数据缓存的存储限制。在确定后,在步骤1304,DPC1将本地数据缓存的内容刷新到所有者节点中的文件(F1)中。在此阶段之前,与第一文件范围有关的所有I/O操作都是针对在DPC1的本地数据缓存中创建的本地文件进行的。随后,在完成刷新阶段后,在步骤1306,DPC1发布第一文件范围的第一授权许可。
图14示出了由第一接入节点DPC1对哈希表执行基于单边RDMA协议的原子CAS操作的方法1400,该DPC1请求第一文件范围的授权许可,如结合图9所示的实施例所讨论的。在接收到来自客户端节点的第一I/O操作后,在步骤1402,DPC1从第一I/O请求中检索第一文件范围(RangeID)以及文件或目录的唯一标识符(unique identifier,UUID)。在这里,文件或目录对应于所有者节点的文件F1。在步骤1404,使用RangeID和UUID,DPC1执行哈希操作,以从所有者节点的RDMA注册存储器中维护的哈希表中可用的1到n个锁槽中标识锁槽,例如结合上面已经讨论的图4所示的示例的上下文中标识的锁槽x。在步骤1404,DPC1对锁槽x执行基于单边RDMA协议的原子CAS操作。通过比较存储在DPC1的RDMA注册存储器中的本地哈希表的相应本地槽y的值来执行该原子CAS操作,并基于该哈希操作来标识锁槽x。在成功执行原子CAS操作后,由DPC1获取锁槽x的锁条目。在这里,将本地槽y的锁条目更新为锁槽x的锁条目。锁条目或锁信息是64位数据,其至少包括以下内容之一:
·4字节客户端ID标志,其唯一地标识授权的第一接入节点(DPC1);
·2字节标识符标志,用于存储对应于第一I/O请求的文件或目录的唯一标识符(unique identifier,UUID);
·1字节范围ID标志,其标识对应于第一I/O请求的第一文件范围;
·1位脏标志,其设置为0以标识本地数据缓存的内容尚未刷新到所有者节点中的文件(F1)中;
·1位模式标志,其设置为1以标识第一授权许可已共享,或者设置为0以标识第一授权许可是排他性的;
·1位数据标志,其设置为0以标识锁槽x不存在哈希冲突;
·2位授权类型标志,用于标识第一授权许可是数据类型授权还是元数据类型;以及
·1位解析类型标志,其设置为0以指示槽x尚不需要进行解析。
第一接入节点DPC1在DPC1的RDMA注册存储器中维护本地哈希表。该本地哈希表包括1到m个本地锁槽,1到m个本地锁槽的每个本地锁槽y对应于所有者节点中的哈希表的1到n个锁槽的锁槽x,其中,锁槽x的相应锁槽y提供要在成功执行操作后进行比较和更新的64位锁信息。
当DPC1将本地数据缓存的内容刷新到所有者节点中的文件(F1)中时,将脏标志设置为1。在设置脏标志后,第一接入节点DPC1发布第一授权许可。此外,当正在对由第一接入节点DPC1和另一接入节点(例如,DPC2)获取的哈希表的槽x进行解析时,将槽x的解析标志设置为1。
根据本发明的另一实施例,图15示出了在第一接入节点DPC1持有存储在所有者节点中的文件(F1)的第一文件范围的第一授权许可的情况下,第二接入节点DPC2在HPC集群中执行的授权获取方法。在这里,应当理解,第一接入节点DPC1持有对应于图9所示方法的第一文件范围的第一授权许可,并且至少包括第一接入节点DPC1、第二接入节点DPC2和所有者节点的HPC集群在图9和图15所示的实施例中是常见的。
如图15所示,在步骤1502,第二接入节点DPC2接收来自另一客户端节点的第三I/O请求,该第三I/O请求也标识存储在所有者节点中的文件(F1)的第一文件区域(F1)。在这里,另一客户端节点是指向DPC2发送I/O请求的SMB/NFS客户端,该SMB/NFS客户端不同于与第一接入节点DPC1通信的SMB/NFS客户端。在此阶段的第一文件区域不像I/O请求那样处于无锁状态,并且由第一接入节点DPC1锁定。作为示例,第一文件区域是已经在第一接入节点处接收到第一I/O请求的文件(F1)的0-10MB。此外,对应于第一I/O请求,文件(F1)的第一文件范围(例如,0-10MB中的0-1MB)已授权给DPC1。
第二接入节点DPC2不了解授权给第一接入节点DPC1的文件(F1)的同一文件区域的文件范围的授权。此外,假设文件(F1)的文件区域(0-10MB)处于无锁状态,并且根据本发明的教导,根据基于单边RDMA的授权协议执行原子CAS操作,并请求授权文件(F1)的文件区域(0-10MB)的最小允许文件范围,该授权请求向实际文件(F1)的所有者节点提出。同样,DPC2对所有者节点的RDMA注册存储器中维护的哈希表执行原子CAS操作,以从文件F1的文件区域(0-10MB)获取第一文件范围(例如,0-1MB)的第二授权。术语授权之前的前缀“第二”是为了区别于针对文件(F1)的同一文件区域(0-10MB)的同一文件范围(0-1MB)向第一接入节点DPC1授予的第一授权。根据本发明的所述实施例,对在所有者节点处维护的哈希表执行基于单边RDMA的CAS操作。因此,DPC2从在DPC2处接收的第三I/O请求中检索文件范围(RangeID)以及文件或目录的唯一标识符(unique identifier,UUID)。该步骤可以被视为在执行基于单边RDMA的原子CAS操作时由DPC1执行的步骤1402。使用RangeID和UUID,DPC2执行哈希操作,以从所有者节点的RDMA注册存储器中维护的哈希表中可用的1到n个锁槽中标识锁槽。在这种情况下,同样在哈希操作期间,标识锁槽x,并且DPC2对锁槽x执行基于单边RDMA协议的原子CAS操作。如果在由DPC2执行的哈希操作期间确定的哈希表的特定锁槽x已经为空,即未锁定,原子CAS操作是成功的。但是,由于当前情况下锁槽不为空,并且持有针对第一文件范围(即0-1MB)的第一接入节点DPC1的锁密钥条目,因此原子CAS操作失败。在步骤1506,DPC2检测失败的原子CAS操作。根据本发明的教导,当“尝试锁定”或基于单边RDMA协议的授权请求失败时,在步骤1508,DPC2执行基于双边RDMA协议的授权请求,即“应用锁定”,也称为“通过消息应用锁定”,以便获取第一文件范围(0-1MB)的第二授权。此类第二授权请求伴随着对所有者节点的第三I/O请求。当在所有者节点处接收到具有相应请求的此类基于消息的授权请求时,可以强制召回第一接入节点DPC1的第一授权许可以及随后向第二接入节点DPC2授予第二授权许可。但是,根据本发明的教导,在考虑召回授权许可之前,所有者节点可以考虑在所有者节点处接收的I/O请求和先前的授权许可(共享或排他性)。
根据本发明的其它实施例,图16示出了由所有者节点在接收基于双边RDMA的授权请求以及从DPC2接收第三I/O请求时执行的方法,该方法已经结合图15进行了讨论。在该实施例中,认为针对第一文件范围(0-1MB)向第一接入节点DPC1授予的第一授权许可是排他性许可,即第一I/O请求支持排他性文件操作或排他性文件元数据操作。如图16所示,在步骤1602,所有者节点从文件(F1)的文件区域接收对应于第一文件范围的基于双边RDMA协议的授权请求,以及从第二接入节点DPC2接收第三I/O请求。在接收到基于双边消息的授权请求后,在步骤1604,所有者节点从哈希表标识锁槽x的64位锁信息,从而标识第一接入节点DPC1持有对文件(F1)的第一文件范围的第一授权许可。所有者节点还可以类似地从所有者在来自DPC2的基于双边RDMA的授权请求期间接收的第三I/O请求中检索文件范围和文件或目录的唯一标识符。所有者节点可以执行其哈希操作,以标识持有对应于第一文件范围的锁条目的锁槽x。在标识锁槽x后,所有者节点检索锁槽x的锁条目,从而获取DPC1当前持有锁槽x的锁条目并且已被授予第一文件范围(0-1MB)的第一授权许可的信息。在步骤1606,所有者节点针对文件(F1)的第一文件范围向第一接入节点DPC1发送授权召回消息。DPC1接收授权召回消息,检查本地哈希表的相应本地槽y的锁条目,并标识其持有第一文件范围(0-1MB)的排他性第一授权许可,并且脏标志当前为1,即本地数据缓存尚未刷新到接入节点的存储器中。由于第一接入节点DPC1必须遵守从所有者节点接收的授权召回消息并撤销其对第一文件范围(0-1MB)的排他性权限。因此,在步骤1608,DPC1将本地数据缓存的内容刷新到所有者节点中的文件(F1)中。在完成刷新后,DPC1将本地锁槽y的脏标志设置为0,该本地锁槽y还更新为所有者节点的哈希表的锁槽x。此外,在步骤1610,DPC1发布存储在所有者节点中的文件(F1)的第一文件范围(0-1MB)的第一授权许可。随后,在发布第一授权许可后,所有者节点向第二接入节点DPC2授予第一文件范围(0-1MB)的第二授权许可。第二授权许可的授予采用基于双边RDMA消息的授权许可的形式。在这里讨论的实施例中,第三I/O请求可以支持排他性写入或共享读取操作。在任何一种情况下,DPC1都必须放弃其对第一文件范围(0-1MB)的排他性授权。
根据本发明的另一实施例,图17示出了由所有者节点在接收基于双边RDMA的授权请求以及从DPC2接收第三I/O请求时执行的方法,该方法已经结合图15进行了讨论。在该实施例中,认为针对第一文件范围(0-1MB)向第一接入节点DPC1授予的第一授权许可是共享许可,即第一I/O请求支持共享文件操作或共享文件元数据操作。否则,当在DPC2处接收的第三I/O请求还支持共享文件操作或共享元数据操作时,图17所示的方法可以实现为本发明的实施例之一。如图17所示,在步骤1702,所有者节点从文件(F1)的文件区域接收对应于第一文件范围的基于双边RDMA协议的授权请求,以及从第二接入节点DPC2接收第三I/O请求。在接收到基于双边消息的授权请求后,在步骤1704,所有者节点从哈希表标识锁槽x的64位锁信息,从而标识第一接入节点DPC1持有对实际文件(F1)的第一文件范围的第一授权许可。所有者节点还可以类似地从所有者在来自DPC2的基于双边RDMA的授权请求期间接收的第三I/O请求中检索文件范围和文件或目录的唯一标识符。所有者节点可以执行其哈希操作,以标识持有对应于第一文件范围的锁条目的锁槽x。在标识锁槽x后,所有者节点检索锁槽x的锁条目,从而获取DPC1当前持有锁槽x的锁条目并且已被授予第一文件范围(0-1MB)的第一授权许可的信息。在步骤1706,所有者节点针对文件(F1)的第一文件范围向第一接入节点DPC1发送授权召回消息。DPC1接收授权召回消息,检查本地哈希表的相应本地槽y的锁条目,并标识其持有共享读取授权作为第一文件范围(0-1MB)的第一授权许可。在步骤1707,在接收到授权召回消息后,DPC1标识第三I/O请求也支持对来自文件(F1)的文件区域的第一文件范围执行共享文件操作。在步骤1710,DPC1向所有者节点发送授权响应消息,该授权响应消息标识来自文件的文件区域的第一文件范围可以由第一接入节点DPC1和第二接入节点DPC2共享读取。在从所有者节点接收到此类授权响应消息后,在步骤1712,向DPC2授予来自文件(F1)的文件区域的第一文件范围的第二授权许可。第二授权许可的授予采用基于双边RDMA消息的授权许可的形式。
根据本发明的其它实施例,图18示出了根据图9所示的实施例,当第一接入节点DPC1可以持有所有者节点的文件(F1)的文件区域(0-10MB)的第一文件范围(0-1MB)的第一授权许可时,由第二接入节点(DPC2)执行的另一授权获取方法,其中,对应于第一I/O请求的文件区域(0-10MB)在第一接入节点DPC1处接收。如图18所示,在步骤1802,第二接入节点DPC2接收来自另一客户端节点的第四I/O请求,该第四I/O请求也标识存储在所有者节点中的文件(F1)的不同的第一文件区域(F1)。在这里,又一客户端节点是指向DPC2发送第五I/O请求的SMB/NFS客户端,该SMB/NFS客户端不同于与第一接入节点DPC1通信的SMB/NFS客户端。但是,向第二接入节点DPC2发送第五I/O请求的又一客户端节点可以与向DPC2发送第四I/O请求的客户端节点相同。参照第二接入节点DPC2,可以认为图18所示的实施例类似于哈希冲突和转移到基于授权消息的应用锁定路径的情况。以前述描述中提供的同一示例为例,所有者节点的文件(F1)的不同文件范围例如是2-3MB。向DPC1授予同一文件(F1)的第一文件范围0-1MB,但尚未向DPC1授权同一文件(F1)的文件范围2-3MB,或者DPC1尚未请求授权。这是因为即使当对应于在DPC1处接收的第一I/O请求的文件区域(0-10MB)可能被客户端节点预锁定时,对于要在接入节点处本地处理的I/O,仅针对最小允许文件范围(当前高达1MB)请求授权。在该实施例中,所有者节点可以向第二接入节点DPC2授予文件区域(0-10MB)的不同文件范围的授权,而向DPC1授予文件区域(0-10MB)的第一文件范围的授权。此外,在这种情况下,哈希表的锁槽x可以使用RB树和冲突列表保存相应第一接入节点DPC1和第二接入节点DPC2的锁信息,冲突列表存储在所有者节点的存储器中。再次参考图18,在步骤1804,DPC2对所有者节点执行基于单边远程直接内存访问(Remote Direct MemoryAccess,RDMA)协议的原子比较和交换(compare-and-swap,CAS)操作,以获取文件(F1)的不同文件范围的新授权,而不向文件(F1)发送第四I/O请求。术语授权之前的前缀“新”是为了区别于针对文件(F1)的同一文件区域(0-10MB)的文件范围(0-1MB)向第一接入节点DPC1授予的第一授权。根据本发明的所述实施例,对在所有者节点处维护的哈希表执行基于单边RDMA协议的原子CAS操作。因此,DPC2从在DPC2处接收的第四I/O请求中检索文件范围(RangeID)以及文件或目录的唯一标识符(unique identifier,UUID)。使用RangeID和UUID,DPC2执行哈希操作,以从所有者节点的RDMA注册存储器中维护的哈希表中可用的1到n个锁槽中标识锁槽。在这种情况下,同样在哈希操作期间,标识锁槽x。由于锁槽在服务器哈希表中受限,因此标识同一锁槽x;由于x对应于所有者节点中的文件(F1)的文件区域(0-10MB),因此还可以在哈希操作期间返回x。DPC2对锁槽x执行基于单边RDMA协议的原子CAS操作。由于特定锁槽x的锁条目已由第一接入节点DPC1针对文件(F1)的文件区域(0-10MB)的第一文件范围(0-1MB)获取,原子CAS操作将再次失败。在步骤1806,DPC2检测失败的原子CAS操作。根据本发明的教导,在“尝试锁定”或基于单边RDMA协议的授权请求失败时,在步骤1808,DPC2执行基于双边RDMA协议的授权请求,即“应用锁定”以获取不同文件范围(2-3MB)的新授权。此类新授权请求伴随着对所有者节点的第四I/O请求。
继续图18的实施例,根据本发明的另一实施例,图19示出了由所有者节点在接收基于双边RDMA的授权请求以及从DPC2接收第四I/O请求时执行的方法。该实施例示出了在锁槽x中出现的哈希冲突的示例。如图19所示,在步骤1902,所有者节点从文件(F1)的文件区域接收对应于不同文件范围(2-3MB)的基于双边RDMA协议的授权请求,以及从第二接入节点DPC2接收第三I/O请求。在接收到基于双边消息的授权请求后,在步骤1904,所有者节点从哈希表标识锁槽x的64位锁信息,从而标识第一接入节点DPC1持有对文件(F1)的第一文件范围的第一授权许可。所有者节点还可以类似地从所有者在来自DPC2的基于双边RDMA的授权请求期间接收的第四I/O请求中检索不同文件范围和文件或目录的唯一标识符。所有者节点可以执行其哈希操作,以标识持有对应于同一文件区域(0-10MB)的第一文件范围(0-1MB)的锁条目的锁槽x。在标识锁槽x后,所有者节点检索锁槽x的锁条目,从而获取DPC1当前持有锁槽x的锁条目并且已被授予对应于第四I/O请求的同一文件区域(0-10MB)的第一文件范围(0-1MB)的第一授权许可的信息。在步骤1906,所有者节点针对文件(F1)的第一文件范围(0-1MB)向第一接入节点DPC1发送授权召回消息。向DPC1发送的授权召回消息还可以包含关于对同一文件范围(0-10MB)的不同文件区域(2-3MB)的新授权请求的信息。DPC1接收授权召回消息,检查本地哈希表的相应本地槽y的锁条目,并标识其持有第一文件范围(0-1MB)的第一授权,尚未持有针对文件(F1)的文件区域(0-10MB)的不同文件范围(2-3MB)的第一授权。在步骤1908,在接收到授权召回消息后,DPC1基于授权召回消息标识第四I/O请求支持与来自文件(F1)的文件区域(0-10MB)的第一文件范围(0-1MB)不重叠的不同文件范围(2-3MB)。因此,在步骤1910,DPC1向所有者节点发送授权响应消息而不是发布第一授权许可,该授权响应消息标识来自文件(F1)的文件区域(0-10MB)的不同文件范围(2-3MB)与来自文件(F1)的文件区域(0-10MB)的第一文件范围(0-1MB)不重叠。在从DPC1接收到此类授权响应消息后,在步骤1912,向DPC2授予来自文件(F1)的文件区域(0-10MB)的不同文件范围(2-3MB)的新授权许可。第二授权许可的授予采用基于双向消息的授权许可的形式。向第二接入节点DPC2授予不同文件范围的新授权许可的步骤包括由所有者节点将锁槽x的64位锁信息的1位数据标志更新为1,以标识锁槽存在哈希冲突。此外,所有者节点还更新存储在所有者节点的存储器中的冲突列表。冲突列表的第一项目包含锁槽x的第一64位锁信息,其中,第一64位锁信息对应于从第一接入节点DPC1接收的第一I/O授权请求,以及对应于第一接入节点DPC1的进一步信息;冲突列表的第二项目包含锁槽x的第二64位锁信息,其中,第二64位锁信息对应于从第二接入节点DPC2接收的第四I/O授权请求,以及对应于第二接入节点DPC2的进一步信息。DPC1持有第一文件范围的第一授权许可,DPC2持有不同文件范围的新授权许可,第一范围和不同的文件范围对应于所有者节点的文件区域(F1)。冲突列表对应于包括多个节点的树的节点。多个节点中的每个节点对应于所有者节点的哈希表的1到n个锁槽的锁槽。这已结合图6a和图6b进行了描述。
根据本发明的另一实施例,根据结合图19的实施例公开的教导,图20示出了由于所有者节点的哈希表的锁槽x被两个接入节点DPC1和DPC2获取而引起的哈希冲突的情况。参考图20,公开了当所有者节点的文件(F1)的文件区域(0-10MB)的第一文件范围(0-1MB)和不同文件范围(2-3MB)当前分别授权给DPC1和DPC2,并且对于授权给DPC1的第一文件范围和授权给DPC2的不同文件范围两者获取锁槽x时,由第二接入节点DPC2执行的方法2000。如图20所示,在步骤2002,第二接入节点DPC2接收来自又一客户端节点的第五I/O请求,该第五I/O请求也标识存储在所有者节点中的文件(F1)的文件区域(0-10MB)。对应于第五I/O请求的文件区域(0-10MB)再次与在DPC1处接收的第一I/O请求对应的文件区域(0-10MB)相同,如结合图9描述的。根据本发明的教导,在步骤2004,DPC2对所有者节点执行基于单边RDMA协议的原子CAS操作,以从文件(F1)的文件区域获取第一文件范围的第三授权,而不向DPC1发送第五I/O请求。对所有者节点的RDMA注册存储器中维护的哈希表执行原子CAS操作,以从文件F1的文件区域(0-10MB)获取第一文件范围(即0-1MB)的第三授权。术语授权之前的前缀“第三”是为了区别于向第一接入节点授予的第一授权和向第二接入节点授予的第二授权,如结合图9和图15描述的。根据本发明的所述实施例,对在所有者节点处维护的哈希表执行基于单边RDMA的CAS操作。因此,在步骤2006,DPC2从在DPC2处接收的第四I/O请求中检索文件范围(RangeID)以及文件或目录的唯一标识符(unique identifier,UUID)。在步骤2008,使用RangeID和UUID,DPC2执行哈希操作,以从所有者节点的RDMA注册存储器中维护的哈希表中可用的1到n个锁槽中标识锁槽。标识同一锁槽x。在步骤2010,DPC2对锁槽x执行基于单边RDMA协议的原子CAS操作。由于特定锁槽x的锁条目现在已经在RB树中保存进一步打印到冲突列表的锁条目,原子CAS操作必定会再次失败。在步骤2012,DPC2检测失败的原子CAS操作。根据本发明的教导,在“尝试锁定”或基于单边RDMA协议的授权请求失败时,在步骤2012,DPC2执行基于双边RDMA协议的授权请求,即“应用锁定”以获取第一文件范围的第三授权。此类第三授权请求伴随着对所有者节点的第五I/O请求。
继续图20的实施例,根据本发明的另一实施例,图21示出了由所有者节点在接收基于双边RDMA的授权请求以及从DPC2接收第五I/O请求时执行的方法。该实施例示出了在锁槽x中出现的哈希冲突的示例。如图21所示,在步骤2102,所有者节点从文件(F1)的文件区域接收对应于第一文件范围(0-1MB)的基于双边RDMA协议的授权请求,以及从第二接入节点DPC2接收第五I/O请求。在接收到基于双边RDMA消息的授权请求后,在步骤2104,所有者节点从哈希表标识锁槽x的64位锁信息,从而检测锁槽x中的哈希冲突。但是,锁槽x现在保存对应于两个接入节点DPC1和DPC2的锁信息,由此产生哈希冲突的情况。在这种情况下,锁槽的锁条目的数据/冲突标志的最后一位设置为1。因此,在该步骤中,由所有者节点检测哈希冲突。如前所述,所有者节点将不得不解析RB树,以标识锁槽x的相应树节点,然后参考存储在所有者节点的存储器中的相应冲突列表来标识接入节点和授权给由锁槽x获取的相应接入节点的文件范围的所有信息。为此,在步骤2106,所有者节点对包括多个节点的树进行解析,以标识对应于锁槽x的节点。在步骤2108,所有者节点检索所标识节点的冲突树的第一项目的信息和第二项目的信息。这些特征已经在图6a和图6b的示例中公开。在获取关于授权接入节点的所有信息后,在步骤2110,所有者节点基于冲突列表的第一项目中包含的第一64位锁信息以及对应于第一接入节点DPC的进一步信息,确定向第一接入节点DPC1授予来自文件(F1)的文件区域(0-10MB)的第一文件范围(0-1MB)的第一授权许可。在步骤2112,所有者节点针对文件(F1)的第一文件范围(0-1MB)向第一接入节点DPC1发送授权召回消息。DPC1接收授权召回消息,检查本地哈希表的相应本地槽y的锁条目,并标识其持有文件(F1)的文件区域(0-10MB)的第一文件范围(0-1MB)的第一授权。在步骤2114,DPC1将本地数据缓存的内容刷新到所有者节点中的文件(F1)中。此外,在步骤2116,DPC1发布存储在所有者节点中的文件(F1)的第一文件范围(0-1MB)的第一授权许可。随后,在发布第一授权许可后,在步骤2118,所有者节点向第二接入节点DPC2授予第一文件范围(0-1MB)的第三授权许可。第三授权许可的授予采用基于双向消息的授权许可的形式。
根据本发明的另一实施例,图22示出了由所有者节点对第一接入节点DPC1的RDMA注册存储器中维护的本地哈希表执行基于单边RDMA协议的原子CAS操作。如前所述,所有者节点可以加速召回由所有者节点向接入节点授予的授权。通过这里所示的示例,假设根据图9所示的实施例,第一接入节点DPC1已被授予存储在所有者节点中的文件的第一文件范围的第一授权。此外,参考图4,已经阐明接入节点DPC1还可以在其自己的RDMA注册存储器中存储本地哈希表。该本地哈希表包括1到m个本地锁槽,并且本地哈希表的每个本地锁槽y对应于存储在所有者节点的RDMA注册存储器中的哈希表的锁槽x,其中,所有者节点的哈希表可以包括1到n个锁槽。尽管在其它实现方式中,m的值可以不同于n的值,因为它们的表可以根据集群节点的服务器端和客户端的存储器而具有不同的大小,但是,在示出加速授权召回的该实现方式中,假设m=n。因此,所有者节点的本地哈希表和相应哈希表的大小是相同的。此外,假设本地锁槽y=锁槽x。换句话说,持有文件的文件区域的特定文件范围的锁条目的本地锁槽y在槽ID方面与相应锁槽x相同,其中,锁槽x获取本地锁槽y的锁条目。图22a举例说明了由所有者节点对所有者节点的哈希表执行基于单边RDMA协议的原子CAS操作以加速召回所有者节点向第一接入节点DPC1授予的授权的方法2200。在步骤2202,在接收到第一授权许可后,所有者节点执行哈希操作,以标识对应于将由第一接入节点DPC1获取的锁槽x的本地槽y。根据图9所示的实施例,由DPC1获取第一授权许可。在步骤2204,所有者节点获取等于锁槽x的本地锁槽y的64位锁信息,并从本地锁槽y的64位锁信息中检索脏标志的值。在该实施例中,槽x和本地槽y的槽ID基本上相同。在标识锁槽x和具有已经授权给DPC1的文件范围的锁条目的相应本地槽y后,所有者节点标识锁槽y的锁条目的脏标志的值。如果DPC1已经将本地数据缓存的内容刷新到所有者节点的存储器中,它将脏标志设置为1。基于脏标志的值,所有者节点可以加速召回授权,而不是通过基于双边消息的授权。在步骤2206,当脏标志的值为1时,所有者节点确定本地数据缓存的内容已经被刷新到所有者节点中的文件(F1)中。在步骤2208,所有者节点从DPC1召回第一文件范围(0-1MB,如图9的示例中所取)的第一授权许可。图22b示出了图22a所示的实施例的替代实施例。如果在图22a的步骤2204之后,所有者节点标识脏标志的值为0,即第一接入节点DPC1尚未将本地数据缓存的内容刷新到所有者节点的存储器中,所有者节点必须切换到基于双边消息的授权以召回第一授权许可。为此,如图22b所示,在步骤2210,当脏标志的值为1时,所有者节点确定本地数据缓存的内容尚未刷新到所有者节点中的文件(F1)中。在步骤2212,所有者节点针对文件(F1)的第一文件范围向第一接入节点DPC1发送授权召回消息,以便从第一接入节点DPC1召回第一文件范围的第一授权。
根据本发明的一实施例,图23A示出了包括至少第一接入节点DPC1、2300A和所有者节点2300B的系统2300。系统2300支持如上面图9所示的本发明的各种实施例所讨论的授权获取方法和授权授予方法。授权获取和授予方法在HPC集群100中执行,如图2所示并且上面已进行详细阐述。HPC集群100包括DPC1 2300A、DPC2 2300C和所有者节点2300B。因此,应当理解,在实现方式方面,DPC1 2300A包括图2所示的DPC1的结构特征,所有者节点2300B包括图2所示的所有者节点的结构特征。
根据本发明的另一实施例,图23B示出了至少包括第一接入节点DPC1 2300A、所有者节点2300B以及至少一个第二接入节点DPC2 2300C的系统2300。系统2300B包括图23A的系统2300A。类似地,系统2300B支持如上面图9至图22所示的本发明的各种实施例所讨论的授权获取方法和授权授予方法。授权获取和授予方法在HPC集群100中执行,如图2所示并且上面已进行详细阐述。HPC集群100包括DPC1 2300A、DPC2 2300C和所有者节点2300B。因此,应当理解,在实现方式方面,DPC1 2300A包括图2所示的DPC1的结构特征,所有者节点2300B包括图2所示的所有者节点的结构特征。
在图2中已经讨论了结构实现方式的情况下,DPC1 2300A包括存储器200。存储器200至少包括代理分布式锁管理器(Distributed Lock Manager,DLM)模块200-1。此外,DPC12300A包括本地数据缓存204和支持RDMA的本地网络接口卡(Network InterfaceCard,NIC)202、本地NIC 202中的本地RDMA注册存储器2021以及本地RDMA接口,其中,本地RDMA接口经由RDMA总线302A与所有者节点的主RDMA接口通信。代理DLM模块200-1用于:接收来自客户端节点的第一I/O请求,该第一I/O请求标识存储在所有者节点中的文件(F1)的文件区域;对所有者节点执行基于单边远程直接内存访问(Remote Direct MemoryAccess,RDMA)协议的原子CAS操作,以从文件(F1)的文件区域获取第一文件范围的授权,而不向文件(F1)发送第一I/O请求;在成功执行原子CAS操作后,接收对第一文件范围的第一授权许可;以及在第一接入节点(DPC1)的本地数据缓存中创建的本地文件的第一文件范围内执行第一I/O请求。根据本发明的实现方式,对所有者节点的RDMA注册存储器中维护的哈希表执行原子CAS操作。此外,代理DLM模块200-1用于:对哈希表执行基于单边RDMA协议的原子CAS操作,以从文件的文件区域获取后续文件范围的授权;在成功执行原子CAS操作后,接收针对下一个文件范围的后续授权许可;以及在DPC1 2300A的本地数据缓存204中创建的本地文件的后续文件范围内执行第一I/O请求。此外,代理DLM模块200-1用于从客户端节点接收第二I/O请求,该第二I/O请求标识授权给第一接入节点(DPC1)的第一文件范围内的子文件范围;以及在DPC1 2300A的本地数据缓存204中创建的本地文件的子文件范围内执行第二I/O请求。此外,代理DLM模块200-1用于:从所有者节点接收关于授权给DPC1 2300A的第一文件范围的授权召回消息;将本地数据缓存204的内容刷新到所有者节点中的文件(F1)中;以及发布存储在所有者节点中的文件的第一文件范围(F1)的第一授权许可。此外,代理DLM模块200-1用于:确定已经达到本地缓存的存储限制;在执行确定后,将本地数据缓存的内容刷新到所有者节点中的文件(F1)中;以及发布存储在所有者节点中的文件(F1)的第一文件范围(F1)的第一授权许可。此外,代理DLM模块200-1用于:预锁定所述第一文件范围,以获取所述授权;以及在接收第一文件范围的第一授权许可后,锁定第一文件范围,以避免I/O与第一文件范围冲突。
此外,为了对哈希表执行基于单边RDMA协议的原子CAS操作,代理DLM模块200-1用于:从第一I/O请求中检索第一文件范围(RangeID)以及文件或目录的唯一标识符(uniqueidentifier,UUID),第一文件或目录对应于所有者节点中的文件;执行哈希操作,以从哈希表中可用的1到n个锁槽中标识锁槽x;以及对锁槽x执行基于单边RDMA协议的原子CAS操作。在成功执行原子CAS操作后,在接收第一文件范围的第一授权许可时,代理DLM模块用于:获取锁槽x的64位锁信息;以及更新锁槽x的64位锁信息中的至少以下信息:
·4字节客户端ID标志,其唯一地标识授权的第一接入节点DPC1 2300A;
·2字节标识符标志,用于存储对应于第一I/O请求的文件或目录的唯一标识符(unique identifier,UUID);
·1字节范围ID标志,其标识对应于第一I/O请求的第一文件范围;
·1位脏标志,其设置为0以标识本地数据缓存的内容尚未刷新到所有者节点中的文件(F1)中;
·1位模式标志,其设置为1以标识第一授权许可已共享,或者设置为0以标识第一授权许可是排他性的;
·1位数据标志,其设置为0以标识锁槽x不存在哈希冲突;
·2位授权类型标志,用于标识第一授权许可是数据类型授权还是元数据类型;以及
·1位解析类型标志,其设置为0以指示槽x尚不需要进行解析。
其中,代理DLM模块200-1用于:在第一接入节点DPC1的本地RDMA注册存储器202中维护本地哈希表。该本地哈希表包括1到m个本地锁槽,1到m个本地锁槽的本地锁槽y对应于锁槽x,其中,本地锁槽y提供要在成功执行原子CAS操作后与相应锁槽x进行比较和更新的64位锁信息。在将本地数据缓存的内容刷新到所有者节点中的文件(F1)中后,将1位脏标志设置为0。将1位解析类型标志设置为1,以指示在授权的第一接入节点DPC1与另一授权的第二接入节点DPC2(即DPC2 2300C)之间存在针对槽x的正在进行的冲突解析。
此外,代理DLM模块200-1用于从所有者节点接收针对文件(F1)的第一文件范围的授权召回消息,其中,授权召回消息通过所有者节点响应于在所有者节点处从第二接入节点DPC2 2300C接收到对应于来自文件(F1)的文件区域的第一文件范围的基于双边RDMA协议的授权请求以及来自第二接入节点DPC2 2300C的第三I/O请求来发送,该第三I/O请求在第二接入节点DPC22300C处从另一客户端节点接收,该第三I/O请求也标识存储在所有者节点中的文件(F1)的文件区域的第一文件范围。如果第一I/O请求支持排他性文件操作或排他性文件元数据操作,代理DLM模块200-1用于将本地数据缓存204的内容刷新到所有者节点中的文件中,并发布存储在所有者节点中的文件的第一文件范围的第一授权许可。
此外,代理DLM模块200-1用于从所有者节点接收针对文件(F1)的第一文件范围的授权召回消息,其中,授权召回消息通过所有者节点响应于在所有者节点处从第二接入节点DPC2 2300C接收到对应于来自文件(F1)的文件区域的第一文件范围的基于双边RDMA协议的授权请求以及来自第二接入节点DPC2 2300C的第三I/O请求来发送,该第三I/O请求在第二接入节点DPC2 2300C处从另一客户端节点接收,该第三I/O请求也标识存储在所有者节点中的文件(F1)的文件区域的第一文件范围。如果第一I/O请求和第三I/O请求都支持共享文件操作或共享文件元数据操作,代理DLM模块200-1用于:基于从所有者节点接收的授权召回消息来标识第三I/O请求支持对来自文件(F1)的文件区域的第一文件范围执行共享文件操作;以及向所有者节点发送授权响应消息,该授权响应消息标识来自文件的文件区域的第一文件范围可以由第一接入节点DPC1 2300A和第二接入节点DPC2 2300C共享读取。
此外,代理DLM模块200-1用于从所有者节点接收针对文件(F1)的第一文件范围的授权召回消息,其中,授权召回消息通过所有者节点响应于在所有者节点处从第二接入节点DPC 2300C接收到对应于来自文件(F1)的文件区域的不同文件范围的基于双边RDMA协议的授权请求以及来自第二接入节点DPC2 2300C的第四I/O请求来发送,该第四I/O请求在第二接入节点DPC2 2300C处从另一客户端节点接收,该第四I/O请求也标识存储在所有者节点中的文件(F1)的文件区域的不同文件范围,其中,不同文件范围与对应于第一I/O请求的第一文件范围不重叠。在这里,代理DLM模块200-1用于:基于从所有者节点接收的授权召回消息标识第四I/O请求支持与来自文件(F1)的文件区域的第一文件范围不重叠的不同文件范围;以及向所有者节点发送授权响应消息,该授权响应消息标识来自文件(F1)的文件区域的不同文件范围与来自文件(F1)的文件区域的第一文件范围不重叠。在一个此类实现方式中,锁槽x的64位锁信息中的1位数据标志设置为1,以标识在所有者节点向第二接入节点DPC2 2300C授予来自文件(F1)的文件区域的不同文件范围的新授权许可时,锁槽x存在哈希冲突。
在图2中已经讨论了结构实现方式的情况下,DPC2 2300C包括存储器400。存储器400至少包括代理分布式锁管理器(Distributed Lock Manager,DLM)模块400-1。此外,DPC22300C包括本地数据缓存404和支持RDMA的本地网络接口卡(Network InterfaceCard,NIC)402、本地NIC 402中的本地RDMA注册存储器4021以及本地RDMA接口4022,其中,本地RDMA接口4022经由RDMA总线302C与所有者节点的主RDMA接口通信。在第一接入节点DPC1 2300A持有来自所有者节点中的文件的文件区域的第一文件范围的第一授权的情况下,代理DLM模块400-1用于:接收来自另一客户端节点的第三I/O请求,该第三I/O请求也标识存储在所有者节点中的文件(F1)的文件区域;以及对所有者节点执行基于单边远程直接内存访问(Remote Direct Memory Access,RDMA)协议的原子比较和交换(compare-and-swap,CAS)操作,以从文件(F1)的文件区域获取第一文件范围的授权,而不向文件(F1)发送第三I/O请求。根据本发明的实现方式,对所有者节点的RDMA注册存储器中维护的哈希表执行原子CAS操作。在执行基于单边RDMA协议的原子CAS操作时,代理DLM模块400-1还用于:从第三I/O请求中检索文件范围(RangeID)以及文件或目录的唯一标识符(uniqueidentifier,UUID);执行哈希操作,以从哈希表中可用的1到n个锁槽中标识锁槽x;对锁槽x执行基于单边RDMA协议的原子CAS操作;检测失败的原子CAS操作;以及执行基于双边RDMA协议的授权请求,以获取第一文件范围的第二授权,同时所有者节点发送第三I/O请求。此外,代理DLM模块400-1还用于当第一I/O请求支持排他性文件操作或排他性文件元数据操作时,在DPC1 2300A发布第一授权许可后,从所有者节点接收来自文件(F1)的文件区域的第一文件范围的第二授权许可。此外,代理DLM模块还用于在所有者节点从DPC1 2300A接收到授权响应消息后,从所有者节点接收对来自文件(F1)的文件区域的第一文件范围的第二授权许可,该授权响应消息标识当第一I/O请求和第三I/O请求都支持共享文件操作或共享元数据操作时,来自文件(F1)的文件区域的第一文件范围可以由DPC1 2300A和第二接入节点DPC2 2300C共享读取。代理DLM模块400-2还用于:接收来自另一客户端节点的第四I/O请求,该第四I/O请求标识存储在所有者节点中的文件(F1)的文件区域的不同文件范围,其中,不同文件范围与对应于第一I/O请求的第一文件范围不重叠;对所有者节点执行基于单边RDMA协议的原子CAS操作,以获取文件(F1)的不同文件范围的新授权,而不向文件发送第四I/O请求。在执行基于单边RDMA的协议的原子CAS操作方面,代理DLM模块还用于:从第四I/O请求中检索不同文件范围(RangeID)以及文件或目录的唯一标识符(uniqueidentifier,UUID);执行哈希操作,以从哈希表中可用的1到n个锁槽中标识同一锁槽x;对锁槽x执行基于单边RDMA协议的原子CAS操作;以及检测失败的原子CAS操作。在检测失败的原子CAS操作时,代理DLM模块400-1还用于执行基于双边RDMA协议的授权请求,以获取不同文件范围的新授权,同时向所有者节点发送第四I/O请求。此外,代理DLM模块400-1还用于在所有者节点从第一接入节点DPC1 2300A接收到授权响应消息后,从所有者节点接收来自文件(F1)的文件区域的不同文件范围的新授权许可,该授权响应消息标识与实际文件的文件区域的不同文件范围与来自文件(F1)的文件区域的第一文件范围不重叠。
在图2中已经讨论了结构实现方式的情况下,所有者节点2300C包括存储器300。存储器300至少包括主分布式锁管理器(Distributed Lock Manager,DLM)模块300-1。此外,所有者节点2300B包括支持RDMA的主网络接口卡(Network Interface Card,NIC)302、主NIC302中的主RDMA注册存储器3021以及主RDMA接口3022,其中,主RDMA接口3022经由相应的RDMA总线302A与第一接入节点DPC 2300A的本地RDMA接口2022通信,并且主RDMA接口3022经由相应的RDMA总线302A与第二接入节点DPC2 2300C的本地RDMA接口4022通信。在第一接入节点DPC1 2300A持有来自所有者节点(即代理DLM模块400-1)中的文件的文件区域的第一文件范围的第一授权,并且第二接入节点DPC2 2300C从所有者节点2300B中的文件区域发送针对同一第一文件范围的基于双边RDMA的授权请求的情况下,主DLM 300-1用于从第二接入节点DPC2 2300C接收对应于来自实际文件(F1)的文件区域的第一文件范围的基于双边RDMA协议的授权请求以及第三I/O请求,并且其中,第一接入节点DPC1 2300C持有来自所有者节点中的文件的文件区域的第一文件范围的第一授权。当第一I/O请求支持排他性文件操作或排他性文件元数据操作时,主DLM模块300-1用于从哈希表中标识锁槽x的64位锁定信息,从而标识第一接入节点DPC1 2300A持有针对文件(F1)的第一文件范围的第一授权许可,并向第一接入节点DPC1 2300A发送针对文件(F1)的第一文件范围的授权召回消息。在由第一接入节点DPC1 2300A发布对所有者节点2300C中存储的文件的第一文件范围的第一授权许可时,主DLM模块300-1用于在发布时向第二接入节点DPC2 2300C授予来自文件(F1)的文件区域的第一文件范围的第二授权许可。当第一I/O请求和第三I/O请求都支持共享文件操作或共享元数据操作时,主DLM模块300-1用于从哈希表中标识锁槽x的64位锁信息,从而标识第一接入节点DPC1 2300A持有对文件(F1)的第一文件范围的第授权许可,并且向第一接入节点DPC1 2300A发送针对文件(F1)的第一文件范围的授权召回消息,并且作为响应,接收来自第一接入节点DPC1 2300A的授权响应消息。该授权响应消息标识来自文件的文件区域的第一文件范围可以由第一接入节点DPC1 2300A和第二接入节点DPC2 2300C两者共享读取。因此,主DLM模块300-1用于向第二接入节点DPC2 2300C授予来自文件(F1)的文件区域的第一文件范围的第二授权许可。
此外,主DLM模块300-1还用于从第二接入节点DPC2 2300C接收基于双边RDMA协议的授权请求,以获取来自文件的文件区域的不同文件范围的新授权以及第四I/O请求,该第四I/O请求在DPC2 2300C处从标识存储在所有者节点2300B中的文件(F1)的文件区域的不同文件范围的另一客户端节点接收,其中,不同文件范围与第一文件范围不重叠。主DLM模块300-1还用于从哈希表中标识锁槽x的64位锁信息,从而标识第一接入节点DPC1 2300A持有对文件(F1)的第一文件范围的第一授权许可,针对文件(F1)的第一文件范围向DPC12300A发送授权召回消息,从DPC1 2300A接收授权响应消息,该授权响应消息标识来自文件的文件区域的不同文件范围与文件(F1)的文件区域的第一文件范围不重叠。因此,主DLM模块300-1用于向第二接入节点DPC2 2300C授予来自实际文件(F1)的文件区域的不同文件范围的新授权许可。在这里,主DLM模块300-1用于将锁槽x的64位锁信息中的1位数据标志更新为1,以标识锁槽x存在哈希冲突,并更新存储在所有者节点的存储器中的冲突列表中的两项,其中:
-冲突列表的第一项目包含锁槽x的第一64位锁信息,其中,第一64位锁信息对应于从第一接入节点(DPC1)接收的第一I/O授权请求,以及对应于第一接入节点(DPC1)的进一步信息;以及
-冲突列表的第二项目包含锁槽x的第二64位锁信息,其中,第二64位锁信息对应于从第二接入节点(DPC2)接收的第四I/O授权请求,以及对应于第二接入节点(DPC2)的进一步信息;
其中,冲突列表对应于包括多个节点的树的节点,多个节点中的每个节点对应所有者节点的哈希表的1到n个锁槽的锁槽。在其它实现方式中,当主DLM模块300-1从对应于来自文件(F1)的文件区域的第一文件范围的第二接入节点DPC2 2300C接收到基于双边RDMA协议的授权请求以及第五I/O请求时,主DLM模块300-1用于从哈希表中标识锁槽x的64位锁信息,从而检测锁槽x中的哈希冲突,并解析包括多个节点的树以标识对应于锁槽x的节点。第五I/O请求在DPC2 2300C处从标识存储在所有者节点中的实际文件(F1)的文件区域的又一客户端节点接收,其中,该文件区域对应于第一I/O请求。此外,主DLM模块300-1还用于检索所标识节点的冲突树的第一项目信息和第二项目信息,基于第一项目中包含的第一64位锁信息和对应于第一接入节点DPC1 2300A的进一步信息,确定从文件(F1)的文件区域向第一接入节点DPC1 2300A授予第一文件范围的第一授权许可,向第一接入节点DPC12300A发送针对文件(F1)的第一文件范围的授权召回消息,并在第一接入节点DPC1 2300A发布存储在所有者节点2300B中的文件(F1)的第一文件范围的第一授权许可时,向第二接入节点DPC2 2300C授予针对文件(F1)的文件区域的第一文件范围的第三委授权许可。
在其它实施例中,主DLM模块300-1用于:对包括第一接入节点DPC1 2300A的本地RDMA注册存储器中维护的1到m个本地锁槽的本地哈希表执行基于RDMA协议的原子CAS操作,1到m个本地槽的每个本地锁槽y对应于所有者节点中的哈希表的锁槽1到n的锁槽x,其中,m=n且x=y。主DLM模块300-1用于:在接收到第一授权许可后,执行哈希操作,以标识对应于DPC1 2300A将获取的锁槽x的本地槽y;获取本地槽y的64位锁信息等于锁槽x的节点;以及从本地槽y的64位锁信息中检索脏标志的值,确定当脏标志的值为1时本地数据缓存的内容已刷新到所有者节点中的文件(F1)中。在确定后,主DLM模块300-1用于从DPC1 2300A召回第一文件范围的第一授权许可。当主DLM模块300-1用于在脏标志的值为0时确定本地数据缓存的内容尚未刷新到所有者节点中的文件(F1)时,主DLM模块300-1针对文件(F1)的第一文件范围向DPC1 2300A发送授权召回消息,以便从DPC1 2300A召回第一文件范围的第一授权。
图24示出了HPC集群的节点2400的示意图,其中,HPC集群是图2所示的集群100,并且节点2400可以是计算节点和/或存储节点,如本发明中讨论的接入节点和所有者节点。本领域技术人员将认识到,为了讨论清楚起见,包括术语节点2400,但绝不意味着将本发明的应用限于特定节点。本发明中描述的至少部分特征/方法在网络节点、设备或例如节点2400的组件中实现。例如,本发明中的特征/方法采用硬件、固件和/或在硬件上安装运行的软件实现。如图24所示,节点2400包括收发器(transceiver/receiver,Tx/Rx)2410,可以是发送器、接收器或其组合。处理器2430耦合到Tx/Rx 2410,以处理从其它节点接收的请求或将被发送到其它节点的授权。处理器2430可包括一个或多个多核处理器和/或存储器模块240,其用作数据存储器、缓冲器等。处理器2430可以实现为通用处理器或者为一个或多个专用集成电路(application specific integrated circuit,ASIC)和/或数字信号处理器(digital signal processor,DSP)的一部分。存储器模块2440包括用于临时存储内容的缓存,如随机存取存储器(Random Access Memory,RAM)。此外,存储器模块2440包括用于较长时间存储内容的长期存储,例如只读存储器(Read Only Memory,ROM)。例如,缓存和长期存储可以包括动态随机存取存储器(dynamic random access memory,DRAM)、固态磁盘(solid state drive,SSD)、硬盘或其组合。
可以理解,通过编程和/或将可执行指令加载到节点2400上,改变了处理器2430、缓存存储器和长期存储器中的至少一个,将节点2400部分转换为特定的机器或装置,例如,执行本发明所教导的基于单边RDMA协议的原子CAS操作。对于电力工程及软件工程技术来说基本的是,可通过将可执行软件加载到计算机中而实现的功能性可通过熟知设计规则而转换为硬件实现方式。在软件还是硬件中实现概念的决策通常取决于与设计的稳定性及待产生的单元的数目的考虑,而与从软件域转译到硬件域所涉及的任何问题无关。通常,仍在经受频繁改变的设计优选在软件中实现,因为重改硬件实现方式比重改软件设计更为昂贵。通常,稳定及大规模生产的设计更适于在如ASIC这样的硬件中实现,因为对于大规模生产,硬件实现比软件实现更为便宜。通常,一个设计以软件形式进行开发及测试,且随后通过熟知设计规则变换为对软件的指令进行硬连线的专用集成电路(application specificintegrated circuit,ASIC)中的等效硬件实现。由新ASIC控制的机器是一特定的机器或装置,同样地,编程和/或加载有可执行指令的计算机视为特定的机器或装置。
如结合图2描述的,本发明提供了以下对现有技术基于双边消息的授权有利的技术效果,在本发明中也称为双边RDMA操作和应用锁定:
1、本发明提供语义,以便为去往和来自接入节点的数据缓存的写入请求和读取请求提供更快的I/O路径。通过使用基于单边RDMA的原子CAS操作来加速无冲突的写入请求和读取请求。即使是第一写入请求,也可以高效地将数据写入接入节点的数据缓存,然后可以直接从缓存为相同范围的所有后续请求提供服务。
2、通过提供的一致性,客户可以通过接入节点缓存提供的操作来减少操作时延。这还将降低网络和CPU利用率,如结合图3所述。
本领域技术人员可清楚地理解,出于方便和简单描述的目的,对于前述系统、装置和单元的详细工作过程,可参考前述方法实施例中的对应过程,本文中不再描述细节。
虽然本发明中已提供若干实施例,但应当理解,在不脱离本发明的范围的情况下,本发明所公开的系统和方法可以以许多其它特定形式来体现。本发明的示例应被视为说明性而非限制性的,且本发明并不限于本文本所给出的细节。例如,各种元件或组件可以在另一系统中组合或集成,或者某些特征可以省略或不实施。
此外,在不脱离本发明的范围的情况下,各种实施例中描述和说明为离散或单独的技术、系统、子系统和方法可以与其它系统、模块、技术或方法进行组合或集成。示出或论述为彼此耦合或直接耦合或通信的其它项也可以采用电方式、机械方式或其它方式经由某一接口、设备或中间组件间接地耦合或通信。其它变化、替代和改变的示例可以由本领域的技术人员在不脱离本文所公开的范围的情况下确定。
因此,保护范围不受上文所陈述的说明限制,而是由所附权利要求书界定,所述范围包含所附权利要求书的标的物的所有等效物。每一和每条权利要求作为进一步公开内容并入说明书中,且所附权利要求书是本发明的实施例。对所述公开内容中的参考进行的论述并非承认其为现有技术,尤其是具有在本申请案的在先申请优先权日期之后的公开日期的任何参考。
最后,出于可读性和指导性的目的,已经选择了说明书中使用的语言,并且该语言未被选择成限定或限制本发明的主题。因此,本发明的范围不受该详细描述限制,而是由在基于本文的应用上所附的任何权利要求限制。因此,公开本发明实施例旨在举例说明,而非限制在所附权利要求中阐述的本发明范围。
Claims (24)
1.一种授权获取方法,其特征在于,包括:
在第一接入节点(DPC1)处接收来自客户端节点的第一I/O请求,所述第一I/O请求标识存储在所有者节点中的文件(F1)的文件区域;
所述第一接入节点(DPC1)对所述所有者节点执行基于单边远程直接内存访问RDMA协议的原子比较和交换CAS操作,以从所述文件(F1)的所述文件区域获取第一文件范围的授权,而不向所述文件(F1)发送所述第一I/O请求;
在成功执行原子CAS操作后,所述第一接入节点(DPC1)接收所述第一文件范围的第一授权许可;以及
在所述第一接入节点(DPC1)的本地数据缓存中创建的本地文件的所述第一文件范围内执行所述第一I/O请求。
2.根据权利要求1所述的授权方法,其特征在于,对所述所有者节点执行基于单边RDMA协议的所述原子CAS操作的所述步骤还包括:
对所述所有者节点的RDMA注册存储器中维护的哈希表执行基于单边RDMA协议的原子CAS操作。
3.根据权利要求1或2所述的授权方法,其特征在于,包括:
在所述第一接入节点(DPC1)处接收来自所述客户端节点的第二I/O请求,所述第二I/O请求标识授权给所述第一接入节点(DPC1)的所述第一文件范围内的子文件范围;以及
在所述第一接入节点(DPC1)的所述本地数据缓存中创建的所述本地文件的所述子文件范围内执行所述第二I/O请求。
4.根据权利要求1至3所述的授权方法,其特征在于,包括:
所述第一接入节点(DPC1)接收来自所述所有者节点的关于授权给所述第一接入节点(DPC1)的所述第一文件范围的授权召回消息;
所述第一接入节点(DPC1)将所述本地数据缓存的内容刷新到所述所有者节点中的所述文件(F1)中;以及
所述第一接入节点(DPC1)发布存储在所述所有者节点中的所述文件(F1)的所述第一文件范围的所述第一授权许可。
5.根据权利要求1至3任一项所述的授权方法,其特征在于,包括:
所述第一接入节点(DPC1)确定已经达到所述本地缓存的存储限制;
在执行确定后,所述第一接入节点(DPC1)将所述本地数据缓存的内容刷新到所述所有者节点中的所述文件(F1)中;以及
所述第一接入节点(DPC1)发布所述第一文件范围的所述第一授权许可。
6.根据权利要求1至5任一项所述的授权方法,其特征在于,对所述所有者节点执行基于单边RDMA协议的所述原子CAS操作的所述步骤还包括:
所述第一接入节点(DPC1)预锁定所述第一文件范围,以获取所述授权;以及
在接收所述第一文件范围的所述第一授权许可后,所述第一接入节点(DPC1)锁定所述第一文件范围,以避免I/O与所述第一文件范围冲突。
7.根据权利要求1至6任一项所述的授权方法,其特征在于,对所述所有者节点执行基于单边RDMA协议的所述原子CAS操作的所述步骤还包括:
所述第一接入节点(DPC1)从所述第一I/O请求中检索所述第一文件范围RangeID以及文件或目录的唯一标识符UUID,所述文件或所述目录对应于所述所有者节点中的所述文件(F1);
所述第一接入节点(DPC1)执行哈希操作,以从所述哈希表中可用的1到n个锁槽中标识锁槽x;以及
所述第一接入节点(DPC1)对所述锁槽x执行基于单边RDMA协议的所述原子CAS操作。
8.根据权利要求7所述的授权方法,其特征在于,所述方法还包括:
所述第一接入节点(DPC1)获取所述锁槽x的64位锁信息,并更新所述锁槽x的所述64位锁信息。
9.根据权利要求8所述的授权方法,其特征在于,所述锁槽x的所述64位锁信息包括1位的脏标志,并且在将所述本地数据缓存的内容刷新到所述所有者节点中的所述文件(F1)中时,将所述1位的脏标志设置为1。
10.根据权利要求8或9所述的授权方法,其特征在于,所述锁槽x的所述64位锁信息包括1位的解析类型标志,并且将所述1位的解析类型标志设置为1,以指示在所述授权的第一接入节点(DPC1)与另一授权的第二接入节点(DPC2)之间存在针对所述槽x的正在进行的冲突解析。
11.根据权利要求1至10任一项所述的授权方法,其特征在于,包括:
在第二接入节点(DPC2)处接收来自另一客户端节点的第三I/O请求,所述第三I/O请求也标识存储在所述所有者节点中的所述文件(F1)的所述文件区域;
所述第二接入节点(DPC2)对所述所有者节点执行基于单边RDMA协议的原子CAS操作,以从所述文件(F1)的所述文件区域获取所述第一文件范围的第二授权,而不向所述文件(F1)发送所述第三I/O请求;
所述第二接入节点(DPC2)检测失败的原子CAS操作;以及
所述第二接入节点(DPC2)执行基于双边RDMA协议的授权请求,以获取所述第一文件范围的所述第二授权,同时向所述所有者节点发送所述第三I/O请求。
12.根据权利要求1至10任一项所述的授权方法,其特征在于,包括:
在第二接入节点(DPC2)处接收来自另一客户端节点的第四I/O请求,所述第四I/O请求标识存储在所述所有者节点中的所述文件(F1)的所述文件区域的不同文件范围,其中,所述不同文件范围与对应于所述第一I/O请求的所述第一文件范围不重叠;
所述第二接入节点(DPC2)对所述所有者节点执行基于单边RDMA协议的原子比较和交换CAS操作,以获取所述文件(F1)的所述不同文件范围的新授权,而不向所述文件(F1)发送所述第四I/O请求;
所述第二接入节点(DPC2)检测失败的原子CAS操作;以及
所述第二接入节点(DPC2)执行基于双边RDMA协议的授权请求,以获取所述不同文件范围的所述新授权,同时向所述所有者节点发送所述第四I/O请求。
13.一种用于获取授权的系统,其特征在于,所述系统至少包括第一接入节点(DPC1)和所有者节点,其中:
所述第一接入节点(DPC1)用于:
接收来自客户端节点的第一I/O请求,所述第一I/O请求标识存储在所有者节点中的文件(F1)的文件区域;
对所述所有者节点执行基于单边远程直接内存访问RDMA协议的原子比较和交换CAS操作,以从所述文件(F1)的所述文件区域获取第一文件范围的授权,而不向所述文件(F1)发送所述第一I/O请求;
在成功执行原子CAS操作后,接收所述第一文件范围的第一授权许可;以及
在所述第一接入节点(DPC1)的本地数据缓存中创建的本地文件的所述第一文件范围内执行所述第一I/O请求。
14.根据权利要求13所述的系统,其特征在于,所述第一接入节点(DPC1)用于:对所述所有者节点的RDMA注册存储器中维护的哈希表执行基于单边RDMA协议的所述原子CAS操作。
15.根据权利要求13或14所述的系统,其特征在于,所述第一接入节点(DPC1)用于:
接收来自所述客户端节点的第二I/O请求,所述第二I/O请求标识授权给所述第一接入节点(DPC1)的所述第一文件范围内的子文件范围;以及
在所述第一接入节点(DPC1)的所述本地数据缓存中创建的所述本地文件的所述子文件范围内执行所述第二I/O请求。
16.根据权利要求13至15所述的系统,其特征在于,所述第一接入节点(DPC1)用于:
接收来自所述所有者节点的关于授权给所述第一接入节点(DPC1)的所述第一文件范围的授权召回消息;
将所述本地数据缓存的内容刷新到所述所有者节点中的所述文件(F1)中;以及
发布存储在所述所有者节点中的所述文件(F1)的所述第一文件范围的所述第一授权许可。
17.根据权利要求13至15任一项所述的系统,其特征在于,所述第一接入节点(DPC1)用于:
确定已经达到所述本地缓存的存储限制;
在执行确定后,将所述本地数据缓存的内容刷新到所述所有者节点中的所述文件(F1)中;以及
发布所述第一文件范围的所述第一授权许可。
18.根据权利要求13至17任一项所述的系统,其特征在于,所述第一接入节点(DPC1)还用于:
预锁定所述第一文件范围,以获取所述授权;以及
在接收所述第一文件范围的所述第一授权许可后,锁定所述第一文件范围,以避免I/O与所述第一文件范围冲突。
19.根据权利要求13至18任一项所述的系统,其特征在于,所述第一接入节点(DPC1)用于:
从所述第一I/O请求中检索所述第一文件范围RangeID以及文件或目录的唯一标识符UUID,所述文件或所述目录对应于所述所有者节点中的所述文件(F1);
执行哈希操作,以从所述哈希表中可用的1到n个锁槽中标识锁槽x;以及
对所述锁槽x执行基于单边RDMA协议的所述原子CAS操作。
20.根据权利要求19所述的系统,其特征在于,所述第一接入节点(DPC1)还用于:
获取所述锁槽x的64位锁信息,并更新所述锁槽x的所述64位锁信息。
21.根据权利要求20所述的系统,其特征在于,所述锁槽x的所述64位锁信息包括1位的脏标志,并且在将所述本地数据缓存的内容刷新到所述所有者节点中的所述文件(F1)中时,将所述1位的脏标志设置为1。
22.根据权利要求20或21所述的系统,其特征在于,所述锁槽x的所述64位锁信息包括1位的解析类型标志,并且将所述1位的解析类型标志设置为1,以指示在所述授权的第一接入节点(DPC1)与另一授权的第二接入节点(DPC2)之间存在针对所述槽x的正在进行的冲突解析。
23.根据权利要求13至22任一项所述的系统,其特征在于,所述系统还包括至少一个第二接入节点(DPC2),其中,所述第二接入节点(DPC2)用于:
接收来自另一客户端节点的第三I/O请求,所述第三I/O请求也标识存储在所述所有者节点中的所述文件(F1)的所述文件区域;
对所述所有者节点执行基于单边远程直接内存访问RDMA协议的原子比较和交换CAS操作,以从所述文件(F1)的所述文件区域获取所述第一文件范围的第二授权,而不向所述文件(F1)发送所述第三I/O请求;
检测失败的原子CAS操作;以及
执行基于双边RDMA协议的授权请求,以获取所述第一文件范围的所述第二授权,同时向所述所有者节点发送所述第三I/O请求。
24.根据权利要求13至22任一项所述的系统,其特征在于,所述系统还包括至少一个第二接入节点(DPC2),其中,所述第二接入节点(DPC2)用于:
接收来自另一客户端节点的第四I/O请求,所述第四I/O请求标识存储在所述所有者节点中的所述文件(F1)的所述文件区域的不同文件范围,其中,所述不同文件范围与对应于所述第一I/O请求的所述第一文件范围不重叠;
对所述所有者节点执行基于单边RDMA协议的原子比较和交换CAS操作,以获取所述文件(F1)的所述不同文件范围的新授权,而不向所述文件(F1)发送所述第四I/O请求;
检测失败的原子CAS操作;以及
执行基于双边RDMA协议的授权请求,以获取所述不同文件范围的所述新授权,同时向所述所有者节点发送所述第四I/O请求。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
IN202131011723 | 2021-03-19 | ||
IN202131011723 | 2021-03-19 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115118445A true CN115118445A (zh) | 2022-09-27 |
Family
ID=83324924
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111149514.XA Pending CN115118445A (zh) | 2021-03-19 | 2021-09-29 | 用于在hpc集群中获取授权的方法、装置和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115118445A (zh) |
-
2021
- 2021-09-29 CN CN202111149514.XA patent/CN115118445A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9218299B2 (en) | Recovering data segment contents in a distributed shared memory | |
US7809675B2 (en) | Sharing state information among a plurality of file operation servers | |
US9361229B2 (en) | Distributed shared caching for clustered file systems | |
US6868414B2 (en) | Technique for serializing data structure updates and retrievals without requiring searchers to use locks | |
US6339793B1 (en) | Read/write data sharing of DASD data, including byte file system data, in a cluster of multiple data processing systems | |
JP3199718B2 (ja) | キャッシュ整合性維持方法 | |
US10042916B2 (en) | System and method for storing data in clusters located remotely from each other | |
US20080065835A1 (en) | Offloading operations for maintaining data coherence across a plurality of nodes | |
CN105634958A (zh) | 基于多核系统的报文转发方法和装置 | |
CN109379432A (zh) | 数据处理方法、装置、服务器及计算机可读存储介质 | |
US7792873B2 (en) | Data structure supporting random delete and timer function | |
US20110137861A1 (en) | Methods for Achieving Efficient Coherent Access to Data in a Cluster of Data Processing Computing Nodes | |
CN111400307B (zh) | 支持远程并发访问的持久哈希表访问系统 | |
Burke et al. | PRISM: Rethinking the RDMA interface for distributed systems | |
Cassell et al. | Nessie: A decoupled, client-driven key-value store using RDMA | |
JPH0713939A (ja) | リソースの制御方法及び装置 | |
US8224837B2 (en) | Method and mechanism for supporting virtual content in performing file operations at a RDBMS | |
CN109857566B (zh) | 一种内存读写过程的资源锁定方法 | |
KR102450133B1 (ko) | 분산 잠금 관리를 하는 분산 시스템 및 그것의 동작 방법 | |
CN115118445A (zh) | 用于在hpc集群中获取授权的方法、装置和系统 | |
CN111273860A (zh) | 一种基于网络和页粒度管理的分布式内存管理方法 | |
Moiz et al. | Concurrency control without locking in mobile environments | |
CN114756388B (zh) | 一种基于rdma的集群系统节点间按需共享内存的方法 | |
JP2742246B2 (ja) | ロックリクエスト制御機構 | |
CN117851363A (zh) | 一种并行文件系统客户端高速缓存方法和系统 |
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 |