如果整個機器只跑一個 VM,並且沒有資源 overcommit (例如 VM 中 workload 使用的記憶體大小超過物理機器上的總記憶體大小,使用的 vCPU 數量超過物理機器上 CPU 核數/硬體執行緒數) 的情況下,藉助 Intel VT-x/VT-d 技術 (AMD 的具體效能不清楚,它們之前已經退出伺服器市場很長時間了),在比較新的 KVM 和 QEMU 上,對於 VM 裡 CPU sensitive 的 workload,平均大概能達到物理機的 90% - 95% 左右;對於 memory sensitive 的 workload,可能會有 10% 左右的效能損失;對於 VT-d passthrough 裝置,需要根據具體裝置具體分析,GPU 也許能達到 95% 左右的效能,慢速網絡卡 (1G/10G) 也許能達到滿速。當然,這些可能需要做好最佳化,例如:將每個 vCPU pin 到單獨的 pCPU 上,設定好中斷和 vCPU/pCPU 的 affinity,設定好 memory 和 vCPU/pCPU 的 affinity。
對於多 VM 同時執行的情況,要獲得良好的效能,需要儘可能的避免 overcommit 和做好 VM 之間的資源隔離,例如將每個 VM 的 vCPU pin 到不同的 pCPU 上,將每個 VM 的 disk image 放在不同的物理磁碟裝置上。
至於需要什麼樣的硬體,要根據 VM 的 workload 的型別來決定。對併發要求高的,就使用核數/硬體執行緒數多的 CPU;對於記憶體大小要求高的,就買更多的記憶體;對於 I/O 裝置 (包括 GPU) 效能要求高的,就使用支援硬體 passthrough 的 CPU/主機板 和 I/O 裝置。此外,對於 Intel 的 CPU 和晶片組,一般越新/越高階 (越壕) 的型號特別是 Xeon 系列上,會有越好的虛擬化最佳化和越多的虛擬化特性,例如更快的 VMExit/VMEntry,更多的可以硬體虛擬化的指令和部件 (例如 Local APIC 的硬體虛擬化, SRIOV),無需 Exit 的中斷最佳化 (VT-x/VT-d posted interrupt) 等。
如果整個機器只跑一個 VM,並且沒有資源 overcommit (例如 VM 中 workload 使用的記憶體大小超過物理機器上的總記憶體大小,使用的 vCPU 數量超過物理機器上 CPU 核數/硬體執行緒數) 的情況下,藉助 Intel VT-x/VT-d 技術 (AMD 的具體效能不清楚,它們之前已經退出伺服器市場很長時間了),在比較新的 KVM 和 QEMU 上,對於 VM 裡 CPU sensitive 的 workload,平均大概能達到物理機的 90% - 95% 左右;對於 memory sensitive 的 workload,可能會有 10% 左右的效能損失;對於 VT-d passthrough 裝置,需要根據具體裝置具體分析,GPU 也許能達到 95% 左右的效能,慢速網絡卡 (1G/10G) 也許能達到滿速。當然,這些可能需要做好最佳化,例如:將每個 vCPU pin 到單獨的 pCPU 上,設定好中斷和 vCPU/pCPU 的 affinity,設定好 memory 和 vCPU/pCPU 的 affinity。
對於多 VM 同時執行的情況,要獲得良好的效能,需要儘可能的避免 overcommit 和做好 VM 之間的資源隔離,例如將每個 VM 的 vCPU pin 到不同的 pCPU 上,將每個 VM 的 disk image 放在不同的物理磁碟裝置上。
至於需要什麼樣的硬體,要根據 VM 的 workload 的型別來決定。對併發要求高的,就使用核數/硬體執行緒數多的 CPU;對於記憶體大小要求高的,就買更多的記憶體;對於 I/O 裝置 (包括 GPU) 效能要求高的,就使用支援硬體 passthrough 的 CPU/主機板 和 I/O 裝置。此外,對於 Intel 的 CPU 和晶片組,一般越新/越高階 (越壕) 的型號特別是 Xeon 系列上,會有越好的虛擬化最佳化和越多的虛擬化特性,例如更快的 VMExit/VMEntry,更多的可以硬體虛擬化的指令和部件 (例如 Local APIC 的硬體虛擬化, SRIOV),無需 Exit 的中斷最佳化 (VT-x/VT-d posted interrupt) 等。