CN116821041A - 针对用户空间分组处理的高效队列存取 - Google Patents
针对用户空间分组处理的高效队列存取 Download PDFInfo
- Publication number
- CN116821041A CN116821041A CN202210404165.XA CN202210404165A CN116821041A CN 116821041 A CN116821041 A CN 116821041A CN 202210404165 A CN202210404165 A CN 202210404165A CN 116821041 A CN116821041 A CN 116821041A
- Authority
- CN
- China
- Prior art keywords
- queue
- thread
- handling thread
- identifiers
- preemption
- 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
- 238000012545 processing Methods 0.000 title claims abstract description 54
- 238000000034 method Methods 0.000 claims abstract description 101
- 230000004044 response Effects 0.000 claims abstract description 25
- 230000015654 memory Effects 0.000 claims description 73
- 238000013507 mapping Methods 0.000 claims description 6
- 230000008569 process Effects 0.000 description 43
- 238000012546 transfer Methods 0.000 description 27
- 238000011282 treatment Methods 0.000 description 14
- 238000010586 diagram Methods 0.000 description 13
- 238000004590 computer program Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 230000003993 interaction Effects 0.000 description 4
- 238000007726 management method Methods 0.000 description 4
- 238000004519 manufacturing process Methods 0.000 description 4
- 238000013500 data storage Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 238000011010 flushing procedure Methods 0.000 description 1
- 230000007274 generation of a signal involved in cell-cell signaling Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- 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/5083—Techniques for rebalancing the load in a distributed system
- G06F9/5088—Techniques for rebalancing the load in a distributed system involving task migration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
-
- 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/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- 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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9063—Intermediate storage in different physical parts of a node or terminal
- H04L49/9068—Intermediate storage in different physical parts of a node or terminal in the network interface card
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Multi Processors (AREA)
Abstract
本公开涉及针对用户空间分组处理的高效队列存取。一种示例方法可以包括:确定与第一输入/输出(I/O)队列处置线程相关联的抢占标志是否等于指示对所述第一I/O队列处置线程的抢占即将发生的第一值,其中所述第一I/O队列处置线程正在第一处理器上执行,所述第一I/O队列处置线程与一个或多个队列标识符的第一集合相关联,并且每个队列标识符标识正由所述第一I/O队列处置线程处置的队列;以及响应于确定所述抢占标志等于所述第一值,将一个或多个队列标识符的所述第一集合转移到正在第二处理器上执行的第二I/O队列处置线程。转移队列标识符的所述第一集合可以包括从所述第一集合中移除所述一个或多个队列标识符。
Description
技术领域
本公开总体上涉及计算机联网,并且更具体地涉及针对用户空间分组处理的高效队列存取。
背景技术
数字通信网络使得计算机系统能够通过可以使用物理链路或无线链路的互连彼此通信。计算机系统可以将数据分成数据相对较小的分组(packet),每个分组包含该数据的一部分。计算机系统可以将可以通过通信网络更有效和可靠地传输的每个分组传输到目的地计算机系统。每个分组可以包括诸如源地址、目的地地址、长度和有效载荷(payload)的信息,该有效载荷是包括在该分组中的数据的部分。计算机系统可以使用网络接口控制器(NIC)传输每个分组,该网络接口控制器可以例如经由电缆将计算机系统连接到有线网络,或者例如经由天线将其连接到无线网络。每个分组可以根据通信协议经由通过网络的路由被发送到目的地计算机系统。协议可以包括指定如何经由网络发送信息的一组规则。例如,因特网协议(IP)和传输控制协议(TCP)指定了如何经由因特网将分组从源计算机系统发送到目的计算机系统。
附图说明
本公开通过示例而非限制的方式说明,并且当结合附图考虑时,参考以下详细描述可以更全面地理解本公开,其中:
图1描绘了根据本公开的一个或多个方面的使得用户空间应用能够高效地存取多个接收队列的示例计算系统的高级框图;
图2描绘了示出根据本公开的一个或多个方面的在抢占第一线程之前,队列处置从第一线程到第二线程的示例转移的交互图;
图3描绘了示出根据本公开的一个或多个方面的在抢占第一线程之前,队列处置从第一线程到第二线程的转移中所涉及的示例抢占标志和处置的队列列表的交互图;
图4描绘了根据本公开的一个或多个方面的用于管理线程抢占标志的示例方法的流程图;
图5描绘了根据本公开的一个或多个方面的用于在抢占第一线程之前将队列处置从第一线程转移到第二线程的示例方法的流程图;
图6和图7描绘了根据本公开的一个或多个方面的示例计算机系统的框图;以及
图8描绘了根据本公开的示例操作的说明性计算设备的框图。
具体实施方式
本文描述了针对用户空间分组处理的高效队列存取的系统和方法。计算机系统可以从网络接收分组形式的数据。分组可以由网络接口控制器(NIC)接收,该NIC可以使每个接收到的分组被存储在接收队列中。NIC可以触发向操作系统内核通知该分组的到达的中断,并且操作系统内核可以例如通过以下方式来处理该分组:使分组被递送到对该分组执行进一步处理的网络协议栈。当该分组被网络协议栈处理时可能发生额外的内核中断,该处理的部分可以在用户空间中而不是由内核执行。该分组中的数据最终被递送到应用。
然而,中断该操作系统内核、在内核中执行分组处理操作、以及在内核空间和用户空间之间切换可能降低系统性能,例如,由于触发和处理中断所涉及的时间、以及内核用来处理分组而不是执行其他任务所使用的时间。可以使用旁路(bypass)内核的可替代性分组处理技术来改善分组处理性能。例如,内核旁路技术可以在不中断内核的情况下将传入的分组传递到用户空间进程(process)。内核旁路应用在用户空间中运行并且与NIC相关联。内核旁路应用可以针对传入分组而轮询一个或多个接收队列。如果传入分组到达,则轮询操作检测该分组,并且该分组可以被内核旁路应用和用户空间网络堆栈在用户空间中处理。用户空间网络堆栈可以使用计算机系统的多个处理器核(例如,CPU)来处理分组,并且NIC可以具有多个硬件接收队列。
NIC可以例如使用接收侧缩放(RSS)将每个接收到的分组分配给硬件接收队列之一。通过使用RSS,NIC可以将每个接收到的分组存储在基于该分组的源和目的地地址信息的散列而标识的硬件接收队列中。内核旁路应用可以分配一组用户空间接收队列,例如,为每个硬件接收队列分配一个用户空间接收队列。作为示例,内核旁路应用可以使用数据平面开发套件(DPDK)库来实现,该DPDK库以库的形式提供程序代码。内核旁路应用可以与该库交互以将分组出队(dequeue)并在用户空间中进一步处理分组。
作为示例,每个用户空间队列可以对应于处理器核之一。此外,内核旁路应用可以分配在用户空间中执行并处理来自用户空间接收队列的分组的一组处理线程(thread)。然而,确定适当数量的处理线程是一个困难的问题。使用太少的处理线程可能导致次优的吞吐量,例如,如果系统大部分是空闲的。使用太多的处理线程也可能导致效率低下。例如,可以为每个用户空间接收队列分配单独的线程。在这种情况下,当多个应用竞争核时,如果操作系统中断暂停了正处于转发分组进程的线程的执行,则该分组可能在大量时间内保持未被处理,从而阻塞(block)队列或导致分组重新排序。
另一种可能的解决方案是专用一个或多个处理器来处理来自接收队列的分组。然而,使处理器专用于执行分组处理引入了管理复杂性,并且可能难以确定适当数量的处理器,例如在一个处理器不足以处置分组处理负载的情况下。此外,将处理器专用于分组处理可能导致处理器的利用不足或过度利用,因为专用处理器在可能利用可用处理器资源的其他任务之间没有被复用。
本公开的各方面通过提供一种队列管理系统来解决上述和其他缺陷,该队列管理系统使得在第一处理器上执行的第一队列处置线程能够响应于确定对第一线程的抢占(preemption)即将发生,而将一个或多个输入/输出队列的处理高效地转移到在第二处理器上执行的第二队列处置线程。例如,如果线程将在阈值时间量内被操作系统抢占,则对该线程的抢占可能是即将到来的。对线程的抢占可以由操作系统执行,并且使得被抢占的线程等待一段时间,而执行可能与队列处理无关的另一任务的另一线程在曾在执行被抢占的线程的处理器上执行。被抢占的线程可以在随后的时间恢复执行,但是如果线程被抢占了大量时间,则该抢占可以降低该线程的性能并且潜在地导致分组被丢弃(drop)。例如,如果处理器正被许多线程使用,或者例如被具有比被抢占的线程更高的优先级的线程使用,则线程可以被抢占大量时间。
队列管理系统可以包括队列存取管理器线程,该队列存取管理器线程可以在指定处理器上执行并且识别抢占即将到来的第一线程。然后,队列存取管理器线程可以使与第一线程相关联的抢占标志(flag)置位。第一线程可以在执行某些操作之前(例如,在轮询队列之前或在将分组从队列中出队之前)检查抢占标志。在确定了与第一线程相关联的抢占标志已被置位时,第一线程可以将其正在处置的队列转移到具有未被置位的抢占标志的第二线程。第二线程可以在与第一线程不同的处理器上,因此队列处置可以在第二处理器上继续,同时第一线程被抢占并等待恢复执行。“处置(handle)”队列在本文中应指将分组从队列中出队并对出队的分组执行操作,诸如将出队的分组传递到其他系统组件以进行进一步处理。队列处置线程可以针对分组而轮询每个队列,例如,通过针对分组而重复地检查每个队列。在确定了分组存在于队列中时,该队列处置线程可以将该分组出队并处理该分组。
在被抢占之前,第一线程可以转移其正在处置的队列,例如通过将其正在处置的队列列表添加到正由第二线程处理的队列列表,或者以其他方式修改由两个线程共享的存储器中的数据结构,使得第二线程开始处置列表中的队列。第一线程可以清除其队列列表,使得每个队列由一个线程处理,并且第二线程可以继续处理从第一线程转移来的队列。以这种方式,可以在可以与非分组处理任务共享的多个处理器上平衡分组处理负载,使得处理器利用率可以保持为高,并且分组处理可以继续而无需等待其他线程执行其他任务。
管理器线程可以最终确定第一线程准备好恢复执行或者已经恢复执行,然后清除与第一线程相关联的抢占标志。然后,另一处理器上的另一线程(诸如第二线程)可以在该另一线程被抢占之前将其处置的线程转移到第一处理器,使得分组处理可以继续而无需等待第二线程恢复执行。
本文描述的系统和方法包括对虚拟化技术的技术改进。具体地,本公开的各方面可以提高处理输入/输出队列(诸如与网络接口控制器(NIC)相关联的那些队列)的效率。当操作系统抢占队列处置线程时,操作系统使被抢占的线程等待一段时间,而执行可能与队列处置无关的另一任务的另一线程在曾在执行被抢占的线程的处理器上执行。队列处置可以在另一处理器上的第二线程中继续,其中第一线程处置的队列被转移到了该另一处理器。因此,当第一线程等待时,队列处置可以在第二线程中以高速率继续。
第二线程可以类似地在被抢占之前将其处置的队列转移到另一线程,因此队列处置可以继续而无需等待被抢占的线程恢复执行。以这种方式,可以在可以与非分组处理任务共享的多个处理器上平衡分组处理负载,使得处理器利用率可以保持为高。由于管理器线程在第一线程被抢占之前识别非被抢占的第二处理器,并将对第一线程的队列的处置转移到第二处理器,所以由第一处理器处置的队列中的分组不会在大量时间内保持被未处理。
下面通过示例而不是限制的方式详细描述以上提及的方法和系统的各个方面。下面提供的示例讨论了可以作为内核旁路应用或库的一部分而在用户空间中执行的队列处理线程管理。在其他示例中,其他处置线程可以由计算系统管理,并且可以不存在内核旁路应用或库。
图1描绘了根据本公开的一个或多个方面的使得用户空间应用能够高效地存取多个接收队列的示例计算系统的高级框图。在管理器CPU 130上执行的队列存取管理器132的管理器线程可以识别即将发生抢占的第一输入/输出(I/O)队列处置线程104A(“第一线程”),并置位与第一队列处置线程相关联的抢占标志124A。第一线程104A可以在执行某些操作之前(例如,在将分组从第一队列142A出队之前)检查其相关联的抢占标志124A。如果第一队列处置线程104A确定抢占标志124A被置位,则第一队列处置线程104A可将其正在处置的队列集合126A转移到第二队列处置线程104B,而不是对队列集合126A中的分组进行处理。
为了转移队列集合126A,第一队列处置线程104A可以识别具有未被置位的相关联抢占标志124B的第二队列处置线程104B,该抢占标志124B指示对第二队列处置线程104B的抢占不是即将发生的。例如,如果抢占未被调度为在阈值数量的时间单位内发生,则该抢占不是即将发生的。第一队列处置线程104A在第一处理器102A上执行,并且第二队列处置线程104B可以在第二处理器102B上执行。因此,在第一队列处置线程104A的抢占之后,可以在第一处理器102A上继续与队列处置无关的其他任务的执行。
在被抢占之前,第一队列处置线程104A可以将其正在处置的队列集合126A传递给第二队列处置线程104B。第二队列处置线程104B可以将所接收的集合与第二线程104B正在处置的队列列表126B合并。然后,第二队列处置线程104B可以继续进行到处置由所接收的集合所标识的线程104,例如,通过使用第二处理器102B来轮询由合并后的集合126B所标识的每个队列142A,并将分组从具有可用分组110的队列142中出队。
可以通过以下方式在各线程104所共享的存储器120中在线程104之间传递处置队列集合126A,例如:在存储器120中复制集合126A或通过传递集合126A在存储器120中的位置的引用。在将其队列集合126A传递到第二队列处置线程104B之后,第一队列处置线程104A可以清除其处置队列集合126A,使得第一队列处置线程104A不执行任何进一步的队列处置,直到其抢占标志125a被清除(例如,变为未被置位)。例如当队列存取管理器132的管理器线程确定第一队列处置线程104A准备好执行或正在执行时,可以清除第一队列处置线程的抢占标志124A。
第二线程104B可继续处理所转移的队列142,直到管理器线程确定第二线程104B将被抢占,此时第二线程104B可将处置队列集合126B转移到例如在阈值时间量内不会被抢占的另一线程104A、104N。例如,如果与第一线程104A相关联的抢占标志124A不再被置位,则第二线程104B可以将处置队列集合126B转移回第一线程104A。作为另一示例,第二线程104B可以将处置队列126B转移到具有未被置位的相关联抢占标志的第三线程104N。队列处置线程104可以是用户空间线程,其在内核旁路应用或库106中将分组110从接收队列142中出队并处理分组110。
计算机系统100可以包括硬件资源,诸如存储器120和网络接口设备108、一个或多个中央处理单元(“CPU”)102、130。计算机系统100还可以包括操作系统150,其可以创建并执行一个或多个用户空间进程。每个用户空间进程可以包括一个或多个线程104。每个线程104可以在CPU 102上执行。每个线程104可以存取(例如,读取或写入)存储器120中的数据。计算机系统100可以经由网络(未示出)与其他计算机系统通信。网络接口设备108以分组110的形式向网络发送数据并从网络接收数据。网络可以是公共网络(例如,因特网)、私有网络(例如,局域网(LAN)、广域网(WAN))或其组合。在一个示例中,网络可以包括有线或无线基础设施,其可以由一个或多个无线通信系统提供,诸如与网络连接的无线保真(WiFi)热点和/或可以使用各种数据处理设备、通信塔等实现的无线载波系统。应当注意,计算机系统100的其他架构也是可能的,并且利用本公开的实施例的计算系统的实现不必限于所描绘的特定架构。
计算机系统100可以是单个计算机器或布置在同构或异构组(例如,集群、网格、服务器场)中的多个计算机器。计算机系统100可以包括一个或多个机架式服务器、工作站、台式计算机、笔记本计算机、平板计算机、移动电话、掌上型计算设备、个人数字助理(PDA)等。在一个示例中,计算机系统100可以是用x86硬件实现的计算设备。在另一示例中,计算机系统100可以是用其他硬件或其组合实现的计算设备。
每个CPU 102可以是能够执行编码算术、逻辑或I/O操作的指令的设备。每个CPU102可以是能够一次执行一个指令(例如,单个指令流水线)的单核处理器或可以同时执行多个指令的多核处理器。每个CPU 102可以是嵌入在多核处理器中的单核处理器。
计算机系统100可以包括操作系统150,其可以管理一个或多个计算进程和/或线程104的执行。计算进程可以包括用于执行编程指令的一个或多个执行流。指令流可包含可由一或多个CPU 102执行的指令序列。计算进程可以由内核管理或者可以是内核的一部分(未示出)。在一个示例中,计算过程可以是正在执行的计算机程序的实例,并且可以包含可执行程序代码和当前活动的状态。多个计算过程可以被支持多个处理单元的CPU 102并发地执行。例如,CPU 102A、102B、102N可以是处理单元。处理单元可以由多个处理器提供,或者从具有多个核的单个处理器提供,或者其组合。计算进程可以包括一个或多个计算线程104,诸如系统线程、用户线程或光纤或其组合。计算进程可以包括线程控制块、一个或多个计数器和状态(例如,运行、准备好、等待、开始、完成)。
每个计算进程可以与特定级别的特权(privilege)相关联。计算过程的特权级别可与保护级别(例如,处理器保护环(ring))相同或类似,且可指示计算过程对硬件资源(例如,虚拟或物理资源)的存取级别。可以存在分配给计算进程的多个不同的特权级别。在一个示例中,特权级别通常可以对应于内核特权级别或用户空间特权级别。用户空间特权级别可以使得计算进程或线程104能够存取分配给该计算进程的资源,但是可以限制对分配给另一用户空间或内核空间计算进程的资源的存取。内核空间特权级别可以使计算进程能够存取分配给其他内核空间或用户空间计算进程的资源。
在另一示例中,可以存在多个特权级别,并且特权级别可以包括与内核相关联的第一级别(例如,环0)、与设备驱动相关联的第二和第三级别(例如,环1-2)、以及可以与用户应用相关联的第四级别(例如,环3)。操作系统可以管理多个计算进程,例如,一个或多个用户空间进程。每个计算进程可以包括执行内核旁路应用或库106的线程104,该内核旁路应用或库106可以如下所描述地出列和处理分组110。
操作系统150和/或内核旁路应用或库106可以例如经由网络接口设备108从网络接收一个或多个数据分组152。每个数据分组可以包括目的地地址、源地址、分组类型(例如,协议类型,诸如以太网、IP、TCP、UDP或其他定义的协议类型)和有效载荷(例如,分组中包含的数据)。
数据分组可以被网络接口设备108接收,并且与网络接口设备108交互的设备驱动程序代码和/或操作系统程序代码可以将接收到的数据分组入队(enqueu)到输入/输出(I/O)队列140。网络接口设备108可以包括一个或多个内部队列(未示出),数据分组从内部队列被入队到队列140。在其他实施例中,队列140可以是网络接口设备108的内部队列(“硬件队列”)。
数据分组可以跨各队列140而分布。例如,由网络接口设备108接收的分组中的三分之一可以入队到第一队列142A,三分之一可以入队到第二队列142B,并且三分之一可以入队到第N队列142N。以这种方式将分组分发到队列140可以便利于多个CPU 102和/或多个线程104对队列140的处置(例如,将分组从队列中出队并对出队的分组执行操作)。
内核旁路应用或库106可以将分组110从队列140中出队,并处理每个分组110,例如,通过基于该分组中包含的数据来执行操作。该操作可以是例如将分组提供给计算机系统100的另一组件、修改分组、转发分组等。队列140包括第一队列142A、第二队列142B和队列142N。每个队列142可以是例如先进先出数据结构,其可以不包含分组(例如,空队列),或者可以包含一个或多个分组。队列140可以被存储在存储器120或计算机系统100的其他数据存储部件中。
内核旁路应用或库106在被一个或多个线程104执行时处置数据分组110。每个线程104可以在其中一个CPU 102上执行程序代码指令(诸如内核旁路应用或库106的程序代码)一段时间,直到线程104被操作系统150抢占。已被抢占且尚未恢复执行的线程处于“被抢占(pre-empted)状态”。在该线程处于被抢占状态期间,与该线程相关联的程序代码的任何指令都不被该线程原本会在其上执行的CPU 102执行。在被抢占的线程等待执行的时间期间,操作系统可以使CPU 102执行其他线程。因此,被抢占的线程等待,直到操作系统使线程继续在CPU 102上执行。操作系统可以包括调度器,该调度器确定在特定时间要执行哪个线程以及何时要抢占正在执行的线程并允许另一线程执行。该另一线程可以继续执行直到其被抢占,此时另一线程(诸如先前被抢占的线程)可以恢复执行。
如图1所示,第一线程104A可以在CPU1 102A上执行内核旁路应用或库106A以处置一个或多个队列142。第一线程104A可以在特定时间被操作系统150抢占,并且可以随后恢复执行,直到再次被抢占。类似地,第二线程104B可以在CPU2 102B上执行内核旁路应用或库106B以处置一个或多个队列142,并且第N线程104N可以在CPUn 102N上执行内核旁路应用或库106N以处置一个或多个队列142。尽管示出了三个线程104,但是计算机系统100可以包括任何合适数量的线程104。可以在CPU 102上执行任何数量的线程104。一些线程104可以在CPU 104上执行,并且其他线程104可以处于被抢占状态并且不使用CPU。每个CPU 102可以对应于一次可以执行单个线程的处理器核。因此,例如,如果存在三个CPU 102,则三个线程可以并行执行。
每个线程104可以一次处置单个队列142(例如,出队和处置来自单个队列142的分组)。例如,三个队列142可以由在三个CPU 102上并行执行的三个线程104并行处置。每个线程可以顺序地处置多个队列142,例如,通过处置第一队列142A,然后随后处置第二队列142B。正由线程104处置的特定(一个或多个)队列142可以随时间改变。例如,如队列142和线程104之间的实线箭头所示,在初始时间,第一线程104A可以正在处置第一队列142A,第二线程140B可以正在处置第二队列142B,并且第N线程104N可以正在处置第N队列142N。然而,在其他示例中,或者在其他时间,第一线程104A可以正在处置其他队列而不是第一队列142A,如从第二队列142B和第N队列142N到第一线程104A的虚线箭头所示。类似地,第二线程104B可以正在处置其他队列而不是第二队列142B,如从第一队列142A和第N队列142N到第二线程104B的虚线箭头所示。此外,第N线程104N可以正在处置其他队列而不是第N队列142N,如从第一队列142A和第二队列142B到第N线程104N的虚线箭头所示。
计算机系统100还可以包括CPU0 130,其可以充当管理器CPU,并且可以执行队列存取管理器132。队列存取管理器132可以包括管理器线程,其可以执行本文描述的队列存取管理器132的操作。队列存取管理器132可以例如作为操作系统150的内核的一部分执行,并且存取内核数据结构,诸如调度器数据。队列存取管理器132可识别要被抢占(例如,要被操作系统抢占)的特定线程104,并置位与被调度为要被抢占的每个I/O队列处置线程104相关联的抢占标志124,如下所描述的。队列存取管理器132可以例如执行轮询循环(loop),该轮询循环向操作系统调度器查询每个I/O队列处置线程104的状态。尽管队列存取管理器132被示出在CPU0 130上,但是在其他实施例中,队列存取管理器132可以在计算机系统100的任何CPU上执行。
队列存取管理器132可以检查每个I/O队列处置线程104的即将发生的抢占。例如,为了识别要被抢占的特定线程104,队列存取管理器132可以检查每个CPU 102上的当前线程104是否将在接下来的T个时间单位内被抢占。在一些实施例中,队列存取管理器132可以周期性地执行检查,例如,在操作系统内核的每个定时器节拍(tick)或其他时钟处。定时器节拍可以例如以10毫秒的增量发生。可替代地,队列存取管理器132可以以每个操作系统定时器节拍的倍数(例如,每隔一个定时器节拍(例如,每20毫秒)、或每四个定时器节拍、或其他合适的倍数)执行周期性检查。
队列存取管理器132可以可替代地或额外地响应于特定事件(诸如来自操作系统150的通知,该通知为线程104的状态的改变即将发生或已经发生),来执行对每个I/O队列处置线程104的即将发生的抢占的检查。例如,线程的状态可以是正在运行、准备好或阻塞。正在运行的线程正在CPU 102上执行。准备好的线程并未正在CPU上执行但有资格执行。阻塞的线程正在等待操作,诸如不能被立即完成的I/O操作或者其他等待直到条件被满足的操作。如果线程要被抢占,或者在另一示例中,要执行可以使该线程进入阻塞状态或以其他方式停止运行的操作,则队列存取管理器132可以识别要抢占的线程。因此,如果操作系统向队列存取管理器132提供一线程要在阈值时间段内停止运行的指示,则队列存取管理器132可以识别要抢占的该线程。如果操作系统确定线程要在阈值时间段内被操作系统抢占或以其他方式被操作系统停止,则可以预期该线程要在阈值时间段内停止运行。在另一示例中,如果线程要执行可能潜在地导致该线程发生阻塞的操作,诸如I/O操作或等待条件被满足的操作,则可以预期该线程要停止运行。
在一些实施例中,队列存取管理器132可以响应于来自CPU 102的、由操作系统150在CPU 102上运行的一系列线程104已经改变的通知,来执行对每个I/O队列处置线程104的即将发生的抢占的检查。要运行的一系列线程104可以是例如时间排序的线程树。对一系列线程104的改变可以指示对线程104的抢占即将发生。因此,对要运行的一系列线程104做出改变的CPU 102可以向队列存取管理器132(例如,向在CPU0 130上执行的管理器线程)发送通知,或者替代地,在CPU 102上执行的内核旁路应用或库106可以周期性地轮询操作系统以确定要运行的一系列线程104是否已经改变。如果内核旁路应用或库106确定列表已经改变,则内核旁路应用或库106可以将通知发送到队列存取管理器132。该通知可指示队列存取管理器132的管理器线程确定对第一I/O队列处置线程的抢占是否即将发生。如果管理器线程未在运行,则通知可使操作系统运行管理器线程(例如,在CPU0上)。响应于接收到通知,队列存取管理器132的管理器线程可以执行对每个I/O队列处置线程104或至少在发送了通知的CPU 102上执行的每个I/O处置线程的即将发生的抢占的检查。
队列存取管理器132还可以识别处于被抢占状态并且被调度为在CPU 102上恢复执行的特定线程104,使得一个或多个队列可以被即将发生抢占的其他线程104转移到该特定线程104。在一个示例中,队列存取管理器132可以清除与被调度为要被恢复的每个线程相关联的线程抢占标志124A(例如,将标志设置为假)。例如,队列存取管理器132可以基于来自操作系统150的调度器的信息,来识别被调度为要被抢占或要被恢复的特定线程。队列存取管理器132可以在内核空间中运行并与调度器交互,并在内核空间中存取来自调度器的信息。可替代地或另外地,队列存取管理器132可以与调度器交互并且使用调度器的用户空间编程接口来存取来自调度器的信息。
被队列存取管理器132和内核旁路应用或库106用来在线程104之间转移队列140的处置的数据结构可以被存储在存储器120中。存储器120包括存储与第一线程104A相关联的信息的第一线程存储器122A、存储与第二线程104B相关联的信息的第二线程存储器122B、以及存储与第N线程104N相关联的信息的第N线程存储器122N。尽管存储器120的每个部分122被描述为与特定线程相关联,但是存储器120可以被各线程共享。因此,每个线程104可以存取存储器的任何部分122。线程可以通过在共享存储器120中存储和存取信息来彼此通信。
第一线程存储器122A包括第一线程抢占标志124A,其指示第一线程104A在当前时间是否处于被抢占状态。每个线程抢占标志124可以被操作系统150从可以由队列存取管理器132读取和写入的抢占标志存储器134映射到内核旁路应用或库106可存取的存储器120的存储器页面中。抢占标志存储器区域134可以在内核空间中并且可由队列存取管理器132存取,队列存取管理器132可以在内核空间中运行。抢占标志存储器区域134中的每个线程抢占标志可以被映射到可被线程104存取的存储器120的只读页面,使得在每个线程104上执行的内核旁路应用或库106具有读取但不修改每个线程抢占标志124的值的权限。抢占标志存储器区域134可以被映射到存储器120的只读页面,类似于例如虚拟动态共享对象(vDSO)段。
在一些实施例中,尚未被置位的标志可以具有值“假”(或其他指定值,诸如0),并且已经被置位的标志可以具有值“真”(或其他指定值,诸如1)。“清除”操作可以将值“假”分配给标志,并且未被置位的线程在本文中也称为“被清除”。第一线程存储器122A还包括第一线程的处置队列集合126A,其可以包括一个或多个队列标识符128AA-128AN。每个队列标识符128AA-128AN标识正由第一线程104A处置的队列。
类似地,第二线程存储器122B包括第二线程抢占标志124B,其指示第二线程104B在当前时间是否处于被抢占状态。第二线程存储器122B还包括第二线程的处置队列集合126B,其可以包括一个或多个队列标识符128BA-128BN。每个队列标识符128BA-128BN标识正由第二线程104B处置的队列。此外,第二线程存储器122B包括第二线程抢占标志124B,其指示第二线程104B在当前时间是否处于被抢占状态。第二线程存储器122B还包括第二线程的处置队列集合126B,其可以包括一个或多个队列标识符128BA-128BN。每个队列标识符128BA-128BN标识正由第二线程104B处置的队列。尽管示出了三个线程存储器区域122,但是存储器120可以包括任何合适数量的线程存储器区域122。例如,存储器120可以包括用于每个线程104的线程存储器区域122。
图2描绘了示出根据本公开的一个或多个方面的在抢占第一线程之前,队列处置从第一线程到第二线程的示例转移的交互图。图2中所示的操作可通过例如由可在CPU0130上执行的管理器线程202、可在第一CPU(例如CPU1 102A或其它CPU)上执行的第一线程104A和可在第二CPU(例如CPU2 102B或其它CPU)上执行的第二线程104B所执行的内核旁路应用或库106或其它组件的程序代码指令来执行。
在操作210处,管理器线程202可以识别将在接下来的T个时间单位内被抢占的第一线程。值T可以是预定的,并且可以凭经验预定,例如,基于预定值或类似值产生期望结果的实验或测试。作为另一示例,T的值可以由系统管理员或内核旁路应用或库106指定。值T可以是例如10微秒、25微秒或其他值。值T还可以取决于每个CPU 102的处理速度。操作212可以置位所识别的第一线程的抢占标志。例如,如果操作210确定CPU2 102B上的第一线程104A将在少于T个时间单位内被抢占,则操作212可将第一线程抢占标志124A置位为“真”。
在操作214处,CPU1上的第一线程104A可准备好存取正由第一线程104A处置的第一队列142A。在操作216处,CPU1上的第一线程104A可确定第一线程104A的抢占标志124A是否被置位(例如,具有值“真”)。例如,内核旁路应用或库106可以在将分组从队列中出队之前执行操作216。如果操作216确定第一线程的抢占标志被置位,则在操作218处,第一线程104A可以识别相关联的抢占标志未被置位的第二线程。例如,如果第二线程104B的第二线程抢占标志124B未被置位,则在操作218处,第一线程104A可以识别第二线程104B。
在操作220处,第一线程104A可以将正由第一线程104A处置的队列集合126A传递到第二线程104B。例如,队列集合126A可以是标识队列140中的一个或多个队列的队列标识符集合。在操作228处,第二线程104B可以接收正由第一线程104A处置的队列集合126A。在操作230处,第二线程104B可以将接收到的集合中的每个队列添加到正由第二线程104B处置的队列集合126B。可以通过例如将队列集合126A中的队列标识符复制或附加到队列集合126B,来将队列集合126A传递并添加到队列集合126B。由于第一线程的队列集合126A和第二线程的队列集合126B都在共享存储器120中,因此可以通过更新存储器中的数据结构(诸如表示队列集合126A、126B的集合数据结构)来高效地传递第一线程的处置队列集合126A。在操作处,第二线程104B可执行在步骤214处准备好的存取操作。尽管内核旁路应用或库106最初准备对第一队列执行存取操作,但是对第一线程的抢占标志124A的检查确定了CPU1 102A上的第一线程104A要被抢占,并且第一队列142A的处置被转移到CPU2 102B上的第二线程104B。因此,在操作232处,第二线程104B执行最初要由第一线程104A对第一队列142A执行的存取操作。
在执行操作220之后,第一线程104A可以执行操作222和224。在操作222处,第一线程104A可以清除正由第一线程处置的队列集合。在操作224处,第一线程104A可将其执行所在的CPU(例如,在此实例中为CPU1)让步给其它线程。例如,第一线程104A可以通过执行让步(yield)系统调用来让步该CPU。
如果操作216确定第一线程的抢占标志未被置位,那么CPU1上的第一线程可在操作226处执行队列存取操作。最终,操作系统150确定第一线程要被调度为在CPU上执行。在操作234处,CPU0上的管理器线程检测到操作系统确定第一线程要被调度。在操作236处,CPU0上的管理器线程清除第一线程104A的抢占标志。作为清除第一线程104A的抢占标志的结果,诸如第二线程104B的其他线程可以将队列的处置转移到第一线程104A。
图3描绘了示出根据本公开的一个或多个方面的在抢占第一线程之前,队列处置从第一线程到第二线程的转移中所涉及的示例抢占标志和处置的队列列表的交互图。图3中所示的操作类似于图2中所示的对应操作。图3示出了第一线程抢占标志124A、第一线程的处置队列集合126A和第二线程的处置队列集合126B可以如何响应于处置队列集合从第一线程104A转移到第二线程104B而随时间改变。在初始时间,第一线程抢占标志124A为假,第一线程的处置队列集合126A包含第一队列142A的标识符(“Q1”),第二线程抢占标志124B为假,并且第二线程的处置队列集合126B包含第二队列142B的标识符(“Q2”)。
在操作312处,管理器线程202可例如通过查询操作系统150的调度器来确定第一线程要被抢占。在操作312处,管理器线程202可以将第一线程抢占标志124A置位为真,如第一线程抢占标志列124A中的值“真”所示。在操作314处,第一线程104A可以准备好存取正由第一线程104A处置的第一队列142A。在操作316处,第一线程104A可以确定第一队列142A的抢占标志是否被置位。操作316确定第一队列142A的抢占标志被置位,并且在操作320处,第一线程104A可以将正由第一线程处置的队列集合添加到正由抢占标志值为“假”的第二线程处置的队列集合中。Q1的处置从第一线程104A到第二线程104B的转移由以下示出:从第一线程的处置队列集合126A列中的“{Q1}”集合到第二线程的处置队列集合126B列中的{Q1,Q2}集合的水平箭头。队列标识符Q1已经被添加到第二线程的处置队列集合126B中,而该第二线程的处置队列集合126B最初是{Q2}。作为将Q1标识符添加到集合126B的结果,集合126B被改变为{Q1,Q2}。
在操作322处,第一线程104A可以清除第一队列集合126A。清除第一队列集合126A的结果是空的第一队列集合126A,如第一线程抢占标志124A列中的空集“{}”所示。由于第一队列集合126A不包含任何队列标识符,所以第一线程104A不将分组出队或以其他方式处理分组。在操作323处,操作系统150抢占第一线程104A。
操作系统150可以随后恢复第一线程104A的执行。在操作334处,管理器线程202可确定第一线程已被调度以进行进一步执行。在操作336处,管理器线程202可将第一线程抢占标志124A置位为假,因为第一线程104A被预期为在足以执行队列处置的时间量内恢复执行。在第一线程抢占标志124A列中示出了更新的抢占标志124A值“假”。第一线程104A随后可以在例如在操作216处确定抢占标志124A为假时恢复对分组的出队和处理。
图4描绘了根据本公开的一个或多个方面的用于管理线程抢占标志的示例方法400的流程图。方法400及其各个功能、例程、子例程或操作中的每一个可以由执行该方法的计算机设备的一个或多个处理器来执行。在某些实施方式中,方法400可以由单个处理线程执行。替代地,方法400可以由两个或更多个处理线程执行,每个线程执行该方法的一个或多个单独的功能、例程、子例程或操作。在说明性示例中,实现方法400的处理线程可以被同步(例如,使用信号量、关键段和/或其他线程同步机制)。可替代地,实现方法400的过程可以相对于彼此异步地执行。
为了简化说明,本公开的方法被描绘和描述为一系列动作。然而,根据本公开的动作可以以各种顺序和/或同时发生,并且与本文未呈现和描述的其他动作一起发生。此外,可能不需要所有示出的动作来实现根据所公开的主题的方法。另外,本领域技术人员将理解和认识到,方法可以替代地经由状态图或事件表示为一系列相互关联的状态。另外,应当理解,本说明书中公开的方法能够存储在制品上,以便于将这些方法传输和传送到计算设备。如本文所使用的术语“制品”旨在涵盖可从任何计算机可读设备或存储介质存取的计算机程序。在一个实施方式中,方法400可以由如图1所示的队列存取管理器132或由主机(例如,主机操作系统或固件)、虚拟机(例如,客户操作系统或虚拟固件)、外部设备(例如,PCI设备)的可执行代码、其他可执行代码或其组合来执行。
方法400可以由服务器设备或客户端设备的处理设备执行,并且可以在框410处开始。在框410处,主机计算机系统100可以通过管理器线程识别要抢占的第一输入/输出(I/O)队列处置线程。如果例如根据由操作系统调度器提供的调度信息,对第一I/O队列处置线程的抢占要在阈值时间段内发生,则可以识别该第一I/O队列处置线程。为了识别要抢占的第一I/O队列处置线程,主机计算机系统可以确定对第一I/O队列处置线程的抢占即将发生。如果例如根据从操作系统调度器接收的调度信息,对第一I/O队列处置线程的抢占要在阈值时间段内发生,则对第一队列I/O队列处置线程的抢占可以是即将发生的。
管理器线程可在指定处理器(例如图1的CPU0 130)上执行。指定处理器可以是与I/O队列处置线程在其上执行的处理器不同的处理器。因此,例如,管理器线程的执行可以比I/O队列处置线程的执行不那么频繁地被抢占,使得管理器线程可以高效地接收和处理由操作系统调度器提供的调度信息。在一个示例中,管理器线程可以以比其他线程更高的优先级执行,从而进一步降低对管理器线程的抢占的频率。
在框420处,主机计算机系统可以将与第一线程相关联的抢占标志置位为指示抢占即将发生的值,其中抢占标志被存储在可由第一队列处置线程存取的共享存储器中。该值可以是“真”或其他预定值。抢占标志可以被存储在由管理器线程和第一队列处置线程共享的存储器中。响应于完成上文参考框420描述的操作,该方法可以终止。
图5描绘了根据本公开的一个或多个方面的用于在抢占第一线程之前将队列处置从第一线程转移到第二线程的示例方法500的流程图。方法500及其各个功能、例程、子例程或操作中的每一个可以由执行该方法的计算机设备的一个或多个处理器来执行。在某些实施方式中,方法500可以由单个处理线程执行。替代地,方法500可以由两个或更多个处理线程执行,每个线程执行该方法的一个或多个单独的功能、例程、子例程或操作。在说明性示例中,实现方法500的处理线程可以被同步(例如,使用信号量、关键段和/或其他线程同步机制)。可替代地,实现方法500的过程可以相对于彼此异步地执行。
为了简化说明,本公开的方法被描绘和描述为一系列动作。然而,根据本公开的动作可以以各种顺序和/或同时发生,并且与本文未呈现和描述的其他动作一起发生。此外,可能不需要所有示出的动作来实现根据所公开的主题的方法。另外,本领域技术人员将理解和认识到,方法可以替代地经由状态图或事件表示为一系列相互关联的状态。另外,应当理解,本说明书中公开的方法能够存储在制品上,以便于将这些方法传输和传送到计算设备。如本文所使用的术语“制品”旨在涵盖可从任何计算机可读设备或存储介质存取的计算机程序。在一个实施方式中,方法500可以由如图1所示的队列存取管理器132或由主机(例如,主机操作系统或固件)、虚拟机(例如,客户操作系统或虚拟固件)、外部设备(例如,PCI设备)的可执行代码、其他可执行代码或其组合来执行。
方法500可以由服务器设备或客户端设备的处理设备执行,并且可以在框510处开始。在框510处,主机计算机系统100可确定与第一输入/输出(I/O)队列处置线程相关联的抢占标志是否等于指示对第一I/O队列处置线程的抢占即将发生的第一值,其中第一I/O队列处置线程正在第一处理器上执行,其中第一I/O队列处置线程与一个或多个队列标识符的第一集合相关联,并且其中每个队列标识符标识正由第一I/O队列处置线程处置的队列。主机计算机系统100可以在将分组从由一个或多个队列标识符的第一集合中的队列标识符所标识的队列中出队之前执行框510。
主计算机系统100可以经由计算机系统100的、第一I/O队列处置线程和第二I/O队列处置线程可存取的共享存储器,将一个或多个队列标识符的第一集合转移到第二I/O队列处置线程。为了将一个或多个队列标识符的该集合转移到第二I/O队列处置线程,主机计算机系统100可以将该一个或多个队列标识符添加(例如,通过附加、前置或插入)到与第二I/O队列处置线程相关联的队列标识符的第二集合。
将一个或多个队列标识符的该集合转移到第二I/O队列处置线程可以包括:从正由第一I/O队列处置线程处置的队列标识符的该第一集合中移除该一个或多个队列标识符。可替代地,将一个或多个队列标识符的该集合转移到第二I/O队列处置线程可以包括:将引用队列标识符的该第一集合的指针或对象引用设置为引用队列标识符的空集或者与队列标识符的空集对应的其他值(例如,空白(null)值)。
在另一示例中,存储在共享存储器中的数据结构可以将队列标识符的一个或多个集合与每个I/O队列处置线程相关联。为了转移队列处置线程的集合,可通过移除第一I/O队列处置线程与一个或多个队列标识符的该第一集合之间的关联并创建第二I/O队列处置线程与一个或多个队列标识符的该第一集合之间的关联,来更新数据结构。对于每个I/O队列处置线程,该I/O队列处置线程可以对与该I/O队列处置线程相关联的队列标识符的每个集合中的的每个I/O队列中的分组进行出队和进一步处理。
在另一示例中,存储在共享存储器中的队列映射数据结构可以包括一个或多个队列-线程关联条目,每个队列-线程关联条目将队列标识符与I/O队列处置线程相关联。将一个或多个队列标识符的第一集合转移到第二I/O队列处置线程可以通过以下方式来执行:改变将I/O队列与第一I/O队列处置线程相关联的每个队列-线程关联条目,以将该I/O队列与第二I/O队列处置线程相关联。可以通过更新该条目在共享存储器中的线程部分来执行该改变。对于每个I/O队列处置线程,该I/O队列处置线程可以对在指定I/O队列处置线程的每个条目中所指定的每个I/O队列中的分组进行出队和进一步处理。
在框520处,主机计算机系统可以响应于确定抢占标志等于第一值,将一个或多个队列标识符的第一集合转移到正在第二处理器上执行的第二I/O队列处置线程。将一个或多个队列标识符的第一集合转移到正在第二处理器上执行的第二I/O队列处置线程可以包括:从正由第一I/O队列处置线程处置的队列标识符的第一集合中移除该一个或多个队列标识符。响应于完成上文参考框520描述的操作,该方法可以终止。
图6描绘了根据本公开的一个或多个方面操作的计算机系统600的框图。计算机系统600可以与图1的计算设备100相同或相似,并且可以包括一个或多个处理器和一个或多个存储器设备。在所示的示例中,计算机系统600可以包括队列处置线程识别模块610和抢占标志置位模块615。
队列处置线程识别模块610可以使处理器能够通过管理器线程识别要抢占的第一输入/输出(I/O)队列处置线程。作为示例,队列处置线程标识模块610可以使处理器能够确定对第一I/O队列处置线程的抢占要在阈值时间段内发生。作为另一示例,队列处置线程标识模块610可以使得处理器能够确定使得第一I/O队列处置线程停止运行的操作要在阈值时间段内发生。抢占标志置位模块615可以使处理器能够将与第一I/O队列处置线程相关联的抢占标志置位为指示即将发生的抢占的第一值,其中该抢占标志存储在可由第一I/O队列处置线程存取的共享存储器中。
图7描绘了根据本公开的一个或多个方面操作的计算机系统700的框图。计算机系统700可以与图1的计算设备100相同或相似,并且可以包括一个或多个处理器和一个或多个存储器设备。在所示的示例中,计算机系统700可以包括抢占标志确定模块710和队列标识符转移模块715。
抢占标志确定模块710可以使处理器能够确定与第一输入/输出(I/O)队列处置线程相关联的抢占标志是否等于指示对第一I/O队列处置线程的抢占即将发生的第一值,其中第一I/O队列处置线程正在第一处理器上执行,其中第一I/O队列处置线程与一个或多个队列标识符的第一集合相关联,并且其中每个队列标识符标识正由第一I/O队列处置线程处置的队列。
队列标识符转移模块715可以使处理器能够响应于确定抢占标志等于第一值而将一个或多个队列标识符的第一集合转移到正在第二处理器上执行的第二I/O队列处置线程。作为示例,队列标识符转移模块715可以使处理器能够将该一个或多个队列标识符添加到与第二I/O队列处置线程相关联的队列标识符的第二集合。
图8描绘了根据本公开的一个或多个方面操作的计算机系统的框图。在各种说明性示例中,计算机系统800可以对应于图1的计算机系统100。计算机系统800可以包括在支持虚拟化的数据中心内。数据中心内的虚拟化导致使用虚拟机来虚拟化物理系统,以整合数据中心基础设施并提高操作效率。虚拟机(VM)可以是计算机硬件的基于程序的模拟。例如,VM可以基于计算机架构和与硬盘或其他这样的存储器相关联的计算机硬件资源的功能来操作。VM可以模拟物理环境,但是对硬盘或存储器的请求可以由计算设备的虚拟化层管理,以将这些请求转换为底层物理计算硬件资源。这种类型的虚拟化导致多个VMs共享物理资源。
在某些实施方式中,计算机系统800可以连接(例如,经由网络,诸如局域网(LAN)、内联网、外联网或因特网)到其他计算机系统。计算机系统800可以在客户端-服务器环境中以服务器或客户端计算机的能力操作,或者在对等或分布式网络环境中作为对等计算机操作。计算机系统800可以由个人计算机(PC)、平板PC、机顶盒(STB)、个人数字助理(PDA)、蜂窝电话、网络设备、服务器、网络路由器、交换机或桥接器、或能够执行指定要由该设备采取的动作的一组指令(顺序的或以其他方式)的任何设备提供。此外,术语“计算机”应包括单独或联合执行一组(或多组)指令以执行本文所述的任何一种或多种方法的计算机的任何集合。
在另一方面,计算机系统800可以包括可以经由总线808彼此通信的处理设备802、易失性存储器804(例如,随机存取存储器(RAM))、非易失性存储器806(例如,只读存储器(ROM)或电可擦除可编程ROM(EEPROM))和数据存储设备816。
处理设备802可以由一个或多个处理器提供,诸如通用处理器(诸如例如,复杂指令集计算(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、实现其他类型的指令集的微处理器或实现指令集类型的组合的微处理器)或专用处理器(诸如例如,专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或网络处理器)。
计算机系统800还可以包括网络接口设备822。计算机系统800还可以包括视频显示单元810(例如,LCD)、字母数字输入设备812(例如,键盘)、光标控制设备814(例如,鼠标)和信号生成设备820。
数据存储设备816可以包括非暂时性计算机可读存储介质824,其上可以存储对本文描述的任何一种或多种方法或功能进行编码的指令826,包括用于实现方法400或500的指令。
指令826还可以在由计算机系统800执行期间完全或部分地驻留在易失性存储器804内和/或处理设备802内,因此,易失性存储器804和处理设备802也可以构成机器可读存储介质。
虽然计算机可读存储介质824在说明性示例中被示出为单个介质,但是术语“计算机可读存储介质”应包括存储一组或多组可执行指令的单个介质或多个介质(例如,集中式或分布式数据库和/或相关联的高速缓存和服务器)。术语“计算机可读存储介质”还应包括能够存储或编码一组指令以供计算机执行的任何有形介质,所述指令使计算机执行本文所述的任何一种或多种方法。术语“计算机可读存储介质”应包括但不限于固态存储器、光学介质和磁性介质。
其他计算机系统设计和配置也可以适合于实现本文描述的系统和方法。以下示例示出了根据本公开的一个或多个方面的各种实施方式。
示例1是一种系统,其包括:包含一组存储器单元的存储器设备;以及处理装置,其可操作地耦合到所述存储器装置以执行包括以下各项的操作:由管理器线程识别要抢占的第一输入/输出(I/O)队列处置线程;以及将与所述第一I/O队列处置线程相关联的抢占标志置位为指示即将发生的抢占的第一值,其中所述抢占标志存储在可由所述第一I/O队列处置线程存取的共享存储器中。
示例2是如示例1所述的系统,其中,由所述管理器线程识别要抢占的所述第一I/O队列处置线程包括:确定对所述第一I/O队列处置线程的抢占要在阈值时间段内发生。
示例3是如示例1所述的系统,其中,由所述管理器线程识别要抢占的所述第一I/O队列处置线程包括:确定致使所述第一I/O队列处置线程停止运行的操作要在阈值时间段内发生。
示例4是如示例1所述的系统,其中,由所述管理器线程识别要抢占的所述第一I/O队列处置线程是基于从操作系统线程调度器接收到的调度信息来执行的。
示例5是如示例1所述的系统,其中,由所述管理器线程识别要抢占的所述第一I/O队列处置线程是周期性地执行的。
示例6是如示例5所述的系统,其中,由所述管理器线程识别要抢占的所述第一I/O队列处置线程是在基于定时器节拍确定的时间执行的。
示例7是如示例1所述的系统,其中,由所述管理器线程识别要抢占的所述第一I/O队列处置线程是响应于从另一处理器接收到指示所述管理器线程确定对所述第一I/O队列处置线程的抢占是否即将发生的通知而执行的。
示例8是如示例1所述的系统,所述操作进一步包括:在抢占所述第一I/O队列处置线程之后,由所述管理器线程确定所述第一I/O队列处置线程被调度为要执行或正在执行;以及将与所述第一I/O队列处置线程相关联的抢占标志置位为指示没有即将发生的抢占的第二值。
示例9是如示例1所述的系统,所述操作进一步包括:将包括与所述第一I/O队列处置线程相关联的抢占标志的存储器区域映射到所述第一I/O队列处置线程可存取的所述共享存储器的页面。
示例10是如示例9所述的系统,其中所述存储器区域到所述共享存储器的页面的映射是从内核空间到用户空间,并且所述共享存储器的页面是在用户空间中可由第一I/O队列处置线程读取的只读页面。
示例11是一种存储指令的非暂时性机器可读存储介质,所述指令在被执行时使计算机系统执行操作,所述操作包括:确定与第一输入/输出(I/O)队列处置线程相关联的抢占标志是否等于指示对所述第一I/O队列处置线程的抢占即将发生的第一值,其中所述第一I/O队列处置线程正在第一处理器上执行,其中所述第一I/O队列处置线程与一个或多个队列标识符的第一集合相关联,以及其中每个队列标识符标识正由第一I/O队列处置线程处置的队列;以及响应于确定所述抢占标志等于所述第一值,将一个或多个队列标识符的所述第一集合转移到正在第二处理器上执行的第二I/O队列处置线程。
示例12是如示例11所述的非暂时性机器可读存储介质,其中,确定与第一I/O队列处置线程相关联的抢占标志是否等于第一值是在将分组从一个或多个队列标识符的所述第一集合中的队列标识符所标识的队列出队之前执行的。
示例13是如示例11所述的非暂时性机器可读存储介质,其中,一个或多个队列标识符的所述第一集合经由所述第一I/O队列处置线程和所述第二I/O队列处置线程可存取的共享存储器而被转移到所述第二I/O队列处置线程。
示例14是如示例11所述的非暂时性机器可读存储介质,其中,将一个或多个队列标识符的所述第一集合转移至所述第二I/O队列处置线程包括:将所述一个或多个队列标识符添加至与所述第二I/O队列处置线程关联的队列标识符的第二集合。
示例15是如示例11所述的非暂时性机器可读存储介质,其中,将一个或多个队列标识符的所述第一集合转移至所述第二I/O队列处置线程包括:从正由所述第一I/O队列处置线程处置的队列标识符的所述第一集合中移除所述一个或多个队列标识符。
示例16是如示例11所述的非暂时性机器可读存储介质,其中,将一个或多个队列标识符的所述第一集合转移至所述第二I/O队列处置线程包括:将所述一个或多个队列标识符添加至与所述第二I/O队列处置线程关联的队列标识符的第二集合。
示例17是如示例16所述的非暂时性机器可读存储介质,其中,队列标识符的所述第二集合被存储在共享存储器中,并且其中,将一个或多个队列标识符的所述第一集合转移至所述第二I/O队列处置线程包括:将与队列标识符的所述第一集合中的每个队列标识符相关联的线程标识符置位为与所述第二I/O队列处置线程相对应的值。
示例18是如示例11所述的非暂时性机器可读存储介质,其中,存储在共享存储器中的队列映射数据结构包括一个或多个队列-线程关联条目,每个队列-线程关联条目将特定队列标识符与特定I/O队列处置线程相关联,并且其中,将一个或多个队列标识符的所述第一集合转移至所述第二I/O队列处置线程包括:识别将指定队列标识符与所述第一I/O队列处置线程相关联的每个队列-线程关联条目;以及更新每个识别的队列-线程关联,以将指定队列标识符与第二I/O队列处置线程相关联。
示例19是如示例11所述的非暂时性机器可读存储介质,所述操作进一步包括:响应于确定所述抢占标志等于指示对所述第一I/O队列处置线程的抢占并非即将发生的第二值,将一个或多个分组从由所述队列标识符中的至少一个队列标识符所标识的至少一个队列出队;以及处理一个或多个出队的分组。
示例20是如示例11所述的非暂时性机器可读存储介质,所述操作进一步包括:确定要由操作系统在所述第一处理器上运行的一系列线程已经改变;以及响应于确定所述一系列线程已经改变,向管理器线程发送通知,其中所述通知指示所述管理器线程确定对所述第一I/O队列处置线程的抢占是否即将发生。
示例21是一种方法,包括:由计算机系统确定与第一输入/输出(I/O)队列处置线程相关联的抢占标志是否等于指示对该第一I/O队列处置线程的抢占即将发生的第一值,其中该第一I/O队列处置线程正在第一处理器上执行,其中该第一I/O队列处置线程与一个或多个队列标识符的第一集合相关联,并且其中每个队列标识符标识正由该第一I/O队列处置线程处置的队列;以及响应于确定所述抢占标志等于所述第一值,将一个或多个队列标识符的所述第一集合转移到正在第二处理器上执行的第二I/O队列处置线程。
示例22是如示例21所述的方法,其中,确定与第一I/O队列处置线程相关联的抢占标志是否等于第一值是在将分组从由一个或多个队列标识符的所述第一集合中的队列标识符所标识的队列中出队之前执行的。
示例23是一种设备,包括:用于确定与第一输入/输出(I/O)队列处置线程相关联的抢占标志是否等于指示对该第一I/O队列处置线程的抢占即将发生的第一值的装置,其中该第一I/O队列处置线程正在第一处理器上执行,其中该第一I/O队列处置线程与一个或多个队列标识符的第一集合相关联,并且其中每个队列标识符标识正由该第一I/O队列处置线程处置的队列;以及用于响应于确定所述抢占标志等于所述第一值,将一个或多个队列标识符的所述第一集合转移到在第二处理器上执行的第二I/O队列处置线程的装置。
示例24是如示例23所述的装置,其中,确定与第一I/O队列处置线程相关联的抢占标志是否等于第一值是在将分组从由一个或多个队列标识符的所述第一集合中的队列标识符所标识的队列中出队之前执行的。
示例25是如示例23所述的装置,其中,一个或多个队列标识符的所述第一集合经由所述第一I/O队列处置线程和所述第二I/O队列处置线程可存取的共享存储器而被转移到所述第二I/O队列处置线程。
示例26是如示例23所述的设备,其中,用于将一个或多个队列标识符的所述第一集合转移至所述第二I/O队列处置线程的装置包括:用于将所述一个或多个队列标识符添加至与所述第二I/O队列处置线程相关联的队列标识符的第二集合的装置。
示例27是如示例23所述的装置,其中,所述用于将一个或多个队列标识符的所述第一集合转移至所述第二I/O队列处置线程的装置包括:用于从正由所述第一I/O队列处置线程处置的队列标识符的所述第一集合中移除所述一个或多个队列标识符的装置。
示例28是如示例23所述的装置,其中,所述用于将一个或多个队列标识符的所述第一集合转移至所述第二I/O队列处置线程的装置包括:用于将所述一个或多个队列标识符添加至与所述第二I/O队列处置线程相关联的队列标识符的第二集合的装置。
示例29是如示例23所述的设备,其中,队列标识符的所述第二集合被存储在共享存储器中,并且其中,所述用于将一个或多个队列标识符的所述第一集合转移至所述第二I/O队列处置线程的装置包括:用于将与队列标识符的所述第一集合中的每个队列标识符相关联的线程标识符置位为与所述第二I/O队列处置线程相对应的值的装置。
示例30是如示例23所述的设备,其中存储在共享存储器中的队列映射数据结构包括一个或多个队列-线程关联条目,每个队列-线程关联条目将特定队列标识符与特定I/O队列处置线程相关联,并且其中用于将一个或多个队列标识符的第一集合转移到第二I/O队列处置线程的装置包括:用于识别将指定队列标识符与第一I/O队列处置线程相关联的每个队列-线程关联条目的装置;以及用于更新每个识别的队列-线程关联以将指定队列标识符与第二I/O队列处置线程相关联的装置。
示例31是如示例23所述的装置,所述操作进一步包括:用于响应于确定所述抢占标志等于指示对所述第一I/O队列处置线程的抢占并非即将发生的第二值,将一个或多个分组从由所述队列标识符中的至少一个队列标识符所标识的至少一个队列中出队的装置;以及用于处理一个或多个出队的分组的装置。
示例32是如示例23所述的设备,进一步包括:用于确定要由操作系统在所述第一处理器上运行的一系列线程已经改变的装置;以及用于响应于确定所述一系列线程已经改变而向管理器线程发送通知的装置,其中所述通知指示所述管理器线程确定对所述第一I/O队列处置线程的抢占是否即将发生。
本文描述的方法、组件和特征可以由分立的硬件组件实现,或者可以集成在诸如ASIC、FPGA、DSP或类似设备的其他硬件组件的功能中。另外,方法、组件和特征可以由硬件设备内的固件模块或功能电路来实现。此外,方法、组件和特征可以在硬件设备和计算机程序组件的任何组合中或在计算机程序中实现。
除非另有特别说明,否则诸如“确定”、“导出”、“加密”、“创建”、“生成”、“使用”、“存取”、“执行”、“获得”、“存储”、“传输”、“提供”、“建立”、“接收”、“识别”、“发起”等术语是指由计算机系统执行或实现的动作和过程,该计算机系统操纵表示为计算机系统寄存器和存储器内的物理(电子)量的数据并将其转换为类似地表示为计算机系统存储器或寄存器或其他这样的信息存储、传输或显示设备内的物理量的其他数据。此外,如本文所使用的术语“第一”、“第二”、“第三”、“第四”等意指作为在不同元件之间进行区分的标签,并且可以不具有根据它们的数字标记的序数含义。
本文描述的示例还涉及用于执行本文描述的方法的装置。该装置可以被专门构造用于执行本文描述的方法,或者它可以包括由存储在计算机系统中的计算机程序选择性地编程的通用计算机系统。这样的计算机程序可以存储在计算机可读有形存储介质中。
本文描述的方法和说明性示例并非固有地与任何特定计算机或其他装置相关。可以根据本文描述的教导使用各种通用系统,或者可以证明构造更专用的装置来执行方法400或500和/或其各个功能、例程、子例程或操作中的每一个是方便的。在上面的描述中阐述了各种这些系统的结构的示例。
以上描述旨在是说明性的而非限制性的。尽管已参考特定说明性实例及实施方案描述本发明,但将认识到,本发明不限于所描述的实例及实施方案。本公开的范围应当参考所附权利要求以及权利要求所赋予的等同物的全部范围来确定。
Claims (20)
1.一种系统,包括:
存储器设备,所述存储器设备包括一组存储器单元;以及
处理设备,所述处理设备可操作地耦合到所述存储器设备,以执行操作,所述操作包括:
确定与第一输入/输出(I/O)队列处置线程相关联的抢占标志是否等于指示对所述第一I/O队列处置线程的抢占即将发生的第一值,其中所述第一I/O队列处置线程正在第一处理器上执行,其中所述第一I/O队列处置线程与一个或多个队列标识符的第一集合相关联,并且其中每个队列标识符标识正由所述第一I/O队列处置线程处置的队列;以及
响应于确定所述抢占标志等于所述第一值,将一个或多个队列标识符的所述第一集合转移到正在第二处理器上执行的第二I/O队列处置线程。
2.根据权利要求1所述的系统,其中确定与第一I/O队列处置线程相关联的抢占标志是否等于第一值是在将分组从一个或多个队列标识符的所述第一集合中的队列标识符所标识的队列中出队之前执行的。
3.根据权利要求1所述的系统,其中一个或多个队列标识符的所述第一集合经由所述第一I/O队列处置线程和所述第二I/O队列处置线程可存取的共享存储器而被转移到所述第二I/O队列处置线程。
4.根据权利要求1所述的系统,其中将一个或多个队列标识符的所述第一集合转移到所述第二I/O队列处置线程包括:将所述一个或多个队列标识符添加到与所述第二I/O队列处置线程相关联的队列标识符的第二集合。
5.根据权利要求1所述的系统,其中将一个或多个队列标识符的所述第一集合转移到所述第二I/O队列处置线程包括:从正由所述第一I/O队列处置线程处置的队列标识符的所述第一集合移除所述一个或多个队列标识符。
6.根据权利要求1所述的系统,其中存储在共享存储器中的队列映射数据结构包括一个或多个队列-线程关联条目,每个队列-线程关联条目将特定队列标识符与特定I/O队列处置线程相关联,并且其中将一个或多个队列标识符的所述第一集合转移到所述第二I/O队列处置线程包括:
识别将指定队列标识符与所述第一I/O队列处置线程相关联的每个队列-线程关联条目;以及
更新每个所识别的队列-线程关联,以将所述指定队列标识符与所述第二I/O队列处置线程相关联。
7.根据权利要求1所述的系统,所述操作还包括:
响应于确定所述抢占标志等于指示对所述第一I/O队列处置线程的抢占并非即将发生的第二值,将一个或多个分组从所述队列标识符中的至少一个队列标识符所标识的至少一个队列中出队;以及
处理一个或多个出队的分组。
8.根据权利要求1所述的系统,所述操作还包括:
确定要由操作系统在所述第一处理器上运行的一系列线程已改变;以及
响应于确定所述一系列线程已改变,向管理器线程发送通知,其中所述通知指示所述管理器线程确定对所述第一I/O队列处置线程的抢占是否即将发生。
9.一种存储指令的非暂时性机器可读存储介质,所述指令在被执行时使计算机系统执行操作,所述操作包括:
确定与第一输入/输出(I/O)队列处置线程相关联的抢占标志是否等于指示对所述第一I/O队列处置线程的抢占即将发生的第一值,其中所述第一I/O队列处置线程正在第一处理器上执行,其中所述第一I/O队列处置线程与一个或多个队列标识符的第一集合相关联,并且其中每个队列标识符标识正由所述第一I/O队列处置线程处置的队列;以及
响应于确定所述抢占标志等于所述第一值,将一个或多个队列标识符的所述第一集合转移到正在第二处理器上执行的第二I/O队列处置线程。
10.根据权利要求9所述的非暂时性机器可读存储介质,其中确定与第一I/O队列处置线程相关联的抢占标志是否等于第一值是在将分组从一个或多个队列标识符的所述第一集合中的队列标识符所标识的队列中出队之前执行的。
11.根据权利要求9所述的非暂时性机器可读存储介质,其中一个或多个队列标识符的所述第一集合经由所述第一I/O队列处置线程和所述第二I/O队列处置线程可存取的共享存储器而被转移到所述第二I/O队列处置线程。
12.根据权利要求9所述的非暂时性机器可读存储介质,其中将一个或多个队列标识符的所述第一集合转移到所述第二I/O队列处置线程包括:将所述一个或多个队列标识符添加到与所述第二I/O队列处置线程相关联的队列标识符的第二集合。
13.根据权利要求9所述的非暂时性机器可读存储介质,其中将一个或多个队列标识符的所述第一集合转移到所述第二I/O队列处置线程包括:从正由所述第一I/O队列处置线程处置的队列标识符的所述第一集合移除所述一个或多个队列标识符。
14.根据权利要求9所述的非暂时性机器可读存储介质,其中存储在共享存储器中的队列映射数据结构包括一个或多个队列-线程关联条目,每个队列-线程关联条目将特定队列标识符与特定I/O队列处置线程相关联,并且其中将一个或多个队列标识符的所述第一集合转移到所述第二I/O队列处置线程包括:
识别将指定队列标识符与所述第一I/O队列处置线程相关联的每个队列-线程关联条目;以及
更新每个所识别的队列-线程关联,以将所述指定队列标识符与所述第二I/O队列处置线程相关联。
15.根据权利要求9所述的非暂时性机器可读存储介质,所述操作还包括:
响应于确定所述抢占标志等于指示对所述第一I/O队列处置线程的抢占并非即将发生的第二值,将一个或多个分组从所述队列标识符中的至少一个队列标识符所标识的至少一个队列中出队;以及
处理一个或多个出队的分组。
16.根据权利要求9所述的非暂时性机器可读存储介质,所述操作还包括:
确定要由操作系统在所述第一处理器上运行的一系列线程已改变;以及
响应于确定所述一系列线程已改变,向管理器线程发送通知,其中所述通知指示所述管理器线程确定对所述第一I/O队列处置线程的抢占是否即将发生。
17.一种方法,包括:
确定与第一输入/输出(I/O)队列处置线程相关联的抢占标志是否等于指示对所述第一I/O队列处置线程的抢占即将发生的第一值,其中所述第一I/O队列处置线程正在第一处理器上执行,其中所述第一I/O队列处置线程与一个或多个队列标识符的第一集合相关联,并且其中每个队列标识符标识正由所述第一I/O队列处置线程处置的队列;以及
响应于确定所述抢占标志等于所述第一值,将一个或多个队列标识符的所述第一集合转移到正在第二处理器上执行的第二I/O队列处置线程。
18.根据权利要求17所述的方法,其中确定与第一I/O队列处置线程相关联的抢占标志是否等于第一值是在将分组从一个或多个队列标识符的所述第一集合中的队列标识符所标识的队列中出队之前执行的。
19.根据权利要求17所述的方法,其中一个或多个队列标识符的所述第一集合经由所述第一I/O队列处置线程和所述第二I/O队列处置线程可存取的共享存储器而被转移到所述第二I/O队列处置线程。
20.根据权利要求17所述的方法,其中将一个或多个队列标识符的所述第一集合转移到所述第二I/O队列处置线程包括:将所述一个或多个队列标识符添加到与所述第二I/O队列处置线程相关联的队列标识符的第二集合。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/701,568 US11971830B2 (en) | 2022-03-22 | 2022-03-22 | Efficient queue access for user-space packet processing |
US17/701,568 | 2022-03-22 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116821041A true CN116821041A (zh) | 2023-09-29 |
Family
ID=81327226
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210404165.XA Pending CN116821041A (zh) | 2022-03-22 | 2022-04-18 | 针对用户空间分组处理的高效队列存取 |
Country Status (3)
Country | Link |
---|---|
US (2) | US11971830B2 (zh) |
EP (1) | EP4250106A1 (zh) |
CN (1) | CN116821041A (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11971830B2 (en) * | 2022-03-22 | 2024-04-30 | Red Hat, Inc. | Efficient queue access for user-space packet processing |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6766515B1 (en) * | 1997-02-18 | 2004-07-20 | Silicon Graphics, Inc. | Distributed scheduling of parallel jobs with no kernel-to-kernel communication |
US6418460B1 (en) * | 1997-02-18 | 2002-07-09 | Silicon Graphics, Inc. | System and method for finding preempted threads in a multi-threaded application |
US20050246461A1 (en) * | 2004-04-29 | 2005-11-03 | International Business Machines Corporation | Scheduling threads in a multi-processor computer |
US7487503B2 (en) * | 2004-08-12 | 2009-02-03 | International Business Machines Corporation | Scheduling threads in a multiprocessor computer |
EP2271992B1 (en) * | 2008-04-28 | 2013-04-03 | Hewlett-Packard Development Company, L. P. | Method and system for generating and delivering inter-processor interrupts in a multi-core processor and in certain shared-memory multi-processor systems |
US9342379B2 (en) * | 2011-01-21 | 2016-05-17 | Wind River Systems, Inc. | Lock free acquisition and release of a semaphore in a multi-core processor environment |
US9405550B2 (en) * | 2011-03-31 | 2016-08-02 | International Business Machines Corporation | Methods for the transmission of accelerator commands and corresponding command structure to remote hardware accelerator engines over an interconnect link |
US9037770B2 (en) * | 2011-05-05 | 2015-05-19 | International Business Machines Corporation | Accelerator engine emulation over an interconnect link |
US9411739B2 (en) * | 2012-11-30 | 2016-08-09 | Intel Corporation | System, method and apparatus for improving transactional memory (TM) throughput using TM region indicators |
US9223728B2 (en) * | 2013-03-12 | 2015-12-29 | International Business Machines Corporation | Servicing a globally broadcast interrupt signal in a multi-threaded computer |
US20150055456A1 (en) | 2013-08-26 | 2015-02-26 | Vmware, Inc. | Traffic and load aware dynamic queue management |
US9311260B2 (en) * | 2013-12-09 | 2016-04-12 | Jack Mason | Context preservation during thread level speculative execution |
US10248593B2 (en) * | 2017-06-04 | 2019-04-02 | International Business Machines Corporation | Techniques for handling interrupts in a processing unit using interrupt request queues |
WO2021178731A1 (en) * | 2020-03-04 | 2021-09-10 | Karl Denninghoff | Neurological movement detection to rapidly draw user attention to search results |
US20210326177A1 (en) * | 2021-06-26 | 2021-10-21 | Intel Corporation | Queue scaling based, at least, in part, on processing load |
US11971830B2 (en) * | 2022-03-22 | 2024-04-30 | Red Hat, Inc. | Efficient queue access for user-space packet processing |
-
2022
- 2022-03-22 US US17/701,568 patent/US11971830B2/en active Active
- 2022-04-14 EP EP22168378.2A patent/EP4250106A1/en active Pending
- 2022-04-18 CN CN202210404165.XA patent/CN116821041A/zh active Pending
-
2024
- 2024-04-02 US US18/624,661 patent/US20240264956A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
EP4250106A1 (en) | 2023-09-27 |
US20240264956A1 (en) | 2024-08-08 |
US20230315652A1 (en) | 2023-10-05 |
US11971830B2 (en) | 2024-04-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Ibanez et al. | The nanopu: A nanosecond network stack for datacenters | |
Zhang et al. | {G-NET}: Effective {GPU} Sharing in {NFV} Systems | |
US8245207B1 (en) | Technique for dynamically restricting thread concurrency without rewriting thread code | |
US8028292B2 (en) | Processor task migration over a network in a multi-processor system | |
US20160378545A1 (en) | Methods and architecture for enhanced computer performance | |
US7493436B2 (en) | Interrupt handling using simultaneous multi-threading | |
US9772879B2 (en) | System and method for isolating I/O execution via compiler and OS support | |
US20170185452A1 (en) | Apparatus and method for data processing | |
US20240264956A1 (en) | Efficient queue access for user-space packet processing | |
KR20060132852A (ko) | 멀티 프로세서 시스템에서 프로세서 태스크 이동 방법 및장치 | |
CN111488210B (zh) | 基于云计算的任务调度方法、装置和计算机设备 | |
WO2014110702A1 (zh) | 协同并发式消息总线、主动构件组装模型及构件拆分方法 | |
WO2014142498A1 (ko) | 컴퓨팅 스케줄링 방법 및 시스템 | |
CN111897637A (zh) | 作业调度方法、装置、主机及存储介质 | |
CN111597044A (zh) | 任务调度方法、装置、存储介质及电子设备 | |
Lin et al. | {RingLeader}: efficiently Offloading {Intra-Server} Orchestration to {NICs} | |
Behnke et al. | Towards a real-time IoT: Approaches for incoming packet processing in cyber–physical systems | |
Cerrato et al. | An efficient data exchange algorithm for chained network functions | |
Ibanez et al. | The nanoPU: Redesigning the CPU-network interface to minimize RPC tail latency | |
US11474868B1 (en) | Sharded polling system | |
CN104769553A (zh) | 用于支持集群中的工作共享复用的系统和方法 | |
CN114281529A (zh) | 分布式虚拟化的客户操作系统调度优化方法、系统及终端 | |
Deri et al. | Exploiting commodity multi-core systems for network traffic analysis | |
CN111459620A (zh) | 安全容器操作系统到虚拟机监控器的信息调度方法 | |
Shao et al. | Edge-rt: Os support for controlled latency in the multi-tenant, real-time edge |
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 |