一种基于共享内存的高性能仿真系统实现方法转让专利

申请号 : CN201210580051.7

文献号 : CN103077068B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 杨晨柴旭东侯宝存张智慧

申请人 : 北京仿真中心

摘要 :

本发明公开了一种基于共享内存的高性能仿真系统实现方法,包括构建运行支撑环境,该支撑运行环境包括CRC模块、LRC模块和共享内存管理接口模块;基于实时操作系统和CPU独占策略初始化所述仿真系统;基于所述共享内存管理接口模块开辟所述共享内存区;通过所述共享内存区进行时间维护;通过所述共享内存区进行数据交互。本发明能够实现仿真系统的高效快速运行,其突出特点是仿真系统每个周期推进时间能够达到微秒量级,本发明技术方案将有良好的产业化前景。

权利要求 :

1.一种基于共享内存的高性能仿真系统实现方法,其特征在于,包括以下步骤:S1、构建运行支撑环境,该运行支撑环境包括CRC模块、LRC模块和共享内存管理接口模块;所述LRC模块用于基于共享内存通信方式自主计算本联邦成员的时戳下限、更新仿真时间以及分发与管理数据;所述共享内存管理接口模块用于管理共享内存区并维护共享内存地址的一致性;所述CRC模块为核心RTI模块,用于负责全局性的联邦管理和时间管理;所述LRC模块为本地RTI模块,用于为本地联邦成员提供服务调用接口;

S2、基于实时操作系统和CPU独占策略初始化所述仿真系统,该步骤S2包括:S21、基于实时操作系统的中断屏蔽技术,将多核SMP服务器上的任一CPU处理核指定为不响应所有的中断;

S22、指定联邦成员或所述CRC模块进程任务独占该CPU处理核;

S23、通过所述LRC模块设置其联邦成员的参数,该参数包括时间推进类型、前瞻量、公布订购对象类、公布订购交互类;

S3、基于所述共享内存管理接口模块开辟所述共享内存区,该步骤S3、包括:S31、创建请求消息共享内存队列,请求消息共享内存队列用于存储RTI大使向所述CRC模块发送的请求消息;

S32、创建接收顺序消息共享内存队列,接收顺序消息共享内存队列用于存储所述CRC模块向RTI大使发送的不带时戳消息;

S33、创建时戳顺序消息共享内存队列,时戳顺序消息共享内存队列用于存储所述CRC模块向RTI大使发送的带时戳消息队列;

S34、创建联邦成员信息共享内存队列,联邦成员信息共享内存队列用于存储联邦信息和时间推进类型;

S35、创建时间推进请求信息共享内存队列,时间推进请求信息共享内存队列用于存储请求推进时间量;

S36、创建数据交互共享内存区,数据交互共享内存区用于存储联邦成员对象实例属性或交互实例参数的具体数据内容;

S4、通过所述共享内存区进行时间维护;

S5、通过所述共享内存区进行数据交互。

2.根据权利要求1所述的基于共享内存的高性能仿真系统实现方法,其特征在于,所述通过所述共享内存区进行时间维护进一步包括以下步骤:当第i个联邦成员加入或退出联邦时,所述CRC模块向其他联邦成员通知该第i个联邦成员的时间推进类型;

当所述第i个联邦成员的时间推进类型为时间控制且受限型时,该所述第i个联邦成员通过所述时间推进请求信息共享内存队列分别读取第j个联邦成员的请求推进时间量Tj+Lookaheadj;

所述第i个联邦成员计算自己的时戳下限LBTSi;

所述第i个联邦成员处理它在所述接收顺序消息共享内存队列中的所有所述不带时戳消息,以及处理它在所述时戳顺序消息共享内存队列中的时戳小于等于时戳下限LBTSi的带时戳消息;

判断所述第i个联邦成员当前的请求推进时间量Ti+Lookaheadi是否小于等于所述时戳下限LBTSi,如果是,则将所述第i个联邦成员的仿真时间更新到Ti+Lookaheadi,该第i个联邦成员切换为待接收模式;如果否,则返回所述第i个联邦成员计算自己的时戳下限LBTSi;

其中,i=1,2,……n,j=1,2,……n,n为联邦成员的个数,并且第j个联邦成员是影响所述第i个联邦成员的调节型联邦成员。

3.根据权利要求2所述的基于共享内存的高性能仿真系统实现方法,其特征在于,所述通过所述共享内存区进行数据交互进一步包括以下步骤:将要订购的所述对象实例属性或交互实例参数分为具体数据内容和其在所述数据交互共享内存区内的指针;

公布成员将所述具体数据内容写入所述数据交互共享内存区,并将所述指针与该具体数据内容的长度通过所述请求消息共享内存队列传给所述CRC模块;

所述CRC模块将所述指针和所述长度传给订购成员;

所述订购成员根据所述指针和所述长度读取所述数据交互共享内存区中的所述具体数据内容。

说明书 :

一种基于共享内存的高性能仿真系统实现方法

技术领域

[0001] 本发明涉及一种高性能仿真系统的实现方法。更具体地,本发明涉及适应于具有共享内存特点计算环境的高性能仿真系统的实现方法。

背景技术

[0002] 目前,电力控制仿真系统、飞行器空气动力学模拟实验仿真系统等半实物仿真系统对实时性要求比较高,甚至达到了微秒级。这些半实物仿真系统一般包含多个子系统以协作完成仿真任务,而现有的协同软件HLA/RTI软件主要基于UDP或TCP通信协议运行,难以满足高性能需求。HLA是High Level Architecture,分布式仿真高层体系结构的简称,HLA的基本思想就是使用面向对象的方法,设计、开发及实现系统不同层次和粒度的对象模型,来获得仿真部件和仿真系统高层次上的互操作性与可重用性。RTI(Run Time Infrastructure)是运行支撑环境,是HLA接口规范的具体实现,是HLA的核心部件。RTI包括本地RTI模块(Local RTI Component,以下简称LRC),它为本地联邦成员提供一个服务调用接口,这个接口叫做RTI大使(RTI Ambassador)并保持一个联邦成员的回调接口,称之为联邦成员大使(Federation Ambassador),RTI还包括核心RTI模块(Core RTI Component,以下简称CRC),负责全局性的联邦管理和时间管理。
[0003] 现有技术中已出现了一些基于共享内存方式的RTI实现,但结合联邦管理服务、声明管理服务、对象管理服务、时间管理服务、所有权管理服务、数据交互管理服务六大类管理服务深入挖掘共享内存变化带来的优势,同时充分利用多核计算能力的仿真系统实现方法较少,况且近年来多核技术飞速发展,一个CPU上可以有几个甚至几十个计算核,市场上涌现出大量多核计算机,特别是基于多核技术的高端服务器。
[0004] 针对上述问题,结合基于共享内存的多核高效能计算环境的特点,迫切需要一种基于共享内存的高性能仿真系统实现方法,以促进仿真系统实时性的提高。

发明内容

[0005] 本发明目的在于提供一种基于共享内存的高性能仿真系统实现方法,解决现有协同仿真系统的实时性瓶颈问题。
[0006] 该方法包括以下步骤:
[0007] 构建运行支撑环境,该运行支撑环境包括CRC模块、LRC模块和共享内存管理接口模块;所述LRC模块用于基于共享内存通信方式自主计算本联邦成员的时戳下限、更新仿真时间以及分发与管理数据;所述共享内存管理接口模块用于管理共享内存区并维护共享内存地址的一致性;
[0008] 基于实时操作系统和CPU独占策略初始化所述仿真系统;
[0009] 基于所述共享内存管理接口模块开辟所述共享内存区;
[0010] 通过所述共享内存区进行时间维护;
[0011] 通过所述共享内存区进行数据交互。
[0012] 进一步地,所述基于实时操作系统和CPU独占策略初始化所述仿真系统包括以下步骤:
[0013] 基于实时操作系统的中断屏蔽技术,将多核SMP服务器上的任一CPU处理核指定为不响应所有的中断;
[0014] 指定联邦成员或所述CRC模块进程任务独占该CPU处理核;
[0015] 通过所述LRC模块设置其联邦成员的参数,该参数包括时间推进类型、前瞻量、公布订购对象类、公布订购交互类。
[0016] 进一步地,所述基于所述共享内存管理接口模块开辟所述共享内存区包括以下步骤:
[0017] 创建请求消息共享内存队列,该请求消息共享内存队列用于存储RTI大使向所述CRC模块发送的请求消息;
[0018] 创建接收顺序消息共享内存队列,该接收顺序消息共享内存队列用于存储所述CRC模块向RTI大使发送的不带时戳消息;
[0019] 创建时戳顺序消息共享内存队列,该时戳顺序消息共享内存队列用于存储所述CRC模块向RTI大使发送的带时戳消息队列;
[0020] 创建联邦成员信息共享内存队列,该联邦成员信息共享内存队列用于存储联邦信息和时间推进类型;
[0021] 创建时间推进请求信息共享内存队列,该时间推进请求信息共享内存队列用于存储请求推进时间量;
[0022] 创建数据交互共享内存区,该数据交互共享内存区用于存储联邦成员对象实例属性或交互实例参数的具体数据内容。
[0023] 进一步地,所述通过所述共享内存区进行时间维护进一步包括以下步骤:
[0024] 当第i个联邦成员加入或退出联邦时,所述CRC模块向其他联邦成员通知该第i个联邦成员的时间推进类型;
[0025] 当所述第i个联邦成员的时间推进类型为时间控制且受限型时,该所述第i个联邦成员通过所述时间推进请求信息共享内存队列分别读取第j个联邦成员的请求推进时间量Tj+Lookaheadj;
[0026] 所述第i个联邦成员计算自己的时戳下限LBTSi;
[0027] 所述第i个联邦成员处理它在所述接收顺序消息共享内存队列中的所有所述不带时戳消息,以及处理它在所述时戳顺序消息共享内存队列中的时戳小于等于时戳下限LBTSi的所述带时戳消息;
[0028] 判断所述第i个联邦成员当前的请求推进时间量Ti+Lookaheadi是否小于等于所述时戳下限LBTSi,如果是,则将所述第i个联邦成员的仿真时间更新到Ti+Lookaheadi,该第i个联邦成员切换为待接收模式;如果否,则返回所述第i个联邦成员计算自己的时戳下限LBTSi;
[0029] 其中,i=1,2,……n,j=1,2,……n,n为联邦成员的个数,并且第j个联邦成员是影响所述第i个联邦成员的调节型联邦成员。
[0030] 进一步地,所述通过所述共享内存区进行数据交互进一步包括以下步骤:
[0031] 将要订购的所述对象实例属性或交互实例参数分为具体数据内容和其在所述数据交互共享内存区内的指针;
[0032] 公布成员将所述具体数据内容写入所述数据交互共享内存区,并将所述指针与该具体数据内容的长度通过所述请求消息共享内存队列传给所述CRC模块;
[0033] 所述CRC模块将所述指针和所述长度传给订购成员;
[0034] 所述订购成员根据所述指针和所述长度读取所述数据交互共享内存区中的所述具体数据内容。
[0035] 本发明能够实现仿真系统的高效快速运行,其突出特点是仿真系统每个周期推进时间能够达到微秒量级,该发明适用于构建高性能仿真系统,特别是有半实物参与的软实时仿真系统,本发明技术方案将有良好的产业化前景。

附图说明

[0036] 下面将参照附图并结合实施例对本发明进行具体说明。
[0037] 图1本发明方法基本流程图。

具体实施方式

[0038] 下面参照附图并借助本发明的实施例,对本发明的技术方案做详细描述。
[0039] 如图1所示,一种基于共享内存的高性能仿真系统实现方法的具体步骤为:
[0040] 步骤S1、构建运行支撑环境,该运行支撑环境包括CRC模块、LRC模块和共享内存管理接口模块。所述CRC模块负责联邦管理、对象管理中的全局名及全局标识管理、所有权管理以及时间管理中的仿真联邦成员时间类型设置工作。所述LRC模块,除负责RO消息队列处理、TSO消息队列排序、消息处理、数据更新交互外,还用于基于共享内存通信方式自主计算本联邦成员的时戳下限(Lower Bound Time Stamp,以下简称LBTS)、更新仿真时间以及分发与管理数据。共享内存管理接口模块,对外提供对共享内存区块的统一分配和管理,并维护共享内存地址的一致性,这里地址一致性是指多个内存区块之间访问时会映射到统一的地址空间内本发明的所述支撑环境统一使用所述共享内存管理接口模块创建共享内存区。RO(Receive Order)是指消息以接收顺序传递,RO消息也可称为不带时戳消息;TSO(Time Stamp Order)是指消息以时戳顺序传递,TSO消息也可称为带时戳消息。
[0041] 所述CRC模块主要负责联邦管理、对象管理中的全局名及全局标识管理、所有权管理以及时间管理中的仿真联邦成员时间类型设置等工作。在本发明中,现有CRC的功能被部分地分解到LRC中进行并行处理了,这样可以降低CRC全局工作的瓶颈。
[0042] 步骤S2、基于实时操作系统和CPU独占策略初始化所述仿真系统。
[0043] 为了保证高性能仿真中纳秒级读取共享内存的通信速度要求,基于实时操作系统的中断屏蔽技术,将多核SMP(即Symmetrical Multi-Processing,对称多处理的简称)服务器上的任一CPU处理核指定为不响应所有的中断,同时指定联邦成员或所述CRC模块进程任务独占该CPU处理核。
[0044] 各联邦成员被分配执行后,通过所述LRC模块完成了其参数的初始化设置,这些设置包括:
[0045] >,这些信息组成了仿真成员初始化的所有要素,其中元素的语义分别为联邦仿真系统的名称,仿真成员名称,Fom(Federation object model,即联邦对象模型)文件,Fom文件路径,时间推进类型,前瞻量,推进步长,公布订购对象类,公布订购交互类,<注册实例名称,对象类名称>。
[0046] 上述初始化信息密切关系到共享内存区的开辟,特别是其中的时间推进类型、前瞻量、公布订购对象类和/或公布订购交互类等。
[0047] 步骤S3、基于所述共享内存管理接口模块开辟共享内存区。也就是通过共享内存管理接口模块创建共享内存区的各个共享内存区块,建立所述CRC模块、所述LRC模块以及联邦成员之间的高速通信链路,进一步包括:
[0048] (1)创建请求消息共享内存队列,该请求消息共享内存队列用于存储RTI大使向所述CRC模块发送的请求消息,所用共享内存名为“RTI_SMB_i”,其中,i表示第i个联邦成员,i=1,2,…,n-1,n,n为联邦成员的数量;
[0049] (2)创建接收顺序消息共享内存队列,该接收顺序消息共享内存队列用于存储CRC模块向RTI大使发送的不带时戳消息,所用共享内存名为“RO_SMB_i”,其中i=1,2,…,n-1,n;
[0050] (3)创建时戳顺序消息共享内存队列,该时戳顺序消息共享内存队列用于存储CRC模块向RTI大使发送的带时戳消息队列,所用共享内存名为“TSO_SMB_i”,其中i=1,2,…,n-1,n;
[0051] (4)创建联邦成员信息共享内存队列,该联邦成员信息共享内存队列用于存储联邦信息和时间推进类型,所用共享内存名为“Federation_SMB”。所述CRC模块周知共享内存队列Federation_SMB,所述CRC模块通过该共享内存队列Federation_SMB进行联邦管理服务和时间管理服务中的仿真联邦成员的时间推进类型设置信息管理。
[0052] (5)创建时间推进请求信息共享内存队列,该时间推进请求信息共享内存队列用于存储请求推进时间量,所用共享内存名为“Federation_TL_SMB”,所述LRC模块通过读取该时间推进请求信息共享内存队列中的请求推进时间量,进行时间管理服务中并行计算联邦成员的LBTS。
[0053] (6)创建数据交互共享内存区,该数据交互共享内存区用于存储联邦成员对象实例属性或交互实例参数的具体数据内容,所用共享内存名为“UpdatingData_SMB_i”,所述CRC模块和所述LRC模块利用该数据交互共享内存区进行对象管理中联邦成员对象实例属性或交互实例参数的数据交互,并且进行数据分发管理中基于共享内存的订购成员并行数据过滤方法。
[0054] 步骤S4、通过所述共享内存区进行时间维护;以及步骤S5、通过所述共享内存区进行数据交互。仿真系统的高效运行需要时间维护和数据交互两方面处理的支持。
[0055] 步骤S4中,基于共享内存的高效时间管理算法中,当第i个联邦成员加入或退出联邦时,该第i个联邦成员的RTI大使向所述CRC模块发送请求消息,所述CRC模块将该第i个联邦成员的时间推进类型存入所述联邦成员信息共享内存队列Federation_SMB中,并通知其它成员该第i个联邦成员的时间推进类型是调节型的还是受控型的。
[0056] 在本发明中,联邦成员间的时间信息的分发不通过CRC模块,而是各成员通过对所述共享内存区的高速读写完成的。
[0057] 具体地,当所述第i个联邦成员的时间推进类型为时间控制且受限型时,该第i个联邦成员从所有影响它的第j个联邦成员的所述时间推进请求信息共享内存队列Federation_TL_SMB中分别读取推进时间量(Tj+Lookaheadj),其中,所述第j个联邦成员是影响所述第i个联邦成员的调节型联邦成员,j=1,2,……n且j≠i。时间控制型联邦成员是指该成员将影响其他成员;受限型联邦成员是指该成员受到其他成员的影响;时间控制和受限型的联邦成员既影响部分联邦成员又受部分联邦成员的影响。
[0058] 所述第i个联邦成员根据各个所述请求推进时间量Tj+Lookaheadj计算自己的LBTSi,也就是LBTSi=Min(Tj+Lookaheadj);然后该成员将处理自己的所述接收顺序消息共享内存队列RO_SMB_i中的所有不带时戳消息,以及所述时戳顺序消息共享内存队列TSO_SMB_i中所有时戳小于等于LBTSi的带时戳消息。
[0059] 判断所述第i个联邦成员当前的请求推进时间量Ti+Lookaheadi是否小于等于所述时戳下限LBTSi,如果其当前请求推进时间量Ti+Lookaheadi小于等于LBTSi,则更新该第i个联邦成员的仿真时间到(Ti+Lookaheadi),所述CRC模块调用联邦大使的时间推进允许回调函数,该第i个联邦成员退出tick函数切换为待接收模式;如果该第i个联邦成员的当前请求推进时间量Ti+Lookaheadi大于LBTSi,则返回所述第i个联邦成员计算自己的时戳下限LBTSi的步骤,重复执行上述过程。
[0060] 步骤S5中,为了有效利用共享内存通信方式,本发明将订购成员要订购的对象实例属性或者交互实例参数分为两部分:具体数据内容及其在共享内存区的指针,所述具体数据内容是对象实例属性的值或交互实例参数的值。公布成员将所述具体数据内容写入所述数据交互共享内存区UpdatingData_SMB_i,并将该具体数据内容在所述数据交互共享内存区UpdatingData_SMB_i的指针和长度进行传递。
[0061] 具体地,公布成员将对象实例属性的值或交互实例参数的值写入所述数据交互共享内存区UpdatingData_SMB_i,并将所述指针与该具体数据内容的长度通过所述请求消息共享内存队列RTI_SMB_i传给所述CRC模块。本发明具体实施方式是通过调用所述LRC模块的属性值更新函数或交互实例发送函数将所述指针和所述长度传给所述CRC模块的。
[0062] 接着所述CRC模块将所述指针和所述长度发送给订购该对象实例属性或者交互实例参数的订购成员,本发明具体实施方式是所述CRC模块通过反射属性值回调函数或接收交互实例回调函数将所述指针和所述长度发送给所述订购成员。
[0063] 然后所述订购成员根据该指针和该长度读取所述数据交互共享内存区UpdatingData_SMB_i中的所述具体数据内容从而更新对象实例属性值或交互实例参数值。
[0064] 应当理解,以上借助优选实施例对本发明的技术方案进行的详细说明是示意性的而非限制性的。本领域的普通技术人员在阅读本发明说明书的基础上可以对各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。本发明的保护范围仅由随附权利要求书限定。