CN107066340A - 一种基于linux的无中断线速收包、发包方法及设备 - Google Patents

一种基于linux的无中断线速收包、发包方法及设备 Download PDF

Info

Publication number
CN107066340A
CN107066340A CN201710187894.3A CN201710187894A CN107066340A CN 107066340 A CN107066340 A CN 107066340A CN 201710187894 A CN201710187894 A CN 201710187894A CN 107066340 A CN107066340 A CN 107066340A
Authority
CN
China
Prior art keywords
network interface
interface card
numbering
packet
block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201710187894.3A
Other languages
English (en)
Other versions
CN107066340B (zh
Inventor
岑立仲
金红
杨满智
刘长永
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Heng Jia Jia (beijing) Technology Co Ltd
Original Assignee
Heng Jia Jia (beijing) Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Heng Jia Jia (beijing) Technology Co Ltd filed Critical Heng Jia Jia (beijing) Technology Co Ltd
Priority to CN201710187894.3A priority Critical patent/CN107066340B/zh
Publication of CN107066340A publication Critical patent/CN107066340A/zh
Application granted granted Critical
Publication of CN107066340B publication Critical patent/CN107066340B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明公开了一种基于LINUX的无中断线速收包、发包方法及设备,属于LINUX系统中收发数据包技术领域。方法包括:应用程序携带至少一个空闲缓冲块的编号触发内核模块与网卡进行数据包交换;内核模块将至少一个空闲缓冲块的编号与网卡中收到的至少一个已存数据包缓冲块的编号交换,并将至少一个空闲缓冲块的物理地址配置到网卡;应用程序根据内核模块返回的编号处理数据。从而网卡在收包时将数据包存储到应用程序能够访问的缓冲块中,发包时通过应用程序填充的数据包缓冲块的物理地址发送数据包,从而收发包过程无需进行数据拷贝,提高了收发数据包性能,且采用无中断循环主动收发包,避免了中断收发包时对CPU资源的调用,进一步提高了收发包性能。

Description

一种基于LINUX的无中断线速收包、发包方法及设备
技术领域
本发明涉及LINUX系统收发数据包技术领域,特别涉及一种基于LINUX的无中断线速收发包方法。
背景技术
随着互联网技术的快速发展,网络带宽也越来越大,网络设备面临更大的流量处理压力,收发包性能是网络设备性能提高的关键点之一,所以需要对传统收发包方式进行改进以适应大流量的收发包需求。
LINUX传统方式的收发包都是通过触发中断来完成数据包收发工作的,数据包到来时触发硬中断,硬中断触发软中断,软中断完成收包,但是因为中断的处理都需要调用CPU资源来完成,每个数据包都触发中断调用,当数据量大时,过于频繁的中断调用,造成收包性能低下;另外,由于传统方式的收发包需要在内核模块和应用程序间进行多次数据拷贝,而在大流量带宽下需要拷贝的数据量较大,同样导致传统收发包方式性能低下,效率低。
发明内容
为了避免通过触发中断收发数据包,以及避免触发中断收发数据包时由于数据拷贝等导致的收发包性能不高的问题,提高收发包效率,本发明实施例提供了一种基于LINUX的无中断线速收包、发包方法及设备。所述技术方案如下:
第一方面,提供了一种基于LINUX的无中断线速收包方法,所述方法包括:
S11、应用程序获取至少一个空闲缓冲块对应的编号;
S12、所述应用程序携带所述至少一个空闲缓冲块的编号触发内核模块与网卡进行数据包交换;
S13、所述内核模块将所述至少一个空闲缓冲块的编号与网卡中的至少一个已存数据包缓冲块的编号交换,并将所述至少一个空闲缓冲块的物理地址配置到所述网卡,以使所述网卡通过所述多个空闲缓冲块接收新的数据包;
S14、所述应用程序根据所述内核模块返回的所述至少一个已存数据包缓冲块编号,处理所述已存数据包缓冲块中数据。
结合第一方面,在第一种可能实现的方式中,在所述步骤S11之前,所述方法还包括:
确定共享内存,所述共享内存用作收发数据包缓冲内存;
所述应用程序通过所述内核模块映射共享所述共享内存;
将所述共享内存中部分内存设置为多个缓冲块,并对所述每个缓冲块进行标记编号;其中,所述多个缓冲块未存储数据包时为空闲缓冲块;
使用所述多个空闲缓冲块初始化所述网卡收包队列的所有节点,配置所述多个空闲缓冲块物理地址到所述网卡中用于收包,并记录所述多个空闲缓冲块的编号;以及
关闭所述网卡的中断。
结合第一方面或第一方面的第一种可能实现的方式,在第二种可能实现的方式中,所述应用程序携带所述至少一个空闲缓冲块的编号触发内核模块与网卡进行数据包交换包括:
所述应用程序通过收包函数携带所述至少一个空闲缓冲块的编号,并将所述至少一个空闲缓冲块编号发送至所述内核模块;以及
调用所述内核模块中的收包函数,以触发所述内核模块根据所述至少一个空闲缓冲块编号与所述网卡进行数据包交换。
结合第一方面或第一方面的第二种可能实现的方式,在第三种可能实现的方式中,所述内核模块将所述至少一个空闲缓冲块编号与网卡中的至少一个已存数据包缓冲块的编号交换,并将所述至少一个空闲缓冲块的物理地址配置到所述网卡包括:
所述内核模块中的收包函数判断所述网卡收包队列中是否有已存数据包缓冲块;
若有,则将所述至少一个空闲缓冲块的编号与所述网卡收包队列中的至少一个已存数据包缓冲块的编号进行交换,并将所述至少一个空闲缓冲块的物理地址配置到所述网卡的收包队列中,以用作网卡后续收包;
所述内核模块将所述至少一个已存数据包缓冲块的编号及数量返回至所述应用程序。
结合第一方面,在第四种可能实现的方式中,在执行步骤S14之后,继续执行步骤S11。
第二方面,提供了一种基于LINUX的无中断线速发包方法,所述方法包括:
S21、应用程序获取至少一个空闲缓冲块及对应的编号,并将待发数据存储于所述至少一个空闲缓冲中,形成至少一个待发缓冲块;
S22、所述应用程序携带所述至少一个待发缓冲块的编号触发内核模块与网卡进行数据包交换;
S23、所述内核模块将所述至少一个待发缓冲块的编号与网卡中的至少一个已发数据缓冲块编号交换,并将所述至少一个待发缓冲块的物理地址配置至网卡中,网卡发送所述至少一个待发缓冲块中的数据包;
S24、所述应用程序根据所述内核模块返回的至少一个已发数据缓冲块编号,归还所述至少一个已发数据缓冲块为空闲缓冲块于共享内存中。
结合第二方面,在第一种可能实现的方式中,在所述步骤S21之前,所述方法还包括:
确定共享内存,所述共享内存用作收发数据包缓冲内存;
所述应用程序通过所述内核模块映射共享所述共享内存;
将所述共享内存中部分内存设置为多个缓冲块,并对所述每个缓冲块进行标记编号;其中,所述多个缓冲块未存储数据包时为空闲缓冲块;
使用所述多个空闲缓冲块初始化所述网卡收包队列的所有节点,配置所述多个空闲缓冲块物理地址到所述网卡中用于收包,并记录所述多个空闲缓冲块的编号;以及
关闭所述网卡的中断。
结合第二方面或第二方面的第一种可能实现的方式,在第二种可能实现的方式中,在执行步骤S24之后,继续执行步骤S21。
第三方面,提供了一种基于LINUX的无中断线速收包设备,所述设备包括:
处理模块,用于获取至少一个空闲缓冲块对应的编号;
所述处理模块还用于携带所述至少一个空闲缓冲块的编号触发内核模块与网卡进行数据包交换;
内核模块,用于将所述至少一个空闲缓冲块的编号与网卡中的至少一个已存数据包缓冲块的编号交换,并将所述至少一个空闲缓冲块的物理地址配置到所述网卡,以使所述网卡通过所述多个空闲缓冲块接收新的数据包;
所述处理模块还用于根据所述内核模块返回的所述至少一个已存数据包缓冲块编号,处理所述数据包中数据。
结合第三方面,在第一种可能实现的方式中,
所述设备还包括共享内存确定模块,用于确定共享内存,所述共享内存用作收发数据包缓冲内存;
所述处理模块还用于通过所述内核模块映射共享所述共享内存;
缓冲块设置模块,用于将所述共享内存中部分内存设置为多个缓冲块,并对所述每个缓冲块进行标记编号;其中,所述多个缓冲块未存储数据包时为空闲缓冲块;
网卡初始化模块,用于使用所述多个空闲缓冲块初始化所述网卡收包队列的所有节点,配置所述多个空闲缓冲块物理地址到所述网卡中用于收包,并记录所述多个空闲缓冲块的编号;
网卡中断关闭模块,用于关闭所述网卡的中断。
结合第三方面或第三方面的第一种可能实现的方式,在第二种可能实现的方式中,
所述处理模块具体用于通过收包函数将携带的所述至少一个空闲缓冲块的编号,并将所述至少一个空闲缓冲块编号发送至所述内核模块;
所述处理模块还用于调用所述内核模块中的收包函数,以触发所述内核模块根据所述至少一个空闲缓冲块编号与所述网卡进行数据包交换。
结合第三方面或第三方面的第二种可能实现的方式,在第三种可能实现的方式中,
所述内核模块还包括判断模块,用于数判断所述网卡收包队列中是否有已存数据包缓冲块;
若判定有,则所述内核模块将所述至少一个空闲缓冲块的编号与所述网卡收包队列中的至少一个已存数据包缓冲块的编号进行交换,并将所述至少一个空闲缓冲块的物理地址配置到所述网卡的收包队列中,以用作网卡后续收包;
所述内核模块还具体用于将所述至少一个已存数据包缓冲块的编号及数量返回至所述处理模块。
结合第三方面,在第四种可能实现的方式中,在所述处理模块根据所述内核模块返回的所述至少一个已存数据包缓冲块编号,处理所述已存数据包缓冲块中数据之后,所述处理模块、所述内核模块、所述网卡还包括继续执行对应的操作。
第四方面,提供了一种基于LINUX的无中断线速发包设备,其特征在于,所述设备包括:
处理模块,用于获取至少一个空闲缓冲块及对应的编号,并将待发数据存储于所述至少一个空闲缓冲中,形成至少一个待发缓冲块;
所述处理模块还用于携带所述至少一个待发缓冲块编号触发内核模块与网卡进行数据包交换;
内核模块,用于将所述至少一个待发缓冲块的编号与网卡中的至少一个已发数据缓冲块编号交换,并将所述至少一个待发缓冲块的物理地址配置至网卡中,网卡发送所述至少一个待发缓冲块的数据包;
所述处理模块还用于根据所述内核模块返回的至少一个已发数据缓冲块编号,归还所述至少一个已发数据缓冲块为空闲缓冲块于共享内存中。
结合第四方面,在第一种可能实现的方式中,
所述设备还包括共享内存确定模块,用于确定共享内存,所述共享内存用作收发数据包缓冲内存;
所述处理模块还用于通过所述内核模块映射共享所述共享内存;
缓冲块设置模块,用于将所述共享内存中部分内存设置为多个缓冲块,并对所述每个缓冲块进行标记编号;其中,所述多个缓冲块未存储数据包时为空闲缓冲块;
网卡初始化模块,用于使用所述多个空闲缓冲块初始化所述网卡收包队列的所有节点,配置所述多个空闲缓冲块物理地址到所述网卡中用于收包,并记录所述多个空闲缓冲块的编号;
网卡终端关闭模块,用于关闭所述网卡的中断。
结合第四方面,在第二种可能实现的方式中,所述处理模块根据所述内核模块返回的至少一个已发数据缓冲块编号,归还所述至少一个已发数据缓冲块为空闲缓冲块于共享内存中之后,所述处理模块、所述内核模块、所述网卡还包括继续执行对应的操作。
本发明实施例提供的技术方案带来的有益效果是:本发明实施例提供的基于LINUX的无中断线速收包方法,通过内核模块将应用程序携带的至少一个空闲缓冲块的编号与网卡中收到的至少一个已存数据包缓冲块的编号交换,并将至少一个空闲缓冲块的物理地址配置到网卡,从而网卡获取了空闲缓冲块的物理地址,可以把新收到的数据包存储到获取空闲缓冲块中,而应用程序通过内核模块获取到了网卡中的存有数据包缓冲块的编号,通过该编号直接访问共享内存以进行收到数据包的处理;
本发明实施例提供的基于LINUX的无中断线速发包方法,通过内核模块将应用程序携带的至少一个待发缓冲块的编号与网卡中的至少一个已发数据缓冲块编号交换,并将至少一个待发缓冲块的物理地址配置至网卡中,从而获取了待发缓冲块即待发数据包的物理地址,从而通过该物理地址进行数据包发送,而应用程序通过内核重新获取了网卡中已发数据的缓冲块即已发数据的空闲缓冲块,该缓冲块归还至共享内存中能够继续用作后续的收发包;
从而收包时,网卡直接存储数据包到应用程序可访问的缓冲块中,发包时直接使用应用程序填充了数据包的缓冲块的物理地址进行发送,所以该收发包过程均无需进行数据拷贝,达到了线速的收发数据包,提高了收发数据包的性能;同时,由于传统的中断收发数据包时需要调用CPU资源来完成,每个数据包都触发调用,当数据量大时,频繁中断调用造成传统的收发数据包性能低下,而在本发明实施例中,关闭中断,采用循环主动收发包,避免了传统的中断对CPU资源的频繁调用,而是直接将资源用于收发数据包上,从而提高了收发数据包性能;且与传统的中断收发包时在内核模块和应用程序间进行多次数据拷贝相比,而本发明实施例所提供的方式无需进行数据拷贝,更加适应大流量下的数据所需的处理速度,满足了用户对设备收发数据的速度需求。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种基于LINUX的无中断线速收包方法流程图;
图2是本发明实施例提供的一种基于LINUX的无中断线速收包方法流程图;
图3是本发明实施例提供的一种基于LINUX的无中断线速收包的示例框图;
图4是本发明实施例提供的一种基于LINUX的无中断线速发包方法流程图;
图5是本发明实施例提供的一种基于LINUX的无中断线速发包的示例框图;
图6是本发明实施例提供的一种电子设备结构示意图;
图7是本发明实施例提供的一种电子设备结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
本发明实施例提供了一种基于LINUX的无中断线速收包方法,参照图1所示,该方法流程包括:
S11、应用程序获取至少一个空闲缓冲块对应的编号。
S12、应用程序携带至少一个空闲缓冲块的编号触发内核模块与网卡进行数据包交换。
具体的,该步骤包括:
应用程序通过收包函数携带至少一个空闲缓冲块编号,并将至少一个空闲缓冲块编号发送至内核模块;
调用内核模块中的收包函数,以触发内核模块根据至少一个空闲缓冲块编号与网卡进行数据包交换。
S13、内核模块将至少一个空闲缓冲块的编号与网卡中的至少一个已存数据包缓冲块的编号交换,并将至少一个空闲缓冲块的物理地址配置到网卡,以使网卡通过多个空闲缓冲块接收新的数据包。
具体的,该步骤包括:
内核模块中的收包函数判断网卡收包队列中是否有已存数据包缓冲块,若有,则将至少一个空闲缓冲块的编号与网卡收包队列中的至少一个已存数据包缓冲块的编号进行交换,并将至少一个空闲缓冲块的物理地址配置到网卡的收包队列中,以用作网卡后续收包;以及
内核模块将至少一个已存数据包缓冲块的编号及数量返回至应用程序;
若无,则返回数据包数量为0。返回数据包数量为0之后还包括继续执行步骤S11及之后的步骤。
需要说明的是,当网卡没有收到数据包时,内核模块与网卡可以不进行空闲缓冲块编号与已存数据包缓冲块编号的交换,以及内核模块也不进行将空闲缓冲块物理地址配置到网卡中的步骤。
S14、应用程序根据内核模块返回的至少一个已存数据包缓冲块编号,处理已存数据包缓冲块中数据。
可选的,在步骤S11之前,方法还包括:
S31、确定共享内存,共享内存用作收发数据包缓冲内存。
S32、应用程序通过内核模块映射共享该共享内存。
S33、将共享内存中部分内存设置为多个缓冲块,并对每个缓冲块进行标记编号;
其中,该多个缓冲块未存储数据包时为空闲缓冲块。
S34、使用多个空闲缓冲块初始化网卡收包队列的所有节点,配置多个空闲缓冲块物理地址到网卡中用于收包,并记录多个空闲缓冲块的编号。
S35、关闭网卡的中断。
需要说明的是,并不是每次执行步骤S11之前均需执行S31-S35,当已经确定了共享内存,应用程序映射共享了共享内存,且对共享内存设置为了多个缓冲块,对每个缓冲块进行了编号,且使用多个空闲缓冲块初始化了网卡收包队列的所有节点,关闭了网卡中断,则直接执行步骤S11-S14时,使用之前设置好的,无需每次执行。
可选的,方法还包括:
在执行步骤S14之后,继续执行步骤S11。
步骤S11-S14是实时循环进行的。
本发明实施例提供了一种基于LINUX的无中断线速收包方法,通过内核模块将应用程序携带的至少一个空闲缓冲块的编号与网卡中收到的至少一个已存数据包缓冲块的编号交换,并将至少一个空闲缓冲块的物理地址配置到网卡,从而网卡获取了空闲缓冲块的物理地址,可以把新收到的数据包存储到获取空闲缓冲块中,而应用程序通过内核模块获取到了网卡中的存有数据包缓冲块的编号,通过该编号直接访问共享内存以进行收到数据包的处理;从而收包时,网卡直接存储数据包到应用程序可访问的缓冲块中,所以该收包过程无需进行数据拷贝,达到了线速的收取数据包,提高了收发数据包的性能;同时,由于传统的中断收发数据包时需要调用CPU资源来完成,每个数据包都触发调用,当数据量大时,频繁中断调用造成传统的收发数据包性能低下,而在本发明实施例中,关闭中断,采用循环主动收包,避免了传统的中断对CPU资源的频繁调用,而是直接将资源用于收取数据包上,从而提高了收发数据包性能;且与传统的中断收取数据包时在内核模块和应用程序间进行多次数据拷贝相比,而本发明无需进行数据拷贝,减少了对CPU的占用,更加适应大流量下的数据所需的处理速度,满足了用户对设备收发数据的速度需求。
实施例二
本发明实施例提供了一种基于LINUX的无中断线速收包方法,参照图2所示,该方法流程包括:
S31、确定共享内存,共享内存用作收发数据包缓冲内存。
具体的,内核模块申请一定大小的内存用作共享内存;还可以是用户通过内核模块预设一定大小的内存,除此以外,还可以通过其他方式确定共享内存,本发明实施例对具体的方式不加以限定。
其中,该共享内存的大小至少大于2M,还可以根据设备内存空间总体大小以及与网络数据交互的大小,设置该共享内存的大小;也可以根据其他设置共享内存大小,如设备性能、宽带大小等。
S32、应用程序通过内核模块映射共享该共享内存。
该步骤可以通过mmap函数系统实现,具体的:
在Linux操作系统中,应用程序执行mmap函数调用,此时,内核模块相应的mmap函数就会被触发;在执行该S32步骤时,当应用程序执行mmap函数调用时,内核模块的mmap函数把已申请的该共享内存通过remap_pfn_range函数进行共享,应用程序的mmap函数将该共享内存的地址返回给应用程序,应用程序通过该返回的地址访问共享内存;
除了上述方式之外,还可以通过其他方式执行步骤S32,本发明对该步骤的具体执行方式不加以限定。
S33、将共享内存中部分内存设置为多个缓冲块,并对每个缓冲块进行标记编号。
其中,该多个缓冲块未存储数据包时为空闲缓冲块。
具体的,将共享内存中的部分内存分割为多个缓冲块,每个缓冲块的大小可以2kb,也可以为4kb;
分割的方式包括:
将该部分内存均分割为2kb大小的多个缓冲块;或
将该部分内存均分割为4kb大小的多个缓冲块;或者
将该部分内存中部分分割为2kb大小,部分分割为4kb,对于分割为2kb大小的缓冲块的数量和分割为4kb大小的缓冲块的数据根据实际应用进行设置,对此不加以限定。
具体的,根据一次收包最大的收包数量,将共享内存中的部分内存分割为多个缓冲块的数量可以为512个;也可以根据共享内存的大小确定分割缓冲块数量的多少,该分割的缓冲块数量可以最少为512个,也可以为了保证收包效率,分割更多数量的缓冲块数量。
对每个缓冲块进行标记编号具体包括:
通过数字,对每个缓冲块按照顺序进行编号,如1、2、3……512……;或者
通过字母和数字,对每个缓冲块按照顺序进行编号,如A1、A2、A3…B1、B2、B3…C1、C2、C3…。
除了上述方式之外,还可以采用其他标记对每个缓冲块进行标记编号,本发明实施例对具体的标记编号方式不加以限定。
可选的,方法还包括:
在共享内存中预留出一部分内存,该预留内存用作放置已收数据包缓冲块以及空闲缓冲块。
S34、使用多个空闲缓冲块初始化网卡收包队列的所有节点,配置多个空闲缓冲块物理地址到网卡中用于收包,并记录多个空闲缓冲块的编号。
S35、关闭网卡的中断。
通过确定共享内存,因为共享内存用作收发数据包缓冲内存,网卡与共享内存为直接存储器访问,从而网卡可以通过该共享内存进行数据包的接收和发送,而应用程序通过内核模块共享该共享内从,从而使得应用程序可以通过访问该共享内存,通过内核模块实现与网卡数据的交互;以及将共享内存分割为多个缓冲块,并对每个缓冲块进行标记编号,方便了将缓冲块与编号相对应,避免在数据包接收发送过程中会有混乱的问题,提高了处理效率。
需要说明的是,并不是每次执行步骤S11之前均需执行S31-S35,当已经确定了共享内存,应用程序映射共享了共享内存,且对共享内存设置为了多个缓冲块,以及对每个缓冲块进行了编号,则直接执行步骤S11-S14时,使用之前设置好的,无需每次执行。
S11、应用程序获取至少一个空闲缓冲块对应的编号。
具体的,应用程序通过访问共享内存,以获取至少一个空闲缓冲块对应的编号。
其中,经过多次收包以及对收到数据包的处理,空闲缓冲块的编号已经不再连续,而应用程序通过访问共享内存,获取其中空闲的缓冲块对应的编号,应用程序可以获取一个空闲缓冲块的编号,也可以获取多个空闲缓冲块的编号。
S12、应用程序携带至少一个空闲缓冲块的编号触发内核模块与网卡进行数据包交换。
具体的,该步骤包括:
S121、应用程序通过收包函数携带至少一个空闲缓冲块的编号,并将至少一个空闲缓冲块编号发送至内核模块。
该收包函数可以是ioctl函数(类型为收包),具体的,该过程可以包括;
该应用程序通过收包函数携带该至少一个空闲缓冲块编号,将该至少一个空闲缓冲块编号放置到预留内存。
S122、调用内核模块中的收包函数,以触发内核模块根据至少一个空闲缓冲块编号与网卡进行数据包交换。
具体的,当应用程序通过收包函数携带至少一个空闲缓冲块编号至预留内存后,内核模块获取该至少一个空闲缓冲块编号;以及
应用程序通过收包函数ioctl(类型为收包)调用内核模块中的收包函数以进行从网卡交换接收的数据包,其中,网卡收到数据包后会将数据包存放到收包队列中存储的空闲缓冲块中。
S13、内核模块将至少一个空闲缓冲块的编号与网卡中的至少一个已存数据包缓冲块的编号交换,并将至少一个空闲缓冲块的物理地址配置到网卡,以使网卡通过多个空闲缓冲块接收新的数据包。
具体的,该步骤包括:
S131、内核模块中的收包函数判断网卡收包队列中是否有已存数据包缓冲块,若有,则执行步骤S132-S133,S133之后执行步骤S14;若无,则返回数据包数量为0。
具体的,该判断过程可以包括:从收包队列中上次结束节点位置开始判断节点的状态,如果状态为DONE(完成),表示该节点已经收到数据包;依次判断收包队列中的节点的DONE状态,则可获取队列中收到数据包的节点,即得到收到包的缓冲块;其中,每个节点存储数据包的内存为应用程序提供的缓冲块内存。
需要说明的是,返回数据包数量为0,还包括继续执行步骤S11及之后的步骤。
S132、将至少一个空闲缓冲块的编号与网卡收包队列中的至少一个已存数据包缓冲块的编号进行交换,并将至少一个空闲缓冲块的物理地址配置到网卡的收包队列中,以用作网卡后续收包。
其中,将至少一个空闲缓冲块的物理地址配置到网卡的收包队列中,以使网卡将该至少个空闲缓冲块对应的物理地址存储到收包队列中,用作后续收包;当新的数据包到达网卡时,网卡自动将数据包存储到收包队列中存储的空闲缓冲块的物理地址中。
S133、内核模块将至少一个已存数据包缓冲块的编号及数量返回至应用程序。
当内核模块与网卡交换后,内核模块获取了已存数据包缓冲块的编号,而网卡收到数据后,将数据包存储到空闲缓冲块中,该存储了数据包的缓冲块位于共享内存中,内核模块将获取的至少一个已存数据包缓冲块编号及数量返回至应用程序,以使应用程序根据返回的编号及数量访问共享内存,以进行处理数据包。
需要说明的是,当网卡没有收到数据包时,内核模块与网卡可以不进行空闲缓冲块编号与已存数据包缓冲块编号的交换,以及内核模块也不会将空闲缓冲块物理地址配置到网卡中。
S14、应用程序根据内核模块返回的至少一个已存数据包缓冲块编号,处理已存数据包缓冲块中数据。
具体的,应用程序根据内核模块返回的至少一个已存数据包缓冲块编号及数量,访问共享内存,对该至少一个已存数据包缓冲块编号对应的缓冲块中数据包进行处理。
可选的,方法还包括:
在执行步骤S14之后,继续执行步骤S11。
步骤S11-S14是实时循环进行的。
为了进一步说明本发明实施例提供的基于LINUX的无中断线速收包方法,下面将结合框图进行说明,参照图3所示,为收包过程的示例框图,比如如图中所示,共享内存有0、1、2…X…Y…N个缓冲块,其中编号X的缓冲块为空闲缓冲块,网卡收到数据包,将数据包存储到编号Y的缓冲块中,其中,需要说明的是,网卡与共享内存是直接存储器访问(DMA),图中的共享内存的框外的数字表示执行步骤的先后顺序,则该收包过程可以为:应用程序获取空闲缓冲块X的编号X,应用程序携带该空闲缓冲块编号X触发内核模块收取网卡中数据包,则内核模块将该空闲缓冲块X与网卡收到的存有数据包缓冲块Y的编号交换,并将空闲缓冲块X的物理地址配置到网卡,网卡获取了该物理地址后,将该空闲缓冲块X的物理地址存储到收包队列中,用作下次收取数据包所用;内核模块向应用程序返回缓冲块Y编号,应用程序得知该编号Y的缓冲块存有数据,则应用程序通过访问共享内存处理该缓冲块Y中的数据包;值得注意的是,此处只是示例性的,为了进一步方便本领域技术人理解本方案,该示例中的编号、方框以及执行顺序等的只是为了方便理解,不能作为本技术方案的限定范围或作为其他文字证据,且本领域技术人员在此基础上做出的雷同改进均在本发明保护范围内。
本发明实施例提供了一种基于LINUX的无中断线速收包方法,通过内核模块将应用程序携带的至少一个空闲缓冲块的编号与网卡中收到的至少一个已存数据包缓冲块的编号交换,并将至少一个空闲缓冲块的物理地址配置到网卡,从而网卡获取了空闲缓冲块的物理地址,可以把新收到的数据包存储到获取空闲缓冲块中,而应用程序通过内核模块获取到了网卡中的存有数据包缓冲块的编号,通过该编号直接访问共享内存以进行收到数据包的处理;从而收包时,网卡直接存储数据包到应用程序可访问的缓冲块中,所以该收包过程无需进行数据拷贝,达到了线速的收取数据包,提高了收发数据包的性能;同时,由于传统的中断收发数据包时需要调用CPU资源来完成,每个数据包都触发调用,当数据量大时,频繁中断调用造成传统的收发数据包性能低下,而在本发明实施例中,关闭中断,采用循环主动收包,避免了传统的中断对CPU资源的频繁调用,而是直接将资源用于收取数据包上,从而提高了收发数据包性能;且与传统的中断收取数据包时在内核模块和应用程序间进行多次数据拷贝相比,而本发明无需进行数据拷贝,减少了对CPU的占用,更加适应大流量下的数据所需的处理速度,满足了用户对设备收发数据的速度需求。
实施例三
本发明实施例提供了一种基于LINUX的无中断线速发包方法,参照图4所示,该方法流程包括:
S41、确定共享内存,共享内存用作收发数据包缓冲内存。
S42、应用程序通过内核模块映射共享该共享内存。
S43、将共享内存中部分内存设置为多个缓冲块,并对每个缓冲块进行标记编号。
其中,该多个缓冲块未存储数据包时为空闲缓冲块。
S44、使用多个空闲缓冲块初始化网卡收包队列的所有节点,配置多个空闲缓冲块物理地址到网卡中用于收包,并记录多个空闲缓冲块的编号。
S45、关闭网卡的中断。
其中,S41-S42步骤的具体执行方式与实施例二中的步骤S31-S35类似,此处不再加以赘述。
需要说明的是,并不是每次执行步骤S21之前均需执行S41-S45,当已经确定了共享内存,应用程序映射共享了共享内存,且对共享内存设置为了多个缓冲块,以及对每个缓冲块进行了编号,且使用多个空闲缓冲块初始化网卡收包队列的所有节点,关闭了网卡的中断,则直接执行步骤S21-S24时,使用之前设置好的,无需每次执行。
通过确定共享内存,因为共享内存用作收发数据包缓冲内存,网卡与共享内存为直接存储器访问,从而网卡可以通过该共享内存进行数据包的接收和发送,而应用程序通过内核模块共享该共享内存,从而使得应用程序可以通过访问该共享内存,通过内核模块实现与网卡数据的交互;以及将共享内存分割为多个缓冲块,并对每个缓冲块进行标记编号,方便了将缓冲块与编号相对应,避免在数据包接收发送过程中会有混乱的问题,提高了处理效率。
S21、应用程序获取至少一个空闲缓冲块及对应的编号,并将待发数据存储于至少一个空闲缓冲中,形成至少一个待发缓冲块。
具体的,应用程序通过访问共享内存,以获取至少一个空闲缓冲块及对应的编号。
其中,经过多次收包以及对收到数据包的处理,空闲缓冲块的编号已经不再连续,而应用程序通过访问共享内存,获取其中空闲的缓冲块对应的编号,应用程序根据待发数据的大小获取一个或多个空闲缓冲块及对应的编号,并将数据包存储于该一个或多个空闲缓冲块中。
S22、应用程序携带至少一个待发缓冲块的编号触发内核模块与网卡进行数据包交换。
该过程可以包括:
a、应用程序通过发包函数携带至少一个待发缓冲块编号,并将至少一个待发缓冲块编号发送至内核模块。
该发包函数可以ioctl函数(类型为发包),该应用程序通过发包函数携带该至少一个待发缓冲块编号,将该至少一个空闲缓冲块编号放置到预留内存中。
b、调用内核模块中的发包函数,以触发内核模块根据至少一个待发缓冲块编号与网卡进行数据包交换。
具体的,当应用程序通过收包函数携带至少一个待发缓冲块编号至预留内存后,内核模块获取该至少一个待发缓冲块编号;以及
应用程序通过发包函数ioctl(类型为发包)调用内核模块中的发包函数以进行从网卡交换已发数据包缓冲块。
S23、内核模块将至少一个待发缓冲块的编号与网卡中的至少一个已发数据缓冲块编号交换,并将至少一个待发缓冲块的物理地址配置至网卡中,网卡发送至少一个待发缓冲块中的数据包。
具体的,该步骤包括:
内核模块将至少一个待发缓冲块编号与网卡发包队列中的至少一个已发数据缓冲块编号进行交换,并将至少一个待发缓冲块的物理地址配置到网卡的发包队列中,网卡自动发送该至少一个待发缓冲块中的数据包;以及
内核模块将至少一个已发数据缓冲块的编号及数量返回至应用程序。
可选的,内核模块将至少一个待发缓冲块编号与网卡发包队列中的至少一个已发数据缓冲块编号进行交换的过程可以包括:
内核模块判断网卡发包队列中是否有已发数据缓冲块;
具体的,通过判断发包队列中节点状态,如果发包完成则为DONE(完成)状态。
需要说明的是,该至少一个待发缓冲块的回收是在下次发送数据包时进行的。
具体的,发包时,内核模块先回收网卡发包队列中已完成数据发送的缓冲块,位置从上次回收处到完成发包处;然后填充待发缓冲块,位置从上次填充处开始;其中,发包队列中有多少节点可用于发送数据即填充多少待发送缓冲块,剩余部分下次进行发送。
S24、应用程序根据内核模块返回的至少一个已发数据缓冲块编号,归还至少一个已发数据缓冲块为空闲缓冲块于共享内存中。
可选的,方法还包括:
在执行步骤S24之后,继续执行步骤S21。
步骤S21-S24是实时循环进行的。
为了进一步说明本发明实施例提供的基于LINUX的无中断线速发包方法,下面将结合框图进行说明,参照图5所示,为收包过程的示例框图,比如如图中所示,共享内存有0、1、2…X…Y…N个缓冲块,其中编号X的缓冲块为空闲缓冲块,应用程序获取之后将待发数据存储于空闲缓冲块X中,存储数据包的空闲缓冲块在图中为数据块X,网卡中已发数据的缓冲块为缓冲块Y,图中的共享内存的框外的数字表示执行步骤的先后顺序,则该发包过程可以为:应用程序获取空闲缓冲块X,将将待发数据存储于空闲缓冲X中,形成待发缓冲块X,应用程序携带该待发缓冲块X触发内核模块通过网卡发送数据包,则内核模块将该待发缓冲块X与网卡已发数据的缓冲块Y编号交换,并将待发缓冲块X的物理地址配置到网卡,网卡获取了该物理地址后,读取待发缓冲块X中的数据包进行发送;内核模块向应用程序返回已发数据的缓冲块Y编号,该已发数据的缓冲块Y为空闲缓冲块,编号为Y,应用程序通过内核模块得知该编号,归还该空闲缓冲块至共享内存中;值得注意的是,此处只是示例性的,为了进一步方便本领域技术人理解本方案,该示例中的编号、方框以及执行顺序等的只是为了方便理解,不能作为本技术方案的限定范围或作为其他文字证据,且本领域技术人员在此基础上做出的雷同改进均在本发明保护范围内。
本发明实施例提供了一种基于LINUX的无中断线速发包方法,通过内核模块将应用程序携带的至少一个待发缓冲块的编号与网卡中的至少一个已发数据缓冲块编号交换,并将至少一个待发缓冲块的物理地址配置至网卡中,从而获取了待发缓冲块即待发数据包的物理地址,从而通过该物理地址进行数据发送,而应用程序通过内核重新获取了网卡中已发数据的缓冲块即已发数据的空闲缓冲块,该缓冲块归还至共享内存中能够继续用作后续的收发包;从而发包时直接使用应用程序填充了数据包的缓冲块的物理地址进行发送,所以该发包过程无需进行数据拷贝,达到了线速的收发数据包,提高了收发数据包的性能;同时,由于传统的中断发数据包时需要调用CPU资源来完成,每个数据包都触发调用,当数据量大时,频繁中断调用造成传统的收发数据包性能低下,而在本发明实施例中,关闭中断,采用循环主动发包,避免了传统的中断对CPU资源的频繁调用,而是直接将资源用于发送数据包上,从而提高了收发数据包性能;且与传统的中断发送数据包时在内核模块和应用程序间进行多次数据拷贝相比,本发明实施例所提供的方式无需进行数据拷贝,更加适应大流量下的数据所需的处理速度,满足了用户对设备收发数据的速度需求。
实施例四
本发明实施例提供了一种基于LINUX的无中断线速收包设备,参照图6所示,设备6包括:
处理模块61,用于获取至少一个空闲缓冲块对应的编号;
处理模块61还用于携带至少一个空闲缓冲块的编号触发内核模块与网卡进行数据交换;
内核模块62,用于将至少一个空闲缓冲块的编号与网卡63中的至少一个已存数据包缓冲块的编号交换,并将至少一个空闲缓冲块的物理地址配置到网卡63,以使网卡63通过多个空闲缓冲块接收新的数据包;
处理模块61还用于根据内核模块返回的至少一个已存数据包缓冲块编号,处理已存数据包缓冲块中数据。
可选的,
设备还包括共享内存确定模块64,用于确定共享内存,共享内存用作收发数据包缓冲内存;
处理模块61还用于通过内核模块62映射共享该共享内存;
缓冲块设置模块65,用于将共享内存中部分内存设置为多个缓冲块,并对每个缓冲块进行标记编号;其中,所述多个缓冲块未存储数据包时为空闲缓冲块;
网卡初始化模块66,用于使用多个空闲缓冲块初始化网卡收包队列的所有节点,配置多个空闲缓冲块物理地址到网卡中用于收包,并记录多个空闲缓冲块的编号;
网卡中断关闭模块67,用于关闭网卡的中断。
可选的,
处理模块61具体用于通过收包函数携带至少一个空闲缓冲块的编号,并将至少一个空闲缓冲块编号发送至内核模块62;
处理模块61还用于调用内核模块62中的收包函数,以触发内核模块62根据至少一个空闲缓冲块编号与网卡63进行数据包交换。
可选的,
内核模块62还包括判断模块621,用于数判断网卡收包队列中是否有已存数据包缓冲块;
若判定有,则内核模块62将至少一个空闲缓冲块的编号与网卡63收包队列中的至少一个已存数据包缓冲块的编号进行交换,并将至少一个空闲缓冲块的物理地址配置到网卡63的收包队列中,以用作网卡63后续收包;
内核模块62还具体用于将至少一个已存数据包缓冲块的编号及数量返回至处理模块61。
可选的,在处理模块61还用于根据内核模块62返回的至少一个已存数据包缓冲块编号,处理已存数据包缓冲块中数据之后,处理模块61、内核模块62、网卡63还包括继续执行对应的操作。
本发明实施例提供了一种基于LINUX的无中断线速收包设备,该设备收包时,网卡直接存储数据包到应用程序可访问的缓冲块中,所以该收包过程无需进行数据拷贝,达到了线速的收取数据包,提高了收发数据包的性能;同时,由于传统的中断收发数据包时需要调用CPU资源来完成,每个数据包都触发调用,当数据量大时,频繁中断调用造成传统的收发数据包性能低下,而在本发明实施例中,关闭中断,采用循环主动收包,避免了传统的中断对CPU资源的频繁调用,而是直接将资源用于收取数据包上,从而提高了收发数据包性能;且与传统的中断收取数据包时在内核模块和应用程序间进行多次数据拷贝相比,而本发明无需进行数据拷贝,减少了对CPU的占用,更加适应大流量下的数据所需的处理速度,满足了用户对设备收发数据的速度需求。
实施例五
本发明实施例提供了一种基于LINUX的无中断线速发包设备7,参照图7所示,设备7包括:
处理模块71,用于获取至少一个空闲缓冲块及对应的编号,并将待发数据存储于至少一个空闲缓冲中,形成至少一个待发缓冲块;
处理模块71还用于携带至少一个待发缓冲块编号触发内核模块与网卡进行数据包交换;
内核模块72,用于将至少一个待发缓冲块的编号与网卡73中的至少一个已发数据缓冲块编号交换,并将至少一个待发缓冲块的物理地址配置至网卡73中,网卡73发送至少一个待发缓冲块中的数据包;
处理模块71还用于根据内核模块72返回的至少一个已发数据缓冲块编号,归还至少一个已发数据缓冲块为空闲缓冲块于共享内存中。
可选的,
设备还包括共享内存确定模块74,用于确定共享内存,共享内存用作收发数据包缓冲内存;
处理模块71还用于通过内核模块映射共享该共享内存;
缓冲块设置模块75,用于将共享内存中部分内存设置为多个缓冲块,并对每个缓冲块进行标记编号;其中,所述多个缓冲块未存储数据包时为空闲缓冲块;
网卡初始化模块76,用于使用多个空闲缓冲块初始化网卡收包队列的所有节点,配置多个空闲缓冲块物理地址到网卡中用于收包,并记录多个空闲缓冲块的编号;
网卡中断关闭模块77,用于关闭网卡的中断。
可选的,处理模块71根据内核模块72返回的至少一个已发数据缓冲块编号,归还至少一个已发数据缓冲块为空闲缓冲块于共享内存中之后,处理模块71、内核模块72、网卡73还包括继续执行对应的操作。
本发明实施例提供了一种基于LINUX的无中断线速发包设备,该设备发包时直接使用应用程序填充了数据包的缓冲块的物理地址进行发送,所以该发包过程无需进行数据拷贝,达到了线速的收发数据包,提高了收发数据包的性能;同时,由于传统的中断发数据包时需要调用CPU资源来完成,每个数据包都触发调用,当数据量大时,频繁中断调用造成传统的收发数据包性能低下,而在本发明实施例中,关闭中断,采用循环主动发包,避免了传统的中断对CPU资源的频繁调用,而是直接将资源用于发送数据包上,从而提高了收发数据包性能;且与传统的中断发送数据包时在内核模块和应用程序间进行多次数据拷贝相比,本发明实施例所提供的方式无需进行数据拷贝,更加适应大流量下的数据所需的处理速度,满足了用户对设备收发数据的速度需求。
上述所有可选技术方案,可以采用任意结合形成本发明的可选实施例,在此不再一一赘述,本发明实施例提供的收包方法和发包方法是同时实时进行的。
需要说明的是:上述实施例提供的电子设备在执行基于LINUX的无中断线速收包、发包方法时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的电子设备与基于LINUX的无中断线速发包、收包方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种基于LINUX的无中断线速收包方法,其特征在于,所述方法包括:
S11、应用程序获取至少一个空闲缓冲块对应的编号;
S12、所述应用程序携带所述至少一个空闲缓冲块的编号触发内核模块与网卡进行数据包交换;
S13、所述内核模块将所述至少一个空闲缓冲块的编号与网卡中的至少一个已存数据包缓冲块的编号交换,并将所述至少一个空闲缓冲块的物理地址配置到所述网卡,以使所述网卡通过所述多个空闲缓冲块接收新的数据包;
S14、所述应用程序根据所述内核模块返回的所述至少一个已存数据包缓冲块编号,处理所述已存数据包缓冲块中数据。
2.根据权利要求1所述的方法,其特征在于,在所述步骤S11之前,所述方法还包括:
确定共享内存,所述共享内存用作收发数据包缓冲内存;
所述应用程序通过所述内核模块映射共享所述共享内存;
将所述共享内存中部分内存设置为多个缓冲块,并对所述每个缓冲块进行标记编号;其中,所述多个缓冲块未存储数据包时为空闲缓冲块;
使用所述多个空闲缓冲块初始化所述网卡收包队列的所有节点,配置所述多个空闲缓冲块物理地址到所述网卡中用于收包,并记录所述多个空闲缓冲块的编号;以及
关闭所述网卡的中断。
3.根据权利要求1或2所述的方法,其特征在于,所述应用程序携带所述至少一个空闲缓冲块的编号触发内核模块与网卡进行数据包交换包括:
所述应用程序通过收包函数携带所述至少一个空闲缓冲块的编号,并将所述至少一个空闲缓冲块编号发送至所述内核模块;以及
调用所述内核模块中的收包函数,以触发所述内核模块根据所述至少一个空闲缓冲块编号与所述网卡进行数据包交换。
4.根据权利要求1或3所述的方法,其特征在于,所述内核模块将所述至少一个空闲缓冲块编号与网卡中的至少一个已存数据包缓冲块的编号交换,并将所述至少一个空闲缓冲块的物理地址配置到所述网卡包括:
所述内核模块中的收包函数判断所述网卡收包队列中是否有已存数据包缓冲块;
若有,则将所述至少一个空闲缓冲块的编号与所述网卡收包队列中的至少一个已存数据包缓冲块的编号进行交换,并将所述至少一个空闲缓冲块的物理地址配置到所述网卡的收包队列中,以用作网卡后续收包;
所述内核模块将所述至少一个已存数据包缓冲块的编号及数量返回至所述应用程序。
5.根据权利要求1所述的方法,其特征在于,在执行步骤S14之后,继续执行步骤S11。
6.一种基于LINUX的无中断线速发包方法,其特征在于,所述方法包括:
S21、应用程序获取至少一个空闲缓冲块及对应的编号,并将待发数据存储于所述至少一个空闲缓冲中,形成至少一个待发缓冲块;
S22、所述应用程序携带所述至少一个待发缓冲块的编号触发内核模块与网卡进行数据包交换;
S23、所述内核模块将所述至少一个待发缓冲块的编号与网卡中的至少一个已发数据缓冲块编号交换,并将所述至少一个待发缓冲块的物理地址配置至网卡中,网卡发送所述至少一个待发缓冲块中的数据包;
S24、所述应用程序根据所述内核模块返回的至少一个已发数据缓冲块编号,归还所述至少一个已发数据缓冲块为空闲缓冲块于共享内存中。
7.根据权利要求6所述的方法,其特征在于,在所述步骤S21之前,所述方法还包括:
确定共享内存,所述共享内存用作收发数据包缓冲内存;
所述应用程序通过所述内核模块映射共享所述共享内存;
将所述共享内存中部分内存设置为多个缓冲块,并对所述每个缓冲块进行标记编号;其中,所述多个缓冲块未存储数据包时为空闲缓冲块;
使用所述多个空闲缓冲块初始化所述网卡收包队列的所有节点,配置所述多个空闲缓冲块物理地址到所述网卡中用于收包,并记录所述多个空闲缓冲块的编号;以及
关闭所述网卡的中断。
8.根据权利要求7所述的方法,其特征在于,在执行步骤S24之后,继续执行步骤S21。
9.一种基于LINUX的无中断线速收包设备,其特征在于,所述设备包括:
处理模块,用于获取至少一个空闲缓冲块对应的编号;
所述处理模块还用于携带所述至少一个空闲缓冲块的编号触发内核模块与网卡进行数据包交换;
内核模块,用于将所述至少一个空闲缓冲块的编号与网卡中的至少一个已存数据包缓冲块的编号交换,并将所述至少一个空闲缓冲块的物理地址配置到所述网卡,以使所述网卡通过所述多个空闲缓冲块接收新的数据包;
所述处理模块还用于根据所述内核模块返回的所述至少一个已存数据包缓冲块编号,处理所述已存数据包缓冲块中数据。
10.根据权利要求9所述的设备,其特征在于,
所述设备还包括共享内存确定模块,用于确定共享内存,所述共享内存用作收发数据包缓冲内存;
所述处理模块还用于通过所述内核模块映射共享所述共享内存;
缓冲块设置模块,用于将所述共享内存中部分内存设置为多个缓冲块,并对所述每个缓冲块进行标记编号;
网卡中断关闭模块,用于关闭所述网卡的中断。
CN201710187894.3A 2017-03-27 2017-03-27 一种基于linux的无中断线速收包、发包方法及设备 Active CN107066340B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710187894.3A CN107066340B (zh) 2017-03-27 2017-03-27 一种基于linux的无中断线速收包、发包方法及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710187894.3A CN107066340B (zh) 2017-03-27 2017-03-27 一种基于linux的无中断线速收包、发包方法及设备

Publications (2)

Publication Number Publication Date
CN107066340A true CN107066340A (zh) 2017-08-18
CN107066340B CN107066340B (zh) 2020-05-12

Family

ID=59620328

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710187894.3A Active CN107066340B (zh) 2017-03-27 2017-03-27 一种基于linux的无中断线速收包、发包方法及设备

Country Status (1)

Country Link
CN (1) CN107066340B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109800073A (zh) * 2019-01-28 2019-05-24 Oppo广东移动通信有限公司 实时进程的调度方法、装置、终端及存储介质
CN112995753A (zh) * 2019-12-16 2021-06-18 中兴通讯股份有限公司 一种媒体流分发方法、cdn节点服务器、cdn系统和可读存储介质
CN114415944A (zh) * 2021-12-27 2022-04-29 深圳忆联信息系统有限公司 固态硬盘物理块管理方法、装置、计算机设备及存储介质
US11599649B2 (en) * 2020-06-29 2023-03-07 Rockwell Automation Technologies, Inc. Method and apparatus for managing transmission of secure data packets
US11606346B2 (en) 2020-06-29 2023-03-14 Rockwell Automation Technologies, Inc. Method and apparatus for managing reception of secure data packets

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6212194B1 (en) * 1998-08-05 2001-04-03 I-Cube, Inc. Network routing switch with non-blocking arbitration system
CN1801806A (zh) * 2005-11-11 2006-07-12 华中科技大学 一种实时环境下的零拷贝通信方法
CN103490939A (zh) * 2012-06-11 2014-01-01 中兴通讯股份有限公司 一种处理数据包的方法及装置
US20150009816A1 (en) * 2013-07-03 2015-01-08 Mediatek Inc. Traffic Shaping Mechanism for UE Power Saving in Idle Mode

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6212194B1 (en) * 1998-08-05 2001-04-03 I-Cube, Inc. Network routing switch with non-blocking arbitration system
CN1801806A (zh) * 2005-11-11 2006-07-12 华中科技大学 一种实时环境下的零拷贝通信方法
CN103490939A (zh) * 2012-06-11 2014-01-01 中兴通讯股份有限公司 一种处理数据包的方法及装置
US20150009816A1 (en) * 2013-07-03 2015-01-08 Mediatek Inc. Traffic Shaping Mechanism for UE Power Saving in Idle Mode

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109800073A (zh) * 2019-01-28 2019-05-24 Oppo广东移动通信有限公司 实时进程的调度方法、装置、终端及存储介质
CN112995753A (zh) * 2019-12-16 2021-06-18 中兴通讯股份有限公司 一种媒体流分发方法、cdn节点服务器、cdn系统和可读存储介质
CN112995753B (zh) * 2019-12-16 2024-03-22 中兴通讯股份有限公司 一种媒体流分发方法、cdn节点服务器、cdn系统和可读存储介质
US11599649B2 (en) * 2020-06-29 2023-03-07 Rockwell Automation Technologies, Inc. Method and apparatus for managing transmission of secure data packets
US11606346B2 (en) 2020-06-29 2023-03-14 Rockwell Automation Technologies, Inc. Method and apparatus for managing reception of secure data packets
CN114415944A (zh) * 2021-12-27 2022-04-29 深圳忆联信息系统有限公司 固态硬盘物理块管理方法、装置、计算机设备及存储介质

Also Published As

Publication number Publication date
CN107066340B (zh) 2020-05-12

Similar Documents

Publication Publication Date Title
CN107066340A (zh) 一种基于linux的无中断线速收包、发包方法及设备
CN101841470B (zh) 一种基于Linux的底层数据包的高速捕获方法
CN105577567B (zh) 基于Intel DPDK的网络数据包并行处理方法
CN103391256B (zh) 一种基于Linux系统的基站用户面数据处理优化方法
CN103312720B (zh) 一种数据传输方法、设备及系统
CN107948094A (zh) 一种高速数据帧无冲突入队处理的装置及方法
CN104601696B (zh) 服务处理方法、服务调用系统、装置和系统
CN103077148B (zh) 一种基于pcie的主机通讯方法和主机
CN101178694A (zh) Intel e1000零拷贝的方法
TWI277324B (en) Network packet storage method and network packet transmitting apparatus using the same
CN1802836A (zh) 网络协议卸载引擎存储器管理
US9042252B2 (en) Inter-packet interval prediction learning algorithm
CN109565455A (zh) 具有高速缓存的分组存储器中的分组描述符存储
CN108366111A (zh) 一种用于交换设备的数据包低时延缓存装置与方法
CN103049240A (zh) Pci-e设备及其接收数据重排序方法
CN107241305A (zh) 一种基于多核处理器的网络协议分析系统及其分析方法
CN107528789A (zh) 报文调度方法及装置
WO2016019554A1 (zh) 一种队列管理的方法和装置
CN105025063A (zh) 面向大规模终端设备的在线数据传输方法
CN107315944B (zh) 一种智能密钥设备及其工作方法
CN114257559A (zh) 一种数据报文的转发方法及装置
CN102916902A (zh) 数据存储方法及装置
CN104468855B (zh) 地址解析协议arp报文的处理方法和装置
CN104243348A (zh) 一种数据处理方法和装置
CN102750245A (zh) 报文接收方法、报文接收模块、装置及系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant