CN114116155A - 无锁工作窃取线程调度器 - Google Patents

无锁工作窃取线程调度器 Download PDF

Info

Publication number
CN114116155A
CN114116155A CN202110407777.XA CN202110407777A CN114116155A CN 114116155 A CN114116155 A CN 114116155A CN 202110407777 A CN202110407777 A CN 202110407777A CN 114116155 A CN114116155 A CN 114116155A
Authority
CN
China
Prior art keywords
cpu
poller
thread
control unit
threads
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
Application number
CN202110407777.XA
Other languages
English (en)
Inventor
M·S·盖茨
J·E·利连坎普
A·维普林斯基
S·爱腾
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.)
Hewlett Packard Enterprise Development LP
Original Assignee
Hewlett Packard Enterprise Development LP
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 Hewlett Packard Enterprise Development LP filed Critical Hewlett Packard Enterprise Development LP
Publication of CN114116155A publication Critical patent/CN114116155A/zh
Pending legal-status Critical Current

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/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/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
    • 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/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • 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/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • 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/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/254Distributed memory
    • G06F2212/2542Non-uniform memory access [NUMA] architecture

Landscapes

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

Abstract

本公开涉及无锁工作窃取线程调度器。提供了用于无锁线程调度的系统和方法。可以将线程置于由例如节点中的所有计算机处理单元(CPU)共享的环形缓冲区中。可以将分配给CPU的线程置于所述CPU的本地运行队列中。然而,当CPU的本地运行队列被清空时,该CPU检查共享环形缓冲区以确定是否有任何线程正等待在该CPU上运行,如果有,则CPU拉取与该准备好运行的线程相关的批量线程以执行。如果没有,空闲CPU随机选择另一个CPU以从其窃取线程,并且空闲CPU尝试使与所述另一个CPU相关联的批量线程从共享环形缓冲区出队。可以通过使用共享的轮询器阵列以在多个CPU上动态地分布轮询来处理轮询。

Description

