CN111339056B - 一种提高Samba处理大文件写性能的方法及系统 - Google Patents

一种提高Samba处理大文件写性能的方法及系统 Download PDF

Info

Publication number
CN111339056B
CN111339056B CN202010110215.4A CN202010110215A CN111339056B CN 111339056 B CN111339056 B CN 111339056B CN 202010110215 A CN202010110215 A CN 202010110215A CN 111339056 B CN111339056 B CN 111339056B
Authority
CN
China
Prior art keywords
smb
data
message
samba
length
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.)
Active
Application number
CN202010110215.4A
Other languages
English (en)
Other versions
CN111339056A (zh
Inventor
李世杰
张端
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Suzhou Inspur Intelligent Technology Co Ltd
Original Assignee
Suzhou Inspur Intelligent Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Suzhou Inspur Intelligent Technology Co Ltd filed Critical Suzhou Inspur Intelligent Technology Co Ltd
Priority to CN202010110215.4A priority Critical patent/CN111339056B/zh
Publication of CN111339056A publication Critical patent/CN111339056A/zh
Application granted granted Critical
Publication of CN111339056B publication Critical patent/CN111339056B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/172Caching, prefetching or hoarding of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/1737Details of further file system functions for reducing power consumption or coping with limited storage space, e.g. in mobile devices

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种提高Samba处理大文件写性能的方法及系统,该方法包括:在CIFS客户端对Samba服务端挂载一网络映射盘,然后根据所获取的SMB报文,确定待写入ICFS文件系统共享目录的写消息,然后对写消息按页对齐分配空间,分配空间后将SMB头部新的偏移位置传递至请求封装过程,建立SMB报文和请求对象之间的映射关系,在SMB动态数据往前偏移指定长度处写入一特征数据,最后调用ICFS库接口,下层应用处理完毕后根据特征数据释放以上建立的空间。该系统包括:网络映射盘挂载模块、确认模块、内存空间分配模块、映射关系建立模块、特征数据写入模块、传递模块和释放模块。通过本申请,能够有效提高客户端对大文件的写性能,进而提高Samba服务端的数据处理效率。

Description

一种提高Samba处理大文件写性能的方法及系统
技术领域
本申请涉及服务器信息处理技术领域,特别是涉及一种提高Samba处理大文件写性能的方法及系统。
背景技术
在ICFS(Inspur Cluster File System,浪潮分布式文件系统)集群提供SMB(Server Message Block,一种用于不同网络节点间的共享传输协议)协议的环境中,通常采用Samba(用于实现SMB协议,是一种从Linux服务端向Windows客户端提供共享服务的应用)来实现。其中,SMB协议最初由IBM公司开发,微软对其进行改进后作为CIFS(CommonInternet File System,通用网络文件系统)协议在Windows系统中广泛应用于文件共享服务,再后来进一步提出升级版的SMB 2.0和SMB3.0协议。目前Linux上也根据该协议规范实现了对应的Samba服务端和CIFS内核客户端。在Linux系统或者其类Unix系统当中可以通过Samba服务来实现SMB功能。在ICFS文件系统中,如何Samba如何对数据进行分配和写数据,是个重要问题。
目前,在Samba和ICFS集成的环境中,数据分配和写数据的方法通常是采用默认模式,即:Samba自身的talloc分配机制。具体地,Samba收到客户端发送的请求后,首先从Socket缓冲区读取NETBIOS头部数据,解析出整个SMB报文的长度pkt_full,然后分配长度为pkt_full的缓冲区;并再次从Socket缓冲区中读取整个SMB报文,根据SMB报文头部的操作码OP_CODE类型是创建、读取、写入等不同类型,将SMB正文数据部分依次拆分成头部SMB头部、SMB固定数据和SMB动态数据三部分,并将其偏移地址和长度信息填充到request请求对象的 in.vector向量数组不同元素中,从而可以方便后面快速定位到各部分数据。
分配的数据传给ICFS文件系统的libicfs_fs库后,由于ICFS后台的数据缓存机制,Samba和ICFS前后对数据的处理并不能保证是按照先后顺序执行的。因此,在Samba调用lib库接口结束之前,libicfs_fs库内部需要及时把写数据复制取走,从而避免Samba释放这块数据内存,而导致后面程序不可用。
然而目前Samba对数据进行分配和写数据的方法中,由于需要及时进行内存复制,需要消耗一定的时间,尤其是在数据量大的情况下,内存复制过程会消耗相当一部分时间,导致数据处理效率较低。而且数据复制过程中可能会出现内存缺页中断,从而导致写入过程延迟,进行影响Samba服务端的数据处理效率。
发明内容
本申请提供了一种提高Samba处理大文件写性能的方法及系统,以解决现有技术中数据分配和写数据的方法导致Samba服务端的数据处理效率较低的问题。
为了解决上述技术问题,本申请实施例公开了如下技术方案:
一种提高Samba处理大文件写性能的方法,所述方法包括:
在CIFS客户端对Samba服务端挂载一网络映射盘,并向所述网络映射盘中写入一个大文件;
根据所获取的SMB报文,确定待写入ICFS文件系统共享目录的写消息,所述SMB报文包括:SMB头部、SMB固定数据以及SMB动态数据;
对所述写消息按页对齐分配空间,其中,将所述SMB头部和SMB固定数据置于前一个4KB空间的末尾,将所述SMB动态数据置于下一个4KB空间的开头;
将所述SMB头部新的偏移位置传递至请求封装过程,建立所述SMB报文与请求对象的映射关系;
在所述SMB动态数据往前偏移指定长度处写入一特征数据,所述特征数据用于指示下层应用处理完毕后释放所述SMB动态数据所在的内存;
调用ICFS库接口,将所述SMB动态数据的偏移位置和数据长度传递至下层应用;
下层应用处理完毕后,根据所述特征数据,释放用于写消息动态分配的空间。
可选地,所述根据所获取的SMB报文,确定待写入ICFS文件系统共享目录的写消息的方法,包括:
读取NETBIOS 头部数据,提取所述SMB报文的长度;
读取所述SMB头部,提取操作码;
当所述操作码为写操作码时,进一步提取目录树ID;
根据所述目录树ID,获取Samba目录树对象的VFS(Virtual File System,虚拟文件系统)操作句柄信息;
判断所述VFS操作句柄信息中文件处理接口的数量是否≥2;
如果是,判定所述SMB报文请求写入的是ICFS文件系统共享目录。
可选地,对所述写消息按页对齐分配空间的方法,包括:
临时保存所述SMB头部;
根据所述写消息的SMB固定数据,确定动态数据长度;
根据动态数据长度,按照页对齐方式分配内存空间,且内存空间长度为:4KB+动态数据长度;
将临时保存的所述SMB头部复制到所述内存空间;
从Socket缓冲区读取SMB固定数据和SMB动态数据,且SMB固定数据和SMB动态数据的长度为48B+动态数据长度。
可选地,在CIFS客户端对Samba服务端挂载一网络映射盘,并向所述网络映射盘中写入一个大文件之后,所述方法还包括:建立Samba服务端和CIFS客户端之间的通信连接。
可选地,所述建立Samba服务端和CIFS客户端之间的通信连接,包括:
对SMB报文所支持的方言版本进行判断;
在Samba服务端和CIFS客户端之间建立会话;
在Samba服务端和CIFS客户端之间建立目录树连接。
可选地,在CIFS客户端对Samba服务端挂载一网络映射盘,并向所述网络映射盘中写入一个大文件之前,所述方法还包括:在Samba服务端搭建ICFS集群。
一种提高Samba处理大文件写性能的系统,所述系统还包括:
网络映射盘挂载模块,用于在CIFS客户端对Samba服务端挂载一网络映射盘,并向所述网络映射盘中写入一个大文件;
确认模块,用于根据所获取的SMB报文,确定待写入ICFS文件系统共享目录的写消息,所述SMB报文包括:SMB头部、SMB固定数据以及SMB动态数据;
内存空间分配模块,用于对所述写消息按页对齐分配空间,其中,将所述SMB头部和SMB固定数据置于前一个4KB空间的末尾,将所述SMB动态数据置于下一个4KB空间的开头;
映射关系建立模块,用于将所述SMB头部新的偏移位置传递至请求封装过程,建立所述SMB报文与请求对象的映射关系;
特征数据写入模块,用于在所述SMB动态数据往前偏移指定长度处写入一特征数据,所述特征数据用于指示下层应用处理完毕后释放所述SMB动态数据所在的内存;
传递模块,用于调用ICFS库接口,将所述SMB动态数据的偏移位置和数据长度传递至下层应用;
释放模块,用于当下层应用处理完毕后,根据所述特征数据,释放用于写消息动态分配的空间。
可选地,所述确定模块包括:
报文长度提取单元,用于读取NETBIOS头部数据,提取所述SMB报文的长度;
操作码提取单元,用于读取所述SMB头部,提取操作码;
目录树ID提取单元,用于当所述操作码为写操作码时,进一步提取目录树ID;
VFS操作句柄信息获取单元,用于根据所述目录树ID,获取Samba目录树对象的VFS操作句柄信息;
判断单元,用于判断所述VFS操作句柄信息中文件处理接口的数量是否≥2,如果是,判定所述SMB报文请求写入的是ICFS文件系统共享目录,否则,判定所述SMB报文请求写入的是Linux目录。
可选地,所述内存空间分配模块包括:
临时保存单元,用于临时保存所述SMB头部;
动态数据长度确定单元,用于根据所述写消息的SMB固定数据,确定动态数据长度;
分配单元,用于根据动态数据长度,按照页对齐方式分配内存空间,且内存空间长度为:4KB+动态数据长度;
复制单元,用于将临时保存的所述SMB头部复制到所述内存空间;
读取单元,用于从Socket缓冲区读取SMB固定数据和SMB动态数据,且SMB固定数据和SMB动态数据的长度为48B+动态数据长度。
可选地,所述系统中还包括ICFS集群搭建模块,用于在Samba服务端搭建ICFS集群。
本申请的实施例提供的技术方案可以包括以下有益效果:
本申请提供一种提高Samba处理大文件写性能的方法,该方法应用于Samba和ICFS集成的环境中,首先在CIFS客户端对Samba服务端挂载一网络映射盘,并向网络映射盘中写入一个大文件,然后根据所获取的SMB报文,确定待写入ICFS文件系统共享目录的写消息,然后对写消息按页对齐分配空间,分配空间后将SMB头部新的偏移位置传递至请求封装过程,建立SMB报文和请求对象之间的映射关系,在SMB动态数据往前偏移指定长度处写入一特征数据,最后调用ICFS库接口,将SMB动态数据的偏移位置和数据长度传递至下层应用,下层应用处理完毕后根据特征数据释放以上建立的空间。本实施例通过对写数据采用4KB内存对齐方式单独分配空间,能够有效减少页面查找造成的损耗,有利于提高数据处理效率。对写数据分配单独空间之后,将Socket数据直接读取到该缓冲区上。通过建立SMB报文与请求对象的映射关系,将请求对象的in.vector向量数组的DYNAMIC部分指向该写数据,使得Samba对外部请求的释放不会影响到DYNAMIC数据,有利于提高数据处理的稳定性。通过设置特征数据、调用ICFS库接口以及释放用于写消息动态分配的空间,使得DYNAMIC数据使用完成后,能够及时利用ICFS库对其进行清理,从而避免占用较多内存空间,因此,本实施例中的方法能够有效提高客户端对大文件的写性能。
本申请还提供一种提高Samba处理大文件写性能的系统,该系统主要包括:网络映射盘挂载模块、确认模块、内存空间分配模块、映射关系建立模块、特征数据写入模块、传递模块和释放模块。通过确认模块能够确定客户端发出的请求写入的是否为ICFS集群目录,通过内存分配模块能够实现可靠的SMB消息分段读取机制和内存对齐优化方式,从而尽可能减少内存缺页中断以及内存复制过程造成的数据写入过程延迟,有利于提高Samba服务端的数据处理效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例所提供的一种提高Samba处理大文件写性能的方法的流程示意图;
图2为本申请实施例中对SMB报文分三段读取的流程示意图;
图3为本申请实施例中写请求数据的内存分布以及该内存到request对象的映射关系示意图;
图4为本申请实施例所提供的一种提高Samba处理大文件写性能的系统的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
为了更好地理解本申请,下面结合附图来详细解释本申请的实施方式。
实施例一
参见图1,图1为本申请实施例所提供的一种提高Samba处理大文件写性能的方法的流程示意图。由图1可知,本实施例中提高Samba处理大文件写性能的方法,主要包括如下过程:
S2:在CIFS客户端对Samba服务挂载一网络映射盘,并向网络映射盘中写入一个大文件。
其中,大文件的容量≥1GB。本实施例中的方法主要应用于Samba和ICFS集成的环境中,该环境中包括Samba服务端和CIFS客户端,CIFS客户端包括:Windows客户端和Linux客户端。本实施例中主要以Windows客户端为例进行展开描述。
进一步地,本实施例中在步骤S2之前,还包括步骤S1:在Samba服务端搭建ICFS集群。具体地,在Samba服务端搭建ICFS集群,提供ICFS集成环境,并用ICFS fuse客户端挂载测试,从而确保ICFS文件存储挂载点可以正常读写数据。
继续参见图1可知,在CIFS客户端对Samba服务端挂载一网络映射盘之后,执行步骤S4:根据所获取的SMB报文,确定待写入ICFS文件系统共享目录的写消息,写消息即:WRITE消息。
也就是将待写入ICFS文件系统共享目录的写消息单独区别开来。本实施例中的SMB报文为SMB WRITE报文,SMB WRITE报文包括:SMB头部、SMB固定数据以及SMB动态数据,SMB头部、SMB固定数据以及SMB动态数据依次通常记作:SMB2_HEADER,SMB2_BODY以及SMB2_DYNAMIC。
具体地,步骤S4包括如下过程:
S41:读取NETBIOS 头部数据,提取SMB报文的长度。
NETBIOS 头部数据也就是NETBIOS HEADER。Samba服务端的数据IO模块到SMB2报文之后,首先从Socket中读取4字节,得到SMB_NETBIOS HEADER,并从SMB_NETBIOS HEADER中提取出整个SMB数据长度。
S42:读取SMB头部,提取操作码。
即:读取SMB2_HEADER,提取OP_CODE。Samba服务端的数据IO模块只读取SMB2_HEADER部分,并提取SMB2_HEADER部分的OP_CODE。
当操作码为写操作码时,也就是当OP_CODE=OP_WRITE时,执行步骤S43:进一步提取目录树ID。目录树ID记作:TREE_ID。
S44:根据TREE_ID,获取Samba目录树对象的VFS操作句柄信息。
VFS操作句柄信息,又称vfs_handles信息。
S45:判断VFS操作句柄信息中文件处理接口的数量是否≥2。
如果vfs_handles信息中文件处理接口的数量≥2,执行步骤S46:判定SMB报文请求写入的是ICFS文件系统共享目录。否则,判定SMB报文请求写入的是Linux普通目录。
以上步骤S43-S46中操作的主体都是Samba服务端的数据IO模块。
进一步地,在步骤S4之前,还包括步骤S3:建立Samba服务端和CIFS客户端之间的通信连接。
具体地,步骤S3包括如下过程:
S31:对SMB报文所支持的方言版本进行判断。
Samba服务端数据IO模块接收到SMB报文后,首先进行SMB报文支持的方言版本的判断,在Windows客户端和Samba服务端都支持SMB2报文的情况下,Samba服务端会以SMB2报文应答,Windows客户端后续开始发送SMB2格式报文。
Windows客户端后续开始发送SMB2格式报文之后,执行步骤S32:在Samba服务端和CIFS客户端之间建立会话。
具体地,Windows客户端和Samba服务端都支持SMB2报文的情况下Windows客户端接下来开始向Samba服务端请求建立会话,Samba服务端在验证用户名密码通过的情况下,返回一个会话ID,会话建立;否则,如果用户名和密码验证不通过,要求客户端重新输入用户名或密码。
S33:在Samba服务端和CIFS客户端之间建立目录树连接。
Windows客户端收到会话ID后,发起目录树连接,在目录树连接阶段,Samba服务端会在smbd子进程中分配一个tree_connect对象,smbd子进程根据tree_connect对象,首先初始化一个vfs_handles链表,用于挂载各个文件操作接口,smbd子进程进一步根据挂载的共享目录读取smb.conf配置文件中该目录字段,如果是ICFS目录,则在tree_connect对象的vfs_handles链表头部插入一个新的文件处理接口。
继续参见图1可知,由以上步骤S1-S4,能够确认写入目录是ICFS集群目录,继续执行步骤S5:对写消息按页对齐分配空间。
其中,将SMB2_HEADER和SMB2_BODY置于前一个4KB空间的末尾,将SMB2_DYNAMIC置于下一个4KB空间的开头。
即:确认写入目录是ICFS集群目录之后,进一步由Samba服务端的WRITE模块执行后续操作。WRITE模块再次分配内存,内存长度确保SMB2_HEADER和SMB2_BODY部分在第一个4KB内存段,SMB2_DYNAMIC部分在下一个4KB开始位置处。SMB2_HEADER和SMB2_BODY部分在第一个4KB内存段,且位于第一个4KB内存段的末尾,能够区别SMB报文分布的连续性,从而提高数据传输的稳定性和数据传输效率。
具体地,步骤S5包括如下过程:
S51:临时保存SMB头部。
S52:根据写消息的SMB固定数据,确定动态数据长度SMB2_DYNAMIC_LEN。
S53:根据动态数据长度SMB2_DYNAMIC_LEN,按照页对齐方式分配内存空间,且内存空间长度为:4KB+SMB2_DYNAMIC_LEN。
S54:将临时保存的SMB头部复制到内存空间。
S55:从Socket缓冲区读取SMB固定数据和SMB动态数据,且SMB固定数据和SMB动态数据的长度为:48B+动态数据长度,即:48B+SMB2_DYNAMIC_LEN。
通过以上步骤S51-S55,能够实现对写数据采用4KB内存对齐的方式单独分配空间,从而有效减少页面查找带来的损耗,有利于提高写数据的处理效率。
由以上步骤S2-S5可知,本实施例中对整个SMB报文包括三段读取流程。本申请实施例中对SMB报文分三段读取的流程示意图可以参见图2,由图2可知,本实施例中对整个报文的三段读取流程包括:
A)读取NETBIOS HEADER数据,记录SMB数据总长度;
B)读取SMB2_HEADER,判断SMB2_WRITE情况下分配4KB对齐内存;
C)一次性读取SMB2_BODY和SMB2_DYNAMIC部分至新分配内存部分,其中SMB2_BODY和SMB2_DYNAMIC的分界线刚好是一个4KB对齐位置;
D)将上面读取的SMB2_HEADER部分转移至新分配内存的SMB2_BODY之前,并连续存放。
继续参见图1可知,对写消息按页对齐分配空间之后,执行步骤S6:将SMB头部新的偏移位置传递至请求封装过程,建立SMB报文与请求对象的映射关系。
参见图3,图3为本实施例中写请求数据的内存分布以及该内存到请求对象的映射关系示意图。由图3可知,将临时保存的SMB头部复制到内存空间的位置分布。由图3还可以获知,将SMB2_HEADER新的偏移位置传递给request封装过程,从而使得SMB头部、SMB固定数据和SMB动态数据分布别映射至请求对象的输入向量[2]、输入向量[3]和输入向量[4]。即:使得SMB2_HEADER、SMB2_BODY、SMB2_DYNAMIC三部分分别映射至request对象的in.vector[2]、in.vector[3]和in.vector[4]。
S7:在SMB动态数据往前偏移指定长度处写入一特征数据,特征数据用于指示下层应用处理完毕后释放SMB2动态数据所在的内存。
本实施例中特征数据为一组提前指定的数据,通过写入特征数据,能够在下层应用使用完SMB2_DYNAMIC数据之后,确定往前偏移多少字节进行释放。本实施例中指定长度可以选择8B。
S8:调用ICFS库接口,将SMB动态数据的偏移位置和数据长度传递至下层应用。
即:调用libicfs_fs接口,将SMB2_DYNAMIC的偏移位置和数据长度传递至下层应用。
S9:下层应用处理完毕后,根据特征数据,释放用于写消息动态分配的内存。
也就是下层应用使用完毕SMB2_DYNAMIC数据之后,根据特征数据,释放专门为写消息动态分配的空间或数据结构。
下面以实际应用中的一个示例,详细描述本实施例中的方法,主要包括A和B部分:
A1):服务端搭建好ICFS集群,并用ICFS fuse客户端挂载测试保证ICFS文件存储挂载点可以正常读写数据。
A2):启动Samba服务,在Windows客户端对Samba服务端挂载一个网络映射盘,并向其中写入一个大文件,容量1GB以上。
A3):Samba服务端数据IO模块接收到SMB报文后,首先进行SMB报文支持的方言版本的判断。
A4):在Windows客户端和Samba服务端都支持SMB2报文的情况下,Samba服务端会以SMB2报文应答,Windows客户端接下来开始发送SMB2格式报文。
A5):Windows客户端接下来开始向Samba服务端请求建立会话。
A6):Samba服务端在验证用户名密码通过的情况下返回一个会话ID,会话建立;否则用户名密码不通过则要求客户端重新输入密码。
A7):Windows客户端收到会话会话ID后发起目录树连接。
A8):在目录树连接阶段,Samba服务端会在smbd子进程中分配一个目录树连接对象,并有一个TreeID标识。
A9):smbd子进程根据目录树连接对象,会首先初始化一个vfs_handles链表,专门挂载各个文件操作接口。
A10):smbd子进程进一步根据挂载的共享目录读取SMB配置文件smb.conf中该目录字段,如果是ICFS目录,则会在tree_connect对象的vfs_handles链表头部插入一个新的文件处理接口。
A11):数据IO模块收到SMB2报文后,首先从Socket中读取4字节得到SMB2 NETBIOSHEADER,并从中提取处整个SMB数据长度。
A12):SMB2_HEADER部分对所有SMB报文是固定长度,分配SMB2_HEADER_LEN长度的空间作为报文缓冲区,继续从Socket中读取SMB2_HEADER长度的数据到报文缓冲区。
A13):根据SMB2_HEADER结构,从SMB2_HEADER开头偏移12字节、长度2字节的数据中得到SMB2_OP_CODE,用以区分SMB消息的类型是否是WRITE。
A14):如果是SMB2_OP_CODE==SMB2_OP_WRITE,再进一步根据该SMB消息的TreeID得到目录树信息,TreeID在SMB2_HEADER中偏移36,长度为4字节。
A15):由以上步骤A9和A10可知,挂载Linux本地目录时,目录树对象的vfs_handles链表只有一个挂载点;挂载ICFS目录时,目录树对象的vfs_handles链表会有两个挂载点,由于链表各节点前后直接串接。因此,只要DLIST_TAIL(tconn->vfs_handles) !=tconn->vfs_handles,就判定当前操作的是一个ICFS文件目录。
以上A1)-A15)是区分对ICFS目录写数据的方法,下一步是ICFS write过程在Samba内部的进一步分割处理,具体包括如下过程:
B1):临时保存原来的SMB2_HEADER数据,tmp_buf = pkt_buf,重新分配4KB以上的内存对齐空间,pkt_buf=valloc(4KB+smb2_dynamic_len)。其中第一个4KB空间存储SMB2_HEADER和SMB2_BODY,后面的smb2_dynamic_len存储SMB2_DYNAMIC即真正的业务数据部分。
B2):根据前面设计的SMB内存分布模型,将pktbuf移动到新缓冲区的smb_header偏移位置:pkt_buf = pkt_buf + 4KB - (SMB2_HEADER+SMB2_BODY),其中SMB2_HEADER固定长度64字节,SMB2_BODY对写消息来说固定为48字节。
B3):将步骤B1)的tmp_buf数据拷贝到pkt_buf位置,释放掉tmp_buf。
B4):SMB2_HEADER已经读取过,将Socket数据读取向量的位置定位至SMB2_BODY开始处,vector.iov_base=pkt_buf+SMB2_HEADER,vector.iov_len = SMB2_BODY + SMB2_DYNAMIC_LEN,其中动态数据部分SMB2_DYNAMIC的长度取值来自于SMB2_BODY部分偏移量4、长度4字节的数据。
B5):再次从Socket读取数据,就得到了的写数据,该写数据一方面在内存中是连续存放,可以保证Samba request的in.vector指向仍然正确转换,同时把SMB2_DYNAMIC数据存放到了4KB对齐的位置。
B6):在SMB2_DYNAMIC数据在Samba内部经过一系列校验处理,并传递后libicfs_fs接口之前,向前偏移8字节写入一个事先约定的用于指示libicfs_fs使用后直接清理掉该块内存的特征数据。
B7):libicfs_fs判断需要清理掉的情况下,从SMB2_DYNAMIC向前偏移4KB位置处开始清理。
B8):Samba端处理完成的情况下,自动释放request对象,不会与SMB2_DYNAMIC数据区相互冲突。
实施例二
在图1-图3所示实施例的基础之上参见图4,图4为本申请实施例所提供的一种提高Samba处理大文件写性能的系统的结构示意图。由图4可知,本实施例中提高Samba处理大文件写性能的系统主要包括:网络映射盘挂载模块、确认模块、内存空间分配模块、映射关系建立模块、特征数据写入模块、传递模块和释放模块。
其中,网络映射盘挂载模块,用于在CIFS客户端对Samba服务端挂载一网络映射盘,并向网络映射盘中写入一个大文件。
该系统应用于Samba和ICFS集成的环境中,该环境中包括Samba服务端和CIFS客户端,大文件的容量≥1GB,CIFS客户端包括:Windows客户端和Linux客户端。
确认模块,用于根据所获取的SMB报文,确定待写入ICFS文件系统共享目录的写消息,SMB报文包括:SMB2_HEADER,SMB2_BODY以及SMB2_DYNAMIC。内存空间分配模块,用于对写消息按页对齐分配空间,其中,将SMB2_HEADER和SMB2_BODY置于前一个4KB空间的末尾,将SMB2_DYNAMIC置于下一个4KB空间的开头。映射关系建立模块,用于将SMB2_HEADER新的偏移位置传递至request封装过程,建立SMB报文与request对象的映射关系。特征数据写入模块,用于在SMB2_DYNAMIC往前偏移指定长度处写入一特征数据,特征数据用于指示下层应用处理完毕后释放SMB2_DYNAMIC所在的内存。传递模块,用于调用libicfs_fs接口,将SMB2_DYNAMIC的偏移位置和数据长度传递至下层应用。释放模块,用于当下层应用处理完毕后,根据特征数据,释放用于写消息动态分配的空间。
进一步地,确定模块包括:报文长度提取单元、操作码提取单元、目录树ID提取单元、VFS操作句柄信息获取单元和判断单元。
其中,报文长度提取单元,用于读取NETBIOS HEADER,提取SMB报文的长度;操作码提取单元,用于读取SMB2_HEADER,提取OP_CODE;目录树ID提取单元,用于当OP_CODE=OP_WRITE时,进一步提取TREE_ID;VFS操作句柄信息获取单元,用于根据TREE_ID,获取Samba目录树对象的vfs_handles信息;判断单元,用于判断vfs_handles信息中文件处理接口的数量是否≥2,如果是,判定SMB报文请求写入的是ICFS文件系统共享目录,否则,判定SMB报文请求写入的是Linux目录。
内存空间分配模块包括:临时保存单元、动态数据长度确定单元、分配单元、复制单元和读取单元。其中,临时保存单元,用于临时保存SMB2_HEADER。动态数据长度确定单元,用于根据写消息的SMB固定数据,确定动态数据的长度SMB2_DYNAMIC_LEN。分配单元,用于根据动态数据的长度SMB2_DYNAMIC_LEN,按照页对齐方式分配内存空间,且内存空间长度为:4KB+SMB2_DYNAMIC_LEN。复制单元,用于将临时保存的所述SMB2_HEADER复制到所述内存空间。读取单元,用于从Socket缓冲区读取SMB2_BODY和SMB2_DYNAMIC,且SMB2_BODY和SMB2_DYNAMIC的长度为48B+SMB2_DYNAMIC_LEN。
进一步地,本实施例中的系统还包括ICFS集群搭建单元,用于在Samba服务端搭建ICFS集群。
本实施例中的系统还包括:通信建立模块,用于建立Samba服务端和CIFS客户端之间的通信连接。
进一步地,通信建立模块包括:方言版本判断单元、会话建立单元和目录树连接单元。其中,方言版本判断单元用于对SMB报文所支持的方言版本进行判断;会话建立单元,用于在Samba服务端和CIFS客户端之间建立会话;目录树连接单元,用于在Samba服务端和CIFS客户端之间建立目录树连接。
该实施例中未详细描述的部分可以参见图1-图3所示的实施例一,两个实施例之间可以互相参照,在此不再赘述。
以上所述仅是本申请的具体实施方式,使本领域技术人员能够理解或实现本申请。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (8)

