一种基于共享指针池的报文零拷贝处理方法技术

技术编号:14753540 阅读:95 留言:0更新日期:2017-03-02 11:12
本发明专利技术公开一种基于共享指针池的报文零拷贝处理方法,步骤是:初始化时开辟共享内存,并在共享内存上建立共享指针池;硬件捕获报文后直接将报文放入共享内存;接收模块收取每帧报文的起始指针,并将起始指针放入共享指针池,然后再将共享指针池的首地址分发给分析模块和存储模块;分析模块和存储模块收到接收模块的信息,通过共享指针池首地址访问共享内存中的共享指针池,然后通过共享指针池中的报文指针访问共享内存中的报文内容;分析模块和存储模块在使用完共享指针池和报文内容后,通知接收模块释放。此种方法能够在报文处理流程中实现报文的零拷贝,提高效率,节省系统资源。

【技术实现步骤摘要】

本专利技术属于网络通信领域,特别涉及到智能变电站通讯网络中应用的网络报文记录分析装置中对报文接收、分析、存储效率优化的方法。
技术介绍
智能变电站通讯网络中采用GOOSE、SV、IP、TCP、UDP、MMS、SNTP等报文传输信息,并且通过网络报文记录分析装置对这些报文进行接收、实时分析、存储,以便发现和分析问题。现有实现方案中,报文处理流程如图1所示,具体如下:1)接收模块从硬件缓存中收取报文,通过①报文拷贝,放入私有内存中,然后做统计计算,最后将报文按协议类型分发给分析模块和存储模块,此过程中报文要经过内核传递,分别通过②③报文拷贝发送给内核,此处发生两次报文拷贝;2)分析模块从内核接收报文,通过④报文拷贝,放入私有内存中,然后分析报文结构,如果有异常,产生告警信息;3)存储模块从内核接收报文,通过⑤报文拷贝,放入私有内存中,然后将报文存储到磁盘。可见,上述处理流程中,报文从接收模块传递到存储模块,需要5次报文内容拷贝。由于实际需要处理的报文流量巨大,要达到400Mbps或者更高,并且流量是持续流量,需要实时处理,对巨量报文的5次拷贝,极大地浪费了系统资源。因此,需要研究一种更高效的方法,在报文接收、分析、存储过程中实现报文零拷贝,提高效率,弥补现有方案的不足,本案由此产生。
技术实现思路
本专利技术的目的,在于提供一种基于共享指针池的报文零拷贝处理方法,其可解决网络报文记录分析装置的报文处理流程中的报文拷贝浪费资源、效率低下的缺点和不足,能够在报文处理流程中实现报文的零拷贝,提高效率,节省系统资源。为了达成上述目的,本专利技术的解决方案是:一种基于共享指针池的报文零拷贝处理方法,包括如下步骤:步骤1,初始化时开辟共享内存,并在共享内存上建立共享指针池;步骤2,硬件捕获报文后直接将报文放入共享内存;步骤3,接收模块收取每帧报文的起始指针,并将起始指针放入共享指针池,然后再将共享指针池的首地址分发给分析模块和存储模块;步骤4,分析模块和存储模块收到接收模块的信息,通过共享指针池首地址访问共享内存中的共享指针池,然后通过共享指针池中的报文指针访问共享内存中的报文内容;步骤5,分析模块和存储模块在使用完共享指针池和报文内容后,通知接收模块释放。上述步骤1中,接收模块初始化时在共享内存上预先分配固定数目、固定大小的共享指针池,并对共享指针池进行统一管理。上述步骤4中,存储模块内部处理报文时,将报文内容先经过软件压缩或硬件压缩,然后再存储到磁盘;或直接将未压缩的报文存储到磁盘。上述共享指针池前端有共享指针池使用标志,表示该共享指针池当前是否正被分析模块和存储模块使用,当没有模块使用该共享指针池时,该共享指针池被释放。上述报文内容前端有报文使用标志,报文使用标志用于记录该帧报文是否正在被共享指针池使用,当没有共享指针池使用该报文时,该报文内存被释放。上述每帧报文的首地址按照需要放入多个不同的共享指针池中,待所有共享指针池都不再使用该帧报文时,该帧报文所占内存才被释放。上述分析模块有一个或多个,如果有多个分析模块,多个模块之间是并列关系,与一个分析模块时对共享指针池的处理和访问完全一致。采用上述方案后,本专利技术在报文接收、分析、存储过程中通过共享指针池的使用,实现了报文零拷贝,节省了资源,提高了效率,增加了程序的处理能力。附图说明图1是现有实现方案报文处理流程示意图;图2是本专利技术的流程图;图3是本专利技术共享内存中共享指针池对报文管理示意图。具体实施方式以下将结合附图,对本专利技术的技术方案进行详细说明。如图2所示,本专利技术提供一种基于共享指针池的报文零拷贝处理方法,包括如下步骤:步骤1,接收模块初始化过程中开辟共享内存,使各模块均可访问,并在共享内存上预先分配固定数目、固定大小的共享指针池,并且接收模块负责通过对共享指针池进行统一管理;步骤2,硬件捕获报文后直接将报文放入共享内存中的报文共享内存部分;步骤3,接收模块通过⑥收取每帧报文的起始指针,并通过将起始指针放入共享指针池,然后再通过⑦⑧将共享指针池的首地址分发给分析模块和存储模块;步骤4,分析模块和存储模块收到接收模块的信息,获取共享指针池首地址,通过⑨⑩访问共享内存中的共享指针池,然后通过共享指针池中的报文指针访问报文共享内存中的报文内容;其中,分析模块可以有一个或多个,如果有多个分析模块,多个模块之间是并列关系,与一个分析模块时对共享指针池的处理和访问完全一致;存储模块内部处理报文时,可以将报文内容先经过软件压缩或硬件压缩,然后再存储到磁盘,也可以直接将未压缩的报文存储到磁盘;步骤5,分析模块和存储模块在使用完共享指针池和报文内容后,通过通知接收模块释放,接收模块通过释放共享指针池和报文共享内存中的报文内容。以下将进一步详细说明共享内存中的共享指针池和报文共享内存中的报文内容之间的关系,以及对共享指针池和报文共享内存的内存管理。共享内存中共享指针池对报文管理示意图如图3所示。每个共享指针池前端有共享指针池使用标志,用于记录该共享指针池正在被哪些应用模块使用;共享指针池主体是报文指针部分,记录每帧报文的起始地址;硬件捕获的每帧报文是在不连续的共享内存中,在每帧报文的前端有报文使用标志,用于记录该帧报文正在被哪些共享指针池使用;当共享指针池使用标志中没有应用模块使用时,则该共享指针池被释放,当报文使用标志中没有共享指针池使用时,该报文内存被释放。每个共享指针池可以按照需要同时被多个应用模块所用,待所有应用模块都不再使用该共享指针池时,该共享指针池内存才被释放;每帧报文的首地址可以按照需要放入多个不同的共享指针池中,待所有共享指针池都不再使用该帧报文时,该帧报文所占内存才被释放。以上实施例仅为说明本专利技术的技术思想,不能以此限定本专利技术的保护范围,凡是按照本专利技术提出的技术思想,在技术方案基础上所做的任何改动,均落入本专利技术保护范围之内。本文档来自技高网...
一种基于共享指针池的报文零拷贝处理方法