无锁工作窃取线程调度器
背景技术
技术的出现导致计算系统的计算能力呈指数增长。在计算系统中使用多处理器(例如,多计算机处理单元或CPU)设备和多核处理器(包括多个核或处理器)也有助于提高计算系统的计算能力。每个核或处理器可以包括独立的缓存存储器。
附图说明
参照以下附图根据一个或多个不同的实施例详细地描述本公开。附图仅被提供用于说明性目的,并且仅描绘典型实施例或示例实施例。
图1A图示了在其内可以实施各种实施例的硬件计算系统的示例。
图1B图示了图1A的硬件计算系统中的一个处理器的示例一对多核处理系统架构。
图2A图示了根据各种实施例的示例线程调度工作流。
图2B图示了根据各种实施例的示例轮询工作流。
图3图示了根据各种实施例的能够执行用于实施线程调度的指令的示例计算部件。
图4图示了根据各种实施例的能够执行用于实施轮询的指令的示例计算部件。
图5图示了可以用其实施本文所描述的各种特征和/或功能的示例计算部件。
附图并非是穷举的,并且不将本公开限制于所公开的精确形式。
具体实施方式
处理器或CPU是指计算机内的电子电路,所述电子电路通过执行由计算机程序的指令指定的基本算术操作、逻辑操作、控制操作和输入/输出(I/O)操作来执行指令。通过使用多核处理器或CPU——这本质上相当于将两个或更多个单独的处理器(在此意义上称为核)插到一个集成电路中,可以提高计算机的处理性能。理想地,双核处理器的能力是单核处理器的近两倍,尽管在实践中,实际的性能增益可能会更小。增加处理器中核的数量(即双核、四核等)会增加可以被并行处理的工作负荷。这意味着处理器现在可以处理众多的异步事件、中断等。然而,利用多处理器计算机或系统可以支持多于单个处理器或CPU(例如,两个到八个甚至更多个CPU),如千兆级超级计算机和百万兆级超级计算系统可能是这种情况。
一般地,计算系统的存储器包括主存储器(如非易失性存储器(NVM))和缓存存储器(或简称为缓存)。主存储器可以是用于存储计算系统中的应用程序或数据的物理设备。缓存存储频繁访问的数据,使得无需在从主存储器访问数据上花费时间。通常,以固定大小的块(称为缓存行)在缓存与主存储器之间传递数据。当计算系统的处理器必须对主存储器中的位置进行读取或写入时,如果数据已存在于缓存中,则处理器对缓存进行读取或写入,这比对主存储器进行读取或写入更快。写入到缓存的数据通常会被写回到主存储器。
在多计算引擎系统中,每个计算引擎(如核或处理器)可以具有多个线程,并且可以包括一个或多个缓存,并且一般地,缓存会被组织为一个或多个缓存级的层次结构。在传统的多计算引擎系统中,线程通常运行直到线程让步(yield)、休眠或退出为止,其中,可以在创建每个逻辑线程时将所述逻辑线程分配给CPU。例如以轮询调度(round-robin)方式选择连续的CPU以用于分配逻辑线程,并且只有被分配的CPU才能够运行所述线程。然而,这种调度机制缺乏在多个CPU上均衡工作的方法,并且某些CPU可能变得饱和,而其他CPU则实际上空闲。饱和的CPU可能成为瓶颈,从而导致可以实现的I/O性能比在更多CPU上均衡同样数量的工作更低。此外,因为轮询调度CPU分配可能在每次节点启动时不同,所以可能导致在启动周期之间或在阵列节点之间性能不同。
因此,各种实施例涉及无锁线程调度,并且允许线程在运行时由不同的CPU动态地运行。在某些实施例中,调度器可以遵循特定的调度算法,在所述算法中,以下操作被执行:(1)将线程分配给本地CPU运行队列;(2)当线程准备好运行时,将线程置于由所有CPU共享的环形缓冲区中;(3)当CPU的本地运行队列被清空时,该CPU检查共享环形缓冲区以确定是否有任何线程正等待在该CPU上运行,如果有,则CPU拉取与该准备好运行的线程相关的批量线程并将这些线程置于其本地运行队列中;(4)如果没有,则空闲CPU随机选择另一个CPU(优选地靠近的CPU)以从其窃取线程,并且空闲CPU尝试使与所述另一个CPU相关联的批量线程从共享环形缓冲区出队——如果所选择的CPU在共享环形缓冲区中没有任何相关线程,则可以重复执行此操作;(5)空闲CPU按照优先级顺序执行在其本地运行队列中的从其他CPU窃取的批量线程;(6)针对每个空闲CPU重复所述过程。如以下将描述的,可以例如在节点级别上在可执行的软件中实施调度器。
图1A图示了包括多核处理器或CPU的硬件系统1的示例,所述多核处理器或CPU的处理线程可以根据各种实施例来进行均衡。如硬件计算系统1的系统可以包括各种元件或部件、电路、在其上存储且可执行的软件等。然而,为了简单和易于解释,仅说明并描述了几个方面。
硬件计算系统1可以包括操作系统或OS 2,其中,包含零个或多个线程的一个或多个进程(process)可以在多个CPU(10和30)上运行(或空闲)。如本文所描述的,进程可以具有创建线程的能力,这进而创建了另一个“轻量级”进程,其共享“父”进程的数据,但可以在父进程运行的同时在另一个处理器上独立运行。例如,进程N 4(以及其他进程)可以在操作系统2中是空闲的,而例如进程12、32的其他进程可以分别在CPU 10和30上运行。图1A进一步图示了每个执行进程的存储器映射的高级流,涉及用于CPU 10的虚拟存储器映射40、用于CPU 30的虚拟存储器映射42、以及物理存储器映射50。
图1B图示了图1A的CPU 10的示例架构。在一个示例中,CPU 10可以按基于目录的协议操作以实现缓存一致性。CPU 10可以是例如多处理器系统、一对多核系统、或多核处理器系统。因此,CPU 10可以包括多个处理器或核,并且在此示例中,可以包括多个核10A、10B、...、10N。
核10A、10B、...、10N中的每一个可以分别具有与其相关联的一个或多个缓存级14A、14B、...、14N。网络16(其可以是系统总线)允许核10A、10B、...、10N与彼此并且与CPU10的主存储器18进行通信。主存储器10的数据可以由CPU 10的任何核(例如核10A、10B、...、10N中的任一个)缓存。
返回参考图1A,CPU 10、30各自实施虚拟存储器管理系统。例如,CPU 10通过首先形成虚拟地址来生成存储器引用,所述虚拟地址表示计算机的架构规定的整个地址范围或整个地址范围中操作系统2所允许的部分内的地址。然后可以将虚拟地址转换为受主存储器大小约束的物理存储器映射50中的物理地址。在某些实施例中,以页完成转换,因此虚拟存储器映射40中的页的虚拟页地址被转换为物理存储器映射50中的页的物理地址。页表被保存在存储器中以提供虚拟地址和物理地址间的转换,并且通常CPU中包括转换缓冲区(未示出)以保存最近使用的转换,因此不需要在可以进行数据引用之前进行对存储器18中的表的引用以获得转换。
如上所述,各种实施例涉及工作窃取,以允许在运行时线程(例如各线程)由不同的CPU动态地运行。以这种方式,可以在可用的CPU之中均衡工作,而在处理时不会使任何特定的CPU超载和/或创建(多个)瓶颈。在某些实施例中,工作窃取算法实施无锁方法,本地CPU调度器(例如,调度器314(图3))根据工作窃取算法进行操作。锁定可以是指串行化资源保护数据免受许多线程访问的机制。即,通常,核可以获取自旋锁以便允许同步对数据结构的访问,并且以便避免传入/传出分组之间的任何处理争用。然而,在等待获取锁时,锁定可能导致CPU周期/自旋浪费。尤其是在例如每个系统具有100个核以上的现代系统的情况下,传统的线程调度将严禁(硬件)扩展和/或可能导致高延迟。
图2A图示了根据一个实施例的用于实施无锁工作窃取方法来调度线程的示例工作流。在图2A中图示了本地CPU 200,其中,本地CPU 200可以具有本地运行队列205,所述本地运行队列包括要由本地CPU 200运行的线程210、212、214。如上所述,CPU可以具有一个或多个核。在每个CPU核内,可以创建线程以处理请求。每个CPU核可以创建一个线程,但也可以创建多个线程。通常,只要有工作要做,即,有需要处理的请求,线程就会继续运行。应该理解的是,线程可以是指CPU利用的基本单元,并且可以包括程序计数器、堆栈和寄存器组。在执行时,线程在相同的存储器环境中运行,并且可以共享相同的数据。线程是CPU实际可以运行的,并且对共享资源(例如CPU)的访问会被相应地调度。相比而言,进程会涉及或发起程序,并且进程可以涵盖/包括一个或多个线程(线程是进程中的执行单元)。并且,鉴于线程使用进程的地址空间,当CPU从一个进程切换到另一个进程时,当前信息被保存在进程描述符中,并新进程的信息被加载。
如图2A中所图示的,可以实施共享环形缓冲区并且使其可被每个CPU访问。即,在某些实施例中,每个CPU(如CPU 200)可能已经在其中实施缓存或要由CPU运行的线程队列,或者可以访问所述缓存或线程队列。与线程会被分配给特定CPU的传统系统相比,在本系统中,线程会在共享环形缓冲区(例如共享环形缓冲区215)中排队。应该注意的是,任何恰当的数据结构或机制都可以用于对要由CPU 200运行的传入线程进行排队。共享环形缓冲区仅仅是实施这种线程队列的一种方式。根据其他实施例,其他数据结构或存储器机制也可以用于对线程进行排队。
应该理解的是,共享环形缓冲区215可以在系统中的每个CPU均可以访问的物理/主存储器(例如,图1B的存储器18)中被实施。在某些实施例中,共享环形缓冲区215可以以软件形式在本地实施(例如,实施为本地CPU可以访问的缓冲区)。应该进一步注意的是,可以以硬件来维持数据一致性,即,工作窃取算法并非必须考虑数据一致性。例如,控制CPU所属节点的节点控制器可以维持一致性目录缓存,例如以确保主存储器与本地存储器之间的数据一致性,并且用于实施工作窃取算法的原子指令已经作用于共享存储器。因此,不利用或不需要锁。
在操作中,本地CPU 200可以将任何被唤醒的线程置于其共享环形缓冲区中,在此情况下为共享环形缓冲区215。可以通过计算机程序中的分叉(fork)函数或(多个)类似函数来创建线程。在其他实例中,可以通过例如定时任务来唤醒线程,其中,将会根据某些指定的计时器/在经过指定的时间段后唤醒线程。在线程被唤醒后,本地CPU 200可以将所述线程放入共享环形缓冲区215中。如图2A所图示的,线程220至228当前驻留在共享环形缓冲区215中。此时,线程220至228保持未被分配给任何特定的CPU。
应该注意的是,每个线程可以具有所述线程可以在其上运行的允许CPU组,并且该允许组可以是可编程的,并且可以由例如创建线程并定义其属性的开发人员确定。例如,线程可以被设置为在特定节点上创建,在这种情况下,可以针对特定的CPU/存储器设置特定的非均匀存储器访问(NUMA)亲和性。例如,线程可以被设置为在特定的CPU上创建(CPU亲和性)。例如,线程可以没有亲和性,在这种情况下,任何CPU都可以运行所述线程。应该理解的是,NUMA是指存储器设计,其架构可以包括在对称多处理(SMP)系统中互连的多个节点。每个节点本身可以是小规模SMP,包括包含处理器/CPU的若干个处理器插槽、以及本身彼此互连的相关联的存储器,其中节点内的存储器由所有CPU共享的。节点内的存储器可以被认为是对于节点的CPU而言的本地存储器,而其他节点的存储器可以被认为是远程存储器。每个节点内的节点控制器使CPU能够访问系统内的远程存储器。节点控制器可以被认为是高级存储器控制器,管理对某些或所有本地存储器的访问以及节点的CPU对远程存储器的访问。根据各种实施例的调度器可以以在节点上执行的软件(例如,以节点控制器)实施。
考虑线程具有特定CPU亲和性的情况,当线程被唤醒(如上所述)时,所述线程与被唤醒的线程约束于其上的CPU相关联(由于指定的亲和性)。如上所述,所述CPU(在此情况下,本地CPU 200)就是要运行线程的CPU。因此,CPU 200将线程置于共享环形缓冲区215中。
为了运行当前在共享环形缓冲区215中排队的一个或多个线程,本地CPU 200可以成批地或一次一个地使线程出队(尽管成批出队可以更高效)。即,共享环形缓冲区215上的每个出队操作可能具有某一相关联的延迟(存储器开销),并且处理批量线程通过在单个出队操作中提取多个项来分摊该延迟/延时。应该理解的是,批量可以相当于一与共享环形缓冲区的大小之间的任何数量,尽管默认的最大线程批量大小可以基于例如实施例进行操作所依据的算法测试和调整来进行选择。应该注意的是,共享环形缓冲区(例如共享环形缓冲区215)的实施提供了接口,通过所述接口在单次调用中使高达N个项(线程)出队,并且将所述项置于要被调用器处理的返回缓冲区中。在使批量线程从共享环形缓冲区215出队后,可以将出队的线程置于本地运行队列205中。取决于例如针对特定CPU、或特定节点或处理器插槽的指定的亲和性(在NUMA亲和性的情况下),只有特定CPU/CPU组能够使批量线程出队。在线程不具有亲和性的情况下,任何CPU都可以使线程出队。
当线程在本地运行队列205中时,本地CPU 200可以运行这些线程(在该示例中为线程210至214)。在某些实施例中,本地CPU 200可以按照优先级顺序运行线程210至214,但是并非必须要求这样做,可以按照另一顺序或针对该事件的任何顺序来执行线程。即,本地CPU 200可以运行线程,例如线程210。当线程让步回到当前环境中时,本地CPU 200可以运行另一个线程(在所述情况中,可以是线程212、214等)。
当CPU空闲,即CPU没有要运行的线程(如空闲CPU 230)时,其可以在线程在共享环形缓冲区215中排队时“窃取”工作或批量。如果没有阻止空闲CPU 230运行(多)批量线程的与批量线程相关联的亲和性,则空闲CPU(如空闲CPU 230)可以从共享环形缓冲区中窃取批量线程。例如,空闲CPU 230可能落入某个CPU/NUMA亲和性组中。如果空闲CPU 230不能运行批量线程,则这些线程会被留在共享环形缓冲区215上。应该注意的是,不管亲和性如何,所有线程都会被发送到共享环形缓冲区215,因为线程所发送到的共享环形缓冲区215对应于线程的亲和性。即,对于每个共享环形缓冲区,只有能够执行具有与共享环形缓冲区相对应的亲和性的线程(也称为任务)的CPU将尝试使线程从共享环形缓冲区出队。在窃取批量线程后,与本地CPU 200的操作类似,空闲CPU 230使批量线程从共享环形缓冲区215出队。空闲CPU 230可以将出队的批量线程置于其自己的要执行的本地运行队列(未示出)中,并且(不再空闲的)CPU 230可以执行所述线程。
如上所述,每个CPU可以具有空闲CPU可以进行窃取的至少一个共享环形缓冲区,所述共享环形缓冲区禁止任何将阻止空闲CPU运行批量线程的亲和性。取决于CPU所属的系统的架构,空闲CPU对于空闲CPU可以从其共享环形缓冲区进行窃取的CPU而言可以是本地的,或者空闲CPU对于空闲CPU可以从其共享环形缓冲区进行窃取的CPU而言可以是远程的。例如,如上所述,系统可以具有多个互连的节点,其中每个节点包括一个或多个CPU。
当空闲CPU寻求从另一个CPU窃取工作(线程)时,所述空闲CPU可以随机选择系统中的其可以尝试窃取工作的另一个CPU。在某些实施例中,可以使用超线程感知和NUMA感知选择算法。在某些实施例中,这种算法“偏好”从就CPU缓存场所而言可能更靠近的CPU中进行窃取。在某些实施例中,空闲CPU可能偏好尝试从与非空闲CPU相关联的共享环形缓冲区进行窃取,所述非空闲CPU与空闲CPU在相同的处理器插槽中。
如果空闲CPU希望从其窃取工作的共享环形缓冲区为空,则空闲CPU可以继续进行到随机选择的从其进行窃取的另一个CPU。应该注意的是,因为每个CPU与可以将线程置于其上或可以从其窃取线程的至少一个共享环形缓冲区相关联/具有至少一个这样的共享环形缓冲区,所以添加到系统中的硬件(CPU)越多,越可能具有更大的可扩展性/处理速度更快。
回想一下,从系统取得更好性能的主要机制是添加更多的CPU,相应添加更多的共享环形缓冲区会导致可能更多的CPU以比利用传统系统可能实现的更均衡的方式动态地共享线程。此外,仅仅添加更多的CPU而不利用如本文所描述的无锁工作窃取机制将趋于导致尝试运行相同线程的CPU之间的更多争用,并且会因为可能由于锁定而引起的更多CPU周期的错失而导致更多延迟。根据各种实施例,除了在窃取工作和/或涉及远程唤醒时,CPU之间不会经历关于共享环形缓冲区的争用。特别地,远程唤醒可以是指由于亲和性限制(或某个其他原因)CPU不能将准备好的线程置于其自己的共享环形缓冲区上并且因此线程被置于另一个CPU的共享环形缓冲区上的情况。如果所述另一个CPU也同时正在访问同一共享环形缓冲区,则会引起缓存行争用。
如果空闲CPU对于要窃取的其他CPU的工作的搜索没有导致要运行其他线程,则所述空闲CPU可以进入休眠直到新工作到达为止。这使空闲CPU免于消耗太多系统CPU周期。空闲CPU进入休眠的时间可以基于CPU将轮询以获取工作的所确定的CPU周期的数量,例如,CPU周期的阀值数量。在某些实施例中,可以使用预测算法,所述算法使空闲CPU进入休眠的时间基于其先前用来找到(窃取)工作的CPU周期的数量。还可以设想其他机制,所述机制可以用于确定CPU将搜索工作的时长和/或CPU在未找到任何要窃取的工作的情况下在进入休眠之前经过的时长。
当非空闲CPU(例如CPU 200)运行完工作,即其本地运行队列205变为空时,所述CPU首先检查其共享环形缓冲区(在此情况中,为共享环形缓冲区215),以确定是否有任何在共享环形缓冲区中排队的线程正等待在CPU 200上运行。如果有,则CPU 200拉取正等待在其上运行的批量线程,并且将这些线程置于本地运行队列205中。然后,CPU 200可以按照优先级顺序执行每个线程。
现在参考图2B,描述了轮询架构。应该理解的是,轮询器可以是指可以由本文公开的调度器周期性地调用以检查某个状况(例如,需要被执行的工作)的回调函数。轮询器通常可以替代仅存在于内核模式代码中的中断服务例程。
先前的内核驱动器利用设备中断,但是直接对用户模式进行中断是不可行的,所以使用了轮询模型,其中,轮询例程尽可能少地只为了确定是否存在要被完成的工作而进行,并且如果存在,可以触发“下半部分(bottom half)”线程来执行实际工作。尽管可以在线程中实施轮询器,但是轮询器与线程的不同之处在于,轮询器通常包括被重复调用、通常运行到完成、并且然后返回到调度器的单个例程。因此,前述的轮询模型在每个处理器插槽中的专用CPU上运行轮询器线程。下半部分线程可以在与轮询器线程相同的物理处理器插槽中的其他CPU上运行(与其他线程一起,但优先级更高)。然而,与上述具有CPU瓶颈的问题类似,为轮询器线程使用专用CPU可能导致为轮询配设的CPU资源不足或过多。
因此,在图2B中图示并且以下进一步描述的轮询架构使用分布式方案,其中,轮询工作可以与系统中所有CPU上的“常规”线程执行交织在一起。与使用专用的CPU组来处理轮询相反,以这种方式,系统能够通过在处理器插槽中的所有CPU上动态地分布轮询来更容易地进行扩展。
在某些实施例中,可以在系统中实施共享的轮询器阵列240,其中,阵列中的每个轮询器可以与特定的插槽(例如,NUMA插槽)相关联。例如,如在图2B中所图示的,共享的轮询器阵列240包括轮询器240a、240b和240c,这些轮询器中的每一个都可以向特定处理器插槽注册,使其可以被处理器插槽中的所有CPU读取。轮询器240a、240b和24c中的每一个都可以具有指示其是否在特定CPU上运行的原子标记,即可以被实施为原子变量的运行标记。应该注意的是,可以在轮询器已注册或未注册(这通常很少见)时实施对共享的轮询器阵列(如共享的轮询器阵列240)的任何改变,并且其中,利用了读-复制-更新(RCU)类型的方案。
每当线程让步CPU(在该示例中为CPU 200),回到调度器/调度算法时,调度器会尝试在调度下一个要被执行的线程之前运行轮询器。即,当本地CPU 200经历/执行线程或线程调度循环时,可以从共享的轮询器阵列240随机选择轮询器。可以选择轮询器240a、240b和240c之一(例如轮询器240a),并且尝试使用比较和交换(compare-and-swap,CAS)操作来原子地设置该轮询器240a的运行标记。如果CAS操作成功,则“索取”要在本地CPU 200上运行的轮询器240a,并且没有其他CPU能够并行地运行轮询器240a。然后,本地CPU 200可以执行轮询器240a、清除其运行标记、并且将其释放以在其他地方再次运行(在其他CPU处执行)。如果CAS操作失败,则本地CPU 200可以使用随机选择的另一个轮询器再次尝试运行轮询线程,或者本地CPU 200可以放弃运行所述轮询器线程(暂时),并且可以调度下一个要被运行的线程(如上所述)。应该注意的是,可以在运行时配置运行轮询器的尝试次数。在某些实施例中,每个调度周期尝试运行一个轮询器可以是默认的操作模式。以这种方式,处理器插槽中的所有CPU可以以最小开销高效地共享以在他们之中分派多个轮询器。尝试找到要运行的轮询器的成本可以仅仅相当于在共享的轮询器阵列(例如,共享的轮询器阵列240)中生成随机索引,并且然后生成单个CAS指令以尝试索取该索引处的轮询器。这产生的成本足够便宜,以致不用将大量的附加处理延迟引入调度器中就可以在每个线程执行/让步周期之间进行轮询器选择。
应该注意的是,如果轮询器在某一时间段内未找到要做的工作,则使用前述轮询架构可能会导致降低所述轮询器被选择的可能性。这使得轮询表现出对更活跃的设备的偏好。例如,存储阵列可能正在特定的(多个)前端或后端设备端口上经历较繁重的活动,而其他端口则空闲。代替浪费时间在过于频繁地轮询空闲端口上,可以更好地平衡资源以用于轮询繁忙的端口,从而降低这些端口上的请求的延迟。在某些实施例中,可以通过对每个轮询器实施计数器来实现此活跃设备偏好,其中,基于调用了特定轮询器但所述轮询器未找到任何要执行的工作的周期的数量来累积计数。当针对特定轮询器累积的计数满足或超出阀值时,例如,可以对该特定轮询器“延时顺序”计数器进行增量。另一方面,当随机选择的轮询器未找到要执行的工作时,可以将延时顺序计数器重置为零。此外,执行轮询的每个CPU可以保存可以在每次CPU尝试找到要执行的轮询器(如上所述)时进行增量的序列号。因此,当CPU选择轮询器时,例如,当本地CPU 200选择轮询器240a时,本地CPU 200检查其当前序列号是否可被2N整除,其中,N可以是指所选择的轮询器(在此情况下为轮询器240a)的延时顺序。换言之,本地CPU 200可以检查以下表达是否为真:
(my_sequence_numberMOD(l<<poller_delay_order))==0((我的序列号MOD(l<<轮询器延时顺序))==0)
如果所述表达为真,则可以执行所选择的轮询器,例如,轮询器240a。如果表达为假,则本地CPU 200可以跳过轮询器240a并选择另一个轮询器,在此情况下为轮询器240b或轮询器240c。这种机制/逻辑导致轮询器将倾向于大致每被考虑约2N次时执行。如果N==O(轮询器活跃),则轮询器在每次被考虑时执行。然而,轮询器处于空闲的时间越长,其延时顺序计数器增量越多,并且因此,随着时间推移该轮询器被执行的频率越低。应该注意的是,可以为延时命令可以增长/累积到多大设置最大封顶或阈值,使得每个轮询器仍能以合理的频率执行。
图3是根据本公开的实施例的示例计算设备300。在计算设备300的操作和功能与关于图2A中所述的那些相同或类似的情况下,该描述应被解释为适用。例如,计算设备300可以是节点、节点控制器、CPU(如CPU 10或30)的实施例。计算设备300包括一个或多个硬件处理器302,所述硬件处理器可以是一个或多个中央处理单元(CPU)、基于半导体的微处理器、和/或适用于取得并执行存储在机器可读存储介质304中的指令的其他硬件设备。根据一个实施例,在一致性目录缓存上下文中,一个或多个硬件处理器302可以提取、解码并执行指令(如指令306至314),以控制用于实施错误检测和控制的进程或操作。作为取出并执行指令的替代或补充,一个或多个硬件处理器302可以包括包含用于执行一个或多个指令的功能的电子部件的一个或多个电子电路,诸如现场可编程门阵列(FPGA)、专用集成电路(ASIC)或其他电子电路。
一个或多个硬件处理器302被配置为执行存储在机器可读介质304上的指令。机器可读介质304可以是一种或多种类型的非暂态计算机存储介质。非限制性示例包括:闪速存储器、固态存储设备(SSD);存储区域网络(SAN);可移动存储器(例如,记忆棒、CD、SD卡等);或者内部计算机RAM或ROM;以及其他类型的计算机存储介质。存储在计算机可读介质304上的指令可以包括用于执行所识别的功能所体现的函数的各种子指令。
一个或多个硬件处理器302中可以执行指令306以执行本地运行队列中的线程。如上所述,例如CPU(本地CPU 200(图2A))可以具有要被运行的线程/可以将要被运行的线程置于特定于所述CPU的本地运行队列(例如本地运行队列205)中(意味着其他CPU不能窃取或执行针对另一个CPU的本地运行队列中的线程的任何工作)。在某些实施例中,CPU可以按照优先级顺序执行本地运行队列中的线程。
一个或多个硬件处理器302可以执行指令308以在清空本地运行队列后检查共享环形缓冲区。例如,如果本地CPU 200在本地运行队列205中不再具有剩余的要运行的线程,则所述CPU就变成空闲CPU,并且本地CPU 200可以检查其可以访问的共享环形缓冲区215。本地CPU 200检查共享环形缓冲区215以确定是否有要由本地CPU 200执行的任何线程,例如,可能具有对本地CPU 200特定的亲和性的(多个)特定线程。如果没有特定于要本地CPU200运行的特定线程,则本地CPU 200可以从共享环形缓冲区215窃取其可以运行的任何线程。即,本地CPU 200可以窃取具有对本地CPU 200所属于CPU组的亲和性、具有特定NUMA亲和性、或完全没有亲和性的任何线程(意味着任何可用的CPU都可以执行所述(多个)线程)。应该理解的是,其他空闲CPU(如空闲CPU 230)也可以检查共享环形缓冲区以确定其是否可以窃取的任何线程。
因此,一个或多个硬件处理器302可以执行指令310以使批量线程从共享环形缓冲区出队。例如,本地CPU 200可以从共享环形缓冲区移出允许其运行的批量线程。一个或多个硬件处理器302可以进一步执行指令312以将批量线程置于本地运行队列中。即,本地CPU200可以例如按照优先级顺序将出队的批量线程放入要被执行的其自己的本地运行队列205中。一个或多个硬件处理器302可以执行指令312以执行/运行批量线程。既然可以运行本地CPU 200从共享环形缓冲区215获取的出队的批量线程,那么本地CPU 200可以运行线程直到线程让步,运行下一线程,依此类推。
图4是根据本公开的实施例的示例计算设备400。在计算设备400的操作和功能与关于图2B中所述的那些相同或类似的情况下,该描述应被解释为适用。例如,计算设备400可以是节点、节点控制器、CPU(如CPU 10或30)的实施例。计算设备400包括一个或多个硬件处理器402,所述硬件处理器可以是一个或多个中央处理单元(CPU)、基于半导体的微处理器、和/或适用于取得并执行存储在机器可读存储介质404中的指令的其他硬件设备。根据一个实施例,在一致性目录缓存上下文中,一个或多个硬件处理器402可以提取、解码并执行指令(如指令406至414),以控制用于实施错误检测和控制的进程或操作。作为取出并执行指令的替代或补充,一个或多个硬件处理器402可以包括包含用于执行一个或多个指令的功能的电子部件的一个或多个电子电路,诸如现场可编程门阵列(FPGA)、专用集成电路(ASIC)或其他电子电路。
一个或多个硬件处理器402被配置为执行存储在机器可读介质404上的指令。机器可读介质404可以是一种或多种类型的非暂态计算机存储介质。非限制性示例包括:闪速存储器、固态存储设备(SSD);存储区域网络(SAN);可移动存储器(例如,记忆棒、CD、SD卡等);或者内部计算机RAM或ROM;以及其他类型的计算机存储介质。存储在计算机可读介质404上的指令可以包括用于执行所识别的功能所体现的函数的各种子指令。
一个或多个硬件处理器402可以执行指令406以将多个轮询器分组在共享的轮询器阵列中。如上所述并且与将线程置于共享环形缓冲区中以允许空闲CPU窃取工作类似,可以将轮询器(例如轮询器240a至240c(图2B))聚集到共享的轮询器阵列240中以由CPU(例如本地CPU 200)选择用于执行,以便在CPU之中动态地分布线程。可以将原子运行标记分配给共享的轮询器中的每个轮询器。
原子运行标记的使用允许随机选择轮询,其中,可以使用CAS操作来尝试原子地设置所选择的轮询器的运行标记。一个或多个硬件处理器402可以执行指令408以随机选择所述多个轮询器中的第一轮询器以尝试执行第一轮询器。如果CAS操作成功,CPU可以索取要被执行的第一轮询器。如上所述,CPU可以尝试在要执行的调度线程之间执行轮询器。
因此,一个或多个硬件处理器402可以执行指令410以在成功索取要被执行的第一轮询器后,执行第一轮询器。在执行第一轮询器后,CPU可以释放第一轮询器,使得所述第一轮询器可以被例如另一CPU随机选择以执行。
另一方面,如果CAS操作失败,并且第一轮询器无法被索取用于执行,则根据某些实施例,CPU有两种选择。即,一个或多个硬件处理器402可以执行指令412以随机选择所述多个轮询器中的第二轮询器以尝试执行第二轮询器,或者一个或多个硬件处理器402可以返回调度要被执行的线程。同样,要执行的线程可以是下一个或后一个线程,回想一下,如上所公开的,轮询架构在线程调度之间交织。
图5描绘了可以在其中实施本文描述的各种实施例的示例计算机系统500的框图。计算机系统500包括总线502或用于传送信息的其他通信机制、与总线502耦接以处理信息的一个或多个硬件处理器504。(多个)硬件处理器504可以是例如一个或多个通用微处理器。
计算机系统500还包括耦接到总线502以用于存储要由处理器504执行的信息和指令的主存储器506,如随机存取存储器(RAM)、缓存和/或其他动态存储设备。主存储器506还可以用于存储在执行要由处理器504执行的指令期间的临时变量或其他中间信息。这种指令当存储在处理器504可访问的存储介质中时使计算机系统500成为被自定义为执行指令中指定的操作的专用机器。
计算机系统500进一步包括只读存储器(ROM)508或耦接到总线502以用于存储处理器504的静态信息和指令的其他静态存储设备。如磁盘、光盘或USB拇指驱动器(闪存驱动器)等存储设备510被提供并耦接到总线502,用于存储信息和指令。
通常,如本文所使用的词语“部件”、“系统”、“数据库”等可以是指在硬件或固件中实施的逻辑,或者是指以如例如Java、C或C++等编程语言编写的、可能具有入口点和出口点的软件指令集。软件部件可以被编译并链接到可执行程序,被安装在动态链接库中,或者可以用如例如BASIC、Perl、或Python等解释性编程语言书写。应当理解的是,软件部件可从其他部件或从其本身调用,和/或可以响应于检测到的事件或中断而被调用。被配置用于在计算设备上执行的软件部件可以被提供在计算机可读介质中,如致密盘、数字视频盘、闪存驱动器、磁盘、或任何其他有形介质,或者可以被提供作为数字下载(并且可以原始地以要求在执行之前安装、解压缩或解密的压缩格式或可安装格式来存储)。这样的软件代码可以部分或全部地存储在执行计算设备的存储器设备上,以用于由计算设备执行。软件指令可以嵌入在如EPROM等固件中。将进一步理解的是,硬件部件可以包括如门和触发器等连接逻辑单元,和/或可以包括如可编程门阵列或处理器等可编程单元。
计算机系统500可以使用定制的硬接线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑来实施本文所描述的技术,所述定制的硬接线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑与计算机系统相结合使计算机系统500成为专用机器或者将其编程为专用机器。根据一个实施例,本文的技术由计算机系统500响应于(多个)处理器504执行主存储器506中包含的一个或多个指令的一个或多个序列而执行。这种指令可以从另一个存储介质(如存储设备510)读取到主存储器506中。主存储器506中包含的指令序列的执行使(多个)处理器504执行本文所描述的过程步骤。在替代性实施例中,可以使用硬接线电路代替软件指令或与软件指令组合。
如本文所使用的术语“非暂态介质(non-transitory media)”及类似术语是指存储使机器以指定方式操作的数据和/或指令的任何介质。这种非暂态介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘或磁盘,如存储设备510。易失性介质包括动态存储器,如主存储器506。非暂态介质的常见形式例如包括软盘、软磁盘、硬盘、固态驱动器、磁带或者任何其他磁性数据存储介质、CD-ROM、任何其他光学数据存储介质、具有孔图案的任何物理介质、RAM、PROM和EPROM、闪速EPROM、NVRAM、任何其他存储器芯片或者盒、以及所述介质的联网版本。
非暂态介质不同于传输介质但可以与传输介质结合使用。传输介质参与非暂态介质之间的信息传递。例如,传输介质包括同轴电缆、铜线和光纤,包括包含总线502的导线。传输介质还可以采用声波或光波的形式,如在无线电波和红外数据通信期间生成的声波或光波。
如本文所使用的,术语“或”可以以包括性或排他性的意义来解释。而且,不应将对单数形式的资源、操作或结构的描述理解为排除复数。除非另外具体规定,或在如所使用的环境内以其他方式被理解,否则条件语言(除其他外,如“可”、“可以”、“可能”、或“会”)一般地旨在传达某些实施例包括(而其他实施例不包括)某些特征、元素和/或步骤。除非另外明确说明,否则本文档中使用的术语和短语及其变体应被解释为开放式的而不是限制性的。如前述示例,术语“包括”应被理解为是指“包括但不限于”等。术语“例如”被用于提供所讨论的项的示例性实例而不是所述项的穷举或限制性列表。术语“一(a)”或“一(an)”应该被理解为意指“至少一个”、“一个或多个”等。在某些实例中,宽泛单词和短语(如“一个或多个”、“至少”、“但不限于”或其他类似的短语)的存在不应被理解为是指在这类宽泛短语可能不存在的情况下意图或要求更窄的情况。