1.一种提高Samba处理大文件写性能的方法,其特征在于,所述方法包括:
在CIFS客户端对Samba服务端挂载一网络映射盘,并向所述网络映射盘中写入一个大文件;
根据所获取的SMB报文,确定待写入ICFS文件系统共享目录的写消息,所述SMB报文包括:SMB头部、SMB固定数据以及SMB动态数据;
对所述写消息按页对齐分配空间,其中,将所述SMB头部和SMB固定数据置于前一个4KB空间的末尾,将所述SMB动态数据置于下一个4KB空间的开头;
将所述SMB头部新的偏移位置传递至请求封装过程,建立所述SMB报文与请求对象的映射关系;
在所述SMB动态数据往前偏移指定长度处写入一特征数据,所述特征数据用于指示下层应用处理完毕后释放所述SMB动态数据所在的内存;
调用ICFS库接口,将所述SMB动态数据的偏移位置和数据长度传递至下层应用;
下层应用处理完毕后,根据所述特征数据,释放用于写消息动态分配的空间;
其中,对所述写消息按页对齐分配空间的方法,包括:
临时保存所述SMB头部;
根据所述写消息的SMB固定数据,确定动态数据长度;
根据动态数据长度,按照页对齐方式分配内存空间,且内存空间长度为:4KB+动态数据长度;
将临时保存的所述SMB头部复制到所述内存空间;
从Socket缓冲区读取SMB固定数据和SMB动态数据,且SMB固定数据和SMB动态数据的长度为48B+动态数据长度。
2.根据权利要求1所述的一种提高Samba处理大文件写性能的方法,其特征在于,所述根据所获取的SMB报文,确定待写入ICFS文件系统共享目录的写消息的方法,包括:
读取NETBIOS 头部数据,提取所述SMB报文的长度;
读取所述SMB头部,提取操作码;
当所述操作码为写操作码时,进一步提取目录树ID;
根据所述目录树ID,获取Samba目录树对象的VFS操作句柄信息;
判断所述VFS操作句柄信息中文件处理接口的数量是否≥2;
如果是,判定所述SMB报文请求写入的是ICFS文件系统共享目录。
3.根据权利要求1所述的一种提高Samba处理大文件写性能的方法,其特征在于,在CIFS客户端对Samba服务端挂载一网络映射盘,并向所述网络映射盘中写入一个大文件之后,所述方法还包括:建立Samba服务端和CIFS客户端之间的通信连接。
4.根据权利要求3所述的一种提高Samba处理大文件写性能的方法,其特征在于,所述建立Samba服务端和CIFS客户端之间的通信连接,包括:
对SMB报文所支持的方言版本进行判断;
在Samba服务端和CIFS客户端之间建立会话;
在Samba服务端和CIFS客户端之间建立目录树连接。
5.根据权利要求1-4中任一所述的一种提高Samba处理大文件写性能的方法,其特征在于,在CIFS客户端对Samba服务端挂载一网络映射盘,并向所述网络映射盘中写入一个大文件之前,所述方法还包括:在Samba服务端搭建ICFS集群。
6.一种提高Samba处理大文件写性能的系统,其特征在于,所述系统还包括:
网络映射盘挂载模块,用于在CIFS客户端对Samba服务端挂载一网络映射盘,并向所述网络映射盘中写入一个大文件;
确认模块,用于根据所获取的SMB报文,确定待写入ICFS文件系统共享目录的写消息,所述SMB报文包括:SMB头部、SMB固定数据以及SMB动态数据;
内存空间分配模块,用于对所述写消息按页对齐分配空间,其中,将所述SMB头部和SMB固定数据置于前一个4KB空间的末尾,将所述SMB动态数据置于下一个4KB空间的开头;
映射关系建立模块,用于将所述SMB头部新的偏移位置传递至请求封装过程,建立所述SMB报文与请求对象的映射关系;
特征数据写入模块,用于在所述SMB动态数据往前偏移指定长度处写入一特征数据,所述特征数据用于指示下层应用处理完毕后释放所述SMB动态数据所在的内存;
传递模块,用于调用ICFS库接口,将所述SMB动态数据的偏移位置和数据长度传递至下层应用;
释放模块,用于当下层应用处理完毕后,根据所述特征数据,释放用于写消息动态分配的空间;
其中,所述内存空间分配模块包括:
临时保存单元,用于临时保存所述SMB头部;
动态数据长度确定单元,用于根据所述写消息的SMB固定数据,确定动态数据长度;
分配单元,用于根据动态数据长度,按照页对齐方式分配内存空间,且内存空间长度为:4KB+动态数据长度;
复制单元,用于将临时保存的所述SMB头部复制到所述内存空间;
读取单元,用于从Socket缓冲区读取SMB固定数据和SMB动态数据,且SMB固定数据和SMB动态数据的长度为48B+动态数据长度。
7.根据权利要求6所述的一种提高Samba处理大文件写性能的系统,其特征在于,所述确认模块包括:
报文长度提取单元,用于读取NETBIOS头部数据,提取所述SMB报文的长度;
操作码提取单元,用于读取所述SMB头部,提取操作码;
目录树ID提取单元,用于当所述操作码为写操作码时,进一步提取目录树ID;
VFS操作句柄信息获取单元,用于根据所述目录树ID,获取Samba目录树对象的VFS操作句柄信息;
判断单元,用于判断所述VFS操作句柄信息中文件处理接口的数量是否≥2,如果是,判定所述SMB报文请求写入的是ICFS文件系统共享目录,否则,判定所述SMB报文请求写入的是Linux目录。
8.根据权利要求6或7所述的一种提高Samba处理大文件写性能的系统,其特征在于,所述系统中还包括ICFS集群搭建模块,用于在Samba服务端搭建ICFS集群。
CN202010110215.4A 2020-02-23 2020-02-23 一种提高Samba处理大文件写性能的方法及系统 Active CN111339056B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010110215.4A CN111339056B (zh) 2020-02-23 2020-02-23 一种提高Samba处理大文件写性能的方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010110215.4A CN111339056B (zh) 2020-02-23 2020-02-23 一种提高Samba处理大文件写性能的方法及系统

