一种仿真SSD中的数据交互通信方法、装置及终端与流程

文档序号:16429352发布日期:2018-12-28 20:01阅读:354来源:国知局
一种仿真SSD中的数据交互通信方法、装置及终端与流程

本发明涉及ssd仿真技术领域,特别涉及一种仿真ssd中的数据交互通信方法、装置、终端及计算机可读存储介质。

背景技术

目前,在ssd(solidstatedrives,固态硬盘)领域,需要有一套完整的仿真平台进行一些通信仿真、算法仿真、错误注入等,从而利用仿真方式实现有效的ssd产品开发和验证。

现有技术中针对ssd的通信仿真都是基于单核即单cpu通信仿真。但是目前ssd大多都是基于多cpu的交互通信及相应的多硬件单元(listengine,dma(directmemoryaccess,直接内存访问),xor)进行ssd产品平台开发。显然现有的ssd的通信仿真并不能适应ssd中多cpu的交互通信的过程。因此,为了尽可能的有效进行ssd的通信仿真,需要一种cpu间,cpu与硬件单元交互的数据通信机制。



技术实现要素:

本发明的目的是提供一种仿真ssd中的数据交互通信方法、装置、终端及计算机可读存储介质,能够有效进行多cpu的ssd的通信仿真,可最大化的仿真真实固件平台,并有效的提高代码的使用率。

为解决上述技术问题,本发明提供一种仿真ssd中的数据交互通信方法,包括:

构建各cpu对应的仿真线程;

构建各所述仿真线程之间的数据交互端口的映射关系;

利用所述映射关系初始化各所述仿真线程对应的输出端口以及输入端口的缓存器;

根据api接口输入的通信指令,通过对应仿真线程利用相应的缓存器执行所述通信指令对应的通信操作。

可选的,所述构建各所述仿真线程之间的数据交互端口的映射关系,包括:

构建各所述仿真线程之间的输出端口outbound以及输入端口inbound之间的ipcmap映射关系。

可选的,利用所述映射关系初始化各所述仿真线程对应的输出端口以及输入端口的缓存器,包括:

利用所述映射关系初始化各所述仿真线程对应的所述输出端口outbound中fifo缓存器中的消息缓冲地址;

设置各所述仿真线程对应的所述输入端口inbound中fifo缓存器为空以及设置各所述输入端口inbound的空闲条目数。

可选的,所述通信指令为全部输入端口inbound消息句柄查询指令、指定输入端口inbound消息句柄查询并返回消息句柄指令、指定输入端口inbound消息句柄获取指令、指定输入端口inbound消息句柄获取后释放指令、指定输出端口outbound消息句柄获取指令、指定输出端口outbound消息句柄内容填写指令、指定输出端口outbound消息句柄发送指令、指定输出端口outbound消息挂起指令中任一项。

本发明还提供一种仿真ssd中的数据交互通信装置,包括:

构建模块,用于构建各cpu对应的仿真线程;以及构建各所述仿真线程之间的数据交互端口的映射关系;

初始化模块,用于利用所述映射关系初始化各所述仿真线程对应的输出端口以及输入端口的缓存器;

通信仿真模块,用于根据api接口输入的通信指令,通过对应仿真线程利用相应的缓存器执行所述通信指令对应的通信操作。

可选的,所述构建模块包括:

第一构建单元,用于构建各cpu对应的仿真线程;

第二构建单元,用于构建各所述仿真线程之间的输出端口outbound以及输入端口inbound之间的ipcmap映射关系。

可选的,所述初始化模块包括:

输出端口初始化单元,用于利用所述映射关系初始化各所述仿真线程对应的所述输出端口outbound中fifo缓存器中的消息缓冲地址;

输入端口初始化单元,用于设置各所述仿真线程对应的所述输入端口inbound中fifo缓存器为空以及设置各所述输入端口inbound的空闲条目数。

本发明还提供一种终端,包括:

api接口,用于接收输入的通信指令;

处理器,用于利用存储的计算机程序时实现如上述任一项所述的仿真ssd中的数据交互通信方法的步骤。

本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一项所述的仿真ssd中的数据交互通信方法的步骤。

本发明所提供的仿真ssd中的数据交互通信方法,包括:构建各cpu对应的仿真线程;构建各仿真线程之间的数据交互端口的映射关系;利用映射关系初始化各仿真线程对应的输出端口以及输入端口的缓存器;根据api接口输入的通信指令,通过对应仿真线程利用相应的缓存器执行通信指令对应的通信操作。

