设为首页 收藏本站
查看: 2773|回复: 0

[经验分享] KVM概念

[复制链接]

尚未签到

发表于 2015-10-10 10:47:23 | 显示全部楼层 |阅读模式
  参考:Red Hat Enterprise Linux 6Virtualization Guide
介绍
什么是虚拟化
     虚拟化是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。目前有多种虚拟化系统:

  • 硬件虚拟化:使用完全虚拟化໌技术(KVM)。
  • 半虚拟化:Xen所使用技术,运行linux虚拟机。
  • 软件虚拟化(仿真):使用二进制转换和其他仿真技术来运行操作系统(不用修改)。软件虚拟化的性能要比硬件虚拟化或半虚拟化要差,比如QEMU。
KVM
      KVM(Kernel Virtual Machine)是一种完全虚拟化技术。KVM包含一个可加载的内核模块(kvm.ko),这个模块提供核心虚拟化基础架构和处理器特定模式(kvm-intel.ko或kvm-amd.ko)。KVM使用QEMU来进行I/O硬件仿真。QEMU是用户空间仿真器,可以模拟多种架构处理器,性能也很不错。KVM还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面。使用KVM可以运行不用修改的Linux或Windows系统。每个虚拟机都有独立的虚拟硬件:网卡、硬盘、图形适配器等。自2.6.20开始,KVM内核组件已经包含在Linux内核中。
# modprobe -l|grep kvm
kernel/arch/x86/kvm/kvm.ko
kernel/arch/x86/kvm/kvm-intel.ko
kernel/arch/x86/kvm/kvm-amd.ko

# lsmod |grep kvm
kvm_intel              54285  0
kvm                   332980  1 kvm_intel

  KVM可以通过libvirt API和工具来管理,libvirt工具包括virt-manager、virsh等。虚拟机作为Linux进程和线程运行,这些进程和线程由内核模块控制。
  Overcommitting
KVM支持虚拟CPU和内存的超量使用,超量使用表示分配比系统可用资源更多的虚拟CPU或内存。CPU超量使用允许在物理机上以更高密度运行更多的虚拟机。内存超量使用允许物理机使用内存和虚拟内存来增加虚拟机密度。  KSM
KVM采用KSM(Kernel SamePageMerging)来使KVM虚拟机共享相同的内存页面。这些共享页面通常是通用库或其他相同、高使用率的数据。写时拷贝:一个进程第一次启动,和他的父进程共享它的所有内存,子进程或父进程要修改内存时,内核会分配一个新的内存区域,复制原始内容并允许程序修改这个新区域。这就是所谓的写时拷贝。
KSM反向使用这个概念,KSM使内核检查两个或更多已经运行的进程并比对它们的内存。如果任何内存区域和页面相同,KSM就将相同页面的多个引用合并为一个单独页面的单独引用。这个页面就标记为写时拷贝。如果页面内容被修改,那么会创建一个新页面。这在KVM虚拟化中很有用。当一个虚拟机启动后,它只是从父进程qemu-kvm那继承内存。一旦虚拟机运行,当虚拟机运行相同的操作系统或应用时,虚拟机的系统镜像内容可以共享。KSM只识别和合并相同页面,这些页面不影响虚拟机或主机的数据安全。KSM允许KVM处理这些相同的内存区域的共享请求。
KSM提供加强的内存速度和使用率。使用KSM后,通用进程数据被存储到缓存中或主内存中。这减少了KVM虚拟机的缓存未命中率,这样可以提升一些应用和操作系统的性能。其次,共享存储降低了虚拟机的总内存使用量,这样允许更高密度、更高的资源使用率。
Libvirt和libvirt工具
      Libvirt 提供一种虚拟机监控程序不可知的 API 来安全管理运行于主机上的来宾操作系统。它为各种虚拟化工具提供一套方便可靠的编程工具。libvirt起初是专门为 Xen 设计的一种管理 API,后来被扩展为可支持多个虚拟机监控程序,支持包括Xen, QEmu,KVM, LXC, OpenVZ, VirtualBox, OpenNebula和VMware ESX。
    virsh命令行工具是基于libvirt管理API的。通过命令行来进行虚拟化管理。virsh包含在libvrit-client安装包里(redhat)。virt-manager是一个图形化虚拟化管理工具。它还可以远程管理hypervisor。

