kvm随笔(一)


1、kvm是全虚拟化、xen是准虚拟化
kvm属于内核的一部分,xen类似于替换内核(2005年intel开发出了xen3.0,开始支持intel的VT和IA64,至此xen可以跑没有修改的操作系统,2010年内核社区接纳xen,linux3.0内核主干对xen支持越来越好)
全虚拟化有无可比拟的优势,因为准虚拟化需要修改客户操作系统,因此不支持windows
2、软件虚拟化与硬件虚拟化
软件虚拟化如qemu,对物理平台的访问与截获,说白了就是在硬件与软件中多了一层软件,效率可想而知。
硬件虚拟化是硬件处理器支持虚拟化,效率大大提高。
3、kvm本身不执行任何模拟
需要用户空间的qemu进行模拟
4、kvm可以使用linux支持的任何存储来存储虚拟机镜像
包括具有IDE、SCSI和SATA的本地磁盘,网络附加存储(NAS),或者支持iSCSI和光前通道SAN
5、kvm的原生磁盘格式为QCOW2
支持快照,徐云多级快照、压缩和加密
6、x86下的两种虚拟化模型
物理硬件-虚拟机监控器-操作系统:此种模型的代表有微软的Hyper-V、xen以及VMware的ESX/ESXi,该模型会有一特殊的虚拟机提供用户的管理操作。
物理硬件-操作系统-虚拟机监控器:kvm属于这类。
7、kvm模块
kvm模块是kvm虚拟机的核心部分,其主要功能是初始化CPU硬件,打开虚拟化模式,然后将xuni客户机运行在虚拟机模式下,并对虚拟客户机的运行提供一定的支持。
8、关于CPU过载的使用
最不推荐的做法让某一个客户机的vCPU数量超过物理系统上存在的CPU数量。比如,拥有4个逻辑CPU的宿主机中,同时运行一个或多个客户机,其中每个客户机的vCPU数量多于4个(如16个)。这样的使用方法会带来比较明显的性能下降,其性能反而不如为客户机分配2个(或4个)vCPU的情况,而且客户机中负载过重,可能会让整个系统运行不稳定。不过,在并非100%负载的情况下,一个或(多个)有4个vCPU的客户机运行在拥有4个逻辑CPU的宿主机中并不会带来明显的性能损失。
9、CPU独占
第一步:启动宿主机时隔离指定数量CPU(修改grub)
第二步:启动客户机(指定了CPU数量),使用taskset命令将QEMU进程和vCPU线程绑定到指定物理CPU
10、内存过载
一般来说客户机操作系统上的应用程序并非一直100%的利用其分配到的内存,并且宿主机上的多个客户机一般也不会同时达到100%的内存使用率,所以内存过载分配是可行的,一般来说有如下三种方式实现内存过载使用:
1)内存交换(swapping):用交换空间来弥补内存不足
2)气球(ballooning):通过virio_balloon驱动来实现宿主机Hypervisor和客户机之间的协作
3)页共享(page sharing):通过KSM(Kernel Samepage Merging)合并多个客户机进程使用的相同内存页
如何计算应该分配的交换空间大小以满足内存的过载使用:
某个服务器有32GB的物理内存,想在其上运行64个内存配置1GB的客户机。在宿主机中,大约需要4GB大小的内存来满足系统进程、驱动、磁盘缓存及其他应用程序所需内存(不包括客户机进程所需内存)。计算过程如下:
客户机所需交换分区为:64 x 1GB+4GB-32GB=36GB。
根据Redhat的建议[注释],对于32GB物理内存的RHEL系统,推荐使用8GB的交换分区。
所以,在宿主机中总共需要建立44GB(36GB+8GB)的交换分区来满足安全实现客户机内存的过载使用。
更多精彩文章,请搜索微信公众号“扶艾”。我们定期分享OpenStack相关技术文章,在这里,只有纯干货。 


### KVM虚拟化技术概述 KVM(Kernel-based Virtual Machine)是种基于内核的虚拟机解决方案,适用于x86架构且硬件支持虚拟化技术(如Intel VT或AMD-V)的Linux平台[^2]。其核心组件包括可加载的核心模块`kvm.ko`以及针对不同处理器优化的子模块`kvm-intel.ko`或`kvm-AMD.ko`。这些模块为处理器提供了底层虚拟化的支持。 为了实现完整的虚拟化功能,KVM依赖于经过修改的QEMU软件(即`qemu-kvm`),用于提供虚拟机的上层控制和用户界面交互。通过这种组合方式KVM能够在不更改操作系统镜像的前提下同时运行多个虚拟机实例,并允许每个虚拟机拥有独立配置的硬件资源,例如网络接口、存储设备和显示适配器等。 此外,在现代主流Linux发行版中,自2.6.20版本起已默认集成了KVM的支持,这使得部署更加便捷高效。 以下是关于如何构建基于KVM的技术文档或者具体实施方案的些指导: #### 使用Libvirt简化管理和自动化流程 对于希望快速搭建并维护大量虚拟机的企业来说,可以考虑采用libvirt库来统管理整个生命周期内的操作过程。此工具不仅能够跨多种hypervisor工作(比如除了KVM之外还有Xen),而且具备丰富的API接口供开发者调用开发定制应用服务端程序[^1]。 下面是个简单的Python脚本例子展示怎样利用libvirt API连接到本地KVM hypervisor 并列举当前活动中的域(domain): ```python import libvirt conn = libvirt.open("qemu:///system") if conn is None: print('Failed to open connection to qemu:///system') else: domains = conn.listAllDomains() if len(domains) != 0: for domain in domains: print(f"Domain Name: {domain.name()}") else: print("No active domains.") conn.close() ``` 以上代码片段展示了基础的功能——获取所有正在运行状态下的虚拟机名称列表。实际生产环境中还可以扩展更多特性诸如启动/停止特定机器、调整资源配置参数等等复杂任务皆可通过类似的手段完成。 #### 高级特性和最佳实践建议 当深入研究KVM时, 用户可能会遇到些更复杂的主题领域: - **性能优化**: 如何合理分配CPU时间片给各个guest OS? 是否存在I/O瓶颈需要解决? - **安全性考量**: 数据隔离措施是否到位?能否防止恶意攻击者从台受感染的Guest突破至Host系统? - **备份恢复策略制定**: 定期保存快照还是增量复制更为合适? 这些问题都需要结合具体的业务需求和技术背景综合分析得出结论。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值