美文网首页
网络虚拟化技术

网络虚拟化技术

作者: 王鸣南曲 | 来源:发表于2017-12-29 11:09 被阅读0次

网络虚拟化技术

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

虚拟机 -> 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文件配置如下

<interface type='direct'>
  <mac address='la:46:0b:ca:bc:7b'/>
  <source dev='eth0' mode='bridge' />
  <model type='e1000' />
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface >

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

vhost_net技术

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

xml文件配置

<interface type='bridge'> 
    <mac address=''/> 
    <source bridge='br0' /> 
    <model type='Virtio'/>
    <driver name="vhost"/>
    <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface >

网卡中断与多队列

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网卡配置:

<interface type='bridge'>
  <mac address='52:54:00:43:6e:3f'/>
  <source bridge='clients' />
  <model type='Virtio' />
  <driver name='vhost' queues= 'N' />
  <address  type='pci' domain='0x0000' bus='0x0000' solt='0x0000' function='0x0' />
</interface>

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

<device>
  <name>pci_0000_02_00_0</name>
  <path>/sys/devices/pci0000:00/0000:00:11.0/0000:02:00.0</path>
  <parent>pci_0000_00_11_0</parent>
  <driver>
    <name>e1000</name>
  </driver>
  <capability type='pci'>
    <domain>0</domain>
    <bus>2</bus>
    <slot>0</slot>
    <function>0</function>
    <product id='0x100f'>82545EM Gigabit Ethernet Controller (Copper)</product>
    <vendor id='0x8086'>Intel Corporation</vendor>
  </capability>
</device>

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

<hostdev mode='subsystem' type='pci' managed='yes'>
  <source>
    <address domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
  </source>
</hostdev>

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 配置文件如下:

<interface type='hostdev' managed='yes'>
  <source>
    <address type='pci' domain='0' bus='11' slot='16' function='0'/>
  </source>
</interface>

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

相关文章

  • kvm虚拟化

    KVM 虚拟化技术 CPU虚拟化技术 内存虚拟化技术 IO虚拟化技术 网络IO虚拟化技术 磁盘IO虚拟化技术 虚拟...

  • 网络虚拟化技术

    网络虚拟化技术 数据包从虚拟机到物理机过程: 虚拟机 -> QEMU虚拟网卡 -> 虚拟化层 -> 内核网桥 ->...

  • 企业部署虚拟化的七大好处

    编者按:目前虚拟化技术已经突破虚拟内存和虚拟服务器两大空间,延伸到网络虚拟化、微处理器虚拟化、文件虚拟化和存储虚拟...

  • Docker概念理解

    容器技术 简单介绍 容器技术又称为容器虚拟化 首先是一种虚拟化技术 虚拟化技术包括硬件虚拟化 半虚拟化 操作系统虚...

  • 虚拟化技术

    虚拟化技术 分类 按虚拟对象 操作系统虚拟化 平台虚拟化 按方案 软件虚拟化 硬件虚拟化 虚拟机管理器 虚拟化技术...

  • 网络虚拟化技术一

    介绍 虚拟网络构建(简单) 虚拟路由器网络架构(不承接前面的操作结果,新虚拟机) 分析 路由上配置dhcp服务

  • 网络虚拟化技术二

    网络虚拟化 虚拟复杂网络1(同一个物理节点上)

  • 网络虚拟化技术三

    虚拟复杂网络2(不同的物理节点上) 虚拟复杂网络3(3个不同的物理节点) 抓包测试

  • 虚拟化原理

    虚拟化应用:弹性计算处理能力可弹性的服务器。 CPU虚拟化技术 内存虚拟化技术 IO虚拟化技术 开源虚拟化项目 X...

  • 20171207 虚拟化

    虚拟化技术概览KVM简介KVM的管理操作 一、虚拟化技术概览 (一)虚拟化技术类型: 主机虚拟化:xen, kvm...

网友评论

      本文标题:网络虚拟化技术

      本文链接:https://www.haomeiwen.com/subject/whfigxtx.html