一种基于macvlan的网络通信方法技术

技术编号:39404909 阅读:7 留言:0更新日期:2023-11-19 15:57
本发明专利技术提供一种基于macvlan的网络通信方法,具体的:步骤S11、数据包进入macvlan_handle_frame处理函数,对数据包进行重组;步骤S12、判断当前接收队列长度是否小于1000,若是,则进入S13,若否,则进入S14;步骤S13、将数据包加入接收队列,使用queue_work system_unbound_wq唤醒接收队列处理函数macvlan_process_broadcast,对数据包进行处理;步骤S14、丢弃数据包。丢弃数据包。丢弃数据包。

【技术实现步骤摘要】
一种基于macvlan的网络通信方法


[0001]本专利技术涉及一种Linux网络通信,尤其涉及一种基于macvlan的网络通信方法。

技术介绍

[0002]组播广播包处理流程中当macvlan虚拟网卡增多时,组播广播包处理耗时就会增加,而数据帧处理流程的耗时不会随着macvlan虚拟网卡的数量增加而增加。如图1所示,数据帧处理流程中使用schedule_work调度组播广播包处理,会使macvlan_handle_frame和macvlan_process_broadcast在同一个CPU核上执行,数据帧处理占用CPU资源比较高,组播广播包处理时间复杂度为O(n*n)同样需要比较多的CPU资源。数据帧处理负责入队,组播广播包处理负责出队,两者在同一个CPU上竞争,当CPU资源不够时,存在入队速度大于出队速度情况,就会导致接收队列满(接收队列大于1000),数据帧处理流程就会产生丢包。
[0003]在实际的生产环境中发生组播丢包时,系统中某一个CPU核占用率高达93.8%。

技术实现思路