Claims (20)

1.一种中央处理单元(CPU),包括:
控制单元,所述控制单元从存储器单元提取指令,所述指令使所述控制单元:
执行与所述CPU相关联的本地运行队列中保存的线程;
在清空所述本地运行队列后,检查在包括所述CPU和各附加CPU的CPU群组之中共享的缓冲区;
使与所述CPU或所述CPU群组中的所述各附加CPU中的一个CPU相关联的批量线程从所述缓冲区出队;
将所述批量线程置于所述本地运行队列中;以及
执行所述批量线程。
2.如权利要求1所述的CPU,其中,所述CPU和所述一个或多个其他CPU驻留在相同的物理核中或相同的非均衡存储器访问(NUMA)插槽中。
3.如权利要求2所述的CPU,其中,所述批量线程具有对所述CPU、所述物理核、或所述NUMA插槽的亲和性。
4.如权利要求2所述的CPU,其中,所述指令进一步使所述控制单元在从各附加CPU的驻留在相同物理核中但不在相同NUMA插槽中的剩余子集中选择各附加CPU中的所述一个CPU之前,选择所述批量线程中与来自相同NUMA插槽中的各附加CPU中的所述一个CPU相关联的线程。
5.如权利要求1所述的CPU,其中,所述指令进一步使所述控制单元在使与所述一个或多个其他CPU中的所述一个CPU相关联的批量线程出队之前,检查所述缓冲区以寻找正等待在所述CPU上运行的任何线程并执行属于所述线程的线程。
6.如权利要求1所述的CPU,其中,所述指令进一步使所述控制单元随机选择所述其他CPU中的要使所述批量线程从其出队的所述一个CPU。
7.如权利要求6所述的CPU,其中,所述指令进一步使所述控制单元在所述其他CPU中的被随机选择的所述一个CPU与能够使所述批量线程从其出队的至少一个准备好运行的线程不相关联的情况下,重复执行对所述其他CPU中的使所述批量线程从其出队的后续CPU进行随机选择。
8.如权利要求7所述的CPU,其中,所述指令进一步使所述控制单元在达到随机选择尝试的最大次数后进入休眠状态。
9.如权利要求8所述的CPU,其中,所述指令进一步使所述控制单元确定导致从所述缓冲区窃取线程失败的随机选择尝试的阀值次数是否已经出现,以发起所述休眠状态。
10.如权利要求1所述的CPU,其中,所述指令进一步使所述控制单元按照优先级顺序执行所述批量线程中的每个线程。
11.如权利要求1所述的CPU,其中,所述指令进一步使所述控制单元在执行所述批量线程后随机选择共享的轮询器阵列中的要被执行的第一轮询器。
12.如权利要求11所述的CPU,其中,所述指令进一步使所述控制单元在成功索取要被执行的所述第一轮询器后执行所述第一轮询器。
13.如权利要求12所述的CPU,其中,进一步使所述控制单元执行所述第一轮询器的指令还进一步使所述控制单元清除与所述第一轮询器相关联的运行标记,其中,所述控制单元在随机选择所述第一轮询器后使用比较和交换操作来尝试所述运行标记。
14.如权利要求13所述的CPU,其中,所述指令进一步使所述控制单元在成功索取要被执行的所述第一轮询器后基于成功进行所述比较和交换操作而清除所述运行标记。
15.如权利要求13所述的CPU,其中,所述指令进一步使所述控制单元随机选择所述共享的轮询器阵列的要被执行的第二轮询器,或返回检查所述共享的缓冲区以使另一批量线程出队。
16.如权利要求11所述的CPU,其中,所述指令进一步使所述控制单元在随机选择所述共享的轮询器阵列中的轮询器但是所选择的轮询器没有要执行的工作时,对与所述共享的轮询器阵列中的每个轮询器相关联的延时顺序计数器进行增量。
17.如权利要求16所述的CPU,其中,所述指令进一步使所述控制单元保存可增量的序列号,所述控制单元在每次所述控制单元随机选择所述共享的轮询器阵列中的轮询器时对所述序列号进行增量,使得所述控制单元表现出对所述共享的轮询器阵列中的具有更小延时顺序的轮询器的偏好。
18.如权利要求17所述的CPU,其中,所述指令进一步使所述控制单元忽略所述偏好,直到所述延时顺序满足或超出最大延时顺序值。
19.一种中央处理单元(CPU),包括:
控制单元,所述控制单元从存储器单元提取指令,所述指令使所述控制单元:
在执行保存在与所述CPU相关联的本地运行队列中的当前线程组后,通过检查在包括所述CPU和各附加CPU的CPU群组之中共享的缓冲区来调度执行附加线程组;
将所述附加线程置于所述本地运行队列中;
执行所述批量线程;
在调度执行第二附加线程组之前,尝试选择所述CPU群组的共享的轮询器阵列中的要由所述CPU执行的轮询器。
20.如权利要求19所述的CPU,其中,所述指令进一步包括:在调度执行进一步的线程组之间重复对选择所述共享的轮询器阵列中的轮询器的尝试。
CN202110407777.XA 2020-08-31 2021-04-15 无锁工作窃取线程调度器 Pending CN114116155A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/008,549 2020-08-31
US17/008,549 US11698816B2 (en) 2020-08-31 2020-08-31 Lock-free work-stealing thread scheduler

