一种基于NTB硬件和SCSI通信协议的通信方法与流程

文档序号:12376891阅读:524来源:国知局

本发明涉及通信技术领域,特别是涉及一种基于NTB硬件和SCSI通信协议的通信方法。



背景技术:

近些年来,PCIe得到了快速发展,已经从最初的PCI发展到现在的PCIe 3.0,PCIe的通信速度和带宽已经越来越得到广大厂商的认可,而NTB(Non-Transparent Br idge,非透明桥)也是随着PCIe的发展而诞生,同时NTB也逐渐成为传统存储的多控器之间通信的主要方式,其具带宽大、速度快、延时小、抖动小的特点,特别适用于传统存储多控之间通信数据量大,实时性高的要求。NTB通过地址翻译机制,可以直接寻址到远端的内存地址,通过CPU和DMA(Direct Memory Access,直接内存存取)中的一种方式,将本地的内存数据拷贝到远端的内存中,从而实现数据通信。现有技术中的NTB缺少通信协议,即便有,NTB结合通信协议的通信方法也不成熟,存在诸多缺点。

因此,如何提供一种解决上述技术问题的基于NTB的通信方法是本领域技术人员目前需要解决的问题。



技术实现要素:

本发明的目的是提供一种基于NTB硬件和SCSI通信协议的通信方法,通信手段使用的是NTB,在通信协议上采用SCSI协议,SCSI协议的优势可以得到全部的发挥,NTB在SCSI下也可以正常的进行通信,同时可以保证通信的高速度和高带宽,通信方法也更为高效和稳定。

为解决上述技术问题,本发明提供了一种基于NTB硬件和SCSI通信协议的通信方法,包括:

步骤S101:发送端接收上层应用的SCSI命令;

步骤S102:所述发送端将所述SCSI命令打包成第一NTB数据包;

步骤S103:NTB将所述第一NTB数据包拷贝至接收端;

步骤S104:所述接收端对接收到的所述第一NTB数据包进行解包,得到所述SCSI命令,并依据所述SCSI命令进行相应的响应,并将响应信息打包成第二NTB数据包;

步骤S105:NTB将所述第二NTB数据包拷贝至所述发送端;

步骤S106:所述发送端对所述第二NTB数据包进行解包,得到所述响应信息,并依据所述响应信息进行相应的响应,实现通信。

优选地,当所述SCSI命令为读命令时,所述SCSI命令包括待读数据的偏移和长度,则所述依据所述SCSI命令进行相应的响应,并将响应信息打包成第二NTB数据包的过程具体为:

所述接收端依据所述SCSI命令获取待读数据,并将所述待读数据打包成第二NTB数据包;

则所述发送端对所述第二NTB数据包进行解包,得到所述响应信息,并依据所述响应信息进行相应的响应的过程具体为:

所述发送端接对接收到的所述第二NTB数据包进行解包,得到所述SCSI所需的待读数据。

优选地,该方法还包括:

所述接收端依据所述SCSI命令获取待读数据,并将所述待读数据以及第一反馈信息打包成第二NTB数据包,其中,所述第一反馈信息包括所述待读数据的长度。

优选地,当所述SCSI命令为写命令时,所述SCSI命令包括待写数据的偏移和长度,则步骤S101与步骤S102之间还包括:

所述发送端准备要写入的待写数据;

则所述依据所述SCSI命令进行相应的响应,并将响应信息打包成第二NTB数据包的过程具体为:

所述接收端依据所述SCSI命令为所述待写数据分配缓冲区,分配完成后准备反馈SCSI命令,并将所述反馈SCSI命令打包成第二NTB数据;

则所述发送端对所述第二NTB数据包进行解包,得到所述响应信息,并依据所述响应信息进行相应的响应的过程具体为:

所述发送端对所述第二NTB数据包进行解包,得到所述反馈SCSI命令后,将所述待写数据打包成第三NTB数据包,以便所述NTB将所述第三NTB数据包拷贝至接收端以及所述接收端对接收到的所述第三NTB数据包解包,得到所述待写数据,并将所述待写数据存储至所述缓冲区。

优选地,所述接收端对接收到的所述第三NTB数据包解包,得到所述待写数据,并将所述待写数据存储至所述缓冲区后,该方法还包括:

所述接收端将第二反馈信息打包成第四NTB数据包,其中,所述第二反馈信息包括所述待写数据的长度;

所述NTB将所述第四NTB数据包拷贝至所述发送端;

所述发送端对所述第四NTB数据包解包,得到所述第二反馈信息。

优选地,步骤S101之前还包括:

所述发送端初始化所述SCSI命令。

优选地,所述NTB通过CPU采用内存拷贝的方式来拷贝NTB数据包。

本发明提供了一种基于NTB硬件和SCSI通信协议的通信方法,包括发送端接收上层应用的SCSI命令;发送端将SCSI命令打包成第一NTB数据包;NTB将第一NTB数据包拷贝至接收端;接收端对接收到的第一NTB数据包进行解包,得到SCSI命令,并依据SCSI命令进行相应的响应,并将响应信息打包成第二NTB数据包;NTB将第二NTB数据包拷贝至发送端;发送端对第二NTB数据包进行解包,得到响应信息,并依据响应信息进行相应的响应,实现通信。可见,本发明提供的通信方法,通信手段使用的是NTB,在通信协议上采用SCSI协议,SCSI协议的优势可以得到全部的发挥,NTB在SCSI下也可以正常的进行通信,同时可以保证通信的高速度和高带宽,通信方法也更为高效和稳定。

附图说明

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

图1为本发明提供的一种基于NTB硬件和SCSI通信协议的通信方法的过程的流程图。

具体实施方式

本发明的核心是提供一种基于NTB硬件和SCSI通信协议的通信方法,通信手段使用的是NTB,在通信协议上采用SCSI协议,SCSI协议的优势可以得到全部的发挥,NTB在SCSI下也可以正常的进行通信,同时可以保证通信的高速度和高带宽,通信方法也更为高效和稳定。

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

请参照图1,图1为本发明提供的一种基于NTB硬件和SCSI通信协议的通信方法的过程的流程图。

该方法包括:

步骤S101:发送端接收上层应用的SCSI命令;

作为优选地,步骤S101之前还包括:

发送端初始化SCSI命令。

步骤S102:发送端将SCSI命令打包成第一NTB数据包;

步骤S103:NTB将第一NTB数据包拷贝至接收端;

可以理解的是,SCSI协议包括发送端和接收端,发送端为Initiator端,接收端为target端,类似于client和server的概念,其中initiator端类似于client端,而target端类似于server端。

作为优选地,NTB通过CPU采用内存拷贝的方式来拷贝NTB数据包。

具体地,NTB通过CPU采用内存拷贝的方式将第一NTB数据包拷贝至接收端,下面同理。当然,这里的NTB还可以采用其他方式将第一NTB数据包发送至接收端,本发明在此不做特别的限定,根据实际情况来定。

步骤S104:接收端对接收到的第一NTB数据包进行解包,得到SCSI命令,并依据SCSI命令进行相应的响应,并将响应信息打包成第二NTB数据包;

步骤S105:NTB将第二NTB数据包拷贝至发送端;

步骤S106:发送端对第二NTB数据包进行解包,得到响应信息,并依据响应信息进行相应的响应,实现通信。

作为优选地,当SCSI命令为读命令时,SCSI命令包括待读数据的偏移和长度,则依据SCSI命令进行相应的响应,并将响应信息打包成第二NTB数据包的过程具体为:

接收端依据SCSI命令获取待读数据,并将待读数据打包成第二NTB数据包;

可以理解的是,这里的SCSI命令包括待读数据的地址和长度,接收端依据此来查找待读数据,并将待读数据打包成第二NTB数据包。

则发送端对第二NTB数据包进行解包,得到响应信息,并依据响应信息进行相应的响应的过程具体为:

发送端接对接收到的第二NTB数据包进行解包,得到SCSI所需的待读数据。

作为优选地,该方法还包括:

接收端依据SCSI命令获取待读数据,并将待读数据以及第一反馈信息打包成第二NTB数据包,其中,第一反馈信息包括待读数据的长度。

可以理解的是,这里的第一反馈信息一方面用来提示发送端,接收端已经发送了待读数据,另一方面,还用来告诉发送端发送了多少的待读数据。

作为优选地,当SCSI命令为写命令时,SCSI命令包括待写数据的偏移和长度,则步骤S101与步骤S102之间还包括:

发送端准备要写入的待写数据;

则依据SCSI命令进行相应的响应,并将响应信息打包成第二NTB数据包的过程具体为:

接收端依据SCSI命令为待写数据分配缓冲区,分配完成后准备反馈SCSI命令,并将反馈SCSI命令打包成第二NTB数据;

具体地,这里的SCSI命令包括待写数据的写入地址以及长度,接收端依据此来分配缓冲区。

可以理解的是,这里的反馈SCSI命令用来通知发送端接收端已经准备好缓冲区,发送端可以发送待写数据了。

则发送端对第二NTB数据包进行解包,得到响应信息,并依据响应信息进行相应的响应的过程具体为:

发送端对第二NTB数据包进行解包,得到反馈SCSI命令后,将待写数据打包成第三NTB数据包,以便NTB将第三NTB数据包拷贝至接收端以及接收端对接收到的第三NTB数据包解包,得到待写数据,并将待写数据存储至缓冲区。

作为优选地,接收端对接收到的第三NTB数据包解包,得到待写数据,并将待写数据存储至缓冲区后,该方法还包括:

接收端将第二反馈信息打包成第四NTB数据包,其中,第二反馈信息包括待写数据的长度;

NTB将第四NTB数据包拷贝至发送端;

发送端对第四NTB数据包解包,得到第二反馈信息。

可以理解的是,这里的第二反馈信息一方面用来提示发送端,接收端已经写入了待写数据,另一方面,还用来告诉发送端写入了多少的待读数据。

具体地,本申请通过对NTB硬件配置来实现NTB的通信,下面以函数级的描述,来介绍整个发明的实现过程。

本发明的实现对外提供如下接口:

int ntb_scs i_init iator(ntb_scs i_cmd*cmd);//初始化命令

int ntb_scs i_target_cmd(ntb_scs i_cmd*cmd);//target端获取SCSI命令

int ntb_scs i_target_data_send(ntb_scs i_cmd*cmd,ntb_io_data*data);//target端发送数据

int ntb_scs i_target_sense_data_send(ntb_scs i_cmd*cmd,ntb_sense_data*sense_data);//target端发送sense data(反馈信息)

int ntb_scs i_target_ready_send(ntb_scs i_cmd*cmd,ntb_io_data*data);//target端发送准备好命令

通过上述接口函数来实现具体的SCSI协议。

而在ntb_scs i_*中会调用ntb_data_send函数来发送数据。具体的示意代码如下:

本申请基于NTB和SCSI通信协议的通信方法,利用NTB硬件的高效通信和SCSI协议的良好的规范,结合两者的特点,实现一种基于NTB硬件的SCSI通信协议的通信方法。在通信手段上使用NTB的地址翻译机制,在通信协议上采用SCSI协议,SCSI协议的优势可以得到全部的发挥,应用可以明确的不感知通信手段上的变化,而是用SCSI协议进行通信,而NTB在SCSI下也可以正常的进行通信,同时可以保证通信的高速度和高带宽。

另外,本申请保证原来使用SCSI应用可以不进行修改就可以继续使用。在对SCSI协议进行封装之后,形成独立的NTB传输,形成通信手段的独立。NTB通信知道如何封装和解封SCSI命令,同时也可以区分SCSI命令和SCSI数据。

本发明提供了一种基于NTB硬件和SCSI通信协议的通信方法,包括发送端接收上层应用的SCSI命令;发送端将SCSI命令打包成第一NTB数据包;NTB将第一NTB数据包拷贝至接收端;接收端对接收到的第一NTB数据包进行解包,得到SCSI命令,并依据SCSI命令进行相应的响应,并将响应信息打包成第二NTB数据包;NTB将第二NTB数据包拷贝至发送端;发送端对第二NTB数据包进行解包,得到响应信息,并依据响应信息进行相应的响应,实现通信。可见,本发明提供的通信方法,通信手段使用的是NTB,在通信协议上采用SCSI协议,SCSI协议的优势可以得到全部的发挥,NTB在SCSI下也可以正常的进行通信,同时可以保证通信的高速度和高带宽,通信方法也更为高效和稳定。

需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其他实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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