一种基于zfs文件系统的高性能跨域复制方法与流程

文档序号:21887762发布日期:2020-08-18 17:29阅读:566来源:国知局
一种基于zfs文件系统的高性能跨域复制方法与流程

本发明属于计算机领域,具体涉及一种基于zfs文件系统的高性能跨域复制方法。



背景技术:

信息化的飞速发展,海量数据的存储带来更高的风险,数据的二次存储显得极其重要,对于数据存储备份、同步是一套健全的存储系统的必要保障。对于类似zfs这样的文件系统,数据的跨域复制同步本身提供了一套完好的操作方式,但是在性能上却远远不够,其根本原因是因为从磁盘到上层应用程序再转到网卡等诸多操作流程带来的巨大性能损耗。

所以,需要一个新的技术方案来解决这个问题。



技术实现要素:

发明目的:为了克服现有技术中存在的不足,提供一种基于zfs文件系统的高性能跨域复制方法,能够大幅度提高跨域复制备份的效率。

技术方案:为实现上述目的,本发明提供一种基于zfs文件系统的高性能跨域复制方法,包括如下步骤:

s1:管理平台下发跨域复制任务;

s2:启动数据接收端的接收驱动模块用于被动监听tcp端口和udp端口;

启动数据接收端的数据处理模块用于控制报文的拦截功能;

启用数据接收端的内核线程服务,打开/opt/zfs文件描述符,并监听该描述符上的可读可写事件;

启用数据发送端的基于网络发送的驱动模块;

启用基于块设备驱动程序的监控模块,用于对块设备的读写io进行捕获;

s3:利用数据发送端进行跨域复制发送操作;

s4:利用数据接收端进行跨域复制接收操作,完成数据的写入操作。

进一步的,所述步骤s3中数据发送端进行跨域复制发送操作的具体流程为:

a1:通过udp端口发送协商报文,确认两端主机任务的一致性;

a2:连接tcp端口,从磁盘读取对应的需要跨域复制的数据,块设备驱动写入到存储的bio结构后,触发io可读事件;

a3:网络发送的驱动程序捕获到io事件,获取bio结构,解析bio结构并将bio中块设备缓存数据转发到网络套接字上;

a4:任务结束关闭tcp套接字连接。

进一步的,所述步骤s4中数据接收端进行跨域复制接收操作的具体流程为:

b1:接收udp信令报文,验证任务id的一致性,设置netfilter接口放行tcp对应端口的报文,等待tcp连接;

b2:获取tcp客户端的数据报文,写入数据缓存中,调用块设备的写入接口将缓存数据写入磁盘;

b3:任务结束,设置netfilter接口拦截tcp对应端口的数据报文。

基于上述步骤进行总结,数据发送端的流程如下:首先通过udp端口发送协商报文,确认两端主机任务的一致性;当协商成功后,发送端从磁盘读取对应的需要跨域复制的数据,块设备驱动写入到存储的bio结构后,捕获io事件,并获取bio的地址,触发/opt/zfs文件描述符可读事件,当前块设备对bio的操作不再往文件缓存提交,由负责网络发送的驱动程序捕获到io事件,获取bio结构,解析bio并将bio中块设备缓存数据转发到网络套接字上,经协议栈发送到网卡。

基于上述步骤进行总结,数据接收端的流程如下:接收发送端的udp协商请求,对任务id的一致性进行检查,通过调用netfilter的模块接口设置tcp端口的放行报文,并应答数据发送端的udp报文,等待发送端tcp连接的建立。接收来自数据发送端的数据报文,调用块设备的io接口将内核的数据报文直接写入磁盘,从而完成数据的写入操作。

基于上述技术方案,本发明的创新理念具体如下:

创新1:通过新的模块设计,使得原本需要多次系统调用的数据处理和流转操作得到大幅减少;减少磁盘缓存到文件系统缓存过程的一次内存拷贝;减少从文件系统到用户程序的一次内存拷贝;减少从用户程序拷贝到协议栈的一次内存拷贝,至少减少每次数据接收、发送过程用户态到内核态报文的两次系统调用。

创新2:通过块设备缓存的bio结构改造,增加数据可写的事件通知机制,通过每个bio事件完成触发注册fd事件,当可写、可读准备好,传送structbio_vec的地址,并异步通知协议栈服务程序,这样不再要轮询等待,整个异步操作可以在内核中完成,从而大幅提高处理性能。