可见,该方法利用线程仿真cpu,并利用映射关系确定各个仿真cpu之间的数据交互端口的通信对应关系,进而能够实现面向多cpu间的ssd数据交互通信的仿真,可最大化的仿真真实固件平台,并可有效的提高代码的复用率和代码验证的正确性,在此基础上能够有效实现ssd中的软件算法的真实性和准确性;克服了现有技术中只能对单cpu的ssd数据交互通信的仿真所带来的不能真实反应现有通信过程的缺点;本发明还提供了一种仿真ssd中的数据交互通信装置、终端及计算机可读存储介质,具有上述有益效果,在此不再赘述。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例所提供的仿真ssd中的数据交互通信方法的流程图;

图2为本发明实施例所提供的通信指令执行的示意图;

图3为本发明实施例所提供的仿真ssd中的数据交互通信装置的结构框图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

目前,多任务同时并发或并行地在同一台计算机中已成为大多数现代操作系统中的必备功能之一。因此本实施例为了实现最大化的仿真真实固件平台,可有效的提高代码的复用率和代码验证的正确性。需要实现对多cpu间的ssd数据交互通信的仿真。在linux系统中多进程间通信的方法主要有实时fifo、共享内存等。本实施例可以参考linux平台通过共享内存进行数据间的交互通信,多核通过多线程进行仿真的方式,实现对多cpu间的ssd数据交互通信的仿真。具体请参考图1,图1为本发明实施例所提供的仿真ssd中的数据交互通信方法的流程图;该方法可以包括:

s101:构建各cpu对应的仿真线程。

本实施例为了实现对多cpu间的ssd数据交互通信的仿真,首先需要对各个核也就是各个cpu进行仿真。本实施例中利用线程来仿真cpu。即为每一个cpu构件一个仿真线程以实现对该cpu的仿真。本实施例中并不限定仿真线程的数量,其和用户需要进行仿真的cpu数量一致;即仿真线程与cpu关系是一一对应的。每个仿真线程用于执行该cpu对应的通信任务。

s102:构建各仿真线程之间的数据交互端口的映射关系。

本实施例中并不对映射关系进行具体限定,用户可以根据实际应用场景的需求进行设置和修改。通常情况下多线程的交互通信,每个线程(即仿真cpu)都存在输入端口和输出端口两个方向上的数据流。因此具体构建映射关系的过程可以是:构建各仿真线程之间的输出端口outbound(后续输出端口outbound可以简称为outbound)以及输入端口inbound(后续输入端口inbound可以简称为inbound)之间的ipcmap映射关系,得到outbound/inbound之间的映射关系map[]。其中,ipc(interprocesscommunication,进程间通信)。

具体的,在步骤s101构建了各个cpu对应的仿真线程后,为了实现各个仿真cpu也就是各个仿真线程之间的数据通信过程,需要构建各仿真线程之间的数据交互端口的映射关系。进而各个仿真线程在接收到通信指令时,就可以实现对应输出端口到目标输入端口的通信。简单可以理解为通过映射关系为各个仿真线程对应的每个输出端口设置了对应的输入端口。一般来说每个输出端口对应一个输入端口;多个输出端口(多个输出端口均可以来自一个仿真线程,也可以是来自多个仿真线程对应的输出端口(如有3个输出端口对应一个输入端口,这3个输出端口可以分别来自3个仿真线程的输出端口,一个仿真线程一个))可以对应同一个输入端口,即输出端口和输入端口是多对一的关系。且每一个仿真线程对应的输入端口和输出端口的数量可以是多个,具体个数可以由用户设定(例如输入端口22个,输出端口也是22个),本实施例并不对此进行限定。通过用户设置的各仿真线程之间的数据交互端口的映射关系,可以实现仿真cpu中的输入端口和输出端口交互通信按照硬件机制进行交互通信。

本实施例中采用共享内存的交互通信方式,建立多仿真cpu之间的通信的ipcmap映射关系;具体的,对每个仿真线程的inbound和outbound的映射关系进行初始化,对应的每个仿真线程都有独立的内存空间,并且各个仿真线程具有共同访问的权限,因此各个仿真线程可以按照固定内存地址的寻址方式进行通信。本实施例中并不对内存地址寻址的具体方式进行限定。

例如固定内存地址的寻址方式为:nodeid+qid+messagebuffer_index可唯一确定每条ipc消息的访问地址。其中,nodeid:每个仿真cpu作为node定义的id标识(其取值可以是0-n),qid为仿真cpu的数据交互端口号(即可以是inbound或者outbound),message_buffer_index为消息缓冲的索引号(例如每个仿真线程具有22个输出端口和22个输入端口时,对应的messagebuffer_index:noden.messagebuffer[22][8])。

