CN112306703A - 一种numa系统中的临界区执行方法及装置 - Google Patents
一种numa系统中的临界区执行方法及装置 Download PDFInfo
- Publication number
- CN112306703A CN112306703A CN201910690879.XA CN201910690879A CN112306703A CN 112306703 A CN112306703 A CN 112306703A CN 201910690879 A CN201910690879 A CN 201910690879A CN 112306703 A CN112306703 A CN 112306703A
- Authority
- CN
- China
- Prior art keywords
- critical section
- target queue
- thread
- node
- queue
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4418—Suspend and resume; Hibernate and awake
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
Abstract
本申请实施例提供了一种NUMA系统中的临界区执行方法及装置,降低了系统中的锁竞争的数量,减少了由于竞争锁的过程而耗费的系统资源。本申请提供的NUMA系统中的临界区执行方法包括:运行于所述NUMA系统的一个节点上的第一线程确定第一临界区对应的目标队列,所述NUMA系统包括多个节点,其中,每个节点具有至少一个硬件队列,所述目标队列为所述多个节点的硬件队列中的一个;所述第一线程将所述第一临界区的ID加入所述目标队列;运行于所述NUMA系统的一个节点上的第二线程从所述目标队列中获取所述第一临界区的ID;所述第二线程根据所述第一临界区的ID执行所述第一临界区。
Description
技术领域
本申请涉及信息技术领域,尤其涉及一种非统一内存访问NUMA系统中的临界区执行方法及装置。
背景技术
现在大部分多处理器核的计算机系统为多线程提供了共享资源,例如NUMA(nonuniform memory access architecture,非统一内存访问架构)系统。其中,有些共享资源一次只能提供给一个线程使用,多个线程同时执行同一共享资源的临界区时,如果不加以互斥访问控制,就会出现资源的冲突。
系统中的多个线程需要对同一个共享资源执行临界区时,为了防止冲突,各个线程在执行临界区之前,需要竞争该临界区对应的自旋锁。自旋锁是为防止多处理器并发而引入的一种锁,在任何时刻,自旋锁最多只能被一个线程持有,若一个线程试图请求获取已经被其他某一个线程持有的自旋锁,则该任务可以循环尝试获取该自旋锁,等待该自旋锁重新可用。若该自旋锁未被其他任一个线程持有,则请求获取该自旋锁的该线程可直接获得该自旋锁,以便于执行该自旋锁保护的临界区。
然而,若系统中存在大量的线程需要竞争同一个自旋锁,系统将产生大量竞争锁的操作,竞争锁的过程将耗费大量的系统资源,很大程度的降低了系统的性能。
发明内容
本申请提供了一种NUMA系统中的临界区执行方法及装置,降低了系统中的锁竞争的数量,减少了由于竞争锁的过程而耗费的系统资源。
第一方面,本申请提供了一种非统一内存访问NUMA系统中的临界区执行方法,包括:运行于所述NUMA系统的一个节点上的第一线程确定第一临界区对应的目标队列,所述NUMA系统包括多个节点,其中,每个节点具有至少一个硬件队列,所述目标队列为所述多个节点的硬件队列中的一个;所述第一线程将所述第一临界区的标识ID加入所述目标队列;运行于所述NUMA系统的一个节点上的第二线程从所述目标队列中获取所述第一临界区的ID;所述第二线程根据所述第一临界区的ID执行所述第一临界区。
通过上述方式,第一线程可以将第一临界区加入到目标队列,第二线程可以获取目标队列中的第一临界区的ID,并根据第一临界区的ID执行第一临界区,在NUMA系统的场景下,多线程并发执行临界区时,各个线程不需要进行临界区的锁竞争,进而减少了由于竞争锁的过程而耗费的系统资源。
在第一方面的一种可选设计中,所述目标队列为运行有所述第二线程的节点上的硬件队列。这样,由于第二线程可以从所在的节点上的本地目标队列获取第一临界区,可以降低获取临界区的时延。
在第一方面的一种可选设计中,所述临界区唯一对应于所述多个节点的硬件队列中的一个硬件队列,临界区唯一对应一个硬件队列,可以保证临界区的原子性执行。
在第一方面的一种可选设计中,所述第一线程确定所述第一临界区对应的目标队列,包括:所述第一线程获取所述第一临界区对应的目标队列的标识ID。每个节点具有至少一个硬件队列,每个硬件队列可以对应一个目标队列的ID,其中,目标队列的ID可以包括该目标队列所在的节点的ID以及该目标队列在所在的节点中的队列ID。具体的,可以在每一把锁的锁信息中记录绑定的硬件队列所在节点的节点ID以及队列ID。若某一线程需要执行临界区时,则可以查询临界区对应的锁信息,并获取到临界区对应的节点ID以及队列ID,通过上述方式,第一线程实现了确定临界区对应的目标队列。
在第一方面的一种可选设计中,所述第一线程确定所述第一临界区对应的目标队列,包括:所述第一线程根据预先配置的对应关系确定临界区对应的目标队列。
在第一方面的一种可选设计中,所述第一线程将所述第一临界区加入所述目标队列,包括:所述第一线程向硬件加速器发送所述第一临界区的ID和所述目标队列的ID,以使得所述硬件加速器将所述第一临界区的ID加入所述目标队列的ID对应的目标队列。
在第一方面的一种可选设计中,所述方法还包括:所述第一线程将所述第一临界区加入所述目标队列之后,所述第一线程进入睡眠状态;所述第二线程执行所述第一临界区之后,所述第二线程唤醒所述第一线程。
在第一方面的一种可选设计中,所述方法还包括:运行于所述NUMA系统的一个节点上的第三线程确定第二临界区对应于所述目标队列;所述第三线程将所述第二临界区的ID加入所述目标队列;所述第二线程从所述目标队列中获取所述第二临界区的ID;所述第二线程在完成所述第一临界区的执行后,根据所述第二临界区的ID执行所述第二临界区。这样,第二线程不同时执行同一把锁保护的不同临界区,保证了临界区的原子性执行。
在第一方面的一种可选设计中,所述第二临界区的ID加入所述目标队列的时刻晚于所述第一临界区的ID加入所述目标队列的时刻。通过上述方式,可以保证临界区执行的公平性,不会出现先加入目标队列的临界区晚于后加入目标队列的临界区执行的情况。
第二方面,本申请实施例提供了一种NUMA系统中的临界区执行方法,包括:运行于所述NUMA系统的第一节点上的第一线程确定第一临界区对应的目标队列,所述第一节点具有至少一个硬件队列,所述目标队列为所述至少一个硬件队列中的一个;所述第一线程将所述第一临界区的ID加入所述目标队列;基于运行于所述第一节点的第二线程获取到锁,所述第二线程从所述目标队列中获取所述第一临界区的ID;所述第二线程根据所述第一临界区的ID执行所述第一临界区。
通过上述方式,第一线程可以将第一临界区加入到第一节点的目标队列,第一节点中的第二线程在获取到目标队列的锁后,可以获取第一临界区的ID,并根据第一临界区的ID执行第一临界区,使得NUMA系统中只存在对于各个目标队列的竞争,不需要线程每次执行临界区都进行临界区的锁竞争,减少了NUMA系统中锁竞争的次数,降低了由于锁竞争而导致的开销。
在第二方面的一种可选设计中,所述NUMA系统包括多个节点,所述多个节点中的每个节点包括一个目标队列,所述锁对应于所述多个节点包括的多个目标队列,所述锁用于控制所述多个节点中的每个节点对各自具有的目标队列的访问。
在第二方面的一种可选设计中,所述目标队列为所述第一节点中的硬件队列。
在第二方面的一种可选设计中,所述第一临界区唯一对应于所述多个节点的硬件队列中的一个硬件队列。
在第二方面的一种可选设计中,所述第一线程确定第一临界区对应的目标队列,包括:所述第一线程获取所述第一临界区对应的目标队列的标识ID。
在第二方面的一种可选设计中,所述第一线程将所述第一临界区的ID加入所述目标队列,包括:所述第一线程向硬件加速器发送所述第一临界区的ID和所述目标队列的ID,以使得所述硬件加速器将所述第一临界区的ID加入所述目标队列的ID对应的目标队列。
在第二方面的一种可选设计中,所述方法还包括:所述第一线程将所述第一临界区加入所述目标队列之后,所述第一线程进入睡眠状态;所述第二线程执行所述第一临界区之后,所述第二线程唤醒所述第一线程。
在第二方面的一种可选设计中,所述方法还包括:运行于所述第一节点的第三线程确定第二临界区对应于所述目标队列;所述第三线程将所述第二临界区的ID加入所述目标队列;所述第二线程从所述目标队列中获取所述第二临界区的ID;所述第二线程在完成所述第一临界区的执行后,根据所述第二临界区的ID执行所述第二临界区。
在第二方面的一种可选设计中,所述第二临界区的ID加入所述目标队列的时刻晚于所述第一临界区的ID加入所述目标队列的时刻。
第三方面,本申请提供了一种NUMA系统中的临界区执行装置,所述装置包括:处理器和存储器,所述处理器用于执行所述存储器中的代码,以实现上述第一方面或第二方面中描述的方法。
第四方面,本申请提供了一种NUMA系统,包括:第一节点和第二节点,所述第一节点和所述第二节点各自具有至少一个硬件队列;
所述第一节点,用于确定第一临界区对应的目标队列,并将所述第一临界区的ID加入所述目标队列;所述目标队列为所述第一节点和所述第二节点的硬件队列中的一个;
所述第二节点,用于从所述目标队列中获取所述第一临界区的ID,并根据所述第一临界区的ID执行所述第一临界区。
在第四方面的一种可选设计中,所述目标队列为所述第二节点上的硬件队列。
在第四方面的一种可选设计中,所述临界区唯一对应于所述第一节点和所述第二节点的硬件队列中的一个硬件队列。
在第四方面的一种可选设计中,所述第一节点,具体用于:
获取所述第一临界区对应的目标队列的标识ID。
在第四方面的一种可选设计中,所述第一节点,具体用于:
向硬件加速器发送所述第一临界区的ID和所述目标队列的ID,以使得所述硬件加速器将所述第一临界区的ID加入所述目标队列的ID对应的目标队列。
在第四方面的一种可选设计中,所述第一节点,还用于:
确定第二临界区对应于所述目标队列,并将所述第二临界区加入所述目标队列;
所述第二节点还用于,从所述目标队列中获取所述第二临界区,在完成所述第一临界区的执行后,根据所述第二临界区的ID执行所述第二临界区。
在第四方面的一种可选设计中,所述第二临界区的ID加入所述目标队列的时刻晚于所述第一临界区的ID加入所述目标队列的时刻。
第五方面,本申请提供了一种NUMA系统中的临界区执行装置,所述装置包括:
确定模块,用于确定第一临界区对应的目标队列,所述NUMA系统包括多个节点,其中,每个节点具有至少一个硬件队列,所述目标队列为所述多个节点的硬件队列中的一个;
收发模块,用于将所述第一临界区的ID加入所述目标队列;从所述目标队列中获取所述第一临界区的ID;
执行模块,用于根据所述第一临界区的ID执行所述第一临界区。
在第五方面的一种可选设计中,所述第一临界区唯一对应于所述多个节点的硬件队列中的一个硬件队列。
第六方面,本申请提供了一种NUMA系统中的临界区执行装置,所述装置包括:
确定模块,用于确定第一临界区对应的目标队列,所述NUMA系统包括多个节点,其中,每个节点具有至少一个硬件队列,所述目标队列为所述多个节点的硬件队列中的一个;
收发模块,用于将所述第一临界区的ID加入所述目标队列;基于获取到锁,从所述目标队列中获取所述第一临界区的ID;
执行模块,用于根据所述第一临界区的ID执行所述第一临界区。
在第六方面的一种可选设计中,所述多个节点中的每个节点包括一个目标队列,所述锁对应于所述多个节点包括的多个目标队列,所述锁用于控制所述多个节点中的每个节点对各自具有的目标队列的访问。
在第六方面的一种可选设计中,所述目标队列为所述第一节点中的硬件队列。
在第六方面的一种可选设计中,所述第一临界区唯一对应于所述多个节点的硬件队列中的一个硬件队列。
在第六方面的一种可选设计中,所述确定模块,具体用于:
根据预先配置的对应关系确定临界区对应的目标队列。
在第六方面的一种可选设计中,所述确定模块,具体用于:
获取所述第一临界区对应的目标队列的标识ID。
在第六方面的一种可选设计中,所述收发模块,具体用于:
向硬件加速器发送所述第一临界区的ID和所述目标队列的ID,以使得所述硬件加速器将所述第一临界区的ID加入所述目标队列的ID对应的目标队列。
在第六方面的一种可选设计中,所述确定模块,还用于:
确定第二临界区对应于所述目标队列;
所述收发模块,还用于将所述第二临界区的ID加入所述目标队列;从所述目标队列中获取所述第二临界区的ID;
所述执行模块,还用于在完成所述第一临界区的执行后,根据所述第二临界区的ID执行所述第二临界区。
在第六方面的一种可选设计中,所述第二临界区的ID加入所述目标队列的时刻晚于所述第一临界区的ID加入所述目标队列的时刻。
本申请实施例中,运行于所述NUMA系统的一个节点上的第一线程确定第一临界区对应的目标队列,所述NUMA系统包括多个节点,其中,每个节点具有至少一个硬件队列,所述目标队列为所述多个节点的硬件队列中的一个;所述第一线程将所述第一临界区的ID加入所述目标队列;运行于所述NUMA系统的一个节点上的第二线程从所述目标队列中获取所述第一临界区的ID;所述第二线程根据所述第一临界区的ID执行所述第一临界区。通过上述方式,第一线程可以将第一临界区加入到目标队列,第二线程可以获取第一临界区的ID,并根据第一临界区的ID执行第一临界区,在NUMA系统的场景下,多线程并发执行临界区时,各个线程不需要进行临界区的锁竞争,进而减少了由于竞争锁的过程而耗费的系统资源。
附图说明
图1为本申请实施例提供的一种NUMA系统的示意性架构示意图;
图2为本申请实施例提供的一种NUMA系统中的临界区执行方法的示意图;
图3为本申请实施例提供的另一种NUMA系统中的临界区执行方法的示意图;
图4a至图4f为本申请实施例一种临界区执行的示意图;
图5为本申请实施例提供的一种NUMA系统的结构示意图;
图6为本申请实施例提供的一种NUMA系统中的临界区执行装置的结构示意图;
图7为本申请实施例提供的一种NUMA系统中的临界区执行装置的结构示意图;
图8为本申请实施例提供的一种NUMA系统中的节点的结构示意图;
图9为本申请实施例提供的一种NUMA系统的实施例的示意图。
具体实施方式
下面结合附图,对本申请的实施例进行描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。本领域普通技术人员可知,随着技术的发展和新场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或模块的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或模块。在本申请中出现的对步骤进行的命名或者编号,并不意味着必须按照命名或者编号所指示的时间或逻辑先后顺序执行方法流程中的步骤,已经命名或者编号的流程步骤可以根据要实现的技术目的变更执行次序,只要能达到相同或者相类似的技术效果即可。
下面首先介绍一下本申请的应用场景,在NUMA系统100的架构中,可以为多插槽系统100,参照图1,图1为本申请实施例提供的一种NUMA系统100的示意性架构示意图,如图1中示出的那样,NUMA系统100包括插槽(socket)101a和插槽101b,可以用于安装CPU的插座。插槽101a和插槽101b在本文中可被统称为插槽101。插槽101可以通过互联(interconnect)104彼此通信地耦合。示例性的,每个插槽101可经由点对点快速路径互连(quick pathinterconnect,QPI)链路来连接至其他插槽101中的每一个。需要说明的是,QPI是一种互连架构,本申请实施例中各个插槽之间的互联还可以通过其他互连架构实现,诸如其他点对点架构、环架构以及总线架构,这里并不限定。NUMA系统100中所描绘插槽的数量仅为一种示例,并且本领域技术人员将理解,可存在不同数量的插槽。例如,NUMA系统100可包括诸如,六个、四个或更少数量的插槽,又或者NUMA系统100可以包括诸如,十六个、三十二个或更多数量的插槽。
插槽101可以包括多个节点(node),每个节点有自己的中央处理器(centralprocessing unit,CPU)和内存,节点和节点之间通过互联104进行连接和通信,如图1中示出的那样,插槽101a包括节点102a和节点102b,插槽101b包括节点103a和节点103b,每个节点包括一个内存和六个CPU。需要说明的是,NUMA系统100中所描绘的节点和CPU的数量仅为一种示例,并且本领域技术人员将理解,每个插槽可以包括其他数量的节点,每个节点可以包括其他数量的CPU。
共享资源是所有线程都需要访问的内存资源,其存储于某一节点的共享内存中,而执行共享资源的代码段可以称作临界区。当NUMA系统100中的不同线程在访问共享资源(执行该共享资源的临界区)时,需要保证在同一时刻只能有一个线程对共享资源进行操作,即同一时刻,同一个共享资源的临界区只能被一个线程执行。具体的,可以使用锁对临界区进行保护,多个线程在同一个共享资源上执行临界区之前需要申请锁,只有持有锁的线程才能执行临界区,且在执行完临界区之后释放锁。
示例性的,以共享资源为变量a为例,NUMA系统100中运行的线程1需要执行临界区{a=a+1},且NUMA系统100中运行的线程2需要执行临界区{a=a+2},由于临界区{a=a+1}和临界区{a=a+2}都是针对于相同的共享资源进行的操作,因此需要通过一把锁(锁1)对临界区{a=a+2}和临界区{a=a+2}进行保护,当线程1将要执行临界区{a=a+1}时,需要竞争锁1,并基于竞争到锁1,执行临界区{a=a+1},并在执行完临界区{a=a+1}后,释放锁1。当线程2将要执行临界区{a=a+2}时,需要竞争锁1,如果此时锁1被其他线程(例如线程1)持有,则线程2需要等待直到获取到(锁1),执行临界区{a=a+2},并在执行完临界区{a=a+2}后,释放锁1。
在另一种场景中,当NUMA系统100中的不同线程在访问不同的共享资源(执行不同共享资源的临界区)时,也需要保证在同一时刻只能有一个线程对共享资源进行操作。此时,也需要使用锁对该临界区进行保护,多个线程在执行该被锁保护的临界区之前需要申请锁,只有持有锁的线程才能执行临界区,且在执行完临界区之后释放锁。
示例性的,NUMA系统100中运行的线程1需要执行临界区{c=c+1},且NUMA系统100中运行的线程2需要执行临界区{a=b;b=c;c=d},由于临界区{c=c+1}和临界区{a=b;b=c;c=d}需要其中一个临界区执行完之后再执行另一个临界区,因此需要通过一把锁(锁2)对临界区{c=c+1}和临界区{a=b;b=c;c=d}进行保护,当线程1将要执行临界区{c=c+1}时,需要竞争锁2,并基于竞争到锁2,执行临界区{c=c+1},并在执行完临界区{c=c+1}后,释放锁2。当线程2将要执行临界区{a=b;b=c;c=d}时,需要竞争锁2,如果此时锁2被其他线程(例如线程1)持有,则线程2需要等待直到获取到(锁2),执行临界区{a=b;b=c;c=d},并在执行完临界区{a=b;b=c;c=d}后,释放锁2。
需要说明的是,以上关于各个线程需要基于锁竞争的结果来确定是否执行临界的方案仅为一种示意,并不构成对本申请的限定。
以锁的类型为自旋锁(spinlock)为例,在任何时刻,自旋锁最多只能被一个线程持有,若一个线程试图请求获取已经被其他某一个线程持有的自旋锁,则线程循环尝试获取该自旋锁,等待该自旋锁重新可用。若该自旋锁未被其他任一个线程持有,则请求获取该自旋锁的线程可直接获得该自旋锁,以便于执行该自旋锁保护的临界区。
现有技术中,若NUMA系统中有n个线程需要执行一把锁保护的一个临界区,那么NUMA系统中至少需要n次竞争自旋锁的操作,针对于高级精简指令集机器(advanced RISCmachine,ARM)架构的处理器,处理器核的数量很多,因此并发竞争同一把锁的线程数量可能会很大,因此,当上述竞争自旋锁的方法应用于ARM架构的处理器的系统时,将会在系统内产生大量竞争锁的操作,而竞争锁的过程会耗费大量的系统资源,再加上ARM架构处理器的单核处理速度更低,大量竞争锁的操作很大程度的降低了ARM架构处理器的性能。
为了解决上述问题,本申请提供了一种NUMA系统中的临界区执行方法,参照图2,图2为本申请实施例提供的一种NUMA系统中的临界区执行方法的示意图,如图2示出的那样,本申请提供的NUMA系统中的临界区执行方法,具体包括:
201、运行于所述NUMA系统的一个节点上的第一线程确定第一临界区对应的目标队列,所述NUMA系统包括多个节点,其中,每个节点具有至少一个硬件队列,所述目标队列为所述多个节点的硬件队列中的一个。
本申请实施例中,NUMA系统可以包括互联的多个节点,每个节点具有至少一个硬件队列,示例性的,每个节点的硬件队列可以位于专属的静态随机存取存储器(staticrandom access memory,SRAM)中,硬件队列的访问速度和高速缓存cache的访问速度相近,每个队列可以配置包括的元素的数量和宽度,同时,每个节点的CPU可以包括为硬件队列提供服务的硬件加速器,关于硬件加速器如何为硬件队列提供服务将在后续实施例中叙述,这里不再赘述。需要说明的是,上述静态随机存取存储器SRAM为随机存取存储器的一种,该静态随机存取存储器SRAM只要保持通电,里面储存的数据就可以恒常保持。
在一个实施例中,物理队列可以是(packet order enforcer,POE)硬件队列,POE硬件队列是位于每个NUMA节点的CPU中的先入先出的队列。例如该POE队列可位于节点专属的SRAM中,队列的加包和取包的原子性有POE硬件保证。一个NUMA节点中可以具有多个POE硬件队列,例如768个POE硬件队列。POE硬件队列的加包和取包时延均小于访问内存导致的时延。
本申请实施例中,NUMA系统在数据库启动并在进行数据库初始化时,可以首先进行锁与硬件队列的绑定,具体的,针对于需要彼此之间需要原子性执行的临界区,可以通过锁来进行保护,本实施例中,可以将每一把锁(彼此之间需要原子性执行的临界区)与多个节点中的一个硬件队列绑定,相当于建立锁(彼此之间需要原子性执行的临界区)和硬件队列的绑定关系。
本申请实施例中,每把锁与彼此之间需要原子性执行的临界区相对应。若线程运行到某一临界区时,则可以通过上述临界区(锁)与硬件队列的绑定关系,确定该临界区对应的硬件队列。
需要说明的是,为了保证彼此之间需要原子性执行的临界区对应同一个锁,且彼此之间需要原子性执行的临界区对应唯一一个锁,彼此之间需要原子性执行的临界区唯一对应NUMA系统中同一个硬件队列。
本申请实施例中,每个节点具有至少一个硬件队列,每个硬件队列可以对应一个目标队列的ID,其中,目标队列的ID可以包括该目标队列所在的节点的节点ID以及该目标队列在所在的节点中的队列ID。具体的,可以在每一把锁的锁信息中记录绑定的硬件队列所在节点的节点ID以及队列ID。若某一线程需要执行临界区时,则可以查询临界区对应的锁信息,并获取到临界区对应的节点ID以及队列ID,通过上述方式,第一线程实现了确定临界区对应的目标队列。
接下来描述一个进行锁与硬件队列的绑定的流程示意。示例性的,服务器包括n个节点(节点1至节点n),每个节点具有m个硬件队列(队列1至队列m),则服务器总的硬件队列个数=n*m,服务器中总共包括x个共享资源,相应对应有x把锁(锁1至锁x),将锁1与节点1中的队列1绑定,即在锁1的锁信息中记录(节点1和队列1),即完成了将锁1与节点1中的队列1的绑定,以及类推,将剩余的x-1把锁与剩余的队列进行绑定。
例如,以共享资源为变量a为例,NUMA系统100中运行的线程1需要执行临界区{a=a+1},且NUMA系统100中运行的线程2需要执行临界区{a=a+2},则临界区{a=a+1}和临界区{a=a+2}为彼此之间需要原子性执行的临界区,临界区{a=a+1}和临界区{a=a+2}对应一个目标队列。
需要说明的是,彼此之间需要原子性执行的临界区可以不对应同一个共享资源,例如可以参考上述NUMA系统100中运行的线程1需要执行临界区{c=c+1},且NUMA系统100中运行的线程2需要执行临界区{a=b;b=c;c=d}的例子,此时,临界区{c=c+1}和临界区{a=b;b=c;c=d}不对应于同一个共享资源,但彼此之间仍然需要原子性执行,因此,需要将上述临界区{c=c+1}和临界区{a=b;b=c;c=d}对应同一个目标队列。
本申请实施例中,NUMA系统中的一个节点运行有第一线程,第一线程包括临界区,在第一线程即将执行临界区时,可以确定所述临界区对应的目标队列(例如可以获取对应的目标队列的ID)。
可选地,在一种实现中,在第一线程即将执行临界区时,可以获取该临界区对应的锁信息,该锁信息包括临界区对应的目标队列的ID,第一线程可以通过获取该临界区对应的目标队列的ID来实现确定临界区对应的目标队列的步骤。需要说明的是,上述获取该临界区对应的锁信息,可以通过在该临界区中设置访问锁信息的任务指针来实现,具体的,当第一线程执行临界区之前,可以基于访问锁信息的任务指针,访问内存的对应位置,并获取到锁信息。
示例性的,NUMA系统中的一个节点运行有第一线程,第一线程包括临界区{a=a+1},临界区{a=a+1}对应于锁信息,该锁信息中保存有硬件队列的ID{节点2,队列5},在第一线程即将执行临界区{a=a+1}时,需要获取对应的锁信息,并从对应的锁信息中获取硬件队列的ID{节点2,队列5}。
202、所述第一线程将所述第一临界区的标识ID加入所述目标队列。
本申请实施例中,运行于所述NUMA系统的一个节点上的第一线程确定第一临界区对应的目标队列之后,所述第一线程可以将所述第一临界区的标识ID加入所述目标队列。
需要说明的是,本申请实施例中临界区的ID是可以唯一指向该临界区的标识,基于临界区的标识,线程可以确定临界区在内存中的地址,进而根据该地址加载和执行临界区。
示例性的,临界区的ID可以是临界区的任务指针,即指向临界区地址的指针。
可选地,所述第一线程获取到所述临界区对应的目标队列的ID之后,所述第一线程可以向硬件加速器发送所述第一临界区的标识ID和所述目标队列的ID,以使得所述硬件加速器将所述第一临界区的标识ID加入所述目标队列的ID对应的目标队列。
本申请实施例中,目标队列的ID可以为目标队列的队列ID,其中,队列ID可以是队列的编号。
本申请实施例中,服务器中的每个节点上可以设置有对应的硬件加速器,每个硬件加速器可以维护本地节点中的硬件队列。本申请实施例中,第一线程可以获取到目标队列所在节点的节点ID,并通过获取到的节点ID路由到对应的节点中的硬件加速器,向硬件加速器发送目标队列的队列ID和第一临界区的ID。硬件加速器可以接收目标队列的队列ID和第一临界区,并将该第一临界区的ID加入目标队列。
需要说明的是,若临界区对应的目标队列为目标节点本地的队列,则可以直接向本地的硬件加速器发送目标队列的队列ID和第一临界区的ID。
可选地,在一种实施例中,硬件加速器可以提供第一接口,该第一接口用于接收第一线程发送的目标队列的队列ID以及第一临界区的ID,并将该第一临界区的ID加入到目标队列的队列ID对应的目标队列中。
需要说明的是,上述接口的描述仅为一种示意,实际应用中还可以在硬件加速器上部署其他功能的接口。
可选地,本申请实施例中,第一线程可以向硬件加速器发送第一临界区的任务指针,相应的,硬件加速器可以将第一临界区的任务指针加入对应的目标队列,该任务指针指示第一临界区的地址,第二线程通过从目标队列中获取该任务指针,即可确定第一临界区在内存中的地址,进而根据该地址加载和执行第一临界区。
本申请实施例中,NUMA系统中的多个线程可以依次运行到同一把锁保护的临界区,则多个线程可以依次确定临界区对应的目标队列,并使得线程依次将临界区的ID加入对应的目标队列中,例如,运行于NUMA系统的第三线程运行到第二临界区时,所述第三线程确定所述临界区对应于所述目标队列之后,并将所述第二临界区的ID加入所述目标队列。
可选地,在一种实施例中,第一线程将所述第一临界区的ID加入所述目标队列的第一元素中,所述第三线程可以将所述第二临界区的ID加入所述目标队列的第二元素中,其中,第一元素和第二元素为目标队列中的不同元素。即,针对于同一把锁保护的不同临界区的ID,可以加到目标队列的不同元素中。
本申请实施例中,所述第一线程将所述第一临界区的ID加入所述目标队列之后,第一线程可以进入睡眠状态,关于所述第一线程如何进入睡眠状态可以参照现有技术的实现方式,这里不再赘述。
203、运行于所述NUMA系统的一个节点上的第二线程从所述目标队列中获取所述第一临界区的ID。
本申请实施例中,第二线程可以从目标队列中获取所述第一临界区的ID。其中,第二线程可以与第一线程位于同一个节点上,第二线程也可以与第一线程位于不同的节点上。
本申请实施例中,NUMA系统中的每个目标队列可以唯一对应有一个第二线程,相应的,运行于所述NUMA系统的一个节点上的第二线程可以从对应的所述目标队列中获取所述第一临界区。
可选地,在一种实施例中,硬件加速器可以提供第二接口,第二线程可以通过该第二接口获取对应的目标队列包括的第一临界区的ID。
可选地,第二线程可以每隔预设时间段从目标队列中获取第一临界区的ID。
在一种实施例中,所述第三线程将所述第二临界区的ID加入所述目标队列之后,目标队列中包括第一临界区的ID和第二临界区的ID,此时第二线程通过硬件加速器的第二接口从所述目标队列中获取所述第一临界区的ID和第二临界区的ID。
在一种实施例中,所述第三线程将所述第二临界区的ID加入所述目标队列之后,目标队列中包括第一临界区的ID和第二临界区的ID,此时第二线程通过硬件加速器的第二接口从所述目标队列中获取所述第一临界区的ID,并在第一临界区执行完成之后,再通过硬件加速器的第二接口从所述目标队列中获取所述第二临界区的ID。
可选地,在一种实施例中,若针对于同一把锁保护的临界区,加入到目标队列的不同元素中,例如,目标队列中的第一元素包括第一临界区的ID,目标队列中的第二元素包括第二临界区的ID,则第二线程可以通过硬件加速器的第二接口依次或同时获取第一元素中的第一临界区的ID和第二元素中的第二临界区的ID。
本申请实施例中,目标队列为运行有所述第二线程的节点上的硬件队列。
本申请实施例中,由于第二线程可以从所在的节点上的本地目标队列获取第一临界区的ID,可以降低获取临界区的时延。
204、所述第二线程根据所述第二临界区的ID执行所述第一临界区。
本申请实施例中,第二线程在获取到第一临界区的ID之后,可以根据第一临界区的ID执行所述第一临界区。
可选地,在一种实施例中,第二线程在获取到第一临界区的ID之后,可以根据第一临界区的ID确定第一临界区在内存中的地址,进而根据该地址加载和执行第一临界区。
在一种实施例中,所述第二线程获取到目标队列的第二临界区的ID之后,可以根据第二临界区的ID执行所述第二临界区。
本申请实施例中,所述第二线程在完成所述第一临界区的执行之后,执行所述第二临界区。即本实施例中,第二线程不同时执行同一把锁保护的不同临界区,保证了临界区的原子性执行。
本申请实施例中,所述第二线程执行完所述第一临界区之后,所述第二线程可以唤醒所述第一线程。
可选地,在一种实施例中,所述目标队列为先入先出FIFO队列。
本申请实施例中,所述第一线程在第一时刻将所述第一临界区的ID加入所述目标队列,所述第一线程在第二时刻将所述第二临界区的ID加入所述目标队列,其中,所述第一时刻在所述第二时刻之前。
本申请实施例中,第二线程在第三时刻从所述目标队列中获取所述第二临界区的ID,第二线程在第四时刻从所述目标队列中获取所述第二临界区的ID,所述第三时刻在所述第四时刻之前。相当于,第二线程可以先获取到先加入目标队列的第一临界区的ID,然后再获取到目标队列的第二临界区的ID。
可选地,第二线程可以先获取到先加入目标队列的第一临界区的ID,在完成第一临界区的执行之后,再获取到目标队列的第二临界区的ID,再进行第二临界区的执行。通过上述方式,可以保证临界区执行的公平性,不会出现先加入目标队列的临界区的ID晚于后加入目标队列的临界区执行的情况。
本申请实施例中,运行于所述NUMA系统的一个节点上的第一线程确定第一临界区对应的目标队列,所述NUMA系统包括多个节点,其中,每个节点具有至少一个硬件队列,所述目标队列为所述多个节点的硬件队列中的一个;所述第一线程将所述第一临界区的ID加入所述目标队列;运行于所述NUMA系统的一个节点上的第二线程从所述目标队列中获取所述第一临界区的ID;所述第二线程根据第一临界区的ID执行所述第一临界区。通过上述方式,第一线程可以将第一临界区的ID加入到目标队列,第二线程可以获取第一临界区的ID,并根据第一临界区的ID执行第一临界区,在NUMA系统的场景下,多线程并发执行临界区时,各个线程不需要进行临界区的锁竞争,进而减少了由于竞争锁的过程而耗费的系统资源。
参照图3,图3为本申请实施例提供的另一种NUMA系统中的临界区执行方法的示意图,如图3中示出的那样,本申请提供的一种临界资源的访问方法,具体包括:
301、运行于所述NUMA系统的第一节点上的第一线程确定第一临界区对应的目标队列,所述第一节点具有至少一个硬件队列,所述目标队列为所述至少一个硬件队列中的一个。
本申请实施例中,NUMA系统可以包括互联的多个节点,每个节点可以包括至少一个硬件队列,可以将每一把锁绑定各个节点中的一个硬件队列,即每一把锁可以在每一个节点中都对应一个硬件队列。
本申请实施例中,在数据库启动并在进行数据库初始化时,可以首先进行锁与硬件队列的绑定,具体的,针对于需要原子性执行临界区,需要设置一把锁进行保护,本实施例中,可以将每一把锁与各个需要原子性执行的临界区进行绑定。具体的,可以将每一把锁与节点中的一个硬件队列绑定,相当于建立了各个需要原子性执行的临界区和硬件队列的绑定关系。
本申请实施例中,每把锁与一个临界区相对应,若一个节点上的线程将要执行某一临界区时,则可以通过上述临界区(锁)与硬件队列的绑定关系,确定该临界区对应的硬件队列,其中,确定的硬件队列为所在节点对应的硬件队列。
本申请实施例中,运行在NUMA系统中的第一节点可以包括多个硬件队列,每个硬件队列可以对应一个目标队列的标识ID,其中,目标队列的ID可以包括为该目标队列在所在的节点中的队列ID。具体的,可以在每一把锁的锁信息中记录绑定的硬件队列的队列ID。若第一节点的第一线程将要执行第一临界区,则第一线程可以查询第一临界区对应的锁信息,并从对应的锁信息中获取到第一临界区对应的队列ID。
接下来描述一个锁与硬件队列的绑定的流程示意。示例性的,第一节点包括m个硬件队列(队列1至队列m),NUMA系统中包括m个锁(锁1至锁m),将锁1与队列1绑定,即在锁1的锁信息中记录(队列1),即完成了将锁1与队列1的绑定,以及类推,将剩余的m-1把锁与剩余的硬件队列进行绑定。相应的,锁1需要保护的节点1上的临界区都对应于队列1。
本申请实施例中,运行于所述第一节点的第三线程也可以确定第二临界区对应于所述目标队列。
302、所述第一线程将所述第一临界区的ID加入所述目标队列。
步骤302的具体描述可以参照图2对应的实施例中步骤202的描述,这里不再赘述。
303、基于运行于所述第一节点的第二线程获取到锁,所述第二线程从所述目标队列中获取所述第一临界区的ID。
和图2对应的实施例中不同的是,本申请实施例中,由于NUMA系统的每个节点都包括一个与临界区对应的目标队列,因此,第二线程需要在NUMA系统中竞争NUMA系统包括的多个目标队列对应的互斥锁,该互斥锁可以控制NUMA系统中各个节点中对于各自所在的目标队列的访问,通过上述方式,使得针对于同一把锁保护的临界区,系统只有一个线程在执行。
在一种实施例中,前述锁为互斥锁,具体的,NUMA系统的共享内存中可以维护至少一个链表,每个链表对应于一个目标队列,获取到上述互斥锁的线程位于该链表的头部,表示当前正在执行对应的临界区的线程,该链表头部的线程之后还会串行连接有其他的线程,表示线程执行临界区的顺序,若当前位于头部的线程执行完临界区之后,会通过next指针唤醒下一个线程。此时若有其他线程需要执行该链表对应的临界区,则会加到该链表的尾部。
可选地,在一种实施例中,可以在链表中设置一个全局的指针,指向当前链表的尾部,链表中的头部是当前正在运行的线程,此时有线程想加入执行队列,可以使用compare-and-swap函数原子性的让全局的指针指向自己,且同时把当前运行的尾部的Next指针也指向自己,即原子性的加入了执行队列,每个线程执行完后,通过Next指针唤醒下一个应该执行的线程,以此来完成临界区全局的唯一性的执行。
在一种实施例中,前述锁为自旋锁。
示例性的,NUMA系统可以包括第一节点和第二节点,其中第一节点运行有第一线程和第二线程,第二节点运行有第四线程和第五线程,第一线程和第四线程都包括需要同一把锁保护的临界区(第一线程包括第一临界区,第四线程包括第四临界区),第一节点具有对应于第一临界区的目标队列1,第二节点具有对应于第四临界区的目标队列2。
本申请实施例中,第一线程在执行第一临界区之前可以确定第一临界区对应的目标队列1,将所述第一临界区的ID加入目标队列1;第四线程在执行第四临界区之前可以确定第四临界区对应的目标队列2,将所述第四临界区的ID加入目标队列2。
第二线程和第五线程竞争目标队列1和目标队列2对应的锁,若第二线程获取到锁,则第二线程从目标队列1中获取第一临界区的ID,执行第一临界区,并释放锁。此时,第五线程获取到锁,第五线程从目标队列2中获取第四临界区的ID,执行第四临界区,并释放锁。
304、第二线程根据第一临界区的ID执行第一临界区。
步骤304的具体描述可以参照图2对应的实施例中步骤204的描述,这里不再赘述。
本申请实施例中,运行于所述NUMA系统的第一节点上的第一线程确定第一临界区对应的目标队列,所述第一节点具有至少一个硬件队列,所述目标队列为所述至少一个硬件队列中的一个;所述第一线程将所述第一临界区的ID加入所述目标队列;基于运行于所述第一节点的第二线程获取到锁,所述第二线程从所述目标队列中获取所述第一临界区的ID;所述第二线程根据当地第一临界区的ID执行所述第一临界区。通过上述方式,第一线程可以将第一临界区加入到第一节点的目标队列,第一节点中的第二线程在获取到目标队列的锁后,可以获取第一临界区的ID,并根据第一临界区的ID执行第一临界区,使得NUMA系统中只存在对于各个目标队列的竞争,不需要线程每次执行临界区都进行临界区的锁竞争,减少了NUMA系统中锁竞争的次数,降低了由于锁竞争而导致的开销。
参照图4a至图4f,图4a至图4f为本申请实施例一种临界区执行的示意图,本申请实施例中,线程1、线程2、线程3包括需要同一把锁保护的临界区,线程1和线程2是节点1上运行的线程,线程3是节点2上运行的线程,第一节点上还运行有线程4,第二节点上还运行有线程5,节点1具有物理队列0至物理队列N,节点2具有物理队列0至物理队列N。
如图4a中示出的那样,线程1即将执行临界区1时,将临界区1的ID加入到节点1中的物理队列0中。具体的,线程1可以从要执行的临界区1对应的锁信息中获取对应的物理队列的ID(物理队列0),线程1可以向硬件加速器发送临界区1和物理队列的标识(物理队列0),硬件加速器可以基于线程1发送的物理队列的标识(物理队列0),将临界区1的ID加入到物理队列0中。类似的,线程2即将执行临界区2时,将临界区2的ID加入到节点1中的物理队列0中。类似的,线程3即将执行临界区3时,将临界区3的ID加入到节点2中的物理队列0中。
同时,线程4和线程5竞争锁。
如图4b中示出的那样,线程4获取到锁,线程5处于等待锁的状态。
如图4c中示出的那样,线程4获取到节点1的物理队列0中的临界区1的ID和临界区2的ID,并执行临界区1和临界区2。
如图4d中示出的那样,线程4在执行完临界区1和临界区2之后,将锁释放。
如图4e中示出的那样,线程5获取到锁,获取到节点2的物理队列0中的临界区3的ID,并执行临界区3。
如图4f中示出的那样,线程4将锁释放。
上面对本申请实施例中的NUMA系统中的临界区执行方法进行了描述,下面对本申请实施例中的NUMA系统中的临界区执行装置进行描述,参照图5,图5为本申请实施例提供的一种NUMA系统的结构示意图,如图5中示出的那样,本申请实施例提供的一种NUMA系统包括:第一节点501和第二节点502,所述第一节点和所述第二节点各自具有至少一个硬件队列;
所述第一节点501,用于确定第一临界区对应的目标队列,并将所述第一临界区的ID加入所述目标队列;所述目标队列为所述第一节点和所述第二节点的硬件队列中的一个;
所述第二节点502,用于从所述目标队列中获取所述第一临界区的ID,并根据所述第一临界区的ID执行所述第一临界区。
可选地,在一种实施例中,所述目标队列为所述第二节点502上的硬件队列。
可选地,在一种实施例中,所述临界区唯一对应于所述第一节点501和所述第二节点502的硬件队列中的一个硬件队列。
可选地,在一种实施例中,所述第一节点501,具体用于:
根据预先配置的对应关系确定临界区对应的目标队列。
可选地,在一种实施例中,所述第一节点501,具体用于:
获取所述第一临界区对应的目标队列的标识ID。
可选地,在一种实施例中,所述第一节点501,具体用于:
向硬件加速器发送所述第一临界区的ID和所述目标队列的ID,以使得所述硬件加速器将所述第一临界区的ID加入所述目标队列的ID对应的目标队列。
可选地,在一种实施例中,所述第一节点501,还用于:
确定第二临界区对应于所述目标队列,并将所述第二临界区加入所述目标队列;
所述第二节点502还用于,从所述目标队列中获取所述第二临界区,在完成所述第一临界区的执行后,根据所述第二临界区的ID执行所述第二临界区。
可选地,在一种实施例中,所述第二临界区的ID加入所述目标队列的时刻晚于所述第一临界区的ID加入所述目标队列的时刻。
参照图6,图6为本申请实施例提供的一种NUMA系统中的临界区执行装置的结构示意图,图6中示出的NUMA系统中的临界区执行装置可以为一个NUMA节点,如图6中示出的那样,本申请实施例提供的一种NUMA系统中的临界区执行装置,包括:
确定模块601,用于确定第一临界区对应的目标队列,所述NUMA系统包括多个节点,其中,每个节点具有至少一个硬件队列,所述目标队列为所述多个节点的硬件队列中的一个;
收发模块602,用于将所述第一临界区的ID加入所述目标队列;从所述目标队列中获取所述第一临界区的ID;
执行模块603,用于根据所述第一临界区的ID执行所述第一临界区。
可选地,在一种实施例中,所述第一临界区唯一对应于所述多个节点的硬件队列中的一个硬件队列。
参照图7,图7为本申请实施例提供的一种NUMA系统中的临界区执行装置的结构示意图,图7中示出的NUMA系统中的临界区执行装置可以为一个NUMA节点,如图7中示出的那样,本申请实施例提供的一种NUMA系统中的临界区执行装置,包括:
确定模块701,用于确定第一临界区对应的目标队列,所述NUMA系统包括多个节点,其中,每个节点具有至少一个硬件队列,所述目标队列为所述多个节点的硬件队列中的一个;
收发模块702,用于将所述第一临界区的ID加入所述目标队列;基于获取到锁,从所述目标队列中获取所述第一临界区的ID;
执行模块703,用于根据第一临界区的ID执行所述第一临界区。
可选地,在一种实施例中,所述多个节点中的每个节点包括一个目标队列,所述互斥锁对应于所述多个节点包括的多个目标队列,所述互斥锁用于控制所述多个节点中的每个节点对各自具有的目标队列的访问。
可选地,在一种实施例中,所述目标队列为所述第一节点中的硬件队列。
可选地,在一种实施例中,所述第一临界区唯一对应于所述多个节点的硬件队列中的一个硬件队列。
可选地,在一种实施例中,所述确定模块701,具体用于:
获取所述第一临界区对应的目标队列的标识ID。
可选地,在一种实施例中,所述收发模块702,具体用于:
向硬件加速器发送所述第一临界区的ID和所述目标队列的ID,以使得所述硬件加速器将所述第一临界区的ID加入所述目标队列的ID对应的目标队列。
可选地,在一种实施例中,所述确定模块701,还用于:
确定第二临界区对应于所述目标队列;
所述收发模块702,还用于将所述第二临界区的ID加入所述目标队列;从所述目标队列中获取所述第二临界区的ID;
所述执行模块703,还用于在完成所述第一临界区的执行后,根据第二临界区的ID执行所述第二临界区。
可选地,在一种实施例中,所述第二临界区的ID加入所述目标队列的时刻晚于所述第一临界区的ID加入所述目标队列的时刻。
在硬件实现上,上述确定模块601、确定模块701、执行模块603和执行模块703可以为处理器的模块,收发模块602和收发模块702可以为收发器,或者接收器和发送器集成的模块,接收器与发送器也可以构成通信接口。
参照图8,图8为本申请实施例提供的一种NUMA系统中的节点的结构示意图,如图8示出的那样,本申请实施例提供的一种NUMA系统中的节点,包括:
处理器802、通信接口803、存储器801以及总线804。处理器802、通信接口803以及存储器801通过总线804相互连接。在本申请的实施例中,处理器802用于对所述NUMA系统中的节点的动作进行控制管理,例如,处理器802用于支持所述NUMA系统中的节点执行图2中的步骤201至步骤204、以及图3中的步骤301至步骤304,和/或用于本文所描述的技术的其他过程。通信接口803用于支持所述NUMA系统中的节点可以和其他节点进行通信。存储器801,用于存储所述NUMA系统中的节点中的程序代码和数据。
其中,处理器802可以是中央处理器单元,通用处理器,数字信号处理器,专用集成电路,现场可编程门阵列或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器802也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理器和微处理器的组合等等。总线804可以是外设部件互连标准(peripheralcomponent interconnect,PCI)总线或扩展工业标准结构(extended industry standardarchitecture,EISA)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
参照图9,图9为本申请实施例提供的一种NUMA系统的实施例的示意图,如图9中示出的那样,NUMA系统包括互联的多个NUMA节点,每个NUMA节点可以执行图2或图3对应的实施例中的步骤。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者其他网络设备等)执行本申请图2或图3实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-onlymemory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (35)
1.一种非统一内存访问NUMA系统中的临界区执行方法,其特征在于,所述方法包括:
运行于所述NUMA系统的一个节点上的第一线程确定第一临界区对应的目标队列,所述NUMA系统包括多个节点,其中,每个节点具有至少一个硬件队列,所述目标队列为所述多个节点的硬件队列中的一个;
所述第一线程将所述第一临界区的标识ID加入所述目标队列;
运行于所述NUMA系统的一个节点上的第二线程从所述目标队列中获取所述第一临界区的ID;
所述第二线程根据所述第一临界区的ID执行所述第一临界区。
2.根据权利要求1所述的方法,其特征在于,所述目标队列为运行有所述第二线程的节点上的硬件队列。
3.根据权利要求1或2所述的方法,其特征在于,所述临界区唯一对应于所述多个节点的硬件队列中的一个硬件队列。
4.根据权利要求1至3任一所述的方法,其特征在于,所述第一线程确定所述第一临界区对应的目标队列,包括:
所述第一线程获取所述第一临界区对应的目标队列的标识ID。
5.根据权利要求4所述的方法,其特征在于,所述第一线程将所述第一临界区加入所述目标队列,包括:
所述第一线程向硬件加速器发送所述第一临界区的ID和所述目标队列的ID,以使得所述硬件加速器将所述第一临界区的ID加入所述目标队列的ID对应的目标队列。
6.根据权利要求1至5任一所述的方法,其特征在于,所述方法还包括:
所述第一线程将所述第一临界区加入所述目标队列之后,所述第一线程进入睡眠状态;
所述第二线程执行所述第一临界区之后,所述第二线程唤醒所述第一线程。
7.根据权利要求1至6任一所述的方法,其特征在于,所述方法还包括:
运行于所述NUMA系统的一个节点上的第三线程确定第二临界区对应于所述目标队列;
所述第三线程将所述第二临界区的ID加入所述目标队列;
所述第二线程从所述目标队列中获取所述第二临界区的ID;
所述第二线程在完成所述第一临界区的执行后,根据所述第二临界区的ID执行所述第二临界区。
8.根据权利要求7所述的方法,其特征在于,所述第二临界区的ID加入所述目标队列的时刻晚于所述第一临界区的ID加入所述目标队列的时刻。
9.一种NUMA系统中的临界区执行方法,其特征在于,所述方法包括:
运行于所述NUMA系统的第一节点上的第一线程确定第一临界区对应的目标队列,所述第一节点具有至少一个硬件队列,所述目标队列为所述至少一个硬件队列中的一个;
所述第一线程将所述第一临界区的ID加入所述目标队列;
基于运行于所述第一节点的第二线程获取到锁,所述第二线程从所述目标队列中获取所述第一临界区的ID;
所述第二线程根据所述第一临界区的ID执行所述第一临界区。
10.根据权利要求9所述的方法,其特征在于,所述NUMA系统包括多个节点,所述多个节点中的每个节点包括一个目标队列,所述锁对应于所述多个节点包括的多个目标队列,所述锁用于控制所述多个节点中的每个节点对各自具有的目标队列的访问。
11.根据权利要求9或10所述的方法,其特征在于,所述目标队列为所述第一节点中的硬件队列。
12.根据权利要求9至12任一所述的方法,其特征在于,所述第一临界区唯一对应于所述多个节点的硬件队列中的一个硬件队列。
13.根据权利要求9至12任一所述的方法,其特征在于,所述第一线程确定第一临界区对应的目标队列,包括:
所述第一线程获取所述第一临界区对应的目标队列的标识ID。
14.根据权利要求12所述的方法,其特征在于,所述第一线程将所述第一临界区的ID加入所述目标队列,包括:
所述第一线程向硬件加速器发送所述第一临界区的ID和所述目标队列的ID,以使得所述硬件加速器将所述第一临界区的ID加入所述目标队列的ID对应的目标队列。
15.根据权利要求9至14任一所述的方法,其特征在于,所述方法还包括:
所述第一线程将所述第一临界区的ID加入所述目标队列之后,所述第一线程进入睡眠状态;
所述第二线程执行所述第一临界区之后,所述第二线程唤醒所述第一线程。
16.根据权利要求9至15任一所述的方法,其特征在于,所述方法还包括:
运行于所述第一节点的第三线程确定第二临界区对应于所述目标队列;
所述第三线程将所述第二临界区的ID加入所述目标队列;
所述第二线程从所述目标队列中获取所述第二临界区的ID;
所述第二线程在完成所述第一临界区的执行后,根据所述第二临界区的ID执行所述第二临界区。
17.根据权利要求16所述的方法,其特征在于,所述第二临界区的ID加入所述目标队列的时刻晚于所述第一临界区的ID加入所述目标队列的时刻。
18.一种非统一内存访问NUMA系统中的临界区执行装置,其特征在于,所述装置包括:处理器和存储器,所述处理器用于执行所述存储器中的代码,以实现权利要求1至17中的任一项所述方法。
19.一种非统一内存访问NUMA系统,其特征在于,包括:第一节点和第二节点,所述第一节点和所述第二节点各自具有至少一个硬件队列;
所述第一节点,用于确定第一临界区对应的目标队列,并将所述第一临界区的ID加入所述目标队列;所述目标队列为所述第一节点和所述第二节点的硬件队列中的一个;
所述第二节点,用于从所述目标队列中获取所述第一临界区的ID,并根据所述第一临界区的ID执行所述第一临界区。
20.根据权利要求19所述的NUMA系统,其特征在于,所述目标队列为所述第二节点上的硬件队列。
21.根据权利要求19或20所述的NUMA系统,其特征在于,所述临界区唯一对应于所述第一节点和所述第二节点的硬件队列中的一个硬件队列。
22.根据权利要求19至21任一所述的NUMA系统,其特征在于,所述第一节点,具体用于:
获取所述第一临界区对应的目标队列的标识ID。
23.根据权利要求22所述的NUMA系统,其特征在于,所述第一节点,具体用于:
向硬件加速器发送所述第一临界区的ID和所述目标队列的ID,以使得所述硬件加速器将所述第一临界区的ID加入所述目标队列的ID对应的目标队列。
24.根据权利要求19至23任一所述的NUMA系统,其特征在于,所述第一节点,还用于:
确定第二临界区对应于所述目标队列,并将所述第二临界区加入所述目标队列;
所述第二节点还用于,从所述目标队列中获取所述第二临界区,在完成所述第一临界区的执行后,根据所述第二临界区的ID执行所述第二临界区。
25.根据权利要求24所述的NUMA系统,其特征在于,所述第二临界区的ID加入所述目标队列的时刻晚于所述第一临界区的ID加入所述目标队列的时刻。
26.一种非统一内存访问NUMA系统中的临界区执行装置,其特征在于,所述装置包括:
确定模块,用于确定第一临界区对应的目标队列,所述NUMA系统包括多个节点,其中,每个节点具有至少一个硬件队列,所述目标队列为所述多个节点的硬件队列中的一个;
收发模块,用于将所述第一临界区的ID加入所述目标队列;从所述目标队列中获取所述第一临界区的ID;
执行模块,用于根据所述第一临界区的ID执行所述第一临界区。
27.根据权利要求26所述的装置,其特征在于,所述第一临界区唯一对应于所述多个节点的硬件队列中的一个硬件队列。
28.一种非统一内存访问NUMA系统中的临界区执行装置,其特征在于,所述装置包括:
确定模块,用于确定第一临界区对应的目标队列,所述NUMA系统包括多个节点,其中,每个节点具有至少一个硬件队列,所述目标队列为所述多个节点的硬件队列中的一个;
收发模块,用于将所述第一临界区的ID加入所述目标队列;基于获取到锁,从所述目标队列中获取所述第一临界区的ID;
执行模块,用于根据所述第一临界区的ID执行所述第一临界区。
29.根据权利要求28所述的装置,其特征在于,所述多个节点中的每个节点包括一个目标队列,所述锁对应于所述多个节点包括的多个目标队列,所述锁用于控制所述多个节点中的每个节点对各自具有的目标队列的访问。
30.根据权利要求28或29所述的装置,其特征在于,所述目标队列为所述第一节点中的硬件队列。
31.根据权利要求28至30任一所述的装置,其特征在于,所述第一临界区唯一对应于所述多个节点的硬件队列中的一个硬件队列。
32.根据权利要求28至31任一所述的装置,其特征在于,所述确定模块,具体用于:
获取所述第一临界区对应的目标队列的标识ID。
33.根据权利要求32所述的装置,其特征在于,所述收发模块,具体用于:
向硬件加速器发送所述第一临界区的ID和所述目标队列的ID,以使得所述硬件加速器将所述第一临界区的ID加入所述目标队列的ID对应的目标队列。
34.根据权利要求28至33任一所述的装置,其特征在于,所述确定模块,还用于:
确定第二临界区对应于所述目标队列;
所述收发模块,还用于将所述第二临界区的ID加入所述目标队列;从所述目标队列中获取所述第二临界区的ID;
所述执行模块,还用于在完成所述第一临界区的执行后,根据所述第二临界区的ID执行所述第二临界区。
35.根据权利要求34所述的装置,其特征在于,所述第二临界区的ID加入所述目标队列的时刻晚于所述第一临界区的ID加入所述目标队列的时刻。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910690879.XA CN112306703A (zh) | 2019-07-29 | 2019-07-29 | 一种numa系统中的临界区执行方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910690879.XA CN112306703A (zh) | 2019-07-29 | 2019-07-29 | 一种numa系统中的临界区执行方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112306703A true CN112306703A (zh) | 2021-02-02 |
Family
ID=74330152
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910690879.XA Pending CN112306703A (zh) | 2019-07-29 | 2019-07-29 | 一种numa系统中的临界区执行方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112306703A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113694536A (zh) * | 2021-09-07 | 2021-11-26 | 北京蔚领时代科技有限公司 | 一种面向云游戏的场景管理方法、装置、设备及介质 |
CN115878335A (zh) * | 2021-09-27 | 2023-03-31 | 华为技术有限公司 | 一种锁传递方法及相关装置 |
-
2019
- 2019-07-29 CN CN201910690879.XA patent/CN112306703A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113694536A (zh) * | 2021-09-07 | 2021-11-26 | 北京蔚领时代科技有限公司 | 一种面向云游戏的场景管理方法、装置、设备及介质 |
CN115878335A (zh) * | 2021-09-27 | 2023-03-31 | 华为技术有限公司 | 一种锁传递方法及相关装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8209690B2 (en) | System and method for thread handling in multithreaded parallel computing of nested threads | |
US8438341B2 (en) | Common memory programming | |
US9158597B2 (en) | Controlling access to shared resource by issuing tickets to plurality of execution units | |
US9733981B2 (en) | System and method for conditional task switching during ordering scope transitions | |
US20120110303A1 (en) | Method for Process Synchronization of Embedded Applications in Multi-Core Systems | |
US11537430B1 (en) | Wait optimizer for recording an order of first entry into a wait mode by a virtual central processing unit | |
JP5745868B2 (ja) | マルチプロセッサシステム | |
US8065681B2 (en) | Generic shared memory barrier | |
US20040187118A1 (en) | Software barrier synchronization | |
CN112306703A (zh) | 一种numa系统中的临界区执行方法及装置 | |
CN115061803A (zh) | 一种多核处理系统及其任务调度方法、芯片、存储介质 | |
Dvir et al. | Mutual exclusion algorithms with constant RMR complexity and wait-free exit code | |
US20050149928A1 (en) | Behavioral model based multi-threaded architecture | |
WO2017044097A1 (en) | Request of an mcs lock by guests | |
US11301304B2 (en) | Method and apparatus for managing kernel services in multi-core system | |
US9437299B2 (en) | Systems and methods for order scope transitions using cam | |
JP7346649B2 (ja) | 同期制御システムおよび同期制御方法 | |
WO2017131624A1 (en) | A unified lock | |
US9792162B2 (en) | Network system, network node and communication method | |
US10310916B2 (en) | Scalable spinlocks for non-uniform memory access | |
CN112306698A (zh) | 一种numa系统中的临界区执行方法及装置 | |
JP2010092101A (ja) | 情報処理装置 | |
Kreiliger et al. | Experiments for predictable execution of GPU kernels | |
Verwielen | Performance of resource access protocols | |
JP2018049406A (ja) | 複数プロセッサ間のタスク連携装置 |
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 |