虚拟化简介

举报
Eric Shi 发表于 2024/03/28 17:10:21 2024/03/28
【摘要】 虚拟化就是将物理资源从时空维度进行划分,逻辑表示成多份资源,是一种资源抽象化的过程。

1       一句话介绍

虚拟化就是将物理资源从时空维度进行划分,逻辑表示成多份资源,是一种资源抽象化的过程。

2       基本概念

  • VMM Virtual Machine Monitor):虚拟机监控系统,也叫 Hypervisor,是虚拟化层的具体实现。
  • HostOS:宿主机(物理服务器)运行的操作系统。
  • GuestOS:客户机(虚拟机)运行的操作系统。
  • Interface:接口是一个针对资源的概念,又称物理端口。例如以太网接口。
  • Port:端口是一个针对网络协议服务的概念,分为物理端口和虚拟端口,例如数据端口。一个Port可以调用多个接口的资源。一个接口通常只对应一个端口。

3       计算虚拟化

3.1      计算虚拟化架构

计算虚拟化架构包含宿主机虚拟化、裸金属虚拟化和混合虚拟化三种类型。

3.1.1      宿主机虚拟化

VMM作为一个应用程序运行在主机操作系统上(HostOS)。

  • 特点:易于实现,依赖操作系统,两次OS开销大
  • 代表产品:VMware WorkstationVirtualBox

3.1.2      裸金属虚拟化

VMM直接部署在裸金属设备上。

  • 特点:不依赖操作系统,需开发内核
  • 代表产品:VMware ESXXen

3.1.3      混合虚拟化

VMM嵌入主机操作系统内核。

  • 特点:不依赖操作系统,无需开发内核
  • 代表产品:RedHat KVM

3.1.4      三种架构示意图


3.2      计算虚拟化类型

3.2.1      CPU Ring级别

CPU指令集(X86)依据权限大小依次分为Ring0Ring1Ring2Ring3四个等级。

Ring0级别指令集权限最高,称为内核态指令集,运行在操作系统内核层面。VMM运行在该级别。

Ring3级别指令集权限最低,称为用户态指令集,只能在用户应用程序中执行。

应用程序如果需要访问硬件资源,需要进行系统调用(如fork),需要切换到内核态,带来性能开销。

3.2.2      三种虚拟化类型

GuestOSHostOSVMM看来是一个应用,运行在用户态只会执行Ring3级别指令。但是,GuestOS作为一个完整的操作系统,会下发Ring0级别的指令,此时会造成异常。根据处理异常的方式,引出三种类型虚拟化:

  • 半虚拟化:定制一个GuestOS,将原本直接与硬件交互的Ring0指令改成能够与VMM正常交互的指令,代表技术是Xen
  • 全虚拟化(基于二进制翻译):就是VMM直接捕获该异常,对异常做二进制翻译处理,并模拟返回正常结果给GuestOS,但是这种异常处理方式,对性能损耗较大。
  • 全虚拟化(基于硬件辅助):CPU提供Root ModeNon-root Mode两种运行模式,两种模式均支持Ring0~3级别指令。当然GuestOS执行部分特权指令时还是会发生异常,不过由Root ModeCPU自动捕获并交由VMM处理CPU模式切换效率也高于二进制翻译。性能逼近半虚拟化,成为主流。


4       网络虚拟化

4.1      Linux虚拟网络

4.1.1      虚拟网卡

传统主机物理网络流量图如下:

外部网线→物理网卡(nic&以太网口(eth)→内核网络协议栈→用户空间应用程序。

虚拟机通信则通过相应的虚拟网络设备实现(虚拟网卡virtual nic,虚拟网口virtual eth等)。

Linux内核模块tap/tunveth-pair实现了虚拟网卡的的功能:


  • TAP模拟二层网络设备,拥有虚拟的MAC地址,可直接处理以太网帧。通常用作虚拟机的虚拟网卡vnic
  • TUN模拟三层网络设备,且只能处理IP包。
  • Veth-pair成对出现,通常用于两个Linux Namespace直接互联(容器网络使用较多),NamespaceLinux网桥互联。


4.1.2      虚拟交换机

Linux通过Bridge(网桥,简称br)内核模块实现虚拟交换机的功能,默认工作在L2层,可配置IP工作在L3层。

OpenStack场景下几类重要的网桥:

  • br-int:集成网桥,集成宿主机内所有虚拟机网卡。
  • br-tun:通信网桥,提供统一通信层,进行vxlan解封装处理。
  • policyply/qbr网桥:提供虚拟机ACLQoS等功能。
  • br-phynet:物理网桥,对接物理网络。


4.2      VirtIO

VirtIO是一种IO半虚拟化方案。此方案规定了客户机与Hypervisor(例如KVM等)的IO通信协议。该方案可分为四层:


  • 前端驱动位于GuestOS内,包括virtio_blkvirtio_netvirtio_pcivirtio_consolevirtio_balloonvirtio_scsi等驱动模块。
  • VirtIOTransport是前后端驱动通信的桥梁,VirtIO负责实现前后端通知机制,Transport实现数据流转发。
  • 后端驱动位于Hypervisor,实现对宿主机硬件设备的模拟,KVM虚拟化方案中由QEMU模块实现。

5       KVM虚拟化方案

通常KVM虚拟化方案包括KVMQEMUVirtIO等部分,是基于硬件辅助的全虚拟化技术,是目前主流的虚拟化技术方案。KVM虚拟化架构包含两个核心模块:

  • KVM模块:是Linux内核的一个模块,负责CPU以及内存虚拟化、拦截Guest OS下发的IO指令,将其返回给QEMU
  • QEMU:系统模拟器,运行在用户态,负责解释来自KVMIO指令,转换成Host OS的系统调用,让Host OS完成真正的IO操作。


Host角度看,Guest只是一个进程(实际在QEMU进程内运行)。KVM负责将进程中的线程虚拟化成vCPU,将Guest的物理内存虚拟化成虚拟内存。每个用户态QEMU进程对应一个虚拟机。QEMUKVM的交互接口为/dev/kvm,通过openioctl系统调用来操作虚拟vCPU、虚拟内存以及KVM本身。

6       Libvirt

Libvirt是虚拟化平台的管理组件,提供完善的管理API,默认自带virsh命令行工具,支持与其他管理工具或上层应用对接(例如Openstack)。Libvirt是基于驱动架构的管理组件,支持对接不同的Hypervisor(例如XenKVM&QEMU等)。运行Libvirt守护进程的宿主机,均可执行如下管理动作:

  • 虚拟机管理:虚拟机生命周期的操作、多种不同类型设备的热插拔操作等。
  • 支持远程连接: SSH 协议远程连接虚拟机。
  • 存储管理:创建多种类型的文件镜像,挂载 NFS 共享,枚举现有 LVM 卷组,创建新的 LVM 卷组和逻辑卷,对裸磁盘设备分区,挂载 iSCSI 共享等。
  • 网络接口管理:管理物理的和逻辑的网络接口,枚举现有接口,配置(和创建)接口、桥接、VLAN、端口绑定等。
  • 虚拟 NAT 和基于路由的网络:管理和创建虚拟网络。

7       存储虚拟化

通过共享磁盘文件系统(又称共享集群文件系统)方式实现底层异构存储(集中式、本地磁盘、分布式)资源的统一池化。OCFS2Oracle开发的共享磁盘文件系统,华为虚拟化平台FusionComputeVIMS共享磁盘文件系统就是基于OCFS2进行定制开发的。VIMS介于服务器与底层存储之间,向虚拟机操作系统提供对磁盘集群的访问能力。


  • 用户态进程处理磁盘格式化、挂载等任务。
  • 内核态主要提供VIMS文件服务的一般操作,例如打开、删除等操作。

8       虚拟化关键特性

8.1      NUMA

NUMANon-Uniform Memory Access,非一致内存访问)是提升多核CPU性能的特性。每个核心有单独总线、内存控制器和IO等,将内存和CPU进行绑定划分,把固定大小的内存分配给指定CPU序列,形成一个Node,整个CPU、内存资源由多个Node组成。CPU访问本端Node内存的速度要远快于访问远端Node内存。


8.2      大页内存

页表缓存(TLB)具有固定数据的空间槽,用于存放将内存虚拟地址映射至物理地址的标签页表条目。当内存分页调大时,页表数量就变小,TLB能映射更多的内存,提高CPU内存寻址负载。内存=页表数量×大页内存。


9       参考

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。