Publications (1)

Publication Number Publication Date
CN114116155A true CN114116155A (zh) 2022-03-01

Family

ID=80221125

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110407777.XA Pending CN114116155A (zh) 2020-08-31 2021-04-15 无锁工作窃取线程调度器

Country Status (3)

Country Link
US (2) US11698816B2 (zh)
CN (1) CN114116155A (zh)
DE (1) DE102021108963A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115016918A (zh) * 2022-03-31 2022-09-06 中国科学院计算技术研究所 一种用于数据流架构的计算设备的数据处理方法

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11630603B1 (en) 2021-09-28 2023-04-18 Hewlett Packard Enterprise Development Lp Hardware device polling using delay order
US11669471B2 (en) * 2021-10-21 2023-06-06 EMC IP Holding Company, LLC System and method for lockless aborting of input/output (IO) commands

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6735769B1 (en) * 2000-07-13 2004-05-11 International Business Machines Corporation Apparatus and method for initial load balancing in a multiple run queue system
CN1786917A (zh) * 2004-12-07 2006-06-14 国际商业机器公司 在多处理器数据处理系统中借入线程作为负载平衡的形式
US20070300227A1 (en) * 2006-06-27 2007-12-27 Mall Michael G Managing execution of mixed workloads in a simultaneous multi-threaded (smt) enabled system
US20170075734A1 (en) * 2015-09-14 2017-03-16 Qualcomm Incorporated Efficient Scheduling of Multi-Versioned Tasks
CN107092573A (zh) * 2013-03-15 2017-08-25 英特尔公司 异构计算系统中的工作窃取
CN110597606A (zh) * 2019-08-13 2019-12-20 中国电子科技集团公司第二十八研究所 一种高速缓存友好的用户级线程调度方法

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7159215B2 (en) * 2001-06-27 2007-01-02 Sun Microsystems, Inc. Termination detection for shared-memory parallel programs
US20030037091A1 (en) * 2001-08-09 2003-02-20 Kozo Nishimura Task scheduling device
US8032884B2 (en) * 2006-10-31 2011-10-04 Hewlett-Packard Development Company, L.P. Thread hand off
US20110276978A1 (en) * 2010-05-10 2011-11-10 Andrew Gaiarsa System and Method for Dynamic CPU Reservation
US9183109B2 (en) * 2010-05-25 2015-11-10 Intel Corporation Method and system for analyzing the performance of multi-threaded applications
US9411636B1 (en) * 2011-07-07 2016-08-09 Emc Corporation Multi-tasking real-time kernel threads used in multi-threaded network processing
US9892031B2 (en) * 2011-11-07 2018-02-13 Sap Se Lock-free scalable free list
US10936369B2 (en) * 2014-11-18 2021-03-02 International Business Machines Corporation Maintenance of local and global lists of task control blocks in a processor-specific manner for allocation to tasks
US9342384B1 (en) * 2014-12-18 2016-05-17 Intel Corporation Function callback mechanism between a central processing unit (CPU) and an auxiliary processor
US20170031724A1 (en) * 2015-07-31 2017-02-02 Futurewei Technologies, Inc. Apparatus, method, and computer program for utilizing secondary threads to assist primary threads in performing application tasks
US10235182B2 (en) * 2017-06-20 2019-03-19 Palo Alto Research Center Incorporated System and method for hybrid task management across CPU and GPU for efficient data mining
US11388074B2 (en) * 2018-04-12 2022-07-12 Intel Corporation Technologies for performance monitoring and management with empty polling
US11256549B2 (en) * 2019-10-16 2022-02-22 EMC IP Holding Company LLC Method and apparatus for thread scheduling

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6735769B1 (en) * 2000-07-13 2004-05-11 International Business Machines Corporation Apparatus and method for initial load balancing in a multiple run queue system
CN1786917A (zh) * 2004-12-07 2006-06-14 国际商业机器公司 在多处理器数据处理系统中借入线程作为负载平衡的形式
US20070300227A1 (en) * 2006-06-27 2007-12-27 Mall Michael G Managing execution of mixed workloads in a simultaneous multi-threaded (smt) enabled system
CN107092573A (zh) * 2013-03-15 2017-08-25 英特尔公司 异构计算系统中的工作窃取
US20170075734A1 (en) * 2015-09-14 2017-03-16 Qualcomm Incorporated Efficient Scheduling of Multi-Versioned Tasks
CN110597606A (zh) * 2019-08-13 2019-12-20 中国电子科技集团公司第二十八研究所 一种高速缓存友好的用户级线程调度方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115016918A (zh) * 2022-03-31 2022-09-06 中国科学院计算技术研究所 一种用于数据流架构的计算设备的数据处理方法
CN115016918B (zh) * 2022-03-31 2024-06-11 中国科学院计算技术研究所 一种用于数据流架构的计算设备的数据处理方法

Also Published As

Publication number Publication date
US20220066831A1 (en) 2022-03-03
US11698816B2 (en) 2023-07-11
US20230315526A1 (en) 2023-10-05
DE102021108963A1 (de) 2022-03-03

Similar Documents

Publication Publication Date Title
CN112088358B (zh) 具有线程优先级管理的多线程自调度处理器
CN112088357B (zh) 用户模式多线程自调度处理器中的系统调用管理
CN112088355B (zh) 多线程自调度处理器在本地或远程计算元件上的线程创建
CN112106027B (zh) 多线程自调度处理器中的存储器请求大小管理
CN112088359B (zh) 多线程自调度处理器
US8219993B2 (en) Frequency scaling of processing unit based on aggregate thread CPI metric
US8307053B1 (en) Partitioned packet processing in a multiprocessor environment
US20230315526A1 (en) Lock-free work-stealing thread scheduler
JP6294586B2 (ja) 命令スレッドを組み合わせた実行の管理システムおよび管理方法
US9588810B2 (en) Parallelism-aware memory request scheduling in shared memory controllers
US20170351555A1 (en) Network on chip with task queues
US20130160028A1 (en) Method and apparatus for low latency communication and synchronization for multi-thread applications
KR20180053359A (ko) 다중-버전형 태스크들의 효율적 스케줄링
CN108885559B (zh) 在多个处理器之间快速转移工作负载
WO2022100372A1 (en) Processor architecture with micro-threading control by hardware-accelerated kernel thread
JP2006515690A (ja) 複数のプロセッサを有するデータ処理システムと、複数のプロセッサを有するデータ処理システムのためのタスクスケジューラと、タスクスケジューリングの対応する方法
US11005970B2 (en) Data storage system with processor scheduling using distributed peek-poller threads
US10331500B2 (en) Managing fairness for lock and unlock operations using operation prioritization
US11537453B2 (en) Multithreaded lossy queue protocol
US20120297216A1 (en) Dynamically selecting active polling or timed waits
WO2007020739A1 (ja) スケジューリング方法およびスケジューリング装置
EP3770759A1 (en) Wake-up and scheduling of functions with context hints
CN112764904A (zh) 基于多任务系统中防止低优先级任务饿死的方法
CN111459622B (zh) 调度虚拟cpu的方法、装置、计算机设备和存储介质
US10671453B1 (en) Data storage system employing two-level scheduling of processing cores

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