內(nèi)存的工作原理
內(nèi)存在物理上是由內(nèi)存卡提供的,也就是我們俗稱的內(nèi)存條,內(nèi)存條提供了物理內(nèi)存。
在物理內(nèi)存之上還有虛擬內(nèi)存,虛擬內(nèi)存操作系統(tǒng)給程序分配的一段連續(xù)的內(nèi)存,屬于邏輯上的概念。
虛擬內(nèi)存和物理內(nèi)存之間會有一個映射關(guān)系,這個映射關(guān)系我們稱之為頁表,通過頁表,軟件可以把數(shù)據(jù)真實的寫到物理內(nèi)存里
比如在電腦上打開一個程序,比如打開微信,這時操作系統(tǒng)會給微信分配一段連續(xù)的虛擬內(nèi)存空間,但是這個虛擬內(nèi)存空間它僅僅是一個邏輯上的概念,當這個程序需要往物理內(nèi)存里寫東西的時候,它首先找到虛擬內(nèi)存,通過虛擬內(nèi)存和物理內(nèi)存之間映射關(guān)系的頁表,軟件就可以把數(shù)據(jù)真實的寫到物理內(nèi)存里。對于軟件來說,它本身能看到的只是分配給它的這個虛擬內(nèi)存空間,它是看不到底層的物理內(nèi)存的,
總結(jié)一下:
· 物理內(nèi)存:內(nèi)存條,內(nèi)存數(shù)據(jù)真實存放的物理設(shè)備。
· 虛擬內(nèi)存:操作系統(tǒng)給應(yīng)用程序分配的一段連續(xù)的虛擬內(nèi)存空間,并沒有真實的實體存在。
· 頁表:記錄了物理內(nèi)存和虛擬內(nèi)存之間的映射關(guān)系
內(nèi)存虛擬化架構(gòu)
當在物理機上起了一臺虛擬機之后,虛擬機要將數(shù)據(jù)寫入到物理內(nèi)存需要經(jīng)歷三次映射。如下圖,所以為什么虛擬相比物理機性能是有下降的,僅內(nèi)存讀寫的操作,原先只需要經(jīng)過一次映射,而虛擬機則需要經(jīng)過三次映射
· 宿主機物理內(nèi)存地址:物理機上內(nèi)存條的物理內(nèi)存地址
· 宿主機虛擬地址:Host OS給運行在物理機上的應(yīng)用分配的虛擬內(nèi)存地址,Hypervisor本質(zhì)上也是操作系統(tǒng)上的一個應(yīng)用。
· 客戶機物理地址:虛機的物理內(nèi)存地址,因為虛擬機作為一臺完整的設(shè)備也是有物理內(nèi)存地址的,只不過虛機的物理內(nèi)存是由Hypervisor使用宿主機給Hypervisor分配的虛擬內(nèi)存地址模擬出來的。
· 客戶機虛擬地址:虛機的操作系統(tǒng)GuestOS給運行在 虛機上的應(yīng)用分配的虛擬內(nèi)存地址。
第一次映射:客戶機系統(tǒng)頁表--虛擬機的虛擬內(nèi)存地址到虛擬機的物理內(nèi)存地址(Hypervisor模擬)
第二次映射:內(nèi)存槽--虛擬機的物理內(nèi)存地址(Hypervisor模擬)到物理機的虛擬內(nèi)存地址
第三次映射:宿主機系統(tǒng)頁表--物理機的虛擬地址到宿主機物理地址
MMU虛擬化
傳統(tǒng)MMU(內(nèi)存管理單元)負責虛擬地址映射為物理地址,主要包含兩種技術(shù)
· Software technique:shadow page tables(影子頁表)
· Hardware technique:Inter EPT and AMD RVI
shadow page tables(影子頁表)
· 影子頁表是VMM(Hypervisor)在宿主機內(nèi)核中為虛擬機進程維護了一個虛擬機的虛擬地址到宿主機物理地址的頁表,這個頁表和虛擬機內(nèi)核的頁表同步更新。
虛擬機上的應(yīng)用想要調(diào)度底層物理硬件的物理地址需要經(jīng)理三次映射:
· 虛擬機的虛擬內(nèi)存地址到虛擬機的物理內(nèi)存地址
· 虛擬機的物理內(nèi)存地址到物理機的虛擬內(nèi)存地址
· 物理機的虛擬內(nèi)存地址到物理機的物理內(nèi)存地址
每次虛擬機應(yīng)用要在內(nèi)存中讀寫數(shù)據(jù),都需要經(jīng)歷三次映射,這樣工作量太大,這時技術(shù)人員就想出一個辦法,在這三張頁表都建立完成后,再創(chuàng)建一張新的頁表:影子頁表,影子頁表記錄了虛擬機的虛擬內(nèi)存地址到物理機的物理內(nèi)存地址之間的映射。這樣虛擬機讀寫內(nèi)存時不需要經(jīng)過三次查找,而是直接讀第四張影子頁表,就可以直接從虛擬機的虛擬內(nèi)存地址直接到物理內(nèi)存地址,極大提升了虛擬機應(yīng)用的內(nèi)存讀寫效率
影子頁表適合于一次寫入、頻繁讀取的場景。
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,影子頁表在一些特定的場景下頁出現(xiàn)了一些其他的問題。舉個例子:
比如說網(wǎng)絡(luò)游戲,在網(wǎng)絡(luò)游戲中多人在線上同時玩,網(wǎng)絡(luò)游戲公司為了防止大家作弊,比如說英雄的金錢、血量等,這些其實都已一個一個的數(shù)據(jù)存在內(nèi)存中的,對于一些黑客來說,他就可以找到那個內(nèi)存然后更改這個內(nèi)存中的數(shù)據(jù),這樣的話就會影響游戲的公平性。
所以游戲公司開發(fā)了一個動態(tài)內(nèi)存技術(shù),將游戲中的一些關(guān)鍵數(shù)據(jù)動態(tài)的存儲在內(nèi)存中,它可能每秒就變一次,第一秒在第一個內(nèi)存空間里,第二秒系統(tǒng)就自動的把它隨機挪到另一個物理內(nèi)存空間里。
對于這種場景,影子頁表就會產(chǎn)生一個巨大的問題,因為影子頁表是三張頁表建立完成后,影子頁表直接將虛擬機的虛擬內(nèi)存地址映射到物理機的物理內(nèi)存地址,而動態(tài)內(nèi)存的場景下,因為數(shù)據(jù)在內(nèi)存中是動態(tài)存放的,所以,內(nèi)存中的數(shù)據(jù)每更新一次存放位置,三張頁表也需要更新映射關(guān)系,因為有影子頁表的存在,還要等三張頁表更新完成后再更新第四張影子頁表。
所以在這種動態(tài)內(nèi)存場景中,如果用之前的笨方法,映射三次,那它的處理時間就是延長三倍,如果用影子頁表,它還要創(chuàng)建第四張頁表,在這種場景下,它不僅沒有提升性能,反而增加了負擔。所以影子頁表適合于一次寫入、頻繁讀取的場景。
所以這個技術(shù)隨著IT技術(shù)的發(fā)展,在一些特定的場合下是沒有使用空間的
Inter EPT and AMD RVI
· 基于硬件的內(nèi)存虛擬化技術(shù),也叫硬件輔助內(nèi)存虛擬化,英特爾的叫Inter EPT,AMD的叫 AMD RVI,主要實現(xiàn)了虛擬機虛擬地址到宿主機物理地址“一步到位”的自動映射
Inter EPT and AMD RVI在CPU里新增了一個硬件:TLB(Translation look-aside buffer,轉(zhuǎn)換查找緩沖器)
原先虛擬機上的應(yīng)用需要調(diào)度物理內(nèi)存需要經(jīng)歷三次映射,這三次映射它的運算都是要靠CPU和內(nèi)存完成的,這三次映射都會占用一部分CPU和內(nèi)存資源,從而造成了虛機性能下降。
現(xiàn)在硬件輔助內(nèi)存虛擬化增加了一個專門的硬件TLB,這個硬件的功能就是完成那三次映射運算的,這樣那三次映射的運算就不用再占用CPU和內(nèi)存資源,這個專用的硬件是針對映射算法進行了專門的優(yōu)化的,它的轉(zhuǎn)換速度是非??斓摹_@個技術(shù)就對于提升虛擬機內(nèi)存虛擬化后的性能有一個顯著的幫助
這個技術(shù)也是需要在BIOS里開啟,有些服務(wù)器開了CPU虛擬化會同步把內(nèi)存虛擬化也開啟,有些需要單獨打開文章來源:http://www.zghlxwxcb.cn/news/detail-829664.html
Inter EPT and AMD RVI在CPU里新增了一個硬件:TLB(Translation look-aside buffer,轉(zhuǎn)換查找緩沖器)
原先虛擬機上的應(yīng)用需要調(diào)度物理內(nèi)存需要經(jīng)歷三次映射,這三次映射它的運算都是要靠CPU和內(nèi)存完成的,這三次映射都會占用一部分CPU和內(nèi)存資源,從而造成了虛機性能下降。
現(xiàn)在硬件輔助內(nèi)存虛擬化增加了一個專門的硬件TLB,這個硬件的功能就是完成那三次映射運算的,這樣那三次映射的運算就不用再占用CPU和內(nèi)存資源,這個專用的硬件是針對映射算法進行了專門的優(yōu)化的,它的轉(zhuǎn)換速度是非??斓?。這個技術(shù)就對于提升虛擬機內(nèi)存虛擬化后的性能有一個顯著的幫助
這個技術(shù)也是需要在BIOS里開啟,有些服務(wù)器開了CPU虛擬化會同步把內(nèi)存虛擬化也開啟,有些需要單獨打開
文章來源地址http://www.zghlxwxcb.cn/news/detail-829664.html
到了這里,關(guān)于云計算基礎(chǔ)-計算虛擬化-內(nèi)存虛擬化的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!