linux云计算--KVM虚拟化技术(cpu内存)制作lvm镜像kwm上
安装centos7系统
KVM虚拟化技术(cpu内存) 制作lvm镜像 kwm上安装centos7系统
1.CPU 虚拟化
1.KVM中VCPU与Thread
KVM中每⼀个Guest OS都是⼀个标准的Linux进程(qemu-kvm进程)
Guest OS中的 vCPU 是qemu-kvm 进程派⽣的线程
Guest OS中的内存是qemu-kvm 进程的地址空间的⼀部分
KVM 虚拟机包括虚拟内存、虚拟CPU和虚拟机I/O设备,其中内存和 CPU 的虚拟化由 KVM 内核模块负责实现,I/O 设备的虚拟化由 qemu 负责实现。
2.KVM中VCPU与Thread 查看进程和线程 KVM设备状态
⼀个 KVM 虚拟机即⼀个 Linux qemu-kvm 进程,与其他 Linux 进程⼀样被Linux 进程调度器调度。
如上例:
pstree命令查看,⼀个计算节点中有2个qemu-kvm进程,即2台虚拟机,
或者
ps aux|grep 虚机名字查看到qemu-kvm进程
⼀个虚拟cpu对应⼀个线程
virsh list --all
ps -TP 2951查看线程
ps aux| grep qemu查看进程
ps aux| grep qemu-kvm
pstree查看进程
3.KVM中VCPU与Thread
虚机中的每⼀个虚拟 vCPU 则对应 qemu-kvm 进程中的⼀个线程。
宿主机有两个物理 CPU,上⾯起了两个虚机 VM1 和 VM2。
VM1 有两个 vCPU,VM2有 4 个 vCPU。
可以看到 VM1 和 VM2 分别有两个和 4 个线程在两个物理 CPU 上调度。
4.资源 over-commit (资源过载)
2.内存虚拟化原理实现⽅式技术内存过载
1.内存虚拟化基本原理
KVM 为了在⼀台机器上运⾏多个虚拟机,需要增加⼀个新的内存虚拟化层
也就是说,必须虚拟 MMU(内存管理单元 )来⽀持客户操作系统,来实现 VA -> PA -> MA 的翻译。
客户操作系统继续控制虚拟地址到客户内存物理地址的映射(VA -> PA),但是客户操作系统不能直
接访问实际机器内存,因此VMM (KVM)需要负责映射客户物理内存到实际机器内存(PA -> MA)。
2.内存虚拟化实现⽅式
软件⽅式:通过软件实现内存地址的翻译,⽐如 Shadow page table (影⼦页表)技术。
硬件实现:基于 CPU 的辅助虚拟化功能,⽐如 AMD 的 NPT (Nested Page Tables)和 Intel 的EPT (Extended Page Tables)技术。KVM 实现客户机内存的⽅式是,在qemu主线程的虚拟地址空间中声明⼀段连续的⼤⼩的空间⽤于保存客户机与物理内存之间的映射关系。
3.内存虚拟化实现技术
KSM (Kernel Samepage Merging)技术
linux内核2.6.32引⼊了KSM(内存管理合并相同页)允许这个系统管理程序通过合并内存页⾯来增加并发虚拟机的数量。
VMware 的 ESX 服务器系统管理程序将这个特性命名为Transparent Page Sharing (TPS),⽽ XEN 将其称为 MemoryCoW。
不管采⽤哪种名称和实现,这个特性都提供了更好的内存利⽤率,从⽽允许操作系统(KVM 的系统管理程序)过量使⽤内存,⽀持更多的应⽤程序或 VM。
Huge Page技术
这是KVM虚拟机的⼜⼀个优化技术
Intel 的x86 CPU通常使⽤4Kb内存页,当是经过配置,也能够使⽤巨页(huge page):(4MB on x86_32, 2MB on x86_64 and x86_32 PAE)
使⽤巨页,KVM的虚拟机的页表将使⽤更少的内存,并且将提⾼CPU的效率。最⾼情况下,可以提⾼20%的效率!
Ballooning技术
4.内存Ballooning简介
通常来说,要改变客户机占⽤的宿主机内存,是要先关闭客户机,修改启动时的内存配置,然后重启客户机才能实现。⽽内存的ballooning(⽓球)技术可以在客户机运⾏时动态地调整它所占⽤的宿主机内存资源,⽽不需要关闭客户机。
Ballooning技术形象地在客户机占⽤的内存中引⼊⽓球(Balloon)的概念,⽓球中的内存是可以供宿主机使⽤的,
所以,当宿主机内存使⽤紧张,空余内存不多时,可以请求客户机回收利⽤已分配给客户机的部分内存,客户机就会释放其空闲的内存,此时若客户机空闲内存不⾜,可能还会回收部分使⽤中的内存,可能会换出部分内存到客户机的交换分区(swap)中,从⽽使得内存⽓球充⽓膨胀,从⽽让宿主机回收⽓球中的内存可⽤于其他进程(或其他客户机)。
反之,当客户机中内存不⾜时,也可以让客户机的内存⽓球压缩,释放出内存⽓球中的部分内存,让客户机使⽤更多的内存。
很多现代的虚拟机,如KVM、Xen、VMware等,都对Ballooning技术提供⽀持。
5.内存过载Over Commit
客户机中内存总数>宿主机物理内存总数;
如下三种⽅式实现内存的过载使⽤
1. 内存交换(swapping):借助交换空间弥补内存的不⾜(技术成熟,但效率低)
2. ⽓球(balloonning):根据实际需要⾃动收缩
3. 页共享(page sharing):通过KSM(Kernel Samepage Merging)合并多个客户机进程使⽤的相同内存页
内存过载使⽤经验:
若某服务器有32GB物理内存,打算在其上运⾏64个内存为1GB的客户机。
在宿主机中,⼤约需要4GB⼤⼩内存满⾜宿主机⾃⾝运⾏要求,
则客户机所需的交换分区为:64*1GB+4GB-32GB=36GB。
根据Redhat建议,对于32GB物理内存的Redhat系统,推荐使⽤8GB的交换分区。
所以,在宿主机中总共需要44GB(36GB+8GB)的交换分区以满⾜安全的实现客户机内存的过载使⽤
3.KVM存储虚拟化概念类型⽬录位置
1.KVM存储虚拟化
KVM 的存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的。
Storage Pool 是宿主机上可以看到的⼀⽚存储空间,可以是多种类型
Volume是在 Storage Pool 中划分出的⼀块空间,宿主机将 Volume 分配给虚拟机,Volume 在虚拟机中看到的就是⼀块硬盘。
2.⽂件⽬录最常⽤的 Storage Pool 类型。⽬录类型的 Storage Pool
/var/lib/libvirt/images/ KVM 将宿主机⽬录作为默认的 Storage Pool。
3.volume 是什么对于 cirros 来说,就是它的启动磁盘了。
⼀个磁盘镜像⽂件就是⼀个 Volume
之前创建虚机 cirros 的时候,是将镜像⽂件 cirros-0.3.5-x8664- disk.img 放到/root⽬录下,⽂件 cirros-0.3.5-x8664-disk.img 也就是Volume,对于 cirros 来说,就是它的启动磁盘了。
1.KVM存储虚拟化磁盘⽂件默认位置 /var/lib/libvirt/images
/var/lib/libvirt/images KVM 把这个⽬录当做默认 Storage Pool磁盘⽂件
/etc/libvirt/storage 定义KVM的磁盘⽂件
实际上 KVM 所有可以使⽤的Storage Pool 都定义在宿主机的/etc/libvirt/storage ⽬录下,每个 Pool ⼀个
xml ⽂件,默认有⼀个 l,
注意:
Storage Pool 的类型是 “dir”,⽬录的路径就是 /var/lib/libvirt/images。
2.KWM虚拟机增加新的磁盘
为虚机 cirros 添加⼀个新的磁盘
在 /var/lib/libvirt/images/ 下多了⼀个 2G 的⽂件 generic-2.qcow2
点开⼩灯泡下⾯添加硬件添加存储
设置⼤⼩⽂件格式即可
3*.raw qcow2 vmdk 镜像格式优点
使⽤⽂件做 Volume 有很多优点:存储⽅便、移植性好、可复制、可远程访问。
远程访问的意思是镜像⽂件不⼀定都放置到宿主机本地⽂件系统中,也可以存储在通过⽹络连接的远程
⽂件系统,⽐如 NFS,或者是分布式⽂件系统中,⽐如 GlusterFS。这样镜像⽂件就可以在多个宿主机之间共享,便于虚机在不同宿主机之间做 Live Migration;
如果是分布式⽂件系统,多副本的特性还可以保证镜像⽂件的⾼可⽤。
常见的镜像格式:
1.raw 是默认格式即原始磁盘镜像格式,移植性好,性能好,但⼤⼩固定,不能节省磁盘空间。
2.qcow2 是推荐使⽤的格式,cow 表⽰ copy on write,能够节省磁盘空间,⽀持 AES 加密,⽀持zlib 压缩, ⽀持多快照,
3.vmdk 是 VMWare 的虚拟磁盘格式,也就是说 VMWare 虚机可以直接在 KVM上运⾏。
4.虚拟机镜像格式 raw优点,缺点
raw
(default) the raw format is a plain binary image of the disc image, and is very portable. On file systems that support sparse files, images in this format only use the space actually used by the data recorded in them.
优点:简单、性能好、⽀持稀疏⽂件、可以追加磁盘空间
缺点:⽆法做快照、⽆法压缩
1.COW 写时复制优点
虚拟机安装vim命令写⼊时复制(Copy-on-write)是⼀个被使⽤在程序设计领域的最佳化策略。
如果有多个呼叫者(callers)同时要求相同资源,他们会共同取得相同的指标指向相同的资源,
直到某个呼叫者(caller)尝试修改资源时,系统才会真正复制⼀个副本(private copy)给该呼叫者,
以避免被修改的资源被直接察觉到,这过程对其他的呼叫者都是通透的(transparently)。
优点 :如果呼叫者并没有修改该资源,就不会有副本(private copy)被建⽴。
2.虚拟机镜像格式四代英⽂
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论