掌桥专利:专业的专利平台
掌桥专利
首页

基于AF_XDP的GigE Vision协议数据包处理方法及系统

文献发布时间:2023-06-19 18:37:28


基于AF_XDP的GigE Vision协议数据包处理方法及系统

技术领域

本发明涉及网络协议数据包处理领域,特别是涉及GigE Vision协议数据包处理领域。

背景技术

目前工业相机的通信接口主要包括1394接口、USB接口、CameraLink接口以及千兆以太网接口。其中千兆网通信以其传输距离远、传输速度较高、组网设备数量多和无需数据采集卡的特点,得到了广泛的应用。主流工业相机厂家,国外如德国Balser、日本JAI、英国E2V、加拿大Dalsa、韩国Vieworks,国内如大恒、嘉恒中自、微视图像等,均有多款千兆网通信的工业相机产品。

千兆网相机通过网络通信,必须运行网络通信协议。在传输层的协议有TCP协议和UDP协议。TCP协议提供IP环境下的数据可靠传输,提供的服务包括数据流传送、有效流控、全双工操作和多路复用、通过面向连接、端到端和可靠的数据发送。UDP则不为IP提供流控或差错恢复功能。但TCP对计算机资源消耗较多,UDP协议简单高效。由于UDP协议更加简单高效,国际自动成像协会(AIA)联合各大机器视觉厂商,共同开发了基于UDP协议的GigEVision通信协议。但是通过系统内核协议栈接收UDP数据并对GigE Vision协议进行解析和拷贝图像数据,会在数据传输流量增加时显著提高CPU利用率。并且在主机性能波动如拔插U盘或网络状况波动的情况下对于可能出现的数据帧丢失、乱序问题,没有相应的重传机制对数据帧进行处理,使得所接收的图像存在不完整和丢帧的问题。总结地说,现有的基于系统内核协议栈解析GigE vision协议数据包接收图像数据的方式会随着传输数据流量的增大而显著提高CPU利用率。在高负载如1000Mbps或10Gbps的数据流量带宽下接收图像数据会出现大量的丢帧和不完整帧情况。

软件实现高性能包处理的场景中,对每个包的处理耗时有极高的要求。通用目的操作系统中的网络栈更多是针对灵活性进行优化,这意味着它们花在每个包上的指令过多,不适合网络高吞吐的场景。随后出现了一些专门用于包处理的软件开发工具,例如DataPlane Development Kit(DPDK),这些工具一般都会完全绕过内核,将网络硬件直接交给用户态的网络应用,并需要独占一个或多个CPU。内核旁路方式可以显著提升性能,但缺点也很明显:

(1)很难与现有系统集成;

(2)上层应用必须要将内核中已经非常成熟的模块在用户态重新实现一遍,例如路由表、高层协议栈等;

(3)这种包处理应用只能工作在一个完全隔绝的环境,因为内核提供的常用工具和部署方式在这种情况下都不可用了;

(4)导致系统越来越复杂,而且破坏了操作系统内核把控的安全边界。

另一方面,Linux社区提供了一种给内核网络栈添加可编程能力的方案。这个框架称为XDP,全称是eXpress Data Path。XDP定义了一个受限的执行环境,运行在一个eBPF指令虚拟机中。eBPF是BSD Packet Filter(BPF)的扩展。XDP程序运行在内核上下文中,此时内核自身还没有接触到包数据,这使得我们能在网卡收到包后最早能处理包的位置,做一些自定义的数据包处理。内核在加载时执行静态校验,以确保用户提供的XDP程序的安全。之后程序会被动态编译成原生机器指令,以获得高性能。

发明内容

本发明提出的一种基于AF_XDP的GigE Vision协议数据包处理方法及系统,可至少解决上述技术问题之一。

为实现上述目的,本发明采用了以下技术方案:

一种基于AF_XDP的GigE Vision协议数据包处理方法,用于Linux平台的GigEVision协议解析与数据传输,包括:

XDP程序挂载于内核态的网卡驱动上,生成以太网数据帧重定向准则,用于重定向GVSP数据包;

所述XDP程序判断每个到达网口的以太网数据帧是否符合所述重定向准则,若符合,则将所述以太网数据帧重定向到用户态的用户空间应用程序;若不符合,则将所述以太网数据帧放行进入常规内核网络协议栈。

进一步地,所述重定向准则包括以太网数据帧的源地址、以太网数据帧的目的地址、以太网数据帧的传输类型和UDP数据包的端口号以及以太网数据帧的大小。

进一步地,所述用户空间应用程序中对每一帧以太网数据都设置一个状态列表,所述状态列表用于记录所述以太网数据帧的每个GVSP数据包是否已经收到、每个GVSP数据包的重传次数、每个GVSP数据包的重传定时器的状态。

进一步地,所述用户空间应用程序收到所述XDP程序重定向的以太网数据帧后,查找所述状态列表中所述以太网数据帧当前的GVSP数据包是否已经收到,若已经收到,则丢弃所述当前的GVSP数据包;

若未收到,则将所述当前的GVSP数据包存入对应位置,在所述状态列表中将所述当前的GVSP数据包标记为已收到,并更新收到的GVSP数据包序号的最大值Nla和连续的GVSP数据包序号的最大值Nco。

进一步地,若所述GVSP数据包序号的最大值Nla大于连续的GVSP数据包序号的最大值Nco,则触发重传线程,包括:

所述重传线程检查所述状态列表中序号在[Nco+1,Nla-L]范围内的GVSP数据包的状态,其中L为乱序窗口的长度;

若所述状态列表记录某个GVSP数据包未收到、重传次数小于预设的阈值、重传定时器的计时超过设定的超时时间,则发送重传命令,并在所述状态列表中将所述GVSP数据包的重传次数加1、所述GVSP数据包的重传定时器开始计时;

若所述状态列表记录某个GVSP数据包的重传次数大于或等于预设的阈值,则不重传所述数据包,将对应的以太网数据帧标记为不完整帧。

进一步地,还包括:

若所述当前的GVSP数据包为当前以太网数据帧的最后一个GVSP数据包或者为下一个以太网数据帧中的GVSP数据包,则重传当前以太网数据帧中,在状态列表中记录为未收到、重传次数小于预设的阈值、重传定时器的计时超过设定的超时时间的GVSP数据包。

进一步地,所述设定的超时时间的设定方法为:

测量每次从发出重传命令到收到重传包的时间RsndTime

定义平滑重传命令往返时间为SRT,SRT的初始值SRT

当完成第n次重传后,当前平滑重传命令往返时间SRT

其中

重传超时时间ERT的计算公式为:

其中

进一步地,所述方法用于在相机和上位机之间传输图像数据,所述以太网数据帧为基于GigE Vision协议的图像数据帧。

另一方面,基于同样的发明构思,本发明提出了一种基于AF_XDP的GigE Vision协议数据包处理系统,包括网卡和上位机,其特征在于,网卡驱动上,挂载有用于重定向GVSP数据包的XDP程序,所述网卡和所述上位机配合,用于执行上述的基于AF_XDP的GigEVision协议数据包处理方法。

具体地说,本发明在现有的基于linux内核协议栈的GigE Vision协议解析技术上,提出了基于内核中快速数据传输通道,进行GigE Vision协议数据的接收和解析,并以零拷贝的方式将以太网数据帧重定向到用户空间。具体是利用AF_XDP机制提供的数据包重定向功能,可以直接将以太网协议的网络数据帧以零拷贝(zero-copy)的方式重定向到用户空间的应用程序中,避免了以太网数据帧在内核中多次数据拷贝,降低了CPU利用率。并设计使用重传策略,有效解决了网络波动造成的数据包不连续和丢包问题,高效地将丢包重传回来,提高了接收的数据质量。

