一种共享文件系统中实现快速接收和储存数据的方法转让专利
申请号 : CN201711095379.9
文献号 : CN107749893B
文献日 : 2021-03-30
发明人 : 徐荣波 , 黄贤强 , 许珊珊 , 张广东 , 赵子兰 , 张跃
申请人 : 北京精一强远科技有限公司
摘要 :
权利要求 :
1.一种共享文件系统中实现快速接收和存储数据的方法,所述方法所使用的硬件系统包括:多个客户端通过LAN网络与基于Linux的NAS子系统连接,所述的NAS子系统包括存储服务器和存储盘阵,各个客户端通过LAN网络分别与多个IP摄像机连接,其特征在于,所述方法的步骤如下:
步骤1,视音频获取的步骤:用于多个客户端通过各自连接的多个IP摄像机采集视音频数据;
步骤2,视音频处理的步骤:用于各个客户端分别对各个IP摄像机所采集到的视音频数据进行处理,转码、打包;
步骤3,发送视音频数据的步骤:用于请求发送数据的客户端向存储服务器提出发送请求,与存储服务器建立连接,开辟本地缓存空间,在待发送包中填写私有协议包头,向存储服务器发送视音频数据;本步骤具体包括如下子步骤:(1)建立连接的子步骤:客户端向存储服务器发送连接请求,等待存储服务器应答,如果连接成功,则进入下述子步骤,否则退出;
(2)发送打开文件命令的子步骤:客户端指定待写入文件的信息,并根据预设的私有传输协议组包,发送给存储服务器,等待应答,如果打开文件成功,则进入下述子步骤,否则退出;
(3)开辟缓存空间的子步骤:如果成功打开文件,在客户端本地开辟缓存空间,用于存储待发送数据;
(4)发送待写入数据的子步骤:客户端从缓存空间每次取固定大小的数据,然后根据预设的私有传输协议组包,填充包头以及实际待写入数据,发送给存储服务器,循环发送,直至待写入数据发送完毕;
(5)发送关闭文件命令的子步骤:用于客户端向存储服务器发出请求,关闭已打开的文件句柄,完成本次文件写入;
步骤4,接收视音频数据的步骤:用于存储服务器设置大页内存并将大页内存申请为内存池,将用来接收视音频数据的网卡注册为UIO设备,初始化一至两个元数据队列和多个内容数据队列,并创建与注册为UIO设备的网卡相对应的接收数据线程,并将各个接收数据线程与CPU绑定,以接收客户端发来的视音频数据;本步骤具体包括如下子步骤:
1)设置大页内存的子步骤:用于存储服务器设置系统,以支持大页内存;
2)PCI设备初始化的子步骤:用于存储服务器扫描PCI设备,注册PCI驱动,并利用Linux UIO技术,把用来接收数据的网卡注册为UIO设备,这样客户端应用程序直接使用网卡发送或者接收数据;
3)开辟内存池的子步骤:用于存储服务器在大页内存中申请若干个固定大小的内存块,组成内存池,用于缓存网络报文;
4)初始化数据队列的子步骤:用于存储服务器初始化2个元数据队列和8个内容数据队列,接收数据线程收到视音频数据后,会对视音频数据进行分类,并把相应视音频数据放入当前含有最少视音频数据的对应元数据队列和内容数据队列中;
5)创建接收数据线程的子步骤:为每个注册为UIO设备网口创建一个接收数据线程,并将该接收数据线程绑定到CPU核上;
6)数据存储处理的子步骤:用于存储服务器处理接收到的视音频数据;接收数据线程采用定期轮询,每隔一段时间查询网口是否有新视音频数据到达,如果接收到视音频数据,会存到之前开辟的内存池中,然后转入数据存储处理的子步骤,如果没有接收到视频数据则继续轮询;本子步骤具体包括如下分步骤:a.解析私有协议数据包的分步骤:用于存储服务器按照预设的私有协议解析数据包;
b.选择处理的分步骤:如果数据包中的数据为打开文件、关闭文件以及设置文件属性的相关元数据操作任务命令,则把这些任务命令加入元数据队列中;如果为待写入的内容数据包,则把待写入的内容数据拷贝到内容数据队列中;
步骤5,写入文件的步骤:用于存储服务器分别通过元数据操作线程和内容数据操作线程将视音频数据写入文件;本步骤具体包括如下子步骤:①创建写文件线程的子步骤:用于存储服务器分别创建2个元数据操作线程和8个内容数据操作线程,用于处理后续的写文件任务;元数据操作线程执行元数据操作的子步骤,内容数据操作线程执行写入文件的子步骤;
②元数据操作的子步骤:从元数据队列中获取信息,执行相应的元数据操作;
③写入文件的子步骤:存储服务器从内容数据队列中,获取待写入内容数据,然后根据待写入文件的内容,获取元数据段,并根据所获得的元数据段,对磁盘发起写入文件的块数据请求,以完成该元数据段对应块数据写入,循环的申请元数据段和写入元数据段对应的块数据,直至完成整个文件的写入。
说明书 :
一种共享文件系统中实现快速接收和储存数据的方法
技术领域
方法。
背景技术
过LAN网络不断的发送数据给NAS服务器。
应用场景:多个客户端同时对NAS共享文件系统中的多个文件进行存取操作,比如教育录播
系统、视频监控系统。在教育录播系统或视频监控系统中,往往有数百个甚至更多的IP摄像
机,以及数十个客户端需要进行文件的写入和操作,面对这样庞大的视频数据的存储,传统
NAS文件系统普遍存在以下明显的不足:因为传统的网卡驱动方式,当多台客户端同时访问
NAS文件系统的多个文件时,NAS的性能大大的下降,最终不能满足用户的需求。传统的网卡
驱动为内核态网卡驱动,报文需要在用户态和内核态之间多次拷贝,当数据量增加时,开销
尤其明显;传统的网卡驱动采用的是中断模式的驱动,大量的中断会耗尽CPU资源,导致性
能严重下降;传统的网卡驱动中各个数据线程以及控制线程在各个CPU核之间来回调度,浪
费资源。以上不足造成了当多个客户端同时访问NAS文件系统中的多个文件时,速度严重下
降,实时性不能保障。
发明内容
端同时对多个文件进行存取的目的。
接,所述的NAS子系统包括存储服务器和存储盘阵,所述的各个客户端通过LAN网络分别与
多个IP摄像机连接,所述方法的步骤如下:
服务器发送视音频数据;
并创建与各个队列对应的接收数据线程,将各个接收数据线程与CPU绑定,以接收客户端发
来的视音频数据;
退出;
直至待写入数据发送完毕;
网卡进行发送和接收数据;
据放入当前含有最少视音频数据的对应队列中;
据,会存到之前开辟的内存池中,然后转入数据存储处理的子步骤,如果没有接收到视频数
据则继续轮询。
的内容数据包,则把待写入的内容数据拷贝到内容数据操作队列中。
内容数据操作线程执行写入文件的子步骤;
数据请求,以完成该元数据段对应块数据写入,循环的申请元数据段和写入元数据段对应
的块数据,直至完成整个文件的写入。
写入到文件中,从而达到同时存储上百路视频流的目的。利用大页内存,减少缺页中断,提
高内存访问效率;利用用户态网卡驱动技术缩短了网卡处理数据包的时间,并且打破了传
统网卡驱动高并发时性能的局限性,同时避免了数据在用户空间和内核空间的来回拷贝,
使得数据可以直接在用户空间下直接写到磁盘中去,同时使用数据和元数据分别处理技
术,加快了数据存储速度。本发明有效提高了共享文件系统的并发访问效率,而且同时访问
的文件越多,效果越加明显,对于常见的教育录播行业或者视频监控行业,在很大程度上提
高了视频存储的效率。
附图说明
具体实施方式
系统包括存储服务器和存储盘阵,所述的各个客户端通过LAN网络分别与多个IP摄像机连
接,如图1所示。
并使用TCP/IP为通讯协议的以太网,是带宽超过1G的宽带网络,可以传输高清晰度的视频
文件。视音频源为高清IP 摄像机,能提供大码率高清视频码流。存储系统是基于Linux的
NAS,其中存储服务器是NAS服务器,存储盘阵是多个磁盘组成的存储阵列。
保存到存储服务器。该传输以及存储方法可以提高存储服务器的并发访问效率,使得多个
客户端可以同时对上百路视频流进行存储操作,同时,多个客户端也可以同时对上百路视
频流进行回放操作,保证客户端能够实时处理多路视频。本实施例所述方法可表述为:多个
客户端在IP摄像机处采集视频数据并经过处理,生成多个视频流,分别为data1, data2,
data3, …,dataN,通过共享文件系统使用特定的传输以及存储方法将多个视频流数据
data1,data2,data3,…,dataN快速存储到共享存储内,生成多个视频文件file1,file2,
file3,…,fileN,使得客户端可以同时对多个IP摄像机进行录像以及录像回放操作,从而
提高客户端的视频管理能力。
的驱动,大量的中断会耗尽CPU资源,导致性能严重下降;传统的网卡驱动中各个数据线程
以及控制线程在各个CPU核之间来回调度,浪费资源。本实施例则采用基于Linux UIO技术
的用户态网卡驱动,避免数据在用户空间和内核空间来回拷贝,节省CPU资源。Linux系统中
一般的驱动设备都是运行在内核空间,在用户空间用应用程序调用即可,而UIO则是将驱动
的很少一部分运行在内核空间,而在用户空间实现驱动的绝大多数功能,本实施例中网卡
驱动的数据接收以及发送功能都在用户态实现,因此避免了数据在用户空间和内核空间的
多次拷贝操作。
放,这在IP摄像机安装密集的项目中意义尤其重大。
服务器发送视音频数据。本步骤中客户端把从IP摄像机采集到的并经过处理的视频数据发
送到存储服务器,进行存储。
容数据队列,并创建与注册为UIO设备的网卡相对应的接收数据线程,并将各个接收数据线
程与CPU绑定,以接收客户端发来的视音频数据,如图4所示。
消除线程在各个CPU核来回调度的开销。
元数据操作线程和多个内容数据操作线程,用于处理后续的写文件任务。元数据操作线程
执行元数据操作,数据操作线程执行写入文件。写入文件时,存储服务器循环的申请元数据
段和写入元数据段对应的块数据,直至完成整个文件的写入。
退出。
直至待写入数据发送完毕。
卡发送或者接受数据。
音频元数据,会把该视音频元数据放入当前含有最少的元数据操作队列中;同样如果是视
音频内容数据,会把该视音频内容数据放入当前含有最少视音频内容数据的队列中。本实
施例设置了10个队列,其中2个对应元数据,8个对应内容数据队列。
大页内存,开辟内存池,并创建多个数据线程,过程如图4所示。创建过程首先,查询存储服
务器之前设置为UIO设备的网口数量,这些网口都是用来接收数据的,针对每个网口创建一
个接收数据线程,然后查询各个CPU核的占用率,选取一个占用率最小的CPU核,将接收数据
线程绑定到该CPU核上,并且每个CPU核只能绑定一个数据接收线程。本实施例中存储服务
器中可以采用4口网卡,6核CPU,因此创建4个接收数据线程,然后查询各个CPU核的占用率,
选取4个占用率相对较小的CPU核,每个核绑定一个接收数据线程。
据到达,如果接收到视音频数据,把接收到的数据暂时存储到之前开辟的内存池中,然后进
行数据存储处理过程,如果没有接收到视频数据则继续轮询。图5表示与1 4核绑定的1 4内
~ ~
容数据线程的接收过程。
收到时视音频数据是视音频元数据还是视音频内容数据。如果是视音频元数据使用私有协
议进行封装,主要包括是“打开文件”、“关闭文件”和“设置属性”等相关操作。
则把待写入的内容数据拷贝到内容数据操作队列中。
内容数据操作线程执行写入文件的子步骤。
数据请求,以完成该元数据段对应块数据写入,循环的申请元数据段和写入元数据段对应
的块数据,直至完成整个文件的写入。
方案(比如所使用的硬件网络等、网络所使用的各种协议、步骤的先后顺序等)进行修改或
者等同替换,而不脱离本发明技术方案的精神和范围。。