CN112306699A - 访问临界资源的方法及装置、计算机设备及可读存储介质 - Google Patents

访问临界资源的方法及装置、计算机设备及可读存储介质 Download PDF

Info

Publication number
CN112306699A
CN112306699A CN201910690999.XA CN201910690999A CN112306699A CN 112306699 A CN112306699 A CN 112306699A CN 201910690999 A CN201910690999 A CN 201910690999A CN 112306699 A CN112306699 A CN 112306699A
Authority
CN
China
Prior art keywords
thread
task
lock
target
node
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201910690999.XA
Other languages
English (en)
Other versions
CN112306699B (zh
Inventor
郑程光
周敏奇
袁通
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201910690999.XA priority Critical patent/CN112306699B/zh
Priority to PCT/CN2020/103924 priority patent/WO2021018011A1/zh
Publication of CN112306699A publication Critical patent/CN112306699A/zh
Priority to US17/587,663 priority patent/US20220147404A1/en
Application granted granted Critical
Publication of CN112306699B publication Critical patent/CN112306699B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0813Multiuser, multiprocessor or multiprocessing cache systems with a network or matrix configuration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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/5016Allocation 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5033Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering data affinity

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Multi Processors (AREA)

Abstract

本申请实施例公开了一种访问临界资源的方法及装置、计算机设备及可读存储介质,有利于减少线程竞争锁的操作数量,节约计算资源,有利于提高ARM架构处理器的性能。访问临界资源的方法包括:从第一线程和第二线程中选择第一线程竞争目标锁,第一线程待执行的第一任务和第二线程待执行的第二任务对应于目标锁;基于第一线程竞争到目标锁,使第一线程执行第一任务,并代替第二线程执行第二任务。

Description

访问临界资源的方法及装置、计算机设备及可读存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种访问临界资源的方法及装置、计算机设备及计算机可读存储介质。
背景技术
随着芯片技术的发展,多核处理器已经越来越普及,为了最大限度的发挥多核处理器的潜力,应用程序通常采用多线程的方式进行并行运行。
有些共享资源,一次只能提供给一个线程使用,将这样的共享资源称作临界资源。为了避免冲突,现有技术通常为临界资源设置锁,多个待访问同一临界资源的线程需要竞争该临界资源的锁,竞争到该锁的线程才可以执行访问该临界资源的任务,未竞争到该锁的线程需要等到该锁被释放时再次竞争该锁,以执行访问该临界资源的任务。若有n个线程需要执行访问该临界资源的任务,那么至少需要n次竞争锁的操作。
竞争锁的操作需要占用较多计算资源,现有访问临界资源的方法容易产生大量竞争锁的操作,耗费大量计算资源,尤其对于单核处理能力较低、处理器核的数目较多的进阶精简指令集机器(Advanced RISC Machine,ARM)架构的处理器,现有的临界资源访问方法将极大的降低其性能。
发明内容
本申请实施例提供了一种访问临界资源的方法及装置、计算机设备及可读存储介质,用于减少竞争锁耗费的资源,提升系统的性。
本申请第一方面提供一种访问临界资源的方法,包括从第一线程和第二线程中选择第一线程竞争目标锁,所述第一线程待执行的第一任务和所述第二线程待执行的第二任务对应于所述目标锁;基于所述第一线程竞争到所述目标锁,使所述第一线程执行所述第一任务,并代替所述第二线程执行所述第二任务。
多个任务(比如访问同一临界资源的多个任务)在同时运行时可能会出现冲突,为了避免冲突,通常用锁机制来保证多个任务被互斥的执行。锁是一种内存结构,维护着锁变量,锁变量可以是进程专用的变量,也可以是系统范围内的变量,线程竞争锁(也可以称作线程申请锁)的过程即是通过访问锁中的锁变量以尝试占用锁(lock)的过程。若锁未被其他线程占用,该线程可以占用该锁(lock),即该线程竞争到该锁;该线程完成任务后,可以通过访问锁中的锁变量释放锁(unlock)。若锁被其他线程占用,该线程需要等待该锁被释放,再次竞争锁。
本申请提供的访问临界资源的方法中,若n个线程需要互斥执行n个任务,那么最少仅需1次竞争锁的操作便可以完成这n个任务,和现有技术相比,有利于减少竞争锁的操作数量,节约计算资源,虽然ARM架构处理器的单核处理速度较低、同时运行的线程的数目较多,ARM架构处理器执行本申请实施例提供的方法有利于节约计算资源,减少竞争锁的操作对ARM架构处理器性能的影响。需要说明的是,虽然一次竞争锁的操作可以对应于多个任务的执行,但是,由于多个任务是由单个线程(即第一线程)执行的,因此,能够保证多个任务不被同时执行。
结合第一方面,在第一方面的第一种可能的实现方式中,所述第一线程代替所述第二线程执行所述第二任务包括:所述第一线程根据数据结构中记录的所述第二任务的标识执行所述第二任务。第一线程可以根据第二任务的标识执行第二任务,示例性的,第二任务的标识可以指第二任务的地址;或者,第二任务的标识可以指第二线程的线程描述符的地址,第二线程的线程描述符中存储有第二任务或第二任务的地址。当不同任务对应的功能相同时,线程在执行不同任务时可以调用同一临界区的功能,由于线程执行不同任务时向临界区维护的变量输入的内容(称作任务参数)不同,从而能够实现不同的任务。若第一任务和第二任务为利用同一临界区的功能执行的任务,第二任务的地址可以具体为第二任务的任务参数的地址,第一线程可以利用第二任务的任务参数进入自己的临界区执行第二任务。第一方面的第一种可能的实现方式为第一方面提供了一种可行的实现方式,有利于提高第一方面方法的可实施性。
结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述第二线程为在所述第一线程竞争到所述目标锁之前运行至所述第二任务的线程。换言之,基于第一线程竞争到目标锁,第一线程可以代替这样的线程执行其任务:在第一线程运行至目标锁对应的任务之前运行至目标锁对应的任务的线程。
结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第三种可能的实现方式中,所述第一线程运行至所述第一任务的时刻先于所述第二线程运行至所述第二任务的时刻。换言之,基于第一线程竞争到目标锁,第一线程可以代替这样的线程执行其任务:在第一线程运行至第一任务之后运行至目标锁对应的任务的线程。
结合第一方面至第一方面的第三种可能的实现方式中任意一种可能的实现方式,在第一方面的第四种可能的实现方式中,所述方法还包括使所述第二线程阻塞。线程阻塞通常是指一个线程在执行过程中暂停,以等待某个条件的触发。示例性的,使第二线程阻塞(或者说使第二线程进入阻塞状态)可以通过调用线程类的静态睡眠(sleep)方法来实现,此时,线程的阻塞状态具体指线程的睡眠状态,睡眠的线程不占用处理器,有利于节约计算资源;或者,使第二线程阻塞(或者说使第二线程进入阻塞状态)可以通过使线程自旋来实现,此时,线程的阻塞状态具体指线程自旋,自旋的线程占用处理器,循环判断是否满足解阻塞条件,耗费计算资源。
结合第一方面的第五种可能的实现方式,在第一方面的第四种可能的实现方式中,所述方法还包括:基于所述第一线程代替所述第二线程执行完成所述第二任务,使所述第二线程解阻塞。使线程解阻塞是指,基于导致线程阻塞的原因消除,可以使线程恢复运行。
结合第一方面至第一方面的第五种可能的实现方式中任意一种可能的实现方式,在第一方面的第六种可能的实现方式中,所述第一线程和所述第二线程为运行在NUMA系统的同一个目标节点上的线程,所述第一任务和所述第二任务用于访问所述NUMA系统的缓存,所述缓存包括多个缓存区域,每一个缓存区域对应于一个锁;所述NUMA系统包括多个节点,所述多个缓存区域对应的锁存储在所述NUMA系统的多个节点上;所述目标锁存储为在所述目标节点上的锁,这样,第一线程可以通过本地访问的方式来竞争目标锁,基于第一线程竞争到目标锁,第一线程可以访问目标锁对应的缓存区域执行第一任务和第二任务。
本申请实施例第二方面提供一种在NUMA系统中访问临界资源的方法,所述方法包括:NUMA系统中的节点运行目标线程;当所述目标线程运行至目标任务时,从多个锁中选择存储在所述节点上的目标锁,所述目标任务用于访问所述NUMA系统的缓存,所述缓存包括多个缓存区域,所述多个锁中的每个锁对应于一个缓存区域;基于所述目标线程竞争到所述目标锁,使所述目标线程执行所述目标任务。线程待执行的目标任务用于访问NUMA系统的缓存时,线程可以从多个锁中选择存储在所在节点上的锁进行竞争,这样,在竞争锁的过程中,有利于提高线程本地访问的几率,提高竞争锁的效率,进而提高任务的执行效率。
结合第二方面,在第二方面的第一种可能的实现方式中,所述方法还包括将所述多个锁分布到所述NUMA系统的多个节点上,有利于提高线程选择到存储在所在节点上的锁的概率,从而提高线程通过本地访问的方式竞争锁的概率。
结合第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,所述方法还包括记录所述多个锁中每个锁与所在节点的对应关系,有利于从多个锁中选择存储在本地的目标锁。
结合第二方面的第三种可能的实现方式,在第二方面的第四种可能的实现方式中,所述从多个锁中选择存储在所述节点上的目标锁包括按照所述对应关系从所述多个锁中选择所述目标锁。提供了一种选择目标锁的方式,有利于提高第二方面提供的实施例方法的可实施性。
本申请实施例第三方面提供一种访问临界资源的装置,包括:线程选择模块,用于从第一线程和第二线程中选择第一线程竞争目标锁,所述第一线程待执行的第一任务和所述第二线程待执行的第二任务对应于所述目标锁;任务执行模块,用于基于所述线程选择模块选择的第一线程竞争到所述目标锁,使所述第一线程执行所述第一任务,并代替所述第二线程执行所述第二任务。
结合第三方面,在第三方面的第一种可能的实现方式中,所述任务执行模块具体用于使所述第一线程根据数据结构中记录的所述第二任务的标识执行所述第二任务。
结合第三方面或第三方面的第一种,在第三方面的第二种可能的实现方式中,所述第二线程为在所述第一线程竞争到所述目标锁之前运行至所述第二任务的线程。
结合第三方面或第三方面的第一种可能的实现方式,在第三方面的第三种可能的实现方式中,所述第一线程运行至所述第一任务的时刻先于所述第二线程运行至所述第二任务的时刻。
结合第三方面至第三方面的第三种可能的实现方式,在第三方面的第四种可能的实现方式中,所述装置还包括阻塞模块,用于使所述第二线程阻塞。
结合第三方面的第四种可能的实现方式,在第三方面的第五种可能的实现方式中,所述装置还包括解阻塞模块,用于基于所述第一线程代替所述第二线程执行完成所述第二任务,使所述第二线程解阻塞。
结合第三方面至第三方面的第五种可能的实现方式中,在第三方面的第六种可能的实现方式中,所述第一线程和所述第二线程为运行在NUMA系统的同一个目标节点上的线程,所述第一任务和所述第二任务用于访问所述NUMA系统的缓存,所述缓存包括多个缓存区域,每一个缓存区域对应于一个锁;所述NUMA系统包括多个节点,所述多个缓存区域对应的锁存储在所述NUMA系统的节点上;所述目标锁存储在所述目标节点上。
第三方面提供的每个装置实施例的有益效果可以参考前述第一方面提供的每个方法实施例的相应有益效果,此处不再赘述。
本申请实施例第四方面提供一种在NUMA系统中访问临界资源的装置,所述装置设置于NUMA系统中的节点上,所述装置包括:运行模块,用于运行目标线程;锁选择模块,用于当所述目标线程运行至目标任务时,从多个锁中选择存储在所述节点上的目标锁,所述目标任务用于访问所述NUMA系统的缓存,所述缓存包括多个缓存区域,所述多个锁中的每个锁对应于一个缓存区域;任务执行模块,用于基于所述目标线程竞争到所述目标锁,使所述目标线程执行所述目标任务。
结合第四方面,在第四方面的第一种可能的实现方式中,所述装置还包括锁分布模块,用于将所述多个锁分布到所述NUMA系统的多个节点上。
结合第四方面的第一种可能的实现方式,在第四方面的第二种可能的实现方式中,所述装置还包括记录模块,用于记录所述多个锁中每个锁与所在节点的对应关系。
结合第四方面的第二种可能的实现方式,在第四方面的第三种可能的实现方式中,所述锁选择模块具体用于按照所述对应关系从所述多个锁中选择所述目标锁。
第四方面提供的每个装置实施例的有益效果可以参考前述第二方面提供的每个方法实施例的相应有益效果,此处不再赘述。
本申请实施例第五方面提供一种计算机设备,包括处理器和存储器,该处理器在运行所述存储器存储的计算机执行指令时,执行如第一方面或第一方面的任意一种可能的实现方式所述的方法,或执行如第二方面或第二方面的任意一种可能的实现方式所述的方法。
若处理器在运行所述存储器存储的计算机执行指令时,执行如第一方面的第六种可能的实现方式所述的方法,或者,执行如第二方面或第二方面的任意一种可能的实现方式所述的方法,那么该计算机设备具体可以为NUMA系统,比如基于NUMA的服务器,或者,为NUMA系统的节点。
本申请实施例第六方面提供一种计算机可读存储介质,包括指令,当所述指令在计算机上运行时,使得计算机执行如第一方面或第一方面的任意一种可能的实现方式所述的方法,或执行如第二方面或第二方面的任意一种可能的实现方式所述的方法。
附图说明
图1是现有技术中多个线程访问同一临界资源的过程示意图;
图2是本申请访问临界资源的方法一个实施例示意图;
图3是本申请访问临界资源的方法另一个实施例示意图;
图4是本申请多个线程访问同一临界资源的过程示意图;
图5是记录事务日志的流程示意图;
图6是现有NUMA系统中线程将日志片段写入缓存的过程示意图;
图7是本申请在NUMA系统中访问临界资源的方法一个实施例示意图;
图8为本申请NUMA系统中线程将日志片段写入缓存的过程示意图;
图9是本申请在NUMA系统中访问临界资源的方法另一个实施例示意图;
图10是本申请在NUMA系统中访问临界资源的方法另一个一个实施例示意图;
图11是本申请访问临界资源的装置一个实施例示意图;
图12是本申请访问临界资源的装置另一个实施例示意图;
图13是本申请访问临界资源的装置另一个实施例示意图;
图14是本申请访问临界资源的装置另一个实施例示意图;
图15是本申请计算机设备一个实施例示意图。
具体实施方式
下面结合附图,对本申请的实施例进行描述。
随着芯片技术的发展,多处理器核的计算机设备已经越来越普及,为了最大限度的发挥多处理器核的潜力,应用程序通常采用多线程的方式进行并行运行,但是,有一些任务需要互斥的执行,常见的做法是为需要互斥的执行的多个任务设置同一个锁,竞争到该锁的线程才能执行其任务。下面以需要互斥执行的任务为访问同一临界资源的任务为例进行介绍。
现在大部分多处理器核的计算机设备为多线程提供了共享资源,例如SMP(symmetrical multi-processing architecture,对称多处理架构)、NUMA(non uniformmemory access,非统一内存访问)的多处理器核(多核)的计算机设备,提供了统一的物理内存地址空间,多个线程可以通过共享变量来访问(读操作或写操作)同一个内存地址。但是,有些共享资源需要被在线程间互斥的使用,即一次只能提供给一个线程使用,将这样的共享资源称作临界资源,访问临界资源的代码段被称作临界区。为了避免资源的冲突,处理器核提供了多种同步机制来保护临界资源,例如为临界区或者说为临界资源设置锁,线程待执行的任务需要访问该临界资源时,该线程需要竞争该临界资源的锁,竞争到该锁后才可以进入临界区,访问临界资源,而未竞争到该锁的线程必须等待锁被释放后,才能再次竞争该锁。
图1是现有技术中多个线程访问同一临界资源的示意图,线条为虚线的矩形框代表临界区或临界资源,菱形框代表该临界区或临界资源的锁。参考图1,多个线程访问临界资源的过程包括:
阶段1、第一线程和第二线程待执行的任务需要访问该临界资源,第一线程和第二线程分别竞争该临界资源的锁;
阶段2、第一线程竞争到锁,第二线程等待该锁;
阶段3、第一线程进入其临界区,利用临界资源执行其任务,第二线程继续等待该锁;
阶段4、第一线程完成其任务,出临界区,并释放该锁,第二线程再次竞争该锁;
阶段5、第二线程竞争到该锁。
阶段5之后,第二线程可以进入其临界区,利用临界资源执行其任务。第二线程后续执行的步骤可以参考阶段3至阶段4中第一线程执行的步骤,此处不再赘述。
现有访问临界资源的方法中,线程竞争到锁后,进入临界区执行自身的任务,若有n个线程需要利用同一临界资源执行任务,那么至少需要n次竞争锁的操作。由于ARM处理器和X86处理器相比,处理器核的数量更多,同时运行的线程更多,因此,ARM架构处理器执行现有访问临界资源的方法时,需执行大量竞争锁的操作,耗费大量的计算资源,再加上ARM架构处理器的单核处理速度较低,大量竞争锁的操作将很大程度的降低ARM架构处理器的性能。
为了提高ARM架构处理器的性能,本申请提供了一种访问临界资源的方法,参考图2,本申请访问临界资源的方法一个实施例可以包括如下步骤:
201、从第一线程和第二线程中选择第一线程竞争目标锁;
可以运行多个线程,假设多个线程待执行的任务对应于同一个锁,需要互斥的执行,将该锁称作目标锁。可以从多个线程中选择一个线程来竞争目标锁,为了便于描述,将选择的该线程称作第一线程,将第一线程待执行的、对应于目标锁的任务称作第一任务;将该多个线程中第一线程以外的其他线程称作第二线程,第二线程待执行的、对应于目标锁的任务称作第二任务。第二线程可以对应于单个线程,或者可以对应于多个线程。和现有技术中第一线程和第二线程均需竞争该目标锁不同,本申请实施例中,仅使该多个线程中的第一线程竞争目标锁,即从包含多个线程的线程组中确定出一个线程来代表本组竞争目标锁,而组内的其它线程则可以退出竞争,比如进入休眠状态。
202、基于第一线程竞争到目标锁,使第一线程执行第一任务,并代替第二线程执行第二任务。
基于第一线程竞争到目标锁,和现有技术中第一线程仅执行自身的第一任务不同,第一线程执行第一任务,并代替第二线程执行第二任务。
可见,本申请提供的访问临界资源的方法中,若n个线程需要互斥执行n个任务,那么最少仅需1次竞争锁的操作便可以完成这n个任务,和现有技术相比,有利于减少竞争锁的操作数量,节约计算资源,虽然ARM架构处理器的单核处理速度较低、同时运行的线程的数目较多,ARM架构处理器执行本申请实施例提供的方法有利于节约计算资源,减少竞争锁的操作对ARM架构处理器性能的影响。
本申请实施例不对目标锁的类型进行限定,示例性的,该目标锁可以为互斥锁或自旋锁,其中,互斥锁有利于减少对计算资源的占用,有利于降低竞争锁的操作对处理器的性能的影响,更适合应用于ARM架构处理器。
在一种可能的实现方式中,为了使第二线程在运行至第二任务时不竞争目标锁,本申请实施例方法还可以包括如下步骤:
203、使第二线程阻塞;
使第二线程阻塞包括使第二线程睡眠。
示例性的,线程运行至目标锁对应的任务时,若该线程未被选择作为竞争目标锁的线程,则可以使第二线程阻塞。
基于第一线程代替第二线程执行完第二任务,为了使第二线程继续执行后续流程,比如获取新的任务执行,本申请实施例方法还可以包括如下步骤:
204、使第二线程解阻塞。
使第二线程解阻塞包括唤醒第二线程。
在一种可能的实现方式中,步骤202中,使第一线程代替第二线程执行第二任务可以具体包括:
2021、使第一线程根据数据结构中记录的第二任务的标识执行第二任务;
可以将第二线程的第二任务的标识记录到一个数据结构中,该数据结构可以具体为链表、数组或队列等。
任务的标识用于定位该任务,示例性的,任务的标识可以为该任务的地址,或者,可以将第二任务的地址加入第二线程的线程描述符中,线程描述符为用于存储线程的信息的内存结构,此时,任务的标识可以为第二线程的线程描述符的地址。
当不同任务对应的功能相同时,线程在执行不同任务时可以调用同一临界区的功能,由于线程执行不同任务时向临界区维护的变量输入的内容(称作任务参数)不同,从而能够实现不同的任务。若第一任务和第二任务为利用同一临界区的功能执行的任务,第二任务的地址可以具体为第二任务的任务参数的地址,基于竞争到目标锁,第一线程可以利用第二任务的任务参数进入自己的临界区执行第二任务。以日志写缓存的任务为例,假设目标临界区的功能为向缓存中写入内容,目标临界区维护的变量包括待写内容的地址和待写内容占用缓存的大小(或者说待写内容的长度),第一任务和第二任务分别用于向缓存中写入第一日志片段和第二日志片段,第一任务的任务参数为第一日志片段的地址和第一日志片段占用缓存的大小,第二任务的任务参数为第二日志片段的地址和第二日志片段占用缓存的大小。此时,第一线程和第二线程可以均通过调用目标临界区的功能来执行第一任务和第二任务,只是在运行目标临界区时向目标临界区维护的变量中写入的任务参数不同。可见,第一线程在获取到目标锁后,可以获取第二任务的任务参数(即第二日志片段的地址和第二日志片段占用缓存的大小),之后利用第二任务的任务参数和该目标临界区的写缓存功能将第二日志片段写入缓存,即代替第二线程执行了第二任务。
基于第一线程竞争到目标锁,可以使第一线程根据该数据结构中记录的第二任务的标识执行第二任务。
步骤2021提供了“使第一线程代替第二线程执行第二任务”的一种实现方式,有利于提高本申请实施例的可实施性。
处理器在运行本申请实施例方法时,若第一线程和第二线程对应的多个线程的数目过多,步骤202的耗时过长,线程阻塞时长过长,浪费线程资源。为了控制多个线程的数目,在一种可能的实现方式中,多个线程可以指在同一时间窗口运行目标锁对应的任务的线程,也就是说,第二线程运行至第二任务的时刻与第一线程运行至第一任务的时刻在同一时间窗口内。第一线程和第二线程运行至目标锁对应的任务时刻在同一时间窗口内,即第一线程运行至第一任务的时刻与第二线程运行至第二任务的时刻相邻,这样有利于减少第一线程对第二线程的等待时长,有利于提高第一线程替第二线程完成第二任务的效率。
在一种可能的实现方式中,该时间窗口可以为预先设定的,示例性的,可以将最先在预设的时间窗口内运行至目标锁对应的任务的线程作为第一线程,后续在该时间窗口内运行至目标锁对应的任务的线程作为第二线程。假设预先设定的时间窗口包括1ms至2ms、2ms至3ms,运行的线程1、线程2、线程3、线程4和线程5依次在1.1ms、1.5ms、2.2ms、2.5ms和2.8ms运行至目标锁对应的任务,那么线程1和线程2对应于同一时间窗口(1ms至2ms),线程3至线程5对应于同一时间窗口(2ms至3ms),那么可以选择线程1作为竞争目标锁的第一线程,线程1竞争到目标锁后执行自身和线程2的任务;可以选择线程3作为竞争目标锁的第一线程,线程3竞争到目标锁后执行自身、线程4和线程5的任务。
在一种可能的实现方式中,时间窗口的起始时刻可以对应于线程1运行至目标锁对应的任务,以预设时长为时间窗口的宽度,可以对在该时间窗口内运行至目标锁对应的任务的多个线程执行本申请实施例方法。在该时间窗口的终止时刻之后,首个运行至目标锁对应的任务的线程开启另一个时间窗口,该线程运行至目标锁对应的任务对应于另一个时间窗口的起始时刻,另一个时间窗口可以仍然以预设时长为时间窗口的宽度。
在一种可能的实现方式中,时间窗口的终止时刻可以对应于第一线程竞争到目标锁,那么第二线程待执行的第二任务对应于目标锁,并且第二线程在第一线程竞争到目标锁之前运行至第二任务。
在一种可能的实现方式中,时间窗口的起始时刻可以对应于第一线程运行至第一任务,时间窗口的终止时刻可以对应于第一线程竞争到目标锁,时间窗口的宽度由第一线程竞争到锁的时长决定。也就是说,本申请实施例从待执行的任务对应于目标锁的多个线程中,选择首个运行至目标锁对应的任务的线程作为第一线程。
在一种可能的实现方式中,步骤201可以包括如下步骤:
2011、当第一线程运行至第一任务时,将第一线程的线程描述符加入数据结构的第一个节点,并使第一线程竞争目标锁;
示例性的,第一线程运行第一任务时,可以将自身的线程描述符加入某个数据结构(比如链表)的第一个节点,根据该标识可以定位到线程描述符。可选的,在第一线程将自身的线程描述符加入该数据结构的第一个节点前,第一线程可以将第一任务加入其线程描述符。
2012、当第二线程运行至第二任务时,将第二任务加入第二线程的线程描述符,之后,将第二线程的线程描述符加入该数据结构;
基于第二线程运行至第二任务,可以将第二线程的第二任务加入第二线程的线程描述符中,示例性的,可以将第二任务的地址加入第二线程的线程描述符中,之后,可以将第二线程的线程描述符加入上述数据结构的节点中。
2013、基于第一线程竞争到目标锁,将数据结构的头部指针指向空,并记录第一个节点的地址;
为了限制第二线程的数目,当第一线程竞争到目标锁时,可以关闭该数据结构,不再向该数据结构中加入新的线程。示例性的,若上述数据结构为链表,第一线程可以释放该链表的头部,将该链表中的各节点从该链表中删除,之后加入该数据结构的线程描述符不再关联至第一线程。为了便于后续查找删除的各节点中存储的线程描述符,可以记录删除的某个节点的地址,对于单链表来说,需要记录第一个节点的地址。
步骤2021具体可以包括如下步骤:
20211、基于第一线程竞争到目标锁,使第一线程根据记录的第一个节点的地址查找与其相关联的其他节点;
20212、使第一线程根据查找到的节点中的线程描述符执行第二任务;
下面从线程的角度描述本申请访问临界资源的方法。假设线程1待执行的任务为将内容1写入缓存,该任务对应的运行至需要持目标锁执行的任务1。参考图3,本申请访问临界资源的方法另一个实施例可以包括如下步骤:
301、线程1判断链表的头部指针是否指向空,若是,则执行步骤302,若否,则执行步骤309;
302、若头部指针指向空,则线程1将自身的线程描述符加入该链表的第一个节点,记录第一个节点的地址;
或者,也可以仅将待执行的任务的标识加入第一个节点。
303、线程1竞争目标锁;
304、基于线程1竞争到该锁,线程1将头部指针指向空;
305、线程1利用记录的第一个节点的地址遍历与其相关联的每个节点,执行自身的任务和每个节点对应的任务;
步骤302之前,线程1也可以将自身的任务加入线程描述符,此时,线程1可以根据第一个节点和与第一个节点相关联的其他各节点中的线程描述符遍历自身的任务和其他各节点对应的任务。
306、基于线程1执行完成各节点对应的任务,线程1释放该锁;
307、线程1唤醒与第一个节点相关联的每个节点对应的线程;
308、线程1执行后续流程;
309、若头部指针指向非空,则线程1将自身的任务加入自身的线程描述符;
310、线程1将自身的线程描述符加入该链表;
311、线程1进入睡眠状态;
312、基于线程1被唤醒,线程1执行后续流程。
线程1被唤醒后,还可以从自身的线程描述符中删除在步骤309中写入的任务。
图3对应的实施例为前述实施例提供了一种可能的具体实现方式,在实际应用中可以采用其他的具体实现方式来执行前述本申请实施例方法。
图4示出了在按照图3对应的实施例方法运行多个线程时,多个线程访问同一临界资源的过程示意图,线条为虚线的矩形框代表目标临界区或目标临界资源,菱形框代表该目标临界区或目标临界资源的锁,圆形框代表与锁对应的链表的头部指针,与圆形框相接的线程指使得头部指针指向自身对应的节点的线程。参考图4,多个线程访问临界资源的过程可以包括但不限于如下各阶段:
阶段1、线程1运行至目标锁对应的任务1时,判断链表的头部指针是否指向空,图4中以带箭头的虚线代表该判断操作。
阶段2、若该头部指针指向空,线程1可以将其线程描述符写入第一个节点,并竞争该目标锁;在线程1写入第一个节点后,线程2和线程3分别运行至该目标锁对应的任务2和任务3,判断头部指针是否指向空。
阶段3、线程1竞争该锁时,若该锁空闲,线程1可以获取到该锁,并将头部指针指向空;由于头部指针指向的第一个节点非空,线程2和线程3分别将任务2和任务3写入自身的线程描述符,将线程描述符再写该链表,线程2和线程3写入的节点与第一个节点相关联,图4中不带箭头的实线连接的线程指写入的节点相关联的线程;线程1将头部指针指向空后,线程4运行至该目标锁对应的任务4临界区,判断该头部指针是否指向空。
阶段4、线程1获取到该锁后,可以进入目标临界区,利用目标临界区的功能执行任务1、任务2和任务3;由于线程1将头部指针指向空,线程4将其线程描述符写入链表的第一个节点,并竞争该锁;线程4写入第一个节点后,线程5运行至该目标锁对应的任务5,判断头部指针是否指向空。
阶段5、线程1利用目标临界区的功能执行以各任务后,可以释放该锁,并唤醒线程2和线程3,若该锁为互斥锁,线程4在未竞争到该锁后会睡眠,因此,线程1在释放该锁后,还可以唤醒线程4;线程5竞争该头部时,由于线程4占用该头部,因此,线程5加入以线程4为首的组。图4中以带箭头的实线代表唤醒操作。
阶段6、线程1和线程2和线程3可以继续执行临界区后的代码;线程1释放该锁后,线程4可以竞争到该锁,头部指针指向空;线程4将头部指针指向空后,线程6运行至目标锁对应的任务6,判断头部指针是否指向空。
线程4的后续操作可以参考前述线程1的操作进行理解,线程5的后续操作可以参考线程2和线程3的操作进行理解,此处不再赘述。
在上述应用场景中,线程1和线程4分别对应于上述实施例方法中的第一线程,线程2、线程3和线程5分别对应于上述实施例方法中的第二线程。
在一种可能的实现方式中,上述实施例中的第一任务和第二任务可以为访问NUMA系统的缓存的任务,例如,第一任务和第二任务可以用于将事务日志写入NUMA系统的日志缓存。
数据库的事务日志(redo log)是用来记录数据库每一次修改活动的文件,是撤销事务和出现故障时恢复事务的依据。通常情况下,数据库系统都会为了减少输入输出,而采用预写式(write-ahead logging,WAL)机制记录事务日志。WAL是指对数据文件的修改必须发生在这些修改已经记录了事务日志之后,也就是说,在描述这些变化的日志记录写入磁盘之后。当数据库系统发生故障时,通过事务日志,可以将系统恢复到前一个一致性状态。图5为记录事务日志的流程示意图,当有数据修改时,先将数据从磁盘中加载到缓存池(buffer pool)中,并在缓存池中进行修改,产生事务日志。日志缓存的写入效率是决定数据库吞吐量的主要影响因素,为了提高事务日志的写入效率,可以将日志缓存(redo logbuffer)划分为多个缓存区域,同时运行多个线程将事务日志的不同日志片段写入不同的缓存区域中,之后再将事务日志从日志缓存中写入磁盘中。可以预先划分互不重叠的多个缓存区域,或者,多个缓存区域可以指逻辑上不同的缓存区域,每个缓存区域对应的物理地址可以动态的分配,只要保证每个缓存区域的物理地址不重叠即可。不同线程在执行将日志片段写入缓存的任务时可以调用同一个临界区的功能,该临界区的功能可以包括:为缓存区域分配位置(reserve space)的功能和将日志片段写入分配的位置(insert buffer)的功能,为缓存区域分配位置可以避免不同线程将日志片段写入日志缓存中的同一位置。
由于缓存中不同缓存区域对应的共享资源互不影响,因此,即使在向不同的缓存区域写入日志时调用同一临界区,仍然可以为不同缓存区域设置不同的锁,例如WAL插入锁(WAL Insert Lock),当线程需要将事务日志的日志片段写入缓存中时,可以从多个锁中随机选择一个锁进行竞争,竞争到锁后,线程可以将日志片段写入所选的锁对应的缓存区域中。
片上多核或众核处理器是指集成在同一芯片上的多核或众核处理器,和传统的多处理器相比,片上多核或众核处理器具有片上带宽高、通信距离短、传输速度快等优点,进而使得多个线程间数据通信效率更高,内核又被拆分成多个线程,因此,对于包括多个片上多核或众核处理器的服务器来说,其可以同时运行大量线程。非统一内存访问(non-uniform memory access,NUMA)的多处理器服务器是由若干通过高速专用网络连接起来的独立NUMA节点(简称节点)构成的系统,每个节点包括处理器和存储器,节点中的处理器可以是单个CPU,或,片上多核或众核处理器等,节点中的处理器直接连接(attach)至节点中的存储器,而通过节点间的连接通道访问其他节点的存储器,因此,节点中的处理器访问该节点中的存储器(本地访问)的速度远高于其访问其他节点中的存储器(远程访问)的速度。
图6为现有NUMA系统中线程将日志片段写入缓存的流程示意图。参考图6,日志缓存被划分为多个缓存区域,图6中示出日志缓存的4个缓存区域(缓存区域1至缓存区域4),4个缓存区域的4个锁被加载至服务器每个节点的存储器中,图6以服务器包括3个节点为例,节点1中存储锁1和锁2,节点2中存储锁3,节点3中存储锁4。假设节点2的处理器2上运行的目标线程获取到将事务日志的日志片段写入日志缓存的任务,目标线程首先需要从4个锁中随机选择一个锁进行竞争,竞争到该锁后,将日志片段写入所选锁对应的缓存区域中。可见,对于NUMA系统,目标线程从加载至多个节点中的多个锁中选择的锁,很可能与目标线程位于不同的节点中,竞争锁的过程实际上是操作锁中的变量的过程,该线程需要通过远程访问来竞争该锁,竞争锁的效率低。
和X86架构处理器相比,ARM架构处理器包括更多内核,因此,基于NUMA的采用ARM架构处理器的服务器通常包括更多节点,节点上的线程随机选择的锁存储在其他节点的存储器中的几率更高,因此,节点上的线程通过远程访问的方式竞争锁的概率更高,事务日志写入缓存区域的效率更低。
为了提高对缓存的操作效率,本申请提供一种在NUMA系统中访问临界资源的方法,NUMA系统可以是基于NUMA的服务器,该临界资源在本申请实施例中可以为缓存,NUMA系统包括多个节点,NUMA系统的缓存包括多个缓存区域,参考图7,本申请访问临界资源的方法一个实施例可以包括如下步骤:
701、节点运行目标线程;
NUMA系统可以将目标线程调度到一个节点上运行。
702、当目标线程运行至目标任务时,从多个锁中选择存储在该节点上的目标锁;
目标任务用于访问NUMA系统的缓存,缓存作为一种临界资源,任一时刻只允许单个线程对其执行写操作,由于缓存包括多个缓存区域,通常为每个缓存区域设置一个锁,每个锁对应于一个缓存区域。只有获取到缓存区域的锁的线程方能对该缓存区域进行操作。NUMA系统将每个缓存区域的锁加载至NUMA系统的节点上,当目标线程运行至目标任务时,和现有技术中,节点从多个锁中随机选择一个锁不同,本申请实施例方法中,节点从多个锁中选择存储在该节点上的锁,将其称作目标锁。
若节点识别到一个目标锁,节点可以选择该目标锁,供线程竞争。若节点识别到多个目标锁,节点可以从多个目标锁中选择一个目标锁,使线程对其进行竞争。若节点未识别到目标锁,节点可以采用其他方式从多个锁中选择一个锁供线程竞争,例如,节点可以从多个锁中随机选择一个锁,使线程对其进行竞争。本申请实施例不对这种情况下节点的操作进行限定。
703、基于目标线程竞争到目标锁,使目标线程执行目标任务;
示例性的,节点可以使目标线程向目标锁对应的缓存区域写入事务日志的日志片段。目标线程执行完成目标任务后,可以释放目标锁。
本申请访问临界资源的方法中,节点运行的线程需要访问多个缓存区域中的一个缓存区域时,节点可以从保护多个缓存区域的多个锁中选择存在该节点中的目标锁,若该节点中存在目标锁,则该线程竞争目标锁,和现有技术相比,本申请实施例提供的方法有利于提高节点中的线程竞争该节点中的锁的概率,节点中的线程通过本地访问的方式竞争锁的概率更高,访问缓存区域的效率更高,从而有利于提高ARM架构处理器性能。
为了提高线程选择到目标锁的概率,在一种可能的实现方式中,可以将多个锁分布到NUMA系统的每个节点上。示例性的,可以利用分布式哈希算法计算每个节点的标识和每个锁的标识的散列值,之后,根据每个节点和每个锁的标识的散列值将多个锁均匀分布到NUMA系统的多个节点上。或者,示例性的,假设有4个NUMA节点,有20个锁;现将锁编号为0至19,将NUMA节点由系统编号为0至3;哈希规则为:锁的编号除4的余数作为存储锁的NUMA节点的编号,例如编号为5的锁存储在1号NUMA节点上,编号为18的锁存储在2号NUMA节点上,从而实现将多个锁均匀分布在每个节点上。
在一种可能的实现方式中,可以记录将多个锁分布到多个节点时采用的锁与所在节点的对应关系。该对应关系也可以指用于确定对应关系的方法。
在一种可能的实现方式中,步骤702可以具体包括如下步骤:
7021、按照记录的对应关系从多个锁中选择目标锁;
可以按照分布锁时依据的锁与节点的对应关系,从多个锁中选择目标锁。
图8为本申请NUMA系统中线程将日志片段写入日志缓存的过程的示意图,以该NUMA系统节点中的处理器为ARM处理器为例。参考图8,日志缓存被划分为4个缓存区域(缓存区域1至缓存区域4),4个缓存区域的4个锁被加载至服务器多个节点的存储器中,图8以服务器包括3个节点为例,节点1中存储锁1和锁2,节点2中存储锁3,节点3中存储锁4。节点1的处理器1中运行的线程1从4个锁中选择节点1中的目标锁,锁1和锁2均为线程1对应的目标锁,线程1可以从锁1和锁2中选择一个锁进行竞争,竞争到所选的锁后,向该锁对应缓存区域写入日志片段;节点2的处理器2中运行的线程2从4个锁中选择节点2中的目标锁,即锁3,线程2可以竞争锁3以向锁3对应的缓存区域3写入日志片段;节点3的处理器3中运行的线程3从4个锁中选择节点3中的目标锁,即锁4,线程3可以竞争锁4以向锁4对应的缓存区域4写入日志片段。可见,对于NUMA系统,目标线程从加载至多个节点中的多个锁中选择所在节点中的锁,有利于使得节点中的线程通过本地访问来竞争锁,提高竞争锁的效率。
下面对一个节点中运行的多个线程访问临界资源的方法进行介绍。
假设一个节点运行多个线程,以运行第一线程和第二线程为例,参考图9,本申请在NUMA系统中访问临界资源的方法另一个实施例可以包括如下步骤:
901、节点运行第一线程和第二线程;
第一线程待执行的第一任务和第二线程待执行的第二任务用于访问NUMA系统的缓存;
902、节点从多个锁中选择存储在该节点中的目标锁;
当第一线程运行至第一任务时,从多个锁中选择存储在该节点上的一个锁,该目标任务用于访问该NUMA系统的缓存,该缓存包括多个缓存区域,该多个锁中的每个锁对应于一个缓存区域;当第二线程运行至第二任务时,从多个锁中选择存储在该节点上的一个锁。第一任务和第二任务对应于同一个锁,将其称作目标锁。
903、节点从第一线程和第二线程中选择第一线程竞争目标锁;
904、基于第一线程竞争到目标锁,使第一线程执行第一任务,并代替第二线程执行第二任务。
图9对应的实施例中各步骤可以参考前述本申请各实施例中相应步骤的描述,此处不再赘述。例如,步骤901和步骤902可以分别参考图7对应的实施例中的步骤701和步骤702的相关描述,步骤903和步骤904可以分别参考图2对应的实施例中的步骤201和步骤202的相关描述。
下面从线程的角度描述本申请访问临界资源的方法。
假设在节点1上运行线程1,线程1待执行的任务1为调用目标临界区的功能将日志片段1写入缓存,日志片段1的地址和占用缓存的大小(简称为任务1的任务参数)存储在线程1的栈空间,NUMA系统的缓存包括多个缓存区域,每个缓存区域对应于一个锁,多个锁分布在NUMA系统的多个节点上。参考图10,本申请在NUMA系统中访问临界资源的方法另一个实施例可以包括如下步骤:
1001、线程1从多个节点中选择存储在节点1上的目标锁;
1002、线程1判断与目标锁对应的链表的头部指针是否指向空,若是,则执行步骤1003,若否,则执行步骤1010;
1003、若头部指针指向空,则线程1将自身的线程描述符加入该链表的第一个节点,记录第一个节点的地址;
或者,也可以仅将任务1的任务参数加入第一个节点。
1004、线程1竞争目标锁;
1005、基于线程1竞争到该锁,线程1将头部指针指向空;
1006、线程1利用记录的第一个节点的地址遍历与其相关联的各个节点,利用各节点对应的任务参数和目标临界区的功能将各节点对应的日志片段写入目标锁对应的缓存区域;
1007、基于线程1执行完成各节点对应的任务,线程1释放该锁;
1008、线程1唤醒与第一个节点相关联的各个节点对应的线程;
1009、线程1执行后续流程;
1010、若头部指针指向非空,则线程1将任务1的任务参数加入自身的线程描述符;
1011、线程1将自身的线程描述符加入该链表;
1012、线程1进入睡眠状态;
1013、基于线程1被唤醒,线程1执行后续流程。
上述方法的执行主体为访问临界资源的装置,为了实现上述功能,访问临界资源的装置包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的功能,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
从功能模块的角度,本申请可以根据上述方法实施例对访问临界资源的装置进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个功能模块中。上述集成的功能模块既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
比如,以采用集成的方式划分各个功能单元的情况下,图11示出了一种访问临界资源的装置的结构示意图。如图11所示,本申请访问临界资源的装置的一个实施例可以包括:
线程选择模块1101,用于从第一线程和第二线程中选择第一线程竞争目标锁,第一线程待执行的第一任务和第二线程待执行的第二任务对应于目标锁;
任务执行模块1102,用于基于线程选择模块1101选择的第一线程竞争到目标锁,使第一线程执行第一任务,并代替第二线程执行第二任务。
在本申请的一些实施例中,任务执行模块具体用于使第一线程根据数据结构中记录的第二任务的标识执行第二任务。
在本申请的一些实施例中,第二线程为在第一线程竞争到目标锁之前运行至第二任务的线程。
在本申请的一些实施例中,第一线程运行至第一任务的时刻先于第二线程运行至第二任务的时刻。
参考图12,在本申请的一些实施例中,装置还包括阻塞模块1103,用于使第二线程阻塞。
继续参考图12,在本申请的一些实施例中,装置还包括解阻塞模块1104,用于基于第一线程代替第二线程执行完成第二任务,使第二线程解阻塞。
在本申请的一些实施例中,第一线程和第二线程为运行在NUMA系统的同一个目标节点上的线程,第一任务和第二任务用于访问NUMA系统的缓存,缓存包括多个缓存区域,每一个缓存区域对应于一个锁;NUMA系统包括多个节点,多个缓存区域对应的锁存储在NUMA系统的节点上;目标锁存储在目标节点上。
图13示出了访问临界资源的装置的另一个结构示意图。如图13所示,访问临界资源的装置设置在NUMA系统的节点上,本申请访问临界资源的装置的一个实施例可以包括:
运行模块1301,用于运行目标线程;
锁选择模块1302,用于当目标线程运行至目标任务时,从多个锁中选择存储在节点上的目标锁,目标任务用于访问NUMA系统的缓存,缓存包括多个缓存区域,多个锁中的每个锁对应于一个缓存区域;
任务执行模块1303,用于基于目标线程竞争到目标锁,使目标线程执行目标任务。
参考图14,在本申请的一些实施例中,装置还包括锁分布模块1304,用于将多个锁分布到NUMA系统的多个节点上。
继续参考图14,在本申请的一些实施例中,装置还包括记录模块1305,用于记录多个锁中各个锁与所在节点的对应关系。
在本申请的一些实施例中,锁选择模块1302具体用于按照对应关系从多个锁中选择目标锁。
图11至图14对应的装置实施例可以参考前述各方法实施例中的相关部分进行理解,此处不再赘述。
上述各模块可以指特定应用集成电路(application-specific integratedcircuit,ASIC),执行一个或多个软件或固件程序的处理器和存储器,集成逻辑电路,和/或其他可以提供上述功能的器件。图15为计算机设备1500的硬件结构示意图,在一个简单的实施例中,本领域的技术人员可以想到访问临界资源的装置可以采用图15所示的形式。
该计算机设备1500包括至少一个处理器1501和存储器1502。
上述的处理器1501可以是中央处理器(central processing unit,CPU),网络处理器(network processor,NP)或者CPU和NP的组合、数字信号处理器(digital signalprocessor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现成可编程门阵列(field programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。虽然图中仅仅示出了一个处理器,该装置可以包括多个处理器或者处理器包括多个处理单元。具体的,处理器可以是一个单核处理器,也可以是一个多核或众核处理器。该处理器可以是ARM架构处理器。
存储器1502用于存储处理器执行的计算机指令。存储器1502可以是存储电路也可以是存储器。存储器1502可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。存储器1502可以独立于处理器1501,一种可能的实现方式中,处理器1501和存储器1502可以通过总线1503相互连接。总线1503可以是外设部件互连标准(peripheral componentinterconnect,PCI)总线或扩展工业标准结构(extended industry standardarchitecture,EISA)总线等。所述总线可以分为地址总线、数据总线、控制总线等。或者,存储器1502也可以是处理器1501中的存储单元,与处理器1501直接相连(attach),在此不做限定。虽然图中仅仅示出了一个存储器1502,该装置也可以包括多个存储器1502或者存储器1502包括多个存储单元。
其中,上述存储器1502用于存储执行本申请方案的计算机执行指令,并由上述处理器1501来控制执行。处理器1501用于执行存储器1502中存储的计算机执行指令,从而实现本申请上述方法实施例提供的访问临界资源的方法。
一种可能的实现方式,本申请实施例中的计算机执行指令也可以称之为应用程序代码,本申请实施例对此不作具体限定。
上述计算机设备可以是服务器,或者,在一些实施例(比如图7至图10对应的实施例)中可以为NUMA系统,或者更为具体的,可以为NUMA系统的节点。
上述实施例,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现,当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机执行指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的术语在适当情况下可以互换,这仅仅是描述本申请的实施例中对相同属性的对象在描述时所采用的区分方式。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。在本申请实施例中,“多个”指两个或两个以上。
本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其他实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
在本申请的各实施例中,为了方面理解,进行了多种举例说明。然而,这些例子仅仅是一些举例,并不意味着是实现本申请的最佳实现方式。
以上对本申请所提供的技术方案进行了详细介绍,本申请中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (32)

1.一种访问临界资源的方法,其特征在于,包括:
从第一线程和第二线程中选择第一线程竞争目标锁,所述第一线程待执行的第一任务和所述第二线程待执行的第二任务对应于所述目标锁;
基于所述第一线程竞争到所述目标锁,使所述第一线程执行所述第一任务,并代替所述第二线程执行所述第二任务。
2.根据权利要求1所述的方法,其特征在于,所述第一线程代替所述第二线程执行所述第二任务包括:
所述第一线程根据数据结构中记录的所述第二任务的标识执行所述第二任务。
3.根据权利要求1或2所述的方法,其特征在于,所述第二线程为在所述第一线程竞争到所述目标锁之前运行至所述第二任务的线程。
4.根据权利要求1或2所述的方法,其特征在于,所述第一线程运行至所述第一任务的时刻先于所述第二线程运行至所述第二任务的时刻。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述方法还包括:
使所述第二线程阻塞。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
基于所述第一线程代替所述第二线程执行完成所述第二任务,使所述第二线程解阻塞。
7.根据权利要求1至6中任一项所述的方法,其特征在于,所述第一线程和所述第二线程为运行在非统一内存访问NUMA系统的同一个节点上的线程,所述第一任务和所述第二任务用于访问所述NUMA系统的缓存,所述缓存包括多个缓存区域,每一个缓存区域对应于一个锁;所述多个缓存区域对应的锁存储在所述NUMA系统的多个节点上;所述目标锁为存储在所述目标节点上的锁。
8.一种在非统一内存访问NUMA系统中访问临界资源的方法,其特征在于,所述方法包括:
所述NUMA系统中的节点运行目标线程;
当所述目标线程运行至目标任务时,从多个锁中选择存储在所述节点上的目标锁,所述目标任务用于访问所述NUMA系统的缓存,所述缓存包括多个缓存区域,所述多个锁中的每个锁对应于一个缓存区域;
基于所述目标线程竞争到所述目标锁,使所述目标线程执行所述目标任务。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
将所述多个锁分布到所述NUMA系统的多个节点上。
10.根据权利要求9所述的方法,其特征在于,所述方法还包括:
记录所述多个锁中每个锁与所述每个锁所在的节点的对应关系。
11.根据权利要求10所述的方法,其特征在于,所述从多个锁中选择存储在所述节点上的目标锁包括:
按照所述对应关系从所述多个锁中选择所述目标锁。
12.一种访问临界资源的装置,其特征在于,包括:
线程选择模块,用于从第一线程和第二线程中选择第一线程竞争目标锁,所述第一线程待执行的第一任务和所述第二线程待执行的第二任务对应于所述目标锁;
任务执行模块,用于基于所述线程选择模块选择的第一线程竞争到所述目标锁,使所述第一线程执行所述第一任务,并代替所述第二线程执行所述第二任务。
13.根据权利要求12所述的装置,其特征在于,所述任务执行模块具体用于:
使所述第一线程根据数据结构中记录的所述第二任务的标识执行所述第二任务。
14.根据权利要求12或13所述的装置,其特征在于,所述第二线程为在所述第一线程竞争到所述目标锁之前运行至所述第二任务的线程。
15.根据权利要求12或13所述的装置,其特征在于,所述第一线程运行至所述第一任务的时刻先于所述第二线程运行至所述第二任务的时刻。
16.根据权利要求12至15中任一项所述的装置,其特征在于,所述装置还包括:
阻塞模块,用于使所述第二线程阻塞。
17.根据权利要求16所述的装置,其特征在于,所述装置还包括:
解阻塞模块,用于基于所述第一线程代替所述第二线程执行完成所述第二任务,使所述第二线程解阻塞。
18.根据权利要求12至17中任一项所述的装置,其特征在于,所述第一线程和所述第二线程为运行在非统一内存访问NUMA系统的同一个目标节点上的线程,所述第一任务和所述第二任务用于访问所述NUMA系统的缓存,所述缓存包括多个缓存区域,每一个缓存区域对应于一个锁;所述NUMA系统包括多个节点,所述多个缓存区域对应的锁存储在所述NUMA系统的多个节点上;所述目标锁为存储在所述目标节点上的锁。
19.一种在非统一内存访问NUMA系统中访问临界资源的装置,其特征在于,所述装置设置于所述NUMA系统中的节点上,所述装置包括:
运行模块,用于运行目标线程;
锁选择模块,用于当所述目标线程运行至目标任务时,从多个锁中选择存储在所述节点上的目标锁,所述目标任务用于访问所述NUMA系统的缓存,所述缓存包括多个缓存区域,所述多个锁中的每个锁对应于一个缓存区域;
任务执行模块,用于基于所述目标线程竞争到所述目标锁,使所述目标线程执行所述目标任务。
20.根据权利要求19所述的装置,其特征在于,所述装置还包括:
锁分布模块,用于将所述多个锁分布到所述NUMA系统的多个节点上。
21.根据权利要求20所述的装置,其特征在于,所述装置还包括:
记录模块,用于记录所述多个锁中每个锁与所述每个锁所在的节点的对应关系。
22.根据权利要求21所述的装置,其特征在于,所述锁选择模块具体用于:
按照所述对应关系从所述多个锁中选择所述目标锁。
23.一种计算机设备,其特征在于,包括处理器和存储器,该处理器在运行所述存储器存储的计算机指令时,执行如权利要求1至11中任一项所述的方法。
24.一种计算机可读存储介质,其特征在于,包括指令,当所述指令在计算机上运行时,使得计算机执行如权利要求1至11中任一项所述的方法。
25.一种非统一内存访问NUMA系统,其特征在于,所述NUMA系统包括多个节点,包含多个缓存区域的缓存,其中,每一个缓存区域对应于一个锁;所述多个缓存区域对应的多个锁存储在所述NUMA系统的多个节点上;
所述NUMA系统的目标节点用于,运行第一线程,基于所述第一线程运行至待执行的第一任务,从所述多个锁中选择存储在所述目标节点上的目标锁,所述第一任务用于访问所述NUMA系统的缓存。
26.根据权利要求25所述的NUMA系统,其特征在于,所述多个锁均匀分布到所述NUMA系统的多个节点上。
27.根据权利要求25或26所述的NUMA系统,其特征在于,所述目标节点具体用于,根据所述多个锁中每个锁与所述每个锁所在的节点的对应关系,从所述多个锁中选择所述目标锁。
28.根据权利要求25至28中任一项所述的NUMA系统,其特征在于,所述目标节点还用于:运行第二线程,基于所述第二线程运行至待执行的第二任务,从所述多个锁中选择存储在所述目标节点上的目标锁,所述第二任务用于访问所述NUMA系统的缓存;
从所述第一线程和所述第二线程中选择所述第一线程竞争所述目标锁,基于所述第一线程竞争到所述目标锁,使所述第一线程执行所述第一任务,并代替所述第二线程执行所述第二任务。
29.根据权利要求28所述的NUMA系统,其特征在于,所述目标节点具体用于使所述第一线程根据数据结构中记录的所述第二任务的标识执行所述第二任务。
30.根据权利要求28或29所述的NUMA系统,其特征在于,所述第二线程为在所述第一线程竞争到所述目标锁之前运行至所述第二任务的线程。
31.根据权利要求28或29所述的NUMA系统,其特征在于,所述第一线程运行至所述第一任务的时刻先于所述第二线程运行至所述第二任务的时刻。
32.根据权利要求28至31中任一项所述的NUMA系统,其特征在于,所述目标节点还用于,阻塞所述第二线程;基于所述第一线程代替所述第二线程执行完成所述第二任务,使所述第二线程解阻塞。
CN201910690999.XA 2019-07-29 2019-07-29 访问临界资源的方法及装置、计算机设备及可读存储介质 Active CN112306699B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201910690999.XA CN112306699B (zh) 2019-07-29 2019-07-29 访问临界资源的方法及装置、计算机设备及可读存储介质
PCT/CN2020/103924 WO2021018011A1 (zh) 2019-07-29 2020-07-24 访问临界资源的方法及装置、计算机设备及可读存储介质
US17/587,663 US20220147404A1 (en) 2019-07-29 2022-01-28 Method And Apparatus For Accessing Critical Resource, Computer Device, And Readable Storage Medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910690999.XA CN112306699B (zh) 2019-07-29 2019-07-29 访问临界资源的方法及装置、计算机设备及可读存储介质

Publications (2)

Publication Number Publication Date
CN112306699A true CN112306699A (zh) 2021-02-02
CN112306699B CN112306699B (zh) 2024-04-12

Family

ID=74229427

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910690999.XA Active CN112306699B (zh) 2019-07-29 2019-07-29 访问临界资源的方法及装置、计算机设备及可读存储介质

Country Status (3)

Country Link
US (1) US20220147404A1 (zh)
CN (1) CN112306699B (zh)
WO (1) WO2021018011A1 (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113806099A (zh) * 2021-09-13 2021-12-17 北京计算机技术及应用研究所 一种基于二值计算的多核自旋锁设计方法
CN114489823A (zh) * 2022-02-14 2022-05-13 支付宝(杭州)信息技术有限公司 用于就近唤醒cpu核心的方法及装置
WO2022179503A1 (en) * 2021-02-24 2022-09-01 Huawei Technologies Co., Ltd. Method and system for non-blocking database logging batching
CN115002219A (zh) * 2022-05-30 2022-09-02 广州市百果园网络科技有限公司 服务调用方法、装置、设备、系统、存储介质及产品

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11520718B2 (en) * 2020-10-20 2022-12-06 Micron Technology, Inc. Managing hazards in a memory controller

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040230750A1 (en) * 2003-05-12 2004-11-18 International Business Machines Corporation Memory management for a symmetric multiprocessor computer system
US20060225077A1 (en) * 2005-03-30 2006-10-05 Anderson Eric A System and method for dynamically determining a portion of a resource for which a thread is to obtain a lock
CN101685408A (zh) * 2008-09-24 2010-03-31 国际商业机器公司 多个线程并行访问共享数据结构的方法及装置
CN104834505A (zh) * 2015-05-13 2015-08-12 华中科技大学 一种多核多线程环境下numa感知的同步方法
CN106020974A (zh) * 2016-05-11 2016-10-12 深圳大学 Numa平台的内存缓存方法及系统
CN107077425A (zh) * 2014-10-20 2017-08-18 微软技术许可有限责任公司 同步原语的按需扩展
CN109508240A (zh) * 2017-09-14 2019-03-22 英特尔公司 用于非均匀存储器访问的可缩放自旋锁

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040230750A1 (en) * 2003-05-12 2004-11-18 International Business Machines Corporation Memory management for a symmetric multiprocessor computer system
US20060225077A1 (en) * 2005-03-30 2006-10-05 Anderson Eric A System and method for dynamically determining a portion of a resource for which a thread is to obtain a lock
CN101685408A (zh) * 2008-09-24 2010-03-31 国际商业机器公司 多个线程并行访问共享数据结构的方法及装置
CN107077425A (zh) * 2014-10-20 2017-08-18 微软技术许可有限责任公司 同步原语的按需扩展
CN104834505A (zh) * 2015-05-13 2015-08-12 华中科技大学 一种多核多线程环境下numa感知的同步方法
CN106020974A (zh) * 2016-05-11 2016-10-12 深圳大学 Numa平台的内存缓存方法及系统
CN109508240A (zh) * 2017-09-14 2019-03-22 英特尔公司 用于非均匀存储器访问的可缩放自旋锁

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
DANNY HENDLER 等: "Flat combining and the synchronization-parallelism tradeoff", SPAA \'10: PROCEEDINGS OF THE TWENTY-SECOND ANNUAL ACM SYMPOSIUM ON PARALLELISM IN ALGORITHMS AND ARCHITECTURES, pages 1 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022179503A1 (en) * 2021-02-24 2022-09-01 Huawei Technologies Co., Ltd. Method and system for non-blocking database logging batching
CN113806099A (zh) * 2021-09-13 2021-12-17 北京计算机技术及应用研究所 一种基于二值计算的多核自旋锁设计方法
CN114489823A (zh) * 2022-02-14 2022-05-13 支付宝(杭州)信息技术有限公司 用于就近唤醒cpu核心的方法及装置
CN115002219A (zh) * 2022-05-30 2022-09-02 广州市百果园网络科技有限公司 服务调用方法、装置、设备、系统、存储介质及产品
CN115002219B (zh) * 2022-05-30 2023-07-25 广州市百果园网络科技有限公司 服务调用方法、装置、设备、系统、存储介质及产品

Also Published As

Publication number Publication date
CN112306699B (zh) 2024-04-12
US20220147404A1 (en) 2022-05-12
WO2021018011A1 (zh) 2021-02-04

Similar Documents

Publication Publication Date Title
CN112306699B (zh) 访问临界资源的方法及装置、计算机设备及可读存储介质
US11314562B2 (en) Systems and methods for performing concurrency restriction and throttling over contended locks
CN108509260B (zh) 线程识别处理方法、装置、计算机设备和存储介质
US8495641B2 (en) Efficiently boosting priority of read-copy update readers while resolving races with exiting and unlocking processes
US8131894B2 (en) Method and system for a sharing buffer
US8539486B2 (en) Transactional block conflict resolution based on the determination of executing threads in parallel or in serial mode
US8458721B2 (en) System and method for implementing hierarchical queue-based locks using flat combining
US8438571B2 (en) Thread speculative execution and asynchronous conflict
CN104572568B (zh) 读锁操作方法、写锁操作方法及系统
US8645963B2 (en) Clustering threads based on contention patterns
US20080276256A1 (en) Method and System for Speeding Up Mutual Exclusion
US10579413B2 (en) Efficient task scheduling using a locking mechanism
JP4568292B2 (ja) キャッシュライン・ポーリングを実行する方法、装置、プログラム及び情報処理システム
CN102566979A (zh) 实现自适应锁的方法和装置以及多核处理器系统
JP2018511119A (ja) トランザクション実行に応じて追跡データを生成する装置及び方法
CN110704112B (zh) 在区块链中并发执行交易的方法和装置
Afek et al. Fast and scalable rendezvousing
JPWO2011096163A1 (ja) 情報処理システム、排他制御方法および排他制御用プログラム
US20190073243A1 (en) User-space spinlock efficiency using c-state and turbo boost
US20150193268A1 (en) File lock and unlock mechanism
CN112346879B (zh) 进程管理方法、装置、计算机设备及存储介质
US20240103760A1 (en) Systems and methods for hardware-based asynchronous persistence
CN117056363B (zh) 数据缓存方法、系统、设备以及存储介质
EP4354284A1 (en) Scheduling method, apparatus and system, and computing device
Avni et al. Abort-Free Transactional Memory by Exploiting Transactional Semantics

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant