一种网卡和cpu之间的数据传输方法及装置与流程

文档序号:18899747发布日期:2019-10-18 21:46阅读:1226来源:国知局
一种网卡和cpu之间的数据传输方法及装置与流程

本发明涉及通信技术领域,尤其涉及一种网卡和cpu之间的数据传输方法及装置。



背景技术:

当前网络攻击越来越多,网络安全设备大量被开发出来并应用到实际的环境中,由于当前应用的丰富多样及网络的普及,对网络安全设备的性能要求越来越高,为了适配当前需求的变化,网络安全产品架构也发生了很大变化,从传统的系统安全引擎和收发包由单一cpu处理,不区分cpu资源,演进为多核cpu同时并发处理数据包。在数据包的处理过程中,单队列网卡仅利用一个用户态进程来处理报文的收发,且处理数据包的cpu会在各个cpu硬件线程之间不停变换,这样在利用单队列网卡进行收发报文时,都需要做加锁保护,加解锁过程对cpu产生了大量损耗,大大影响了系统性能。

由于单队列网卡成本低和使用方便等优点,大量网络设备在多核cpu高性能架构下均大量使用单队列网卡,因此由于单独列网卡的加解锁操作而导致的系统性能瓶颈是现阶段使用单队列网卡的过程中亟需解决的技术问题。



技术实现要素:

本发明要解决的技术问题是单队列网卡收发报文时,需加锁操作而影响系统性能,提供一种网卡和cpu之间的数据传输方法及装置。

根据本发明实施例的网卡和cpu之间的数据传输方法,包括:

建立多个网卡与多个cpu之间的对应关系;

根据所述对应关系,在多个所述网卡与多个所述cpu之间进行无加锁数据传输。

根据本发明实施例的网卡和cpu之间的数据传输方法,通过建立网卡与cpu之间的对应关系,在接收或转发数据包时,可以根据网卡与cpu之间的对应关系找到对应的cpu来操作数据包,使cpu与网卡之间可以通过相应的对应关系直接进行数据传输。由此,可以避免cpu与网卡之间数据传输时加解锁过程对cpu产生的大量损耗,从而有效提高了系统性能。

根据本发明的一些实施例,所述建立多个网卡与多个cpu之间的对应关系,包括:

对多个所述网卡和多个所述cpu分别进行编号;

根据所述网卡和所述cpu的编号,建立所述网卡与所述cpu之间的对应关系。

在本发明的一些实施例中,所述根据所述对应关系,在多个所述网卡与多个所述cpu之间进行无加锁数据传输,包括:

设发出数据包的cpu为收包cpu,接收数据包的cpu为发包cpu,所述网卡根据所述对应关系将数据包无加锁传输至相应的收包cpu;

所述收包cpu计算得到出接口网卡;

所述收包cpu将所述数据包通过队列发送给操作所述出接口网卡的发包cpu;

所述发包cpu将所述数据包发送至所述出接口网卡。

根据本发明的一些实施例,所述收包cpu将所述数据包通过队列发送给操作所述出接口网卡的发包cpu,包括:

创建队列,并对所述队列进行编号,所述队列编号包括收包cpu的编号和所述发包cpu的编号;

根据所述收包cpu的编号和所述发包cpu的编号,选择相应编号的队列;

所述收包cpu将所述数据包放入所述队列,所述发包cpu从相应的所述队列中取出所述数据包。

在本发明的一些实施例中,所述网卡与所述cpu的数量相同。

根据本发明实施例的网卡和cpu之间的数据传输装置,包括:

处理模块,用于建立多个网卡与多个cpu之间的对应关系;

传输模块,用于根据所述对应关系,在多个所述网卡与多个所述cpu之间进行无加锁数据传输。

根据本发明实施例的网卡和cpu之间的数据传输装置,通过处理模块建立网卡与cpu之间的对应关系,传输模块在接收或转发数据包时,可以根据网卡与cpu之间的对应关系找到对应的cpu来操作数据包,使cpu与网卡之间可以通过相应的对应关系直接进行数据传输。由此,可以避免cpu与网卡之间数据传输时加解锁过程对cpu产生的大量损耗,从而有效提高了系统性能。

根据本发明的一些实施例,所述处理模块,具体用于:

对多个所述网卡和多个所述cpu分别进行编号;

根据所述网卡和所述cpu的编号,建立所述网卡与所述cpu之间的对应关系。

