CN111147391B - DPDK用户态与linux内核网络协议栈之间的数据传输方法及系统 - Google Patents
DPDK用户态与linux内核网络协议栈之间的数据传输方法及系统 Download PDFInfo
- Publication number
- CN111147391B CN111147391B CN201911237285.XA CN201911237285A CN111147391B CN 111147391 B CN111147391 B CN 111147391B CN 201911237285 A CN201911237285 A CN 201911237285A CN 111147391 B CN111147391 B CN 111147391B
- Authority
- CN
- China
- Prior art keywords
- port
- dpdk
- virtual network
- bond
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/12—Avoiding congestion; Recovering from congestion
- H04L47/125—Avoiding congestion; Recovering from congestion by balancing the load, e.g. traffic engineering
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/50—Address allocation
- H04L61/5007—Internet protocol [IP] addresses
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种DPDK用户态与linux内核网络协议栈之间的数据传输方法及系统,方法包括:利用DPDK的KNI模块为每个物理网口创建与其绑定的N个虚拟网口,为每一个虚拟网口单独绑定一个内核线程,利用linux系统命令以轮询的方式创建bond口,将N个虚拟网口绑定到同一个bond口;DPDK通过物理网口收到网络数据包后,将接收到的数据包通过KNI接口轮询的方式分配到与所述物理网口绑定的N个虚拟网口;内核协议栈将处理后的需要发送到bond口的数据包,按照轮询的方式发送到bond口的N个虚拟网口上,DPDK通过KNI接口从各个虚拟网口上读取数据包之后再发送到物理网口上;如此,本发明负载均衡,达到linux内核直接驱动网卡,突破了性能瓶颈,提高数据包出入内核的性能。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种DPDK用户态与linux内核网络协议栈之间的数据传输方法及系统。
背景技术
DPDK作为零拷贝用户态网卡驱动,具有很高的性能。在实际应用中,往往存在对于一些特定的数据包,需要经过linux内核态网络协议栈处理。DPDK用户态网络数据包与内核态网络协议栈之间传输是通过KNI模块,通常是将一个物理网口创建一个虚拟网口,通过虚拟网口与内核协议栈之间进行传输。
对于单个物理网口对应一个虚拟网口时,DPDK的KNI模块创建一个内核线程来接收数据包,在大流量下,linux内核协议栈单cpu收包软中断比较高,内核丢包造成性能瓶颈。以至于该方法的性能不如linux内核直接驱动网卡,数据包出入内核的性能。
发明内容
本发明要解决的技术问题在于,针对现有技术的上述数据出入内核的性能缺陷,提供一种DPDK用户态与linux内核网络协议栈之间的数据传输方法及系统。
本发明解决其技术问题所采用的技术方案是:
一方面,构造一种DPDK用户态与linux内核网络协议栈之间的数据传输方法,所述方法包括:
DPDK通过物理网口收到网络数据包后,将接收到的数据包通过KNI接口轮询的方式分配到与所述物理网口绑定的N个虚拟网口,N为大于1的正整数;
内核协议栈将处理后的需要发送到bond口的数据包,按照轮询的方式发送到bond口的N个虚拟网口上,DPDK通过KNI接口从各个虚拟网口上读取数据包之后再发送到物理网口上。
进一步地,所述方法还包括预处理步骤:利用DPDK的KNI模块为每个物理网口创建与其绑定的N个虚拟网口,为每一个虚拟网口单独绑定一个内核线程,利用linux系统命令以轮询的方式创建bond口,将N个虚拟网口绑定到同一个bond口。
进一步地,所述方法还包括:将IP及路由配置到所述bond口上。
二方面,构造一种DPDK用户态与linux内核网络协议栈之间的数据传输系统,所述系统包括:
DPDK:通过物理网口收到网络数据包后,将接收到的数据包通过KNI接口轮询的方式分配到与所述物理网口绑定的N个虚拟网口,N为大于1的正整数;
内核协议栈:将处理后的需要发送到bond口的数据包,按照轮询的方式发送到bond口的N个虚拟网口上,DPDK通过KNI接口从各个虚拟网口上读取数据包之后再发送到物理网口上。
进一步地,所述系统还包括:
预处理模块:用于利用DPDK的KNI模块为每个物理网口创建与其绑定的N个虚拟网口,为每一个虚拟网口单独绑定一个内核线程,利用linux系统命令以轮询的方式创建bond口,将N个虚拟网口绑定到同一个bond口。
进一步地,所述预处理模块还用于将IP及路由配置到所述bond口上。
三方面,构造一种DPDK用户态与linux内核网络协议栈之间的数据传输系统,所述系统包括处理器和存储器,所述存储器存储有计算机程序,所述计算机程序被处理器执行时实现如权前任一项所述的方法的步骤。
本发明的DPDK用户态与linux内核网络协议栈之间的数据传输方法及系统,具有以下有益效果:利用linux网络协议栈bond的特性及DPDK KNI模块的特点,将一个物理网口通过多个虚拟网口与linux内核网络协议栈之间进行数据包传输,数据包通过轮询方式由多个虚拟网口处理,负载均衡,且使用多个内核协议栈线程,达到linux内核直接驱动网卡,突破了性能瓶颈,提高数据包出入内核的性能,达到或超过了真实物理网口与linux内核网络协议栈之间传输的性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图:
图1是本发明DPDK用户态与linux内核网络协议栈之间的数据传输系统的结构示意图。
具体实施方式
为了便于理解本发明,下面将参照相关附图对本发明进行更全面的描述。附图中给出了本发明的典型实施例。但是,本发明可以以许多不同的形式来实现,并不限于本文所描述的实施例。相反地,提供这些实施例的目的是使对本发明的公开内容更加透彻全面。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。
本发明总的思路是:为每个物理网口创建N个虚拟网口,为每一个虚拟网口单独绑定一个内核线程,将N个虚拟网口绑定到同一个bond口,一方面,DPDK通过物理网口收到网络数据包后,将接收到的数据包通过KNI接口轮询的方式分配到与所述物理网口绑定的N个虚拟网口,N为大于1的正整数;另一方面,内核协议栈将处理后的需要发送到bond口的数据包,按照轮询的方式发送到bond口的N个虚拟网口上,DPDK通过KNI接口从各个虚拟网口上读取数据包之后再发送到物理网口上。如此,可以极大的提高数据出入你内核的性能。
为了更好的理解上述技术方案,下面将结合说明书附图以及具体的实施方式对上述技术方案进行详细的说明,应当理解本发明实施例以及实施例中的具体特征是对本申请技术方案的详细的说明,而不是对本申请技术方案的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互组合。
本发明一方面要求保护一种DPDK用户态与linux内核网络协议栈之间的数据传输方法,所述方法包括:
S101:利用DPDK的KNI模块为每个物理网口创建与其绑定的N个虚拟网口,N为大于1的正整数,如图1所示。
S102:为每一个虚拟网口单独绑定一个内核线程;
具体来说,可以利用DPDK KNI的multiple thread特性,加载rte_kni模块时,加上kthread_mode=multiple,同时在DPDK代码中创建虚拟网口绑定特定cpu号,即绑定一个内核线程。
每一个虚拟网口无论是将数据发送给内核,还是转出内核发送的数据,都是通过其所绑定的内核线程来处理。
S103:利用linux系统命令以轮询的方式创建bond口,将N个虚拟网口绑定到同一个bond口,举例如下:
nmcli con add type bond con-name bond0 ifname bond0 mode balance-rr
nmcli con add type bond-slave ifname vEth0_0 master bond0
nmcli con add type bond-slave ifname vEth0_1 master bond0
nmcli con add type bond-slave ifname vEth0_2 master bond0
nmcli con add type bond-slave ifname vEth0_3 master bond0
以上命令创建的虚拟网口如图1中,vEth0_0、vEth0_1、vEth0_2、vEth0_3即为创建的4个虚拟网口,ETH0位一个具体的物理网口,bond0即为一个具体的bond口,将IP及路由配置到所述bond口上,其IP被配置为192.168.1.2/24。
S104:DPDK通过物理网口收到网络数据包后,将接收到的数据包通过KNI接口轮询的方式分配到与所述物理网口绑定的N个虚拟网口,数据发给虚拟网口后,其绑定的内核线程即接收数据并发给内核协议栈。
具体的,所谓轮询方式分配,是指的将数据包按照顺序发送到N个虚拟网口,比如说,第一个要发往bond口的数据包发往vEth0_0,第二个数据包发往vEth0_1,第三个数据包发往vEth0_2,第四个数据包发往vEth0_3,第五个数据包发往vEth0_0,以此类推。
S105:内核协议栈将处理后的需要发送到bond口的数据包,按照轮询的方式发送到bond口的N个虚拟网口上,其绑定的内核线程即接收数据并发给DPDK的KNI接口,DPDK通过KNI接口从各个虚拟网口上读取数据包之后再发送到物理网口上。
同理,此处的轮询,也是指的将数据包按照顺序发送到N个虚拟网口,比如说,第一个要发往bond口的数据包发往vEth0_0,第二个数据包发往vEth0_1,第三个数据包发往vEth0_2,第四个数据包发往vEth0_3,第五个数据包发往vEth0_0,以此类推。
另一方面,基于同一发明构思,参考图1,本发明还要求保护一种DPDK用户态与linux内核网络协议栈之间的数据传输系统,所述系统包括:
预处理模块:用于利用DPDK的KNI模块为每个物理网口创建与其绑定的N个虚拟网口,为每一个虚拟网口单独绑定一个内核线程,利用linux系统命令以轮询的方式创建bond口,将N个虚拟网口绑定到同一个bond口,将IP及路由配置到所述bond口上,N为大于1的正整数。
DPDK:通过物理网口收到网络数据包后,将接收到的数据包通过KNI接口轮询的方式分配到与所述物理网口绑定的N个虚拟网口。
内核协议栈:将处理后的需要发送到bond口的数据包,按照轮询的方式发送到bond口的N个虚拟网口上,DPDK通过KNI接口从各个虚拟网口上读取数据包之后再发送到物理网口上。
更多内容可以参考方法实施例部分,此处不再赘述。
基于同一发明构思,本发明还要求保护一种DPDK用户态与linux内核网络协议栈之间的数据传输系统,所述系统包括处理器和存储器,所述存储器存储有计算机程序,所述计算机程序被处理器执行时实现如方法实施例的步骤,具体实现过程参考方法实施例部分,此处不再赘述。
综上所述,本发明的DPDK用户态与linux内核网络协议栈之间的数据传输方法及系统,具有以下有益效果:利用linux网络协议栈bond的特性及DPDK KNI模块的特点,将一个物理网口通过多个虚拟网口与linux内核网络协议栈之间进行数据包传输,数据包通过轮询方式由多个虚拟网口处理,负载均衡,且使用多个内核协议栈线程,达到linux内核直接驱动网卡,突破了性能瓶颈,提高数据包出入内核的性能,达到或超过了真实物理网口与linux内核网络协议栈之间传输的性能。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。
Claims (7)
1.一种DPDK用户态与linux内核网络协议栈之间的数据传输方法,其特征在于,所述方法包括:
DPDK 通过物理网口收到网络数据包后,将接收到的数据包通过KNI接口轮询的方式分配到与所述物理网口绑定的N个虚拟网口,N为大于1的正整数;
内核协议栈将处理后的需要发送到bond口的数据包,按照轮询的方式发送到bond口的N个虚拟网口上,DPDK 通过KNI接口从各个虚拟网口上读取数据包之后再发送到物理网口上。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括预处理步骤:利用DPDK的KNI模块为每个物理网口创建与其绑定的N个虚拟网口,为每一个虚拟网口单独绑定一个内核线程,利用linux 系统命令以轮询的方式创建bond口,将N个虚拟网口绑定到同一个bond口。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:将IP及路由配置到所述bond口上。
4.一种DPDK用户态与linux内核网络协议栈之间的数据传输系统,其特征在于,所述系统包括:
DPDK:通过物理网口收到网络数据包后,将接收到的数据包通过KNI接口轮询的方式分配到与所述物理网口绑定的N个虚拟网口,N为大于1的正整数;
内核协议栈:将处理后的需要发送到bond口的数据包,按照轮询的方式发送到bond口的N个虚拟网口上,DPDK 通过KNI接口从各个虚拟网口上读取数据包之后再发送到物理网口上。
5.根据权利要求4所述的系统,其特征在于,所述系统还包括:
预处理模块:用于利用DPDK的 KNI模块为每个物理网口创建与其绑定的N个虚拟网口,为每一个虚拟网口单独绑定一个内核线程,利用linux 系统命令以轮询的方式创建bond口,将N个虚拟网口绑定到同一个bond口。
6.根据权利要求5所述的系统,其特征在于,所述预处理模块还用于将IP及路由配置到所述bond口上。
7.一种DPDK用户态与linux内核网络协议栈之间的数据传输系统,其特征在于,所述系统包括处理器和存储器,所述存储器存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1-3任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911237285.XA CN111147391B (zh) | 2019-12-05 | 2019-12-05 | DPDK用户态与linux内核网络协议栈之间的数据传输方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911237285.XA CN111147391B (zh) | 2019-12-05 | 2019-12-05 | DPDK用户态与linux内核网络协议栈之间的数据传输方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111147391A CN111147391A (zh) | 2020-05-12 |
CN111147391B true CN111147391B (zh) | 2023-04-07 |
Family
ID=70517733
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911237285.XA Active CN111147391B (zh) | 2019-12-05 | 2019-12-05 | DPDK用户态与linux内核网络协议栈之间的数据传输方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111147391B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114070900B (zh) * | 2020-07-27 | 2023-04-07 | 大唐移动通信设备有限公司 | 一种基于dpdk的抓包处理方法和装置 |
CN114205186A (zh) * | 2021-11-25 | 2022-03-18 | 锐捷网络股份有限公司 | 报文处理方法、设备及系统 |
CN115242895B (zh) * | 2022-07-19 | 2023-04-18 | 杭州迪普科技股份有限公司 | 基于dpdk的访问本机方法和装置 |
CN116257276B (zh) * | 2023-05-09 | 2023-07-25 | 珠海星云智联科技有限公司 | 支持虚拟化硬件加速的虚拟宿主机用户后端升级方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1885139A1 (en) * | 2006-08-02 | 2008-02-06 | Nokia Siemens Networks Gmbh & Co. Kg | Aggregation switch, method of operating an aggregation switch and corresponding computer program product |
CN102752203A (zh) * | 2012-06-30 | 2012-10-24 | 深圳市同洲电子股份有限公司 | 一种创建多个虚拟网络接口的方法和网络设备 |
CN102932174A (zh) * | 2012-10-25 | 2013-02-13 | 华为技术有限公司 | 一种物理网卡管理方法、装置及物理主机 |
CN105656808A (zh) * | 2015-12-29 | 2016-06-08 | 京信通信技术(广州)有限公司 | 报文处理方法及其系统 |
CN106209852A (zh) * | 2016-07-13 | 2016-12-07 | 成都知道创宇信息技术有限公司 | 一种基于dpdk的dns拒绝服务攻击防御方法 |
-
2019
- 2019-12-05 CN CN201911237285.XA patent/CN111147391B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1885139A1 (en) * | 2006-08-02 | 2008-02-06 | Nokia Siemens Networks Gmbh & Co. Kg | Aggregation switch, method of operating an aggregation switch and corresponding computer program product |
CN102752203A (zh) * | 2012-06-30 | 2012-10-24 | 深圳市同洲电子股份有限公司 | 一种创建多个虚拟网络接口的方法和网络设备 |
CN102932174A (zh) * | 2012-10-25 | 2013-02-13 | 华为技术有限公司 | 一种物理网卡管理方法、装置及物理主机 |
CN105656808A (zh) * | 2015-12-29 | 2016-06-08 | 京信通信技术(广州)有限公司 | 报文处理方法及其系统 |
CN106209852A (zh) * | 2016-07-13 | 2016-12-07 | 成都知道创宇信息技术有限公司 | 一种基于dpdk的dns拒绝服务攻击防御方法 |
Non-Patent Citations (1)
Title |
---|
基于DPDK实现企业网络性能优化的研究与设计;张郁;《中国优秀硕士学位论文全文数据库》;20190115(第01期);第7-21页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111147391A (zh) | 2020-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111147391B (zh) | DPDK用户态与linux内核网络协议栈之间的数据传输方法及系统 | |
EP3238401B1 (en) | Network extended tcp splicing | |
US7647416B2 (en) | Full hardware based TCP/IP traffic offload engine(TOE) device and the method thereof | |
US9069722B2 (en) | NUMA-aware scaling for network devices | |
US8631162B2 (en) | System and method for network interfacing in a multiple network environment | |
US8417848B2 (en) | Method and apparatus for implementing multiple service processing functions | |
US20080086575A1 (en) | Network interface techniques | |
CN102273179B (zh) | 一种终端批量升级方法及装置 | |
CN111049762A (zh) | 数据采集方法、装置、存储介质及交换机 | |
CN110636139B (zh) | 一种云负载均衡的优化方法及系统 | |
CN113535433A (zh) | 基于Linux系统的控制转发分离方法、装置、设备和存储介质 | |
US20230080588A1 (en) | Mqtt protocol simulation method and simulation device | |
KR20130136469A (ko) | 단일화된 i/o 어댑터 | |
CN112769905B (zh) | 一种基于numa架构的飞腾平台下高性能网卡性能优化方法 | |
CN112291259B (zh) | 一种协议转换方法、网关、设备及可读存储介质 | |
EP1460806A2 (en) | System and method for network interfacing in a multiple network environment | |
CN109995828A (zh) | Ipoib性能优化方法、装置、设备及介质 | |
WO2009093299A1 (ja) | パケット処理装置およびパケット処理プログラム | |
CN105337888B (zh) | 基于多核转发的负载均衡方法、装置及虚拟交换机 | |
EP1540473A2 (en) | System and method for network interfacing in a multiple network environment | |
CN109918172A (zh) | 一种虚拟机热迁移方法及系统 | |
CN111245794B (zh) | 数据传输方法和装置 | |
CN113676544A (zh) | 一种云存储网络和在实体服务器中实现业务隔离的方法 | |
US20170295237A1 (en) | Parallel processing apparatus and communication control method | |
CN117041147B (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 |