程序处理设备和方法以及图像形成设备技术领域
本发明涉及在多核处理器上执行多线程程序的情况下动态地改变向程
序的线程的运行核的分配的程序处理设备和方法以及图像形成设备。
背景技术
近年来,设置有多个核(进行运算处理的部分)的处理器已成为主流。以
这种方式配置的处理器被称为“多核处理器”,并且各处理器核可以同时执行
多个线程(处理的执行单位)。多核处理器不仅被配置为安装在台式PC和服务
器设备中,而且还被配置为安装在诸如图像形成设备等的嵌入式装置中。在
多核处理器安装在图像形成设备的情况下,经常使用针对各核设置高速缓存
并且共用RAM的结构。在这种结构的情况下,由于用于维持高速缓存一致性
(即,维持各核的高速缓存和RAM之间的一致性)的处理,因而依赖于正在运
行的程序而频繁发生高速缓存丢失。具体地,在存在针对两个以上核的表示
同一数据的高速缓存的情况下,如果其中一个核改变了该数据,则在另一核
中高速缓冲的数据变为无效并且可能发生高速缓存丢失。该问题通常被称为
假共享(false sharing)。在假共享频繁发生的情况下,使高速缓存同步的开销
变得极大,因此与利用单核处理器进行工作的情况下的性能相比,性能显著
下降。
已知有通过将特定线程固定地分配给特定核来降低高速缓存丢失的频
率并高效地执行程序以解决这些问题的技术(例如,参见日本特开
2012-133682,第0075-0076段等)。
然而,在由于假共享所引起的性能下降局限于执行特定线程上的特定处
理时的情况下,如果运行该线程的核始终是固定的,则在没有执行该特定处
理的情况下的性能下降。例如,在诸如仅在进行用于启动图像形成设备中的
特定程序的处理时由于假共享而性能下降等的情况下,如果针对该特定程序
的线程的运行核保持固定,则即使防止了启动时的性能下降,也存在性能会
在用户使用启动后的图像形成设备的功能的情况下发生劣化的担忧。因而,
无法提供具有本应实现的性能的产品,因此用户友好性受损。
发明内容
在本发明中,通过采用在执行特定处理时使线程的运行核固定并且在该
特定处理完成之后恢复相关线程的运行核的设置的结构,使得特定处理的执
行期间的运行性能与特定处理完成之后的运行性能相平衡。
本发明具有以下结构。
根据本发明的一方面,提供一种程序处理设备,所述程序处理设备用于
使用多核处理器执行多个线程,所述多核处理器包括多个处理器核和各处理
器核所用的高速缓存,所述程序处理设备包括:线程管理部,用于存储所生
成的线程的标识符;分配部,用于在预定运行状态下将特定程序的所生成的
线程固定地分配给特定处理器核;以及用于在检测到取消了所述预定运行状
态的情况下、解除具有所述线程管理部所管理的标识符的线程向所述特定处
理器核的固定分配的部件。
根据本发明的另一方面,提供一种图像处理设备,所述图像处理设备包
括:程序处理装置,用于使用多核处理器执行多个线程,所述多核处理器包
括多个处理器核和各处理器核所用的高速缓存,其中所述程序处理装置包
括:线程管理部,用于存储所生成的线程的标识符,分配部,用于在预定运
行状态下将特定程序的所生成的线程固定地分配给特定处理器核,以及用于
在检测到取消了所述预定运行状态的情况下、解除具有所述线程管理部所管
理的标识符的线程向所述特定处理器核的固定分配的部件;扫描器,用于读
取图像;打印机,用于打印图像;以及控制部,用于提供所述扫描器、所述
打印机以及所述程序处理装置所执行的应用程序之间的接口。
根据本发明的又一方面,提供一种程序处理方法,所述程序处理方法用
于利用多核处理器执行多个线程,所述多核处理器包括多个处理器核和各处
理器核所用的高速缓存,所述程序处理方法包括:存储所生成的线程的标识
符;在预定运行状态下将特定程序的所生成的线程固定地分配给特定处理器
核;以及在检测到取消了所述预定运行状态的情况下,解除具有所存储的标
识符的线程向所述特定处理器核的固定分配。
根据本发明的再一方面,提供一种程序处理设备,所述程序处理设备用
于使用多核处理器执行多个线程,所述多核处理器包括多个处理器核和各处
理器核所用的高速缓存,所述程序处理设备包括:生成部,用于生成应用程
序的线程;以及分配部,用于将所述应用程序的线程分配给所述多个处理器
核中的一个处理器核,其中,所述分配部在所述应用程序的启动期间,将所
述应用程序的线程固定地分配给第一处理器核,并且在所述应用程序的启动
完成之后,不将所述应用程序的线程固定地分配给所述第一处理器核。
根据本发明,通过采用在执行特定处理时使线程的运行核固定并且在该
特定处理完成之后恢复相关线程的运行核的设置的结构,使得特定处理的执
行期间的运行性能与特定处理完成之后的运行性能相平衡,因而用户友好性
得到改善。
通过以下参考附图对典型实施例的说明,本发明的其它特征将变得明
显。
附图说明
图1是示出图像形成设备的硬件结构的框图。
图2是示出图像形成设备的软件结构的框图。
图3是示出根据本发明的软件中所包括的特征功能的框图。
图4是针对使用线程生成控制部所生成的线程的处理的流程图。
图5是Java(注册商标)应用管理部的启动处理的流程图。
具体实施方式
以下将参考附图来详细说明根据本发明的实施例。注意,以下实施例并
不限制根据权利要求书的范围的本发明,并且实施例中所述的特征的所有组
合也不被限制为对于根据本发明的解决方案而言是必须的。此外,实施例中
所出现的Java是注册商标,但由于在此明确陈述了该事实,因此将该事实从
以下说明中省略。
第一实施例
图1是示出作为本发明所适用的程序处理设备的示例的图像形成设备的
硬件结构的框图。图1中的图像形成设备包括操作部131、作为图像输入设备
的扫描器部132、作为图像输出设备的打印机部133和管理图像形成设备的控
制的控制器100。操作部131包括触摸面板显示器等并且具有向用户显示信息
和接收来自用户的输入的功能。扫描器部132进行用于读取该扫描器部132上
所放置的原稿上的图像的操作以生成图像数据。打印机部133使从控制器100
接收到的图像数据在薄片上形成为打印数据。控制器100电气地连接至操作
部131、扫描器部132和打印机部133,并且还经由网络I/F 106连接至LAN 140,
并且可以从外部装置接收打印作业。
CPU 101基于ROM 103中所存储的控制程序等对控制器100中所进行的
各种处理进行一体化控制。
此外,作为多核处理器的CPU 101具有2个内部处理器核(核0 121和核1
122)、与各处理器核相对应的高速缓冲存储器(高速缓冲存储器0 124和高速
缓冲存储器1 125)以及控制高速缓冲存储器的高速缓冲控制部123。
核0 121和核1 122是构成处理器的中央核的部分,并且进行实际的运算
处理。高速缓冲存储器是用于对程序所使用的RAM 102上的数据进行高速缓
冲的高速存储器。高速缓冲存储器0 124对核0 121所处理的数据进行高速缓
冲,并且高速缓冲存储器1 125对核1 122所处理的数据进行高速缓冲。注意,
RAM 102和高速缓冲存储器之间的速度差通常极大,因此通常安装二级高速
缓存和三级高速缓存以缓解该速度差,但为了便于说明,将说明仅包括主高
速缓存的示例。
高速缓冲控制部123控制高速缓冲存储器0 124和高速缓冲存储器1 125
中的数据。此外,高速缓冲控制部123进行用以维持高速缓存一致性(RAM
102和高速缓冲存储器中的数据之间的一致性)的控制。例如,在将同一数据
高速缓冲在两个高速缓冲存储器中的情况下,如果核0 121改变了高速缓冲至
高速缓冲存储器0 124的数据,则高速缓冲至高速缓冲存储器1 125的数据的
内容变为无效。由于该原因,高速缓冲控制部123进行用以使高速缓冲在高
速缓冲存储器1 125中的数据无效的控制以使得不使用无效的高速缓存。在这
种情况下,如果核1 122尝试参考同一数据则发生高速缓存丢失,并且产生从
RAM 102再次读取数据的需求,因而速度下降。
RAM 102是CPU 101运行时所使用的系统工作存储器,并且是用于临时
存储图像数据的存储器。设备的引导程序存储在ROM 103中。HDD 104是可
以存储系统软件和图像数据的硬盘驱动器。此外,在根据本实施例的图像形
成设备中,还可以安装作为应用程序的Java应用并增强图像形成设备的功能,
并且所安装的Java应用也存储在HDD 104中。操作部I/F 105是用于使系统总
线110和操作部131相连接的接口部。操作部I/F 105从系统总线110接收用于
操作部131上的显示的图像数据并将图像数据输出至操作部131,并且将从操
作部131输入的信息输出至系统总线110。网络I/F 106连接至LAN 140和系统
总线110并且进行信息输入和输出。扫描器I/F 107对从扫描器部132接收到的
图像数据进行校正、处理和编辑。注意,扫描器I/F 107具有基于所接收到的
图像数据来判断原稿是彩色原稿还是黑白原稿以及原稿是文本原稿还是照
片原稿的功能。图像处理部108对图像数据进行方向转换、图像压缩、解压
缩处理等。打印机I/F 109接收从图像处理部108发送来的图像数据并且在参
考所接收到的图像数据所附的属性数据的情况下将图像数据形成为图像。将
图像形成之后的图像数据输出至打印机部133。
软件结构
图2是示出图像形成设备的软件结构的框图。该软件保存在HDD 104中
并且在利用ROM 103中的引导程序被读出至RAM 102之后被CPU 101所执
行。
OS 201是针对各种程序生成处理单位(线程)的对称多处理型(symmetric
multi-processing type,SMP)操作系统。OS 201将各线程分配给执行线程的核。
通常,线程处于可以在所有核中运行的状态,并且OS 201根据预定算法来确
定线程的运行核。此外,程序可以设置可运行线程的核。例如,通过将核1
设置为可运行特定线程的唯一核,可以使该特定线程仅在核1中运行。
在根据本发明的图像形成设备中,主控制部202进行本地应用203和Java
VM启动控制部204的启动控制,并且针对作为图像形成设备的主要功能的复
印机、扫描器和打印机等进行各种作业的管理和执行控制。此外,主控制部
202提供用于使用图像形成设备根据Java应用所提供的功能的接口。本地应用
203是将来自作为图像形成设备的主要功能的复印机和扫描器的指令的执行
所用的UI显示在操作部131上的、以及接收来自用户的操作指令并且输入各
种作业的应用。此外,本地应用203使用OS 201的功能来生成线程并执行应
用处理。没有设置可运行所生成的线程的核,因此基于OS 201所作出的决定,
在核0或核1中执行所生成的线程。因此,多个线程可以同时运行,并且利用
多核的性能来进行处理。
主控制部202所启动的Java VM启动控制部204控制Java VM(Java虚拟机)
205的启动。此外,Java VM启动控制部204具有在从Java VM 205接收到线程
生成请求的情况下向OS 201进行请求以生成线程并且管理由此生成的线程
的功能。
Java VM 205是用于执行以Java语言编写的程序(以下称为“Java程序”或
“特定程序”)的虚拟机。注意,Java VM 205采用如下结构:在Java VM 205启
动Java应用207的情况下,多个所生成的线程频繁访问特定存储器区域。由于
该原因,如果在没有对在执行Java程序时所生成的线程的核进行固定的情况
下执行了启动,则假共享频繁发生,引起性能的显著下降。在启动完成之后,
并行执行Java应用207的线程的频率降低,因此即使在没有将线程固定至特定
核的情况下假共享发生的频率也降低。
Java应用管理部206是在启动Java VM 205的情况下所执行的第一个Java
程序,并且进行各种Java应用207的管理(例如,安装、卸载、启动和停止控
制)。此外,Java应用管理部206管理Java应用207的启动状态(开始或停止),
因此可以知道是否已完成针对所有Java应用207的启动处理。此外,Java应用
管理部206具有与特定处理状态管理部306进行通信并且通知针对Java应用组
的启动处理已完成的功能。
Java应用207是用于诸如添加识别功能、可运行性定制和与外部设备的
协调运行等的扩展图像形成设备的功能的应用。在根据本实施例的图像形成
设备中,可以安装多个Java应用207并同时运行多个Java应用207。
注意,本实施例被配置为以使得在MFP(multi-function printer,多功能打
印机)启动的情况下多个Java线程同时执行初始化处理。此外,在进行初始化
处理的情况下经常访问彼此接近的存储器地址。由于该原因,假共享可能会
发生。因此,通过在启动时将运行Java线程的核限制为这些核其中之一,可
以抑制假共享发生的频率并且可以改善性能。
另一方面,根据用户的使用需求,针对启动后的处理可以考虑到各种状
况,并且不进行诸如启动时等的特征处理。由于该原因,为了更好地获得多
核CPU的益处,将启动处理完成之后的向核的线程分配留给OS。
功能块
图3是本实施例在图2所示的OS 201和Java VM启动控制部204的各软件
层中提供的特征功能的框图。
线程生成部301是OS 201中所包括的根据来自上层程序(higher level
program)的请求而生成线程的功能。此时,从上层程序传递来与入口点函数
(entry point function)和该入口点函数的自变量有关的信息。入口点函数是在
线程开始时首先由线程所执行的函数,并且入口点函数与线程的处理内容相
对应。此外,在线程生成部301生成线程的情况下,线程生成部301还生成并
管理用于唯一识别所生成的线程的标识符(被称为线程ID)。
核分配控制部302是OS 201中所包括的根据来自上层程序的请求而设置
可运行线程的核的功能。此时,上层程序针对线程指定运行核的集合。OS 201
从所指定的核的范围中确定要运行线程的核。因此,如果仅指定一个特定核,
则可以进行控制以使得该线程仅在所指定的核中运行。可以指定可运行线程
的多个核,因此,如果处理器具有三个以上核,则可以进行仅在两个特定核
中执行处理的控制。
线程生成控制部303是Java VM启动控制部204中所包括的响应于来自
Java VM 205的请求来生成线程的功能。这些请求中包括作为Java程序的处理
内容的入口点函数和该入口点函数的自变量。在生成线程时,线程生成控制
部303指定在线程生成部301上进行后面利用图4所述的处理的入口点函数。
此外,将从Java VM 205传递来的入口点函数及其自变量的组合指定为自变
量。
动态核分配控制部304根据在Java VM 205上运行的程序(例如,Java应用
207)的运行状态来控制所生成的线程的运行核。具体地,在程序正进行启动
处理的情况下,以使得线程仅在核1中运行的方式进行核分配,并且在程序
没有正进行启动处理的情况下,以使得线程可以在核0和核1两者中运行的方
式进行核分配。也就是说,在Java应用207的运行状态是预定运行状态的情况
下,动态核分配控制部304将该Java应用207的线程固定地分配给预定核。然
后,在Java应用207的运行状态不再处于预定运行状态的情况下,动态核分配
控制部304解除该Java应用207的线程的固定分配。因此,根据上述的OS 201
的预定算法来将该Java应用207的线程灵活地分配给多个核中的任意核。此
时,从特定处理状态管理部306获得程序的运行状态。此外,由特定处理线
程管理部305管理的向运行核的线程分配响应于来自特定处理状态管理部
306的请求而动态地发生改变。
特定处理线程管理部305管理经由线程生成控制部303所生成的线程。具
体地,特定处理线程管理部305保持线程管理列表,并且在该列表中保持经
由线程生成控制部303所生成的线程中的存在的线程的线程ID。线程ID是为
了在上述的线程生成部301生成了线程的情况下对线程进行标识而分配的标
识符。
特定处理状态管理部306保持与在Java VM 205上运行的程序有关的运
行状态信息(启动处理状态/启动处理完成)。特定处理管理部306所保持的运
行状态信息在从Java应用管理部206接收到通知时发生改变。
线程处理流程图
图4是示出线程生成控制部303在使用线程生成部301生成线程时所指定
的入口点函数,即,经由线程生成控制部303所生成的线程的处理的流程。
在步骤S401中,线程生成控制部303所生成的线程首先从OS 201获得该
线程自身的线程ID。
接着,过程移至步骤S402,并且线程将步骤S401中所获得的线程ID添加
至特定处理线程管理部305所保持的线程管理列表。
接着,过程移至步骤S403,并且线程从特定处理状态管理部306获得与
程序有关的运行状态信息并且判断运行状态是否是预定运行状态,即,启动
处理状态。特定处理状态管理部306所保持的与程序运行状态有关的信息是
由Java应用管理部206(后面利用图5所述)所设置的。在步骤S403中,如果判
断为该状态是启动处理状态,则过程移至步骤S404,并且如果判断为该状态
不是启动处理状态,则过程移至步骤S405。
在步骤S404中,线程使用动态核分配控制部304将核1固定为该线程的运
行核。因此,Java程序的线程将仅在核1中运行,并且由于核0和核1对同一
RAM区域的访问频率降低而引起假共享发生的可能性变小。自然地,将线程
分配给核1是一个示例,并且将线程固定至多核处理器的任何一个特定处理
器核就足够了。指定要执行线程的处理器核,这被设置为操作系统的功能,
并且在步骤S404中,通过使用该功能来指定处理器核。在所指定的处理器核
不是当前正在执行线程的处理器核的情况下,将执行该线程的处理器核切换
为所指定的处理器核。
在步骤S405中,执行Java VM 205所指定的入口点函数(Java线程的实际
处理)。
接着,过程移至步骤S406,并且线程将步骤S401中所获得的该线程的线
程ID从特定处理线程管理部305所保持的线程管理列表中删除。因而,该线
程结束。
通过执行步骤S401~S406,可以仅在启动处理期间将与Java VM有关的线
程的执行核固定为一个核,并且可以改善Java VM上的程序的启动性能。此
外,可以管理与Java VM有关的存在的线程,因此可以通过执行下述的步骤
来动态地改变线程所分配到的运行核。
Java应用管理部启动时的流程图
图5是示出Java应用管理部206启动时的处理的流程的流程图。
在步骤S501中,Java VM 205所启动的Java应用管理部206将Java应用管
理部206的特定处理状态管理部306所保持的状态设置为启动处理状态。因
此,在图4中的步骤S403的判断中的运行状态将被确定为启动处理状态,因
此线程生成控制部303所生成的线程(以及已经生成了但是处理尚未到达步
骤S403的线程)的运行核后面将被固定为核1。
接着,过程移至步骤S502,并且Java应用管理部206判断是否存在要从
Java应用组中启动的任何Java应用。如果判断为存在要启动的Java应用,则
过程移至S503。
在步骤S503中,Java应用管理部206从要启动的Java应用的组中启动头一
个Java应用。注意,要在步骤S503的启动处理期间生成的线程是经由线程生
成控制部303所生成的并且由特定处理线程管理部305所管理的。因此,按照
图4中的过程进行这里要生成的线程的处理。在步骤S503中,在启动处理完
成的情况下,过程返回至步骤S502,并且重复进行步骤S502和S503,直到不
再存在要启动的Java应用为止。在步骤S502中,如果判断为不存在要启动的
应用(即如果要启动的所有Java应用的启动已完成),则过程移至步骤S504。
在步骤S504中,Java应用管理部206将特定状态管理部306所保持的运行
状态改变为启动处理完成状态。步骤S502中检测到不存在要启动的Java应用
的状态是启动处理状态已取消的状态,因此,在步骤S504中,预定运行状态
从启动处理状态改变为启动处理完成状态。因此,在图4中的步骤S403的判
断中,状态将被判断为不是启动处理状态,因此,线程生成控制部303此后
生成的线程将可以在核0或核1中的任一核中运行。
接着,过程移至步骤S505,并且动态核分配控制部304针对与特定处理
线程管理部305所保持的线程ID相对应的各线程改变可以运行线程的处理器
核的设置,以使得线程可以在核0和核1两者中运行。自然地,如果处理器核
的数量大于2,则设置可以被改变为以使得线程可以在所有处理器核中运行。
例如,使用与步骤S404相同的功能来进行步骤S505。在OS的管理下根据新
的设置在处理器核中执行由于可运行的核处理器设置发生了改变而解除了
设置的线程。因此,一些线程在没有改变处理器核的情况下被执行,而其它
线程在切换至其它处理器核之后被执行。
注意,尽管为了便于说明而从上述的流程图中省略了细节,但线程生成
和结束时的线程管理列表操作(步骤S402和步骤S406)和步骤S505中的处理
是互斥处理。因此,采用线程管理列表在用于改变核分配的处理期间不发生
改变的结构。
利用上述的操作,在Java VM 205上运行的程序的启动处理期间,可以
将运行与Java VM有关的线程的核固定为核1,因此,可以抑制假共享的频率
并且可以改善性能。此外,在Java VM 205上运行的程序的启动处理完成之
后,所有的与Java VM有关的线程可以被设置为可以在核0或核1中运行,因
此,可以维持启动之后的性能。因此,启动时的性能可以与正常处理时的性
能相平衡并且可以改善用户友好性。
第二实施例
接着,将说明根据本发明的第二实施例。在第一实施例中,线程生成控
制部303采用了针对进行启动处理时所生成的各线程来设置核的结构。然而,
在子线程(所生成的线程)继承父线程(进行生成的线程)的属性的情况下,可
以采用如下结构:作为用于进行启动Java VM的处理的线程的并且生成要启
动的Java应用的线程的父线程的核设置被改变为使得被分配给特定核,并且
不改变针对Java应用的线程的核设置。在这种情况下,要按照图4中的过程进
行处理的唯一线程是父线程并且不针对子线程执行步骤S403和S404。然而,
需要针对该时间点存在的各线程进行图5的步骤S505中针对所分配的核的改
变操作。
在第一和第二实施例中,示出Java程序的启动处理慢的情况作为特定程
序的特定处理的示例。然而,根据本实施例的本发明不限于此,并且无需说
明,本发明可以适用于其它程序的其它处理中的假共享引起性能问题的所有
处理。
其它实施例
本发明的实施例还可以通过如下的方法来实现,即,通过网络或者各种
存储介质将执行上述实施例的功能的软件(程序)提供给系统或装置,该系统
或装置的计算机或是中央处理单元(CPU)、微处理单元(MPU)读出并执行程
序的方法。
尽管已经参考典型实施例说明了本发明,但是应该理解,本发明不限于
所公开的典型实施例。所附权利要求书的范围符合最宽的解释,以包含所有
这类修改、等同结构和功能。