CN113515388A - 一种进程调度方法、装置、计算设备及可读存储介质 - Google Patents
一种进程调度方法、装置、计算设备及可读存储介质 Download PDFInfo
- Publication number
- CN113515388A CN113515388A CN202111071638.0A CN202111071638A CN113515388A CN 113515388 A CN113515388 A CN 113515388A CN 202111071638 A CN202111071638 A CN 202111071638A CN 113515388 A CN113515388 A CN 113515388A
- Authority
- CN
- China
- Prior art keywords
- cpu core
- pipeline
- computing device
- executed
- currently used
- 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
- 238000000034 method Methods 0.000 title claims abstract description 647
- 230000008569 process Effects 0.000 title claims abstract description 567
- 238000012545 processing Methods 0.000 claims description 10
- 238000012544 monitoring process Methods 0.000 claims description 2
- 238000004891 communication Methods 0.000 description 20
- 230000000903 blocking effect Effects 0.000 description 13
- 238000010586 diagram Methods 0.000 description 11
- 230000006870 function Effects 0.000 description 9
- 230000002618 waking effect Effects 0.000 description 8
- 238000012360 testing method Methods 0.000 description 5
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000007723 transport mechanism Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000011068 loading method Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation 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/505—Allocation 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 the load
-
- 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/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multi Processors (AREA)
Abstract
本发明公开了一种进程调度方法、装置、计算设备及可读存储介质。本发明的进程调度方法在计算设备中执行,计算设备包括多个CPU核心,且计算设备的操作系统上运行有多个进程,该方法包括:当接收到第一进程唤醒第二进程的请求时,判断第一进程是否为管道进程;若第一进程为管道进程,则判断第二进程是否唤醒过第一进程;若第二进程唤醒过第一进程,则将第二进程添加到第一进程当前所使用的CPU核心的运行队列中。本发明的进程调度方法能够使成对的管道进程始终都保持在同一CPU核心上执行,解决了成对管道进程在互相唤醒对方时不停地将对方唤醒到不同CPU上所造成的性能损失问题,提升了程序的运行性能。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种进程调度方法、装置、计算设备及可读存储介质。
背景技术
管道PIPE是一种使用非常频繁的半双工进程通信机制,一端只能读,另一端只能写。PIPE是文件的一种,但不同于文件的是其不能无限制的写入,PIPE的缓存区(buffer)大小固定。因此,当向管道中写入数据时如果缓存区已经被写满,则写函数会被阻塞,直到有数据被读出。同样,当从管道中读取数据时,如果缓存区已经为空,则读函数也会被阻塞,直到有新的数据写入。
在内核中,对于阻塞进程的处理就是将其踢出运行队列,等待被唤醒。目前的进程调度方法如图1所示:将阻塞进程分配到当前运行负载最小的那个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缓存的利用率,进而能够提升管道进程的性能。
附图说明
为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
图1示出了现有技术中的进程调度方法100的示意图;
图2示出了两个管道进程互相唤醒的示意图200;
图3示出了根据本发明一个实施例的计算设备300的结构框图;
图4示出了根据本发明一个实施例的进程调度方法400的流程图;
图5示出了根据本发明又一个实施例的进程调度方法500的流程图;
图6示出了根据本发明一个实施例的进程调度装置600的结构图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
为了清楚展示本发明实施例的方案和有益效果,在具体展开说明本发明实施例之前,首先对进程阻塞、进程唤醒和管道PIPE进行一下说明。
进程阻塞:正在运行的进程由于提出系统服务请求(如I/O操作),但因为某种原因未得到操作系统的立即响应,或者需要从其他合作进程获得的数据尚未到达等原因,该进程只能调用阻塞原语把自己阻塞以等待相应事件的出现。
进程唤醒:当被阻塞的进程所期待的事件出现时,如I/O完成或者其所期待的数据已经到达,则由有关进程(比如,用完并释放了该I/O设备的进程)调用唤醒原语来将等待该事件的进程唤醒以使其进入就绪状态。
管道PIPE:进程间的一种通信方式,一般将利用管道进行通信的进程称作为管道进程(即,PIPE进程)。
基于上述描述可知,当管道进程向管道中写入数据时,如果缓存区已被写满,则该管道进程会进入阻塞状态,等待被唤醒。同样,当管道进程从管道中读取数据时,如果缓存区已为空,则该管道进程也会进入阻塞状态,等待被唤醒。
图2示出了两个管道进程互相唤醒的示意图。进程A处于阻塞状态时,进程B向管道中写入新的数据后会发送一个唤醒进程A的请求,进程A则被添加到一个当前负载最小的CPU核心上。进程B处于阻塞状态时,进程A从管道中读取数据后会发送一个唤醒进程B的请求,进程B则被添加到一个当前负载最小的CPU核心上。显然这样,当进程A和进程B不停地互相唤醒时,如果将对方不停地唤醒到不同的CPU核心上,会造成严重的性能损失。
基于此,本发明提供了一种进程调度方法。本发明提供的进程调度方法可以在计算设备中执行。图3示出了根据本发明一个实施例的计算设备300的结构框图。需要说明的是,图3所示的计算设备300仅为一个示例,在实践中,用于实施本发明的进程调度方法的计算设备可以是任意型号的设备,其硬件配置情况可以与图3所示的计算设备300相同,也可以与图3所示的计算设备300不同。实践中用于实施本发明的进程调度方法的计算设备可以对图3所示的计算设备300的硬件组件进行增加或删减,本发明对计算设备的具体硬件配置情况不做限制。
如图3所示,在基本配置302中,计算设备300典型地包括系统存储器306和一个或者多个处理器304。存储器总线308可以用于在处理器304和系统存储器306之间的通信。
取决于期望的配置,处理器304可以是任何类型的处理,包括但不限于:微处理器(µP)、微控制器(µC)、数字信息处理器(DSP)或者它们的任何组合。处理器304可以包括诸如一级高速缓存310和二级高速缓存312之类的一个或者多个级别的高速缓存、处理器核心314和寄存器316。示例的处理器核心314可以包括运算逻辑单元(ALU)、浮点数单元(FPU)、数字信号处理核心(DSP核心)或者它们的任何组合。示例的存储器控制器318可以与处理器304一起使用,或者在一些实现中,存储器控制器318可以是处理器304的一个内部部分。
取决于期望的配置,系统存储器306可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。计算设备中的物理内存通常指的是易失性存储器RAM,磁盘中的数据需要加载至物理内存中才能够被处理器304读取。系统存储器306可以包括操作系统320、一个或者多个应用322以及程序数据324。在一些实施方式中,应用322可以布置为在操作系统上由一个或多个处理器304利用程序数据324执行指令。操作系统320例如可以是Linux、Windows等,其包括用于处理基本系统服务以及执行依赖于硬件的任务的程序指令。应用322包括用于实现各种用户期望的功能的程序指令,应用322例如可以是浏览器、即时通讯软件、软件开发工具(例如集成开发环境IDE、编译器等)等,但不限于此。当应用322被安装到计算设备300中时,可以向操作系统320添加驱动模块。
在计算设备300启动运行时,处理器304会从系统存储器306中读取操作系统320的程序指令并执行。应用322运行在操作系统320之上,利用操作系统320以及底层硬件提供的接口来实现各种用户期望的功能。当用户启动应用322时,应用322会加载至系统存储器306中,处理器304从系统存储器306中读取并执行应用322的程序指令。
计算设备300还包括储存设备332,储存设备332包括可移除储存器336和不可移除储存器338,可移除储存器336和不可移除储存器338均与储存接口总线334连接。
计算设备300还可以包括有助于从各种接口设备(例如,输出设备342、外设接口344和通信设备346)到基本配置302经由总线/接口控制器330的通信的接口总线340。示例的输出设备342包括图形处理单元348和音频处理单元350。它们可以被配置为有助于经由一个或者多个A/V端口352与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口344可以包括串行接口控制器354和并行接口控制器356,它们可以被配置为有助于经由一个或者多个I/O端口358和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备346可以包括网络控制器360,其可以被布置为便于经由一个或者多个通信端口364与一个或者多个其他计算设备362通过网络通信链路的通信。
网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(RF)、微波、红外(IR)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。
在根据本发明的计算设备300中,应用322包括用于执行本发明的进程调度方法400的指令,该指令可以指示处理器304执行本发明的进程调度方法。本领域技术人员可以理解,除了用于执行进程调度方法400的指令之外,应用322还可以包括用于实现其他功能的其他应用326。
图4示出了根据本发明一个实施例的进程调度方法400的流程图,方法400适于在计算设备(例如图3所示的计算设备300)中执行。该计算设备包括多个CPU核心,且计算设备的操作系统上运行有多个进程。
为了能够快速地识别出操作系统上运行的管道进程,可以对操作系统上运行的管道进程进行标记。其中,管道进程是指利用管道进行通信的进程。更进一步地讲,管道进程是指向管道中写入数据或从管道中读取数据的进程。
根据本发明的一个实施例,当监听到任一进程向管道中写入数据或从管道中读取数据的操作时,将该进程标记为管道进程。其中,可以通过一个标识进程类型的参数将该进程标记为管道进程。当然,也可以通过其他的方式来标记管道进程,对此本发明不作限制。在具体的实施例中,本领域的技术人员可以根据实际需要进行设定。
如图4所示,本发明的进程调度方法始于步骤S410。在步骤S410中,当接收到第一进程唤醒第二进程以便在计算设备的CPU核心上执行的请求时,判断第一进程是否为管道进程。
根据上述描述可知,管道进程会由一个标识进程类型的参数来标识。因此,可以根据标识进程类型的参数来判断第一进程是否为管道进程。具体地,在接收到标识进程类型的参数后,可以通过调用如下接口来判断第一进程是否为管道进程:
int is_pipe(struct task_struct *task)
若第一进程为管道进程,则进入步骤S420,判断第二进程是否唤醒过第一进程,以对第一进程和第二进程是否为成对的管道进程进行识别。
在此说明一点,当两个进程互相唤醒过对方时,则将这两个进程称为成对的管道进程。因此,当第一进程发送请求唤醒第二进程时,在判定第一进程为管道进程后,如果确定第二进程曾唤醒过第一进程,则判定第一进程和第二进程为成对的管道进程。否则,判定第一进程和第二进程不是成对的管道进程,即第一进程和第二进程为非成对的管道进程。
根据本发明的一个实施例,当确定第一进程为管道进程时,还可以将第二进程的标识写入第一进程的结构体中,以此来标识第一进程唤醒过第二进程。其中,进程的标识可以为进程的进程号。当然,也可以采用其他的标记来对进程进行标识,对此本发明不作限定。在具体的实施例中,本领域的技术人员可以根据实际需要进行设定。
可见,当某一进程唤醒过另一进程时,则该进程的结构体中会包含另一进程的标识。因此,可以通过判断第二进程的结构体中是否包含第一进程的标识来判断第二进程是否唤醒过第一进程,以完成对第一进程和第二进程是否为成对管道进程的识别。
其中,若第二进程的结构体中包含第一进程的标识,则确定第二进程唤醒过第一进程,从而判定第一进程和第二进程为成对的管道进程。若第二进程的结构体中不包含第一进程的标识,则确定第二进程未唤醒过第一进程,从而判定第一进程和第二进程为非成对的管道进程。
根据本发明的一个实施例,可以通过调用如下接口来判断第一进程和第二进程是否为成对的管道进程:
int correspond_to_current (struct task_struct *p)
至此,通过判断第二进程是否唤醒过第一进程,便完成了对第一进程和第二进程是否为成对管道进程的识别。
若第二进程唤醒过第一进程,则判定第一进程和第二进程为成对的管道进程。随后,进入步骤S430,将第二进程添加到第一进程当前所使用的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 Node)下的CPU核心。即,若第二进程不能在第一进程当前所使用的CPU核心上执行,则将与第二进程最后一次所使用的CPU核心属于同一Node下的所有CPU核心中,当前负载最小的那个CPU核心作为目标CPU核心。其中,第二进程最后一次所使用的CPU核心是指第二进程最后一次进入阻塞状态前所使用的CPU核心。
另外,在此说明一点,根据本发明的一个实施例,上述在接收到第一进程唤醒第二进程的请求时,可以通过执行唤醒函数try_to_wake_up来唤醒第二进程。并且,在唤醒第二进程的过程中,可以通过执行函数select_task_rq_fair来为第二进程选择目标CPU核心。
至此可见,当接收到第一进程唤醒第二进程的请求时,本发明是先对第一进程和第二进程是否为成对的管道进程进行识别,并在确定第一进程和第二进程为成对的管道进程时,将第二进程添加到第一进程当前所使用的CPU核心的运行队列上。这样,对于成对的管道进程而言,便能保证其每次都可以将对方唤醒到同一CPU核心上。即,本发明能够使成对的管道进程始终都保持在同一CPU核心上执行,从而解决了成对管道进程在互相唤醒对方时不停地将对方唤醒到不同CPU上所造成的性能损失问题,提升了管道进程的性能。
并且,由于本发明是通过识别成对管道进程的标识来使成对的管道进程被调度到同一CPU核心上,因此本发明在对成对的管道进程进行调度时不会被后台进程使用CPU的情况影响,即本发明的进程调度方法在对成对的管道进程进行调度时不会受后台进程的影响。另外,在负载均衡时,若成对管道进程中的一个进程发生了跨CPU甚至跨Node的迁移,基于本发明的进程调度方法,在经过一次进程调度后也能使该成对管道进程继续回到同一CPU核心上执行。因此,本发明的进程调度方法可以使缓存的利用率达到最高,大幅提升了程序的运行性能。
为了更好的说明本发明的完整实现过程,本发明又给出了一个实施例。图5示出了根据本发明又一个实施例的进程调度方法500的流程图,方法500适于在计算设备(例如图3所示的计算设备300)中执行。如图5所示,该方法500始于步骤S510。
在步骤S510中,接收第一进程唤醒第二进程的请求,随后进入步骤S520。
在步骤S520中,判断第一进程是否为管道进程。若第一进程为管道进程,则进入步骤S530。否则,进入步骤S540。
需要说明的是,本实施例中关于管道进程的判断过程与上述方法400中步骤S410中提到的管道进程的判断原理相似或相同,相关之处,可参考对上述步骤S410的描述,这里不再赘述。
在步骤S530中,将第二进程的标识写入第一进程的结构体中,并判断第二进程是否唤醒过第一进程。若第二进程唤醒过第一进程,则判定第一进程和第二进程为成对的管道进程,进入步骤S550。否则,进入步骤S540。
需要说明的是,本实施例中关于第二进程是否唤醒过第一进程的判断过程与上述方法400中步骤S420中提到的第二进程是否唤醒过第一进程的判断原理相似或相同,相关之处,可参考对上述步骤S420的描述,这里不再赘述。
在步骤S540中,判断第二进程是否能在第一进程当前所使用的CPU核心上执行。若第二进程能在第一进程当前所使用的CPU核心上执行,则进入步骤S560。否则,进入步骤S570。
在步骤S550中,将第二进程添加到第一进程当前所使用的CPU核心的运行队列上,以使第二进程能在第一进程当前所使用的CPU核心上执行。
需要说明的是,本实施例中将第二进程添加到第一进程当前所使用的CPU核心的运行队列上的具体实现方式,与上述方法400中步骤S430中提到的将第二进程添加到第一进程当前所使用的CPU核心的运行队列上的实现方式相似或相同,相关之处,可参考对上述步骤S430的描述,这里不再赘述。
在步骤S560中,从第一进程当前所使用的CPU核心和第二进程最后一次所使用的CPU核心中选择一个当前负载小的CPU核心作为目标CPU核心,随后进入步骤S580。
在步骤S570中,从与第二进程最后一次所使用的CPU核心属于同一CPU节点下的CPU核心中,选择一个当前负载最小的CPU核心作为目标CPU核心,随后进入步骤S580。
在步骤S580中,将第二进程添加到目标CPU核心的运行队列上,以使第二进程能在目标CPU核心上执行。
其中,关于如何判断第一进程是否为管道进程、第一进程和第二进程是否为成对的管道进程等内容,已在基于上述图1至图4的描述中详细公开,在此不再赘述。
另外,本发明还利用unixbenchu对本发明的进程调度方法进行了测试。unixbenchu是unix系统中的通用性能测试工具,主要是从文件系统、CPU、内存和进程执行等多个方面来测试系统。本发明主要测试的是unixbench中的上下文切换,即系统对进程切换的速度。具体地,分别使用现有的进程调度方法和本发明的进程调度方法,在同样时长内通过成对管道进程互相唤醒对方来获取迭代次数。最后,获得的测试结果为:使用现有的进程调度方法,迭代次数在11410次至26125次之间,而使用本发明的进程调度方法,迭代次数为31288次。
可见,使用本发明的进程调度方法获得的迭代次数每次都相同,并且使用本发明的进程调度方法获得的迭代次数远高于使用现有的进程调度方法获得的迭代次数。因此,本发明的进程调度方法确实可以显著提高管道进程互相唤醒的性能,并且还能提升稳定性。
本发明还提供了一种进程调度装置。图6示出了根据本发明一个实施例的进程调度装置600的结构框图,适于驻留在计算设备300中。其中,该计算设备300包括多个CPU核心,并且该计算设备300的操作系统上运行有多个进程。如图6所示,该进程调度装置包括判断单元610、调度单元620和写入单元630。
判断单元610,适于当接收到第一进程唤醒第二进程以便在计算设备的CPU核心上执行的请求时,判断第一进程是否为管道进程,还适于若第一进程为管道进程,则判断第二进程是否唤醒过第一进程。其中,管道进程为利用管道进行通信的进程。
调度单元620,适于若第二进程唤醒过第一进程,则将第二进程添加到第一进程当前所使用的CPU核心的运行队列中,以便在第一进程当前所使用的CPU核心上执行。
写入单元630,适于若第一进程为管道进程,则将第二进程的标识写入第一进程的结构体中。
根据本发明的进程调度装置600,其具体细节已在基于图1至图5的描述中详细公开,在此不再赘述。
根据本发明的进程调度方法,当接收到第一进程唤醒第二进程以便在计算设备的CPU核心上执行的请求时,判断第一进程是否为管道进程。若第一进程为管道进程,则将第二进程的标识添加至第一进程的结构体中,并判断第二进程是否唤醒过第一进程。若第二进程唤醒过第一进程,则确定第一进程和第二进程为成对的管道进程,随之将第二进程添加到第一进程当前所使用的CPU核心的运行队列中,以便第二进程能在第一进程当前所使用的CPU核心上执行。
可见,本发明对成对的管道进程进行了标识,并在接收到唤醒任一进程的请求时,基于该标识来对被唤醒进程和发送唤醒请求的进程是否为成对管道进程进行判断。当判定这两个进程为成对管道进程时,则将被唤醒进程添加到发送唤醒请求的进程当前所使用的CPU核心的运行队列。这样,对于成对的管道进程而言,便能保证其每次都可以将对方唤醒到同一CPU核心上,从而能够使成对的管道进程始终都保持在同一CPU核心上执行,解决了成对管道进程在互相唤醒对方时不停地将对方唤醒到不同CPU上所造成的性能损失问题,提升了程序的运行性能。
在此说明一点,本发明的进程调度方法可以在Linux操作系统上运行,但并不局限于此。例如,在Unix、Windows等操作系统也可以运行。即,本发明的进程调度机制度不仅适用于Linux操作系统,对于其他的操作系统同样适用。
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD-ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的文档加载方法。
以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。
在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。
此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。
Claims (10)
1.一种进程调度方法,适于在计算设备中执行,所述计算设备包括多个CPU核心,且所述计算设备的操作系统上运行有多个进程,所述方法包括:
当接收到第一进程唤醒第二进程以便在计算设备的 CPU 核心上执行的请求时,判断所述第一进程是否为管道进程,所述管道进程为利用管道进行通信的进程;
若所述第一进程为管道进程,则判断所述第二进程是否唤醒过所述第一进程;
若所述第二进程唤醒过所述第一进程,则将所述第二进程添加到所述第一进程当前所使用的CPU核心的运行队列中,以便在所述第一进程当前所使用的 CPU 核心上执行。
2.如权利要求1所述的方法,还包括:
当监听到任一进程向管道中写入数据或从管道中读取数据的操作时,通过标识进程类型的参数将该进程标记为管道进程;
所述判断所述第一进程是否为管道进程的步骤,包括:
根据所述标识进程类型的参数,判断所述第一进程是否为管道进程。
3.如权利要求1或2所述的方法,其中,若所述第一进程为管道进程,所述方法还包括:
将所述第二进程的标识写入所述第一进程的结构体中。
4.如权利要求1或2所述的方法,其中,所述判断所述第二进程是否唤醒过所述第一进程的步骤,包括:
判断所述第二进程的结构体中是否包含所述第一进程的标识;
若所述第二进程的结构体中包含所述第一进程的标识,则确定所述第二进程唤醒过所述第一进程;
否则,确定所述第二进程未唤醒过所述第一进程。
5.如权利要求1或2所述的方法,还包括:
若所述第二进程未唤醒过所述第一进程或所述第一进程不是管道进程,则判断所述第二进程是否能在所述第一进程当前所使用的CPU核心上执行;
若所述第二进程能在所述第一进程当前所使用的CPU核心上执行,则从所述第一进程当前所使用的CPU核心和所述第二进程最后一次所使用的CPU核心中选择负载小的CPU核心作为第一目标CPU核心;
将所述第二进程添加到所述第一目标CPU核心的运行队列中。
6.如权利要求5所述的方法,还包括:
若所述第二进程不能在所述第一进程当前所使用的CPU核心上执行,则从候选CPU核心中选择负载最小的CPU核心作为第二目标CPU核心,其中,所述候选CPU核心为与所述第二进程最后一次所使用的CPU核心属于同一CPU节点下的CPU核心;
将所述第二进程添加到所述第二目标CPU核心的运行队列中。
7.一种进程调度装置,驻留在计算设备中,所述计算设备包括多个CPU核心,且所述计算设备的操作系统上运行有多个进程,所述装置包括:
判断单元,适于当接收到第一进程唤醒第二进程以便在计算设备的 CPU 核心上执行的请求时,判断所述第一进程是否为管道进程,还适于若所述第一进程为管道进程,则判断所述第二进程是否唤醒过所述第一进程,所述管道进程为利用管道进行通信的进程;
调度单元,适于若所述第二进程唤醒过所述第一进程,则将所述第二进程添加到所述第一进程当前所使用的CPU核心的运行队列中,以便在所述第一进程当前所使用的CPU核心上执行。
8.如权利要求7所述的装置,还包括:
写入单元,适于若所述第一进程为管道进程,则将所述第二进程的标识写入所述第一进程的结构体中。
9.一种计算设备,包括:
至少一个处理器;以及
存储器,存储有程序指令,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行如权利要求1-6中任一项所述方法的指令。
10.一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如权利要求1-6中任一项所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111071638.0A CN113515388A (zh) | 2021-09-14 | 2021-09-14 | 一种进程调度方法、装置、计算设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111071638.0A CN113515388A (zh) | 2021-09-14 | 2021-09-14 | 一种进程调度方法、装置、计算设备及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113515388A true CN113515388A (zh) | 2021-10-19 |
Family
ID=78062996
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111071638.0A Pending CN113515388A (zh) | 2021-09-14 | 2021-09-14 | 一种进程调度方法、装置、计算设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113515388A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115617494A (zh) * | 2022-12-06 | 2023-01-17 | 中科方德软件有限公司 | 多cpu环境下的进程调度方法、装置、电子设备和介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5826079A (en) * | 1996-07-05 | 1998-10-20 | Ncr Corporation | Method for improving the execution efficiency of frequently communicating processes utilizing affinity process scheduling by identifying and assigning the frequently communicating processes to the same processor |
CN1790270A (zh) * | 2005-12-14 | 2006-06-21 | 浙江大学 | 支持多进程的Java虚拟机实现方法 |
CN101896886A (zh) * | 2007-10-31 | 2010-11-24 | 艾科立方公司 | 单个计算机系统上运行的多个内核之间的一致同步 |
CN102722434A (zh) * | 2012-05-24 | 2012-10-10 | 兰雨晴 | 一种针对Linux进程调度的性能测试方法和工具 |
CN106462510A (zh) * | 2014-03-06 | 2017-02-22 | 伊姆西公司 | 具有独立直接接入大量固态存储资源的多处理器系统 |
CN109840151A (zh) * | 2017-11-29 | 2019-06-04 | 大唐移动通信设备有限公司 | 一种用于多核处理器的负载均衡方法和装置 |
-
2021
- 2021-09-14 CN CN202111071638.0A patent/CN113515388A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5826079A (en) * | 1996-07-05 | 1998-10-20 | Ncr Corporation | Method for improving the execution efficiency of frequently communicating processes utilizing affinity process scheduling by identifying and assigning the frequently communicating processes to the same processor |
CN1790270A (zh) * | 2005-12-14 | 2006-06-21 | 浙江大学 | 支持多进程的Java虚拟机实现方法 |
CN101896886A (zh) * | 2007-10-31 | 2010-11-24 | 艾科立方公司 | 单个计算机系统上运行的多个内核之间的一致同步 |
CN102722434A (zh) * | 2012-05-24 | 2012-10-10 | 兰雨晴 | 一种针对Linux进程调度的性能测试方法和工具 |
CN106462510A (zh) * | 2014-03-06 | 2017-02-22 | 伊姆西公司 | 具有独立直接接入大量固态存储资源的多处理器系统 |
CN109840151A (zh) * | 2017-11-29 | 2019-06-04 | 大唐移动通信设备有限公司 | 一种用于多核处理器的负载均衡方法和装置 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115617494A (zh) * | 2022-12-06 | 2023-01-17 | 中科方德软件有限公司 | 多cpu环境下的进程调度方法、装置、电子设备和介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10877766B2 (en) | Embedded scheduling of hardware resources for hardware acceleration | |
US6996821B1 (en) | Data processing systems and method for batching tasks of the same type in an instruction cache | |
TW201342218A (zh) | 通透地提供給作業系統之非對稱多核心處理器系統 | |
US20110219373A1 (en) | Virtual machine management apparatus and virtualization method for virtualization-supporting terminal platform | |
CN114461404B (zh) | 一种进程迁移方法、计算设备及可读存储介质 | |
US10761822B1 (en) | Synchronization of computation engines with non-blocking instructions | |
CN113326140A (zh) | 一种进程迁移方法、装置、计算设备以及存储介质 | |
CN113553164B (zh) | 一种进程迁移方法、计算设备及存储介质 | |
CN106020984B (zh) | 电子设备中进程的创建方法及装置 | |
WO2023082575A1 (zh) | 一种面向神经网络模型计算的图执行流水并行方法和装置 | |
CN113515388A (zh) | 一种进程调度方法、装置、计算设备及可读存储介质 | |
CN112783652B (zh) | 当前任务的运行状态获取方法、装置、设备及存储介质 | |
CN109840151B (zh) | 一种用于多核处理器的负载均衡方法和装置 | |
CN111625367B (zh) | 一种动态调整文件系统读写资源的方法 | |
CN113204385A (zh) | 一种插件加载方法、装置、计算设备及可读存储介质 | |
US7958510B2 (en) | Device, system and method of managing a resource request | |
CN113961086B (zh) | 一种快捷键实现方法、计算设备及存储介质 | |
CN114675890B (zh) | 一种指令执行方法、装置、设备及存储介质 | |
WO2022237419A1 (zh) | 任务执行方法、装置及存储介质 | |
CN116107774A (zh) | Io请求处理方法、装置、电子设备和存储介质 | |
US20100083269A1 (en) | Algorithm for fast list allocation and free | |
CN112114967B (zh) | 一种基于服务优先级的gpu资源预留方法 | |
US9841995B2 (en) | Apparatus and method for adaptive context switching scheduling scheme for fast block input and output | |
CN112181516A (zh) | 应用软件的执行方法及计算设备 | |
CN112947677B (zh) | 一种计时器读取方法、计算设备及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |