KVM虛擬化知識

1. 什么是虛擬化和遷移

什么是虛擬化

“虛擬化 ”是一個描述運行軟件的廣義計算機術(shù)語,通常體現(xiàn)為在單一系統(tǒng)上運行多個操作系統(tǒng),這些操作系統(tǒng)同時運行,而每個操作系統(tǒng)又是相互獨立的。大多數(shù)現(xiàn)行的虛擬化實現(xiàn)使用一個“虛擬機管理程序 ”(hypervisor),即一個軟件層或子系統(tǒng),該子系統(tǒng)控制硬件并向“客機操作系統(tǒng) ”提供訪問底層硬件的途徑。通過向客機操作系統(tǒng)提供虛擬化的硬件虛擬機管理程序允許多種操作系統(tǒng)在相同的物理系統(tǒng)中運行,該虛擬機管理系統(tǒng)稱為“客機 ”(guest),虛擬化操作系統(tǒng)有多種方式:

虛擬化方式

  1. 全虛擬化
    全虛擬化利用處理器的硬件特性,向客機提供底層實體系統(tǒng)的總抽象。這創(chuàng)建了新的虛擬系統(tǒng),被稱為一個“虛擬機 ”(virtual machine),它允許客機操作系統(tǒng)在無需修改的情況下運行??蜋C操作系統(tǒng)和任何在客機虛擬機器中的應(yīng)用并不會察覺出虛擬化環(huán)境并正常運作。硬件支持虛擬化這項技術(shù),用于實現(xiàn)在 Red Hat Enterprise Linux 中 KVM 的全面虛擬化。
  2. 半虛擬化
    半虛擬化應(yīng)用一系列呈現(xiàn)給虛擬機的軟件和數(shù)據(jù)結(jié)構(gòu),需要客機中的軟件修改以使用半虛擬環(huán)境。半虛擬化包含整個內(nèi)核,就像 Xen 準虛擬機,或者虛擬化 I/O 設(shè)備的驅(qū)動程序一樣。
  3. 軟件虛擬化(或仿真)
    軟件虛擬化利用更慢的二進制轉(zhuǎn)換和其他仿真技術(shù)運行未更改的操作系統(tǒng)。Red Hat Enterprise Linux 不支持軟件虛擬化。

什么是遷移?

“遷移 ”(migration)描述了一個客體虛擬機從一個主機遷移到另一個主機的過程。鑒于虛擬機在虛擬化環(huán)境下運行,而非直接在硬件上運行,該遷移是可以實現(xiàn)的。遷移一個虛擬機有兩種途徑:即時遷移和離線遷移。

遷移類型

  1. 離線遷移
    離線遷移暫?;蜿P(guān)閉虛擬機,接著移動一個虛擬機的內(nèi)存鏡像到目標主機。虛擬機在目標主機上恢復(fù),在源主機上被虛擬機使用的內(nèi)存得以釋放。
  2. 即時遷移
    即時遷移是將一個活躍虛擬機從一個實體主機遷移到另一個實體主機的過程。

2. Red Hat Enterprise Linux 的 KVM 和虛擬化

何謂 KVM ?

KVM(基于內(nèi)核的虛擬機,Kernel-based Virtual Machine)是為 AMD64 和 Intel 64 硬件上的 Linux 提供的完全虛擬化的解決方案,它包括在標準 Red Hat Enterprise Linux 7 內(nèi)核中。KVM 可運行多種無需修改的 Windows 和 Linux 客機操作系統(tǒng)。 Red Hat Enterprise Linux 的 KVM 虛擬機監(jiān)控程序使用 libvirt API 和 libvirt 的工具程序(如 virt-manager、virsh)進行管理。虛擬機以多線程的 Linux 進程形式運行,并通過上面提到的工具程序進行管理。

過度分配

KVM 監(jiān)控程序支持系統(tǒng)資源“過度分配 ”(overcommitting)功能。過度分配意味著可以分配比系統(tǒng)中實際擁有的資源更多的虛擬化 CPU 或內(nèi)存。過度分配內(nèi)存允許主機充分利用物理內(nèi)存來分配更多虛擬內(nèi)存,從而達到提升客機密度的目的。

精簡配置

“精簡配置 ”(thin provisioning)允許靈活分配內(nèi)存,并且為每個客機虛擬機優(yōu)化可用空間。它產(chǎn)生一種現(xiàn)象,即客機物理內(nèi)存比實際可用內(nèi)存更多。這與過度分配功能不同,因為它只適用于存儲,而不適用于 CPU 或內(nèi)存分配。但是,過度分配功能所存在的風險同樣適用于這個功能。

