背景技术
基于对称多处理结构(Symmetric Multi-Processing,SMP)多核CPU架构上广泛使用的通用操作系统如Linux、Windows、Vxworks等,对定时中断的管理普遍采用固定中断源(HPET)的分配方式,即使用者在申请前必须确定本中断所绑定的定时器中断源,且用于中断响应的CPU核也是共享或随机的。
在这种机制下,在中断被执行时,如果本中断所绑定的定时器同时负责其它中断计时、或者执行此中断的CPU核上的任务过多,使得定时器或者CPU无暇顾及本中断,从而导致本中断响应延时的问题。
申请内容
本申请实施例提供了一种中断执行方法及装置,目的在于解决中断响应延时的问题。
为了实现上述目的,本申请实施例提供了以下技术方案:
一种中断执行方法,包括:
从多个CPU核中,确定当前负载非最大的CPU核;
从多个时钟源中,选定当前负载非最大的第一时钟源;
由所述当前负载非最大的CPU核、以所述第一时钟为中断定时器,执行第一中断。
可选地,所述从多个CPU核中,确定当前负载非最大的CPU核包括:
按照先扫描执行中断任务的CPU核,后扫描执行非中断任务的CPU核的顺序:统计CPU核i上的中断源许可标识和任务节点,CPU核i的被占用权值=中断源许可标识的数量*第一数值+任务节点的数量*第二数值,其中,所述第一数值和所述第二数值均大于1,i=1、2……N,N为大于1的整数,表示系统中CPU核的数量;
确定所述N个CPU核中、被占用权值最小的CPU核为当前负载最小的CPU核。
可选地,所述从多个时钟源中,选定第一时钟源包括:
按照先扫描独占时钟源后扫描共享时钟源的顺序:统计时钟源i的状态标识,钟源i的空闲权值=未被使用状态标识的数量*第三数值+未被共享状态标识的数量*第四数值,其中,所述第三数值和所述第四数值均大于1,i=1、2……M,M为大于1的整数,表示系统中CPU时钟源的数量;
从所述M个时钟源中,选择空闲权值最大的时钟源为当前负载最小的第一时钟源。
可选地,在所述由所述当前负载非最大的CPU核、以所述第一时钟为中断定时器,执行第一中断之前,还包括:
将所述当前负载最小的CPU核注册的非第一中断过程的其它任务迁移到其它CPU核上。
可选地,所述从多个CPU核中,确定当前负载非最大的CPU核,从多个时钟源中,选定当前负载非最大的第一时钟源包括:
以预设周期,确定当前负载最小的CPU核,从多个时钟源中,选定当前负载最小的第一时钟源。
一种中断执行装置,包括:
CPU确定模块,用于从多个CPU核中,确定当前负载非最大的CPU核;
时钟选定模块,用于从多个时钟源中,选定当前负载非最大的第一时钟源;
中断执行模块,用于由所述当前负载非最大的CPU核、以所述第一时钟为中断定时器,执行第一中断。
可选地,所述CPU确定模块包括:
第一计算单元,用于按照先扫描执行中断任务的CPU核,后扫描执行非中断任务的CPU核的顺序:统计CPU核i上的中断源许可标识和任务节点,CPU核i的被占用权值=中断源许可标识的数量*第一数值+任务节点的数量*第二数值,其中,所述第一数值和所述第二数值均大于1,i=1、2……N,N为大于1的整数,表示系统中CPU核的数量;
第一确定单元,用于确定所述N个CPU核中、被占用权值最小的CPU核为当前负载最小的CPU核。
可选地,所述时钟选定模块包括:
第二计算单元,用于按照先扫描独占时钟源后扫描共享时钟源的顺序:统计时钟源i的状态标识,钟源i的空闲权值=未被使用状态标识的数量*第三数值+未被共享状态标识的数量*第四数值,其中,所述第三数值和所述第四数值均大于1,i=1、2……M,M为大于1的整数,表示系统中CPU时钟源的数量;
第二确定单元,用于从所述M个时钟源中,选择空闲权值最大的时钟源为当前负载最小的第一时钟源。
可选地,还包括:
迁移模块,用于在所述由所述当前负载非最大的CPU核、以所述第一时钟为中断定时器,执行第一中断之前,将所述当前负载最小的CPU核注册的非第一中断过程的其它任务迁移到其它CPU核上。
可选地,所述CPU确定模块,用于从多个CPU核中,确定当前负载非最大的CPU核包括:
所述CPU确定模块具体用于,以预设周期、从多个CPU核中,确定当前负载最小的CPU核;
所述时钟选定模块,用于从多个时钟源中,选定当前负载非最大的第一时钟源包括:
所述时钟选定模块具体用于,以预设周期、从多个时钟源中,选定当前负载最小的第一时钟源。
本申请实施例所述的中断执行方法及装置,通过确定当前负载非最大的CPU核、以及负载非最大的时钟源的方式,由当前负载非最大的CPU核、以负载非最大的时钟为中断定时器,执行第一中断,所以,与现有技术相比,可以降低中断被延时响应的可能性。
具体实施方式
本申请实施例公开了一种中断执行方法及装置,可以应用于基于对称多处理结构(Symmetric Multi-Processing,SMP)多核CPU架构上广泛使用的通用操作系统如Linux、Windows、Vxworks等,可以应用在大型复杂业务模型的多模型并发集群仿真或特殊定制平台的高精度实时仿真这两种应用场景中,在通用平台上实现0.05mS--1mS之间的系统仿真周期。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例公开的一种中断执行方法,如图1所示,包括以下步骤:
S101:从多个CPU核中,确定当前负载非最大的CPU核;
S102:从多个时钟源中,选定负载非最大的第一时钟源;
本实施例中,所述时钟可以为高精度时钟。
S103:由所述当前负载非最大的CPU核、以所述第一时钟为中断定时器,执行第一中断。
在现有技术中,需要上层编程人员为中断指定时钟源,且执行中断的CPU核为共享或随机分配的,因为系统中的时钟源和CPU核通常情况下执行多线任务,所以,在时钟源或者CPU核负载过大的情况下,其剩余资源不足以支撑中断的执行,则会暂缓执行中断,待其被占用的资源被释放后,才能执行中断,因此,中断会被延迟执行,从而对终端响应的实时性产生延迟时间漂移,给系统的响应速度带来很大的不确定性。
而本实施例所述方法,由当前负载非最大的CPU核、以负载非最大的时钟为中断定时器,执行第一中断,因此,能够避免对负载最大的CPU和以及时钟源的使用,从而有效避免中断被延时的情况。
在上述实施例中,为了达到避免中断被延时执行的最优效果,可以选择负载最小的CPU核及时钟源,本申请实施例公开的又一种中断执行方法,如图2所示,包括步骤:
S201:按照先扫描执行中断任务的CPU核,后扫描执行非中断任务的CPU核的顺序:统计CPU核i上的中断源许可标识和任务节点;
其中,i=1、2……N,N为大于1的整数,表示系统中CPU核的数量。
S202:计算CPU核i的被占用权值=中断源许可标识的数量*第一数值+任务节点的数量*第二数值;
其中,所述第一数值和所述第二数值均大于1,本实施例中,第一数值可以为10,第二数值可以为5。从计算被占用权值的公式可以看出,被占用权值越大,CPU核的负载越大。
S203:确定所述N个CPU核中、被占用权值最小的CPU核为当前负载最小的CPU核;
S204:按照先扫描独占时钟源后扫描共享时钟源的顺序,统计时钟源i的状态标识;
其中,i=1、2……M,M为大于1的整数,表示系统中CPU时钟源的数量。
S205:计算钟源i的空闲权值=未被使用状态标识的数量*第三数值+未被共享状态标识的数量*第四数值;
其中,所述第三数值和所述第四数值均大于1,本实施例中,第三数值和第四数值都可以为10。从上述计算空闲权值的公式可以看出,空闲权值越大,时钟源的负载越小。
S206:从所述M个时钟源中,选择空闲权值最大的时钟源为负载最小的第一时钟源;
S207:由当前负载最小的CPU核、以第一时钟为中断定时器,执行第一中断。
本实施例中,因为执行中断的CPU核的负载在系统中所有的CPU核中最小,时钟源的负载同样为系统中多个时钟源中最小,因此,能够最下限度提升中断执行的实时控制精度。
并且,因为依据负载选用CPU核和时钟源,所以,使得仿真模型编程人员可以从为中断分配时钟源和CPU核的工作中解脱出来,对编程人员的操作系统平台业务知识的要求更低,从而使得仿真平台的应用更为便捷。
图3为本申请实施例公开的又一种中断执行方法,包括:
S301:以预设周期,确定当前负载最小的CPU核,并从多个时钟源中,选定第一时钟源;
确定当前负载最小的CPU核以及选定第一时钟源的方法可以参见上述实施例,这里不再赘述。
本实施例中,以预设周期确定当前负载最小的CPU核以及选定第一时钟源,可以使得系统保持对CPU核以及时钟源的负载的监控,在需要进行中断时,可以更快地确定出当前负载最小的CPU核以及第一时钟源,从而更能够保证中断控制的实时性。
S302:将所述当前负载最小的CPU核注册的非第一中断过程的其它任务迁移到其它CPU核上;
此步骤的优点在于,当前负载最小的CPU核上的其它任务启动时,可能会造成此CPU核的繁忙,从而增大此CPU核的负载,在此情况下,由此CPU核的执行的中断可能还有被延时或丢失,而将其中的其它任务迁出,则可以避免上述问题。
S303:由所述当前负载最小的CPU核、以所述第一时钟为中断定时器,执行第一中断。
本实施例所述的方法,对系统中的CPU核和时钟源的负载情况进行周期性监控,并且对负载最小的CPU核进行了进一步优化,更能保证中断的实时控制。
申请人在研究的过程中通过仿真发现,本申请中实施例所述方法,实现方式灵活高效,在不损害系统架构和兼容性的前提下,可以将系统仿真模型的实时调度时间控制在uS级的水平。在大型通用平台上实现了传统的小型定制平台才能达到的控制级别,且能凸显通用平台的多模型并行仿真解算和与仿真软件工具平台保持最大程度的兼容性的优势。
与上述方法实施例相对应的,本申请实施例还公开了一种中断执行装置,如图4所示,包括:
CPU确定模块401,用于从多个CPU核中,确定当前负载非最大的CPU核;
时钟选定模块402,用于从多个时钟源中,选定负载非最大的第一时钟源;
具体地,CPU确定模块可以以预设周期、从多个CPU核中,确定当前负载最小的CPU核,所述时钟选定模块也可以以预设周期、从多个时钟源中,选定负载最小的第一时钟源。
中断执行模块403,用于由所述当前负载非最大的CPU核、以所述第一时钟为中断定时器,执行第一中断。
其中,可选地,所述CPU确定模块401可以具体包括:
第一计算单元4011,用于按照先扫描执行中断任务的CPU核,后扫描执行非中断任务的CPU核的顺序:统计CPU核i上的中断源许可标识和任务节点,CPU核i的被占用权值=中断源许可标识的数量*第一数值+任务节点的数量*第二数值,其中,所述第一数值和所述第二数值均大于1,i=1、2……N,N为大于1的整数,表示系统中CPU核的数量;
第一确定单元4012,用于确定所述N个CPU核中、被占用权值最小的CPU核为当前负载最小的CPU核。
所述时钟选定模块402包括:
第二计算单元4021,用于按照先扫描独占时钟源后扫描共享时钟源的顺序:统计时钟源i的状态标识,钟源i的空闲权值=未被使用状态标识的数量*第三数值+未被共享状态标识的数量*第四数值,其中,所述第三数值和所述第四数值均大于1,i=1、2……M,M为大于1的整数,表示系统中CPU时钟源的数量;
第二确定单元4022,用于从所述M个时钟源中,选择空闲权值最大的时钟源为第一时钟源。
进一步地,本实施例所述装置,还可以包括:迁移模块404,用于在所述由所述当前负载非最大的CPU核、以所述第一时钟为中断定时器,执行第一中断之前,将所述当前负载最小的CPU核注册的非第一中断过程的其它任务迁移到其它CPU核上。
本申请实施例所述的中断执行装置,通过确定当前负载非最大的CPU核、以及负载非最大的时钟源的方式,由当前负载非最大的CPU核、以负载非最大的时钟为中断定时器,执行第一中断,所以,与现有技术相比,可以降低中断被延时响应的可能性。
本申请实施例方法所述的功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算设备可读取存储介质中。基于这样的理解,本申请实施例对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一台计算设备(可以是个人计算机,服务器,移动计算设备或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。