李欣,樊志杰,曹志威,胡正梁,陈国梁
(1.中国人民公安大学 信息技术与网络安全学院,北京100038;2.安全防范技术与风险评估公安部重点实验室,北京100038;3.公安部第三研究所 信息安全技术部,上海200031; 4.上海辰锐信息科技公司,上海200031)
随着国家大力推动“平安城市”“雪亮工程”的建设,全国各地建设了大量的高清视频监控设备。同时,伴随着视频传输网上视频流量的不断增长,对视频网络流量的传输能力要求也越来越高,并且视频流的传输是进行视频数据共享和视频数据分析的关键步骤。
现有的视频传输网流量传输模型主要有2种[1-2]:①基于硬件的方式,包括NetFlow和Net-Stream等,但该方式需要对网络设备进行专业的定制,成本高,且需要采用采样的方式抽取视频流量,这样会造成分析结果不准确。②基于网络抓包嗅探的方式,包括Libpcap和Netmap等,但该方式往往只能够承载百兆级别的网络流量,对于大规模的视频监控网络流量无法进行有效的传输、采集和分析。现阶段,PF_RING技术在数据包抓取方面有其独特的优势,并且已存在较多的研究。例如,刘峰[3]提出CPU零参与方式,提高了千兆网卡数据包的抓取效率。赵志强等[4]通过零拷贝技术,将PF_RING抓取数据包的方式集成到Snort中,使IDS具备了IPv6检测的功能。同时,考虑到视频传输网中的视频流数据具有实时性高、数据吞吐量大、数据误码率低等特性,这就要求视频传输系统具有高性能视频流传输与分析的能力。
鉴于此,本文采用PF_RING多核视频流高性能传输模型进行视频监控系统前端视频流数据包的处理,以便减少视频流数据包的拷贝次数,进而提高对视频传输网中视频流量传输、转发的速度和效率。
PF_RING的多核视频流高性能传输技术可以提升视频传输系统的传输性能[5-9]。以下将对本文涉及的PF_RING机理和视频传输系统进行概述。
PF_RING是Deri[10]研究出来的运行在Linux内核层的高效数据报文传输模型,其有助于对网络数据报文和网络流量进行深层次的分析研究。同时,用户级别的应用程序可以通过其提供的API来进行更为高效的网络数据传输。
在Linux传统的网络协议栈数据报文处理过程中,CPU大量的处理能力使用在把网卡接收到的数据报文拷贝到kernel中的数据结构队列中,再从kernel的数据结构队列发送到用户空间的应用程序数据接收区中,导致了CPU处理能力的严重耗损。网络传输过程中,在网络设备上需要对数据报文sk_buff结构进行多次拷贝,并且涉及内核态和用户态的频繁系统调用,限制了传输报文的效率,尤其对小报文的传输性能影响更大。本文引入的PF_RING技术,一方面减少了报文在网络设备上的拷贝次数,极大地释放出CPU的处理能力;另一方面与TNAPI技术的融合将网卡接收的数据报文分发到各个CPU核的RX队列中以充分利用多核的特性。通过这2种方式显著提高了网络设备的数据报文处理能力。
视频传输系统是一种应用于不同视频传输网之间视频资源共享的通道[11-12],其采用全新硬件设备和全新软件架构,由视频设备认证服务器、视频用户认证服务器和网络安全隔离设备3部分组成,是运行在各视频传输网之间的核心视频数据传输部件。本文提出的视频传输系统采用软硬一体化设计,主要用于解决用户在2个视频传输网域之间相互访问视频资源时所面临的视频资源可信性、用户合法性、数据安全性、访问可控性等问题。视频传输系统部署架构如图1所示。
图1 视频传输系统部署架构Fig.1 Deployment framework of video transmission system
由于视频传输网的使用用户多,视频数据量大,在不同的视频传输网之间进行视频数据共享,就需要视频传输系统具有高性能的视频流传输机制。因此,视频传输系统要满足误码率低、延时小、吞吐量高的特性。本文研究使用基于PF_RING多核模型的高效数据包传输技术,进而提升视频传输系统接收视频流的能力,降低视频流的误码率,减少视频流在视频传输系统内部的延时,提高系统的网络数据吞吐量。
本节详细分析了基于PF_RING多核模型的共享视频流传输过程。
PF_RING的工作机制比Linux传统的网络协议栈处理网络数据报文更高效[13-15],图2为两者工作机制的比较。
图2 传统协议栈与PF_RING工作机制的比较Fig.2 Comparison of working mechanism between traditional protocol stack and PF_RING
Linux系统传统的处理网络数据报文过程为:网卡驱动将数据放入网卡的缓冲区中;驱动程序发送中断请求给CPU,将网卡缓冲区中数据拷贝到Linux系统的内核网络协议栈缓冲区中;内核网络协议栈的Ethernet层、IP层、TCP/UDP层、Socket层依次对数据报文进行处理;通过Linux的系统调用将数据从内核拷贝到用户空间。
PF_RING是一种与Linux系统Socket不同的新的网络Socket,其可以极大地改进数据报文传输的速度,减少报文传输过程中在Linux系统内核态和用户态之间的拷贝次数。PF_RING对数据传输方式优化的不同又分为PF_RING+TNAPI和PF_RING零拷贝2种实现机制。本文分别采用上述2种模式来提升视频传输系统的传输效率,并进行了对比分析。
随着多核CPU在网络设备上的广泛使用,Deri[10]在NAPI(New Application Program Interface)基础上提出TNAPI(Threaded New Application Program Interface),将网卡接收的数据报文分发到各个CPU核的RX队列中以充分利用多核的特性。PF_RING+TNAPI的实现机制如图3所示,具体步骤如下:
图3 PF_RING+TNAPI的实现机制Fig.3 Implementation mechanism of PF_RING+TNAPI
步骤1创建对应多核的环形缓冲区ring的新型套接字Virtual PF_RING。
步骤2TNAPI将网卡上收到的数据分发到各核对应的RX队列中。
步骤3将RX队列中的数据报文拷贝到环形缓冲区ring,若缓冲区ring已满,则将该报文丢弃。
步骤4在各核上运行用户空间应用程序,通过内存映射文件MMAP或PF_RING轮询直接访问各个环形缓冲区ring中的数据。
PF_RING直接映射网卡内核和寄存器到用户空间的机制即PF_RING零拷贝模式,其实现机制如图4所示,具体步骤如下:
图4 PF_RING零拷贝的实现机制Fig.4 Implementation mechanism of PF_RING zero-copy
步骤1PF_RING设置映射网卡内存ring到用户态的零拷贝方式。
步骤2仅有一次数据拷贝操作由网卡的网络处理单元完成。
步骤3应用程序使用PF_RING 接口以DMA或应用轮询方式获取网卡环形缓冲区ring中的数据。
步骤4CPU的处理能力能更多地分配到数据报文处理中,处理网络数据报文更高效。
PF_RING零拷贝模式的缺点在于一次只允许一个应用程序访问DMA 缓冲,不利于利用CPU多核的特性。
视频传输系统的安全隔离设备是由1个视频控制信令双向物理通道、2个正反向的视频流单向物理通道组成的专用设备[16-18]。视频设备认证服务器主要用于对相互进行数据共享的视频传输网视频服务器等设备的身份认证。视频用户认证服务器主要用于对相互进行数据共享的视频传输网中的使用用户进行身份认证。同时,视频设备认证服务器、视频用户认证服务器需要对视频传输网间的视频流进行高效的传输。
视频传输系统为了实现视频传输网间的视频流高效的传输,使用了PF_RING技术结合内存路由表、多通道多线程相关技术。
视频传输系统的内存路由表包含视频控制信令的内存路由表、由视频控制信令动态分配的视频流内存路由表。其中,视频传输系统的控制信令的内存路由表各字段如下:
1)源地址、端口。指被调取视频源所在视频传输网服务器的IP和端口。
2)目标地址、端口。指视频接收方所在视频传输网服务器的IP和端口。
3)协议类型。UDP或TCP协议。
4)信令类型。指视频信令所采用的协议,如SIP、RTSP等协议。
视频流内存路由表是由上文中的视频控制信令动态分配得到的内存路由表,且其是以视频传输系统在设备上开辟的端口为Key,以DataNet-PortVsas结构体为Value的map内存表。视频传输系统每个通道对应一个视频流内存路由表,系统通道数不超过系统硬件CPU的总核数。Net-PortVsas为视频设备认证服务器、视频用户认证服务器的端口。DataNetPortVsas的数据结构如表1所示。
表1 DataNetPortVsas的数据结构Tab le 1 Data structure of DataNetPortVsas
视频传输系统的高效视频流传输过程如图5所示。
视频传输系统需要对2个专网间的视频资源进行数据共享。视频用户认证服务器和视频设备认证服务器都具备视频码流的接收和转发能力。如图5所示,SnifferThread为视频传输系统的视频流接收服务。通过反复实验发现,在现有的8核CPU硬件设备下,使用多通道能满足视频传输系统高效视频流传输的要求。其中,瓶颈在视频传输系统的SnifferThread接收视频码流能力。另外,SnifferThread线程接收视频码流的过程如图6所示。
图5 视频传输系统的视频流传输Fig.5 Video stream transmission of video transmission system
图6 SnifferThread服务框架Fig.6 Service framework of SnifferThread
鉴于此,本文分别使用PF_RING零拷贝机制和PF_RING+TNAPI机制对SnifferThread服务进行优化。PF_RING零拷贝机制基本没有任何额外的数据包复制工作,进而将CPU的处理能力更多地运用在视频流数据报文的处理和传输功能上。PF_RING+TNAPI机制,视频传输系统SnifferThread服务使用多线程多队列方式从网卡获取数据报文,效率较高,可以更好地发挥硬件多核的特性,显著降低了CPU的使用率。
为了将传统协议栈、PF_RING+TNAPI、PF_RING零拷贝技术对视频传输系统的传输性能进行对比分析,搭建了如图7所示的测试环境。
图7 测试环境拓扑Fig.7 Topology of test environment
测试环境中,硬件设备采用Intel的E5-2623 v3@3.00 GHz型号CPU,32 GB内存,英特尔®82599双口光口10 GB网卡;操作系统采用CentOS 6.5。
本节实验的主要目的是验证PF_RING技术对视频传输性能的提高程度。鉴于此,实验中的每条测试用例将在Linux网络协议栈、PF_RING+TNAPI和PF_RING零拷贝3种模式下进行对比分析,着重比较在相同软硬件环境下系统的有效吞吐量、CPU 使用率和平均误码率。
使用iperf工具发送10 Mbit/s的模拟视频流数据,测试用例如下:①第1条。400路,每路10Mbit/s的视频流。②第2条。500路,每路10Mbit/s的视频流。③第3条。600路,每路10Mbit/s的视频流。④第4条。700路,每路10Mbit/s的视频流。⑤第5条。800路,每路10Mbit/s的视频流。
实验从视频传输系统的有效吞吐量、CPU使用率、平均误码率3个方面观察基于Linux网络协议栈、PF_RING+TNAPI和PF_RING零拷贝3种模式下的视频传输能力,对比结果如图8~图10所示,其中每项结果均为5次测试实验的平均值。
图8 有效吞吐量对比Fig.8 Comparision of effective throughput
图10 平均误码率对比Fig.10 Comparision of average bit error rate
在上述3种模式下,当模拟发送400×10Mbit/s、500×10Mbit/s数据时,系统的有效吞吐量几乎相同;当模拟发送700×10Mbit/s、800×10Mbit/s时,PF_RING+TNAPI、PF_RING零拷贝模式具有很大的优势。其中,PF_RING+TNAPI、PF_RING零拷贝模式下有效吞吐量数据相近。
在接收视频流设备的CPU使用率对比中(见图9),不管模拟发送的数据包有多大,PF_RING+TNAPI、PF_RING零拷贝模式通常具有更低的CPU使用率。其中,PF_RING+TNAPI能更好地发挥硬件多核的特性,在CPU使用率方面具备优势。
图9 CPU使用率对比Fig.9 Comparision of CPU utilization
图10显示了平均误码率对比分析,在基于Linux网络协议栈模式下,当模拟数据达到600×10Mbit/s时,平均误码率超过1%,将导致视频流失真较大。然而,PF_RING+TNAPI、PF_RING零拷贝模式通常具有更低的平均误码率,优势更大。其中,PF_RING+TNAPI、PF_RING零拷贝模式下平均误码率数据相近。
考虑到视频流量传输的特点,本文提出一种基于PF_RING的视频流高性能传输模型,其通过使用PF_RING+TNAPI机制结合视频传输系统多通道技术,进而减少视频流数据包在网络设备上的拷贝次数,更好发挥硬件多核的特性,极大地释放出CPU的处理能力。本文得出如下结论:
1)通过合理地调整CPU的调度能力,本文模型有效解决了由于视频流波动导致的不同进程间相互影响造成的丢包率升高的问题。
2)为了保证不同网域间视频流数据的安全传输,本文提出了视频控制信令双向传输、视频流单向传输的设计模式。
3)通过大量的对比实验,本文验证了基于PF_RING+TNAPI的模型相比于传统的基于协议栈的模型在视频流传输方面的网络有效吞吐量、CPU使用率、平均误码率指标上均有很强的优势,在CPU使用率上也优于PF_RING零拷贝模式。