KSM

KVM hypervisor 使用的 “Kernel SamePage Merging ”(KSM)允許 KVM 客機共享相同內(nèi)存頁面。這些共享頁一般是通用的庫或其他相同的、高頻使用的數(shù)據(jù)。KSM 通過避免重復(fù)的內(nèi)存,使具有相同或相似客機操作系統(tǒng)的客機密度更大。

QEMU 客機代理

“QEMU 客機代理 ”(QEMU Guest Agent)在客機操作系統(tǒng)上運行,通過它,主機可以向客機操作系統(tǒng)發(fā)出命令。

Hyper-V 入門知識

Red Hat Enterprise Linux 7 的 KVM 實現(xiàn)了幾個 Hyper-V 兼容功能,Windows 客機通過使用它們可以提高性能和穩(wěn)定性,從而使得 Windows 客機如在微軟 Hyper-V 虛擬機監(jiān)控程序上運行一般。

磁盤 I/O 節(jié)流

當幾個虛擬機同時運行,可能會因為使用過多磁盤 I/O 對系統(tǒng)性能形成干擾。KVM 中的“磁盤 I/O 節(jié)流 ”(Disk I/O throttling)對從虛擬機器向主機發(fā)出的磁盤 I/O請求作出限定 。這可以防止虛擬機過度使用共享資源,并影響其他虛擬機的性能。

自動化 NUMA 平衡

“自動化 NUMA 平衡 ”功能在不需要對 Red Hat Enterprise Linux7 虛擬機進行手工性能優(yōu)化的情況下,提高 NUMA 硬件系統(tǒng)上運行的應(yīng)用程序的性能。自動化 NUMA 平衡功能會把所執(zhí)行的任務(wù)(線程或進程)移到和所需要訪問的內(nèi)存更接近的地方。

虛擬 CPU 熱添加

虛擬 CPU (vCPU) 熱添加功能可以在無需要停機的情況下,根據(jù)需要為運行的虛擬機增加處理能力。分配到虛擬機的 vCPU 可能會被添加到運行的客機上,來滿足工作量需求,或維持與工作負載相關(guān)的服務(wù)等級協(xié)議 (SLA)。

3. 虛擬化硬件設(shè)備

Red Hat Enterprise Linux 7 的虛擬化功能為虛擬機提供了三種不同形式的系統(tǒng)設(shè)備。這三種形式包括:

  • 虛擬和仿真設(shè)備
  • 半虛擬化設(shè)備
  • 物理共享設(shè)備

這些硬件設(shè)備都被顯示為物理連接到虛擬機,但設(shè)備的驅(qū)動以不同方式工作。

3.1 虛擬和仿真設(shè)備

KVM 在軟件中實現(xiàn)了虛擬機的多個核心設(shè)備。這些仿真硬件設(shè)備對虛擬化操作系統(tǒng)至關(guān)重要。
仿真設(shè)備即完全使用軟件實現(xiàn)的虛擬化設(shè)備。
仿真驅(qū)動可能使用物理設(shè)備,或虛擬化軟件設(shè)備。仿真驅(qū)動是虛擬機和 Linux 內(nèi)核(管理源設(shè)備)間的“翻譯層”。設(shè)備層的指示會由 KVM 虛擬機監(jiān)控程序進行完全轉(zhuǎn)換。任何可以被 Linux 內(nèi)核識別的同類設(shè)備(儲存、網(wǎng)絡(luò)、鍵盤和鼠標),都可以作為仿真驅(qū)動的后端源設(shè)備。

虛擬化 CPU (vCPU)

無論主機 CPU 的數(shù)量有多少,主機系統(tǒng)都可以為客機提供多達 160 個虛擬化 CPU (vCPU)。

仿真圖形設(shè)備

有兩種仿真圖形設(shè)備可供選擇。這類設(shè)備可以使用 SPICE (Simple Protocol for Independent Computing Environments)協(xié)議或 VNC 進行連接:

  • Cirrus CLGD 5446 PCI VGA 卡(使用cirrus設(shè)備)
  • 標準 VGA 圖形卡,帶有 Bochs VESA 擴展程序(硬件等級,包括所有非標準模式)

仿真系統(tǒng)組件