s103:利用映射关系初始化各仿真线程对应的输出端口以及输入端口的缓存器。

其中,每一个仿真线程的每一个输出端口都具有一个缓冲器,同时每一个仿真线程的每一个输入端口都具有一个缓冲器。本实施例中并不对具体的每一个仿真线程中每个输出端口对应的缓存器以及每个输入端口对应的缓存器的类型以及缓冲器的大小进行限定。例如fifo缓存器(即先进先出的数据缓冲器)。

本实施例根据映射关系对各个缓冲器的初始情况进行设置。例如输出端口对应的输入端口信息,输入端口中缓冲器大小等。优选的,利用映射关系初始化各仿真线程对应的输出端口outbound中fifo缓存器中的消息缓冲地址;设置各仿真线程对应的输入端口inbound中fifo缓存器为空以及设置各输入端口inbound的空闲条目数。

具体的,初始化每个仿真cpu的仿真线程中的outbound中fifo队列缓冲器的内容即消息缓冲的地址。即记录映射关系中对此仿真线程的outbound到inbound的映射信息(该仿真cpu的一个outbound到目的仿真cpu的id号及inbound端口号);初始化每个仿真cpu的仿真线程中的inbound中fifo队列缓冲器为空以及空闲条目数。

s104:根据api接口输入的通信指令,通过对应仿真线程利用相应的缓存器执行通信指令对应的通信操作。

经过上述步骤s101至步骤s103完成了对多cpu的通信仿真过程即能够实现仿真cpu之间的有效实时交互通信。步骤s104为利用上述建立好的仿真信道执行对应的通信操作。本实施例中通过api接口(applicationprogramminginterface,应用程序编程接口)接收用户输入的通信指令,再根据通信指令的具体内容,确定对应的仿真线程,对应的仿真线程利用相关的缓存器执行通信指令对应的通信操作。即使用ipc交互的api接口进行多仿真cpu之间的数据交互通信(如获取消息句柄,发送消息句柄,查询消息句柄,处理消息句柄)。通过每个仿真cpu的inbound和outbound进行数据的发送、接收、处理机制,实现多cpu的交互仿真平台,有效的进行了产品算法的实现验证,提高了产品的研发周期。

本实施例并不对通信指令的具体内容进行限定。例如获取消息句柄,发送消息句柄,查询消息句柄,处理消息句柄等。优选的,本实施例中的通信指令可以为全部输入端口inbound消息句柄查询指令、指定输入端口inbound消息句柄查询并返回消息句柄指令、指定输入端口inbound消息句柄获取指令、指定输入端口inbound消息句柄获取后释放指令、指定输出端口outbound消息句柄获取指令、指定输出端口outbound消息句柄内容填写指令、指定输出端口outbound消息句柄发送指令、指定输出端口outbound消息挂起指令中任一项或者多项。当然用户可以对上述各个通信指令进行任意组合,以实现其对应的仿真内容。具体的上述各个通信指令的具体形式可以如下:

(1)ipcinboundtest()对仿真cpu的所有inbound进行查询是否有接收消息存在,即全部输入端口inbound消息句柄查询指令。

(2)ipcinboundhandlepeek()从指定的inbound进行接收消息的查询并返回消息句柄(消息句柄不会从inbound队列fifo中进行删除),指定输入端口inbound消息句柄查询并返回消息句柄指令。

(3)ipcinboundhandleget()从指定的inbound进行消息句柄的获取(消息句柄获取后从fifo中进行删除),即指定输入端口inbound消息句柄获取指令。

(4)ipcinboundfree()从指定的inbound获取消息处理后,进行将消息句柄释放以使得下次使用,即指定输入端口inbound消息句柄获取后释放指令。

(5)ipcoutboundget()指定到oubound进行消息句柄的获取,进行填充发送消息内容,即指定输出端口outbound消息句柄获取指令。

(6)ipcwritedata()将数据内容写入到指定的oubound中的消息句柄,即指定输出端口outbound消息句柄内容填写指令。

(7)ipcoutboundpost()指定的ouboud将消息发送出去以便于目的cpu的inbound的获取,即指定输出端口outbound消息句柄发送指令。

