CN114546906A - 一种基于ring通信机制的数据交互方法和系统 - Google Patents
一种基于ring通信机制的数据交互方法和系统 Download PDFInfo
- Publication number
- CN114546906A CN114546906A CN202210106878.8A CN202210106878A CN114546906A CN 114546906 A CN114546906 A CN 114546906A CN 202210106878 A CN202210106878 A CN 202210106878A CN 114546906 A CN114546906 A CN 114546906A
- Authority
- CN
- China
- Prior art keywords
- value
- head
- tail
- variable
- sending
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0846—Cache with multiple tag or data arrays being simultaneously accessible
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/50—Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
- Communication Control (AREA)
Abstract
本发明提出了一种基于ring通信机制的数据交互方法和系统,所述方法包括:主机端定义两个变量tx_head_value和tx_tail_value,判断二者差值对应的取模结果是否达到MAX_REQ_SIZE‑1,如果否,构造请求包req并把请求包req放入发送队列tx_tail_value指向的位置;判断更新后的tx_tail_value是否大于MAX_REQ_SIZE,如果是,则将tx_tail_value置为0,并将tx_tail_value的值写入到密码卡上tx_tail_reg寄存器。本发明使用去读内存变量来代替操作I/O,减少数据发送和数据接收时I/O操作,进一步提升密码卡的性能。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种基于ring通信机制的数据交互方法和系统。
背景技术
DMA: (Direct Memory Access,直接存储器访问) PCI-E密码卡数据通信使用的通信方法,用于主机内存和密码卡之间数据搬运。
RING: 密码卡用于管理主机端DMA内存的环形队列。
密码卡使用DMA和主机进行数据高速传输,密码卡使用链式DMA方式进行数据传输,并采用环形队列(以下简称“RING”)机制动态管理主机端DMA内存,密码卡内部设置了128个DMA环形队列管理器(以下简称“ring通道”),每个DMA的工作原理相同。单个RING机制工作原理见图1和图2所示。
密码卡的每个RING通道有两组寄存器,分别来管理主机端的发送队列缓冲区和接收队列缓冲区。发送队列缓冲区存放的是请求包(req),接收队列缓冲区存放的是响应包(resp)。发送队列缓冲区和接收队列缓冲区由主机来申请,主机通过BAR(Base AddressRegister)空间把发送队列缓冲区的首地址写入到密码卡上发送控制器的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寄存器用于管理接收缓冲区队列的。
图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搬运到接收队列缓冲区对应的位置。
如图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。
如图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。
然而,上述发送流程和接收流程为软件设计时常用数据发送流程,能够正常发挥密码卡功能,在判断主机端的发送缓冲区是否已满,使用轮询的过程,轮询的过程意味需要频繁的执行这段代码,就是意味着在发送的时候主机端需要频繁地使用PIO模式读取tx_tail_reg、tx_head_reg寄存器的值,在接收的时候主机端也需要频繁地使用PIO模式读取rx_tail_reg、rx_head_reg寄存器的值。这4个寄存器都是密码卡上的寄存器,每读取一次寄存器就是一次IO操作,在操作系统上I/O操作时非常耗时的,会影响通过软件调用密码卡时,密码卡的性能。
发明内容
基于上述,有必要提供一种基于ring通信机制的数据交互方法和系统,使用去读内存变量来代替操作I/O,以减少数据发送和数据接收时I/O操作,提升密码卡的性能。
本发明提出一种基于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为接收队列缓冲区最大值。
本发明第二方面提出一种基于ring通信机制的数据交互系统,用于实现上述的基于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为接收队列缓冲区最大值。
本发明预先在主机端设置发送头变量tx_head_value、发送尾变量tx_tail_value和接收头变量rx_head_value:在主机端向密码卡发送数据时,主机端读取发送头变量tx_head_value和发送尾变量tx_tail_value的值,都属于内存操作,耗时很短,可以大大地提高发送数据包时的查询效率;在主机端接收来自密码卡的数据时,主机端读取接收头变量rx_head_value 和读取接收队列的接收头变量rx_head_value对应的内存,也都属于内存操作,耗时很短,可以大大地提高接收数据包时的查询效率;
因此,本发明使用去读内存变量来代替操作I/O,减少数据发送和数据接收时I/O操作,避免通过软件调用密码卡的影响,进一步提升密码卡的性能。
本发明的附加方面和优点将在下面的描述部分中变得明显,或通过本发明的实践了解到。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1示出了现有技术基于ring发送数据的流程图;
图2示出了现有技术基于ring接收数据的流程图;
图3示出了现有技术的主机端发送数据的流程图;
图4示出了现有技术的主机端接收数据的流程图;
图5示出了本发明的主机端发送数据的流程图;
图6示出了本发明的主机端接收数据的流程图;
图7示出了本发明的主机端与密码卡之间进行DMA传输数据的流程图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。
实施例1
图5和6示出了本发明一种基于ring通信机制的数据交互方法的流程图。
如图5和6所示,本发明第一方面提出一种基于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为接收队列缓冲区最大值。
需要说明的是,发送头变量tx_head_value、发送尾变量tx_tail_value和接收头变量rx_head_value,是个全局变量,由主机端一直维护;主机端的发送尾变量tx_tail_value和接收头变量rx_head_value更新后,需要同步密码卡端的相应寄存器的值,保证变量的值和寄存器的值保持一致;
发送头变量tx_head_value,初始化值为0,每次从接收队列读取一个响应报文,更新发送头变量tx_head_value 的值,这样响应包接收完毕后,tx_head_value 和 tx_head_reg寄存器的值相等,保证了tx_head_value 和tx_head_reg同步。
进一步的,在将发送尾变量tx_tail_value的值写入到密码卡上tx_tail_reg寄存器,或者将更新后的发送尾变量tx_tail_value的值写入到密码卡上tx_tail_reg寄存器后,所述方法还包括以下步骤:
由密码卡检测tx_tail_reg寄存器是否更新,在密码卡检测到tx_tail_reg寄存器更新时,计算出tx_tail_reg和tx_head_reg寄存器的值之间的差值的绝对值,并根据tx_tail_reg和tx_head_reg差值的绝对值计算需要搬运请求包req的大小;
在|tx_tail_reg - tx_head_reg|>0时,密码卡启动DMA搬运请求包req报文;
获取请求包req报文,并解析请求包req报文获取待运算数据的地址;
启动DMA搬运待运算数据,并更新tx_head_reg寄存器的值为tx_head_reg+req_size,待搬运完成后,使得tx_head_reg =tx_tail_reg。
进一步的,在更新tx_head_reg寄存器的值为tx_head_reg+req_size之后,所述方法还包括以下步骤:
由密码卡解析待运算数据,并进行密码运算处理,生成结果数据,并启动DMA搬运结果数据至主机内存的数据缓冲区;
基于先前的请求包req构造响应包resp,并启动DMA把响应包resp搬运至接收缓冲区rx_tail_reg指向的位置;
更新rx_tail_reg寄存器的值为更新前的rx_tail_reg+resp_size,其中,resp_size表示响应包resp的大小。
需要说明的是,tx_head__reg在硬件搬运数据后,就已更新,只是主机端软件的发送头变量tx_head__value没有同步;因此,在主机端接收数据时,同步一下这个寄存器,因此主机端不用读取这个寄存器的值,即可使得发送头变量tx_head__value和tx_head__reg保持一致,达到不需要每次获取寄存器的值,依旧能够判断缓冲区队列的情况(正常需要驱动寄存器来判断)的目的;
因此,在将接收头变量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,如果否,则结束流程并退出。
需要说明的是,tx_tail_reg和tx_head_reg这两个寄存器用来管理发送队列的,软件用来判断发送队列是否已满,硬件用来判断是否有发送数据,rx_tail_reg和rx_head_reg 用来管理接收队列的,软件用来判断是否有接收数据,硬件用来判断接收队列是否已满。
tx_tail_reg和rx_head_reg这两个寄存器是主机端软件维护,本发明通过在主机端定义两个变量 tx_tail_value和rx_head_value来记录这两个寄存器的值,初始化的时候把tx_tail_reg 和rx_head_reg寄存器的值初始化为0,tx_tail_value和rx_head_value变量的值也初始化为0,每次更新寄存器值的时候先更新寄存器对应主机端定义的变量的值,然后主机端再把变量的值写入密码卡的寄存器中,这样可以保证变量的值和寄存器的值保持一致。
需要说明的是,发送尾变量tx_tail_value在每次主机端向密码卡发送数据后,由主机端软件更新;发送头变量tx_head_value和接收头变量rx_head_value,在每次主机端接收来自密码卡的数据后,由主机端软件更新。
发送头变量tx_head_value的更新滞后于发送尾变量tx_tail_value,如果tx_tail_value = tx_head_value,则说明发送缓冲区没有数据包,如果(tx_tail_value-tx_head_value) mod MAX_REQ_SIZE = MAX_REQ_SIZE-1,则说明发送队列是满的;
例如:设MAX_REQ_SIZE =128;req_size=1;如果发送了128个数据包,那么 tx_tail_value =127,一个数据包都没有接收tx_head_value =0;(tx_tail_value - tx_head_value) mod 128 =127,则说明发送缓冲区是满的。
tx_head_reg和 rx_tail_reg这两个寄存器的值是硬件维护的,每次都由硬件改变,至于软件如何去记录这两个寄存器的值,本发明可以不使用寄存器rx_head_reg判断接收队列是否已满,在接收队列初始化的时候把接收队列内存值初始化为一个特殊的值,定义为RSP_RESP_INIT_CODE(比较用的内存的固定值);
需要说明的是,因为初始化时,接收队列内存值是RSP_RESP_INIT_CODE;那么,在主机端接收来自密码卡的数据过程中,接收数据的时候查询接收队列 变量rx_head_value对应位置的内存值是否为RSP_RESP_INIT_CODE,如果主机端读取的时候,接收队列内存值不是RSP_RESP_INIT_CODE,则表示接收队列内存值已改变,只有硬件会改这个值,因此说明有主机端接收到resp响应报文;如果接收队列内存值为RSP_RESP_INIT_CODE,则说明主机端未接收到resp响应报文。
可以理解,在主机端接收到resp响应报文后,接收队列内存值会改变;在该resp响应报文处理之后,会把接收队列内存值重置为RSP_RESP_INIT_CODE,以便进行下一次判断。
需要说明的是,读取接收头变量rx_head_value 和读取接收队列的接收头变量rx_head_value对应的内存值,都属于主机端的内存操作(无需通过PIO模式去读密码卡的寄存器的值),耗时很短,可以大大地提高接收数据包时的查询效率,到此提高接收过程的查询效率的问题得到了解决。
相应的,发送流程的查询避免读取寄存器的原理同上,本发明中主机端可以不使用tx_tail_reg和 tx_head_reg寄存器的值判断密码卡发送缓冲区是否已满,可以使用发送尾变量tx_tail_value、发送头变量tx_head_value两个变量来判断发送队列是否已满,发送数据的时候查询发送头变量tx_head_value和发送尾变量tx_tail_value的值,若二者之间的差值与MAX_REQ_SIZE的取模结果,达到第一预设值MAX_REQ_SIZE-1,则判定发送队列已满,否则,判定发送队列未满,构造请求包req并把请求包req放入发送队列的发送尾变量 tx_tail_value指向的位置,并更新发送尾变量tx_tail_value;在更新后的发送尾变量tx_tail_value大于MAX_REQ_SIZE时,将发送尾变量tx_tail_value置为0,并写入到密码卡上tx_tail_reg寄存器,否则直接将更新后的发送尾变量tx_tail_value的值写入到密码卡上tx_tail_reg寄存器;
需要说明的是,主机端读取发送头变量tx_head_value和发送尾变量tx_tail_value的值,都属于内存操作,耗时很短,可以大大地提高发送数据包时查询效率,到此提高发送过程的查询效率的问题得到了解决。
为了进一步解释本发明的技术方案,图7展示了主机和数据包进行数据交互的基本流程。
主机端发送:
(1)主机端查询发送队列缓冲区是否已满,如果满退出,否则执行2;
(2)主机构造req,并把req写入到发送队列的tx_tail_reg指向的位置;
(3)主机计算并更新tx_tail_reg寄存器,tx_tail_reg= tx_tail_reg + req_size。
密码卡接收:
(1)检测到tx_tail_reg更新,比较tx_tail_reg和tx_head_reg寄存器的值;
(2)根据tx_tail_reg和tx_head_reg差值计算需要搬运req的大小。如果|tx_tail_reg - tx_head_reg|>0 ,执行步骤3;
(3)密码卡启动DMA搬运req报文;
(4)解析req报文获取待运算数据的地址;
(5)启动DMA搬运待运算的数据;
(6)更新tx_head_reg寄存器的值为tx_head_reg+req_size,使得tx_head_reg =tx_tail_reg。
密码卡运算完成后,进行反向数据传输发送:
密码卡发送:
(1)启动DMA把运算结果搬运至主机内存的数据缓冲区;
(2)根据req构造resp,并启动DMA把resp搬运至接收缓冲区rx_tail_reg指向的位置;
(3)更新rx_tail_reg寄存器值为rx_tail_reg=rx_tail_reg + resp_size。
主机端接收:
(1)查询接收缓冲区是否有响应包resp,如果没有退出,否则执行2;
(2)解析resp响应报文,读取数据;
(3)更新rx_head_reg寄存器为rx_head_reg + resp_size,使得rx_head_reg =rx_tail_reg。
进一步的,所述密码卡支持国密加解密算法和签名算法。
实施例2
在实施例1的基础上,本实施例给出了一种基于ring通信机制的数据交互系统的具体实施方式,用于实现上述基于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为接收队列缓冲区最大值。
进一步的,所述密码卡,用于:
在检测到tx_tail_reg寄存器更新后,比较tx_tail_reg和tx_head_reg寄存器的值,并计算出二者差值的绝对值;
根据tx_tail_reg和tx_head_reg差值的绝对值计算需要搬运请求包req的大小;
如果|tx_tail_reg - tx_head_reg|>0 ,密码卡启动DMA搬运请求包req报文;获取请求包req报文,并解析请求包req报文获取待运算数据的地址;
启动DMA搬运待运算数据,并更新tx_head_reg寄存器的值为tx_head_reg+req_size,待搬运完成后,使得tx_head_reg =tx_tail_reg。
所述密码卡,还用于:
对请求包req和待运算数据进行处理,获得响应包resp,并启动DMA搬运响应包resp至rx_tail_reg指向的主机接收缓冲区位置,并更新rx_tail_reg寄存器的值为更新前的rx_tail_reg+resp_size。
所述主机端,还用于:
在将接收头变量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,如果否,则结束流程并退出。
进一步的,所述密码卡支持国密加解密算法和签名算法。
本发明使用主机端软件去读写内存变量来代替主机端通过PIO模式去读密码卡的寄存器,减少主机端与密码卡之间在数据发送和数据接收时的I/O操作频率,避免在发送和接收数据过程中主机端频繁通过软件调用密码卡的寄存器值,影响密码卡效率,进一步提升密码卡的性能。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (10)
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,如果否,则结束流程并退出。
5.根据权利要求1所述的基于ring通信机制的数据交互方法,其特征在于,所述密码卡支持国密加解密算法和签名算法。
6.一种基于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为接收队列缓冲区最大值。
7.根据权利要求6所述的基于ring通信机制的数据交互系统,其特征在于,所述密码卡,用于:
在检测到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。
8.根据权利要求7所述的基于ring通信机制的数据交互系统,其特征在于,所述密码卡,还用于:
对请求包req和待运算数据进行处理,获得响应包resp,并启动DMA搬运响应包resp至rx_tail_reg指向的主机接收缓冲区位置,并更新rx_tail_reg寄存器的值为更新前的rx_tail_reg+resp_size。
9.根据权利要求6所述的基于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,如果否,则结束流程并退出。
10.根据权利要求6所述的基于ring通信机制的数据交互系统,其特征在于,所述密码卡支持国密加解密算法和签名算法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210106878.8A CN114546906B (zh) | 2022-01-28 | 2022-01-28 | 一种基于ring通信机制的数据交互方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210106878.8A CN114546906B (zh) | 2022-01-28 | 2022-01-28 | 一种基于ring通信机制的数据交互方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114546906A true CN114546906A (zh) | 2022-05-27 |
CN114546906B CN114546906B (zh) | 2023-06-23 |
Family
ID=81674250
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210106878.8A Active CN114546906B (zh) | 2022-01-28 | 2022-01-28 | 一种基于ring通信机制的数据交互方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114546906B (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000227897A (ja) * | 1998-11-30 | 2000-08-15 | Matsushita Electric Ind Co Ltd | Dma転送装置及びdma転送システム |
US6128669A (en) * | 1997-09-30 | 2000-10-03 | Compaq Computer Corporation | System having a bridge with distributed burst engine to decouple input/output task from a processor |
US6182165B1 (en) * | 1998-06-01 | 2001-01-30 | Advanced Micro Devices, Inc. | Staggered polling of buffer descriptors in a buffer descriptor ring direct memory access system |
US20020112105A1 (en) * | 2001-02-12 | 2002-08-15 | Mordechai Daniel | Method and apparatus for efficient messaging between memories across a PCI bus |
US6633926B1 (en) * | 1998-11-30 | 2003-10-14 | Matsushita Electric Industrial Co., Ltd. | DMA transfer device capable of high-speed consecutive access to pages in a memory |
US20060106969A1 (en) * | 2002-12-30 | 2006-05-18 | Koninklijke Philips Electronics N.V. | Memory controller and method for writing to a memory |
CN108932207A (zh) * | 2017-05-23 | 2018-12-04 | 珠海全志科技股份有限公司 | 带有缓存区的sdio-wifi数据传输方法及系统 |
CN112035899A (zh) * | 2020-08-21 | 2020-12-04 | 郑州信大捷安信息技术股份有限公司 | 一种基于密码卡的数据通信系统及方法 |
CN112035900A (zh) * | 2020-08-21 | 2020-12-04 | 郑州信大捷安信息技术股份有限公司 | 一种高性能密码卡以及其通信方法 |
CN112052483A (zh) * | 2020-08-21 | 2020-12-08 | 郑州信大捷安信息技术股份有限公司 | 一种密码卡的数据通信系统及方法 |
-
2022
- 2022-01-28 CN CN202210106878.8A patent/CN114546906B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6128669A (en) * | 1997-09-30 | 2000-10-03 | Compaq Computer Corporation | System having a bridge with distributed burst engine to decouple input/output task from a processor |
US6182165B1 (en) * | 1998-06-01 | 2001-01-30 | Advanced Micro Devices, Inc. | Staggered polling of buffer descriptors in a buffer descriptor ring direct memory access system |
JP2000227897A (ja) * | 1998-11-30 | 2000-08-15 | Matsushita Electric Ind Co Ltd | Dma転送装置及びdma転送システム |
US6633926B1 (en) * | 1998-11-30 | 2003-10-14 | Matsushita Electric Industrial Co., Ltd. | DMA transfer device capable of high-speed consecutive access to pages in a memory |
US20020112105A1 (en) * | 2001-02-12 | 2002-08-15 | Mordechai Daniel | Method and apparatus for efficient messaging between memories across a PCI bus |
US20060106969A1 (en) * | 2002-12-30 | 2006-05-18 | Koninklijke Philips Electronics N.V. | Memory controller and method for writing to a memory |
CN108932207A (zh) * | 2017-05-23 | 2018-12-04 | 珠海全志科技股份有限公司 | 带有缓存区的sdio-wifi数据传输方法及系统 |
CN112035899A (zh) * | 2020-08-21 | 2020-12-04 | 郑州信大捷安信息技术股份有限公司 | 一种基于密码卡的数据通信系统及方法 |
CN112035900A (zh) * | 2020-08-21 | 2020-12-04 | 郑州信大捷安信息技术股份有限公司 | 一种高性能密码卡以及其通信方法 |
CN112052483A (zh) * | 2020-08-21 | 2020-12-08 | 郑州信大捷安信息技术股份有限公司 | 一种密码卡的数据通信系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN114546906B (zh) | 2023-06-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109902043B (zh) | 一种基于fpga的国密算法加速处理系统 | |
US7193993B2 (en) | Integrated medium access control device and physical layer device | |
US7386705B2 (en) | Method for allocating processor resources and system for encrypting data | |
US7069373B2 (en) | USB endpoint controller flexible memory management | |
US20060041938A1 (en) | Method of supporting SSL/TLS protocols in a resource-constrained device | |
US7532727B2 (en) | Hardware-based encryption/decryption employing dual ported key storage | |
EP3159803B1 (en) | Data storage method and network interface card | |
US6775764B1 (en) | Search function for data lookup | |
CN112052483B (zh) | 一种密码卡的数据通信系统及方法 | |
CN112035899B (zh) | 一种基于密码卡的数据通信系统及方法 | |
US9319353B2 (en) | Network task offload apparatus and method thereof | |
CN114546906B (zh) | 一种基于ring通信机制的数据交互方法和系统 | |
US20050216735A1 (en) | Method and apparatus for decrypting encrypted data transmitted wirelessly by updating a key-table | |
CN111488600B (zh) | 一种资源处理方法、电子设备和服务器 | |
CN116610623A (zh) | 一种数据读取方法、装置、电子设备及存储介质 | |
CA3228194A1 (en) | Payment control method and device, electronic device, and storage medium | |
CN113641604B (zh) | 一种数据传输方法及系统 | |
US11960611B2 (en) | Efficient distribution of processes between a vehicle control computing device and a cryptographic module, and method for operation thereof | |
KR101588279B1 (ko) | 무선 통신 시스템에서 데이터 암호화 방법 및 장치 | |
WO2023185230A1 (zh) | 数据处理方法和装置 | |
US8380137B2 (en) | Circuit, process, and use of a memory for transmitting and/or receiving in a radio network | |
US20230006843A1 (en) | Data transmission method, apparatus, and system, computer device, and storage medium | |
US7444642B2 (en) | Method for indicating completion status of asynchronous events | |
KR100416235B1 (ko) | 고속 라디오 네트워크 스위치용 암호 처리 장치 | |
CN115473701A (zh) | 网络通信的方法、系统、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |