概述
- 大機器不靈活, 因此誕生在物理機上搭建虛擬機的方法.
- 資源大小不靈活
- 資源申請不靈活
- 資源共享不靈活
- 搭建虛擬機的問題是: 虛擬機軟件必定是運行在用戶態(tài), 虛擬機中的內(nèi)核無法運行內(nèi)核指令.
- 在虛擬化層, 例如桌面應用 VritualBox 中有三種虛擬化方式:
- 完全虛擬化
由虛擬化軟件(例如 VirtualBox) 模擬假的 CPU, 內(nèi)存, 硬盤等待資源, 將虛擬機的內(nèi)核指令轉發(fā)給外部系統(tǒng)運行, 將結果返還給虛擬機.
缺點: 執(zhí)行速度很慢. - 硬件虛擬化
為了提高運行速率, 讓虛擬機大部分內(nèi)核指令都能直接在 CPU 上執(zhí)行, 部分敏感指令還是通過中轉的方式執(zhí)行. Intel VT-X 和 AMD AMD-V 提供硬件支持. 通過添加標志位來標識當前虛擬機的指令是否直接在 CPU 上執(zhí)行. -
半虛擬化
網(wǎng)絡/硬盤可以加載針對虛擬機特殊優(yōu)化的驅動, 通過內(nèi)存緩存等方式優(yōu)化資源的訪問.
image.png
- 完全虛擬化
- 虛擬化工具
- 桌面虛擬化軟件用 VirtualBox, 服務器上用 qemu
- qemu 采用完全虛擬化的模式. 可在 BIOS 中打開硬件輔助虛擬化, 虛擬機 CPU 指令通過 KVM 直接運行, 提高運行速率.
- KVM 是一個內(nèi)核模塊. 通過 /dev/kvm 暴露接口, 用戶態(tài)程序可以通過 ioctl 訪問這個接口直接運行 CPU 指令.
- Qemu 整合 KVM, 將 CPU 指令交由 KVM 運行. 即 qemu-kvm (或 qemu-system-XXX)
- Qemu-kvm 只解決 CPU 性能問題, qemu 讓虛擬機加載特殊驅動, 實現(xiàn)半虛擬化. 例如網(wǎng)絡驅動 virtio_net, 存儲驅動 virtio_blk.
