專利名稱:基于xen虛擬磁盤(pán)設(shè)備的前端緩存方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計(jì)算機(jī)系統(tǒng)虛擬化I/O虛擬化領(lǐng)域,具體地,涉及一種基于xen虛擬磁盤(pán)設(shè)備的前端緩存方法,用于改善xen虛擬化技術(shù)中半虛擬化設(shè)備的性能。
背景技術(shù):
虛擬機(jī)監(jiān)控器(Virtual Machine Monitor,VMM)是指在硬件與傳統(tǒng)操作系統(tǒng)之間提供一個(gè)軟件管理層,來(lái)抽象底層的硬件,向上層提供虛擬硬件接口,從而能夠使多個(gè)操作系統(tǒng)同時(shí)在該虛擬硬件上運(yùn)行。虛擬機(jī)管理主要負(fù)責(zé)對(duì)硬件資源的管理,主要資源包括處理器、內(nèi)存和I/O。虛擬機(jī)監(jiān)控器與運(yùn)行其上的虛擬機(jī)或者說(shuō)虛擬機(jī)操作系統(tǒng)之間的關(guān)系就如同傳統(tǒng)操作系統(tǒng)和進(jìn)程之間的關(guān)系?;谔摂M機(jī)監(jiān)控器的系統(tǒng)虛擬化技術(shù)是當(dāng)今云計(jì)算,數(shù)據(jù)中心底層構(gòu)建的基礎(chǔ)。系統(tǒng)虛擬化技術(shù)提供執(zhí)行的高效性、資源管理的隔離性,有助于企業(yè)將原本運(yùn)行于多臺(tái)物理服務(wù)器上的服務(wù)整合到一臺(tái)物理服務(wù)器上,從而充分利用硬件資源,有效減少企業(yè)在IT基礎(chǔ)架構(gòu)上的開(kāi)銷。此外,通過(guò)在虛擬機(jī)管理上運(yùn)行虛擬操作系統(tǒng),有助于遺留軟件系統(tǒng)的移植。系統(tǒng)虛擬化技術(shù)提供的隔離性能夠保證一個(gè)虛擬機(jī)的執(zhí)行不影響其他虛擬機(jī)的運(yùn)行。這其中包括安全隔離性和性能隔離性。安全隔離性指某個(gè)虛擬機(jī)運(yùn)行出錯(cuò)或者崩潰不會(huì)影響到在同一個(gè)宿主機(jī)上其他虛擬機(jī)的正常運(yùn)行。而所謂性能隔離性是指某個(gè)虛擬機(jī)對(duì)系統(tǒng)資源的消耗不會(huì)影響系統(tǒng)初始配置給其他虛擬機(jī)的資源。由于在硬件和虛擬操作系統(tǒng)之間引入了虛擬機(jī)監(jiān)控器中間層,系統(tǒng)的性能勢(shì)必受到一些影響。由于硬件虛擬化技術(shù)的產(chǎn)生,CPU虛擬化開(kāi)銷已經(jīng)變得很小了,并且提升的潛力不大。但是虛擬I/o設(shè)備,尤其是虛擬磁盤(pán)設(shè)備,依然是系統(tǒng)的主要性能瓶頸之一。當(dāng)今研究表明,磁盤(pán)I/o的性能瓶頸已經(jīng)從之前的I/O設(shè)備變成了 I/O路徑。為了減少在I/O路徑上的開(kāi)銷,本發(fā)明提出了一種裝備在Xen的前端驅(qū)動(dòng)中的緩存,來(lái)盡可能地縮短I/o路徑的長(zhǎng)度。
發(fā)明內(nèi)容
有鑒于現(xiàn)有技術(shù)的上述缺陷,本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種基于xen虛擬磁盤(pán)設(shè)備的前端緩存方法,以盡可能地縮短I/O路徑的長(zhǎng)度。為實(shí)現(xiàn)上述目的,本發(fā)明提供了一種基于xen虛擬磁盤(pán)設(shè)備的前端緩存方法,包括以下步驟:I)用戶空間程序通過(guò)系統(tǒng)調(diào)用產(chǎn)生一個(gè)磁盤(pán)讀請(qǐng)求;2)虛擬機(jī)操作系統(tǒng)為這個(gè)請(qǐng)求分配DMA頁(yè)并且調(diào)度請(qǐng)求;3)以bio vector為單位查看緩存命中情況,若一個(gè)bio vector要求的磁盤(pán)數(shù)據(jù)全部命中緩存,則使用緩存中保留的要求的磁盤(pán)數(shù)據(jù)的內(nèi)存頁(yè)指針更新bio vector中的指針;4)命中和丟失的扇區(qū)均視為最近訪問(wèn)的扇區(qū),需要加入緩存中;若緩存已滿,則采用替換策略進(jìn)行替換;5)對(duì)于所有bio vector都命中緩存的請(qǐng)求,由于步驟3)中已經(jīng)將內(nèi)存頁(yè)指針更新成實(shí)際數(shù)據(jù)所在頁(yè)的指針,相當(dāng)于需要的數(shù)據(jù)已經(jīng)全部取到內(nèi)存中,就可以直接結(jié)束讀請(qǐng)求,將數(shù)據(jù)返回給上層;6)如果不是所有bio vector都命中緩存,則按照要求扇區(qū)連續(xù)的原則,將原請(qǐng)求分割成若干個(gè)小請(qǐng)求;7)通過(guò)授權(quán)表機(jī)制將這些小請(qǐng)求的內(nèi)存頁(yè)共享給DomO以便后續(xù)寫(xiě)入,并且產(chǎn)生相應(yīng)的 ring request,放至Ij ring buffer 上;8)后端驅(qū)動(dòng)在接到事件通道通知后,處理前端遞交過(guò)來(lái)的請(qǐng)求,從物理磁盤(pán)中讀取數(shù)據(jù)放進(jìn)相應(yīng)的內(nèi)存頁(yè);完成后通知前端,請(qǐng)求結(jié)束。根據(jù)上述的基于xen虛擬磁盤(pán)設(shè)備的前端緩存方法,其中,bio vector最多包括8個(gè)扇區(qū)的請(qǐng)求。根據(jù)上述的基于xen虛擬磁盤(pán)設(shè)備的前端緩存方法,其中,緩存存儲(chǔ)真實(shí)扇區(qū)的數(shù)據(jù)或者存放數(shù)據(jù)的內(nèi)存地址。根據(jù)上述的基于xen虛擬磁盤(pán)設(shè)備的前端緩存方法,其中,步驟4)中,所述替換策略為L(zhǎng)RU算法。進(jìn)一步地,根據(jù)上述的基于xen虛擬磁盤(pán)設(shè)備的前端緩存方法,其中,所述LRU算法具體如下:每個(gè)緩存中的扇區(qū)維持一個(gè)訪問(wèn)時(shí)間Tlast access,代表上一次訪問(wèn)到這個(gè)扇區(qū)的時(shí)間;當(dāng)扇區(qū)命中緩存,以當(dāng)前的時(shí)間戳來(lái)更新Tlast access ;當(dāng)緩存已滿需要踢出一個(gè)扇區(qū)時(shí),遍歷整個(gè)緩存找出最小Tlast access的那個(gè)踢出。因此,本發(fā)明的基于xen虛擬磁盤(pán)設(shè)備的前端緩存方法相較于現(xiàn)有技術(shù)具有以下有益的技術(shù)效果:( I)采用緩存最近對(duì)虛擬磁盤(pán)扇區(qū)訪問(wèn)的結(jié)果,進(jìn)而提供一種接下去訪問(wèn)的扇區(qū)在緩存中就能找到的可能性; ( 2 )由于緩存設(shè)置在前端驅(qū)動(dòng)中,本發(fā)明使得虛擬磁盤(pán)讀取有可能直接在前端驅(qū)動(dòng)中返回而不涉及到后端驅(qū)動(dòng);(3)本發(fā)明雖然在Xen平臺(tái)上實(shí)現(xiàn),并且目標(biāo)的是虛擬磁盤(pán)設(shè)備,但該方法不局限于平臺(tái)和I/o設(shè)備,可以用于其他半虛擬化1/0驅(qū)動(dòng);(4)本發(fā)明對(duì)虛擬機(jī)前端驅(qū)動(dòng)做了少量修改,在代碼路徑添加了查詢緩存的功能,只引入較少的額外開(kāi)銷;(5)此外,本發(fā)明還能完全保留現(xiàn)有xen前后端驅(qū)動(dòng)優(yōu)點(diǎn),因?yàn)樵趯?shí)際應(yīng)用中緩存的命中率較高,本發(fā)明能明顯提高xen虛擬磁盤(pán)設(shè)備的性能。
圖1是現(xiàn)有的前后端虛擬磁盤(pán)一次讀過(guò)程;圖2是使用本發(fā)明的基于xen虛擬磁盤(pán)設(shè)備的前端緩存方法后前后端虛擬磁盤(pán)一次讀過(guò)程;圖3是緩存命中后對(duì)原請(qǐng)求的處理。
具體實(shí)施例方式以下將結(jié)合附圖對(duì)本發(fā)明的構(gòu)思、具體結(jié)構(gòu)及產(chǎn)生的技術(shù)效果作進(jìn)一步說(shuō)明,以充分地了解本發(fā)明的目的、特征和效果。與傳統(tǒng)的基于陷入模擬敏感I/O指令的設(shè)備模擬方法相比,xen的半虛擬化設(shè)備驅(qū)動(dòng)(前后端驅(qū)動(dòng))性能得到了明顯提升,這是由于它的上下文切換次數(shù)更少并且使用了共享內(nèi)存這種快捷的數(shù)據(jù)轉(zhuǎn)移方法。然而,虛擬機(jī)監(jiān)控器(hypervisor或VMM)依然參與了整個(gè)I/O過(guò)程。等待后端驅(qū)動(dòng)的響應(yīng)以及事件通道機(jī)制均引入嚴(yán)重的開(kāi)銷。整個(gè)虛擬磁盤(pán)I/O過(guò)程大致如下:首先用戶空間程序通過(guò)系統(tǒng)調(diào)用產(chǎn)生一個(gè)磁盤(pán)讀寫(xiě)請(qǐng)求;之后虛擬機(jī)操作系統(tǒng)為這個(gè)請(qǐng)求分配DMA頁(yè)并且調(diào)度請(qǐng)求;當(dāng)請(qǐng)求被下發(fā)到前端驅(qū)動(dòng)后,前端驅(qū)動(dòng)將這個(gè)請(qǐng)求做特定的包裝后放到ring buffer上,之后通過(guò)事件通道通知后端。運(yùn)行在DomO中的后端驅(qū)動(dòng)接收到通知后,會(huì)從ring buffer上取出這個(gè)請(qǐng)求并且提交給真實(shí)設(shè)備。本發(fā)明提出了在前端設(shè)置緩存來(lái)緩存最近訪問(wèn)過(guò)的那些虛擬磁盤(pán)扇區(qū)數(shù)據(jù)。由于數(shù)據(jù)訪問(wèn)的地址空間和時(shí)間連續(xù)性,這些緩存中的數(shù)據(jù)有可能最近還會(huì)被訪問(wèn)到,這就被稱為緩存命中。當(dāng)緩存命中時(shí),前端驅(qū)動(dòng)就可以直接把請(qǐng)求的數(shù)據(jù)返回給上層,避免使用事件通道機(jī)制和DomO的參與。前端驅(qū)動(dòng)和后端驅(qū)動(dòng)均工作在Linux的block-10驅(qū)動(dòng)之上。每一個(gè)磁盤(pán)讀寫(xiě)請(qǐng)求由多個(gè)bio請(qǐng)求組成。每個(gè)bio請(qǐng)求又是由多個(gè)bio vector組成,這個(gè)bio vector是磁盤(pán)1/0的最小單元。每個(gè)bio vector數(shù)據(jù)結(jié)構(gòu)中包括一個(gè)DMA內(nèi)存頁(yè)的引用,并負(fù)責(zé)最多一個(gè)頁(yè)面大小(4KB)的磁盤(pán)讀寫(xiě)。通常情況中,磁盤(pán)讀寫(xiě)的單元為扇區(qū),它的大小是512byte,比一個(gè)內(nèi)存頁(yè)要小。bio vector數(shù)據(jù)結(jié)構(gòu)有相應(yīng)的成員來(lái)指明DMA頁(yè)內(nèi)的偏移和大小,這樣就可以滿足小于I個(gè)內(nèi)存頁(yè)的請(qǐng)求。為了和后端驅(qū)動(dòng)配合,被遞交給后端的一個(gè)請(qǐng)求必須是由連續(xù)若干個(gè)扇區(qū)組成。bio vector最多可以包括8個(gè)扇區(qū)的請(qǐng)求。如果一個(gè)bio vector中的所有扇區(qū)都命中了緩存,才可以認(rèn)為一個(gè)bio vector命中了緩存。當(dāng)一個(gè)bio vector命中緩存,就可以被完全的丟棄掉而不需要被遞交給后端驅(qū)動(dòng)。這時(shí)只需要將bio vector中使用的DMA頁(yè)里的內(nèi)容置換成緩存中存儲(chǔ)的相應(yīng)數(shù)據(jù)內(nèi)容即可。如果一個(gè)請(qǐng)求中的所有bio vector都命中緩存,那么這個(gè)請(qǐng)求就可以立刻返回。否則,就需要將緩存中沒(méi)有的那些bio vector遞交給后端驅(qū)動(dòng),走原始的路徑。這里可能的發(fā)生的是,一個(gè)請(qǐng)求中有一些bio vector命中了緩存,另外一些沒(méi)有命中。這樣就需要對(duì)原始請(qǐng)求做縮減和分割處理??s減指的是可以將那些命中緩存的bio vector從這個(gè)請(qǐng)求中刪除掉再遞交給后端;分割操作有由后端要求一個(gè)請(qǐng)求是連續(xù)的若干個(gè)扇區(qū)而決定的,如果命中的那些bio vector在該請(qǐng)求所有biovector的中部,就需要將這個(gè)請(qǐng)求分割成兩個(gè)小請(qǐng)求,以滿足連續(xù)性。緩存中存儲(chǔ)的可以是扇區(qū)中真實(shí)的數(shù)據(jù),但是這樣的話在緩存命中時(shí)或者將新的扇區(qū)加入緩存時(shí)都需要一次額外的數(shù)據(jù)拷貝,即在相應(yīng)DMA內(nèi)存頁(yè)和緩存之間的數(shù)據(jù)拷貝。本發(fā)明采用了另一種方法,緩存內(nèi)存地址。具體來(lái)說(shuō),緩存的是一個(gè)扇區(qū)數(shù)據(jù)在內(nèi)存中地址,包括頁(yè)幀的引用以及頁(yè)內(nèi)的偏移。這樣,緩存的大小可以被控制得很小,并且不需要額外的數(shù)據(jù)拷貝。當(dāng)一次請(qǐng)求中的扇區(qū)命中緩存后,只需要將bio vector數(shù)據(jù)結(jié)構(gòu)中的DMA頁(yè)引用和頁(yè)內(nèi)偏移設(shè)置成緩存中的相應(yīng)地址,就可以返回了。這一方法需要修改代碼流程以配合,被取到DMA中的內(nèi)存不能在結(jié)束一次請(qǐng)求之后全部釋放,只能釋放那些未被加入緩存中的扇區(qū)所在的內(nèi)存。而加入緩存中的扇區(qū)所在的內(nèi)存不能這時(shí)釋放,即需要提供給后續(xù)可能的緩存命中的請(qǐng)求使用。釋放這些內(nèi)存的時(shí)機(jī)被拖后,直到這個(gè)內(nèi)存存儲(chǔ)的扇區(qū)從緩存中被替換出去,才可以釋放內(nèi)存。本發(fā)明使用最近最少使用策略(least-recently-used,LRU)作為緩存的替換策略。LRU基于以下事實(shí):剛被訪問(wèn)過(guò)的扇區(qū)很可能在不久的將來(lái)被再次訪問(wèn)到。當(dāng)需要替換時(shí),LRU總是替換那個(gè)最近最少被使用到的緩存單元。具體的實(shí)施方法如下:為每個(gè)緩存中的扇區(qū)維持一個(gè)訪問(wèn)時(shí)間Tlast access,代表上一次訪問(wèn)到這個(gè)扇區(qū)的時(shí)間。當(dāng)扇區(qū)命中緩存,以當(dāng)前的時(shí)間戳(rdtsc命令)來(lái)更新Tlast access。當(dāng)緩存已滿需要踢出一個(gè)扇區(qū)時(shí),遍歷整個(gè)緩存找出最小Tlast access的那個(gè)踢出。圖1是現(xiàn)有技術(shù)中前后端虛擬磁盤(pán)一次讀過(guò)程。當(dāng)一個(gè)對(duì)虛擬磁盤(pán)的讀請(qǐng)求產(chǎn)生后,由上層為這次讀請(qǐng)求分配存儲(chǔ)讀結(jié)果的DMA內(nèi)存頁(yè),之后將請(qǐng)求遞交給xen的前端塊設(shè)備驅(qū)動(dòng)。前端塊設(shè)備驅(qū)動(dòng)通過(guò)xen的授權(quán)表機(jī)制,將這些DMA內(nèi)存頁(yè)共享給后端驅(qū)動(dòng)所在的DomO,之后對(duì)上層請(qǐng)求做處理,使之轉(zhuǎn)化成符合x(chóng)en前后端通信規(guī)則的ring request結(jié)構(gòu),之后將ring request放到共享內(nèi)存ring buffer上。這些都完成之后,通過(guò)事件通道機(jī)制通知后端塊設(shè)備驅(qū)動(dòng)有新的請(qǐng)求。后端塊設(shè)備從ring buffer上取下這個(gè)請(qǐng)求,解析之后進(jìn)行真正的磁盤(pán)讀操作。這些操作完成后,通過(guò)一個(gè)中斷告知前端讀完成,整個(gè)請(qǐng)求結(jié)束。圖2是使用本發(fā)明的基于xen虛擬磁盤(pán)設(shè)備的前端緩存方法后一次讀過(guò)程。具體步驟如下:I)用戶空間程序通過(guò)系統(tǒng)調(diào)用產(chǎn)生一個(gè)磁盤(pán)讀請(qǐng)求;2)虛擬機(jī)操作系統(tǒng)為這個(gè)請(qǐng)求分配DMA頁(yè)并且調(diào)度請(qǐng)求;3)以bio vector為單位查看緩存命中情況,若一個(gè)bio vector要求的磁盤(pán)數(shù)據(jù)全部命中緩存,則使用緩存中保留的要求的磁盤(pán)數(shù)據(jù)的內(nèi)存頁(yè)指針更新bio vector中的指針;4)命中和丟失的扇區(qū)均視為最近訪問(wèn)的扇區(qū),需要加入緩存中;若緩存已滿,則采用替換策略進(jìn)行替換;5)對(duì)于所有bio vector都命中緩存的請(qǐng)求,由于步驟3)中已經(jīng)將內(nèi)存頁(yè)指針更新成實(shí)際數(shù)據(jù)所在頁(yè)的指針,相當(dāng)于需要的數(shù)據(jù)已經(jīng)全部取到內(nèi)存中,就可以直接結(jié)束讀請(qǐng)求,將數(shù)據(jù)返回給上層;6)如果不是所有bio vector都命中緩存,則按照要求扇區(qū)連續(xù)的原則,將原請(qǐng)求分割成若干個(gè)小請(qǐng)求;7)通過(guò)授權(quán)表機(jī)制將這些小請(qǐng)求的內(nèi)存頁(yè)共享給DomO以便后續(xù)寫(xiě)入,并且產(chǎn)生相應(yīng)的 ring request,放至Ij ring buffer 上;8)后端驅(qū)動(dòng)在接到事件通道通知后,處理前端遞交過(guò)來(lái)的請(qǐng)求,從物理磁盤(pán)中讀取數(shù)據(jù)放進(jìn)相應(yīng)的內(nèi)存頁(yè);完成后通知前端,請(qǐng)求結(jié)束。由上可見(jiàn),新過(guò)程同原過(guò)程不同體現(xiàn)在前半部分。當(dāng)前端驅(qū)動(dòng)接受到上層遞交的請(qǐng)求后,首先對(duì)請(qǐng)求的扇區(qū)是否命中緩存做判斷。如果全部bio vector命中,那么請(qǐng)求可以直接返回;否則,對(duì)原請(qǐng)求做壓縮分割處理:將命中的部分剔除掉,留下未命中的部分。之后的流程和原過(guò)程類似。圖3是緩存命中后對(duì)原請(qǐng)求的處理。當(dāng)一個(gè)bio vector的所有扇區(qū)在緩存中發(fā)現(xiàn),說(shuō)明這個(gè)bio vector命中緩存。那么之前為這個(gè)bio vector分配的DMA內(nèi)存頁(yè)(準(zhǔn)備將讀磁盤(pán)的數(shù)據(jù)寫(xiě)入)可以被丟棄,修改bio vector結(jié)構(gòu)中的頁(yè)指針指向緩存中提供的頁(yè)。這樣,這個(gè)bio vector指向的頁(yè)里面就有之前已經(jīng)取好的數(shù)據(jù)了,可以直接返回。Xen是一個(gè)開(kāi)源的虛擬機(jī)監(jiān)控器,xen虛擬機(jī)運(yùn)行的操作系統(tǒng)代碼如今已經(jīng)被集成在Iinux中。本發(fā)明主要修改的內(nèi)容為xen的前端塊設(shè)備驅(qū)動(dòng)代碼,在Iinux內(nèi)核目錄下具體路徑為driver/block/xen-blkfront.C。為了在原本的代碼路徑中增加本發(fā)明提到的緩存功能,對(duì)此文件的主要修改如下:1.在blkif_queue_request ()函數(shù)中生成ring request之前以下代碼。該代碼的主要功能是:對(duì)構(gòu)成一個(gè)request的所有bio vector進(jìn)行遍歷,判斷每個(gè)bio vector是否命中緩存,如果命中,將頁(yè)指針更新(更新sg_>page_link)。在遍歷的同時(shí),如果有需要分割出新的ring request (當(dāng)中間有命中的bio vector時(shí)),開(kāi)始構(gòu)造一個(gè)新的ringrequest。主要代碼為清零每個(gè)ring request的bio vector數(shù)量的nr_segments。這樣一次遍歷就可以完成對(duì)原request的縮減和分割功能。for_each_sg(info->sg Sgr ring_req->nr_segments, i) {fsect = sg->offset 9;lsect = fsect + (sg->length 9) -1;sgmi ss = 0:1f(ring_req->operation 二 = BLKIF OP READ)
{
off = sg->offset; for(i = fsect; i <= !sect; ++i)
{
if(!touchcacbe(i, sg_page(sg), oft))
{
stimiss = I;
O,
break:
} }
tf(!sgmiss)
{
ring—req->nr—segments = m.—segments;
—free_page(sg_page(sg));
get—cache(fsect, sg->page」inkv sg->offset);
權(quán)利要求
1.一種基于Xen虛擬磁盤(pán)設(shè)備的前端緩存方法,其特征在于,包括以下步驟: 1)用戶空間程序通過(guò)系統(tǒng)調(diào)用產(chǎn)生一個(gè)磁盤(pán)讀請(qǐng)求; 2)虛擬機(jī)操作系統(tǒng)為這個(gè)請(qǐng)求分配DMA頁(yè)并且調(diào)度請(qǐng)求; 3)以biovector為單位查看緩存命中情況,若一個(gè)bio vector要求的磁盤(pán)數(shù)據(jù)全部命中緩存,則使用緩存中保留的要求的磁盤(pán)數(shù)據(jù)的內(nèi)存頁(yè)指針更新bio vector中的指針; 4)命中和丟失的扇區(qū)均視為最近訪問(wèn)的扇區(qū),需要加入緩存中;若緩存已滿,則采用替換策略進(jìn)行替換; 5)對(duì)于所有biovector都命中緩存的請(qǐng)求,由于步驟3)中已經(jīng)將內(nèi)存頁(yè)指針更新成實(shí)際數(shù)據(jù)所在頁(yè)的指針,相當(dāng)于需要的數(shù)據(jù)已經(jīng)全部取到內(nèi)存中,就可以直接結(jié)束讀請(qǐng)求,將數(shù)據(jù)返回給上層; 6)如果不是所有biovector都命中緩存,則按照要求扇區(qū)連續(xù)的原則,將原請(qǐng)求分割成若干個(gè)小請(qǐng)求; 7)通過(guò)授權(quán)表機(jī)制將這些小請(qǐng)求的內(nèi)存頁(yè)共享給DomO以便后續(xù)寫(xiě)入,并且產(chǎn)生相應(yīng)的 ring request,放至Ij ring buffer 上; 8)后端驅(qū)動(dòng)在接到事件通道通知后,處理前端遞交過(guò)來(lái)的請(qǐng)求,從物理磁盤(pán)中讀取數(shù)據(jù)放進(jìn)相應(yīng)的內(nèi)存頁(yè);完成后通知前端,請(qǐng)求結(jié)束。
2.根據(jù)權(quán)利要求1所述的基于xen虛擬磁盤(pán)設(shè)備的前端緩存方法,其特征在于,biovector最多包括8個(gè)扇區(qū)的請(qǐng)求。
3.根據(jù)權(quán)利要求1所述的基于xen虛擬磁盤(pán)設(shè)備的前端緩存方法,其特征在于,緩存存儲(chǔ)真實(shí)扇區(qū)的數(shù)據(jù)或者存放數(shù)據(jù)的內(nèi)存地址。
4.根據(jù)權(quán)利要求1所述的基于xen虛擬磁盤(pán)設(shè)備的前端緩存方法,其特征在于,步驟4)中,所述替換策略為L(zhǎng)RU算法。
5.根據(jù)權(quán)利要求4所述的基于xen虛擬磁盤(pán)設(shè)備的前端緩存方法,其特征在于,所述LRU算法具體如下:每個(gè)緩存中的扇區(qū)維持一個(gè)訪問(wèn)時(shí)間Tlast access,代表上一次訪問(wèn)到這個(gè)扇區(qū)的時(shí)間;當(dāng)扇區(qū)命中緩存,以當(dāng)前的時(shí)間戳來(lái)更新Tlast access ;當(dāng)緩存已滿需要踢出一個(gè)扇區(qū)時(shí),遍歷整個(gè)緩存找出最小Tlast access的那個(gè)踢出。
全文摘要
本發(fā)明公開(kāi)了一種基于xen虛擬磁盤(pán)設(shè)備的前端緩存方法,該方法采用緩存最近對(duì)虛擬磁盤(pán)扇區(qū)訪問(wèn)的結(jié)果,進(jìn)而提供一種接下去訪問(wèn)的扇區(qū)在緩存中就能找到的可能性。由于緩存設(shè)置在前端驅(qū)動(dòng)中,使得虛擬磁盤(pán)讀有可能直接在前端驅(qū)動(dòng)中返回而不涉及到后端驅(qū)動(dòng)。本發(fā)明完全保留現(xiàn)有xen前后端驅(qū)動(dòng)優(yōu)點(diǎn),同時(shí)對(duì)虛擬機(jī)前端驅(qū)動(dòng)做了少量修改,在代碼路徑添加了查詢緩存的功能,只引入較少的額外開(kāi)銷。此外,由于因?yàn)樵趯?shí)際應(yīng)用中緩存的命中率較高,該方法能明顯提高xen虛擬磁盤(pán)設(shè)備的性能。
文檔編號(hào)G06F3/06GK103207763SQ20131015096
公開(kāi)日2013年7月17日 申請(qǐng)日期2013年4月26日 優(yōu)先權(quán)日2013年4月26日
發(fā)明者管海兵, 李健, 米翔, 馬汝輝, 宋濤 申請(qǐng)人:上海交通大學(xué)