将XDP程序挂载到网卡驱动中的挂载点后,每当网卡接收到一个数据包就会执行这个XDP程序;XDP程序可以对数据包进行逐层解析、按规则进行过滤,或者对数据包进行解封装,修改字段对数据包进行转发等。AF_XDP是为高性能数据包处理而优化的地址族,AF_XDP套接字使得XDP程序可以将数据帧重定向到用户空间应用程序中的内存缓冲区。本发明的有益效果为:

(1)使用了内核中最新的AF_XDP技术,实现在最靠近网卡处接收到以太网数据帧并识别GVSP数据包,并以零拷贝的方式将数据包重定向到用户空间缓冲区,降低了内核协议栈的开销,避免了内核态和用户态切换带来的性能消耗,有效降低了CPU利用率。

(2)设计并使用重传策略,有效解决了网络波动造成的数据包不连续和丢包问题,高效地将丢包重传回来,提高了接收的图像质量。

(3)XDP具有动态可编程性;无需修改内核即可实现新功能,而且不会引起任何流量中断。

(4)无需预留专门的CPU做包处理,相比DPDK显著降低了CPU利用率。

(5)XDP不替代TCP/IP协议栈,它与协议栈协同工作,可以选择性复用内核网络栈中的现有功能,在保持配置接口不变的前提下,加速关键性能路径。

(6)XDP不需要任何专用硬件,任何有Linux驱动的网卡都可以支持,现有的驱动只需要做一些修改,就能支持XDP挂载点。

附图说明

图1是本发明中GigE Vision协议数据包的传输路径图;

图2是本发明基于AF_XDP的GigE Vision协议数据包处理方法的流程图;

图3是本发明中GigE Vision协议数据包传输以及触发重传线程的流程图;

图4是本发明的方法中重传线程流程图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。

本实施例提出了一种基于AF_XDP的GigE Vision协议数据包处理方法及系统。

在基于Linux平台的GigE Vision协议解析与数据传输过程中,本实施例进行了如下设计:

在驱动的XDP挂载点挂载用于重定向GVSP协议数据包的XDP程序,并通过XDP程序生成以太网数据帧重定向准则。其中GVSP协议数据包为GigE Vision协议下用于传输图像的子协议,其中,重定向准则包括:

重定向准则包括以太网数据帧的源地址、以太网数据帧的目的地址、以太网数据帧的传输类型和UDP数据包的端口号以及以太网数据帧的大小。上述重定向准则的设定的内容符合基于GigE Vision协议的待传输的图像信息,即只有当待传输的图像信息传送过来时,才能满足这一重定向准则,其余的信息则不符合此重定向准则,以此起到过滤信息的作用,将需要传输的图像信息过滤出来。

当信息进入内核态的网卡驱动时,该XDP程序判断每个到达网口的以太网数据帧是否符合重定向准则,若符合,则该以太网数据帧为需要传输的基于GigE Vision协议的图像信息,将其重定向到用户空间应用程序;若不符合,则该以太网数据帧为其他的信息,将其放行进入常规的内核网络协议栈,上述过程如图1和图2所示。在现有技术中,系统内核协议栈接收图像信息并对GigE Vision协议进行解析,需要对图像信息进行多次拷贝,CPU占用率很高,速度受限,但本实施例上述的重定向功能,则不需要进行任何信息拷贝工作,直接将其定位到用户空间的应用程序中,降低了内核协议栈的开销,避免了内核态和用户态切换带来的性能消耗,降低了CPU的利用率,数据传输的速度得到了很大的提升。

进一步地,在图像数据高速传输过程中,还存在着丢帧和接收到不完整帧的问题,本实施例通过以下设计来解决这一问题:

本实施例在用户空间的应用程序中对每一帧以太网数据都设置一个状态列表来记录该帧数据的传输状态。该状态列表包括:该以太网数据帧的每个GVSP数据包是否已经收到、每个GVSP数据包的重传次数、每个GVSP数据包的重传定时器的状态。