在本发明的一些实施例中,所述传输模块,具体用于控制网卡和cpu执行以下操作:

设发出数据包的cpu为收包cpu,接收数据包的cpu为发包cpu,所述网卡根据所述对应关系将数据包无加锁传输至相应的收包cpu;

所述收包cpu计算得到出接口网卡;

所述收包cpu将所述数据包通过队列发送给操作所述出接口网卡的发包cpu;

所述发包cpu将所述数据包发送至所述出接口网卡。

根据本发明的一些实施例,所述收包cpu将所述数据包通过队列发送给操作所述出接口网卡的发包cpu,包括:

创建队列,并对所述队列进行编号,所述队列编号包括收包cpu的编号和所述发包cpu的编号;

根据所述收包cpu的编号和所述发包cpu的编号,选择相应编号的队列;

所述收包cpu将所述数据包放入所述队列,所述发包cpu从相应的所述队列中取出所述数据包。

在本发明的一些实施例中,所述网卡与所述cpu的数量相同。

附图说明

图1为本发明实施例的网卡和cpu之间的数据传输方法流程图;

图2为本发明实施例的建立网卡和cpu之间对应关系的方法流程图;

图3为本发明实施例的网卡与数据之间进行无加锁数据传输的方法流程图;

图4为根据本发明实施例的收包cpu通过队列将数据包发送给发包cpu的方法流程图;

图5为根据本发明实施例的网卡和cpu之间的数据传输方法的示意图;

图6为根据本发明实施例的网卡和cpu之间的数据传输装置的结构示意图。

附图标记:

数据传输装置100,处理模块10,传输模块20。

具体实施方式

为更进一步阐述本发明为达成预定目的所采取的技术手段及功效,以下结合附图及较佳实施例,对本发明进行详细说明如后。

如图1所示,根据本发明实施例的网卡和cpu之间的数据传输方法,包括:

s101:建立多个网卡与多个cpu之间的对应关系。需要说明的是,通过建立网卡与cpu之间的对应关系,可以使网卡和cpu之间根据相应的对应关系进行数据传输。

s102:根据对应关系,在多个网卡与多个cpu之间进行无加锁数据传输。需要说明的是,多个网卡与多个cpu之间建立对应关系后,多个网卡与多个cpu之间可以通过相应的对应关系直接进行数据的传输,而无需在数据传输过程中进行加解锁操作。

需要说明的是,多个网卡与多个cpu之间建立对应关系,可以是网卡与cpu的数量相同,此时,多个网卡与多个cpu之间可以建立一一对应的关系;也可以是网卡的数量与cpu的数量不同,当网卡的数量大于cpu的数量时,每个网卡均与多个cpu中的其中一个建立对应关系,也就是说,多个cpu中的部分cpu可以与多个网卡建立对应关系;当网卡的数量小于cpu的数量时,每个网卡与多个cpu中的其中一个建立对应关系,此时,多个cpu中部分cpu不与网卡建立对应关系。

根据本发明实施例的网卡和cpu之间的数据传输方法,通过建立网卡与cpu之间的对应关系,在接收或转发数据包时,可以根据网卡与cpu之间的对应关系找到对应的cpu来操作数据包,使cpu与网卡之间可以通过相应的对应关系直接进行数据传输。由此,可以避免cpu与网卡之间数据传输时加解锁过程对cpu产生的大量损耗,从而有效提高了系统性能。

根据本发明的一些实施例,如图2所示,建立多个网卡与多个cpu之间的对应关系,包括:

s201:对多个网卡和多个cpu分别进行编号;

例如,假设系统中m个cpu和d块网卡,对系统中的d块网卡从0开始编号,网卡编号分别为g0,g1,…,g(d-1)。对系统中的cpu从0开始编号,cpu编号分别为f0,f1,…,f(m-1)。

s202:根据网卡和cpu的编号,建立网卡与cpu之间的对应关系。

需要说明的是,可以用系统中网卡的编号g通过计算找到对应编号f的cpu,编号为f的cpu即为处理编号为g的网卡对应的cpu。例如,可以采用相同编号建立网卡与cpu之间的对应关系,如编号为f0的cpu处理编号为g0的网卡,编号为f1的cpu处理编号为g1的网卡,以此类推。可以理解的是,还可以采用网卡与cpu的编号采用取余计算或其他计算方式建立对应关系。根据网卡和cpu的编号建立网卡与cpu之间对应关系的具体方式,在此不做限定,只要可以建立网卡与cpu之间的对应关系即可。

