ADVERTISEMENT
用虛擬層中介硬體資源
傳統X86將指令的權限分為ring 0 ~ 3共4個層級,而控制硬體的指令就是存取權限最高的ring 0。但礙於ring 0通常只有kernel(核心)及driver(驅動)可以使用,故虛擬機器需透過其他方式才能使用硬體資源。
虛擬層(統稱為hypervisor)就是為了能夠呼叫ring 0層級的指令而產生的軟體,讓虛擬機器可以透過虛擬層使用硬體資源。而使用者開發的應用程式,使用到的指令權限只到ring 3,並不影響資源虛擬化的過程。又依據虛擬化管理方案的不同,大致上可分為全虛擬(full virtualization)及半虛擬(paravirtualization)。全虛擬的解決方案中又以KVM較為著名(http://www.linux-kvm.org/),而半虛擬比較有名的則是Xen(http://xen.org/)。
虛擬化有2種
所謂的全虛擬,即虛擬機器透過hypervisor,以binary translation(二進制碼轉譯)的技術來呼叫ring 0 層級的指令,再將需求送至硬體,並模擬出所有需要的硬體元件。其中包括處理器、記憶體、網路卡及硬碟等設備。而全虛擬的好處就是虛擬機器的獨立性很高,但binary translation技術會讓虛擬機器的運作效能受到限制。
▲全虛擬技術會透過binary translation導致效能降低。
半虛擬效能較佳
半虛擬則是為了提升虛擬機器的效能,其解決方案就是讓hypervisor不必透過binary translation,就能夠呼叫ring 0層級指令來使用硬體的資源。但如同前述,ring 0的指令通常只有kernel及driver能夠直接使用,因此半虛擬必需修改虛擬機器的及實體機器的核心,故硬體的相容性相對全虛擬來得差。
▲半虛擬則可透過hypervisor呼叫ring 0指令,效能表現較佳。
因為半虛擬是透過hypervisor直接呼叫ring 0的指令,相當於虛擬機器直接使用硬體元件,虛擬機器的硬體元件不全然是hypervisor模擬出來的,而稱此解決方案為半虛擬。
非開源系統限制多
若以半虛擬的Xen為例,虛擬機器透過修改過後的作業系統(又稱為DomU),來呼叫hypervisor存取硬體裝置,而hypervisor是透過Xen修改過的主作業系統Dorm直接驅動硬體裝置。如此一來,雖然可以提升效能,但也因為需要修改作業系統的核心,對於未開放原始碼的作業系統來說,會造成很大的限制。
(後面還有:雲端服務在哪裡?)
這兩個可是超吃瞬間的連接數(≧▽≦)
更何況虛擬之後多少會有點效能落差?
※ 引述《Fantasi》的留言:
> 不太能夠理解的是,虛擬化吃的還是實體主機的資源,當一台實體主機無法負荷的操作,如何能夠期待一台實體主機虛擬成兩台主機之後能夠負擔?
> 更何況虛擬之後多少會有點效能落差?
db 可不是說加就加的。
且 訂票網站塞爆 通常不是 ap 的問題而是db 的問題。
希望作者能有更詳細的說明