[0004]针对上述问题,本专利技术提供一种基于macvlan的网络通信方法。通过macvlan虚拟出来的网卡MAC地址独立于物理网卡,解决了多IP共用MAC地址的问题;对每个macvlan虚拟网口都创建一个工作队列,使多个macvlan虚拟网卡的组播广播包处理流程能够并行化。
[0005]为实现上述目的,本专利技术公开了基于macvlan的网络通信方法,具体步骤为:
[0006]步骤S11、数据包进入macvlan_handle_frame处理函数,对数据包进行重组;
[0007]步骤S12、判断当前接收队列长度是否小于1000,若是,则进入S13,若否,则进入S14;
[0008]步骤S13、将数据包加入接收队列,使用queue_work system_unbound_wq唤醒接收队列处理函数macvlan_process_broadcast,对数据包进行处理;
[0009]步骤S14、丢弃数据包。
[0010]进一步的,所述步骤S13中的数据包处理具体为:
[0011]步骤S21、判断接收队列是否为空,若是,则结束处理过程,若否,则进行下一步;
[0012]步骤S22、从接收队列中取出数据包;
[0013]步骤S23从vlan_list虚拟网卡列表中获取一个macvlan虚拟网卡macvlan_ptr;
[0014]步骤S24、判断虚拟网卡macvlan_ptr是否为空指针,若是,则返回步骤S21,若否,则进行步骤S25;
[0015]步骤S25、克隆数据包,将克隆后的数据包发送到macvlan虚拟网卡macvlan_ptr;
[0016]步骤S25、返回步骤S23获取下一个macvlan虚拟网卡。
[0017]进一步的,数据包处理过程的时间复杂度O为(n*n),其中,n为macvlan虚拟网卡macvlan_ptr的数量。
[0018]进一步的,所述步骤S11之前还包括:
[0019]设置多个macvlan虚拟网卡,为每个macvlan虚拟网卡的网口创建一个单独的工作
队列,工作队列处理函数为macvlan_process_broadcast;
[0020]判断接收缓冲队列中数据包是否被所有macvlan虚拟网卡标记;
[0021]若已经被所有macvlan虚拟网卡标记,则释放该数据包。
[0022]进一步的,所述数据包处理流程为:
[0023]步骤S31、检测接收队列中是否存在未被所有macvlan虚拟网卡标记的数据包,若是,则进行步骤S32,若否,则结束当前流程;
[0024]步骤S32、克隆接收队列中未被所有macvlan虚拟网卡标记的数据包;
[0025]步骤S33、对接收队列中的数据包进行标记;
[0026]步骤S34、将克隆后的数据包发送到macvlan虚拟网卡,返回步骤S31。
[0027]本专利技术的一种基于macvlan的网络通信方法的有益效果为:通过macvlan虚拟出来的网卡MAC地址独立于物理网卡,解决了多IP共用MAC地址的问题;对每个macvlan虚拟网口都创建一个工作队列,使多个macvlan虚拟网卡的组播广播包处理流程能够并行化。
附图说明
[0028]下面结合附图和具体实施方式对本专利技术作进一步详细的说明。
[0029]图1是本专利技术
技术介绍
的macvlan_handle_frame组播广播包处理流程示意图。
[0030]图2是本专利技术的macvlan_process_broadcast组播广播包处理流程示意图。
[0031]图3是本专利技术的macvlan_handle_frame组播广播包处理流程示意图。
[0032]图4是本专利技术的单个cpu处理多个macvlan数据的示意图。
[0033]图5是本专利技术的多个cpu并行处理多个macvlan数据的示意图。
[0034]图6是本专利技术的macvlan_handle_frame组播广播包进一步的改进后的处理流程示意图。
[0035]图7是本专利技术的macvlan_process_broadcast组播广播包进一步改进后的处理流程示意图。
具体实施方式
[0036]下面结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述。在下面的描述中阐述了很多具体细节以便于充分理解本专利技术,但是本专利技术还可以采用其他不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本专利技术内涵的情况下做类似推广,因此本专利技术不受下面公开的具体实施例的限制。
[0037]本专利技术公开了基于macvlan的网络通信方法,具体步骤为:
[0038]步骤S11、数据包进入macvlan_handle_frame处理函数,对数据包进行重组;
[0039]步骤S12、判断当前接收队列长度是否小于1000,若是,则进入S13,若否,则进入S14;
[0040]步骤S13、将数据包加入接收队列,使用queue_work system_unbound_wq唤醒接收队列处理函数macvlan_process_broadcast,对数据包进行处理;
[0041]步骤S14、丢弃数据包。
[0042]为进一步优化上述技术方案,步骤S13中的数据包处理具体为:
[0043]步骤S21、判断接收队列是否为空,若是,则结束处理过程,若否,则进行下一步;
[0044]步骤S22、从接收队列中取出数据包;
[0045]步骤S23从vlan_list虚拟网卡列表中获取一个macvlan虚拟网卡macvlan_ptr;
[0046]步骤S24、判断虚拟网卡macvlan_ptr是否为空指针,若是,则返回步骤S21,若否,则进行步骤S25;
[0047]步骤S25、克隆数本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于macvlan的网络通信方法,其特征在于,具体步骤为:步骤S11、数据包进入macvlan_handle_frame处理函数,对数据包进行重组;步骤S12、判断当前接收队列长度是否小于1000,若是,则进入S13,若否,则进入S14;步骤S13、将数据包加入接收队列,使用queue_work system_unbound_wq唤醒接收队列处理函数macvlan_process_broadcast,对数据包进行处理;步骤S14、丢弃数据包。2.基于权利要求1所述的一种基于macvlan的网络通信方法,其特征在于,所述步骤S13中的数据包处理具体为:步骤S21、判断接收队列是否为空,若是,则结束处理过程,若否,则进行下一步;步骤S22、从接收队列中取出数据包;步骤S23从vlan_list虚拟网卡列表中获取一个macvlan虚拟网卡macvlan_ptr;步骤S24、判断虚拟网卡macvlan_ptr是否为空指针,若是,则返回步骤S21,若否,则进行步骤S25;步骤S25、克隆数据包,将克隆后的数据包发送到macvlan虚拟网卡macvlan_ptr;步骤S25、返回步骤S2...

【专利技术属性】
技术研发人员:张向前淡建群高华张金鹏
申请(专利权)人:麒麟软件有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1