# KVM : Linux 虛擬化基礎建設 contributed by `TonyLinX` reference : [KVM: Linux 虛擬化基礎建設](https://hackmd.io/@sysprog/linux-kvm) ## 簡介 KVM (Kernel-based Virtual Machine) 是 Linux 核心提供的系統虛擬機器基礎建設,它是個 Linux 核心模組,能讓 Linux 系統成為一個 Type-2 Hypervisor 。KVM 透過硬體虛擬化支援 (Intel VT, AMD-V) 來提供 CPU 和記憶體虛擬化功能。藉由硬體虛擬化技術,客體作業系統 (Guest OS) 不必經由軟體模擬或轉換指令, :::info Type-2 Hypervisor * Hypervisor 是一種管理虛擬機器(Virtual Machine, VM)的軟體,能讓多個作業系統同時在同一台實體機器上執行,彼此隔離但可共享底層資源(如 CPU、記憶體、I/O 裝置)。 * Type-1 Hypervisor 是直接安裝在硬體上的虛擬化層,不需要傳統的主機作業系統,因此所有的虛擬機器會直接跑在 Hypervisor 所管理的環境中。常見於資料中心與伺服器虛擬化。 * Type-2 Hypervisor 則是安裝在一個現成的作業系統(Host OS)之上,像是一個應用程式。這種方式通常需要先啟動主機作業系統,然後使用虛擬化軟體(如 VirtualBox、VMware Workstation、KVM+QEMU)來啟動 VM。 * KVM(Kernel-based Virtual Machine)是 Linux 核心中的一個**核心模組**(`kvm.ko`),載入後即可讓 Linux 系統具備 Hypervisor 能力,無需額外安裝完整的虛擬化系統。但 KVM 本身**不是一個完整的虛擬機管理器**,它僅提供執行虛擬機器所需的底層虛擬化能力,例如虛擬 CPU 的切換與執行,並不負責建立、開關 VM 或資源配置等操作,這些功能通常由 QEMU、libvirt 等使用者空間的工具來完成。 * 客體作業系統 (Guest OS):硬體之上是通用的作業系統,例如 Linux,那在這個通用的作業系統之上,我們還可以執行虛擬機器的管理程式,例如 KVM,然後在這個 Hypervisor 之上執行的作業系統就是 Guest OS。 ::: ## 虛擬化概況 * 這圖裡面的 Vitual Machine Monitor 是 Type-1 Hypervisor,因為它運作在硬體之上。 * 虛擬化可以粗略分成三種: * CPU 虛擬化:使 guest 作業系統能以為自己擁有獨立的處理器,實際上是由 Hypervisor 調度實體 CPU。 * 記憶體虛擬化:讓 guest 擁有獨立的記憶體空間(guest physical memory),透過機制如 shadow page table 或 EPT 映射到實體記憶體。 * I/O(週邊裝置)虛擬化:模擬磁碟、網卡、USB 等裝置,guest 透過虛擬裝置與 host 溝通,常搭配 virtio、VFIO 技術提升效能。  ### Server Virtualization Benefit * Workload consolidation(工作負載整合) 以訂票系統為例,平時只需少量資源維持運作,但在特定尖峰時段(如演唱會開賣),需要快速擴充大量設備。透過虛擬化,可以動態調整虛擬機數量與資源分配,提升伺服器利用率。傳統實體部署則需預先準備多台機器,若未達負載預期,就會造成資源閒置與浪費。 * Legacy OS support(舊系統支援) 某些舊遊戲或舊版軟體只能在特定舊版作業系統上執行,例如 Windows XP 或 early Linux 發行版。若在現代硬體或系統上已無法直接支援,透過虛擬化技術可建立對應的虛擬環境,在現代系統上啟動舊版 OS,讓這些舊程式得以繼續執行。 * Instant provisioning(快速配置) 可透過模版或預先設定的映像檔(image),幾秒內快速建立虛擬機,省去實體安裝作業系統與配置網路、硬體等繁瑣過程。適合開發、測試、或臨時擴充需求。 * Migration(遷移能力) 虛擬化支援虛擬機的「動態遷移(Live Migration)」,可在不中斷服務的情況下,將 VM 移動到其他伺服器。這對於預測性維護、負載平衡特別重要,例如高峰期間可將訂票系統的 VM 動態分散到多台主機,確保系統穩定運行。  :::info Xen - Xen 是一個典型的 Type-1 Hypervisor,直接運行在硬體之上,負責資源分配與 VM 的排程。 - Dom0(Domain Zero)是第一個被 Xen 啟動的 VM,作為整個系統的管理者,擁有對實體硬體的特權存取權限,並負責啟動與管理其他 VM(DomU)。 - DomU(User Domains)是一般的 Guest VM,用於執行使用者的應用程式,但無法直接存取硬體。 - PV Frontend / PV Backend 是 Xen 中的 paravirtualization(半虛擬化)驅動架構。 - PV Frontend 位於 DomU,負責發送對硬體的操作請求(如網路、磁碟) - PV Backend 位於 Dom0,負責接收請求並透過實體硬體驅動(HW driver)執行實際操作 - 它們之間透過 shared memory 與 event channel 進行高效且低延遲的通訊 ::: Cloud-Hypervisor 是 Intel 以 KVM 為基礎,開發出來的嶄新 Virtual Machine Monitor (VMM),這項虛擬化建設著眼於資源配置侷限但又廣泛部署的雲端運算環境,採用 Rust 程式語言打造。Cloud-Hypervisor 由於自身定位,不考慮舊有通行的硬體支援,相反地,主要支援 VirtIO 為基礎的 para-virtualized device。 > virtIO 是一種用於虛擬機的裝置溝通協議。在 guest OS 中,virtIO 表現為一組驅動程式(drivers),例如:`virtio-net`(虛擬網卡)、`virtio-blk`(虛擬硬碟)等。這些 driver 負責將 I/O 請求發送給 host。 > 在 host 端,則由 virtIO back-end 接收這些請求並實際執行對實體裝置的操作。 > 由於這種方式不需要模擬整張網卡或硬碟等複雜硬體,因此效能更高、延遲更低,是現代虛擬化環境中常見的高效 I/O 解法。 Confidential Computing (可信任運算) 旨在建立一套可用於資料中心、雲端和邊緣運算的**安全信賴**環境標準和規範,以 AMD EPYC 處理器來說,利用其安全加密虛擬化 SEV (Secure Encrypted Virtualization),可藉由虛擬層來建立安全的虛擬機器,只要是在這個受信賴的虛擬機器內執行的任何程式,都可取得金鑰來解開遭加密記憶體上的資料,進行處理。因為虛擬機器所用的加密金鑰,是處理器內建的硬體加密機制隨機亂數產生,且每個虛擬機器都不一樣,因為在虛擬機器外部,無法取得這個金鑰來解開記憶體內處理中的資料,就達到阻絕外部瀏覽的保護效果。從虛擬機器層面來建立加密保護的優點是,應用程式不用修改,只要能放入該虛擬環境來執行,即可具有機密運算的作用。 > 為了防止某個 Guest OS 攻擊其他虛擬機(Guest OS),或竊取其記憶體資料,造成資安風險(例如 side-channel attack),可以透過硬體層的機密運算技術來提供保護。 > 例如 AMD 的 SEV(Secure Encrypted Virtualization)技術,能針對每台虛擬機的記憶體進行加密,KVM 也提供對此技術的支援與介面。 ### Hypervisor 的分類 Hypervisor 是作業系統與硬體之間的中間層,這允許多個作業系統可以作為獨立的 virtual machine(VM),運行於一個實體的電腦之上。Hypervisor 則管理硬體資源使這些 VM 可以共享之。它會在邏輯上將 VM 彼此分開,然後為每個 VM 指派本身的一部分基礎運算處理能力、記憶體和儲存容量,防止 VM 之間相互干擾。 Hypervisor 可以分為兩大類型,其一是 type-1 hypervisor,其直接運行在硬體之上,如下圖是比較經典的設計。它的優點是效率很高,因為可以直接存取硬體。這也增加了安全和穩定性,因為 type-1 hypervisor 和 CPU 之間不存在額外的作業系統層,因此較為單純而不容易被介入。  Type-2 hypervisor 則不直接在硬體上執行,而是作為應用程式執行在主作業系統(host)環境上執行,如下圖所展示的。因為 type-2 hypervisor 必須透過 host 作業系統存取資源,因而會引發延遲問題而相對 type-1 效能較差  這兩種虛擬化方式沒有絕對的誰比較好。雖然 Type-2 Hypervisor 在效能上通常略遜於 Type-1,因為其需經過主機作業系統的中介層,但在相容性與使用便利性上,Type-2 通常較為優勢,因為它不像 Type-1 一樣所有裝置驅動程式都要重新寫。 此外,為了彌補 Type-2 在效能上的劣勢,現今也有許多優化技術被廣泛應用,例如 virtIO,可顯著提升虛擬機的 I/O 效能。 :::info 補充 * KSM(Kernel Same-page Merging):會定期掃描系統中的記憶體頁面,將內容完全相同的記憶體頁面合併成一份,並讓多個 virtual address 指向同一個 physical page。 這在虛擬化環境中特別有用,因為不同的 VM 可能會執行相同的 Linux kernel 或相同的應用程式,導致記憶體中出現大量重複資料。KSM 能有效節省實體記憶體的使用。 :::
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up