虚拟硬件设备
有三种类型系统设备来提供给虚拟客户机:
· Emulated software devices.
· Para-virtualized devices.
· Physically shared devices.
仿真软件设备   
KVM通过软件方式为虚拟机实现许多核心设备。这些仿真的设备对于虚拟操作系统很重要。仿真设备是软件中确实存在的虚拟设备,不需要实际硬件支持。仿真驱动使用物理设备或虚拟软件设备,仿真驱动是虚拟机和linux内核之间的转换层。
半虚拟化设备   
半虚拟驱动是用来提升虚拟机的I/O性能的设备驱动,能降低I/O延迟并提升到接近裸机级别。虚拟机如果运行高I/O的应用,则推荐使用半虚拟化驱动。半虚拟化驱动必须安装在虚拟机中。现在主流linux中默认都包含这些驱动。对于Windows虚拟机必须手动安装半虚拟化驱动。
# modprobe -l|grep virtio
kernel/drivers/char/hw_random/virtio-rng.ko
kernel/drivers/char/virtio_console.ko
kernel/drivers/block/virtio_blk.ko
kernel/drivers/scsi/virtio_scsi.ko
kernel/drivers/net/virtio_net.ko
kernel/drivers/virtio/virtio.ko
kernel/drivers/virtio/virtio_ring.ko
kernel/drivers/virtio/virtio_pci.ko
kernel/drivers/virtio/virtio_balloon.ko
kernel/net/9p/9pnet_virtio.ko

半虚拟网络驱动:用于虚拟机已存在或新的网络设备。
半虚拟块设备驱动:用于虚拟机所有挂载的存储设备(除了软驱,需要仿真)。
半虚拟化时钟:虚拟机使用Time Stamp Counter(TSC)可能存在时间问题,KVM可以提供一个半虚拟化时钟。
半虚拟化串口设备驱动(virtio-serial):一种字节流、字符流驱动,在网络不可用时,提供主机用户空间和虚拟机用户空间之间的一个简单的通信接口。
气球驱动:允许虚拟机向hypervisor表示自己需要多少内存,可以再虚拟机之间按照需要调节内存大小,可以提高内存使用率。分为气球膨胀和压缩两种操作。膨胀就是虚拟机的内存被拿掉给宿主机,压缩就是宿主机的内存还给虚拟机。
物理共享设备
特定硬件平台允许虚拟机直接访问硬件设备和组件。虚拟化这个过程称为透传,也称设备分配。PCI透传KVM支持将主机上的PCI设备连接到虚拟机。PCI透传可以向虚拟机提供一种设备隔离,以便该设备能够被这个虚拟机独占使用。通过PCI透传,虚拟机就像直接物理连接到PCI设备。几乎所有的PCI和PCI-Express设备支持透传,除了显卡。 DSC0000.gif

SR-IOV
     SR-IOV (Single Root I/O Virtualization)是一类PCI透传的标准,可以让多个虚拟机共享PCI硬件资源。SR-IOV能够让网络传输绕过软件模拟层,直接分配到虚拟机。这样就降低了软加模拟层中的I/O开销。SR-IOV规范的目标是在绕过虚拟机参与数据迁移过程中实施标准化,为每个虚拟机提供独立内存空间、中断和Direct Memory Access (DMA)流。SR-IOV架构的设计允许一个I/O设备支持多个虚拟功能,同时将每个功能的硬件成本降至最低。SRIOV引入了两个新的功能类型:
·物理功能(Physical Functions,PFs):这是一些支持SR-IOV扩展功能的PCIe设备,PF被发现、管理并配置为PCI设备。PF通过分配VF用于配置和管理SR-IOV功能特性。
  ·虚拟功能(Virtual Functions,VFs):这是一些“精简”的PCIe功能,只处理I/O。每个VF都是来自PF,VF的数量受限于硬件设备。支持SR-IOV的设备可以配置成以多个虚拟功能形式呈现在PCI配置空间中,每个都有它们自己的PCI配置空间。然后VMM可以通过模拟配置空间来分配一个或者多个虚拟功能给虚拟机。

DSC0001.jpg

NPIVNPIV(N_Port ID Virtualization)是适用于一些光纤设备的功能。NPIV将一个单独物理N_Port共享为多个N_Port ID,提供类似SR-IOV提供给网络接口的主机总线适配器的功能。通过NPIV,虚拟机可以提供一个虚拟光纤通道启动器给SAN,可以为企业级存储解决方案提供高密度的虚拟化环境。
存储
虚拟机的存储是从物理存储抽象出来的。使用半虚拟化或仿真块存储设备驱动将存储连接到虚拟机。

存储池存储池是一个由libvirt管理的文件、目录或存储设备,提供给虚拟机使用。存储池被分为存储卷,这些存储卷保存虚拟镜像或连接到虚拟机作为附加存储。有两大类存储池:本地存储池:直接连接到主机。本地存储池包括本地目录、直连磁盘和LVMVG。适用于不用迁移或有大量虚拟机的环境。本地存储不适用于许多生产环境,因为本地存储不支持动态迁移。网络(共享)存储池:通过使用标准网络协议来共享存储设备,网络存储池通过libvirt管理。
存储卷
存储池被换分为存储卷,存储卷是物理分区、LVMLV、基于文件的磁盘镜像或其他libvirt处理的存储类型。虚拟机将存储卷作为本地存储设备。
         版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-125012-1-1.html 上篇帖子: KVM的常量池 下篇帖子: Installing KVM and Open vSwitch on Ubuntu
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表