CN104320351A - 基于零拷贝和Linux内核的软件流控方法及其系统 - Google Patents

基于零拷贝和Linux内核的软件流控方法及其系统 Download PDF

Info

Publication number
CN104320351A
CN104320351A CN201410603601.1A CN201410603601A CN104320351A CN 104320351 A CN104320351 A CN 104320351A CN 201410603601 A CN201410603601 A CN 201410603601A CN 104320351 A CN104320351 A CN 104320351A
Authority
CN
China
Prior art keywords
flow control
packet
module
queue number
linux kernel
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
CN201410603601.1A
Other languages
English (en)
Other versions
CN104320351B (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.)
SURFILTER NETWORK TECHNOLOGY Co Ltd
Original Assignee
SURFILTER NETWORK 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 SURFILTER NETWORK TECHNOLOGY Co Ltd filed Critical SURFILTER NETWORK TECHNOLOGY Co Ltd
Priority to CN201410603601.1A priority Critical patent/CN104320351B/zh
Publication of CN104320351A publication Critical patent/CN104320351A/zh
Application granted granted Critical
Publication of CN104320351B publication Critical patent/CN104320351B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明涉及软件流控技术领域,尤其涉及一种基于零拷贝和Linux内核的软件流控方法及其系统。方法包括:用零拷贝方式获取网卡上的数据包;判断数据包是否需要流控;如果数据包需要流控,则将数据包打上流控队列号标记;将打上流控队列号标记的数据包发送到Linux内核的虚拟网卡上;将接收到的打上流控队列号标记的数据包转换为内核打上标记后的数据包;对该数据包进行流量控制,以产生流控后的数据包。本发明提供的基于零拷贝和Linux内核的软件流控方法及其系统,结合了零拷贝和Linux内核TC流控各自的优点,采用虚拟网卡的方式连接内核和零拷贝机制,解决了转发性能和流控之间的矛盾,实现了大流量下高效的流量控制。

Description

基于零拷贝和Linux内核的软件流控方法及其系统
技术领域
本发明涉及软件流控技术领域,尤其涉及一种基于零拷贝和Linux内核的软件流控方法及其系统。
背景技术
随着“大数据”与“云计算”概念的提出,各种移动访问、应用资源、云端服务也不断涌现出来,带宽需求不断扩大,对带宽资源的占用也越来越高,如果不加以限制,会严重消耗企业的带宽资源,从而影响正常的业务数据传输。
在这种情形下,软件流控也变得越来越重要,当前主流的软件流控实现方法有两种:一种方法是基于Linux内核提供的流量控制(Traffic Control,以下简称TC)组件,该方法的优点是Linux内核和TC组件提供了丰富的功能支持,可以根据用户需求较快的开发新功能,缺点是所有数据包均需要经过Linux内核转发,转发性能较低。另一种方法是基于零拷贝技术,用户态程序可直接从网卡上读取数据包,并实现流控算法,该方法的优点是转发性能高,缺点是用户需要自己重头开发流控框架,实现起来复杂度大。
鉴于以上内容,有必要提供一种能克服以上缺点的流控方法。
发明内容
本发明的目的在于提供一种基于零拷贝和Linux内核的软件流控方法及其系统,以解决以上技术问题。
本发明是这样实现的,一种基于零拷贝和Linux内核的软件流控方法,包括以下步骤:用零拷贝方式获取网卡上的数据包的步骤;判断所述数据包是否需要流控的步骤;如果所述数据包需要流控,则将所述数据包打上流控队列号标记的步骤;通过虚拟网卡驱动提供的接口,将打上流控队列号标记的数据包发送到Linux内核的虚拟网卡上的步骤;将接收到的所述打上流控队列号标记的数据包转换为内核打上标记后的数据包的步骤;以及利用linux内核TC模块对所述内核打上标记后的数据包进行流量控制,以产生流控后的数据包的步骤。
较优的,所述将接收到的所述打上流控队列号标记的数据包转换为内核打上标记后的数据包的步骤进一步包括;所述打上流控队列号标记的数据包中的网络数据包转换为linux内核存储的sk_buff格式数据包的步骤;以及根据所述打上流控队列号标记的数据包的标记值,将所述sk_buff格式数据包打上标记的步骤。
较优的,还包括:用户态程序通过虚拟网卡驱动提供的接口接收所述流控后的数据包,并用零拷贝方式将所述流控后的数据包发送到网卡的步骤。
较优的,所述将接收到的所述打上流控队列号标记的数据包转换为内核打上标记后的数据包的步骤是由linux内核的虚拟网卡实现。
较优的,所述流控队列号标记的值是所述打上流控队列号标记的数据包对应在Linux内核TC的流控队列号。
本发明的另一目的是提供一种基于零拷贝和Linux内核的软件流控系统,包括:网卡,连接于流控判断模块,通过网卡零拷贝驱动,获取所述网卡上的数据包,并将所述数据包发送到所述流控判断模块;所述流控判断模块,连接于流控队列号标记模块,判断所述数据包是否需要流控,如需要流控,则将所述数据包发送至所述流控队列号标记模块,如不需要流控,则将所述数据包回传至所述网卡;所述流控队列号标记模块,连接于虚拟网卡模块,将需要流控的所述数据包打上流控队列号标记,并将打上流控队列号标记的数据包发送到所述虚拟网卡模块;所述虚拟网卡模块,连接于流量控制模块以及所述网卡,在linux内核(图中未示出)与所述网卡之间建立数据连接,对所述打上流控队列号标记的数据包转换为内核打上标记后的数据包结构,并将所述内核打上标记后的数据包发送到所述流量控制模块;以及所述流量控制模块,对所述内核打上标记后的数据包进行流量控制,以产生流控后的数据包,并通过所述虚拟网卡模块将所述流控后的数据包传送至所述网卡。
较优的,所述流控判断模块是在用户态程序收到所述数据包后,判断所述数据包是否需要流控。
较优的,所述流控队列号标记的值是所述打上流控队列号标记的数据包对应在Linux内核TC的流控队列号。
较优的,所述流量控制模块属于linux内核TC模块。
较优的,所述虚拟网卡模块进一步包括:结构转换模块,连接于数据包收发模块,对所述打上流控队列号标记的数据包进行结构转换处理,将所述打上流控队列号标记的数据包转换为所述内核打上标记后的数据包结构;以及所述数据包收发模块,在linux内核与所述网卡之间建立数据连接,进行数据互通,接收所述流控队列号标记模块发送的所述打上流控队列号标记的数据包,并将所述结构转换模块进行结构转换处理后的所述内核打上标记后的数据包发送到所述流量控制模块。
本发明提供的基于零拷贝和Linux内核的软件流控方法及其系统,结合了零拷贝和Linux内核TC流控各自的优点,采用虚拟网卡的方式连接内核和零拷贝机制,解决了转发性能和流控之间的矛盾,实现了大流量下高效的流量控制。
附图说明
图1为本发明一实施方式提供的基于零拷贝和Linux内核的软件流控方法的流程图。
图2为本发明一实施方式提供的基于零拷贝和Linux内核的软件流控系统的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
图1为本发明一实施方式提供的基于零拷贝和Linux内核的软件流控方法的流程图。如图1所示,基于零拷贝和Linux内核的软件流控方法包括:
步骤S101:用零拷贝方式获取网卡上的数据包;
步骤S102:用户态程序收到数据包后,判断该数据包是否需要流控,如需要流控,则执行步骤S103,如不需要流控,则执行步骤S105;
步骤S103:将该数据包打上流控队列号标记,其中,标记的值是该数据包对应在Linux内核TC的流控队列号,接下来,执行步骤S107;
步骤S105:将该数据包发送到网卡;
步骤S107:通过虚拟网卡驱动提供的接口,将打上标记的数据包发送到Linux内核的虚拟网卡上;
步骤S109:linux内核的虚拟网卡接收到数据包后,将该数据包转换为内核打上标记后的数据包,即,linux内核的虚拟网卡对该数据包进行结构转换处理,将打上流控队列号标记的数据包转换为内核打上标记后的数据包结构,具体而言,linux内核的虚拟网卡接收到数据包中包括网络数据包及标记值,本步骤中上述的结构转换是将收到的网络数据包转换为linux内核存储的数据包格式(sk_buff),然后根据虚拟网卡收到数据包中的标记值,将sk_buff打上标记;
步骤S111:将内核打上标记后的数据包传输至linux内核网络协议栈,利用linux内核网络协议栈中的linux内核TC模块对内核打上标记后的数据包进行流量控制,以产生流控后的数据包,即,利用linux内核TC模块对内核打上标记后的数据包进行流量控制,以产生流控后的数据包;
步骤S113:用户态程序通过虚拟网卡驱动提供的接口接收流控后的数据包,使用零拷贝方式将该数据包发送到网卡。
以上实施例提供的基于零拷贝和Linux内核的软件流控方法,利用虚拟网卡的方式连接linux内核和网卡零拷贝机制,实现大流量下的流控。利用网卡零拷贝技术,用户态程序将需要流控的数据包打上linux内核TC流控队列号的标记后,发送到linux内核中,经linux内核进行结构转换及流量控制后,将流控后的数据包通过虚拟网卡接口,使用零拷贝技术发送到网卡上。
图2为本发明一实施方式提供的基于零拷贝和Linux内核的软件流控系统的结构示意图。如图2所示,基于零拷贝和Linux内核的软件流控系统100包括:网卡110、流控判断模块120、流控队列号标记模块130、虚拟网卡模块140、流量控制模块150。
网卡110,与流控判断模块120及虚拟网卡模块140相连接,通过网卡零拷贝驱动,获取网卡110上的数据包,并将数据包发送到流控判断模块120。
流控判断模块120,与网卡110及流控队列号标记模块130相连接,接收网卡110发送的数据包,判断该数据包是否需要流控,如需要流控,则将数据包发送至流控队列号标记模块130;如不需要流控,则将该数据包回传至网卡110。其中,流控判断模块120是在用户态程序收到数据包后,判断该数据包是否需要流控。
流控队列号标记模块130,与流控判断模块120及虚拟网卡模块140相连接,接收流控判断模块120发送的需要流控的数据包,将该数据包打上流控队列号标记,并将打上流控队列号标记的数据包发送到虚拟网卡模块140。其中,标记的值是该数据包对应在Linux内核TC的流控队列号。
虚拟网卡模块140,与流控队列号标记模块130、流量控制模块150、以及网卡110相连接,在linux内核(图中未示出)与网卡110之间建立数据连接,将流控队列号标记模块130发送的打上流控队列号标记的数据包进行结构转换处理,将其转换为内核打上标记后的数据包结构,并将内核打上标记后的数据包结构发送到流量控制模块150。
其中,虚拟网卡模块140包括:数据包收发模块141、以及结构转换模块142。数据包收发模块141,在linux内核与网卡110之间建立数据连接,进行数据互通,接收流控队列号标记模块130发送的打上流控队列号标记的数据包,并将结构转换模块142进行结构转换处理后的内核打上标记后的数据包结构发送到流量控制模块150。结构转换模块142,对打上流控队列号标记的数据包进行结构转换处理,将打上流控队列号标记的数据包转换为内核打上标记后的数据包结构。
流量控制模块150,连接于虚拟网卡模块140,对虚拟网卡模块140发送的内核打上标记后的数据包进行流量控制,以产生流控后的数据包,并通过虚拟网卡模块140将流控后的数据包传送至网卡110。其中,流量控制模块150属于linux内核TC模块。
本发明提供的基于零拷贝和Linux内核的软件流控方法及其系统利用虚拟网卡的方式连接linux内核和网卡零拷贝机制,实现大流量下的流控。利用网卡零拷贝技术,用户态程序将需要流控的数据包打上linux内核TC流控队列号的标记后,发送到linux内核中,经linux内核进行结构转换及流量控制后,将流控后的数据包通过虚拟网卡接口,使用零拷贝技术发送到网卡上。
以上所述的基于零拷贝和Linux内核的软件流控方法及其系统仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种基于零拷贝和Linux内核的软件流控方法,其特征在于,包括以下步骤:
用零拷贝方式获取网卡上的数据包的步骤;
判断所述数据包是否需要流控的步骤;
如果所述数据包需要流控,则将所述数据包打上流控队列号标记的步骤;
通过虚拟网卡驱动提供的接口,将打上流控队列号标记的数据包发送到Linux内核的虚拟网卡上的步骤;
将接收到的所述打上流控队列号标记的数据包转换为内核打上标记后的数据包的步骤;以及
利用linux内核TC模块对所述内核打上标记后的数据包进行流量控制,以产生流控后的数据包的步骤。
2.如权利要求1所述的基于零拷贝和Linux内核的软件流控方法,其特征在于,所述将接收到的所述打上流控队列号标记的数据包转换为内核打上标记后的数据包的步骤进一步包括:
所述打上流控队列号标记的数据包中的网络数据包转换为linux内核存储的sk_buff格式数据包的步骤;以及
根据所述打上流控队列号标记的数据包的标记值,将所述sk_buff格式数据包打上标记的步骤。
3.如权利要求1所述的基于零拷贝和Linux内核的软件流控方法,其特征在于,还包括:用户态程序通过虚拟网卡驱动提供的接口接收所述流控后的数据包,并用零拷贝方式将所述流控后的数据包发送到网卡的步骤。
4.如权利要求1所述的基于零拷贝和Linux内核的软件流控方法,其特征在于,所述将接收到的所述打上流控队列号标记的数据包转换为内核打上标记后的数据包的步骤是由linux内核的虚拟网卡实现。
5.如权利要求1所述的基于零拷贝和Linux内核的软件流控方法,其特征在于:所述流控队列号标记的值是所述打上流控队列号标记的数据包对应在Linux内核TC的流控队列号。
6.一种基于零拷贝和Linux内核的软件流控系统,其特征在于,包括:
网卡,连接于流控判断模块,通过网卡零拷贝驱动,获取所述网卡上的数据包,并将所述数据包发送到所述流控判断模块;
所述流控判断模块,连接于流控队列号标记模块,判断所述数据包是否需要流控,如需要流控,则将所述数据包发送至所述流控队列号标记模块,如不需要流控,则将所述数据包回传至所述网卡;
所述流控队列号标记模块,连接于虚拟网卡模块,将需要流控的所述数据包打上流控队列号标记,并将打上流控队列号标记的数据包发送到所述虚拟网卡模块;
所述虚拟网卡模块,连接于流量控制模块以及所述网卡,在linux内核(图中未示出)与所述网卡之间建立数据连接,对所述打上流控队列号标记的数据包转换为内核打上标记后的数据包结构,并将所述内核打上标记后的数据包发送到所述流量控制模块;以及
所述流量控制模块,对所述内核打上标记后的数据包进行流量控制,以产生流控后的数据包,并通过所述虚拟网卡模块将所述流控后的数据包传送至所述网卡。
7.如权利要求6所述的基于零拷贝和Linux内核的软件流控系统,其特征在于:所述流控判断模块是在用户态程序收到所述数据包后,判断所述数据包是否需要流控。
8.如权利要求6所述的基于零拷贝和Linux内核的软件流控系统,其特征在于:所述流控队列号标记的值是所述打上流控队列号标记的数据包对应在Linux内核TC的流控队列号。
9.如权利要求6所述的基于零拷贝和Linux内核的软件流控系统,其特征在于:所述流量控制模块属于linux内核TC模块。
10.如权利要求6所述的基于零拷贝和Linux内核的软件流控系统,其特征在于,所述虚拟网卡模块进一步包括:
结构转换模块,连接于数据包收发模块,对所述打上流控队列号标记的数据包进行结构转换处理,将所述打上流控队列号标记的数据包转换为所述内核打上标记后的数据包结构;以及
所述数据包收发模块,在linux内核与所述网卡之间建立数据连接,进行数据互通,接收所述流控队列号标记模块发送的所述打上流控队列号标记的数据包,并将所述结构转换模块进行结构转换处理后的所述内核打上标记后的数据包发送到所述流量控制模块。
CN201410603601.1A 2014-10-27 2014-10-27 基于零拷贝和Linux内核的软件流控方法及其系统 Active CN104320351B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410603601.1A CN104320351B (zh) 2014-10-27 2014-10-27 基于零拷贝和Linux内核的软件流控方法及其系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410603601.1A CN104320351B (zh) 2014-10-27 2014-10-27 基于零拷贝和Linux内核的软件流控方法及其系统

Publications (2)

Publication Number Publication Date
CN104320351A true CN104320351A (zh) 2015-01-28
CN104320351B CN104320351B (zh) 2019-04-05

Family

ID=52375524

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410603601.1A Active CN104320351B (zh) 2014-10-27 2014-10-27 基于零拷贝和Linux内核的软件流控方法及其系统

Country Status (1)

Country Link
CN (1) CN104320351B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112714075A (zh) * 2020-12-30 2021-04-27 深圳市吉祥腾达科技有限公司 一种桥转发数据包限速的方法
CN113595936A (zh) * 2021-08-03 2021-11-02 中国电信股份有限公司 流量监管方法、网关设备和存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101149714A (zh) * 2006-09-18 2008-03-26 国际商业机器公司 用于执行直接存储器存取的方法和系统
CN101917350A (zh) * 2010-09-13 2010-12-15 南京中兴特种软件有限责任公司 一种Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法
CN102082698A (zh) * 2009-11-26 2011-06-01 上海大学 基于改进型零拷贝技术的高性能内核的网络数据处理系统
US20140006467A1 (en) * 2012-06-29 2014-01-02 Sridhar Samudrala Double rounded combined floating-point multiply and add
CN104011656A (zh) * 2011-12-22 2014-08-27 英特尔公司 使用直接数据路径架构来存储数据以降低能量消耗和改进性能

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101149714A (zh) * 2006-09-18 2008-03-26 国际商业机器公司 用于执行直接存储器存取的方法和系统
CN102082698A (zh) * 2009-11-26 2011-06-01 上海大学 基于改进型零拷贝技术的高性能内核的网络数据处理系统
CN101917350A (zh) * 2010-09-13 2010-12-15 南京中兴特种软件有限责任公司 一种Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法
CN104011656A (zh) * 2011-12-22 2014-08-27 英特尔公司 使用直接数据路径架构来存储数据以降低能量消耗和改进性能
US20140006467A1 (en) * 2012-06-29 2014-01-02 Sridhar Samudrala Double rounded combined floating-point multiply and add

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112714075A (zh) * 2020-12-30 2021-04-27 深圳市吉祥腾达科技有限公司 一种桥转发数据包限速的方法
CN113595936A (zh) * 2021-08-03 2021-11-02 中国电信股份有限公司 流量监管方法、网关设备和存储介质
CN113595936B (zh) * 2021-08-03 2022-09-20 中国电信股份有限公司 流量监管方法、网关设备和存储介质

Also Published As

Publication number Publication date
CN104320351B (zh) 2019-04-05

Similar Documents

Publication Publication Date Title
US10959133B2 (en) Method and device for processing quality of service parameter in handover scenario
JP6622927B2 (ja) データ伝送方法、装置及びシステム
CN109067724A (zh) 区块链数据交易方法、装置、设备及存储介质
CN107277883A (zh) 在多网络切片的网络中路由消息的方法、设备及系统
WO2013153232A3 (en) Moderation of network and access point selection in an ieee 802.11 communication system
US20200296624A1 (en) Frame aggregation method, network setting frame sending method, and device
CN109076630A (zh) 无线通信系统及用户装置
CN107135189B (zh) 一种报文发送方法及物理机
WO2014008694A1 (zh) 一种实现ps域分布式架构的信令监测装置
CN104853023A (zh) 电子名片的分发方法和系统
CN104219298A (zh) 集群系统及其数据备份的方法
CN110062060A (zh) 一种ip地址分配的系统和方法
CN105227403B (zh) 一种OpenStack网络流量监控方法
CN104320351A (zh) 基于零拷贝和Linux内核的软件流控方法及其系统
WO2013135090A1 (zh) 一种消息发送、获取、处理方法及相关装置及系统
CN103024023B (zh) 电子阅览室网络审计方法
CN113099412B (zh) 一种智能rsu装置及路侧通信系统
CN105635337A (zh) 一种绑定iOS设备的方法、iOS设备及辅助设备
CN101355571B (zh) 多媒体消息的处理方法、装置及系统
CN110351202B (zh) 5g核心网流量分组方法、装置、设备和计算机存储介质
IL272881B2 (en) Method and device for wireless communication
EP2515601B1 (en) Dial-up connection method and device of mobile data terminal
WO2018039943A1 (zh) 一种数据转移的进度计算方法、装置及系统
CN104798397A (zh) 用于通过接入节点托管应用的方法和设备
WO2021208882A1 (zh) 一种能效评估方法及相关设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
DD01 Delivery of document by public notice

Addressee: Surfilter Network Technology Co., Ltd.

Document name: Notice of amendment to the notice of patent for invention

DD01 Delivery of document by public notice