一种基于ring通信机制的数据交互方法和系统技术方案

技术编号:33633249 阅读:19 留言:0更新日期:2022-06-02 01:41
本发明专利技术提出了一种基于ring通信机制的数据交互方法和系统,所述方法包括:主机端定义两个变量tx_head_value和tx_tail_value,判断二者差值对应的取模结果是否达到MAX_REQ_SIZE

【技术实现步骤摘要】
一种基于ring通信机制的数据交互方法和系统


[0001]本专利技术涉及计算机领域,尤其涉及一种基于ring通信机制的数据交互方法和系统。

技术介绍

[0002]DMA:(DirectMemoryAccess,直接存储器访问)PCI

E密码卡数据通信使用的通信方法,用于主机内存和密码卡之间数据搬运。
[0003]RING:密码卡用于管理主机端DMA内存的环形队列。
[0004]密码卡使用DMA和主机进行数据高速传输,密码卡使用链式DMA方式进行数据传输,并采用环形队列(以下简称“RING”)机制动态管理主机端DMA内存,密码卡内部设置了128个DMA环形队列管理器(以下简称“ring通道”),每个DMA的工作原理相同。单个RING机制工作原理见图1和图2所示。
[0005]密码卡的每个RING通道有两组寄存器,分别来管理主机端的发送队列缓冲区和接收队列缓冲区。发送队列缓冲区存放的是请求包(req),接收队列缓冲区存放的是响应包(resp)。发送队列缓冲区和接收队列缓冲区由主机来申请,主机通过BAR(BaseAddressRegister)空间把发送队列缓冲区的首地址写入到密码卡上发送控制器的tx_base_addr_reg寄存器,把接收队列缓冲区的首地址写入到密码卡接收控制器的rx_base_addr_reg寄存器。密码卡上tail和head寄存器用来保存发送队列缓冲区和接收队列缓冲区中待处理数据相对于基地址的偏移量,tx_tail_reg、tx_head_reg寄存器用于管理主机端发送缓冲区队列,tx_tail_reg和tx_head_reg差值的绝对值可以计算发送缓冲区的待发送请求包req的个数,如果|tx_tail_reg

tx_head_reg|=MAX_RING_QUEUEMAX_RING_QUEUE*req_size,则表示发送队列缓冲区已满,MAX_RING_QUEUEMAX_RING_QUEUE和req_size的大小根据主机申请缓冲区大小来确认;如果tx_tail_reg=tx_head_reg,则表示发送队列为空,在发送数据的时候通过比较两个寄存器的数据可以判断发送队列是否可以继续发送数据;rx_tail_reg、rx_head_reg寄存器用于管理接收缓冲区队列的。
[0006]图1表示发送队列缓冲区中有两个请求包req待DMA搬运,接收队列缓冲区中是空,tx_head_reg和tx_tail_reg寄存器保存的值分别是3*req_size和5*req_size(req_size表示一个请求包req的大小)。图2表示接收队列接收到了两个响应包resp,从图中可以看到接收响应包resp的时候顺序是4号resp在前、3号resp在后,说明接收resp的顺序和req的顺序并不是对应的,说明了接收响应包resp是无序的。req和resp数据包中存放的是控制信息和地址,并不是真正需要做密码运算的数据。主机需要主动设置DMA控制器来启动DMA,DMA首先搬运请求包req,密码卡接收到请求包req以后会解析请求包req,获取运算数据的地址,再次自动启动DMA来搬运真正需要做密码运算的数据,运算完成以后密码卡会把数据搬运至主机数据缓冲区,然后把响应包resp搬运到接收队列缓冲区对应的位置。
[0007]如图3所示,传统的主机端发送数据流程为:(1)主机端读取密码卡中的tx_tail_reg和tx_head_reg寄存器的值判断密码卡
发送缓冲区是否已满,如果|tx_tail_reg

tx_head_reg|=MAX_RING_QUEUEMAX_RING_QUEUE*req_size,则表示发送队列缓冲区已满;如果已满,继续查询,否则执行(2);(2)主机端构造请求包req,并把请求包req写入到发送队列的tx_tail_reg指向的位置;(3)主机端计算并更新tx_tail_reg寄存器,tx_tail_reg=tx_tail_reg+req_size。
[0008]如图4所示,传统的主机端接收数据流程为:(1)主机端读取密码卡中的rx_tail_reg和rx_head_reg寄存器的值,并查询响应包resp,如果没有继续查询,如果有执行(2);(2)解析resp响应报文,读取数据;(3)更新rx_head_reg寄存器,rx_head_reg=rx_head_reg+resp_size,使得rx_head_reg=rx_tail_reg。
[0009]然而,上述发送流程和接收流程为软件设计时常用数据发送流程,能够正常发挥密码卡功能,在判断主机端的发送缓冲区是否已满,使用轮询的过程,轮询的过程意味需要频繁的执行这段代码,就是意味着在发送的时候主机端需要频繁地使用PIO模式读取tx_tail_reg、tx_head_reg寄存器的值,在接收的时候主机端也需要频繁地使用PIO模式读取rx_tail_reg、rx_head_reg寄存器的值。这4个寄存器都是密码卡上的寄存器,每读取一次寄存器就是一次IO操作,在操作系统上I/O操作时非常耗时的,会影响通过软件调用密码卡时,密码卡的性能。

技术实现思路

[0010]基于上述,有必要提供一种基于ring通信机制的数据交互方法和系统,使用去读内存变量来代替操作I/O,以减少数据发送和数据接收时I/O操作,提升密码卡的性能。
[0011]本专利技术提出一种基于ring通信机制的数据交互方法,所述方法包括以下步骤:由主机端预先定义发送头变量tx_head_value、发送尾变量tx_tail_value和接收头变量rx_head_value,发送头变量tx_head_value用来记录密码卡上tx_head_reg寄存器的值,发送尾变量tx_tail_value用来记录密码卡上tx_tail_reg寄存器的值,接收头变量rx_head_value用来记录密码卡上rx_head_reg寄存器的值,在接收队列缓冲区初始化时,主机端把接收队列内存值设定为预设值RSP_RESP_INIT_CODE;在主机端向密码卡发送数据时:主机端分别读取发送头变量tx_head_value和发送尾变量tx_tail_value的值,计算出发送尾变量tx_tail_value和发送头变量tx_head_value的差值,对该差值和MAX_REQ_SIZE取模,并判断取模结果是否达到第一预设值,如果否,则构造请求包req并把请求包req放入发送队列的发送尾变量tx_tail_value指向的位置;其中,mod表示取模操作,所述第一预设值为MAX_REQ_SIZE

1,MAX_REQ_SIZE为发送队列缓冲区最大值;在主机端向密码卡发送数据后:主机端更新发送尾变量tx_tail_value,并使更新后的发送尾变量tx_tail_value等于更新前的tx_tail_value+req_size,其中,req_size表示单个请求包req的大小;
主机端判断更新后的发送尾变本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于ring通信机制的数据交互方法,其特征在于,包括以下步骤:由主机端预先定义发送头变量tx_head_value、发送尾变量tx_tail_value和接收头变量rx_head_value,发送头变量tx_head_value用来记录密码卡上tx_head_reg寄存器的值,发送尾变量tx_tail_value用来记录密码卡上tx_tail_reg寄存器的值,接收头变量rx_head_value用来记录密码卡上rx_head_reg寄存器的值,在接收队列缓冲区初始化时,主机端把接收队列内存值设定为预设值RSP_RESP_INIT_CODE;在主机端向密码卡发送数据时:主机端分别读取发送头变量tx_head_value和发送尾变量tx_tail_value的值,计算出发送尾变量tx_tail_value和发送头变量tx_head_value的差值,对该差值和MAX_REQ_SIZE取模,并判断取模结果是否达到第一预设值, 如果否,则构造请求包req并把请求包req放入发送队列的发送尾变量 tx_tail_value指向的位置;其中,mod表示取模操作,所述第一预设值为MAX_REQ_SIZE

1,MAX_REQ_SIZE为发送队列缓冲区最大值;在主机端向密码卡发送数据后:主机端更新发送尾变量tx_tail_value,并使更新后的发送尾变量tx_tail_value等于更新前的tx_tail_value+req_size,其中,req_size表示单个请求包req的大小;主机端判断更新后的发送尾变量tx_tail_value 是否大于预设值MAX_REQ_SIZE,如果是,则将发送尾变量tx_tail_value置为0,并将发送尾变量tx_tail_value的值写入到密码卡上tx_tail_reg寄存器,如果否,则直接将更新后的发送尾变量tx_tail_value的值写入到密码卡上tx_tail_reg寄存器;在主机端接收来自密码卡的数据时:主机端读取接收头变量rx_head_value的值,并将接收头变量rx_head_value在接收队列指向位置的内存值记做resp_value;主机端判断resp_value 是否等于预设值 RSP_RESP_INIT_CODE,如果是,则继续读取接收头变量rx_head_value的值,如果否,则更新接收头变量rx_head_value,并使更新后的接收头变量rx_head_value等于更新前的rx_head_value+resp_size;其中,resp_size表示单个响应包resp的大小;主机端判断更新后的接收头变量rx_head_value是否大于预设值MAX_RESP_SIZE,如果是,则将接收头变量rx_head_value置为0,并把接收头变量rx_head_value的值写入到密码卡的rx_head_reg寄存器中,如果否,则将更新后的接收头变量rx_head_value的值写入到密码卡的rx_head_reg寄存器中;其中预设值MAX_RESP_SIZE为接收队列缓冲区最大值。2.根据权利要求1所述的基于ring通信机制的数据交互方法,其特征在于,在将发送尾变量tx_tail_value的值写入到密码卡上tx_tail_reg寄存器,或者将更新后的发送尾变量tx_tail_value的值写入到密码卡上tx_tail_reg寄存器后,所述方法还包括以下步骤:在密码卡检测到tx_tail_reg寄存器更新后,根据tx_tail_reg和tx_head_reg差值的绝对值计算需要搬运请求包req的大小,启动DMA搬运请求包req报文和待运算数据,并更新tx_head_reg寄存器的值为tx_head_reg+req_size,待搬运完成后,使得tx_head_reg =tx_tail_reg。3.根据权利要求2所述的基于ring通信机制的数据交互方法,其特征在于,在更新tx_head_reg寄存器的值为tx_head_reg+req_size之后,所述方法还包括以下步骤:
由密码卡对请求包req和待运算数据进行处理,获得响应包resp,并启动DMA搬运响应包resp至rx_tail_reg指向的主机接收缓冲区位置,并更新rx_tail_reg寄存器的值为更新前的rx_tail_reg+resp_size。4.根据权利要求1所述的基于ring通信机制的数据交互方法,其特征在于,在将接收头变量rx_head_value的值写入到密码卡的rx_head_reg寄存器中之后,所述方法还包括以下步骤:主机端更新发送头变量tx_head_value ,并使得更新后的发送头变量tx_head_value等于更新前的发送头变量tx_head_value+ req_size;主机端判断更新后的发送头变量tx_head_value是否大于MAX_REQ_SIZE;如果是,则将发送头变量tx_head_value置为0...

【专利技术属性】
技术研发人员:雷宗华彭金辉廖正赟孙晓鹏
申请(专利权)人:郑州信大捷安信息技术股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1