几种常见的计算机虚拟技术

几种常见的计算机虚拟技术,第1张

而且支持在同一平台上运行各种不同内核,不同类型的操作系统,相当于一台真正的物理机器。其最大的缺点是由于要完全虚拟化硬件,执行效率偏低,实际应用中成本也比较昂贵。常见的技术平台有:Parallels Workstation,Parallels Desktop for Mac,VirtualBox,Virtual Iron,Oracle VM,Virtual PC,Virtual Server,Hyper-V,VMware Workstation,VMware Server (formerly GSX Server),QEMU,Adeos,Mac-on-Linux,Win4BSD,Win4Lin Pro,and Egenera vBlade technology。 半虚拟化技术(Paravirtualization) 半虚拟化技术可以选择性的对部分硬件进行一些必要的虚拟,是全虚拟和内核级虚拟的一种折中的方法,所以其的各方面的表现上基本也是介于两者之间。使用半虚拟化技术需要对Guest OS进行一些必要的修改,对能使其正常运行在虚拟平台上。常见的技术平台有:Xen,UML,TRANGO和KVM。 操作系统级虚拟化技术(Operating system-level virtualization) 这是一个基于操作系统级的虚拟技术,其Guest OS环境和物理机器的系统共享同一个系统内核,有点类似于将各个运行环境隔离。所以在上面只能运行相同内核的系统,并需要对Guest OS做一些必要的修改,被广泛应用于现在的VPS中。常见的技术平台有:Solaris Containers, OpenVZ, Linux-VServer, AIX Workload Partitions, Parallels Virtuozzo Containers和 iCore Virtual Accounts。 硬件辅助虚拟化技术(Hardware-assisted virtualization) 这也是常说的HVM,使用这种虚拟技术可以不需要对 Guest OS进行修改。目前集成了虚拟技术支持的硬件平台有:x86 (and x86_64)—AMD-V,Intel VT-x ,IOMMU ,Power Architecture,Virtage (Hitachi),UltraSPARC T1, T2 and T2+(Sun)。

而支持这些硬件平台的虚拟技术软件有:Linux KVM, VMware Workstation, VMware Fusion, Microsoft Virtual PC, Xen, Parallels Desktop for Mac, VirtualBox and Parallels Workstation。

一、virt-what的安装:

1、下载virt-what安装包

2、tar -zxvf virt-what-1.13.tar.gz #解压缩包

3、cd virt-what-1.13 #进入目录

4、./configure #按默认设置

5、make&&makeinstall #编译并安装

二、使用virt-what来判断VPS使用的哪种虚拟化技术

virt-what

在云平台中,基本都需要这样一个功能,就是收集虚拟机监控数据,比如cpu使用率、内存使用率、磁盘io、网络io等信息。通常这些信息Hypervisor都会提供接口供获取,这种获取方式成本是低廉的,通常不会对整个虚拟化环境有影响。想要获取更多的监控详情信息,那么则需要在虚机里面安装agent来收集监控数据,这种方式获取成本高,有时候可能不会接受镜像里面有agent的事实,这好比被安装了后门一样。两种方式各有优劣,看各自的需求场景,具体使用具体分析。

KVM内存虚拟化

KVM在内存虚拟化上有哪些相关技术可以使用。

对于客户机的内存分配上,KVM提供了ballooning机制,其本质就是可以根据宿主机系统内存使用的紧张程度来动态增加或回收客户机的内存占用。 如果云计算环境准备实施oversell,那么这个机制是十分有用的,因为宿主机上的客户机不可能同时满载,这样便可以有效利用物理内存。

如果宿主机上跑着很多相同镜像的客户机,那么这些客户机的内存段是有相同之处的,KVM提供了一个KSM(Kernel Samepage Merging)机制,可以将相同的内存合并。 这就意味着在ballooning机制基础上还能更进一步优化内存使用率。但是KSM的开销也很大,尤其是当客户机的镜像耦合非常低会造成KSM效率非常低,不仅内存合并效果不佳, 还会影响宿主机的系统性能,进而影响所有客户机的性能,需要慎重使用。

此外还有HugePage和Transparent HugePage技术。前者可以给客户机分配一块大内存独占使用,但是因为独占导致很多不灵活,不能在宿主机内存紧张的时候换出; 而后者则是继承了HugePage的优点并弥补了这个缺点。大页技术的使用也需要慎重,如果客户机运行的应用比较依赖内存性能(Redis之流),那么开启这个是值得的。

下面就是解析一下OpenStack获取虚机内存的方式,以及一些需要注意的坑。

获取接口

使用libvirt的命令行工具可以获取虚机的内存信息,方式如下:

$ virsh list

Id    Name                           State

----------------------------------------------------

46    instance-0000081a              running

117   instance-000008c0              running

122   instance-00000920              running

$ virsh dommemstat 46

actual 2097152

swap_in 0

rss 1031060

actual是启动虚机时设置的最大内存,rss是qemu process在宿主机上所占用的内存,可以通过 grep VmRSS /proc/$(pidof qemu-system-x86_64)/status 得到。但是要获取的是虚机内部的内存使用情况,这样明显不能满足需求。

还需要给虚机做些配置,给虚机的libvirt.xml描述文件添加下面的内容:

#每10s钟收集一次

<memballoon model="virtio">

<stats period="10"/>

</memballoon>

再次查询虚机的内存信息,得到:

actual 2097152

swap_in 0

swap_out 0

unused 1904816

available 2050112

rss 299952

unused代表虚机内部未使用的内存量,available代表虚机内部识别出的总内存量,那么虚机内部的内存使用量则是(available-unused)的结果。

windows注意事项

首先windows需要安装virtio-win相关驱动,除此之外还需要启动BLNSVR服务。

在 Windows 2008r2 and Windows 2012/Win8 :

Copy and rename as Administrator the WIN7AMD64 directory from the virtio.iso to “c:/Program files/Balloon”

Open a CMD as Administrator and cd into “c:/Program Files/Balloon”

Install the BLNSVR with “BLNSVR.exe -i”

在 Windows 2003 / Windows Xp :

Download the “devcon” software on microsoft website kb311272

devcon install BALLOON.inf “PCIVEN_1AF4&DEV_1002&SUBSYS_00051AF4&REV_00”

OpenStack中的使用

在OpenStack中,ceilometer组件的meter项有一个memory.usage,这一项便是采样虚机内存使用量信息,在I版本是不能获取到的,这个BP并有相关的实现,代码已经合并到master,且在Juno版本中放出。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/116062.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-12
下一篇2023-03-12

发表评论

登录后才能评论

评论列表(0条)

    保存