CN111309700B - 一种面向多共享目录树的控制方法及系统 - Google Patents
一种面向多共享目录树的控制方法及系统 Download PDFInfo
- Publication number
- CN111309700B CN111309700B CN202010093617.8A CN202010093617A CN111309700B CN 111309700 B CN111309700 B CN 111309700B CN 202010093617 A CN202010093617 A CN 202010093617A CN 111309700 B CN111309700 B CN 111309700B
- Authority
- CN
- China
- Prior art keywords
- execution unit
- worker
- tree
- data
- queue
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 74
- 241001362551 Samba Species 0.000 claims abstract description 46
- 238000012545 processing Methods 0.000 claims abstract description 42
- 230000008569 process Effects 0.000 claims abstract description 26
- 238000012360 testing method Methods 0.000 claims abstract description 20
- 230000003044 adaptive effect Effects 0.000 claims abstract description 16
- 238000004364 calculation method Methods 0.000 claims description 14
- 238000013500 data storage Methods 0.000 claims description 7
- 238000012986 modification Methods 0.000 claims description 5
- 230000004048 modification Effects 0.000 claims description 5
- 238000005538 encapsulation Methods 0.000 claims description 3
- 238000000605 extraction Methods 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 8
- 238000012544 monitoring process Methods 0.000 description 6
- 230000004044 response Effects 0.000 description 4
- 238000005070 sampling Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 239000000284 extract Substances 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 238000011217 control strategy Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/176—Support for shared access to files; File sharing support
- G06F16/1767—Concurrency control, e.g. optimistic or pessimistic approaches
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
- G06F16/1824—Distributed file systems implemented using Network-attached Storage [NAS] architecture
- G06F16/1827—Management specifically adapted to NAS
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
- G06F16/137—Hash-based
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/176—Support for shared access to files; File sharing support
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/185—Hierarchical storage management [HSM] systems, e.g. file migration or policies thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/901—Buffering arrangements using storage descriptor, e.g. read or write pointers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9031—Wraparound memory, e.g. overrun or underrun detection
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种面向多共享目录树的控制方法及系统,该方法包括:根据待共享目录的个数,在服务端Samba配置文件中设置环形队列数和worker执行单元个数;在服务端运行Samba主进程;获取来自客户端的数据读写测试请求;根据所述数据读写测试请求,利用基于SMB报文头部数据的自适应均衡控制算法,将不同目录的请求任务定向至不同的worker执行单元。该系统包括:一个IO执行单元、多个worker执行单元、设置单元、请求获取单元以及并发控制单元。通过本申请,能够有效提高Samba服务端的数据处理效率以及客户端的数据处理效率。
Description
技术领域
本申请涉及信息化共享技术领域,特别是涉及一种面向多共享目录树的控制方法及系统。
背景技术
在云数据中心逐渐盛行的时代,越来越多的企业都在企业内部搭建自己的云办公平台,且在云办公平台上配置NAS(Network Attached Storage,网络附加存储,表示从网络端挂载到本地的一个存储设备)存储设备,从而能够便捷地为企业内部员工提供海量存储空间和备份功能。其中,NAS存储设备所采用的NAS存储方式,只要将网络路径节点映射到本地一个盘符或目录即可实现。
目前,在云办公平台中采用的协议主要是SMB(Server Message Block,协议名称,微软公司对其进行重大修改后用于不同网络节点间的共享传输协议)共享协议,SMB共享协议是微软为不同设备网络间共享提出的一个统一标准,Linux平台上Samba开源组织遵循该共享协议实现了Linux系统目录到Windows客户端的挂载;Samba(实现SMB协议,用于从Linux服务端向Windows客户端提供共享服务的应用)在用户空间实现,缺省提供多进程的目录共享方式。因此,如何设计一种面向多共享目录树的控制方法,是个重要问题。
目前面向多共享目录树的控制方法主要是,根据现有的SMB协议,使一个服务端可提供多个共享目录,一个客户端就可以挂载多个共享目录。运行过程中,客户端通过判断服务端共享目录的IP地址和TCP(Transmission Control Protocol 传输控制协议)端口号,判断是否为自身需要的共享目录。如果是自身所需要的共享目录,再进行数据交互。
然而,目前面向多共享目录树的控制方法中,客户端对服务端共享目录进行判断时,在一个客户端挂载多个共享目录的情况下,会判定服务端多个共享目录的IP地址和TCP端口号一致,因此各个命令请求都写入了同一SOCKET套接字,相应地,服务端也是同一个smbd(smb daemon,由Samba代码编译产生的smb服务端后台进程)子进程处理。因此,客户端中,其中一个目录读写大量数据文件时,另外的挂载目录响应就会相对较慢,从而导致客户端数据处理效率较低。
发明内容
本申请提供了一种面向多共享目录树的控制方法及系统,以解决现有技术中客户端数据处理效率较低的问题。
为了解决上述技术问题,本申请实施例公开了如下技术方案:
一种面向多共享目录树的控制方法,所述方法包括:
根据待共享目录的个数,在服务端Samba配置文件中设置环形队列数和worker执行单元个数,其中,worker执行单元用于在Samba进程中进行计算处理,环形队列用于在IO执行单元和worker执行单元之间进行数据交换,所述IO执行单元用于获取目录请求并将所述目录请求定向至相应的worker执行单元中;
在服务端运行Samba主进程;
获取来自客户端的数据读写测试请求;
服务端根据所述数据读写测试请求,利用基于SMB报文头部数据的自适应均衡控制算法,将不同目录的请求任务定向至不同的worker执行单元,其中,一个IO执行单元与多个worker执行单元相匹配。
可选地,所述服务端根据所述数据读写测试请求,利用基于SMB报文头部数据的自适应均衡控制算法,将不同目录的请求任务定向至不同的worker执行单元,包括:
根据服务端实际共享目录的个数,设定针对TREE ID的散列表长度和除留余数法使用的除数N,所述除留余数法用于计算散列表索引;
提取输入口SMB报文中的TREE ID字段;
判断所述TREE ID字段是否为0;
如果是,在IO执行单元内执行原有的Samba处理逻辑;
如果否,利用SMB报文头部数据的TREE ID字段作为关键字,通过散列表计算并确定相应的环形队列;
IO执行单元根据当前接收的所述输入口SMB报文和最近一次相同TREE ID报文之间的时间间隔,计算流入速率;
判断所述流入速率是否超过设定的流入速率阈值;
如果是,开启新的worker执行单元;
将所述新的worker执行单元并与所述TREE ID字段对应的输入输出环形队列相关联。
可选地,所述方法还包括:
采用无锁原子操作队列,对IO执行单元和worker执行单元进行并发控制。
可选地,所述无锁原子操作队列为CAS(Compare And Swap,比较与交换,CPU指令中的一个比较交换技术,用来解决线程冲突,达到多并发条件下无锁处理的目的)原子操作队列。
可选地,所述采用无锁原子操作队列,对IO执行单元和worker执行单元进行并发控制,包括:
在输入方向,IO 执行单元和每个worker执行单元之间设置一并发无锁原子操作队列,且当SMB报文流速增大时,启动新的worker执行单元;
在输出方向,每个worker执行单元和IO执行单元之间设置一并发无锁原子操作队列;
进行数据存储时,Samba内部将输入报文封装为定长request对象;
进行数据并发处理时,设定输入方向的环形队列采用单生产者多消费者模型,输出方向的环形队列采用多生产者单消费者模型;
生产者不断写入数据并修改写指针的位置,且消费者不断读出数据并修改读指针的位置。
一种面向多共享目录树的控制系统,所述系统设置于服务端,所述系统包括:一个IO执行单元、多个worker执行单元、设置单元、请求获取单元以及并发控制单元,一个IO执行单元与多个worker执行单元相匹配;
所述worker执行单元,用于在Samba进程中进行计算处理;
所述设置单元,用于根据待共享目录的个数,在服务端Samba配置文件中设置环形队列数和worker执行单元个数,其中,环形队列用于在IO执行单元和worker执行单元之间进行数据交换;
所述请求获取单元,用于获取来自客户端的数据读写测试请求;
所述IO执行单元,用于根据所述数据读写测试请求,利用基于SMB报文头部数据的自适应均衡控制算法,将不同目录的请求任务定向至不同的worker执行单元;
所述并发控制单元,用于采用无锁原子操作队列,对IO执行单元和worker执行单元进行并发控制。
可选地,所述IO执行单元包括:
输入输出模块,用于获取SMB报文数据,以及在TREE ID字段不为0时,以TREE ID字段作为关键字,通过散列表计算并确定相应的环形队列和worker执行单元;
监控模块,用于计算每个TREE ID报文的流入速率,并判断所述流入速率是否超过设定的流入速率阈值。
可选地,所述输入输出模块包括:
设定子模块,用于根据服务端实际共享目录的个数,设定针对TREE ID的散列表长度和除留余数法使用的除数N;
提取子模块,用于提取输入口SMB报文中的TREE ID字段;
第一判断子模块,用于判断所述TREE ID字段是否为0;
第一执行子模块,用于当所述TREE ID字段为0时,在IO执行单元内执行原有的Samba处理逻辑;
第二执行子模块,用于当所述TREE ID字段不为0时,利用SMB报文头部数据的TREEID字段作为关键字,通过散列表计算并确定相应的环形队列和worker执行单元。
可选地,所述监控模块包括:
流入速率计算子模块,用于根据当前接收的所述输入口SMB报文和最近一次相同TREE ID报文之间的时间间隔,计算流入速率;
第二判断子模块,用于判断所述流入速率是否超过设定的流入速率阈值;
开启子模块,用于当所述流入速率超过设定的流入速率阈值时,开启新的worker执行单元;
关联子模块,用于将所述新的worker执行单元并与所述TREE ID字段对应的输入输出环形队列相关联。
可选地,所述并发控制单元包括:
输入控制模块,用于在输入方向,在IO 执行单元和每个worker执行单元之间设置一并发无锁原子操作队列;
输出控制模块,用于在输出方向,在每个worker执行单元和IO执行单元之间设置一并发无锁原子操作队列;
启动模块,用于当SMB报文流速增大时,启动新的worker执行单元;
request对象封装模块,用于进行数据存储时,在Samba内部将输入报文封装为定长request对象;
模型设定模块,用于进行数据并发处理时,设定输入方向的环形队列采用单生产者多消费者模型,输出方向的环形队列采用多生产者单消费者模型;
指针修改模块,用于当生产者写入数据时修改写指针位置,以及,消费者读出数据时修改读指针的位置。
本申请的实施例提供的技术方案可以包括以下有益效果:
本申请提供一种面向多共享目录树的控制方法,该方法首先根据待共享目录的个数,在服务端Samba配置文件中设置环形队列数和worker执行单元个数,然后在服务端运行Samba主进程,获取来自客户端的数据读写测试请求,根据该请求,利用基于SMB报文头部数据的自适应均衡控制算法,将不同目录的请求任务定向至不同的worker执行单元。本实施例中一个IO执行单元与多个worker执行单元相匹配。本实施例利用SMB报文头部数据的自适应均衡控制算法,将不同目录的请求任务定向至不同的worker执行单元,从而能够实现多个共享目录树的高速可靠并发处理,从而对客户端的数据请求进行合适的散列并发送至对应的输入队列,能够有效解决现有的串行处理模式带来的卡顿问题。由于任务被多个worker执行单元并发处理,能够有效提高smbd子进程的执行效率,因此该方法能够有效提高Samba服务端的数据处理效率;另外,客户端挂载同一个服务器上的多个NAS存储目录后,其中一个目录操作大文件的同时,其他目录的读写过程受到的影响大大减小了,从而提高客户端对共享目录读写文件的速度,因此有利于提高客户端的数据处理效率。而且,由于对一个目录的操作减少了对其他目录的影响,有利于提高客户操作网络文件的用户体验。
本申请还提供一种面向多共享目录树的控制系统。该系统设置于服务端,该系统主要包括一个IO执行单元、多个worker执行单元、设置单元、请求获取单元以及并发控制单元,一个IO执行单元与多个worker执行单元相匹配。IO执行单元的设置,能够根据数据读写测试请求,利用基于SMB报文头部数据的自适应均衡控制算法,将不同目录的请求任务定向至不同的worker执行单元,从而实现同一SOCKET下高并发数据的负载均衡读写,从而减少不同共享目录之间的相互影响,加快客户端多个工作目录的处理速度。并发控制单元的设置,通过采用无锁原子操作队列,能够将CPU的并发处理特效在服务器Samba共享服务器中得到充分利用,大大提高Samba共享服务的响应速度,从而提高客户端数据处理效率,提高用户体验。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例所提供的一种面向多共享目录树的控制方法的流程示意图;
图2为服务端和客户端的整体关系结构示意图;
图3为IO执行单元和worker执行单元之间的环形队列结构示意图;
图4为本申请实施例所提供的一种面向多共享目录树的控制系统的结构示意图。
图5为IO执行单元的自适应均衡处理过程示意图
具体实施方式
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
本发明中面向多共享目录树的控制方法和系统,涉及云数据中心Linux系统上运行Samba提供NAS服务环境下,是同一个客户端连接服务端多个共享目录树时的自适应均衡并发控制策略。主要是在Samba现有SMB协议处理过程中采用输入输出过程和计算处理过程分离的方式,输入输出过程重点面向网卡的数据传递,后台计算处理过程重点面向运行速度。
为了更好地理解本申请,下面结合附图来详细解释本申请的实施方式。
实施例一
参见图1,图1为本申请实施例所提供的一种面向多共享目录树的控制方法的流程示意图。由图1可知,本实施例中面向多共享目录树的控制方法主要包括如下过程:
S1:根据待共享目录的个数,在服务端Samba配置文件中设置环形队列数和worker执行单元个数。
其中,worker执行单元用于在Samba进程中进行计算处理,环形队列用于在IO执行单元和worker执行单元之间进行数据交换,IO执行单元用于获取目录请求并将目录请求定向至相应的worker执行单元中。
本实施例中在启动服务端服务器后,首先设置配置文件,服务端根据所获取的指令,对配置文件进行配置。本实施例中服务端和客户端的整体关系结构示意图可以参见图2。图2中,Samba服务端即服务端,SMB客户端即客户端。由图2可知,一个IO执行单元对应多个worker执行单元,worker执行单元可以动态新增。
继续参见图1可知,完成配置之后,执行步骤S2:在服务端运行Samba主进程。
具体地,在Samba主进程接受到客户端第一个共享目录挂载,并fork出smbd子进程初始化时,创建一个IO线程和多个WORKER线程作为执行单元,即:创建一个IO执行单元和多个worker执行单元,并在IO线程和WORKER线程之间创建合适的环形队列用以交换数据。
然后,客户端挂载服务端的多个共享目录继续大批量数据读写测试。此时,客户端挂载服务端的多个共享目录,发送数据读写测试请求至服务端。即:在服务端执行步骤S3:获取来自客户端的数据读写测试请求。
S4:根据数据读写测试请求,利用基于SMB报文头部数据的自适应均衡控制算法,将不同目录的请求任务定向至不同的worker执行单元。其中,一个IO执行单元与多个worker执行单元相匹配。
本实施例中基于SMB报文头部数据的自适应均衡控制算法,具体是基于SMB报文头部TREE ID的自适应均衡算法。
具体地,步骤S4包括如下过程:
S41:根据服务端实际共享目录的个数,设定针对TREE ID的散列表长度和除留余数法使用的除数N,除留余数法用于计算散列表索引。
除留余数法是一种构造散列函数的方法,用于计算散列表索引。本实施例中针对TREE ID的散列表长度和除留余数法使用的除数N,根据服务端实际共享目录数决定。由于TREE ID是一个4字节的随机整型数,通常实际共享目录数没有这么多,散列表长度根据实际共享目录数选择合适取值即可,当现HASH冲突时,根据服务端实际共享目录的个数,利用链地址法进一步根据去索引同义词链查找散列表。
S42:提取输入口SMB报文中的TREE ID字段。
本实施例中以TREE ID作为关键字进行负载均衡。
提取关键字之后,执行步骤S43:判断TREE ID字段是否为0。
如果TREE ID字段为0,执行步骤S44:在IO执行单元内执行原有的Samba处理逻辑。
如果TREE ID字段不为0,执行步骤S45:利用SMB报文头部数据的TREE ID字段作为关键字,通过散列表计算并确定相应的环形队列。
由以上步骤S44和S45可知,本实施例中如果TREE ID字段为0,表明处于协商和会话建立阶段,表明是第一次目录连接请求,直接在IO执行单元内部处理。如果TREE ID字段不为0,IO执行单元以TREE ID为关键字,计算并分配到合适的输入方向环形队列。
IO执行单元将请求任务计算并分配到合适的输入方向环形队列后,执行步骤S46:IO执行单元根据当前接收的输入口SMB报文和最近一次相同TREE ID报文之间的时间间隔,计算流入速率。
S47:判断流入速率是否超过设定的流入速率阈值。
本实施例中根据实际共享目录的个数,并结合服务端服务器的实际处理能力,设定流速控制的阈值和用于报文速率计算的采样间隔时间。
如果流入速率超过设定的流入速率阈值,执行步骤S48:开启新的worker执行单元,否则步开启新的worker执行单元。
即:当流入速率超过设定的流入速率阈值时,根据本实施例中的方法为该TREE ID报文开启新的worker执行单元。
进一步地,本实施例中采用等时间间隔采样报文数的方式计算流入速率。也就是设定固定的采样间隔时间,计算流入速率。
开启新的worker执行单元之后,执行步骤S49:将新的worker执行单元并与TREEID字段对应的输入输出环形队列相关联。
即:IO执行单元将客户端请求数据加入输入方向的环形队列中,与该队列关联的worker执行单元经过分析计算,将最终的响应数据写入输出方向环形队列。然后,IO执行单元负责将响应数据输出发送至客户端。
在实际应用中,根据以上步骤S41-S49,本实施例中对SMB报文的自适应均衡控制方法,主要包括如下过程:
步骤A1:设定针对TREE_ID的散列表长度M和除留余数法使用的除数N。
步骤A2:设定流速控制的阈值。
此处没有固定取值,根据实际服务器处理能力和共享目录的个数测试出一个相对合适取值V0,同时设置一个相对合适的报文速率计算采样间隔时间t0。
步骤A3:判断是SMB报文时,在相对SMB2_HEADER头部偏移36字节位置提取4自己长度的TREE ID字段。
步骤A4:若读取到的TREE ID等于0,则在IO执行单元执行原有的Samba处理逻辑。
步骤A5:如果是一个TREE_CONNECT消息请求,则在IO执行单元随机分配一个4字节整型数返回给客户端,作为后续的会话TREE ID标识符。
步骤A6:若读取到的TREE ID不等于0,则以TREE ID作为关键字,通过散列表计算查找到合适的环形队列。
步骤A7:在IO执行单元中缓存每一个非零TREE ID的流速信息,每接收一个SMB报文,报文个数N[tree id]递增1。
步骤A8:到达速率计算周期t0时,计算一次流速值v(tree_id)= N[tree id]/t0。
步骤A9:判断v(tree_id)的范围,当该范围超出设定值V0时,自动创建一个新的worker执行单元;当该范围低于设定值V0且worker执行单元数大于1时,自动销毁一个worker执行单元。
进一步地,本实施例中面向多共享目录树的控制方法还包括步骤S5:采用无锁原子操作队列,对IO执行单元和worker执行单元进行并发控制。步骤S5和S4同时执行,并没有先后顺序。
本实施例中无锁原子操作队列为CAS原子操作队列,能够有效提高并发执行的效率,从而提高客户端数据处理效率。本实施例中采用CAS原子操作队列,由于数组实现队列不需要涉及内存的分配释放,本实施例中可以选择一个RING BUFFER形式的环形数组缓冲区,HEAD指向队头,用于出队操作,TALL指向队尾,用于入队操作。
具体地,本实施例中步骤S5包括如下步骤:
S51:在输入方向,IO 执行单元和每个worker执行单元之间设置一并发无锁原子操作队列,且当SMB报文流速增大时,启动新的worker执行单元。
S52:在输出方向,每个worker执行单元和IO执行单元之间设置一并发无锁原子操作队列。
S53:进行数据存储时,Samba内部将输入报文封装为定长request对象。
即:本实施例中采用定长数据存储方式,每次写入或读出固定长度的数据。
S54:进行数据并发处理时,设定输入方向的环形队列采用单生产者多消费者模型,输出方向的环形队列采用多生产者单消费者模型。
通过步骤S54,能够更加高效应对可能动态产生的新的worker执行单元,从而有效提高数据并发处理效率。
S55:生产者不断写入数据并修改写指针的位置,且消费者不断读出数据并修改读指针的位置。
本实施例中IO执行单元和worker执行单元之间的环形队列结构示意图,可以参见图3,图3中以2个worker执行单元为例。
结合图3和以上步骤S51-S55可知,在实际应用中,SMB报文在IO执行单元和worker执行单元之间的并发控制方法,主要包括如下过程:
步骤B1:在输入方向,IO执行单元动态分配Samba request结构,并将接收到的SMB报文封装到request结构中。
步骤B2:在输入方向,IO执行单元判断(TAIL+1)%MAX_LEN是否达到HEAD位置。
如果是,表示队列已满,提示错误LOG,否则,将request数据结构指针插入环形队列尾部TAIL,并修改TAIL=(TAIL+1)%MAX_LEN。
步骤B3:输入方向,WORKER执行单元判断HEAD是否达到TAIL位置。
如果是,表示队列为空,不处理直接返回,否则,从HEAD位置读出一个request数据,并修改HEAD=(TAIL+1)%MAX_LEN,和步骤二不同的是出队操作是以原子操作方式进行。
步骤B4:worker执行单元从当前request数据中提取SMB报文,并处理详细的文件读写过程。
步骤B5:输出方向,worker执行单元直接将处理后的request数据结构添加至输出环形队列的TAIL位置,TAIL位置的执行策略和步骤B2一致,只不过此处以原子操作方式进行。
步骤B6:输出方向,IO执行单元遍历输出环形队列,然后将request数据结构的SMB报文信息提取出来发送至TCP SOCKET,最终释放request数据结构。
综上所述,本发明采用自适应均衡算法和无锁并发队列,能够实现多个共享目录树的高速可靠并发处理,对客户端请求数据进行合适的散列并发送至对应的输入队列,从而能够有效解决现有的串行处理实现模式可能带来的卡顿问题,大大提高客户端数据处理效率。从Samba服务端角度,由于任务被多个worker执行单元并发处理,有利于提高smbd子进程的执行效率;从用户角度,客户端挂载同一个服务器上的多个NAS存储目录后,其中一个目录操作大文件的同时,其他目录的读写过程受到的负面影响能够有效减少。
实施例二
在图1-图3所示实施例的基础之上参见图4,图4为本申请实施例所提供的一种面向多共享目录树的控制系统的结构示意图。本实施例中的控制系统设置于服务端,即设置于Samba服务端。
由图4可知,本实施例中面向多共享目录树的控制系统,主要包括:一个IO执行单元、多个worker执行单元、设置单元、请求获取单元以及并发控制单元,一个IO执行单元与多个worker执行单元相匹配。
worker执行单元,用于在Samba进程中进行计算处理。设置单元,用于根据待共享目录的个数,在服务端Samba配置文件中设置环形队列数和worker执行单元个数,其中,环形队列用于在IO执行单元和worker执行单元之间进行数据交换。请求获取单元,用于获取来自客户端的数据读写测试请求。IO执行单元,用于根据数据读写测试请求,利用基于SMB报文头部数据的自适应均衡控制算法,将不同目录的请求任务定向至不同的worker执行单元。并发控制单元,用于采用无锁原子操作队列,对IO执行单元和worker执行单元进行并发控制。
其中,IO执行单元包括:输入输出模块和监控模块。其中,输入输出模块,用于获取SMB报文数据,以及在TREE ID字段不为0时,以TREE ID字段作为关键字,通过散列表计算并确定相应的环形队列和worker执行单元。监控模块,用于计算每个TREE ID报文的流入速率,并判断流入速率是否超过设定的流入速率阈值。本实施例中IO执行单元的自适应均衡处理过程示意图,可以参见图5。
进一步地,输入输出模块包括:设定子模块、提取子模块、第一判断子模块、第一执行子模块和第二执行子模块。其中,设定子模块,用于根据服务端实际共享目录的个数,设定针对TREE ID的散列表长度和除留余数法使用的除数N。提取子模块,用于提取输入口SMB报文中的TREE ID字段。第一判断子模块,用于判断TREE ID字段是否为0。第一执行子模块,用于当TREE ID字段为0时,在IO执行单元内执行原有的Samba处理逻辑。第二执行子模块,用于当TREE ID字段不为0时,利用SMB报文头部数据的TREE ID字段作为关键字,通过散列表计算并确定相应的环形队列和worker执行单元。
监控模块包括:流入速率计算子模块、第二判断子模块、开启子模块和关联子模块。其中,流入速率计算子模块,用于根据当前接收的输入口SMB报文和最近一次相同TREEID报文之间的时间间隔,计算流入速率。第二判断子模块,用于判断流入速率是否超过设定的流入速率阈值。开启子模块,用于当流入速率超过设定的流入速率阈值时,开启新的worker执行单元。关联子模块,用于将新的worker执行单元并与TREE ID字段对应的输入输出环形队列相关联。
本实施例中并发控制单元包括:输入控制模块、输出控制模块、启动模块、request对象封装模块、模型设定模块和指针修改模块。其中,输入控制模块,用于在输入方向,在IO执行单元和每个worker执行单元之间设置一并发无锁原子操作队列。输出控制模块,用于在输出方向,在每个worker执行单元和IO执行单元之间设置一并发无锁原子操作队列。启动模块,用于当SMB报文流速增大时,启动新的worker执行单元。request对象封装模块,用于进行数据存储时,在Samba内部将输入报文封装为定长request对象。模型设定模块,用于进行数据并发处理时,设定输入方向的环形队列采用单生产者多消费者模型,输出方向的环形队列采用多生产者单消费者模型。指针修改模块,用于当生产者写入数据时修改写指针位置,以及,消费者读出数据时修改读指针的位置。
该实施例中面向多共享目录树的控制系统的工作原理和工作方法,在图1-图3所示的实施例中已经详细阐述,两个实施例之间可以互相参照,在此不再赘述。
以上所述仅是本申请的具体实施方式,使本领域技术人员能够理解或实现本申请。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (5)
1.一种面向多共享目录树的控制方法,其特征在于,所述方法包括:
根据待共享目录的个数,在服务端Samba配置文件中设置环形队列数和worker执行单元个数,其中,worker执行单元用于在Samba进程中进行计算处理,环形队列用于在IO执行单元和worker执行单元之间进行数据交换,所述IO执行单元用于获取目录请求并将所述目录请求定向至相应的worker执行单元中;
在服务端运行Samba主进程;
获取来自客户端的数据读写测试请求;
根据所述数据读写测试请求,利用基于SMB报文头部数据的自适应均衡控制算法,将不同目录的请求任务定向至不同的worker执行单元,其中,一个IO执行单元与多个worker执行单元相匹配;
其中,所述服务端根据所述数据读写测试请求,利用基于SMB报文头部数据的自适应均衡控制算法,将不同目录的请求任务定向至不同的worker执行单元,包括:
根据服务端实际共享目录的个数,设定针对TREE ID的散列表长度和除留余数法使用的除数N,所述除留余数法用于计算散列表索引;
提取输入口SMB报文中的TREE ID字段;
判断所述TREE ID字段是否为0;
如果是,在IO执行单元内执行原有的Samba处理逻辑;
如果否,利用SMB报文头部数据的TREE ID字段作为关键字,通过散列表计算并确定相应的环形队列;
IO执行单元根据当前接收的所述输入口SMB报文和最近一次相同TREE ID报文之间的时间间隔,计算流入速率;
判断所述流入速率是否超过设定的流入速率阈值;
如果是,开启新的worker执行单元;
将所述新的worker执行单元并与所述TREE ID字段对应的输入输出环形队列相关联;
所述方法还包括:
采用无锁原子操作队列,对IO执行单元和worker执行单元进行并发控制。
2.根据权利要求1所述的一种面向多共享目录树的控制方法,其特征在于,所述无锁原子操作队列为CAS原子操作队列。
3.根据权利要求1所述的一种面向多共享目录树的控制方法,其特征在于,所述采用无锁原子操作队列,对IO执行单元和worker执行单元进行并发控制,包括:
在输入方向,IO 执行单元和每个worker执行单元之间设置一并发无锁原子操作队列,且当SMB报文流速增大时,启动新的worker执行单元;
在输出方向,每个worker执行单元和IO执行单元之间设置一并发无锁原子操作队列;
进行数据存储时,Samba内部将输入报文封装为定长request对象;
进行数据并发处理时,设定输入方向的环形队列采用单生产者多消费者模型,输出方向的环形队列采用多生产者单消费者模型;
生产者不断写入数据并修改写指针的位置,且消费者不断读出数据并修改读指针的位置。
4.一种面向多共享目录树的控制系统,其特征在于,所述系统设置于服务端,所述系统包括:一个IO执行单元、多个worker执行单元、设置单元、请求获取单元以及并发控制单元,一个IO执行单元与多个worker执行单元相匹配;
所述worker执行单元,用于在Samba进程中进行计算处理;
所述设置单元,用于根据待共享目录的个数,在服务端Samba配置文件中设置环形队列数和worker执行单元个数,其中,环形队列用于在IO执行单元和worker执行单元之间进行数据交换;
所述请求获取单元,用于获取来自客户端的数据读写测试请求;
所述IO执行单元,用于根据所述数据读写测试请求,利用基于SMB报文头部数据的自适应均衡控制算法,将不同目录的请求任务定向至不同的worker执行单元;
所述并发控制单元,用于采用无锁原子操作队列,对IO执行单元和worker执行单元进行并发控制;
其中,所述IO执行单元包括:
设定子模块,用于根据服务端实际共享目录的个数,设定针对TREE ID的散列表长度和除留余数法使用的除数N;
提取子模块,用于提取输入口SMB报文中的TREE ID字段;
第一判断子模块,用于判断所述TREE ID字段是否为0;
第一执行子模块,用于当所述TREE ID字段为0时,在IO执行单元内执行原有的Samba处理逻辑;
第二执行子模块,用于当所述TREE ID字段不为0时,利用SMB报文头部数据的TREE ID字段作为关键字,通过散列表计算并确定相应的环形队列和worker执行单元;
流入速率计算子模块,用于根据当前接收的所述输入口SMB报文和最近一次相同TREEID报文之间的时间间隔,计算流入速率;
第二判断子模块,用于判断所述流入速率是否超过设定的流入速率阈值;
开启子模块,用于当所述流入速率超过设定的流入速率阈值时,开启新的worker执行单元;
关联子模块,用于将所述新的worker执行单元并与所述TREE ID字段对应的输入输出环形队列相关联。
5.根据权利要求4所述的一种面向多共享目录树的控制系统,其特征在于,所述并发控制单元包括:
输入控制模块,用于在输入方向,在IO 执行单元和每个worker执行单元之间设置一并发无锁原子操作队列;
输出控制模块,用于在输出方向,在每个worker执行单元和IO执行单元之间设置一并发无锁原子操作队列;
启动模块,用于当SMB报文流速增大时,启动新的worker执行单元;
request对象封装模块,用于进行数据存储时,在Samba内部将输入报文封装为定长request对象;
模型设定模块,用于进行数据并发处理时,设定输入方向的环形队列采用单生产者多消费者模型,输出方向的环形队列采用多生产者单消费者模型;
指针修改模块,用于当生产者写入数据时修改写指针位置,以及,消费者读出数据时修改读指针的位置。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010093617.8A CN111309700B (zh) | 2020-02-14 | 2020-02-14 | 一种面向多共享目录树的控制方法及系统 |
US17/799,705 US20230086123A1 (en) | 2020-02-14 | 2020-09-24 | Multi-shared directory tree-oriented control method and system |
PCT/CN2020/117514 WO2021159713A1 (zh) | 2020-02-14 | 2020-09-24 | 一种面向多共享目录树的控制方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010093617.8A CN111309700B (zh) | 2020-02-14 | 2020-02-14 | 一种面向多共享目录树的控制方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111309700A CN111309700A (zh) | 2020-06-19 |
CN111309700B true CN111309700B (zh) | 2022-11-29 |
Family
ID=71161702
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010093617.8A Active CN111309700B (zh) | 2020-02-14 | 2020-02-14 | 一种面向多共享目录树的控制方法及系统 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20230086123A1 (zh) |
CN (1) | CN111309700B (zh) |
WO (1) | WO2021159713A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111309700B (zh) * | 2020-02-14 | 2022-11-29 | 苏州浪潮智能科技有限公司 | 一种面向多共享目录树的控制方法及系统 |
CN112506683A (zh) * | 2021-01-29 | 2021-03-16 | 腾讯科技(深圳)有限公司 | 一种数据处理的方法、相关装置、设备以及存储介质 |
CN114153812A (zh) * | 2021-12-09 | 2022-03-08 | 佛山众陶联供应链服务有限公司 | 一种解决云端服务跟远程机房前置机目录共享方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103002027A (zh) * | 2012-11-26 | 2013-03-27 | 中国科学院高能物理研究所 | 基于键值对系统实现树形目录结构的数据存储系统及方法 |
CN106933672A (zh) * | 2015-12-30 | 2017-07-07 | 阿里巴巴集团控股有限公司 | 一种分布式环境协调消费队列方法和装置 |
CN108848007A (zh) * | 2018-08-28 | 2018-11-20 | 郑州云海信息技术有限公司 | 一种存储设备共享最大连接数的测试方法及装置 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW201211774A (en) * | 2010-09-15 | 2012-03-16 | Jmicron Technology Corp | Network storage system and network storage method |
CN102629425B (zh) * | 2012-04-06 | 2014-02-26 | 北京物资学院 | 一种cps技术实践教学系统及方法 |
US10826848B2 (en) * | 2016-10-24 | 2020-11-03 | Netapp, Inc. | Balanced, opportunistic multicore I/O scheduling from non-SMP applications |
CN108055314A (zh) * | 2017-12-08 | 2018-05-18 | 锐捷网络股份有限公司 | 一种集群系统的管理方法与集群系统 |
US10642667B1 (en) * | 2018-03-18 | 2020-05-05 | Juniper Networks, Inc. | Apparatus, system, and method for efficiently sharing data between processes |
CN110519329B (zh) * | 2019-07-23 | 2022-06-07 | 苏州浪潮智能科技有限公司 | 一种并发处理samba协议请求的方法、设备及可读介质 |
CN111309700B (zh) * | 2020-02-14 | 2022-11-29 | 苏州浪潮智能科技有限公司 | 一种面向多共享目录树的控制方法及系统 |
-
2020
- 2020-02-14 CN CN202010093617.8A patent/CN111309700B/zh active Active
- 2020-09-24 US US17/799,705 patent/US20230086123A1/en active Pending
- 2020-09-24 WO PCT/CN2020/117514 patent/WO2021159713A1/zh active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103002027A (zh) * | 2012-11-26 | 2013-03-27 | 中国科学院高能物理研究所 | 基于键值对系统实现树形目录结构的数据存储系统及方法 |
CN106933672A (zh) * | 2015-12-30 | 2017-07-07 | 阿里巴巴集团控股有限公司 | 一种分布式环境协调消费队列方法和装置 |
CN108848007A (zh) * | 2018-08-28 | 2018-11-20 | 郑州云海信息技术有限公司 | 一种存储设备共享最大连接数的测试方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111309700A (zh) | 2020-06-19 |
US20230086123A1 (en) | 2023-03-23 |
WO2021159713A1 (zh) | 2021-08-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111309700B (zh) | 一种面向多共享目录树的控制方法及系统 | |
CN111371779B (zh) | 一种基于dpdk虚拟化管理系统的防火墙及其实现方法 | |
US7158964B2 (en) | Queue management | |
US8937942B1 (en) | Storing session information in network devices | |
US9813283B2 (en) | Efficient data transfer between servers and remote peripherals | |
CN108647104B (zh) | 请求处理方法、服务器及计算机可读存储介质 | |
US20070174470A1 (en) | Device with cache command forwarding | |
US20030187914A1 (en) | Symmetrical multiprocessing in multiprocessor systems | |
US11025564B2 (en) | RDMA transport with hardware integration and out of order placement | |
US11068412B2 (en) | RDMA transport with hardware integration | |
US9372879B1 (en) | Balanced append tree data structure | |
EP4318251A1 (en) | Data access system and method, and device and network card | |
CN112118167B (zh) | 一种跨网隧道数据快速传输方法 | |
CN114928579A (zh) | 数据处理方法、装置、计算机设备及存储介质 | |
JP2017509055A (ja) | 並列プロトコル・スタック・インスタンスに基づいてデータパケットを処理する方法および装置 | |
CN114363269A (zh) | 一种消息传输方法、系统、设备以及介质 | |
GB2532732B (en) | Integrating a communication bridge into a data procesing system | |
US9578120B1 (en) | Messaging with key-value persistence | |
US20100175073A1 (en) | Network device for accelerating iscsi packet processing | |
US20140108523A1 (en) | Connection sharing across entities in a distributed messaging system | |
CN112395296A (zh) | 一种大数据归档方法、装置、设备及存储介质 | |
US9128785B2 (en) | System and method for efficient shared buffer management | |
US11188394B2 (en) | Technologies for synchronizing triggered operations | |
US20150254196A1 (en) | Software Enabled Network Storage Accelerator (SENSA) - network - disk DMA (NDDMA) | |
US9584444B2 (en) | Routing communication between computing platforms |
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 |