一种多虚拟机应用的数据过滤方法
技术领域
本发明涉及一种高速网卡的数据包过滤方法,具体涉及一种多虚拟机应用的高速网卡的数据包硬件过滤方法。
背景技术
在服务器网卡的虚拟化应用中,需要通过虚拟化层软件实现物理网卡的共享,使每个虚拟机都认为自己是独占这块物理网卡的。这就需要实现对数据包的过滤及路由来保证每个虚拟机都能正确接收到发给自己的数据包。目前,很多网卡数据包的过滤和路由都是通过驱动软件和虚拟化层的软交换来实现的,内存数据移动开销、操作***切换开销、上层软件开销非常大,特别是通信负荷比较重的情况下***的性能很差。由此引入的开销占用大量的CPU资源,明显降低***的I/O通讯性能,也使得数据包的响应时间增长,如图1所示。正是由于这样才使得服务器网卡越来越成为虚拟化网络部署的瓶颈。
发明内容
为了解决上述问题,降低***资源的占用和CPU的使用率,缩短数据包处理响应时间,本发明提供了一种多虚拟机应用网卡的数据过滤传输方法,其改进在于:所述网卡上设有FPGA和网卡内存模块,所述FPGA包括过滤通道、数据通道、接收控制器和寄存器模块,所述过滤通道包括信息提取模块、目的MAC地址过滤模块、VLAN过滤模块、管理过滤模块和紧急中断过滤模块,所述网卡内存模块中为每个虚拟机创建一个虚拟机队列,所述方法采用如下步骤:
A、网卡的MAC模块收到数据包以后,将数据包同时发送到过滤通道和数据通道。
B1、所述数据通道对数据包数据进行拼接,将MAC模块接收到的8位宽的数据包数据拼接成128位宽,并在接收控制器中给出相应虚拟机队列地址。
B2、所述过滤通道对收到的数据包进行过滤,首先通过信息提取模块提取数据包目的MAC地址,然后通过目的MAC地址过滤模块对数据包的目的MAC地址进行过滤判断,并根据数据包的目的MAC地址过滤判断结果对数据包进行滤过处理;
所述数据包目的MAC地址包括:单播地址、组播地址和广播地址,所述单播地址数据包的过滤处理步骤包括:先将用单播地址数据包的MAC地址与管理MAC地址寄存器内预设的MAC地址信息进行比较,判断该数据包是否为管理包,是管理包的单播地址数据包直接进入管理过滤模块,否则通过HASH算法计算出所述单播地址数据包MAC地址的HASH值,根据所述HASH值判断是通过还是丢弃,通过的单播地址数据包进入VLAN过滤模块,所述VLAN过滤模块根据单播地址数据包的VLAN信息判断是通过还是丢弃,通过的单播地址数据包进入管理过滤模块,所述管理过滤模块对单播地址数据包进行checksum校验和决定过滤,通过checksum校验和决定过滤的单播地址数据包发送到相应的虚拟主机,所述决定过滤是将单播地址数据包的管理VLAN值、TCP/UDP端口、ARP及IP地址信息与主机中相应的寄存器内的预设信息进行比较判断是否通过;
所述广播地址数据包的过滤处理步骤包括:将所述广播地址数据包直接送入管理过滤模块,所述管理过滤模块对所述广播地址数据包进行checksum校验和决定过滤,通过checksum校验和决定过滤的广播数据包发送到相应的虚拟主机队列中;
所述组播地址数据包过滤处理步骤包括:将所述组播地址数据包直接送入管理过滤模块,所述管理过滤模块根据上层驱动设定的组播寄存器内预设的组播过滤算法判断组播地址数据包是否通过,通过的组播地址数据包直接发送到相应的虚拟主机队列中;
C、所述接收控制器将拼接后的数据包根据过滤结果发送到相应的虚拟机队列中,并且在一个数据包完成发送操作后将所述数据包对应的描述符写入到相应虚拟机队列预留的位置,当所述数据包的数据和对应的描述符都写到网卡内存模块中后根据MAC模块的good/bad frame信号及过滤结果对各个虚拟机队列的状态进行修改,保证上层主机能正确接收到有用的数据包。
本发明进一步优选技术方案为:所述虚拟机应用的数据过滤传输方法的步骤B2中,所述过滤通道还设有紧急中断过滤模块,所述紧急中断模块预设有紧急中断信息条件值,当数据包的TCP端口号,数据包长度符合所述中断信息条件值时,所述紧急中断模块将所述数据包立即上传并触发中断。
本发明更进一步优选技术方案为:所述虚拟机应用的数据过滤方法中,所述紧急中断模块中预设的紧急中断条件值还包括:当所述数据包的TCP头中的控制位URG、ACK、PSH、RST、SYN和FIN任何一位为1时都会触发立即中断。
本发明另一优选技术方案为:所述虚拟机应用的数据过滤方法的步骤A中,所述MAC模块通过FIFO实现数据包的时钟域的转换,FIFO出来的数据包同时送到过滤通道和数据通道。
本发明进一步优选技术方案为:所述虚拟机应用数据过滤方法中,所述网卡内存模块采用DDR2存储器。
本发明有益效果:利用硬件快速、高效的特点,通过在硬件中对接收到的数据包进行单播过滤、组播过滤、广播过滤、VLAN过滤、IP地址过滤、端口过滤、ARP过滤及硬件checksum校验,并根据过滤结果将数据包送到不同的虚拟机硬件队列中,在多虚拟应用的情况下减少虚拟机平台软交换对***CPU资源的消耗,降低CPU的使用率,减少CPU负担。同时由于硬件级别的处理速度远高于软件层次的处理速度,所以大大提高了数据处理速度,缩短数据处理时间。并行数据传输通道策略能保证数据线速传输,提高数据包传输速率。尤其在万兆网卡的虚拟机应用网络中,大大减少了***资源的浪费,提高虚拟机网络中整体的数据处理速率。
附图及附图说明
图1:传统的VMM的软交换示意图;
图2:TCP/IP数据包格式;
图3:本发明网卡硬件过滤示意图;
图4:本法发明过滤通道结构图。
具体实施方式
根据图2~4所示,在网卡上设有FPGA和DDR2存储器的硬件结构,对接收到的数据包的过滤处理通过FPGA逻辑来实现的,数据队列放在FPGA外部的DDR2存储器中的,FPGA内包括过滤通道、数据通道和接收控制器,过滤通道又包括信息提取模块、目的MAC地址过滤模块、VLAN过滤模块、管理过滤模块和紧急中断过滤模块,DDR2存储器为每个虚拟机创建一个虚拟机队列,本发明方法采用如下步骤:
A、网卡的MAC模块收到数据包以后,通过FIFO实现MAC125M时钟域到逻辑内部200M时钟域的转换,FIFO出来的数据包同时送到过滤通道和数据通道
B1、数据通道主要实现将MAC接收到的8位宽的数据数据拼接成128位宽,并在接收控制器中给出相应虚拟机队列地址,以满足DDR2数据接口宽度和突发接收时序;
B2、过滤通道对收到的数据包进行过滤,首先通过信息提取模块提取数据包目的MAC地址,然后通过目的MAC地址过滤模块对数据包的目的MAC地址进行过滤,并根据数据包的目的MAC地址过滤结果对数据包进行滤过处理;
数据包目的MAC地址包括:单播地址、组播地址和广播地址,单播地址数据包的过滤处理步骤包括:先用该数据包的MAC地址与管理MAC地址寄存器进行比较,判断该数据包是否为管理包,如果是管理包则直接进入管理过滤模块,否则通过设计好的HASH算法计算出该MAC地址对应的HASH值,该HASH值和存放虚拟机MAC地址的buffer的地址一一对应,这些MAC地址是由***在配置完虚拟机后由驱动写下来的,这样就可以由HASH值读出相应地址处的MAC地址,通过将提取出来的MAC地址和该MAC地址比较,如果一致则进入VLAN过滤模块,否则将该数据包丢弃;VLAN过滤模块中根据信息提取模块中提取出的播地址数据包的VLAN信息与主机的VLAN过滤寄存器内预设进行比较判断是否一致,VLAN信息一致的单播地址数据包进入管理过滤模块,否则将数据包丢弃;管理过滤模块对所有进入的数据包进行checksum校验和决定过滤,通过checksum校验和决定过滤的单播地址数据包发送到相应的虚拟主机,所述决定过滤是将单播地址数据包的管理VLAN值、TCP/UDP端口、ARP及IP地址信息与主机中相应的寄存器内的预设信息进行比较判断是否通过;
广播地址数据包的过滤处理步骤包括:将广播地址数据包直接送入管理过滤模块,管理过滤模块对所有进入的数据包进行checksum校验和决定过滤,通过checksum校验和决定过滤的广播数据包发送到相应的虚拟主机队列中;
组播地址数据包过滤处理步骤包括:祖播过滤寄存器来判断该数据包是接收还是丢弃。将组播地址数据包直接送入管理过滤模块,管理过滤模块根据根据上层驱动设定的组播寄存器内预设的组播过滤算法判断组播地址数据包是否通过,通过的数据包直接将数据包发送到相应的虚拟主机队列中;
过滤通道还设有紧急中断过滤模块,当***需要对一些特殊的包进行紧急处理时,在紧急中断模块预设有紧急中断信息条件值,当接收到数据包的TCP端口号,数据包长度符合所述中断信息条件值,或数据包TCP头中的控制位如URG、ACK、PSH、RST、SYN和FIN任何一位为1时时,紧急中断模块将所述数据包立即上传并触发中断。同样首先通过信息提取模块提取上述信息,然后与立即中断控制寄存器比较,如果匹配则会将控制描述符中的对应位置1,则pcie会根据该位触发立即中断。
C、所述接收控制器将通过过滤通道和数据通道后的数据包根据过滤结果发送到DDR2存储器中相应的虚拟机队列中,并且在一个数据包完成发送操作后将所述数据包对应的描述符写入到相应虚拟机队列预留的位置,当一个数据包的数据和对应的描述符都写到DDR2中后,根据MAC模块的good/bad frame信号及过滤结果对各个虚拟机队列的状态进行修改,保证上层主机能正确接收到有用的数据包。
本申请所有过滤环节的寄存器的值都是在芯片初始化的时候由上层软件配置在寄存器模块里来实现,该模块实现***中所有寄存器的配置和读写控制,过滤通道中用到的寄存器都是从寄存器模块读出来的。