|
吾爱游客
发表于 2021-10-21 09:36
申请ID:放南山
个人邮箱:1103098607@qq.com
原创技术文章:
虚拟化技术
QEMU, KVM及QEMU-KVM介绍
https://www.cnblogs.com/gzxbkk/p/10116000.html
> QEMU(Quick emulator)
QEMU模拟一系列的硬件模型,将 guest os 发出的指令翻译给真正硬件进行操作,使guest os认为自己和硬件直接打交道,
但由于所有指令都需要经过QEMU来翻译,因而性能会比较差
QEMU可以独立模拟一台完整计算机的所有硬件,只是性能稍差
图:https://blog.csdn.net/whatday/article/details/78445932
Guest OS
|
QEMU
|
qemu-kvm
|
Host System
|
Hardware
https://download.qemu.org/
qemu-2.10 2017-07
qemu-3.0 2018-07
qemu-4.0 2019-03
qemu-4.1 2019-07
qemu-4.2 2019-11
qemu-5.2 2020-03
qemu-6.0 2021-03
> KVM(Kernel Virtual Machine)
KVM实际是linux内核提供的虚拟化架构,可将内核直接充当hypervisor来使用。
KVM需要处理器硬件本身支持虚拟化扩展,如intel VT 和AMD AMD-V技术。
KVM主要负责vCPU的创建,虚拟内存的地址空间分配,
有了KVM以后,guest os的CPU指令不用再经过QEMU来转译便可直接运行,大大提高了运行速度。
KVM通过/dev/kvm暴露接口,用户态程序可以通过ioctl函数来访问这个接口
>> 查看 CPU 是否支持 虚拟化
基于 Intel 处理器的系统,运行 grep vmx /proc/cpuinfo 查找 CPU flags 是否包括 vmx 关键词。
# grep vmx /proc/cpuinfo
基于 AMD 处理器的系统,运行 grep svm /proc/cpuinfo 查找 CPU flags 是否包括 svm 关键词
# grep svm /proc/cpuinfo
>> 检查BIOS,确保BIOS里开启VT选项:
Intel(R) Virtualization Tech [Enabled]
如有必要,还需在BIOS中开启VT并重启机器。
但KVM的本身【只提供了CPU和内存】的虚拟化,而不能提供其它设备如 Disk 的虚拟化,
所以它必须结合QEMU才能构成一个完整的虚拟化技术,也就有了 QEMU-KVM
> QEMU-KVM ==> QEMU
目前QEMU-KVM已经与QEMU合二为一,所有特定于KVM的代码也都合入了QEMU,当需要与KVM模块配合使用的时候,
只需要在QEMU命令行加上 --enable-kvm就可以
Qemu模拟其他的硬件,如Network, Disk,同样会影响这些设备的性能,
于是又产生了pass through半虚拟化设备virtio_blk, virtio_net,提高设备性能
图:https://blog.csdn.net/whatday/article/details/78445932
Guest OS----------|
/ | |
Host-userspace / QEMU | passthrough qemu
/ | |
qemu-kvm drivers |
| | |
Host-kernel kvm drivers --------- |
| |
Hardware cpu, mem net, disk
在老版本中有单独的qemu-kvm模块存在,结合qemu一起做虚拟机工作。
在后续新版本中,已经将qemu-kvm模块完全合并到qemu中去。因此当需要使用kvm特性时候,只需要qemu-system-x86_64
启动命令中增加参数 –enable-kvm参数使能即可
> libvirt 与 kvm, qemu 的关系
https://www.cnblogs.com/sammyliu/p/4558638.html
在所谓的kvm技术中,应用到的其实有2个东西:qemu+kvm
kvm负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但kvm不能模拟其他设备;
qemu是模拟IO设备(网卡,磁盘),kvm加上qemu之后就能实现真正意义上服务器虚拟化。
因为用到了上面两个东西,所以一般都称之为qemu-kvm。
直接用qemu-kvm的接口管理虚拟化太繁琐,为了方便,通过libvirt 管理工具来调用qemu-kvm接口来实现虚拟化管理
libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和API。
Libvirtd是一个daemon进程,可以被本地的virsh调用,也可以被远程的virsh调用,Libvirtd调用qemu-kvm操作虚拟机。
图:https://blog.csdn.net/whatday/article/details/78445932
virsh, virt-manager, virt-viewer, virt-install, other tools
|
libvirt API
libvirt daemon
qemu (kvm)
/ | \
Xen KVM VMWare |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|