在本发明的一些实施例中,如图3所示,根据对应关系,在多个网卡与多个cpu之间进行无加锁数据传输,包括:数据包收包、数据包处理和数据包发送等过程,具体包括:

s301:设发出数据包的cpu为收包cpu,接收数据包的cpu为发包cpu,网卡根据对应关系将数据包无加锁传输至相应的收包cpu。结合图3和图5所示,通过网卡与cpu之间的对应关系,找到操作编号为g1的网卡的cpu的编号为f1,网卡g1可以将数据包无加锁传输至编号为f1的cpu。

s302:收包cpu计算得到出接口网卡;

编号为f1的收包cpu接收数据包后,进入数据包转发逻辑处理,通过逻辑计算确定出接口网卡为编号为g2的网卡。

s303:收包cpu将数据包通过队列发送给操作出接口网卡的发包cpu;

在上述确定了出接口网卡为编号为g2的网卡后,根据网卡与cpu编号的对应关系,找到处理网卡g2的cpu为编号为f2的cpu。编号为f1的cpu通过队列将数据包发送至编号为f2的发包cpu。

s304:发包cpu将数据包发送至出接口网卡。

如上述所述,编号为f2的cpu接收数据包后,将数据包发送至编号为g2的出接口网卡。由此,实现了网卡与cpu之间无加解锁数据传输操作。

根据本发明的一些实施例,结合图4和图5所示,收包cpu将数据包通过队列发送给操作出接口网卡的发包cpu,包括:

s401:创建队列,并对队列进行编号,队列编号包括收包cpu的编号和发包cpu的编号;

需要说明的是,可以在系统中创建m*m个队列,队列编号依次为:q01,

q02,…,q(m-1)(m-1)。其中,编号为qab的队列,代表队列中发包的cpu的编号为a,从队列中收包的cpu的编号为b。

s402:根据收包cpu的编号和发包cpu的编号,选择相应编号的队列;

需要说明的是,在数据包的传输过程中,收包cpu通过逻辑计算确定出出接口网卡时,可以根据网卡与cpu的对应关系确定处理出接口网卡的发包cpu,而根据收包cpu和发包cpu的编号可以确定相应编号的队列,从而可以使收包cpu通过队列将数据包发送至发包cpu。

如图5所示,编号为f1的收包cpu通过逻辑计算确定出接口网卡为网卡g2,通过网卡与cpu的对应关系可以确定处理网卡g2的cpu为编号为f2的发包cpu,根据收包cpu和发包cpu的编号,可以选出编号为qf1f2的队列。

s403:收包cpu将数据包放入队列,发包cpu从相应的队列中取出数据包。

如步骤s402中所述,当确定了编号为f1的收包cpu与编号为f2的发包cpu的队列为编号为qf1f2的队列后。编号为f1的cpu将数据包放入队列qf1f2,编号为f2的cpu可以从编号为qf1f2的队列中取出数据包。由此,编号为f1的cpu可以通过qf1f2队列将数据包发送至编号为f2的发包cpu。

在本发明的一些实施例中,网卡与cpu的数量可以相同。由此,便于建立网卡与cpu之间的对应关系,使网卡与cpu之前一一对应。由此,便于网卡与cpu之间的无加解锁数据传输。

根据本发明实施例的网卡和cpu之间的数据传输装置100,如图6所示,数据传输装置100包括:处理模块10和传输模块20。

具体而言,结合图1和图6所示,处理模块10用于建立多个网卡与多个cpu之间的对应关系。通过建立网卡与cpu之间的对应关系,可以使网卡和cpu之间根据相应的对应关系进行数据传输。

传输模块20用于根据对应关系,在多个网卡与多个cpu之间进行无加锁数据传输。需要说明的是,多个网卡与多个cpu之间建立对应关系后,多个网卡与多个cpu之间可以通过相应的对应关系直接进行数据的传输,而无需在数据传输过程中进行加解锁操作。

根据本发明实施例的网卡和cpu之间的数据传输装置100,通过处理模块10建立网卡与cpu之间的对应关系,传输模块20在接收或转发数据包时,可以根据网卡与cpu之间的对应关系找到对应的cpu来操作数据包,使cpu与网卡之间可以通过相应的对应关系直接进行数据传输。由此,可以避免cpu与网卡之间数据传输时加解锁过程对cpu产生的大量损耗,从而有效提高了系统性能。

根据本发明的一些实施例,结合图2和图6所示,处理模块10具体用于:

对多个网卡和多个cpu分别进行编号。例如,假设系统中m个cpu和d块网卡,对系统中的d块网卡从0开始编号,网卡编号分别为g0,g1,…,g(d-1)。对系统中的cpu从0开始编号,cpu编号分别为f0,f1,…,f(m-1)。

根据网卡和cpu的编号,建立网卡与cpu之间的对应关系。需要说明的是,可以用系统中网卡的编号g通过计算找到对应编号f的cpu,编号为f的cpu即为处理编号为g的网卡对应的cpu。例如,可以采用相同编号建立网卡与cpu之间的对应关系,如编号为f0的cpu处理编号为g0的网卡,编号为f1的cpu处理编号为g1的网卡,以此类推。可以理解的是,还可以采用网卡与cpu的编号采用取余计算或其他计算方式建立对应关系。根据网卡和cpu的编号建立网卡与cpu之间对应关系的具体方式,在此不做限定,只要可以建立网卡与cpu之间的对应关系即可。

在本发明的一些实施例中,如图3所示,传输模块20具体用于控制网卡和cpu执行以下操作:

设发出数据包的cpu为收包cpu,接收数据包的cpu为发包cpu,网卡根据对应关系将数据包无加锁传输至相应的收包cpu。结合图3和图5所示,通过网卡与cpu之间的对应关系,找到操作编号为g1的网卡的cpu的编号为f1,网卡g1可以将数据包无加锁传输至编号为f1的cpu。

收包cpu计算得到出接口网卡。编号为f1的收包cpu接收数据包后,进入数据包转发逻辑处理,通过逻辑计算确定出接口网卡为编号为g2的网卡。

收包cpu将数据包通过队列发送给操作出接口网卡的发包cpu。在上述确定了出接口网卡为编号为g2的网卡后,根据网卡与cpu编号的对应关系,找到处理网卡g2的cpu为编号为f2的cpu。编号为f1的cpu通过队列将数据包发送至编号为f2的发包cpu。

发包cpu将数据包发送至出接口网卡。如上述所述,编号为f2的cpu接收数据包后,将数据包发送至编号为g2的出接口网卡。由此,实现了网卡与cpu之间无加解锁数据传输操作。

根据本发明的一些实施例,结合图4和图5所示,传输模块20在实现收包cpu将数据包通过队列发送给操作出接口网卡的发包cpu,具体包括:

在系统中创建m*m个队列,队列编号依次为:q01,q02,…,q(m-1)(m-1)。其中,编号为qab的队列,代表队列中发包的cpu的编号为a,从队列中收包的cpu的编号为b。

需要说明的是,在数据包的传输过程中,收包cpu通过逻辑计算确定出出接口网卡时,可以根据网卡与cpu的对应关系确定处理出接口网卡的发包cpu,而根据收包cpu和发包cpu的编号可以确定相应编号的队列,从而可以使收包cpu通过队列将数据包发送至发包cpu。

如图5所示,编号为f1的收包cpu通过逻辑计算确定出接口网卡为网卡g2,通过网卡与cpu的对应关系可以确定处理网卡g2的cpu为编号为f2的发包cpu,根据收包cpu和发包cpu的编号,可以选出编号为qf1f2的队列。

当确定了编号为f1的收包cpu与编号为f2的发包cpu的队列为编号为qf1f2的队列后。编号为f1的cpu将数据包放入队列qf1f2,编号为f2的cpu可以从编号为qf1f2的队列中取出数据包。由此,编号为f1的cpu可以通过qf1f2队列将数据包发送至编号为f2的发包cpu。

在本发明的一些实施例中,数据传输装置100中的网卡为单队列网卡。可以理解的是,单队列网卡成本低和使用方便,可以在多核cpu高性能架构下使用。由此,可以降低数据传输装置100的生产成本,提高数据传输装置100的性价比。

综上所述,根据本发明的网卡与cpu之间数据传输方法及装置可以有效提升多核cpu转发架构下单队列网卡的性能。

通过具体实施方式的说明,应当可对本发明为达成预定目的所采取的技术手段及功效得以更加深入且具体的了解,然而所附图示仅是提供参考与说明之用,并非用来对本发明加以限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1