一种多网络接口绑定系统及方法
技术领域
本发明设计多核处理器以及网络处理领域,尤其是多核处理器上的异构操作系统网络处理领域,具体涉及一种多网络接口绑定系统及方法。
背景技术
随着处理器技术的不断发展,多核处理器的使用逐渐成为趋势。随着人们对处理器速度、应用前景、功耗等等性能方面要求更进一步的提高,多核处理器已经成为服务器和个人操作平台的主流。
目前许多操作系统都支持多核处理器,比如Linux可以通过使用SMP方式来支持多核处理器,多个处理核心共同支持一个操作系统。而且还可以在一颗多核处理器的不同处理核心上同时运行多个操作系统,甚至是异构的操作系统。
目前的网络带宽不断提高,CPU的处理性能也不断增强,主流的服务器上都有多个网络接口。为了提供更大的数据带宽,多网络接口绑定技术把多块物理网络接口汇聚在一起,组成一个单一的虚拟网络接口,操作系统将这些聚集的网络接口作为一个网络接口来处理。服务器上的多块网络接口不仅绑定一个IP,MAC地址也设定为同一个,构成一个虚拟的网络接口,客户端向服务器请求数据,服务器上的网络接口接到请求后,网络接口根据某种算法智能决定由谁来处理数据的传输。多网络接口技术可以提高主机的网络吞吐量和可用性。
现有技术的Linux的多网络接口绑定技术是在网络接口驱动程序之上、数据链路层之下实现的一个虚拟层,它将多个网络接口虚拟成一块虚拟网络接口。所以多网络接口绑定驱动程序实际上是一种中间驱动程序,是基本网络接口驱动程序与网络协议栈之间的接口。绑定驱动程序统一管理和配置绑定设备内的网络接口资源。
且现有技术的Linux上的多网络接口绑定技术由于多个网络接口对于操作系统是透明的,所以在多个网络接口之外,必须借助于交换机才能正常工作,极大地影响了使用的灵活性。并且由于Linux的多网络接口绑定技术是在操作系统内的各个网络接口的驱动程序之上添加了一层驱动程序,由于绑定驱动程序和操作系统的开销,往往多个网络接口绑定之后不能达到性能的线性叠加。
发明内容
本发明的目的在于充分利用多核处理器的特点,在异构操作系统上实现多网络接口绑定,提出了一种多核处理器异构操作系统上实现多网络接口绑定的方法。该方法克服Linux多网络接口绑定技术绑定之后增加Linux系统处理开销的缺点,获得比Linux操作系统现有的多网络接口绑定技术更高的效率,及本发明提供一种多网络接口绑定系统及方法。
为实现上述目的,本发明提供了一种多网络接口绑定系统,其特征在于,该系统基于一颗多核处理器上同时运行Linux操作系统和实时操作系统,所述实时操作系统上包含针对若干网络接口的物理网络接口驱动模块和网络接口绑定处理模块,所述Linux操作系统上包含一个虚拟网络接口驱动模块和用户配置管理接口;
其中,所述物理网络接口驱动模块,用于负责管理控制网络接口,收发物理网络数据;
所述网络接口绑定处理模块,用于负责:
在接收侧,从物理网络接口驱动模块接收数据包,按照数据接收处理规则库中的规则处理接收的数据包,然后将处理后的数据包递交给所述虚拟网络接口驱动模块,该驱动模块再将数据传送至Linux操作系统上的网络协议栈进行处理,完成来自实时操作系统的多网络接口的数据包的接收;
在发送侧,从所述虚拟网络接口驱动模块接收待发送的数据包,按照数据发送规则库中的规则对数据包进行处理,将处理后的数据包递交给所述物理网络接口驱动模块驱动网络接口进行发送;
所述用户配置管理接口,用于接收用户的配置管理信息,并将该信息输入所述网络接口绑定处理模块。
上述技术方案中,所述用户的配置管理信息包含:所述Linux操作系统的虚拟网络设备的IP地址和MAC地址;和所述实时操作系统的若干网络接口的IP地址、MAC地址及绑定处理算法;所述绑定处理算法包含:轮转算法、热备份算法、MAC地址异或算法、广播算法、自适应发送负载均衡算法和自适应负载均衡算法。
上述技术方案中,所述网络接口绑定处理模块进一步包含如下子模块:
配置管理子模块,用于接收所述用户配置管理接口发送的用户配置管理信息,依据用户配置管理信息生成数据接收处理规则库和数据发送处理规则库;
数据接收处理子模块,用于对实时操作系统的网络接口接收的数据包按照接收处理规则库中的规则进行处理同时更新数据接收信息表,并将处理后的数据包发送至所述的虚拟网络接口驱动模块;
数据发送处理子模块,用于对虚拟网络接口驱动模块发送的数据按照数据发送处理规则库中的规则进行处理同时更新数据发送信息表,将处理后的数据包发往所述物理网络接口驱动模块驱动网络接口进行发送。
所述配置管理子模块从所述用户配置管理接口获取配置信息,然后选择相应的绑定处理算法生成数据接收处理规则库;同时根据选定的绑定处理算法、接收数据流信息和发送数据流信息生成数据发送规则库。
上述技术方案中,所述虚拟网络接口驱动模块进一步包含:发送子模块数和接收子模块;所述接收子模块通过核间通信机制从所述数据接收处理子模块获取数据包,并将数据包提交给Linux操作系统的网络协议栈处理;所述发送子模块用于将经由Linux操作系统的网络协议栈处理完的数据包通过核间通信机制发送至数据发送处理子模块进行发送相关的处理。
基于上述系统本发明还提供一种多网络接口绑定方法,该方法基于一颗多核处理器上同时运行Linux操作系统和实时操作系统,且所述实时操作系统上包含针对若干网络接口的物理网络接口驱动模块和网络接口绑定处理模块,所述Linux操作系统上包含虚拟网络接口驱动模块和用户配置管理接口,所述方法包含如下步骤:
用于生成网络接口绑定处理模块包含的数据发送规则库及数据接收规则库的步骤,该步骤具体包含:用户配置管理接口将用户配置管理信息发送给网络接口绑定处理模块;网络接口绑定处理模块获取配置信息,选择相应的绑定处理算法生成数据接收处理规则库,该规则库用于处理实时操作系统接收的多网卡数据包;并根据选定的绑定处理算法、接收数据流信息和发送数据流信息生成数据发送规则库,该规则库用于处理来自Linux操作系统需网络接口发送的数据包;
用于依据数据接收规则库处理接收的来自多网络接口的数据包的步骤如下:
步骤201)绑定处理模块接收每个网络接口的数据包,按照数据接收处理规则库中的规则处理接收的数据包;
步骤202)将处理后的数据包生成数据接收核间消息,并通过核间通信机制将数据接收核间消息递交给所述Linux操作系统上的虚拟网络接口驱动模块;
步骤203)Linux操作系统的虚拟网络接口驱动模块接收数据接收核间消息,获取数据包;
用于依据数据发送规则库处理需经由网络接口发送的数据包的步骤如下:
步骤301)Linux操作系统的虚拟网络接口驱动模块将Linux网络协议栈处理完的数据包生成数据发送核间消息,并通过核间通信机制发送给网络接口绑定处理模块;
步骤302)绑定处理模块通过核间通信机制接收数据发送核间消息,获取数据包;
步骤303)绑定处理模块将获取的数据包按照发送处理规则库中的规则进行处理,将处理后数据包递交给物理网络接口驱动模块进行发送。
上述技术方案中,所述用于数据接收的步骤中的步骤202)和203)之间还包含如下步骤:依据数据接收核间消息更新数据接收信息表;所述用于数据发送的步骤中的步骤303)之后还包含:依据处理后的数据更新数据发送信息表。
上述技术方案中,所述用于依据数据接收规则库处理接收的来自多网络接口的数据包的步骤具体包含:物理网络接口驱动模块获取网络接口接收的数据包,并将数据包按照接收处理规则库进行处理,并将相关处理后的数据包发送至所述的虚拟网络接口驱动模块;
所述用于依据数据发送规则库处理需经由网络接口发送的数据包的步骤具体包含:网络接口绑定处理模块接收来自Linux操作系统的待发送的数据包,并按照数据发送处理规则库的规则进行处理,将处理后的数据包发往所述物理网络接口驱动模块驱动网络接口进行数据包发送。
所述用户的配置管理信息包含:所述Linux操作系统的虚拟网络设备的IP地址和MAC地址;和所述实时操作系统的网络接口的IP地址、MAC地址及绑定处理算法;所述绑定处理算法包含:轮转算法、热备份算法、MAC地址异或算法、广播算法、自适应发送负载均衡算法和自适应负载均衡算法。
可选的,所述实时操作系统和Linux操作系统之间通过核间消息进行通信。
与现有技术相比,本发明的技术优势在于:
本发明提供了一种多核处理器异构操作系统上实现多网络接口绑定的方法,充分利用了多核处理器和异构操作系统的特点,在不借助交换机以及借助交换机时都可以正常工作,极大提高了使用的灵活性,并且绑定之后的数据处理也更加高效,使多个网络接口绑定之后达到性能的线性叠加。
附图说明
图1现有技术的Linux多网络接口绑定技术的系统框架图;
图2本发明的系统的组成框架图;
图3本发明的用于配置管理流程图;
图4本发明的多网络接口的数据接收流程图;
图5本发明的多网络接口的数据发送流程图;
图6本发明实施例的系统组成框图。
具体实施方式
下面结合附图对本发明的技术方案进行详细阐述。
本发明提出了一种在多核处理器异构操作系统上实现多网络接口绑定的方法,在一颗多核处理器上同时运行Linux操作系统和实时操作系统,Linux操作系统和实时操作系统运行于不同的处理核心上,实时操作系统上运行物理网络接口驱动模块和网络接口绑定处理模块,Linux操作系统上一个运行虚拟网络接口驱动模块和用户配置管理接口。物理网络接口驱动模块负责管理控制网络接口,收发物理网络数据。网络接口绑定处理模块负责:在接收侧,从物理网络接口驱动模块接收驱动获取数据,按照数据接收处理规则进行处理,然后将数据递交给Linux上的虚拟网络接口驱动模块;在发送侧,从Linux上的虚拟网络接口驱动模块接收数据,按照数据发送规则进行处理,然后将数据递交给物理网络接口驱动模块进行发送。
网络接口绑定处理模块进一步包含:配置管理子模块、数据接收处理子模块、数据发送处理子模块、数据接收处理规则库、数据发送规则库、数据接收信息表和数据发送信息表。
配置管理子模块通过用户配置管理接口获取用户配置管理信息;依据用户配置管理信息选择相应的绑定处理算法生成数据接收处理规则库;并根据选定的绑定处理算法、接收数据流信息和发送数据流信息生成数据发送规则库。
数据接收处理子模块接收每个网络接口的数据,按照接收处理规则库中的规则进行处理,然后将数据通过核间通信机制递交给Linux上的虚拟网络接口驱动模块,同时更新数据接收信息表。
数据发送处理子模块通过核间通信机制从虚拟网络接口驱动模块接收数据,按照发送处理规则库中的规则进行处理,然后将数据递交给数据递交给物理网络接口驱动模块进行发送,同时更新数据发送信息表。
Linux操作系统的虚拟网络接口驱动模块包括发送子模块和接收子模块;接收子模块通过核间通信机制数据接收处理子模块获取数据包,将数据包提交给Linux网络协议栈处理;发送子模块将Linux网络协议栈处理完的数据包通过核间通信机制发送个数据发送处理子模块。
用户配置管理接口接收用户配置管理信息,通过核间通信机制将配置信息传递给绑定程序的配置管理子模块。用户配置信息主要包括Linux虚拟网络设备的IP地址和MAC地址、实时操作系统的网络接口的IP地址和MAC地址和绑定处理算法选择信息。
核间通信机制是借助处理核心之间的消息交互、数据内存共享等方法实现,按功能分为数据交互信息和配置管理交互信息。数据交互信息包括处理核心间消息和共享内存,配置交互信息只包含处理核心间通信消息。消息类型包括数据包发送、数据包接收、用户配置管理。
数据包发送和数据包接收类型的消息包括以下字段:消息类型、数据包长度、数据包共享内存起始物理地址、网络接口编号、目的核组号;用户配置管理类型的消息包括以下字段:消息类型、Linux虚拟网络设备IP地址、Linux虚拟网络设备MAC地址、网络接口编号、网络接口IP地址、网络接口MAC地址、目的核组号、绑定处理算法。
数据接收信息表包括接收数据包的源MAC地址、源IP地址、接收网络接口编号、接收流量统计信息。接收流量统计信息包括接收数据包总数、接收有效数据包总数,接收无效数据包总数,接收总字节数、接收总码率。数据发送信息表包括发送数据包的目的MAC地址、目的IP地址、发送网络接口编号、发送流量统计信息。发送流量统计信息包括发送总数据包数,发送失败数据包数和发送总码率。数据接收信息表和数据发送信息表的预留字段用于扩展记录数据包的其他信息,如TCP端口等。
绑定处理算法可以轮转算法、热备份算法、MAC地址异或算法、广播算法、自适应发送负载均衡算法、自适应负载均衡算法。
配置管理流程如下:
(1)Linux上的用户配置管理接口将绑定处理模块配置信息封装成用户配置管理核间消息;
(2)Linux上的用户配置管理接口通过核间通信机制将核间消息发送给绑定处理模块的配置管理子模块;
(3)绑定处理模块的配置管理子模块接收核间消息,获取绑定处理模块配置信息;
(4)绑定处理模块的配置管理子模块根据绑定处理模块配置信息选择相应的绑定处理算法生成数据接收处理规则,根据选定的绑定处理算法、接收数据流信息、发送数据流信息生成数据发送规则。
数据接收流程如下:
(1)绑定处理模块的数据接收处理子模块接收每个网络接口的数据包,将数据包存入共享内存中,按照接收处理规则进行处理;
(2)绑定处理模块的数据接收处理子模块生成数据接收核间消息,并通过核间通信机制将数据接收核间消息递交给Linux上的虚拟网络接口驱动模块;
(3)绑定处理模块的数据接收处理子模块更新数据接收信息表;
(4)Linux虚拟网络接口驱动模块的接收函数通过核间通信机制接收数据接收核间消息,获取数据包,并将数据包提交给Linux网络协议栈处理。
数据发送流程如下:
(1)Linux虚拟网络接口驱动模块的发送函数将Linux网络协议栈处理完的数据包存放到共享内存中,生成数据发送核间消息,并通过核间通信机制发送给绑定处理模块的数据发送处理子模块;
(2)绑定处理模块的数据发送处理子模块通过核间通信机制接收数据发送河间消息,获取数据包;
(3)绑定处理模块的数据发送处理子模块按照发送处理规则进行处理,然后将数据递交给数据递交给物理网络接口驱动模块进行发送;
(4)绑定处理模块的数据发送处理子模块更新数据发送信息表。
实施例
本发明提出了一种在多核处理器异构操作系统上实现多网络接口绑定的方法,现提供一种具体实施例,该实施例基于Cavium公司的OCTEON CN5860处理器。
CN5860处理器一共拥有16个处理核心,可以运行Linux操作系统和实时操作系统SE(Simple Executive,简单执行环境)。CN5860处理器使用work消息体进行核间通信。CN5860处理器集成了POW、FPA等协处理器。FPA是共享内存池管理协处理器,管理着预先分配的共享内存池,Linux和SE都可以访问。POW是一个核间消息队列管理协处理器,管理着核间通信的work队列,并对work进行调度。
在本实施例中,使用3个核心运行实时操作系统,13个核心运行Linux操作系统。如图6所示,使用OCTEON CN5860的4个port(网络接口)来实现port绑定。实时操作系统的3个处理核分别运行数据接收处理子模块、配置管理子模块和数据发送处理子模块。系统初始化时,SE网络接口驱动模块运行在配置管理子模块上。SE网络接口驱动模块完成对port和协处理器的初始化。数据接收时,SE网络接口驱动模块将接收的数据包封装成work消息和FPA buffer的方式。数据发送时,SE网络接口驱动模块将封装成work消息和FPA buffer的数据包通过port发送出去。数据接收处理子模块核的组号为SE_RECV_GROUP,数据发送处理子模块核的组号为SE_SEND_GROUP,配置管理子模块核的组号为SE_CONF_GROUP。13个Linux处理核同处理一个组号LINUX_GROUP。下面分别以配置管理流程,数据接收流程和数据发送流程来说明。
配置管理流程如下:
(1)Linux上的用户配置管理接口将用户配置管理信息封装成work;
(2)Linux上的用户配置管理接口将work提交到POW的SE_CONG_GROUP;
(3)SE上的配置管理子模块从POW获取work,并解析出绑定处理模块配置信息,主要包括Linux虚拟网络设备的IP地址和MAC地址、实时操作系统的网络接口的IP地址和MAC地址和绑定处理算法选择信息;
(4)SE上的配置管理子模块根据绑定处理模块配置信息,选择相应的绑定处理算法生成数据接收处理规则;配置管理子模块根据选定的绑定处理算法、接收数据流信息、发送数据流信息生成数据发送规则。
数据接收流程如下:
(1)SE网络接口驱动模块网络接口驱动模块将port接收的数据包存放在FPAbuffer中,并生成work提交到POW的SE_RECV_GROUP组;
(2)SE的数据接收处理子模块接收work,从work中获取数据包起始物理地址和数据包长度等信息;
(3)SE的数据接收处理子模块按照接受处理规则处理数据包,更新数据接收信息表,并将work提交到POW的LINUX_GROUP组;
(4)Linux操作系统上的虚拟网络接口驱动模块的接收函数接收work,从work中获取数据包起始物理地址和数据包长度等信息,将数据包提交给Linux网络协议栈处理。
数据发送流程如下:
(1)Linux网络协议栈将处理完的数据包提交给Linux虚拟网络接口驱动模块的发送函数,Linux虚拟网络接口驱动模块的发送函数将数据包拷贝到FPA buffer中,然后生成一个work,将数据包的长度和FPA buffer的起始物理地址填写到work中,然后将work提交给POW的SE_SEND_GROUP组;
(2)SE的数据发送处理子模块收到work之后,从work中获取数据包FPAbuffer的起始物理地址和数据包长度等信息;
(3)SE的数据发送处理子模块根据发送处理规则处理数据包,将work和FPAbuffer提交给SE网络接口驱动模块发送;
(4)SE的数据发送处理子模块更新数据发送信息表。
总之,本发明提供了一种多核处理器异构操作系统上实现多网络接口绑定的方法。具体是指:在一颗多核处理器上同时运行Linux操作系统和实时操作系统,实时操作系统上运行物理网络接口驱动模块和网络接口绑定处理模块,Linux操作系统上一个运行虚拟网络接口驱动模块和用户配置管理接口。绑定处理模块分为配置管理子模块、数据接收处理子模块、数据发送处理子模块、数据接收处理规则库、数据发送规则库、数据接收信息表和数据发送信息表。物理网络接口驱动模块负责管理控制网络接口,收发物理网络数据。网络接口绑定处理模块负责:在接收侧,从物理网络接口驱动模块接收驱动获取数据,按照数据接收处理规则进行处理,然后将数据递交给Linux上的虚拟网络接口驱动模块;在发送侧,从Linux上的虚拟网络接口驱动模块接收数据,按照数据发送规则进行处理,然后将数据递交给物理网络接口驱动模块进行发送。该多网络接口绑定方法改善了Linux上多网络接口绑定方法的处理效率和灵活性。
需要指出的是,以上所述仅为本发明在Cavium OCTEON CN5860处理器上的实施例,并非用来限定本发明的实施范围,本发明也可以根据以上实例用于其他多核处理器平台实现多网络接口绑定,具有专业知识基础的技术人员可以由以上实施实例实现本发明,因此凡是根据本发明所作的等效的变化与修改,都被本发明的专利范围所覆盖。