一种千兆以太网数据记录设备的实现
2013-07-05聂玉鑫
聂玉鑫
(第七一五研究所,杭州,310012)
一种千兆以太网数据记录设备的实现
聂玉鑫
(第七一五研究所,杭州,310012)
介绍了一种基于linux操作系统的以太网高速数据记录仪。该记录仪实现了400 Mbps实时数据的记录和回放,并具备完全网络控制功能,可不需要单独的显示控制终端,作为一个模块集成到系统中。
千兆以太网;数据存储;网络控制
随着数据采集的多元化,数据采集和传输系统的实时数据量越来越大,需要将海量的实时数据记录下来,用作后续的分析和处理。本文介绍了一种基于PC平台的网络数据实时记录系统,该网络数据记录仪是一个“黑盒子”,可以“单板+硬盘”形式存在于系统中,它不需要键盘及显示器等控制和显示终端,由控制台通过网络协议进行控制。记录仪只对外提供一个千兆以太网接口。通过该接口完成数据、命令以及系统状态信息的传输。经过测试,当网络实时数据率400 Mbps时,记录1T数据不丢包。
1 系统运行平台
该记录仪硬件平台为一台PC机。CPU采用4 核Intel Xeon e5410,数据记录软件将按照不同功能模块对CPU资源的使用率,合理的将不同的模块分配到不同的CPU核上运行,提高了系统的稳定性。数据记录系统内存资源4 G,其中分配了500 M的专用内存空间用作数据环形缓冲区,从而避免在高速数据流不断到来的同时,写硬盘过程中的突发事件延迟引起的数据丢失。数据记录仪包括一个64 G的操作系统盘和1T的数据记录盘。为提高系统数据记录效率,减少文件块碎片对系统数据记录的影响。记录仪将操作系统盘与数据记录盘分开。64 G的操作系统盘挂载在SATA0链路上,该硬盘上安装了RHEL5操作系统[1]、数据共享软件服务器端、系统初始化脚本以及数据记录软件。数据记录盘挂载在SATA1链路上。在系统开机时,系统初始化脚本将该数据记录盘自动挂载到指定文件系统目录下,记录软件绕过文件系统[2],通过相应模块对该数据盘进行管理。当数据盘可用空间不足时,可更换新的数据记录盘。同时数据共享软件将所有数据通过SAMBA协议共享,任意一台连接到网络中的PC机都可访问数据。系统硬件架构见图1,系统运行示意图见图2。
图1 系统架构
图2 系统运行示意图
2 数据记录软件设计
2.1 软件环境
数据记录软件实现了数据记录仪的主要功能。在系统上电时,默认从操作系统盘sda1引导并加载RHEL5操作系统。操作系统启动完成后,自动运行初始化脚本,设置软件运行环境,修改一些重要的系统参数,并挂载数据盘sdb1到指定文件系统目录下。在完成以上一系列的初始化操作后,系统将自动运行数据记录软件,开始监听控制指令端口。
2.2 软件架构
数据记录软件主要包括以下几个模块:数据记录模块;数据回放模块;系统状态记录及心跳模块;网络控制模块;丢包测试模块;数据整理模块,软件架构图如图3所示。
图3 数据记录软件架构
加载数据记录软件后,主程序会自动创建两个模块:网络控制模块和系统状态记录及心跳模块。这两个模块在记录系统运行过程中和主程序一起(椭圆)处于阻塞监听状态。在主程序收到网络命令控制模块的指令后,向其它四个模块(矩形)发出控制命令。主程序针对每个模块定义了一个全局状态变量。通过读取这些状态变量,来获取各个模块状态信息。然后再通过flag互斥变量对四个模块进行控制,即同一时刻这四个模块只能有一个处于运行状态。
2.2.1 数据记录模块
数据记录模块数据流如图4。由于实时数据率非常大。当网口速率为400 Mbps时,每秒将接收并存储50 M数据。程序设置了一个专用的三维环形缓冲区,用于缓冲网络接口与硬盘接口之间的高速数据流[3]。环形接收缓冲区共20480维,由0至20479编号,至20479后反转。
图4 数据缓冲区
数据记录主程序将TCP/IP协议栈内的套接字缓冲区(SOCKET BUFFER)[4]设置为(225−1)字节。数据接收线程从SOCKET BUFFER接收到20个数据包后,写入到环形缓冲区中。当前缓冲区写满后,设置READY,并将当前缓冲区编号通过消息队列发送给数据存储子线程。数据存储子线程依次从消息队列中获取READY缓冲区的编号,存储数据,然后置EMPTY。读写环形缓冲区操作由WP 和RP两个指针控制。
2.2.2 网络控制模块
系统网络控制模块始终处于运行状态,它负责控制和管理整个系统的其它模块的运行状态。同时它也是与控制终端(如信号处理机)进行命令和系统状态交互的一个模块。网络控制模块通过监听网络控制端口,接收控制终端发送的控制命令,对命令进行解析,然后通过Linux信号量与其它模块通信,完成对其它模块的控制功能。
2.2.3 系统状态记录及心跳模块
数据记录模块由“显示文件列表”、 “选择文件回放”、“结束回放”三条命令控制,通过解析网络控制模块接收到的控制命令发出。数据回放模块收到“显示文件列表”命令后,打印数据存储目录下所有的数据文件信息,并对每一个文件进行编号。控制台根据终端显示,通过选择文件编号,选择相应的文件进行回放。回放速度通过一个循环作延时来控制。回放线程确定回放数据后,依次从硬盘读取数据,按照数据记录时的真实顺序进行回放。回放过程中,主程序和网络控制模块同时监听控制命令。当收到“停止回放”命令后,强制结束回放线程,释放资源,回到主程序。如果回放过程没有收到任何命令,在回放完成后结束回放线程,回到主程序。
3 结论及展望
该数据记录系统实现了高速以太网实时数据的记录功能。经过如图2测试,采用两台PC机器模拟实时数据源,不间断发送UDP数据包,在控制台上运行控制软件,控制记录仪完成数据记录和回放等功能测试。在总速率400 Mbps(数据源1和数据源2)情况下记录5 h,总数据量约1TB情况下,没有出现丢包。同时能够顺利完成网络控制、数据回放、系统状态记录及心跳发送等功能。
对于整个系统而言,数据记录仪是一台透明存在的设备;只需在控制台上运行一个程序,该程序按照网络控制协议向记录仪发送控制命令,就能够完成对记录仪的所有控制功能。而记录仪就如同一个黑盒子,只需要通过千兆网口连接到网络中。目前,该记录仪数据率的瓶颈主要在硬盘的访问速度上。将来采用RAID0或RAID10磁盘阵列系统提高数据存储速度[5],从而实现更高速的网络实时数据记录。
[1] DANIEL P BOVET, MARCO CESATI. Understanding the linux kernel, O’Reilly Media, 2005.
[2] 毛德操, 胡希明. Linux内核源代码情景分析[M]. 杭州:浙江大学出版社, 2001.
[3] 张冬.大话存储2-存储系统架构与底层原理极限剖析[M]. 北京: 清华大学出版社, 2011.
[4] STEVENS W RICHARD. TCP/IP详解-卷1:协议[M].范建华,译. 北京: 机械工业出版社, 2000.
[5] 张冬. 大话存储-网络存储系统原理精解与最佳实践[M].北京: 清华大学出版社, 2008.