一种系统性能的优化方法和装置
技术领域
本发明涉及计算机技术领域,特别是涉及一种系统性能的优化方法和装置。
背景技术
随着计算机硬件的快速发展,计算机系统配置已经从系统中的单个或多个集成电路进化至各个集成电路上的多个硬件线程、多个核、多个设备和/或完整的系统。然而,硬件的不断进步也需要软件系统的发展,进而推进整个计算系统的性能。
目前,对于软件系统的优化大多是基于应用层面的优化。例如,可以采用多线程,利用并行程序设计模型来设计应用程序。通过将应用程序划分成多个独立的任务,并确定这些任务之间的相互依赖关系,从而进行任务分解、数据分解和数据流分解。这样,可以在一个进程中创建几个线程并行执行多个独立的任务,以此来提高程序的执行效率,进而提高系统的性能。
然而,在多个线程同时运行的时候,如果多个线程同时对同一个内存地址进行写入,由于CPU时间调度上的问题,写入数据会被多次的覆盖,所以就要使线程同步。即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作,此时,其他线程处于等待状态。在系统中使用多线程是为了提高系统的性能,但如果多线程使用不当,还可能会增加线程间上下文切换和消息交互的过程,线程的个数越多,系统在线程之间的切换次数会增加,不但不会提升系统性能,反而会使得资源消耗更大,产生更多的CPU负载。
发明内容
本发明实施例所要解决的技术问题是提供一种系统性能的优化方法和装置,能够方便地合并多个线程,从而能够减少线程间上下文切换和消息交互过程,降低由于频繁进行多线程的切换而产生的交互资源消耗。
为了解决上述问题,本发明公开了一种系统性能的优化方法,包括:
通过配置第一功能模块的第一消息处理接口,将所述第一功能模块与第二功能模块的交互资源进行关联;
根据所述交互资源,将所述第一功能模块合并到所述第二功能模块对应的当前线程,使得所述当前线程从所述交互资源中获取其他线程发送的消息时,依据所述消息中携带的目的地址识别所述消息对应的功能模块,并运行识别出的功能模块。
依据本发明的另一个方面,提供了一种系统性能的优化装置,包括:
关联模块,用于通过配置第一功能模块的第一消息处理接口,将所述第一功能模块与第二功能模块的交互资源进行关联;及
合并模块,用于根据所述交互资源,将所述第一功能模块合并到所述第二功能模块对应的当前线程,使得所述当前线程从所述交互资源中获取其他线程发送的消息时,依据所述消息中携带的目的地址识别所述消息对应的功能模块,并运行识别出的功能模块。
与现有技术相比,本发明实施例包括以下优点:
本发明实施例通过合并功能模块来实现线程的合并,也即,通过将原本在多个线程中运行的多个功能模块合并为在一个线程中运行的第二功能模块,使该多个功能模块共用一个线程的交互资源,因此,本发明实施例可以方便地合并多个线程,从而能够减少线程间上下文切换和消息交互过程,降低由于频繁进行多线程的切换而产生的交互资源消耗。
附图说明
图1是本发明的一种系统性能优化的方法实施例一的步骤流程图;
图2是本发明的一种功能模块合并前的消息通信示意图;
图3是本发明的一种功能模块合并后的消息通信示意图;
图4是本发明的一种创建第二功能模块的方法的步骤流程图;
图5是本发明的一种对第二功能模块dpdcp和第一功能模块drlc进行合并的方法示例的步骤流程图;
图6是本发明的一种系统性能优化的方法实施例四的步骤流程图;
图7是本发明的一种LTE Smallcell系统的模块结构示意图;
图8是本发明的一种系统性能优化的方法实施例五的步骤流程图;以及
图9是本发明的一种系统性能优化的装置实施例的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
实施例一
参见图1,示出了本发明的一种系统性能优化的方法实施例一的步骤流程图,具体可以包括如下步骤:
步骤101、通过配置第一功能模块的第一消息处理接口,将第一功能模块与第二功能模块的交互资源进行关联;
本发明实施例中,功能模块可用于表示程序中用于实现独立子功能的模块。也即,在每个功能模块完成对应子功能后,再把这些功能模块总起来组成一个整体,以满足所要求的整个程序的功能。
考虑到程序中的功能模块可以作为一个独立的线程运行,本发明实施例通过合并功能模块来实现线程的合并,也即,通过将原本在多个线程中运行的多个功能模块合并为在一个线程中运行的第二功能模块,使该多个功能模块共用一个线程的交互资源,因此,本发明实施例可以方便地合并多个线程,从而能够减少线程间上下文切换和消息交互过程,降低由于频繁进行多线程的切换而产生的交互资源消耗。
在具体应用中,功能模块之间符合以下条件时合并功能模块可以有利于系统性能的优化:
第一、对于无关功能模块的合并,其中,无关功能模块具体可以包括各种对实时性要求不高的功能模块,比如处理用户界面交互的功能模块等等;
第二、对于相关功能模块的合并,其中,相关功能模块具体可以包括各种对消息数据处理是严格串行处理的功能模块,比如上(下)行消息处理涉及的功能模块,如RRM(无线资源管理,Radio Resource Management)功能模块和RRC(无线资源控制,Radio Resource Control)功能模块等等。
当然,上述条件只是作为示例,本领域技术人员可以根据实际需求进行任意两个或两个以上功能模块的合并,本发明实施例对具体的功能模块合并的条件不加以限制。
在具体实现中,可以在通过关联第一功能模块的第一消息处理接口与第二功能模块的交互资源关联,将第一功能模块合并到第二功能模块对应的当前线程的步骤之前,获取第二功能模块的交互资源,其中,第二功能模块的交互资源的过程具体可以为,创建第二功能模块及对应的当前线程,并在创建第二功能模块的过程中对第二功能模块进行声明以申请第二功能模块的交互资源。
在实际应用中,可以调用预置的声明模块接口对第二功能模块进行声明,以声明第二功能模块的交互资源,声明模块接口的参数可以包括第二功能模块的名称和堆栈长度,操作系统可以根据第二功能模块的声明为第二功能模块分配相应大小的堆栈空间。
具体地,可以提供声明模块接口的如下格式:
DECLMODULE(name,stacksize); (1)
其中,声明模块接口的输入参数的配置可以参见表1,声明模块接口可以没有输出参数。
表1
其中,name可以为第二功能模块的名称,stacksize可以为第二功能模块申请的交互资源的大小,比如申请堆栈空间的长度等等。
在本发明的一种应用示例中,可以提供声明模块接口的如下调用过程:
DECLMODULE(dpdcp,32000); (2)
上述调用过程(2)可用于为名称为dpdcp的功能模块申请大小为32000的交互资源,假设申请堆栈空间的长度为32000,则操作系统会为dpdcp模块分配大小为32000的一个堆栈空间。
本发明实施例中,第一消息处理接口可用于处理第一功能模块接收到的消息。在本发明的一种应用示例中,可以提供第一消息处理接口的如下格式:
int module_entry(SId src,WORD msgID,SId dst,const void*msgdata,WORD length); (3)
其中,module用于表示第一功能模块的名称;第一消息处理接口的输入参数的配置可以参见表2;第一消息处理接口可以没有输出参数,成功时返回值可以为0,失败时返回值可以为非零值;源模块和目的模块分别用于表示消息对应的发送模块和接收模块。
表2
名称 |
类型 |
描述 |
src |
SId |
源模块标识号 |
msgID |
WORD |
消息标识号 |
dst |
SId |
目的模块标识号 |
msgdata |
void* |
消息体地址 |
length |
WORD |
消息体长度 |
在本发明的一种应用示例中,可以提供第一消息处理接口的如下调用过程:
int dpdcp_entry(U16usSrcModuleId,U16usMsgId,U16usDstModuleId,const void*pData,U16usLength); (4)
上述调用过程(4)可用来配置名称为dpdcp的模块的第一消息处理入口。
在实际应用中,可以调用预置的合并模块接口将第一功能模块和第二功能模块关联到同一线程。具体地,可以提供合并模块接口的如下格式:
COMBINEMODULE(midDes,midSrc,nameSrc); (5)
其中,合并模块接口的输入参数的配置可以参见表3;合并模块接口可以没有输出参数以及返回值。
表3
在本发明的一种应用示例中,可以提供合并模块接口的如下调用过程:
COMBINEMODULE(EDPDCP,EDRLC,drlc); (6)
其中,EDPDCP可以为第二功能模块的标识名称,该第二功能模块的名称为dpdcp,EDRLC可以为第一功能模块的标识名称,drlc为第一功能模块的名称。
合并模块接口的调用过程具体可以执行如下流程步骤:
步骤S1、创建标识名称为EDRLC、名称为drlc的第一功能模块,并在创建第一功能模块的过程中配置第一功能模块的第一消息处理接口;
步骤S2、通过第一消息处理接口,将第一功能模块与第二功能模块的交互资源进行关联。
步骤102、根据交互资源,将第一功能模块合并到第二功能模块对应的当前线程,使得当前线程从交互资源中获取其他线程发送的消息时,依据消息中携带的目的地址识别消息对应的功能模块,并运行识别出的功能模块。
在将第一功能模块合并到第二功能模块对应的当前线程后,第一功能模块和第二功能模块可以共用第二功能模块的交互资源,这里的交互资源具体可以包括消息队列资源、堆栈资源等等,例如,mbox(邮箱,mailbox)是一种常见的消息队列。
为了便于说明,下面以两个线程为例来说明具体的合并过程。
参照图2,示出了本发明的一种功能模块合并前的消息通信示意图,其中,功能模块1将消息A通过邮箱MailboxA发送给功能模块2;功能模块3将消息B通过MailboxB发送给功能模块4;其中,MailboxA和MailboxB分别为功能模块2和功能模块4对应的线程2和线程4的交互资源。
本发明实施例可以通过合并线程2对应的功能模块2和线程4对应的功能模块4,使两个功能模块共用线程2的交互资源,由于线程2可以对接收到的消息进行串行处理,因此能够节省线程切换时间。
参照图3,示出了本发明的一种功能模块合并后的消息通信示意图,其中,合并后,功能模块2和功能模块4共用邮箱MailboxA,即,线程1和线程3都可以通过MailboxA发送消息给合并后的功能模块2和功能模块4,此时线程2可以对接收到的消息进行串行处理,节省了线程切换时间。
对于合并有多个功能模块的当前线程而言,其对接收到的消息进行串行处理的过程具体可以包括:当前线程从交互资源中获取其他线程发送的消息时,依据消息中携带的目的地址识别消息对应的功能模块,并运行识别出的功能模块。其中,当前线程运行识别出的功能模块具体可以包括:
子步骤A1、当消息中携带的目的地址与第一功能模块对应时,当前线程运行第一功能模块对消息进行处理;
子步骤A2、当消息中携带的目的地址与第二功能模块对应时,当前线程运行第二功能模块对消息进行处理。
例如,当消息中携带的目的地址与功能模块2对应时,线程2运行功能模块2对消息进行处理,而当消息中携带的目的地址与功能模块4对应时,线程2运行功能模块4对消息进行处理。
综上,本发明实施例通过合并功能模块来实现线程的合并,也即,通过将原本在多个线程中运行的多个功能模块合并为在一个线程中运行的第二功能模块,使该多个功能模块共用一个线程的交互资源,因此,本发明实施例可以方便地合并多个线程,从而能够减少线程间上下文切换和消息交互过程,降低由于频繁进行多线程的切换而产生的交互资源消耗。
实施例二
本实施例的系统性能的优化方法在图1所示实施例的基础上,进一步还可以包括如下可选技术方案。
参见图4,示出了本发明的一种创建第二功能模块的方法的步骤流程图,具体可以包括:
步骤401、配置第二功能模块的第二初始化接口和第二消息处理接口;
第二初始化接口可用于进行第二功能模块的初始化,第二功能模块的初始化具体可以包括:输入环境的准备、数据资源和系统资源等等。
在本发明的一种应用示例中,可以提供第二初始化接口的如下格式:
void module_init(void); (7)
其中,module为待初始化模块的名称,模块初始化接口可以没有输入、输出参数以及返回值。在具体应用中,可以调用第二初始化接口对第二功能模块进行初始化,也可以在系统初始化阶段调用第二初始化接口对第二功能模块进行初始化,本发明实施例对调用第二初始化接口的时机限制。
在本发明的一种应用示例中,可以提供第二初始化接口的如下调用过程:
void dpdcp_init(void); (8)
上述调用过程(8)可用来对名称为dpdcp的模块进行初始化操作。
对于第二消息处理接口而言,由于其原理和配置过程与第一消息处理接口类似,故在此不作赘述,相互参照即可。
步骤402、对第二功能模块进行声明以申请第二功能模块的交互资源;
具体地,可以调用预置的声明模块接口对第二功能模块进行声明,以声明第二功能模块的交互资源,在此不作赘述。
步骤403、调用创建模块接口创建第二功能模块。
在完成第二功能模块的声明之后,可以调用预置的创建模块接口创建第二功能模块。具体地,可以提供创建模块接口的如下格式:
CREATEMODULE(pri,mid,name); (9)
其中,创建模块接口的输入参数的配置可以参见表4;创建模块接口可以没有输出参数以及返回值。
表4
名称 |
类型 |
说明 |
pri |
U16 |
模块优先级 |
mid |
Char |
模块的标识名称 |
name |
Char |
模块的名称 |
创建模块接口可用于创建名称为name的模块,在本发明的一种应用示例中,可以提供创建模块接口的如下调用过程:
CREATEMODULE(2,EDPDCP,dpdcp); (10)
上述调用过程(10)可用于创建标识名称为EDPDCP、名称为dpdcp的模块,以及该模块的优先级为2。其中,模块的标识名称作为该模块的身份ID,唯一标识该模块;pri表示模块的优先级,优先级高的线程会被优先调用,例如,可以配置1-10个优先级,1表示优先级最低,10表示优先级最高。本发明对具体的优先级配置方法不做具体限制。
综上,本实施例提供了创建第二功能模块的方案,该方案可以通过第二初始化接口和第二消息处理接口和创建模块接口方便地创建第二功能模块,并且,在创建模块前可以声明第二功能模块在运行时所需的交互资源,以获得操作系统为其分配的交互资源,如堆栈长度等等。
当然,创建第二功能模块的方案也可用于创建第一功能模块等其他功能模块,以第一功能模块的创建为例,可以通过第一初始化接口和第一消息处理接口和创建模块接口方便地创建第一功能模块。
实施例三
为使本领域技术人员更好地理解本发明,参见图5,示出了对第二功能模块dpdcp和第一功能模块drlc进行合并的方法示例的步骤流程图,具体可以包括:
步骤501、创建一个名称为dpdcp、标识名称为DPDCP的第二功能模块及对应的当前线程,并在创建第二功能模块dpdcp的过程中对第二功能模块dpdcp进行声明以申请第二功能模块dpdcp的交互资源;
其中,创建一个名称为dpdcp、标识名称为DPDCP的第二功能模块的过程具体可以包括:配置第二功能模块dpdcp的第二初始化接口和第二消息处理接口,对第二功能模块进行声明以申请第二功能模块的交互资源;具体可以通过如下调用过程实现:
void dpdcp_init(void); (11)
int dpdcp_entry(U15usSrcModuleId,U15usMsgId,U15usDstModuleId,const void*pData,U15usLength); (12)
DECLMODULE(dpdcp,32000); (13)
CREATEMODULE(2,EDPDCP,dpdcp); (14)
步骤502、创建一个名称为drlc、标识名称为DRLC的第一功能模块,并在创建过程中配置第一功能模块的第一消息处理接口;
其中,创建一个名称为drlc、标识名称为DRLC的第一功能模块的过程具体可以包括:配置第一功能模块drlc的第一初始化接口和第一消息处理接口,对第一功能模块进行共享声明;具体可以通过如下调用过程实现:
void drlc_init(void); (15)
int rlc_entry(U15 usSrcModuleId,U15 usMsgId,U15 usDstModuleId,const void*pData,U15 usLength); (16)
DECLMODULE_COMBINE(drlc); (17)
其中,DECLMODULE_COMBINE(name)可以用于表示预置的声明合并模块接口,其可用于对第一功能模块进行共享声明,用于声明第一功能模块的名称,以及表明第一功能模块在运行时共享其它功能模块的交互资源,其输入参数name可以为第一功能模块的名称。
步骤503、通过第一消息处理接口,将第一功能模块drlc与第二功能模块dpdcp的交互资源进行关联;
步骤504、根据交互资源,将第一功能模块drlc合并到第二功能模块dpdcp对应的当前线程,使得当前线程从交互资源中获取其他线程发送的消息时,依据消息中携带的目的地址识别消息对应的功能模块,并运行识别出的功能模块。
在实际应用中,可以调用预置的合并模块接口将第一功能模块和第二功能模块关联到同一线程,具体的调用过程如下:
COMBINEMODULE(EDPDCP,EDRLC,drlc); (18)
合并后,第二功能模块dpdcp与第一功能模块drlc可以共用第二功能模块dpdcp的共享交互资源,第二功能模块dpdcp通过第一消息处理接口和交互资源实现线程间的通信,第一功能模块drlc通过第二消息处理接口和交互资源实现线程间的通信;两个功能模块共享交互资源,例如共享一个消息队列,但是在应用层,看到的还是两个功能模块通过各自的消息处理接口处理各自的消息。
需要说明的是,本发明实施例中以两个功能模块的合并进行了说明,但是,在实际应用中,对于多个功能模块的合并也同样适用,例如在对于三个功能模块进行合并时,可以先将其中的两个功能模块进行合并,再将合并后的模块与第三个功能模块进行合并等等。
在本发明实施例中,可以通过在系统初始化阶段,调用平台层线程合并接口将原本在多个线程中运行的多个功能模块合并为在一个线程中运行的第二功能模块,使该多个功能模块共用一个线程的交互资源,对于原有的消息交互接口不需要修改即可实现原有的机制,可以方便的进行多线程优化,从而减少线程间的切换,从而提高系统的性能。
实施例四
参见图6,示出了本发明的一种系统性能优化的方法实施例四的步骤流程图,具体可以包括如下步骤:
步骤601、通过配置第一功能模块的第一消息处理接口,将第一功能模块与第二功能模块的交互资源进行关联;
步骤602、根据交互资源,将第一功能模块合并到第二功能模块对应的当前线程,使得当前线程从交互资源中获取其他线程发送的消息时,依据消息中携带的目的地址识别消息对应的功能模块,并运行识别出的功能模块;
步骤603、统计CPU平均负载,并根据统计结果评估系统性能。
本实施例中,CPU平均负载所包含的信息不是CPU的使用率状况,而是CPU在一段时间内处于运行或不可阻断的进程数的统计信息,也就是CPU使用队列的长度的统计信息,通常来说,CPU在一段时间内处于运行或不可阻断的进程数越小越好。
在本发明的一种应用示例中,可以将本发明系统性能的优化方法应用于LTE(长期演进,Long Term Evolution)技术,搭建一套LTE Smallcell系统,并且对该系统进行了系统性能的评估,确定最终的优化方案。
参见图7,示出了LTE Smallcell系统的模块结构示意图。其中,各模块的功能与说明如下:
(1)、MC(总控制,Master Control)模块控制,负责初始化各个软件模块,完成系统初始启动流程;
(2)、OAM(操作、管理和维护,Operations,Administration andMaintenance)模块用于与操作维护软件交互消息的处理;
(3)、UDP(用户数据包协议,User Data Protocol)模块用于接收操作维护软件发送过来的消息;
(4)、RRM(无线资源管理,Radio Resource Management)模块用于无线资源管理;
(5)、RRC(无线资源控制,Radio Resource Control)模块用于无线资源控制;
(6)、TXRLC&MAC模块用于实现MAC(多路访问控制,Multiple AccessControl)协议栈和RLC(无线链路控制,Radio Link Control)协议栈的发送侧功能;
(7)、RXRLC(无线链路控制协议栈接收侧模块,Received Radio LinkControl)用于实现RLC协议栈的接收侧功能;
(8)、RXPDCP(分组数据汇聚协议接收侧模块,Received Packet DataConvergence Protocol)用于实现PDCP(分组数据汇聚协议,Packet DataConvergence Protocol)协议栈的接收侧功能;
(9)、TXPDCP模块用于实现PDCP协议栈的发送侧功能;
(10)、IPGW(网关模块,Internet Protocol Gateway)用于实现GTPU(GPRS隧道协议用户面,GPRS Tunneling Protocol User Plane)协议栈的功能;
(11)、SCTP(流控制传输协议,STREAM CONTROL TRANSMISSIONPROTOCOL)模块用于与EPC(分组核心演进,Evolved Packet Core)的交互功能;
(12)、OTHERS模块包含输出信息的发送等功能。
LTE Smallcell系统的工作流程具体可以包括:
RXRLC模块在收到RLC PDU(分组数据单元,Packet Data Unit)后,对于STATUS PDU转发给TXRLC模块,对于数据PDU如果没有乱序直接重组出RLC SDU(服务数据单元,Sevice Data Unit),如果有乱序则申请RLCPDU buffer(缓冲寄存器)备份数据,之后释放MAC PDUbuffer;RLC PDUbuffer需要待乱序解除并重组SDU后释放。RXRLC模块需要申请RLC SDUbuffer,并通过RXRLC_RXPDCP_DATA_IND(RXRLC模块发给RXPDCP模块的数据指示消息标识名称)交给RXPDCP模块;其中,RXRLC的ARQ(自动重传处理,Automatic Repeat-reQuest)处理,主要是触发STATUS PDU,并转发给TXRLC模块,由MAC下行调度发给对等端;
RXPDCP模块收到PDCP PDU后进行解密等操作解出PDCP SDU,通过RXPDCP_IPGW_DATA_IND(RXPDCP模块发给IPGW模块的数据指示消息标识名称)将PDCP SDU地址发给IPGW模块;
IPGW模块进行相关处理后将数据发给EPC。
可以看出,RXRLC、RXPDCP和IPGW三个功能模块对于数据的处理实际上是串行执行的,其中,IPGW模块需要等待RXPDCP模块的处理结果,而RXPDCP模块需要等待RXRLC模块的处理结果。然而,在现有技术中,RXRLC、RXPDCP和IPGW三个功能模块使用三个不同的线程资源,三个线程并行执行,但是,由于这三个线程执行的模块操作实际上是流水线的关系,并行执行不仅没能提高执行的效率,反而因为线程间的切换而影响系统的性能。因此,在本发明实施例中,将三个功能模块进行合并,共同使用一个线程资源,并且通过评估系统性能,得出的结果为CPU的平均负载减少了6%,说明对于RXRLC、RXPDCP和IPGW三个功能模块的合并优化了系统性能。
实施例五
参照图8,示出了本发明的一种系统性能优化的方法实施例五的步骤流程图,具体可以包括如下步骤:
步骤801、通过配置第一功能模块的第一消息处理接口,将第一功能模块与第二功能模块的交互资源进行关联;
步骤802、根据交互资源,将第一功能模块合并到第二功能模块对应的当前线程,使得当前线程从交互资源中获取其他线程发送的消息时,依据消息中携带的目的地址识别消息对应的功能模块,并运行识别出的功能模块;
步骤803、在申请第二功能模块的交互资源时,将第二功能模块对应的当前线程的优先级提升到允许访问该交互资源的所有线程中的最高优先级。
在实际应用中,线程的优先级越高,就可以分占相对多的CPU时间片。每个线程都有相应的优先级,优先级决定它何时运行和占用CPU时间片。一般系统线程的优先级是固定的,但是如果出现优先级翻转问题,就需要动态地改变线程的优先级次序。
所谓优先级翻转,即当一个高优先级任务通过信号量机制访问交互资源时,该信号量已被一个低优先级任务占有,而这个低优先级任务在访问交互资源时可能又被其它一些中等优先级任务抢先,因此造成高优先级任务被许多具有较低优先级任务阻塞,实时性难以得到保证。
例如,有优先级为A、B和C三个线程,优先级A>B>C,线程A,B处于挂起状态,等待某一事件发生,线程C正在运行,此时线程C开始使用某一交互资源S。在使用中,线程A等待事件到来,线程A转为就绪态,因为它比线程C的优先级高,所以可以立即执行。当线程A要使用交互资源S时,由于其正在被线程C使用,因此线程A被挂起,线程C开始运行。如果此时线程B等待的事件到来,则线程B转为就绪态。由于线程B优先级比线程C高,因此线程B开始运行,直到其运行完毕,线程C才开始运行。直到线程C释放交互资源S后,线程A才得以执行。在这种情况下,优先级发生了翻转,线程B先于线程A运行。
在这种情况下,需要对线程的优先级进行动态调整。具体地,在系统的调试阶段可以通过平台层封装的接口来动态改变线程的优先级次序,以达到线程优先级的最佳匹配方案。
具体地,可以提供平台层封装的接口的下述配置:
接口名称:cmd_set_sched_info,本接口用于设置线程的状态信息,具体参数配置参见表5;
表5
此外,除了通过平台层封装的接口来动态改变线程的优先级次序,在策略层面动态改变线程的优先级次序的方法可以包括:
当线程申请交互资源时,将线程的优先级提升到可以访问该资源的所有线程中的最高优先级。这个优先级称为该交互资源的优先级天花板。这种方法简单易行,不必进行复杂的判断,不管线程是否阻塞了高优先级线程的运行,只要线程访问交互资源都可以提升线程的优先级,使得当前访问交互资源的线程具有可以访问该资源的所有线程中的最高优先级,从而避免了线程优先级翻转的问题。在前述优先级翻转的示例中,可以通过优先级提升的方式,将线程C的优先级提升到最高,即C>A>B,这样就可以避免高优先级A等待低优先级B先执行的问题,因此,避免了线程优先级翻转的问题。
在本发明的一种优选实施例中,还可以采用下面的步骤代替步骤803来实现优先级的调整,具体可以包括:
当申请第一线程对应的功能模块的交互资源时,判断第一线程的优先级是否大于当前正在使用该交互资源的第二线程的优先级,若大于,则将第二线程的优先级提升到第一线程的优先级,并在第二线程释放该交互资源后,恢复第二线程的原先优先级;其中,第一线程、第二线程与当前线程可以为相同或者不同的线程。
这种方法称为优先级继承,适用于占有交互资源的低优先级线程阻塞了高优先级线程的情况,如果过程较复杂,则需要进行判断,使得占用交互资源的低优先级线程临时调整到适合的优先级次序,从而避免了线程优先级翻转的问题。
本发明实施例中,当发生优先级翻转的情况时,在平台层,可以通过调用封装的接口来动态改变线程的优先级次序;在策略层,可以通过优先级天花板或优先级继承的方法来动态改变线程的优先级次序。本发明提供的系统性能的优化方法可以根据实际情况动态改变线程的优先级次序,以达到线程优先级的最佳匹配方案,从而减轻线程调度的负担,进而提高系统的性能。
根据上述系统性能的优化方法,可构建一种系统性能优化的装置,该装置可通过配置第一功能模块的第一消息处理接口,将第一功能模块与第二功能模块的交互资源进行关联,且根据交互资源,将第一功能模块合并到第二功能模块对应的当前线程,使得当前线程从交互资源中获取其他线程发送的消息时,依据消息中携带的目的地址识别消息对应的功能模块,并运行识别出的功能模块。
参见图9,示出了本发明的一种系统性能优化的装置实施例的结构框图,具体可以包括:关联模块901和合并模块902;
其中,关联模块901,用于通过配置第一功能模块的第一消息处理接口,将第一功能模块与第二功能模块的交互资源进行关联;及
合并模块902,用于根据交互资源,将第一功能模块合并到第二功能模块对应的当前线程,使得当前线程从交互资源中获取其他线程发送的消息时,依据消息中携带的目的地址识别消息对应的功能模块,并运行识别出的功能模块。
在本发明的一种可选实施例中,装置还可以包括:
创建模块,用于在通过关联第一功能模块的第一消息处理接口与第二功能模块的交互资源关联,将第一功能模块合并到第二功能模块对应的当前线程的操作之前,创建第二功能模块及对应的当前线程,并在创建第二功能模块的过程中对第二功能模块进行声明以申请第二功能模块的交互资源。
在本发明的另一种可选实施例中,当前线程运行识别出的功能模块具体可以包括:
当消息中携带的目的地址与第一功能模块对应时,当前线程运行第一功能模块对消息进行处理;
当消息中携带的目的地址与第二功能模块对应时,当前线程运行第二功能模块对消息进行处理。
在本发明的再一种可选实施例中,装置还可以包括:
统计模块,用于统计CPU平均负载,并根据统计结果评估系统性能。
在本发明的又一种可选实施例中,装置还可以包括:
第一优先级调整模块,用于在申请第二功能模块的交互资源时,将第二功能模块对应的当前线程的优先级提升到允许访问该交互资源的所有线程中的最高优先级。
在本发明的一种可选实施例中,装置还可以包括:
第二优先级调整模块,用于当申请第一线程对应的功能模块的交互资源时,判断第一线程的优先级是否大于当前正在使用该交互资源的第二线程的优先级,若大于,则将第二线程的优先级提升到第一线程的优先级,并在第二线程释放该交互资源后,恢复第二线程的原先优先级;其中,第一线程、第二线程与当前线程为相同或者不同的线程。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种系统性能的优化方法和装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。