创新3:不同于传统的将数据放在用户态的标准输入输出,且通过应用层网络模块处理的跨域方式,本发明增加内核态的协议服务程序、主要服务网络数据的传送以及监听本地硬盘bio可读可写事件,使得网络io可以完全在内核中进行,避免大量的网络系统调用,从而提高性能。

创新4:磁盘和网络数据共享,共享网络读写缓存直接写入磁盘、共享磁盘的bio数据缓存写入网卡,缓存的共享可以减少处理开销从而提高性能。增加跨域复制信令交互报文以及心跳报文,提高安全性。

有益效果:本发明与现有技术相比,具备如下优点:

1、减少了磁盘缓存到文件系统缓存过程的一次内存拷贝;减少了从文件系统到用户程序过程的一次内存拷贝、一次系统调用;减少了从用户程序拷贝到协议栈的一次内存拷贝和系统调用,因此大幅提高了复制效率。

2、块设备缓存的bio结构的异步通知机制,增加数据可写的事件通知机制,通过每个bio事件完成触发注册fd事件,当可写、可读准备好,传送structbio_vec的地址通知协议栈服务程序;通过多路复用的io通知机制、异步读写的操作机制,可以不需要轮询的进行读写,可以在有数据可读可写的时候处理大量的io操作,提高单次处理的数据量同时增加处理命中率,无需浪费cpu的轮询判断,通过传递bio_vec的地址,使得协议栈无需拷贝存储的块缓存数据,可以重复利用这块内存,提高处理性能。

3、增加内核态的协议服务程序、主要服务网络数据的传送以及监听本地硬盘bio可读可写事件,共享网络读写缓存直接写入磁盘、共享磁盘的bio数据缓存写入网卡,并通过增加跨域复制信令交互报文以及心跳报文的方式,增强跨域复制的能力和性能。

附图说明

图1为跨域复制数据发送端的操作流程示意图;

图2为跨域复制数据接收端的操作流程示意图。

具体实施方式

下面结合附图和具体实施例,进一步阐明本发明。

zfs原生的跨域复制通过调用应用程序zfssend、recv命令辅助类似nc这样的网络程序,通过管道的方式进行数据之间的传送。zfssend经历从磁盘读取数据、写入块设备缓存、写入文件系统缓存、拷贝数据到用户态程序缓存、从用户态拷贝到协议栈缓存、写入网卡。zfsrecv经历从网卡读取数据到协议栈缓存、协议栈数据拷贝到进程的用户态空间、用户态缓存拷贝到文件系统缓存、写入块设备缓存、写入磁盘。

基于上述现有的跨域复制方法,本实施例中提供一种基于zfs文件系统的高性能跨域复制方法,包括如下步骤:

s1:管理平台下发跨域复制任务;

s2:启动数据接收端的接收驱动模块用于被动监听tcp端口和udp端口;

启动数据接收端的数据处理模块用于控制报文的拦截功能;

启用数据接收端的内核线程服务,打开/opt/zfs文件描述符,并监听该描述符上的可读可写事件;

s3:启用数据发送端的基于网络发送的驱动模块;

启用基于块设备驱动程序的监控模块,用于对块设备的读写io进行捕获;

s3:如图1所示,利用数据发送端进行跨域复制发送操作,其具体操作过程如下:

a1:通过udp端口发送协商报文,确认两端主机任务的一致性;

a2:连接tcp端口,从磁盘读取对应的需要跨域复制的数据,块设备驱动写入到存储的bio结构后,触发io可读事件;

a3:网络发送的驱动程序捕获到io事件,获取bio结构,解析bio结构并将bio中块设备缓存数据转发到网络套接字上;

a4:任务结束关闭tcp套接字连接。

s4:利用数据接收端进行跨域复制接收操作,如图2所示,其具体操作过程如下:

b1:接收udp信令报文,验证任务id的一致性,设置netfilter接口放行tcp对应端口的报文,等待tcp连接;

b2:获取tcp客户端的数据报文,写入数据缓存中,调用块设备的写入接口将缓存数据写入磁盘;

b3:任务结束,设置netfilter接口拦截tcp对应端口的数据报文。

本实施例中参照原有方案和本发明提供的方案,本发明方法去掉用户态和内核态的数据拷贝、系统调用的开销、共享块设备缓存和网络协议缓存的数据部分,从而实现了低开销高效率的跨域复制功能。

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