一种网络收发包路径优化方法、装置及存储介质制造方法及图纸

技术编号:32127096 阅读:15 留言:0更新日期:2022-01-29 19:18
本发明专利技术公开了一种网络收发包路径优化方法、装置及存储介质,所述方法包括网络收包时,调用recv接口对预先构建的环形队列中存放的数据包进行读取,并将该数据包的地址返回给用户程序,使用户程序能够根据所述地址对数据包进行操作;网络发包时,先调用alloc接口,从环形队列中返回第一块可用的内存地址,在该内存上构造以太网帧后调用send接口发送数据包;本发明专利技术在收包时使用轮询方式收包,不再有中断处理,不再绕路内核协议栈,减少了数据拷贝;在发包时也不再绕路内核协议栈,减少了数据拷贝,本发明专利技术通过优化网络收发包路径,有效提高网络收发包性能。收发包性能。收发包性能。

【技术实现步骤摘要】
一种网络收发包路径优化方法、装置及存储介质


[0001]本专利技术涉及一种网络收发包路径优化方法、装置及存储介质,属于网络优化


技术介绍

[0002]网络收包时,先缓存在ringbuffer中,再经协议栈处理后缓存在socket中,最后用户通过系统调用获取数据包。网络发包时,用户通过系统调用将数据缓存在socket中,再经协议栈处理后缓存在ringbuffer中,最后通过网卡发包。因为网络收发包时都要经过协议栈处理,且处理期间还涉及到内存拷贝,所以影响数据收发性能。

技术实现思路

[0003]本专利技术的目的在于克服现有技术中的不足,提供一种网络收发包路径优化方法、装置及存储介质,通过网络收发包路径优化技术,可以在网络收发包处理时绕过内核协议栈,减少内存拷贝,提高数据收发性能。
[0004]为达到上述目的,本专利技术是采用下述技术方案实现的:
[0005]第一方面,本专利技术提供了一种网络收发包路径优化方法,应用于用户程序端,包括:
[0006]网络收包时,调用recv接口对预先构建的环形队列中存放的数据包进行读取,并将该数据包的地址返回给用户程序,使用户程序能够根据所述地址对数据包进行操作;
[0007]网络发包时,先调用alloc接口,从环形队列中返回第一块可用的内存地址,在该内存上构造以太网帧后调用send接口发送数据包。
[0008]进一步的,所述环形队列包括第一队列和第二队列,其中,第一队列用于存放从网卡收上来的数据包,第二队列用于存放从用户程序下发的数据包。
[0009]进一步的,所述环形队列创建时,申请一段连续的内核内存区域,划分为第一队列和第二队列,用于存放数据包。
[0010]进一步的,所述环形队列包含首尾指针用于指示缓存数据包的起始和终止位置。
[0011]进一步的,所述首尾指针指示缓存数据包的起始和终止位置的方法,具体包括:
[0012]当初始化时队列为空时,首尾指针指向同一位置;
[0013]当队列满时,尾指针指向的数据包的下一个是首指针指向的数据包;
[0014]当有数据包到达时,尾指针向后偏移一位,并在尾指针新指向的位置缓存数据包;
[0015]当读取数据时,返回首指针指向的数据包,并将首指针向后偏移一位;
[0016]当队列为空时,读取数据时直接返回失败,首尾指针不动;
[0017]当队列已满时,仍然可以正常缓存数据,数据缓存后需同时将首指针向后偏移一位,即新的数据会覆盖第一个数据。
[0018]进一步的,所述alloc接口、send接口和recv接口预先设置在驱动中,用于直接操作环形队列。
[0019]进一步的,所述recv接口采用轮询模式。
[0020]第二方面,本专利技术提供一种网络收发包路径优化装置,包括处理器及存储介质;
[0021]所述存储介质用于存储指令;
[0022]所述处理器用于根据所述指令进行操作以执行根据上述任一项所述方法的步骤。
[0023]第三方面,本专利技术提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一项所述方法的步骤。
[0024]与现有技术相比,本专利技术所达到的有益效果:
[0025]本专利技术在收包时使用轮询方式收包,不再有中断处理,不再绕路内核协议栈,减少了数据拷贝;在发包时也不再绕路内核协议栈,减少了数据拷贝,本专利技术通过优化网络收发包路径,有效提高网络收发包性能。
附图说明
[0026]图1是本专利技术实施例提供的网络收包示意图;
[0027]图2是本专利技术实施例提供的网络发包示意图。
具体实施方式
[0028]下面结合附图对本专利技术作进一步描述。以下实施例仅用于更加清楚地说明本专利技术的技术方案,而不能以此来限制本专利技术的保护范围。
[0029]实施例1
[0030]本实施例介绍一种网络收发包路径优化方法,应用于用户程序端,包括:
[0031]网络收包时,调用recv接口对预先构建的环形队列中存放的数据包进行读取,并将该数据包的地址返回给用户程序,使用户程序能够根据所述地址对数据包进行操作;
[0032]网络发包时,先调用alloc接口,从环形队列中返回第一块可用的内存地址,在该内存上构造以太网帧后调用send接口发送数据包。
[0033]如图1、图2所示,本实施例提供的网络收发包路径优化方法,其应用过程具体涉及如下步骤:
[0034]一、NIC(网卡)驱动初始化阶段,创建两个Ring buffer(环形队列)分别是rx队列和tx队列,并申请一段连续的内核内存区域,划分多个数据块并分为两组,挂在两个队列上,用于存放数据包。rx队列用于存放从NIC收上来的数据包,tx队列用于存放从用户程序下发的要发送的数据包。
[0035]二、Ring buffer包含首尾指针用于指示缓存数据包的起始和终止位置,初始化时队列为空,此时首尾指针指向同一位置,当队列满时尾指针指向的数据块的下一个是首指针指向的数据块。当有数据包到达时,尾指针向后偏移一位,并在新的尾指针指向的数据块中缓存数据包;当读取数据时,返回首指针指向的数据包,并将首指针向后偏移一位;当队列为空时,读取数据时直接返回失败,首尾指针不动;当队列已满时,仍然可以正常缓存数据,数据缓存后需同时将首指针向后偏移一位(即新数据包会覆盖最老的数据包)。
[0036]三、驱动为用户程序提供alloc接口、send接口和recv接口,用于直接操作Ring buffer。recv接口采用轮询模式,用户程序每次调用recv时,驱动尝试读取rx队列中的第一个数据包并将该数据块的地址返回给用户程序,用户程序可直接对该数据块进行操作。数
据块缓存的数据包是以太网帧,由用户程序负责解析以太网帧。用户程序想要发送数据时先调用alloc接口,从tx队列中返回第一块可用的内存,用户程序在该内存上构造以太网帧后调用send接口。
[0037]四、NIC收包后通过dma将数据包从fifo写入rx队列后不再触发中断,而是通过recv接口轮询方式从rx队列读取数据包。用户调用send接口时会触发dma中断,通过dma将数据包从tx队列写入fifo并发送。dma初始化时分配一块内存保存标志,每个标志块对应一个数据块,dma收发包时都会在处理完成后去改变这个标志。驱动定时或再下一次发包时查询相应的标志块,用来判断某个数据包是否已写入fifo,已写入则清空该数据缓存。
[0038]实施例2
[0039]本实施例提供一种网络收发包路径优化装置,包括处理器及存储介质;
[0040]所述存储介质用于存储指令;
[0041]所述处理器用于根据所述指令进行操作以执行根据下述任一项所述方法的步骤:
[0042]网络收包时,调用recv接口对预先构建的环形队列中存放的数据包进行读取,并将该数据包的地址返回给用户程序,使用户程序能够根据所述地址对数本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种网络收发包路径优化方法,其特征在于,应用于用户程序端,包括:网络收包时,调用recv接口对预先构建的环形队列中存放的待接收数据包进行读取,并将该数据包的地址返回给用户程序,使用户程序能够根据所述地址对数据包进行操作;网络发包时,调用alloc接口,返回环形队列中的第一块可用内存地址给用户程序,在该内存上构造以太网帧后调用send接口发送数据包。2.根据权利要求1所述的网络收发包路径优化方法,其特征在于:所述环形队列包括第一队列和第二队列,其中,第一队列用于存放从网卡收上来的数据包,第二队列用于存放从用户程序下发的数据包。3.根据权利要求2所述的网络收发包路径优化方法,其特征在于:所述环形队列创建时,申请一段连续的内核内存区域,划分为第一队列和第二队列,用于存放数据包。4.根据权利要求1所述的网络收发包路径优化方法,其特征在于:所述环形队列包含首尾指针用于指示缓存数据包的起始和终止位置。5.根据权利要求1所述的网络收发包路径优化方法,其特征在于:所述首尾指针指示缓存数据包的起始和终止位置的方法,具体包括:当初始...

【专利技术属性】
技术研发人员:徐萌马力王丹计士禹刘锦利马骁李勃高明慧张志军张广文修增哲刘壮佟文强赵梓辰杨泽宇刘新龙姜岩张嵩王会达
申请(专利权)人:南瑞集团有限公司
类型:发明
国别省市:

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

1