1. 概述
网络虚拟化是云平台的核心组件之一,本文简单介绍了常见kvm虚拟网卡、网桥技术,自建私有云网络演化过程以及兼顾性能和性价比的SR-IOV技术实践。
2. 认识KVM网卡和网桥
首先我们先一起理解KVM里发送一个数据包从虚拟机到物理机的完整过程。
数据包从虚拟机中出来后,进入virtio的虚拟网卡,然后再进入kvm的虚拟层,最后通过网桥把数据包传入内核,最后到达物理网卡。上面一个流程跑下来,你一定会想能否跳过其中一个步骤或是多个步骤,简化架构提升性能。
2.1 KVM网络接口简介
KVM网络接口(虚拟网卡)一般有四种,分别是 virtio 、vhost-net 、 PCI Path-through 、 SR-IOV,模型如下:
1. Virtio纯虚拟化网卡,性能最弱。(这种即上图所说的完整流程,一般不使用)
2. Vhost-net半虚拟化网卡,跳过虚拟层直接跳转到内核网桥。
可以看到虚拟机的数据包直接跳过了虚拟网卡直接和kvm的虚拟层交换数据,减少一层损耗。这种架构只是解决了从虚拟机发包出去时候跳过虚拟网卡,但并没有在接收数据时候也跳过虚拟网卡。所以当你用发包工具测试的时候会发现虚拟机内部往外发包和外面往内发包的结果不一样,会有15%-20%的差距。
3. Pci Path-through独占网卡,这种就是虚拟机的收发直接和物理网卡数据交换,去掉中间的部分,所以性能最好。
4. SR-IOV 将原来vswitch的活儿直接集成到了网卡芯片中,硬件化虚拟网卡VF,一般能达到原生网卡的一半性能。这种架构和Pci Path-through区别在于,一个是独享,另外一个就是共享,架构几乎是一样的。
而KVM网桥承担着路由交换功能,常见的有linux-bridge 和 openvswitch(相比前者、性能更好),openstack M版及以后默认采用openvswitch。
2.2 KVM网络接口性能测试
对比测试不同架构和网桥技术的pps的数据,同时也比较了包的大小对pps的影响。 包大小分别采用了:64 bytes(小包),1518 bytes(大包)。
3. 了解openvswitch L2 L3层
Openvswitch是一个虚拟交换软件,功能强大,可支持L2和L3两种软交换机功能。
L2层支持local gre vlan xvlan协议。
L3层支持flat vlan协议。
下面分别简介各协议:
3.1 GRE
GRE:General Routing Encapsulation,一种通过封装来实现隧道的方式,其拥有以下特点:
-
跨不同网络实现二次IP通信。
-
L3上面包装L3。
-
封装在IP报文中。
-
点对点隧道。
GRE缺点:
-
增加了GRE表头会导致本应由交换机硬件来分片的变成由软件来分片(STT技术可以弥补这一点),所以一般我们会关闭网卡的GRO,以及改小MTU。
-
GRE广播,且遂道将虚拟二层打通了,广播风暴更厉害。但对于虚机来说,因为虚拟交换机是完全能够知道虚机的IP和MAC地址的映射关系的,根本不需要通过ARP广播来根据IP找MAC地址。
3.2 VLAN
VLAN: Vi