Publications (2)

Publication Number Publication Date
CN111339056A CN111339056A (zh) 2020-06-26
CN111339056B true CN111339056B (zh) 2022-10-25

Family

ID=71183545

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010110215.4A Active CN111339056B (zh) 2020-02-23 2020-02-23 一种提高Samba处理大文件写性能的方法及系统

Country Status (1)

Country Link
CN (1) CN111339056B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113612811B (zh) * 2021-06-20 2023-04-07 济南浪潮数据技术有限公司 一种在多通道中客户端挂载的方法、系统、设备及介质
CN114500406B (zh) * 2022-02-11 2024-05-14 浪潮云信息技术股份公司 一种云文件存储细粒度QoS控制方法及系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103002027A (zh) * 2012-11-26 2013-03-27 中国科学院高能物理研究所 基于键值对系统实现树形目录结构的数据存储系统及方法
CN109309631A (zh) * 2018-08-15 2019-02-05 新华三技术有限公司成都分公司 一种基于通用网络文件系统写入数据的方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8667076B2 (en) * 2006-07-28 2014-03-04 Microsoft Corporation Mapping universal plug and play discovered items to an SMB location

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103002027A (zh) * 2012-11-26 2013-03-27 中国科学院高能物理研究所 基于键值对系统实现树形目录结构的数据存储系统及方法
CN109309631A (zh) * 2018-08-15 2019-02-05 新华三技术有限公司成都分公司 一种基于通用网络文件系统写入数据的方法及装置

