概述
- 大机器不灵活, 因此诞生在物理机上搭建虚拟机的方法.
- 资源大小不灵活
- 资源申请不灵活
- 资源共享不灵活
- 搭建虚拟机的问题是: 虚拟机软件必定是运行在用户态, 虚拟机中的内核无法运行内核指令.
- 在虚拟化层, 例如桌面应用 VritualBox 中有三种虚拟化方式:
- 完全虚拟化
由虚拟化软件(例如 VirtualBox) 模拟假的 CPU, 内存, 硬盘等待资源, 将虚拟机的内核指令转发给外部系统运行, 将结果返还给虚拟机.
缺点: 执行速度很慢. - 硬件虚拟化
为了提高运行速率, 让虚拟机大部分内核指令都能直接在 CPU 上执行, 部分敏感指令还是通过中转的方式执行. Intel VT-X 和 AMD AMD-V 提供硬件支持. 通过添加标志位来标识当前虚拟机的指令是否直接在 CPU 上执行. -
半虚拟化
网络/硬盘可以加载针对虚拟机特殊优化的驱动, 通过内存缓存等方式优化资源的访问.
image.png
- 完全虚拟化
- 虚拟化工具
- 桌面虚拟化软件用 VirtualBox, 服务器上用 qemu
- qemu 采用完全虚拟化的模式. 可在 BIOS 中打开硬件辅助虚拟化, 虚拟机 CPU 指令通过 KVM 直接运行, 提高运行速率.
- KVM 是一个内核模块. 通过 /dev/kvm 暴露接口, 用户态程序可以通过 ioctl 访问这个接口直接运行 CPU 指令.
- Qemu 整合 KVM, 将 CPU 指令交由 KVM 运行. 即 qemu-kvm (或 qemu-system-XXX)
- Qemu-kvm 只解决 CPU 性能问题, qemu 让虚拟机加载特殊驱动, 实现半虚拟化. 例如网络驱动 virtio_net, 存储驱动 virtio_blk.
网友评论