网络虚拟化技术

网络虚拟化技术

数据包从虚拟机到物理机过程:

虚拟机 -> QEMU虚拟网卡 -> 虚拟化层 -> 内核网桥 -> 物理网卡

半虚拟化技术使数据包跳过QEMU虚拟网卡,从虚拟机直接到虚拟化层,
虚拟网卡性能排序:

半虚拟化网卡(virtio) > 全虚拟化网卡(e1000,rtl8139)

MacVTap 和vhost-net技术

  • MacVTap跳过内核网桥
  • vhost-net跳过虚拟化层
    使用vhost_net,必须使用Virtio半虚拟化网卡

MacVTap技术

简化虚拟化环境中的交换网络,代替传统的Linux TAP设备加Bridge设备组合
MacVTap设备有3中不同的工作模式:

  • VEPA
    同一物理网卡下的MacVTap设备之间的流量要发送到外部交换机,再由外部交换机转发回来,前提是交换机支持hairpin模式
  • Bridge
    类似传统的Linux Bridge,同一物理网卡下的MacVTap设备可以一直接通信
  • Private
    同一物理网卡下的MacVTap设备互相无法联通

创建MacVTap端口过程

ip link add link eth0 name MacVTap0 type MacVTap
ip link set MacVTap0 address 1a:in:in:ij:fa:sd up
ip link show MacVTap0

KVM虚拟机使用MacVTap网络
在xml文件配置如下


  
  
  
  

虚拟机开启后,宿主系统会自动创建一台MacVTap设备给虚拟机使用,这台MacVTap设备附属于母设备eth0,工作模式为Bridge

vhost_net技术

运行一台虚拟机是由用户空间的 QEMU 和内核的 KVM 共同完成的, QEMU 负责模拟各种设备提供给虚拟机, KVM 负责完成 CPU 和内存的虚拟化。 Virtio 的后端处理程序一般是由用户空间的 QEMU 提供的。 为了进一步减少延迟、提高性能, 比较新的内核中增加了一个 vhost_net 的驱动模块, 在内核中实现了 Virtio 的后端处理程序。

xml文件配置

 
     
     
    
    
    

网卡中断与多队列

1.物理网卡的中断与多队列

RSS 是网卡的硬件特性, 实现多队列, 将不同的流分发到不同的CPU上, 同一数据流始终在同一CPU 上, 避免 TCP的顺序性和 CPU 的并行性发生冲突。基于流的负载均衡, 解决了顺序协议和CPU并行的冲突及Cache热度问题。

查看网卡是否支持RSS:
ls /sys/class/net/eth0/queues/

2.绑定中断

CentOS系统中依靠 irqbalance服务优化中断分配,irqbalance服务用于优化中断分配,它会自动收集系统数据以分析使用模式,并依据系统负载状况将工作状态置于Performance mode 或 Power-save mode。

  • 处于Performance mode 时,irqb alance 会将中断尽可能均匀地分发给各个 CPU core,以充分利用CPU 多核, 提升性能。
  • 处于Power-save mode 时,irqbalance会将中断集中分配给第一个CPU, 以保证其他空闲 CPU 的睡眠时间,降低能耗。

irqbalance服务在大压力情况下,尤其是万兆网卡上,有中断漂移及分配不平均的现象。如果压力比较大,可以手工调整系统的网卡中断。

3.多队列Virtio网卡
查看是否支持:
grep IFF_MULTL_QUEUE /usr/include/Linux/if_tun.h
多队列Virtio网卡配置:


  
  
  
  
  

N 1-8最多支持8个队列,在虚拟机上执行以下命令开启多队列网卡:
ethtool -L eth0 combined M
M 1-N,M小于等于N

网卡 PCI Passthrough 技术

如果虚拟机对网络的要求非常高, 通过 PCI Passthrough 技术将物理网卡直接给虚拟机使用, 虚拟机将单独使用网卡, 可以达到几乎和物理网卡一样的性能。
PCI Passthrough跳过QEMU虚拟网卡,虚拟化层,内核网桥,直接让虚拟机与物理网卡连接

PCI Passthrough配置
1.查看网卡设备信息:
lspci或者virsh nodedev-list --tree

  +- pci_0000_00_11_0
  |   |
  |   +- pci_0000_02_00_0
  |   |   |
  |   |   +- net_ens32_00_0c_29_c2_6d_e4
  |   |     
  |   +- pci_0000_02_01_0
  |       |
  |       +- net_ens33_00_0c_29_c2_6d_ee

2.得到pci_0000_02_00_0的配置信息
virsh nodedev-dumpxml pci_0000_02_00_0


  pci_0000_02_00_0
  /sys/devices/pci0000:00/0000:00:11.0/0000:02:00.0
  pci_0000_00_11_0
  
    e1000
  
  
    0
    2
    0
    0
    82545EM Gigabit Ethernet Controller (Copper)
    Intel Corporation
  

3.编辑虚拟机xml文件,加入PCI设备信息


  
    

SR-IOV虚拟化技术

SR-IOV (Single Root I/O Virtualization)是一个 PCI 快捷标准,把单一物理 PCI 功能扩展到同分散的虚拟化功能(VF)一样共享 PCI 资源。通过 PCI 设备分配,每个功能可以被不同虚拟机使用。

SR-IOV 上有两个功能类型。

  • Physical Functions (PFs): 拥有全功能PCI-E 功能,用于配置管理SR-IOV。
  • Virtual Functions (VFs) : 只有轻量级的 PCI-E 功能,只包含数据传输必要的资源, 但是资源可以 非常细致地配置, 每个 PF 最多可有 64 000 个与其关联的虚拟功能(Virtual Function, VF) 。

SR- IOV 标准允许高效共享PCI-E 设备, 有以下优点:

  • 良好的性能, 虚拟机绕过虚拟化层和系统, 直接访问硬件, 没有虚拟化层软件模拟的开销。
  • 降低成本, 减少了设备数量, 例如网卡的SR-IOV减少了网卡数量、交换机端口、网线。

2.网卡S R-IO V 的配置
SR-IOV 的配置需要先配置宿主机 PF , 然后将子网卡通过网卡独占的方式供虚拟机使用。
(1) 加载SR-IOV 内核模块
通过modprobe 命令加载igb 模块。
modprobe igb
实际加载的时候,需要激活虚拟功能(VF)。
modprobe igb max_vfs=7

千兆网卡最多 支持 8 个 VF ( 0 - 7 )。千兆网卡目前支待比较好的是Intel I350, Intel82576 虽然也支持SR-IOV, 但是只支持虚拟机是Linux 系统, Windows 系统不支持。
万兆网卡最多支持64 个 VF (0 - 63), Intel 的新一代万兆网卡 X520 ( 82599 )、X540都支持SR-IOV技术。
如果是主板集成的网卡 ,一 般在 BIOS 中 SR-IOV功能是关闭的。如果要使用 , 需要在 BIOS 中打开 SR-IOV选项。

如果需要重新设置VF, 可以删除模块再重新加载。
modprobe -r igb
将配置永久写入配置文件。
echo "options igb max_vfs=7" >> /etc/modprobe.d/igb.c onf
通过 lspci 命令可以看多主网卡和子网卡。

(2) 子网卡的使用
虚拟机可以通过网卡独占的方式使用子网卡。
virsh nodedev-list |grep 0b
虚拟机网卡xml 配置文件如下:


  
    

虚拟机需要安装网卡驱动才能 使用子网卡,高版本的Linux系统可以自动识别子网卡,
Windows系统只能是2008 Sevrer 以上版本,并且要安装最新的 Intel网卡驱动。

你可能感兴趣的:(网络虚拟化技术)