Also Published As

Publication number Publication date
CN111339056A (zh) 2020-06-26

Similar Documents

Publication Publication Date Title
US6668374B1 (en) Method and apparatus for upgrading firmware in an embedded system
CN111339056B (zh) 一种提高Samba处理大文件写性能的方法及系统
US7165145B2 (en) System and method to protect data stored in a storage system
JPH05509430A (ja) ネットワークによるオペレーティングシステムのダウンローディング
CN101217571B (zh) 用于多副本数据网格系统中的写/读文件操作的方法
EP3826267B1 (en) File sending method, file receiving method and file transceiving apparatus
EP3495981A1 (en) Directory deletion method and device, and storage server
US10977049B2 (en) Installing of operating system
JP5395108B2 (ja) 組み込みシステム内のファームウエアをアップグレードする装置と方法
CN111327680B (zh) 认证数据同步方法、装置、系统、计算机设备和存储介质
CN110445580B (zh) 数据发送方法及装置、存储介质、电子装置
US7827194B2 (en) Access to shared disk device on storage area network
CN115987974A (zh) 一种轻量级ftp服务方法及系统
CN114116649A (zh) 一种实现文件存储QoS的方法及系统
CN115993979A (zh) 配置转换方法、平滑升级方法、装置、设备及存储介质
CN115374057A (zh) 数据快照方法及相关设备
US20120016854A1 (en) File-sharing system and method for managing files, and program
CN110231954B (zh) 用于安卓系统ota数据的精简传输、升级方法及其存储介质
CN112511609A (zh) 数据传输方法、装置及存储介质
CN115865900A (zh) 一种数据断点下载方法及系统
CN115941459A (zh) 一种云平台的自动化部署方法
CN116560798A (zh) 一种虚拟机创建方法、系统、装置及服务器
KR20020033317A (ko) 로딩 서버를 사용한 교환기 시스템 로딩 에러 처리장치 및방법
CN115766704A (zh) 文件传输方法、设备及存储介质
CN117850841A (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