(8)ipcoutboundpending()指定的ouboud消息挂起,即指定输出端口outbound消息挂起指令。其中,pending即消息挂起的意思。pendingipc.pending可以通过pendingipc.list[n]来确定,即通过list[n]来查找对应的outbound,可以理解为通过list[n]确定目标outbound。再根据该具体数值确定目标outbound是否挂起。例如数值为非0时表示挂起。在inbound中对应的{ipc_list_tipclist;//用于存放回调函数及相应的回调函数参数}_*_ctxt_t。根据上述过程通过pendingipc.messagequeued[n]将当前的上下文挂接到单链表中。其中,上述(4)和(7)的过程可以参考图2。inbound[n]_queue为输入端口队列,outbound[n]_queue为输入端口队列。

本实施例中根据接收到的通信指令的具体内容,确定对应的对象(即对应仿真线程以及相关的缓存器)执行通信指令对应的通信操作。例如当通信指令为指定输出端口outbound消息句柄发送指令时,对应的指定输出端口outbound对应的仿真线程获取该outbound中fifo缓存器中的发送消息句柄。当通信指令为指定输出端口outbound消息句柄内容填写指令时,对应的仿真线程根据发送消息句柄对发送消息的内容数据进行填写。当通信指令为指定输出端口outbound消息句柄发送指令时,对应的仿真线程在填写后将发送消息句柄通过ipc交互机制写入到目标仿真线程的输入端口inbound。当通信指令为指定输入端口inbound消息句柄获取指令时,对应的目标仿真线程(即指定输入端口inbound)通过预设调度策略获取该inbound中的消息处理句柄并根据消息处理句柄进行处理。当通信指令为指定输入端口inbound消息句柄获取后释放指令时,对应的目标仿真线程(即指定输入端口inbound)在处理完成后释放消息处理句柄(对应outbound中获取freehandle)。

在上述过程中outbound发送消息句柄后设置相应的messagehandle为无效,当inbound接收到消息进行处理后将发送方outbound的messagehandle置为有效。

基于上述技术方案,本发明实施例提供的仿真ssd中的数据交互通信方法,采用的数据交互通信的仿真实现方法即设计合理的多核仿真cpu之间的数据交互通信机制,能够实现仿真cpu之间到有效实时交互通信,并且能在最大程度上进行固件平台的仿真,从而有效的提高了代码的复用率和代码验证的正确性,在此基础上能够有效实现ssd中的软件算法的真实性和准确性。

下面对本发明实施例提供的仿真ssd中的数据交互通信装置、终端及计算机可读存储介质进行介绍,下文描述的仿真ssd中的数据交互通信装置、终端及计算机可读存储介质与上文描述的仿真ssd中的数据交互通信方法可相互对应参照。

请参考图3,图3为本发明实施例所提供的仿真ssd中的数据交互通信装置的结构框图;该装置可以包括:

构建模块100,用于构建各cpu对应的仿真线程;以及构建各仿真线程之间的数据交互端口的映射关系;

初始化模块200,用于利用映射关系初始化各仿真线程对应的输出端口以及输入端口的缓存器;

通信仿真模块300,用于根据api接口输入的通信指令,通过对应仿真线程利用相应的缓存器执行通信指令对应的通信操作。

基于上述实施例,构建模块100可以包括:

第一构建单元,用于构建各cpu对应的仿真线程;

第二构建单元,用于构建各仿真线程之间的输出端口outbound以及输入端口inbound之间的ipcmap映射关系。

基于上述实施例,初始化模块200可以包括:

输出端口初始化单元,用于利用映射关系初始化各仿真线程对应的输出端口outbound中fifo缓存器中的消息缓冲地址;

输入端口初始化单元,用于设置各仿真线程对应的输入端口inbound中fifo缓存器为空以及设置各输入端口inbound的空闲条目数。

需要说明的是,基于上述任意实施例,所述装置可以是基于可编程逻辑器件实现的,可编程逻辑器件包括fpga,cpld,单片机等。

本发明实施例还提供一种终端,包括:api接口,用于接收输入的通信指令;处理器,用于利用存储的计算机程序时实现上述任意实施例所述的仿真ssd中的数据交互通信方法的步骤。如处理器用于执行计算机程序时实现构建各cpu对应的仿真线程;构建各仿真线程之间的数据交互端口的映射关系;利用映射关系初始化各仿真线程对应的输出端口以及输入端口的缓存器;根据api接口输入的通信指令,通过对应仿真线程利用相应的缓存器执行通信指令对应的通信操作。

本发明还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述任意实施例所述的仿真ssd中的数据交互通信方法的步骤。如计算机程序被处理器执行时实现构建各cpu对应的仿真线程;构建各仿真线程之间的数据交互端口的映射关系;利用映射关系初始化各仿真线程对应的输出端口以及输入端口的缓存器;根据api接口输入的通信指令,通过对应仿真线程利用相应的缓存器执行通信指令对应的通信操作。

该计算机可读存储介质可以包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

以上对本发明所提供的一种仿真ssd中的数据交互通信方法、装置、终端及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1