上述重传定时器用于记录该数据包最近一次重传到现在经过了多少时间。

用户空间的应用程序收到上述由XDP程序重定向过来的基于GigE Vision协议的数据帧后,理论上会按照顺序接收每一个GVSP数据包,首先查找该数据帧的状态列表,并进行如下判断,如图3所示:

读取状态列表中该GigE Vision协议数据帧当前的GVSP数据包是否已经收到,若已经收到,则丢弃当前数据包;若未收到,则将当前数据包存入图像缓冲区对应位置,并将状态列表中该数据包记为已收到,并更新该数据帧收到的数据包序号的最大值Nla和连续的数据包序号的最大值Nco。

比较Nla和Nco的大小,若Nla大于Nco,则触发重传线程。在GigE Vision协议数据帧传输过程中,理论上会按照顺序传输每一个GVSP数据包,所以在状态列表中,GVSP数据包的序号在理论上也应该按照顺序递增,在传输的某一时刻,若收到的数据包序号的最大值Nla大于连续的数据包序号的最大值Nco,则说明在Nla和Nco之间存在未接收到的数据包,需要进行重传。

上述重传线程的执行过程如图4所示,包括:

检查该数据帧的状态列表中序号在[Nco+1,Nla-L]范围内的GVSP数据包的状态,其中L为设定的乱序窗口的长度;

若状态列表记录某个GVSP数据包未收到、重传次数小于预设的阈值PktRsndMax、重传定时器的计时超过设定的超时时间,则发送重传命令,并在所述状态列表中将所述GVSP数据包的重传次数加一、所述GVSP数据包的重传定时器开始计时。

若状态列表记录某个GVSP数据包已收到,则不需要再重传,跳过该数据包;若记录某个GVSP数据包重传定时器的计时未超过设定的超时时间,则该数据包上一次的重传尚未结束,应当继续等待,无需重传,跳过该数据包;若所述状态列表记录某个GVSP数据包的重传次数大于或等于预设的阈值PktRsndMax,则不重传所述数据包,将对应的以太网数据帧标记为不完整帧,该阈值PktRsndMax用于衡量某个GVSP数据包最大重传次数,可根据不同的数据传输情况提前进行设定。

最后,若当前的GVSP数据包为当前GigE Vision协议数据帧的最后一个GVSP数据包或者为下一个在GigE Vision协议数据帧中的GVSP数据包时,说明当前GigE Vision协议数据帧的传输在理论上结束了,将进入下一帧GigE Vision协议数据帧的传输,此时则重传当前以太网数据帧中,在状态列表中记录为未收到、重传次数小于预设的阈值PktRsndMax、重传定时器的计时超过设定的超时时间的GVSP数据包,以防止当前。

本实施例设计并使用上述的重传策略,有效地解决了网络波动造成的数据包不连续和丢包问题,高效地将丢包重传回来,提高了接收的图像质量。

进一步地,上述设定的超时时间的计算方法为:

测量首次从发出重传命令到收到重传包的时间RsndTime

为了避免RsndTime数值的剧烈波动,定义一个平滑重传命令往返时间SmoothedRsndTime(下面简写为SRT),SRT的初始值SRT

其中

其中,

上述的平滑因子a和系数b均可根据不同的数据传输情况提前进行设定,超时时间ERT用于衡量从发出重传命令到收到重传包之间的最大等待时间。

进一步地,上述方法用于在相机和上位机之间传输图像数据,其中的以太网数据帧为基于GigE Vision协议的图像数据帧。

又一方面,基于同样的发明构思,本发明还公开了一种基于AF_XDP的GigE Vision协议数据包处理系统,包括网卡和上位机,网卡驱动上,挂载有上述用于重定向GVSP数据包的XDP程序,通过网卡和上位机配合,执行上述的基于AF_XDP的GigE Vision协议数据包处理方法。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

技术分类

06120115632679