【技术保护点】
一种基于共享指针池的报文零拷贝处理方法,其特征在于包括如下步骤:步骤1,初始化时开辟共享内存,并在共享内存上建立共享指针池;步骤2,硬件捕获报文后直接将报文放入共享内存;步骤3,接收模块收取每帧报文的起始指针,并将起始指针放入共享指针池,然后再将共享指针池的首地址分发给分析模块和存储模块;步骤4,分析模块和存储模块收到接收模块的信息,通过共享指针池首地址访问共享内存中的共享指针池,然后通过共享指针池中的报文指针访问共享内存中的报文内容;步骤5,分析模块和存储模块在使用完共享指针池和报文内容后,通知接收模块释放。

【技术特征摘要】
1.一种基于共享指针池的报文零拷贝处理方法,其特征在于包括如下步骤:步骤1,初始化时开辟共享内存,并在共享内存上建立共享指针池;步骤2,硬件捕获报文后直接将报文放入共享内存;步骤3,接收模块收取每帧报文的起始指针,并将起始指针放入共享指针池,然后再将共享指针池的首地址分发给分析模块和存储模块;步骤4,分析模块和存储模块收到接收模块的信息,通过共享指针池首地址访问共享内存中的共享指针池,然后通过共享指针池中的报文指针访问共享内存中的报文内容;步骤5,分析模块和存储模块在使用完共享指针池和报文内容后,通知接收模块释放。2.如权利要求1所述的一种基于共享指针池的报文零拷贝处理方法,其特征在于:所述步骤1中,接收模块初始化时在共享内存上预先分配固定数目、固定大小的共享指针池,并对共享指针池进行统一管理。3.如权利要求1所述的一种基于共享指针池的报文零拷贝处理方法,其特征在于:所述步骤4中,存储模块内部处理报文时,将报文内容先经过软件压缩或硬件压缩,然后...

【专利技术属性】
技术研发人员:刘明慧胡绍谦代小翔蒋玉柱曹翔王长清
申请(专利权)人:南京南瑞继保电气有限公司南京南瑞继保工程技术有限公司
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1