一种存储数据的方法及网络接口卡的制作方法
【专利摘要】本发明公开了一种存储数据的方法及网络接口卡,在该方案中,由于将缓存的非请求数据写入非请求数据对应的目的地址对应的存储空间中时,是采用DMA方式写入的,而采用DMA方式写入数据的速率大于采用拷贝方式写入数据的速率,因此,降低了在存储数据的过程中所需要的耗时、提高了存储速率,同时,由于写入操作是网络接口卡硬件来做的,因此,降级了对CPU资源的消耗,进而降低了对其他应用程序的处理速率的影响。
【专利说明】-种存储数据的方法及网络接口卡
【技术领域】
[0001] 本发明涉及数据存储【技术领域】,特别涉及一种存储数据的方法及网络接口卡。
【背景技术】
[0002] 随着网络技术的发展以及数字信息的指数式增长,网络存储的重要性日益显现, 多种网络存储技术应运而生。iSCSI (Internet Small Computer System Interface,互联 网小型计算机系统接口)技术,是一种在IP(Internet Protocol,互联网协议)网络上运 行SCSI (Small Computer System Interface,小型计算机系统接口)协议的存储技术,由于 iSCSI技术具有维护简单,容易扩充,且硬件成本相对低廉的优点,使得iSCSI技术得到了 广泛的应用,SCSI协议模块示意图如图1A所示。
[0003] iSCSI数据传送主要涉及到读写流程,图1B为现有的写操作处理流程图:
[0004] 步骤A : iSCSI启动器向iSCSI目标器发送写数据命令;
[0005] 步骤B :iSCSI目标器接收到写数据命令后,为待写入存储区域中的网络存储的所 有数据分配目的地址,并将的目的地址通过R2T (Ready to Transfer,准备传输)命令发送 给iSCSI启动器;
[0006] 步骤C :iSCSI启动器向iSCSI目标器发送携带待写入数据的请求DATA_0UT(输出 数据)消息,iSCSI目标器通过拷贝或者DDP (Direct DataPlacement,直接数据存储)技术 把待写入数据放到目的地址对应的存储空间中。
[0007] 图1C为现有的读操作处理流程图:
[0008] 步骤a :iSCSI启动器向iSCSI目标器发送读数据命令;
[0009] 在该步骤中,iSCSI启动器已经确定了待读数据所在的目的地址。
[0010] 步骤b:iSCSI启动器接收iSCSI目标器发送的Data-In(输入数据)消息,其中, Data-In消息中携带目的地址对应的存储空间中存储的数据。
[0011] 在图1B所示的写操作处理流程中,iSCSI启动器发送数据时,都是在接收到iSCSI 目标器回复R2T命令之后才真正发送数据。在实际应用中,采用iSCSI技术存储数据的过 程中,存在很多小数据的存储,若采用上述过程来实现写操作的话,在长距离传输的过程中 因为交互操作繁琐而存在传输时延较大的缺陷。
[0012] 为了降低小数据传输时的传输时延,iSCSI技术中又实现了省略发送R2T命令这 个交互步骤,具体通过如下两种方式进行实现:
[0013] 第一种为采用写数据命令的形式:将待写入的小数据直接携带在写数据命令中;
[0014] 第二种为采用首次发送的非请求DATA_0UT消息的形式:将待写入的小数据直接 携带在首次发送的非请求DATA_0UT消息中,而携带待写入的小数据的非请求DATA_0UT消 息是紧跟在写数据命令发送的,也就是说,非请求DATA_0UT消息和写数据命令之间没有 R2T命令的交互。
[0015] 上述两种方式中,iSCSI启动器均不需要等到iSCSI目标器回复R2T命令,就可以 直接向iSCSI目标器发送待写入的小数据,但是,因为iSCSI目标器在接收到iSCSI启动器 发送的待写入的小数据时,没有获取待写入的小数据的目的地址,因此,在接收到iSCSI启 动器发送的待写入的小数据时,要先进行缓存。
[0016] 现有技术中,在将待写入的小数据缓存时,具体为:HBA(Host Bus Adapter,主机 总线适配器)接收到iSCSI启动器发送的待写入的小数据后,先将待写入的小数据缓存至 驱动层,驱动层在接收到SCSI层下发的待写入的数据的目的地址后,驱动层将缓存的待 写入的小数据拷贝至目的地址对应的存储空间,从上述过程中可以看出,驱动层在将缓存 的待写入的小数据存储到目的地址对应的存储空间时,是通过拷贝方式实现的,而拷贝方 式存储存在耗时较长,效率较低的缺陷,因此,目前的存储过程存在耗时较长,效率较低问 题,同时,由于拷贝操作是在驱动层完成的,驱动层为软件层,软件层执行操作时,需要占用 CPU (Central Processing Unit,中央处理器)资源,而CPU资源是有限的,因此,目前的存储 数据的方法还会对其他应用程序的处理速率造成影响。
[0017] 综上所述,现有的存储数据的方法存在耗时较长、存储效率较低,及对其他应用程 序的处理速率存在影响的缺陷。
【发明内容】
[0018] 本发明实施例提供一种存储数据的方法及网络接口卡,用以解决现有技术中在存 储数据的过程中存在的耗时较长、存储速率较低,及对其他应用程序的处理速率存在影响 的缺陷。
[0019] 本发明实施例提供的具体技术方案如下:
[0020] 第一方面,提供一种存储数据的方法,包括:
[0021] 网络接口卡获取非请求数据,并将获取的非请求数据缓存至所述网络接口卡的缓 存空间,其中,所述非请求数据为所述网络接口卡接收到的数据中未获取到对应的目的地 址的待存储数据;
[0022] 所述网络接口卡获取与所述非请求数据对应的目的地址,并将缓存的非请求数 据,采用直接存储器访问DMA方式写入与所述非请求数据对应的目的地址对应的存储空间 中。
[0023] 结合第一方面,在第一种可能的实现方式中,所述非请求数据为携带在客户端发 送的写数据命令中的数据;或者,所述非请求数据为携带在客户端发送的非请求输出数据 DATA_0UT消息中的数据;
[0024] 其中,所述非请求DATA_0UT消息是所述网络接口卡在接收到所述客户端发送的 所述写数据命令后,在向所述客户端发送准备传输R2T命令之前接收到的消息。
[0025] 结合第一方面,或者第一方面的第一种可能的实现方式,在第二种可能的实现方 式中,所述网络接口卡将获取的非请求数据缓存至所述网络接口卡的缓存空间,具体包 括:
[0026] 所述网络接口卡采用DMA方式,将所述非请求数据缓存至所述网络接口卡的随机 存取存储器RAM空间;或者
[0027] 所述网络接口卡采用DMA方式,将所述非请求数据缓存至所述网络接口卡的双倍 速率DDR同步动态随机存储器SDRAM空间。
[0028] 结合第一方面,或者第一方面的第一至第二种可能的实现方式,在第三种可能的 实现方式中,所述网络接口卡将缓存的非请求数据,采用DMA方式写入与所述非请求数据 对应的目的地址对应的存储空间中之前,还包括:
[0029] 所述网络接口卡获取与所述非请求数据对应的数据完整域DIF计算规则;
[0030] 所述网络接口卡采用所述DIF计算规则,计算与所述非请求数据对应的DIF值;
[0031] 所述网络接口卡确定计算得到的DIF值,与所述非请求数据对应的预设DIF值相 等。
[0032] 结合第一方面,或者第一方面的第一至第三种可能的实现方式,在第四种可能的 实现方式中,所述网络接口卡将缓存的非请求数据,采用DMA方式写入与所述非请求数据 对应的目的地址对应的存储空间中之后,还包括:
[0033] 所述网络接口卡在判定存在未写入存储空间的待存储数据时,确定所述待存储数 据的目的地址对应的存储空间大小;
[0034] 所述网络接口卡将确定出的存储空间大小携带在R2T命令中发送至客户端;
[0035] 所述网络接口卡接收所述客户端根据所述R2T命令返回的所述待存储数据;
[0036] 所述网络接口卡将接收到的待存储数据,写入所述待存储数据的目的地址对应的 存储空间中。
[0037] 第二方面,提供一种网络接口卡,包括:
[0038] 获取单元,用于获取非请求数据、与所述非请求数据对应的目的地址,其中,所述 非请求数据为所述获取单元接收到的数据中未获取到对应的目的地址的待存储数据;
[0039] 缓存单元,用于将获取的非请求数据缓存至网络接口卡的缓存空间;
[0040] 写入单元,用于将缓存的非请求数据,采用直接存储器访问DMA方式写入与所述 非请求数据对应的目的地址对应的存储空间中。
[0041] 结合第二方面,在第一种可能的实现方式中,所述获取单元获取的非请求数据为 携带在客户端发送的写数据命令中的数据;或者,所述获取单元获取的非请求数据为携带 在客户端发送的非请求输出数据DATA_0UT消息中的数据;
[0042] 其中,所述非请求DATA_0UT消息是所述获取单元在接收到所述客户端发送的所 述写数据命令后,在向所述客户端发送准备传输R2T命令之前接收到的消息。
[0043] 结合第二方面,或者第二方面的第一种可能的实现方式,在第二种可能的实现方 式中,所述缓存单元具体用于:
[0044] 采用DMA方式,将所述非请求数据缓存至所述网络接口卡的随机存取存储器RAM 空间;或者
[0045] 采用DMA方式,将所述非请求数据缓存至所述网络接口卡的双倍速率DDR同步动 态随机存储器SDRAM空间。
[0046] 结合第二方面,或者第二方面的第一至第二种可能的实现方式,在第三种可能的 实现方式中,还包括确定单元,所述确定单元用于:
[0047] 获取与所述非请求数据对应的数据完整域DIF计算规则;
[0048] 采用所述DIF计算规则,计算与所述非请求数据对应的DIF值;
[0049] 确定计算得到的DIF值,与所述非请求数据对应的预设DIF值相等。
[0050] 结合第二方面,或者第二方面的第一至第三种可能的实现方式,在第四种可能的 实现方式中,所述写入单元还用于:
[0051] 在判定存在未写入存储空间的待存储数据时,确定所述待存储数据的目的地址对 应的存储空间大小;
[0052] 将确定出的存储空间大小携带在R2T命令中发送至客户端;
[0053] 接收所述客户端根据所述R2T命令返回的所述待存储数据;
[0054] 将接收到的待存储数据,写入所述待存储数据的目的地址对应的存储空间中。
[0055] 本发明有益效果如下:
[0056] 本发明实施例中,提出一种存储数据的方法:网络接口卡获取非请求数据,并将获 取的非请求数据缓存至网络接口卡的缓存空间,其中,非请求数据为网络接口卡接收到的 数据中未获取到对应的目的地址的待存储数据;网络接口卡获取与非请求数据对应的目的 地址,并将缓存的非请求数据,采用DMA (Direct Memory Access,直接内存存取)方式写入 与非请求数据对应的目的地址对应的存储空间中,在该方案中,由于将缓存的非请求数据 写入非请求数据对应的目的地址对应的存储空间中时,是采用DMA方式写入的,而采用DMA 方式写入数据的速率大于采用拷贝方式写入数据的速率,因此,降低了在存储数据的过程 中所需要的耗时、提高了存储速率,同时,由于写入操作是网络接口卡硬件来做的,因此,降 级了对CPU资源的消耗,进而降低了对其他应用程序的处理速率的影响。
【专利附图】
【附图说明】
[0057] 图1A为现有技术中SCSI协议模块的示意图;
[0058] 图1B为现有技术中基于SCSI协议的写操作的流程图;
[0059] 图1C为现有技术中基于SCSI协议的读操作的流程图;
[0060] 图2A为本发明实施例中存储数据的详细流程图;
[0061] 图2B为本发明实施例中数据和对应的DIF值的示意图;
[0062] 图3A为本发明实施例中存储数据的实施例的第一示意图;
[0063] 图3B为本发明实施例中存储数据的实施例的第二示意图;
[0064] 图4为本发明实施例中网络接口卡的功能结构示意图;
[0065] 图5为本发明实施例中网络接口卡的实体装置示意图。
【具体实施方式】
[0066] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例 中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是 本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员 在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0067] 另外,本文中术语"系统"和"网络"在本文中常被可互换使用。本文中术语"和/ 或",仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以 表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字母"/",一般表 示前后关联对象是一种"或"的关系。
[0068] 现有技术中,驱动层在将缓存的待写入的小数据存储到目的地址对应的存储空间 时,是通过拷贝方式实现的,而拷贝方式存储存在耗时较长,效率较低的缺陷,因此,目前的 存储过程存在耗时较长,效率较低问题,同时,由于拷贝操作是在驱动层完成的,驱动层为 软件层,软件层执行操作时,需要占用CPU资源,而CPU资源是有限的,因此,目前的存储 数据的方法还会对其他应用程序的处理速率造成影响,为了解决现有技术中存在的耗时 较长、存储速率较低,及对其他应用程序的处理速率存在影响的缺陷,本发明实施例中,提 出一种存储数据的方法:网络接口卡获取非请求数据,并将获取的非请求数据缓存至网络 接口卡的缓存空间,其中,非请求数据为网络接口卡接收到的数据中未获取到对应的目的 地址的待存储数据;网络接口卡获取与非请求数据对应的目的地址,并将缓存的非请求数 据,采用DMA方式写入与非请求数据对应的目的地址对应的存储空间中,在该方案中,由于 将缓存的非请求数据写入非请求数据对应的目的地址对应的存储空间中时,是采用DMA方 式写入的,而采用DMA方式写入数据的速率大于采用拷贝方式写入数据的速率,因此,降低 了在存储数据的过程中所需要的耗时、提高了存储速率,同时,由于写入操作是网络接口卡 硬件来做的,因此,降级了对CPU资源的消耗,进而降低了对其他应用程序的处理速率的影 响。
[0069] 下面结合说明书附图对本发明优选的实施方式进行详细说明,应当理解,此处所 描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明,并且在不冲突的情况 下,本申请中的实施例及实施例中的特征可以相互组合。
[0070] 下面结合附图对本发明优选的实施方式进行详细说明。
[0071] 参阅图2A所示,本发明实施例中,存储数据的详细流程如下:
[0072] 步骤200 :网络接口卡获取非请求数据,并将获取的非请求数据缓存至网络接口 卡的缓存空间,其中,非请求数据为网络接口卡接收到的数据中未获取到对应的目的地址 的待存储数据;
[0073] 步骤210 :网络接口卡获取与非请求数据对应的目的地址,并将缓存的非请求数 据,采用DMA方式写入与非请求数据对应的目的地址对应的存储空间中。
[0074] 本发明实施例中,网络接Π 卡有多种,例如,可以为网卡,也可以为HBA,当然,随着 应用场景的不同,还可以为其他形式,在此不再进行一一详述。
[0075] 本发明实施例中,非请求数据的形式有多种,可选的,可以为如下形式:
[0076] 例如,非请求数据是携带在客户端发送的写数据命令中的数据,也就是说,网络接 口卡可以从写数据命令中获取非请求数据;
[0077] 又例如,非请求数据为携带在客户端发送的非请求DATA_0UT消息中的数据,也就 是说,网络接口卡可以从非请求DATA_0UT消息中获取非请求数据;
[0078] 其中,非请求DATA_0UT消息是网络接口卡在接收到客户端发送的写数据命令后, 在向客户端发送R2T命令之前接收到的消息。
[0079] 当然,在实际应用中,非请求数据还有其他形式,在此不再进行一一详述。
[0080] 本发明实施例中,网络接口卡将获取的非请求数据缓存至网络接口卡的缓存空间 的方式有多种,可选的,可以采用如下方式:
[0081] 例如,网络接口卡采用DMA方式,将非请求数据缓存至网络接口卡的 RAM (Random-Access Memory,随机存取存储器)空间,其中,RAM空间具有由DMA引擎进行 DMA操作的属性。
[0082] 或者,还可以采用如下方式:
[0083] 例如,网络接口卡采用DMA方式,将非请求数据缓存至网络接口卡的DDR (Double Data Rate,双倍速率)SDRAM (Synchronous Dynamic Random Access Memory,同步动态随机存 储器)空间。
[0084] 本发明实施例中,非请求数据可以为待写入存储空间的所有数据,当然,也可以是 待写入存储空间的部分数据,但是,写数据命令中携带的始终是待写入存储空间的所有数 据的总大小,不会随着非请求数据是否为待写入存储空间的所有数据的变化而发生变化。
[0085] 例如,写数据命令中只能携带5K的数据,待写入存储空间的所有数据的总大小为 15K,那么,写数据命令中携带的待写入存储空间的数据的大小为5K,若写数据命令中可以 携带15K的数据,此时,非请求数据就为待写入存储空间的所有数据;若写数据命令中只可 以携带5K的数据,此时,非请求数据就为待写入存储空间的部分数据。
[0086] 本发明实施例中,网络接口卡将缓存在缓存空间的非请求数据,采用DMA方式写 入与非请求数据对应的目的地址对应的存储空间中时,若请求数据缓存至网络接口卡的 RAM空间,那么,网络接口卡将缓存在RAM空间的非请求数据,采用DMA方式写入与非请求数 据对应的目的地址对应的存储空间中。
[0087] 此时,若非请求数据缓存至网络接口卡的DDR SDRAM,那么,网络接口卡将缓存在 DDR SDRAM空间的非请求数据,采用DMA方式写入与非请求数据对应的目的地址对应的存储 空间中。
[0088] 在实际应用中,非请求数据从客户端传输到网络接口卡的过程中,可能会因恶略 的环境引入错误,但这些错误对于一些对数据有严格需求的场合,比如银行账户信息等, 是绝对不允许的,因此,为了确认数据传输的完整性,在iSCSI技术中又引入了 DIF (Data Integrity Field,数据完整域)技术。DIF技术是一种端到端的数据保护的方法,数据由 两部分组成,一部分为有效的数据,另一部分为与有效数据对应的DIF值,DIF值由8字节 大小组成,位于每512字节的有效数据后面,也就是说,发送的数据中每512字节数据后面 都会紧跟与这512字节的数据对应的DIF值,如图2B所示,在该图示中,数据1、数据2、数 据3均为有效数据,DIF值1与数据1对应,DIF值2与数据2对应,DIF值3与数据3对 应。现有技术中,客户端中的iSCSI启动器在发送非请求数据时,通过指定算法计算出非请 求数据的DIF值,并把DIF值发送。服务器中的SCSI层接收到非请求数据后,会根据非请 求数据计算出与非请求数据对应的DIF值,并在判定计算得出的DIF值与非请求数据对应 的DIF值相等时,确认传输的数据是完整的,在判定计算得出的DIF值与非请求数据对应的 DIF值不相等时,确认传输的数据是不完整的,发生了篡改或者是破坏。
[0089] 从上述过程可以看出,现有技术中在确定非请求数据是否完整时,是在SCSI层执 行的,也就是说,这个操作是软件层来执行的,因此,同样存在占用CPU资源,进而对其他应 用程序的处理速率存在影响的缺陷。
[0090] 本发明实施例中,进一步的,为了确认非请求数据的完整性,网络接口卡将缓存的 非请求数据,采用DMA方式写入与非请求数据对应的目的地址对应的存储空间中之前,还 包括如下操作:
[0091] 网络接口卡获取与非请求数据对应的DIF计算规则;
[0092] 网络接口卡采用DIF计算规则,计算与非请求数据对应的DIF值;
[0093] 网络接口卡判定计算得到的DIF值,与非请求数据对应的预设DIF值是否相等,若 是,将缓存的非请求数据,采用DMA方式写入与非请求数据对应的目的地址对应的存储空 间中,否则,不执行写入操作。
[0094] 本发明实施例中,由于DIF操作是由网络接口卡来执行的,也就是说,DIF操作是 由硬件来执行的,而硬件执行操作时不占用CPU资源,CPU资源是有限的,若执行DIF操作 时不占用CPU资源,那么其他应用程序用使用更多的CPU资源进行处理,因此,由网络接口 卡执行DIF操作降低了对其他应用程序的处理速率的影响。
[0095] 在实际应用中,非请求数据在传输过程中会发生变化,如篡改,或者破坏,存在一 定程度的安全隐患,本发明实施例中,为了确认非请求数据的完整性,网络接口卡在将非请 求数据写入之前,判定计算得到的DIF值,与非请求数据对应的预设DIF值是否相等,若是, 认为非请求数据是完整的,才将缓存的非请求数据,采用DMA方式写入与非请求数据对应 的目的地址对应的存储空间中,否则,认为接收到的非请求数据是不完整的,不执行写入操 作。
[0096] 本发明实施例中,可能非请求数据不是客户端中待写入存储空间的所有数据,进 一步的,本发明实施中,在网络接口卡将缓存的非请求数据,采用DMA方式写入与非请求数 据对应的目的地址对应的存储空间中之后,还包括如下操作:
[0097] 网络接口卡在判定存在未写入存储空间的待存储数据时,确定待存储数据的目的 地址对应的存储空间大小;
[0098] 网络接口卡将确定出的存储空间大小携带在R2T命令中发送至客户端;
[0099] 网络接口卡接收客户端根据R2T命令返回的待存储数据;
[0100] 网络接口卡将接收到的待存储数据,写入待存储数据的目的地址对应的存储空间 中。
[0101] 例如,未写入存储空间的待存储数据的大小为72K,这时网络接口卡要确定待存储 数据的目的地址对应的存储空间大小,然后,服务器会发送一个携带确定出的存储空间大 小的R2T命令给客户端,客户端接收到R2T命令后,可以直接发送一个DATA_0UT消息,该 DATA_0UT消息中携带72K大小的数据,或者,发送两个DATA_0UT消息,每一个DATA_0UT消 息中携带36K大小的数据。
[0102] 为了更好地理解本发明实施例,以下给出具体应用场景,针对存储数据的过程,作 出进一步详细描述,如图3A、3B所示:
[0103] 步骤300 :网卡接收客户端发送的写数据命令;
[0104] 该步骤中,写数据命令中携带待写入存储空间的所有数据的大小为80K,并携带 8K的非请求数据。
[0105] 步骤310 :网卡将非请求数据缓存至网卡内部的RAM中;
[0106] 步骤320 :网卡向驱动层发送写数据命令;
[0107] 步骤330 :驱动层将写数据命令发送至SCSI层;
[0108] 步骤340 :SCSI层为80K的数据分配目的地址,并通过调用驱动层的发送接口将目 的地址通过驱动层发送至网卡;
[0109] 步骤350 :网卡根据目的地址将缓存的8K非请求数据存储至与非请求数据对应的 目的地址的存储空间中;
[0110] 步骤360 :网卡向客户端发送R2T命令,该命令中携带目的地址对应的存储空间中 剩余的存储空间为72K ;
[0111] 步骤370 :客户端向网卡发送72K的数据;
[0112] 步骤380 :网卡将72K的数据存储至剩余的存储空间中。
[0113] 基于上述技术方案,参阅图4所示,本发明实施例提供一种网络接口卡,该网络接 口卡包括获取单元400、缓存单元410,写入单元420,其中:
[0114] 获取单元400,用于获取非请求数据、与非请求数据对应的目的地址,其中,非请求 数据为获取单元400接收到的数据中未获取到对应的目的地址的待存储数据;
[0115] 缓存单元410,用于将获取的非请求数据缓存至网络接口卡的缓存空间;
[0116] 写入单元420,用于将缓存的非请求数据,采用DMA方式写入与非请求数据对应的 目的地址对应的存储空间中。
[0117] 本发明实施例中,可选的,获取单元400获取的非请求数据为携带在客户端发送 的写数据命令中的数据;或者,获取单元400获取的非请求数据为携带在客户端发送的非 请求DATA_0UT消息中的数据;
[0118] 其中,非请求DATA_0UT消息是获取单元400在接收到客户端发送的写数据命令 后,在向客户端发送R2T命令之前接收到的消息。
[0119] 本发明实施例中,可选的,缓存单元410具体用于:
[0120] 采用DMA方式,将非请求数据缓存至网络接口卡的RAM空间;或者
[0121] 采用DMA方式,将非请求数据缓存至网络接口卡的DDR SDRAM空间。
[0122] 本发明实施例中,进一步的,还包括确定单元430,确定单元430用于:
[0123] 获取与非请求数据对应的DIF计算规则;
[0124] 采用DIF计算规则,计算与非请求数据对应的DIF值;
[0125] 确定计算得到的DIF值,与非请求数据对应的预设DIF值相等。
[0126] 本发明实施例中,进一步的,写入单元420还用于:
[0127] 在判定存在未写入存储空间的待存储数据时,确定待存储数据的目的地址对应的 存储空间大小;
[0128] 将确定出的存储空间大小携带在R2T命令中发送至客户端;
[0129] 接收客户端根据R2T命令返回的待存储数据;
[0130] 将接收到的待存储数据,写入待存储数据的目的地址对应的存储空间中。
[0131] 如图5所示,为本发明实施例提供的网络接口卡的实体装置图,网络接口卡包括 至少一个处理器501,通信总线502,存储器503以及至少一个通信接口 504。
[0132] 其中,通信总线502用于实现上述组件之间的连接并通信,通信接口 504用于与外 部设备连接并通信。
[0133] 其中,存储器503用于存储需要执行的程序代码,当处理器501执行存储器503中 的程序代码时,实现如下功能:
[0134] 获取非请求数据,并将获取的非请求数据缓存至网络接口卡的缓存空间,其中,非 请求数据为网络接口卡接收到的数据中未获取到对应的目的地址的待存储数据;
[0135] 获取与非请求数据对应的目的地址,并将缓存的非请求数据,采用DMA方式写入 与非请求数据对应的目的地址对应的存储空间中。
[0136] 综上所述,本发明实施例中,提出一种存储数据的方法:网络接口卡获取非请求数 据,并将获取的非请求数据缓存至网络接口卡的缓存空间,其中,非请求数据为网络接口卡 接收到的数据中未获取到对应的目的地址的待存储数据;网络接口卡获取与非请求数据对 应的目的地址,并将缓存的非请求数据,采用DMA方式写入与非请求数据对应的目的地址 对应的存储空间中,在该方案中,由于将缓存的非请求数据写入非请求数据对应的目的地 址对应的存储空间中时,是采用DMA方式写入的,而采用DMA方式写入数据的速率大于采用 拷贝方式写入数据的速率,因此,降低了在存储数据的过程中所需要的耗时、提高了存储速 率,同时,由于写入操作是网络接口卡硬件来做的,因此,降级了对CPU资源的消耗,进而降 低了对其他应用程序的处理速率的影响。
[0137] 本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程 图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一 流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机 程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器 以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用 于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中的功能的装置。
[0138] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特 定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指 令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或 多个方框中的功能。
[0139] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计 算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或 其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图 一个方框或多个方框中的功能的步骤。
[0140] 尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造 性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优 选实施例以及落入本发明范围的所有变更和修改。
[0141] 显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发 明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求 及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
【权利要求】
1. 一种存储数据的方法,其特征在于,包括: 网络接口卡获取非请求数据,并将获取的非请求数据缓存至所述网络接口卡的缓存空 间,其中,所述非请求数据为所述网络接口卡接收到的数据中未获取到对应的目的地址的 待存储数据; 所述网络接口卡获取与所述非请求数据对应的目的地址,并将缓存的非请求数据,采 用直接存储器访问DMA方式写入与所述非请求数据对应的目的地址对应的存储空间中。
2. 如权利要求1所述的方法,其特征在于,所述非请求数据为携带在客户端发送的写 数据命令中的数据;或者,所述非请求数据为携带在客户端发送的非请求输出数据DATA_ OUT消息中的数据; 其中,所述非请求DATA_0UT消息是所述网络接口卡在接收到所述客户端发送的所述 写数据命令后,在向所述客户端发送准备传输R2T命令之前接收到的消息。
3. 如权利要求1或2所述的方法,其特征在于,所述网络接口卡将获取的非请求数据缓 存至所述网络接口卡的缓存空间,具体包括: 所述网络接口卡采用DMA方式,将所述非请求数据缓存至所述网络接口卡的随机存取 存储器RAM空间;或者 所述网络接口卡采用DMA方式,将所述非请求数据缓存至所述网络接口卡的双倍速率 DDR同步动态随机存储器SDRAM空间。
4. 如权利要求1-3任一项所述的方法,其特征在于,所述网络接口卡将缓存的非请求 数据,采用DMA方式写入与所述非请求数据对应的目的地址对应的存储空间中之前,还包 括: 所述网络接口卡获取与所述非请求数据对应的数据完整域DIF计算规则; 所述网络接口卡采用所述DIF计算规则,计算与所述非请求数据对应的DIF值; 所述网络接口卡确定计算得到的DIF值,与所述非请求数据对应的预设DIF值相等。
5. 如权利要求1-4任一项所述的方法,其特征在于,所述网络接口卡将缓存的非请求 数据,采用DMA方式写入与所述非请求数据对应的目的地址对应的存储空间中之后,还包 括: 所述网络接口卡在判定存在未写入存储空间的待存储数据时,确定所述待存储数据的 目的地址对应的存储空间大小; 所述网络接口卡将确定出的存储空间大小携带在R2T命令中发送至客户端; 所述网络接口卡接收所述客户端根据所述R2T命令返回的所述待存储数据; 所述网络接口卡将接收到的待存储数据,写入所述待存储数据的目的地址对应的存储 空间中。
6. -种网络接口卡,其特征在于,包括: 获取单元,用于获取非请求数据、与所述非请求数据对应的目的地址,其中,所述非请 求数据为所述获取单元接收到的数据中未获取到对应的目的地址的待存储数据; 缓存单元,用于将获取的非请求数据缓存至网络接口卡的缓存空间; 写入单元,用于将缓存的非请求数据,采用直接存储器访问DMA方式写入与所述非请 求数据对应的目的地址对应的存储空间中。
7. 如权利要求6所述的网络接口卡,其特征在于,所述获取单元获取的非请求数据为 携带在客户端发送的写数据命令中的数据;或者,所述获取单元获取的非请求数据为携带 在客户端发送的非请求输出数据DATA_OUT消息中的数据; 其中,所述非请求DATA_OUT消息是所述获取单元在接收到所述客户端发送的所述写 数据命令后,在向所述客户端发送准备传输R2T命令之前接收到的消息。
8. 如权利要求6或7所述的网络接口卡,其特征在于,所述缓存单元具体用于: 采用DMA方式,将所述非请求数据缓存至所述网络接口卡的随机存取存储器RAM空间; 或者 采用DMA方式,将所述非请求数据缓存至所述网络接口卡的双倍速率DDR同步动态随 机存储器SDRAM空间。
9. 如权利要求6-8任一项所述的网络接口卡,其特征在于,还包括确定单元,所述确定 单元用于: 获取与所述非请求数据对应的数据完整域DIF计算规则; 采用所述DIF计算规则,计算与所述非请求数据对应的DIF值; 确定计算得到的DIF值,与所述非请求数据对应的预设DIF值相等。
10. 如权利要求6-9任一项所述的网络接口卡,其特征在于,所述写入单元还用于: 在判定存在未写入存储空间的待存储数据时,确定所述待存储数据的目的地址对应的 存储空间大小; 将确定出的存储空间大小携带在R2T命令中发送至客户端; 接收所述客户端根据所述R2T命令返回的所述待存储数据; 将接收到的待存储数据,写入所述待存储数据的目的地址对应的存储空间中。
【文档编号】H04L12/02GK104063344SQ201410279606
【公开日】2014年9月24日 申请日期:2014年6月20日 优先权日:2014年6月20日
【发明者】钱飞立 申请人:华为技术有限公司