买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】一种WRITE_SAME函数的优化实现方法及装置_苏州浪潮智能科技有限公司_201710338288.7 

申请/专利权人:苏州浪潮智能科技有限公司

申请日:2017-05-15

公开(公告)日:2020-02-07

公开(公告)号:CN107179929B

主分类号:G06F9/445(20180101)

分类号:G06F9/445(20180101);G06F8/71(20180101)

优先权:

专利状态码:有效-授权

法律状态:2020.02.07#授权;2017.10.20#实质审查的生效;2017.09.19#公开

摘要:本发明公开了一种ceph+tgt架构中SCSI指令WRITE_SAME函数的实现方法及装置,该方法包括:向WRITE_SAME函数分配预定缓存;将待写入数据重复复制至所述预定缓存,以通过所述待写入数据填满所述预定缓存;通过rbd_write接口,将填满的所述预定内存写入后端存储;可见,相对于现有方案中需要通过频繁调用rbd_write接口实现数据写入的方式,在本方案中,预先将待写入数据写入预定缓存,便可通过调用一次rbd_write接口实现将待写入数据写入后端存储,从而极大优化了write_same的实现方式,解决了Ceph+tgt架构对vmware系统兼容性问题。

主权项:1.一种ceph+tgt架构中SCSI指令WRITE_SAME函数的实现方法,其特征在于,包括:向WRITE_SAME函数分配预定缓存;将待写入数据重复复制至所述预定缓存,以通过所述待写入数据填满所述预定缓存;通过rbd_write接口,将填满的所述预定缓存内的待写入数据写入后端存储。

全文数据:_种1^ITE_SAME函数的优化实现方法及装置技术领域[0001]本发明涉及函数优化技术领域,更具体地说,涉及一种ceph+tgt架构中SCSI指令WRITE_SAME函数的实现方法及装置。背景技术[0002]Ceph+tgt的架构可以将由Ceph实现的分布式存储通过tgt对外实现标准的iSCSi协议接口,从而客户端可以通过标准的iscsiinitiator端接入到Ceph实现的分布式存储当中而不用通过其他复杂的方式。在这里,Ceph+tgt的架构对vmware的兼容性问题是大多数存储产品都必须面对的一个问题,Ceph+tgt的架构在应用到vmware系统作为客户端的时候,发现在映射的Iun中装入虚拟机的速度非常慢,经过测试之后发现,在往映射的Iun拷贝数据的速度也非常慢,后端的速度大概为70KS左右,这种速度导致了往映射的Iun中装入虚拟机速度非常慢。[0003]因此,如何解决上述问题,提高ceph+tgt的存储架构与vmware系统的兼容性,是本领域技术人员需要解决的问题。发明内容[0004]本发明的目的在于提供一种ceph+tgt架构中SCSI指令WRITE_SAME函数的实现方法及装置,以实现提高ceph+tgt的存储架构与vmware系统的兼容性。[0005]为实现上述目的,本发明实施例提供了如下技术方案:[0006]一种ceph+tgt架构中SCSI指令WRITE_SAME函数的实现方法,包括:[0007]向WRITE_SAME函数分配预定缓存;[0008]将待写入数据重复复制至所述预定缓存,以通过所述待写入数据填满所述预定缓存;[0009]通过rbd_write接口,将填满的所述预定内存写入后端存储。[0010]其中,所述向WRITE_SAME函数分配预定缓存,包括:[0011]确定待写入数据的第一字节数;[0012]根据所述第一字节数据确定预定缓存的第二字节数;[0013]向WRITE_SAME函数分配所述第二字节数的预定缓存。[00M]其中,所述向WRITE_SAME函数分配所述第二字节数的预定缓存,包括:利用malloc函数向WRITE_SAME函数分配所述第二字节数的预定缓存。[0015]其中,所述将待写入数据重复复制至所述预定缓存,以通过所述待写入数据填满所述预定缓存,包括:[0016]利用808;[_861:_0111:_131^€61'0111函数获取待写入数据;[0017]将所述第一字节数的待写入数据重复复制至所述第二字节数的预定缓存,以通过所述第一字节数的待写入数据填满所述第二字节数的预定缓存。[0018]其中,所述将所述第一字节数的待写入数据重复复制至所述第二字节数的预定缓存,包括:[0019]通过memcpy函数接口或strncpy函数接口,将所述第一字节数的待写入数据重复复制至所述第二字节数的预定缓存。[0020]一种ceph+tgt架构中SCSI指令WRITE_SAME函数的实现装置,包括:[0021]分配模块,用于向WRITE_SAME函数分配预定缓存;[0022]复制模块,用于将待写入数据重复复制至所述预定缓存,以通过所述待写入数据填满所述预定缓存;[0023]数据写入模块,用于通过rbcLwrite〇接口,将填满的所述预定内存写入后端存储。[0024]其中,所述分配模块包括:[0025]第一确定单元,用于确定待写入数据的第一字节数;[0026]第二确定单元,用于根据所述第一字节数据确定预定缓存的第二字节数;[0027]分配单元,用于向WRITE_SAME函数分配所述第二字节数的预定缓存。[0028]其中,所述分配单元利用malloc函数向WRITE_SAME函数分配所述第二字节数的预定缓存。[0029]其中,所述复制模块包括:[0030]获取单元,用于利用808;[_861:_0111:_131^€61'0111函数获取待写入数据;[0031]复制单元,用于将所述第一字节数的待写入数据重复复制至所述第二字节数的预定缓存,以通过所述第一字节数的待写入数据填满所述第二字节数的预定缓存。[0032]其中,所述复制单元通过memcpy函数接口或strncpy函数接口,将所述第一字节数的待写入数据重复复制至所述第二字节数的预定缓存。[0033]通过以上方案可知,本发明实施例提供的一种ceph+tgt架构中SCSI指令WRITE_SAME函数的实现方法,包括:向WRITE_SAME函数分配预定缓存;将待写入数据重复复制至所述预定缓存,以通过所述待写入数据填满所述预定缓存;通过rbcLwrite〇接口,将填满的所述预定内存写入后端存储;[0034]可见,相对于现有方案中需要通过频繁调用rbd_Write接口实现数据写入的方式,在本方案中,预先将待写入数据写入预定缓存,便可通过调用一次rbcLwrite〇接口实现将待写入数据写入后端存储,从而极大优化了write_same的实现方式,解决了Ceph+tgt架构对vmware系统兼容性问题;本发明还公开了一种ceph+tgt架构中SCSI指令WRITE_SAME函数的实现装置,同样能实现上述技术效果。附图说明[0035]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0036]图1为本发明实施例公开的一种c印h+tgt架构中SCSI指令WRITE_SAME函数的实现方法流程示意图;[0037]图2为本发明实施例公开的在预定缓存中复制待写入数据的示意图;[0038]图3为本发明实施例公开的一种c印h+tgt架构中SCSI指令WRITE_SAME函数的实现装置结构示意图。具体实施方式[0039]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。[0040]需要说明的是,Ceph+tgt的架构在应用到vmware系统作为客户端的时候,发现在映射的Iun中拷贝数据和装入虚拟机的速度非常慢,从而引发了该架构对vmware系统的兼容性问题。vmware系统与我们普通的系统Linux或者windows等在拷贝数据的时候实现方式有所不同,普通系统拷贝一个文件只需要write指令就可以了,而vmware系统拷贝数据除了普通的write指令之外还需要write_same指令,对于write_same指令做如下简单介绍:[0041]Write_same主要实现两个功能:[0042]l、unmap功能:对unmap功能功能的实现直接调用了ceph中的rbd_discard函数接口;[0043]2、从Write_bUf里面读取一个LBA的数据,然后写入到从某个地址开始的后面连续多个LBA中。[0044]需要说明的是,在功能2中,主要封装了ceph的rbd_write函数接口,主要相关的源代码文件为tgt中的user目录下的Bs_rbd.c文件中的271-308行,具体源码为:[0045][0046][0047]通过分析源码可以发现,这种实现Write_Same的方式,主要过程为:[0048]1、通过blocksize=l〈〈cmd-dev-blk_shift获取bIocksize的大小为512B;[0049]2、通过tmpbuf=scsi_get_out_buffercmd获取要写入的数据;其中tmpbuf大小为512B;[0050]3、通过一个while循环,循环调用rbd_write接口tlblocksize次。[0051]在这个过程中,rbd_Write接口的实现方式在后端需要经过多个过程,这个实现过程很复杂也很费时,这种实现write_same的过程频写小块数据且繁调用rbd_write接口多次,非常耗时。[0052]因此,本发明实施例公开了一种c印h+tgt架构中SCSI指令WRITE_SAME函数的实现方法及装置,在write_same实现逻辑架构上的调整,可以极大降低rbd_write〇函数接口的调用频率,节约时间资源,从而提高write_same的性能,提高ceph+tgt的存储架构与vmware系统的兼容性。[0053]参见图1,本发明实施例提供的一种ceph+tgt架构中SCSI指令WRITE_SAME函数的实现方法,包括:[0054]S101、向WRITE_SAME函数分配预定缓存;[0055]其中,所述向WRITE_SAME函数分配预定缓存,包括:[0056]确定待写入数据的第一字节数;[0057]根据所述第一字节数据确定预定缓存的第二字节数;[0058]向WRITE_SAME函数分配所述第二字节数的预定缓存。[0059]具体的,可利用malloc〇函数向WRITE_SAME函数分配所述第二字节数的预定缓存。[0000]在本实施例中,可在内存中分配一个第二字节数tl的buffer,具体可使用malloc函数分配,第二字节数tl可根据待写入数据的第一字节数blocksize进行确定,例如:可设定第二字节数是第一字节数的整数倍,以便重复将待写入数据写入预定缓存。[0061]S102、将待写入数据重复复制至所述预定缓存,以通过所述待写入数据填满所述预定缓存;[0062]其中,所述将待写入数据重复复制至所述预定缓存,以通过所述待写入数据填满所述预定缓存,包括:[0063]利用808;[_861:_0111:_131^€61'0111函数获取待写入数据;[0064]将所述第一字节数的待写入数据重复复制至所述第二字节数的预定缓存,以通过所述第一字节数的待写入数据填满所述第二字节数的预定缓存。[0065]参见图2,本方案将从命令中获取的读写数据,S卩scsi_get_out_buffercmd获取的待写入数据tmpbuf重复复制到上述分配的内存中,直到填满tl字节数的buffer,具体可以通过memcpy或strncpy等函数接口实现。[0066]S103、通过rbd_write接口,将填满的所述预定内存写入后端存储。[0067]可以理解的是,本方案将上述填充的buffer通过rbd_write接口一次性写入到后端存储中去,具体可以调用rbd_writerbd_rbd_image,offset,tl,buffer来实现。可见,通过上述write_same的实现方式,只需调用一次rbd_write〇写接口来将数据写入后端存储,从而极大优化了write_same的实现方式,解决了Ceph+tgt架构对vmware系统兼容性问题。[0068]下面对本发明实施例提供的实现装置进行介绍,下文描述的实现装置与上文描述的实现方法可以相互参照。[0069]参见图3,本发明实施例提供的一种ceph+tgt架构中SCSI指令WRITE_SAME函数的实现装置,包括:[0070]分配模块100,用于向WRITE_SAME函数分配预定缓存;[0071]复制模块200,用于将待写入数据重复复制至所述预定缓存,以通过所述待写入数据填满所述预定缓存;[0072]数据写入模块300,用于通过rbcLwrite〇接口,将填满的所述预定内存写入后端存储。[0073]基于上述实施例,所述分配模块包括:[0074]第一确定单元,用于确定待写入数据的第一字节数;[0075]第二确定单元,用于根据所述第一字节数据确定预定缓存的第二字节数;[0076]分配单元,用于向WRITE_SAME函数分配所述第二字节数的预定缓存。[0077]基于上述实施例,所述分配单元利用malloc函数向WRITE_SAME函数分配所述第二字节数的预定缓存。[0078]基于上述实施例,所述复制模块包括:[0079]获取单元,用于利用808;[_861:_0111:_131^€61'0111函数获取待写入数据;[0080]复制单元,用于将所述第一字节数的待写入数据重复复制至所述第二字节数的预定缓存,以通过所述第一字节数的待写入数据填满所述第二字节数的预定缓存。[0081]基于上述实施例,所述复制单元通过memcpy函数接口或strncpy函数接口,将所述第一字节数的待写入数据重复复制至所述第二字节数的预定缓存。[0082]综上可见,由于Ceph+tgt的架构下,tgt中对write_same的实现方式有一定的问题,主要就在于频繁调用rbd_write写接口,这个rbd_write写接口的实现方式很复杂很耗费时间资源,本文通过一种新的write_same的实现方式,使得最终只调用一次rbd_write,极大优化了write_same的实现方式。[0083]本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。[0084]对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

权利要求:1.一种ceph+tgt架构中SCSI指令WRITE_SAME函数的实现方法,其特征在于,包括:向WRITE_SAME函数分配预定缓存;将待写入数据重复复制至所述预定缓存,以通过所述待写入数据填满所述预定缓存;通过rbd_write接口,将填满的所述预定内存写入后端存储。2.根据权利要求1所述的实现方法,其特征在于,所述向WRITE_SAME函数分配预定缓存,包括:确定待写入数据的第一字节数;根据所述第一字节数据确定预定缓存的第二字节数;向WRITE_SAME函数分配所述第二字节数的预定缓存。3.根据权利要求2所述的实现方法,其特征在于,所述向WRITE_SAME函数分配所述第二字节数的预定缓存,包括:利用malloc函数向WRITE_SAME函数分配所述第二字节数的预定缓存。4.根据权利要求3所述的实现方法,其特征在于,所述将待写入数据重复复制至所述预定缓存,以通过所述待写入数据填满所述预定缓存,包括:利用scsi_get_out_buffercmd函数获取待写入数据;将所述第一字节数的待写入数据重复复制至所述第二字节数的预定缓存,以通过所述第一字节数的待写入数据填满所述第二字节数的预定缓存。5.根据权利要求4所述的实现方法,其特征在于,所述将所述第一字节数的待写入数据重复复制至所述第二字节数的预定缓存,包括:通过memcpy函数接口或strncpy函数接口,将所述第一字节数的待写入数据重复复制至所述第二字节数的预定缓存。6.—种ceph+tgt架构中SCSI指令WRITE_SAME函数的实现装置,其特征在于,包括:分配模块,用于向WRITE_SAME函数分配预定缓存;复制模块,用于将待写入数据重复复制至所述预定缓存,以通过所述待写入数据填满所述预定缓存;数据写入模块,用于通过rbd_write接口,将填满的所述预定内存写入后端存储。7.根据权利要求6所述的实现装置,其特征在于,所述分配模块包括:第一确定单元,用于确定待写入数据的第一字节数;第二确定单元,用于根据所述第一字节数据确定预定缓存的第二字节数;分配单元,用于向WRITE_SAME函数分配所述第二字节数的预定缓存。8.根据权利要求7所述的实现装置,其特征在于,所述分配单元利用malloc函数向WRITE_SAME函数分配所述第二字节数的预定缓存。9.根据权利要求8所述的实现装置,其特征在于,所述复制模块包括:获取单元,用于利用scsi_get_out_buffercmd函数获取待写入数据;复制单元,用于将所述第一字节数的待写入数据重复复制至所述第二字节数的预定缓存,以通过所述第一字节数的待写入数据填满所述第二字节数的预定缓存。10.根据权利要求9所述的实现装置,其特征在于,所述复制单元通过memcpy函数接口或strncpy函数接口,将所述第一字节数的待写入数据重复复制至所述第二字节数的预定缓存。

百度查询: 苏州浪潮智能科技有限公司 一种WRITE_SAME函数的优化实现方法及装置

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。