仿真以下核心系統(tǒng)組件來提供基本系統(tǒng)功能:

  • Intel i440FX 主機 PCI 網(wǎng)橋
  • PIIX3 PCI 到 ISA 的網(wǎng)橋
  • PS/2 鼠標和鍵盤
  • EvTouch USB 圖形平板設(shè)備
  • PCI UHCI USB 控制器與虛擬化 USB 集線器
  • 仿真串口
  • EHCI 控制器,虛擬化 USB 存儲和 USB 鼠標
  • USB 3.0 xHCI 主機控制器(Red Hat Enterprise Linux 7.1 技術(shù)預(yù)覽)

仿真聲音設(shè)備

Red Hat Enterprise Linux 6.1 以上版本提供了仿真(Intel) HDA 聲音設(shè)備, intel-hda。此設(shè)備由以下客機運行系統(tǒng)進行支持:

  • Red Hat Enterprise Linux 7,用于 x86_64 架構(gòu)
  • Red Hat Enterprise Linux 6,用于 i386 和 x86_64 架構(gòu)
  • Red Hat Enterprise Linux 5,用于 i386 和 x86_64 架構(gòu)
  • Red Hat Enterprise Linux 4,用于 i386 和 x86_64 架構(gòu)
  • Windows 7,用于 i386 和 x86_64 架構(gòu)
  • Windows 2008 R2,用于 x86_64 架構(gòu)
    以下仿真聲音系統(tǒng)同樣可供選擇,但鑒于與固定客機運行系統(tǒng)兼容性問題,不推薦使用:
  • ac97,仿真 Intel 82801AA AC97 音頻兼容聲卡

仿真監(jiān)視器設(shè)備

Red Hat Enterprise Linux 6.0 及以上版本提供了兩種仿真監(jiān)視器設(shè)備。監(jiān)視器可以在虛擬機超載或未響應(yīng)時,自動重啟虛擬機。
watchdog程序包務(wù)必安裝在客機上。
兩種可供選擇的設(shè)備為:

  • i6300esb,仿真 Intel 6300 ESB PCI 監(jiān)視器設(shè)備。它支持客機操作系統(tǒng) Red Hat Enterprise Linux 版本 6.0 以上,為推薦使用設(shè)備。
  • ib700,仿真 iBase 700 ISA 監(jiān)視器設(shè)備。ib700監(jiān)視器僅支持使用 Red Hat Enterprise Linux 6.2 以上版本的客機。

兩種監(jiān)視器設(shè)備均支持客機操作系統(tǒng) Red Hat Enterprise Linux 6.2 以上版本的 i386 與 x86_64 架構(gòu)。

仿真網(wǎng)絡(luò)設(shè)備

兩種仿真網(wǎng)絡(luò)設(shè)備可供選擇:

  • e1000
    設(shè)備仿真了 Intel E1000 網(wǎng)絡(luò)適配器(Intel 82540EM、82573L、82544GC)。
  • rtl8139
    設(shè)備仿真了 Realtek 8139 網(wǎng)絡(luò)適配器。

仿真儲存驅(qū)動

儲存驅(qū)動與儲存池可以使用這些仿真設(shè)備,將儲存設(shè)備與虛擬機相連??蜋C使用仿真儲存驅(qū)動可訪問儲存池。

注意,同所有虛擬設(shè)備一樣,儲存驅(qū)動不是儲存設(shè)備。對于虛擬機器,該驅(qū)動作為備用儲存設(shè)備、文件或儲存池容量進行使用。備用儲存設(shè)備可為任何支持的儲存設(shè)備、文件、或儲存池容量形式。

仿真 IDE 驅(qū)動

KVM 提供兩種仿真 PCI IDE 接口。仿真 IDE 驅(qū)動可以用于將多達四個虛擬化 IDE 硬盤或虛擬化 IDE 光盤驅(qū)動組合與每臺虛擬機相連接。仿真 IDE 驅(qū)動同樣可用于虛擬化 CD-ROM 和 DVD-ROM 驅(qū)動。

仿真軟盤驅(qū)動

仿真軟盤驅(qū)動用于創(chuàng)造虛擬化軟驅(qū)。

仿真 AHCI 控制器

仿真 Advanced Host Controller Interface(AHCI)是 IDE 的一種替代產(chǎn)品。它包括在 Red Hat Enterprise Linux 7.1 中作為技術(shù)預(yù)覽。

3.2 半虛擬化設(shè)備

半虛擬化為客機使用主機上的設(shè)備提供了快速且高效的通訊方式。KVM 為虛擬機提供準虛擬化設(shè)備,它使用 Virtio API 作為虛擬機監(jiān)控程序和客機的中間層。

一些半虛擬化設(shè)備可以減少 I/O 的延遲,并把 I/O 的吞吐量提高至近裸機水平,而其它準虛擬化設(shè)備可以把本來無法使用的功能添加到虛擬機上。當虛擬機運行大小需要密集 I/O 操作的應(yīng)用程序時,推薦使用半虛擬化設(shè)備,而不是使用仿真設(shè)備。

所有 virtio 設(shè)備都有兩部分:主機設(shè)備和客機驅(qū)動。半虛擬化設(shè)備驅(qū)動允許客機操作系統(tǒng)訪問主機系統(tǒng)上的物理設(shè)備。

半虛擬化設(shè)備的驅(qū)動必須安裝在客機操作系統(tǒng)上。默認情況下,半虛擬化設(shè)備驅(qū)動包含在 Red Hat Enterprise Linux 4.7 以上版本、Red Hat Enterprise Linux 5.4 以上版本、以及 Red Hat Enterprise Linux6.0 以上版本中。半虛擬化設(shè)備驅(qū)動須在 Windows 客機上手動安裝。

半虛擬化網(wǎng)絡(luò)設(shè)備(virtio-net)

半虛擬化網(wǎng)絡(luò)設(shè)備是虛擬化網(wǎng)絡(luò)設(shè)備,它為虛擬機提供了網(wǎng)絡(luò)訪問能力,并可以提供網(wǎng)絡(luò)性能及減少網(wǎng)絡(luò)延遲。

半虛擬化塊設(shè)備(virtio-blk)

半虛擬化塊設(shè)備是高性能虛擬化儲存設(shè)備,它可以為虛擬機提供高性能、低延遲的 I/O 存儲。半虛擬化塊設(shè)備由虛擬機監(jiān)控程序支持,與虛擬機相連(軟盤驅(qū)動除外,它只能被仿真)。

半虛擬化控制器設(shè)備(virtio-scsi)

半虛擬化 SCSI 控制器設(shè)備是一種更為靈活且可擴展的 virtio-blk 替代品。virtio-scsi 客機能繼承目標設(shè)備的各種特征,并且能操作幾百個設(shè)備,相比之下,virtio-blk 僅能處理 28 臺設(shè)備。
virtio-scsi 完全支持以下客機操作系統(tǒng):

  • Red Hat Enterprise Linux 7
  • Red Hat Enterprise Linux 6.4 以上版本。
  • Windows Server 2008(32/64 比特)
  • Windows Server 2008 R2
  • Windows 7(32/64 比特)
  • Windows Server 2012
  • Windows Server 2012 R2
  • Windows 8(32/64 比特)
  • Windows 8.1(32/64 比特)

半虛擬化時鐘

使用時間戳計數(shù)器(TSC,Time Stamp Counter)作為時鐘源的客機可能會出現(xiàn)與時間相關(guān)的問題。KVM 在主機外圍工作,這些主機在向客機提供半虛擬化時間時沒有固定的 TSC。此外,半虛擬化時鐘會在客機運行 S3 或掛起 RAM 時幫助調(diào)整所需時間。半虛擬化時鐘不支持 Windows 客機。

半虛擬化串口設(shè)備 (virtio-serial)

半虛擬化串口設(shè)備是面向比特流的字符流設(shè)備,它為主機用戶空間與客機用戶空間之間提供了一個簡單的交流接口。

氣球設(shè)備(virtio-balloon)

氣球(ballon)設(shè)備可以指定虛擬機的部分內(nèi)存為沒有被使用(這個過程被稱為氣球“充氣” — inflation),從而使這部分內(nèi)存可以被主機(或主機上的其它虛擬機)使用。當虛擬機這部分內(nèi)存時,氣球可以進行“放氣”(deflated),主機就會把這部分內(nèi)存重新分配給虛擬機。

半虛擬化隨機數(shù)字生成器 (virtio-rng)

半虛擬化隨機數(shù)字生成器使虛擬機可以直接從主機收集熵或隨意值來使用,以進行數(shù)據(jù)加密和安全。因為典型的輸入數(shù)據(jù)(如硬件使用情況)不可用,虛擬機常常急需熵。取得熵很耗時;virtio-rng 通過直接把熵從主機注入客機虛擬機從而使這個過程加快 。

半虛擬化圖形卡(QXL)

半虛擬化圖形卡與 QXL 驅(qū)動一同提供了一個有效地顯示來自遠程主機的虛擬機圖形界面。SPICE 需要 QXL 驅(qū)動。

3.3 物理主機設(shè)備

特定硬件平臺允許虛擬機直接訪問多種硬件設(shè)備及組件。在虛擬化中,此操作被稱為 “設(shè)備分配”(device assignment)。設(shè)備分配又被稱作 “傳遞”(passthrough)。

VFIO 設(shè)備分配

虛擬功能 I/O(VFIO)是 Red Hat Enterprise Linux 7 中一個新的內(nèi)核驅(qū)動,它為虛擬機提供了訪問物理硬件的高性能。

VFIO 把主機系統(tǒng)上的 PCI 設(shè)備與虛擬機直接相連,允許客機在執(zhí)行特定任務(wù)時有獨自訪問 PCI 設(shè)備的權(quán)限。這就象 PCI 設(shè)備物理地連接到客機虛擬機上一樣。

通過把設(shè)備分配從 KVM 虛擬機監(jiān)控系統(tǒng)中移出,并在內(nèi)核級中強制進行設(shè)備隔離,VFIO 比以前的 PCI 設(shè)備分配有了很大的改進。VFIO 安全性更高且與安全啟動兼容。在 Red Hat Enterprise Linux 7 中,它是默認的設(shè)備分配機制。

Red Hat Enterprise Linux 7 中 VFIO 把分配設(shè)備的數(shù)量從 Red Hat Enterprise Linux 6 中最多 8 個增加到 32 個。VFIO 也支持對 NVIDIA GPU 的分配。

USB 傳遞

KVM hyperviso 支持把主機系統(tǒng)上的 USB 設(shè)備連接到虛擬機。USB 設(shè)備分配允許客機擁有在執(zhí)行特定任務(wù)時有專有訪問 USB 設(shè)備的權(quán)利。這就象 USB 設(shè)備物理地連接到虛擬機上一樣。

SR-IOV

SR-IOV (Single Root I/O Virtualization)是一個 PCI 快捷標準,把單一物理 PCI 功能擴展到同分散的虛擬化功能(VF)一樣共享 PCI 資源。通過 PCI 設(shè)備分配,每個功能可以被不同虛擬機使用。

支持 SR-IOV 的 PCI-e 設(shè)備提供一個單一根功能(如單一以太網(wǎng)接口),并把多個各自分離的虛擬設(shè)備作為獨特 PCI 設(shè)備功能。每個虛擬化設(shè)備都可能有自身獨特的 PCI 配置空間、內(nèi)存映射的寄存器以及單獨的基于 MSI 的中斷系統(tǒng)。

NPIV

N_Port ID Virtualization(NPIV)是對光纖通道設(shè)備有效的功能。NPIV 共享單一物理 N_Port 作為多個 N_Port ID。NPIV 為 HBA(光纖通道主機總線適配器,F(xiàn)ibre Channel Host Bus Adapter)提供和 SR-IOV 為 PCIe 接口提供的功能相似的功能。有了 NPIV,可以為 SAN(存儲區(qū)域網(wǎng)絡(luò),Storage Area Network)提供帶有虛擬光纖通道發(fā)起程序的虛擬機。

NPIV 可以提供帶有企業(yè)級存儲解決方案的高密度虛擬環(huán)境。

3.4 客機 CPU 型號

CPU 型號”(CPU model)規(guī)定了哪些主機 CPU 功能對客機操作系統(tǒng)有效。
qemu-kvmlibvirt包含了幾種當前處理器型號的定義,允許用戶啟用僅在新型 CPU 型號中可用的 CPU 功能。 對客機有效的的 CPU 功能取決于主機 CPU 的支持、內(nèi)核以及qemu-kvm代碼。

為了使虛擬機可以在具有不同 CPU 功能集的主機間安全地進行遷移,qemu-kvm在默認狀態(tài)下不會把主機 CPU 的所有功能都提供給客機操作系統(tǒng),而是根據(jù)所選的 CPU 型號來為虛擬機提供相關(guān)的 CPU 功能。如果虛擬機啟用了某個 CPU 功能,則此虛擬機無法遷移到不支持向客機提供此功能的主機上。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容