[发明专利]一种基于LINUX的无中断线速收包、发包方法及设备有效
申请号: | 201710187894.3 | 申请日: | 2017-03-27 |
公开(公告)号: | CN107066340B | 公开(公告)日: | 2020-05-12 |
发明(设计)人: | 岑立仲;金红;杨满智;刘长永 | 申请(专利权)人: | 恒安嘉新(北京)科技股份公司 |
主分类号: | G06F9/54 | 分类号: | G06F9/54;H04L12/863 |
代理公司: | 北京市万慧达律师事务所 11111 | 代理人: | 王虎 |
地址: | 100191 北京市海淀区*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 linux 断线 速收包 发包 方法 设备 | ||
本发明公开了一种基于LINUX的无中断线速收包、发包方法及设备,属于LINUX系统中收发数据包技术领域。方法包括:应用程序携带至少一个空闲缓冲块的编号触发内核模块与网卡进行数据包交换;内核模块将至少一个空闲缓冲块的编号与网卡中收到的至少一个已存数据包缓冲块的编号交换,并将至少一个空闲缓冲块的物理地址配置到网卡;应用程序根据内核模块返回的编号处理数据。从而网卡在收包时将数据包存储到应用程序能够访问的缓冲块中,发包时通过应用程序填充的数据包缓冲块的物理地址发送数据包,从而收发包过程无需进行数据拷贝,提高了收发数据包性能,且采用无中断循环主动收发包,避免了中断收发包时对CPU资源的调用,进一步提高了收发包性能。
技术领域
本发明涉及LINUX系统收发数据包技术领域,特别涉及一种基于LINUX的无中断线速收发包方法。
背景技术
随着互联网技术的快速发展,网络带宽也越来越大,网络设备面临更大的流量处理压力,收发包性能是网络设备性能提高的关键点之一,所以需要对传统收发包方式进行改进以适应大流量的收发包需求。
LINUX传统方式的收发包都是通过触发中断来完成数据包收发工作的,数据包到来时触发硬中断,硬中断触发软中断,软中断完成收包,但是因为中断的处理都需要调用CPU资源来完成,每个数据包都触发中断调用,当数据量大时,过于频繁的中断调用,造成收包性能低下;另外,由于传统方式的收发包需要在内核模块和应用程序间进行多次数据拷贝,而在大流量带宽下需要拷贝的数据量较大,同样导致传统收发包方式性能低下,效率低。
发明内容
为了避免通过触发中断收发数据包,以及避免触发中断收发数据包时由于数据拷贝等导致的收发包性能不高的问题,提高收发包效率,本发明实施例提供了一种基于LINUX的无中断线速收包、发包方法及设备。所述技术方案如下:
第一方面,提供了一种基于LINUX的无中断线速收包方法,所述方法包括:
S11、应用程序获取至少一个空闲缓冲块对应的编号;
S12、所述应用程序携带所述至少一个空闲缓冲块的编号触发内核模块与网卡进行数据包交换;
S13、所述内核模块将所述至少一个空闲缓冲块的编号与网卡中的至少一个已存数据包缓冲块的编号交换,并将所述至少一个空闲缓冲块的物理地址配置到所述网卡,以使所述网卡通过所述多个空闲缓冲块接收新的数据包;
S14、所述应用程序根据所述内核模块返回的所述至少一个已存数据包缓冲块编号,处理所述已存数据包缓冲块中数据。
结合第一方面,在第一种可能实现的方式中,在所述步骤S11之前,所述方法还包括:
确定共享内存,所述共享内存用作收发数据包缓冲内存;
所述应用程序通过所述内核模块映射共享所述共享内存;
将所述共享内存中部分内存设置为多个缓冲块,并对所述每个缓冲块进行标记编号;其中,所述多个缓冲块未存储数据包时为空闲缓冲块;
使用所述多个空闲缓冲块初始化所述网卡收包队列的所有节点,配置所述多个空闲缓冲块物理地址到所述网卡中用于收包,并记录所述多个空闲缓冲块的编号;以及
关闭所述网卡的中断。
结合第一方面或第一方面的第一种可能实现的方式,在第二种可能实现的方式中,所述应用程序携带所述至少一个空闲缓冲块的编号触发内核模块与网卡进行数据包交换包括:
所述应用程序通过收包函数携带所述至少一个空闲缓冲块的编号,并将所述至少一个空闲缓冲块编号发送至所述内核模块;以及
调用所述内核模块中的收包函数,以触发所述内核模块根据所述至少一个空闲缓冲块编号与所述网卡进行数据包交换。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于恒安嘉新(北京)科技股份公司,未经恒安嘉新(北京)科技股份公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710187894.3/2.html,转载请声明来源钻瓜专利网。