專利名稱:一種自適應(yīng)緩存預(yù)取方法
技術(shù)領(lǐng)域:
本發(fā)明涉及存儲系統(tǒng)的性能優(yōu)化領(lǐng)域,具體涉及一種自適應(yīng)緩存預(yù)取方法。
背景技術(shù):
存儲器是計算機(jī)的核心部件之一,其性能直接關(guān)系到整個計算機(jī)系統(tǒng)性能的高 低。如何以合理的價格,設(shè)計出容量和速度滿足計算機(jī)系統(tǒng)要求的存儲器系統(tǒng),始終是 計算機(jī)體系結(jié)構(gòu)設(shè)計中的關(guān)鍵問題之一。計算機(jī)用戶希望容量越大越好,而且速度還要 快,價格要便宜。僅用單一的一種存儲器是很難達(dá)到這一目標(biāo)的。較好的方法是采用存 儲層次,用多種存儲器構(gòu)成存儲器的層次結(jié)構(gòu)。然而,人們對于存儲器的容量大、速度 快、價格低的三個要求是相互矛盾的(1)速度越快,每位價格就越高;(2)容量越大, 每位價格就越低;(3)容量越大,速度就越慢。如果只采用其中的一種技術(shù),存儲器設(shè) 計者就會陷入困境從實(shí)現(xiàn)“容量大、價格低”的要求來看,應(yīng)采用能提供大容量的存 儲器技術(shù);但從滿足性能需求的角度來看,又應(yīng)采用昂貴且容量較小的快速存儲器。走 出這種困境的唯一方法,是采用多種存儲器技術(shù),構(gòu)成多級存儲層次。圖1所示的是典 型的兩級存儲模型,包括容量小但速度快的高速IO設(shè)備和容量大但速度慢的慢速IO設(shè) 備,用戶的所有數(shù)據(jù)都存放在慢速IO設(shè)備上,高速IO設(shè)備作為一個Cache使用,用戶讀 取IO數(shù)據(jù)時總是先查找是否在高速IO設(shè)備中已有一份拷貝。如果用戶每次訪問的數(shù)據(jù)都能在高速IO設(shè)備中找到,那系統(tǒng)的IO性能將會得到 顯著提高。但是由于高速設(shè)備容量遠(yuǎn)小于慢速設(shè)備,所以只能有一部分?jǐn)?shù)據(jù)存放在高速 IO設(shè)備上,而用戶對數(shù)據(jù)的請求范圍是非常大的,所以選擇哪些數(shù)據(jù)緩存在高速IO設(shè)備 上將極大影響系統(tǒng)的整體性能。根據(jù)用戶的歷史訪問記錄預(yù)測下一次可能訪問的數(shù)據(jù), 并將這些數(shù)據(jù)預(yù)取到高速IO設(shè)備上,那么當(dāng)用戶真正需要訪問這些數(shù)據(jù)時,性能就會非 常高。單個線程的應(yīng)用程序?qū)O請求的順序性比較好,但是如果系統(tǒng)中存在多個順序訪 問的應(yīng)用程序,那么它們下發(fā)到IO設(shè)備上的請求就變得林亂不堪,如果根據(jù)單一訪問流 進(jìn)行預(yù)取效果將會比較差。
發(fā)明內(nèi)容
為解決預(yù)取問題,本發(fā)明首先對流進(jìn)行過濾,然后再順序預(yù)取。一種自適應(yīng)緩存預(yù)取方法,步驟如下A、檢查每個流,并使用多個隊(duì)列記錄每次訪問的地址;B、如果當(dāng)前訪問的地址與之前某個隊(duì)列中的地址連續(xù),則認(rèn)定為一個流,觸發(fā) 預(yù)取操作;C、檢測預(yù)取對命中率的影響,若命中率低于閾值,則更改預(yù)取策略減少預(yù)取數(shù) 量或關(guān)閉預(yù)取。本發(fā)明的一種優(yōu)選技術(shù)方案在于所述預(yù)取策略包括不預(yù)取,始終預(yù)取和檢測 到順序讀才預(yù)取,否則不預(yù)取。
3
本發(fā)明的另一種優(yōu)選技術(shù)方案在于根據(jù)用戶讀取的數(shù)據(jù)選擇預(yù)取的region, region為將io設(shè)備劃分為大小相等的塊。本發(fā)明的一種較優(yōu)選技術(shù)方案在于預(yù)取region的策略為數(shù)據(jù)在Region的比較靠前的位置,那么直接將數(shù)據(jù)所在的Region —次從慢速IO 設(shè)備讀到高速IO設(shè)備即可,同時返回給用戶之前所請求的數(shù)據(jù);數(shù)據(jù)在Region的最后一部分空間,那么應(yīng)該讀兩部分的數(shù)據(jù)請求的數(shù)據(jù)和緊 鄰的下一個Region的所有數(shù)據(jù);數(shù)據(jù)橫跨兩個Region,那么應(yīng)該一次發(fā)出從當(dāng)前Region的后一部分到下一個 Region的所有數(shù)據(jù)的請求。本發(fā)明在預(yù)取前對訪問流做了過濾,還原了原來的多個順序流,然后分別針對 每個順序流做預(yù)取,由于順序預(yù)取效率非常高,整個系統(tǒng)的性能將得到提升。
圖1典型的兩級存儲模型圖2預(yù)取過程圖3流檢測實(shí)現(xiàn)
具體實(shí)施例方式在實(shí)現(xiàn)過程中,可以提供多種類型的預(yù)取策略供用戶使用。一種是任何情況下 都不觸發(fā)預(yù)取操作,另一種只要有讀操作均從慢速IO設(shè)備上預(yù)取一定數(shù)量的數(shù)據(jù)到高速 IO設(shè)備。這兩種情況的性能都比較差,完全不預(yù)取浪費(fèi)了帶寬、增加了延遲,全部預(yù) 取則可能干擾正常的讀寫操作,甚至每次的讀操作都可能因?yàn)榈却A(yù)取而增加很大的開 銷,而且更嚴(yán)重的是預(yù)取回來的數(shù)據(jù)可能根本不會被接下來的IO請求所使用。再一種則 是兩者的折中,在判斷出預(yù)取可能帶來好處時才發(fā)出預(yù)取的動作。最后一種是基于流的預(yù)測,它的基礎(chǔ)是需要發(fā)現(xiàn)順序流,而根據(jù)之前的分析可 知,系統(tǒng)中可能存在多個順序流,但是混到一起發(fā)到下層的IO系統(tǒng)后就不再是順序的 了,所以在預(yù)取之前必須將單一的混合流還原成原來的多個順序流。實(shí)現(xiàn)方式可以采取 簡單的連續(xù)地址記錄,兩個地址就可以組成一個流,這樣如果第三個地址也屬于這個流 時即可以發(fā)出預(yù)取操作。比如一個如下所示的地址流依次進(jìn)入流檢測系統(tǒng)A、B、C、 A+l、A+2,那么流檢測系統(tǒng)會作如圖3所示的變化在A+2地址之前的所有數(shù)據(jù)的讀取都只讀用戶發(fā)出的地址,而在用戶發(fā)來對 A+2地址的讀請求時,因?yàn)橹耙呀?jīng)存在一個順序流(A、A+1),所以觸發(fā)了預(yù)取操作, 將向慢速IO設(shè)備發(fā)出預(yù)取請求。這時需要考慮的問題是如何處理用戶需要的數(shù)據(jù)和預(yù)取 的數(shù)據(jù)的關(guān)系以及預(yù)取多大的數(shù)據(jù)比較合適,因?yàn)槁買O設(shè)備對大塊數(shù)據(jù)的訪問具有較 好的性能,所以這里可以采用一種類似于處理器中Cache行的處理策略,將IO設(shè)備劃分 為大小相同的若干個塊,稱為Region,這些Region的大小大于一次的IO請求,比如可以 設(shè)置為1MB大小。這樣的話,用戶的當(dāng)前訪問和預(yù)取操作可以合并為一次對整個Region 的讀取操作。用戶讀取的數(shù)據(jù)可能在Region的任何位置,這時需要根據(jù)所在位置選擇預(yù)取當(dāng)前的Region,還是緊鄰的下一個Region,具體分三種情況1、數(shù)據(jù)在Region的比較靠前的位置,那么直接將數(shù)據(jù)所在的Region —次從慢 速IO設(shè)備讀到高速IO設(shè)備即可,同時返回給用戶之前所請求的數(shù)據(jù);2、數(shù)據(jù)在Region的最后一部分空間,那么應(yīng)該讀兩部分的數(shù)據(jù)請求的數(shù)據(jù) 和緊鄰的下一個Region的所有數(shù)據(jù);3、數(shù)據(jù)橫跨兩個Region,那么應(yīng)該一次發(fā)出從當(dāng)前Region的后一部分到下一個 Region的所有數(shù)據(jù)的請求。預(yù)取的數(shù)據(jù)暫存在高速IO設(shè)備中,用戶請求的數(shù)據(jù)直接返回給用戶,當(dāng)今后用 戶按照順序模式再次請求之后的數(shù)據(jù)時可以直接從快速的IO設(shè)備中讀取,而不用再從慢 速IO設(shè)備中獲取;如果預(yù)取的數(shù)據(jù)不再被用戶所請求,那么之前預(yù)取的數(shù)據(jù)就浪費(fèi)掉 了,但是考慮到慢速IO設(shè)備對大塊數(shù)據(jù)的讀取速度較快,這部分的開銷在一定的命中率 的情況下還是值得的。如果經(jīng)過一段時候發(fā)現(xiàn)命中率非常低,則表明此應(yīng)用程序存在很 少的順序的流請求,可以將預(yù)取關(guān)閉,從而減少開銷,提高IO的整體性能。
權(quán)利要求
1.一種自適應(yīng)緩存預(yù)取方法,其特征在于步驟如下A、檢查每個流,并使用多個隊(duì)列記錄每次訪問的地址;B、如果當(dāng)前訪問的地址與之前某個隊(duì)列中的地址連續(xù),則認(rèn)定為一個流,觸發(fā)預(yù)取 操作;C、檢測預(yù)取對命中率的影響,若命中率低于閾值,則更改預(yù)取策略減少預(yù)取數(shù)量或 關(guān)閉預(yù)取。
2.如權(quán)利要求1所述一種自適應(yīng)緩存預(yù)取方法,其特征在于所述預(yù)取策略包括不 預(yù)取,始終預(yù)取和檢測到順序讀才預(yù)取,否則不預(yù)取。
3.如權(quán)利要求1所述一種自適應(yīng)緩存預(yù)取方法,其特征在于根據(jù)用戶讀取的數(shù)據(jù) 選擇預(yù)取的region,region為將io設(shè)備劃分為大小相等的塊。
4.如權(quán)利要求3所述一種自適應(yīng)緩存預(yù)取方法,其特征在于預(yù)取region的策略為數(shù)據(jù)在Region的比較靠前的位置,那么直接將數(shù)據(jù)所在的Region —次從慢速IO設(shè) 備讀到高速IO設(shè)備即可,同時返回給用戶之前所請求的數(shù)據(jù);數(shù)據(jù)在Region的最后一部分空間,那么應(yīng)該讀兩部分的數(shù)據(jù)請求的數(shù)據(jù)和緊鄰的 下一個Region的所有數(shù)據(jù);數(shù)據(jù)橫跨兩個Region,那么應(yīng)該一次發(fā)出從當(dāng)前Region的后一部分到下一個Region 的所有數(shù)據(jù)的請求。
全文摘要
本發(fā)明提供了一種自適應(yīng)緩存預(yù)取方法,檢查每個流,并使用多個隊(duì)列記錄每次訪問的地址;如果當(dāng)前訪問的地址與之前某個隊(duì)列中的地址連續(xù),則認(rèn)定為一個流,觸發(fā)預(yù)取操作;檢測預(yù)取對命中率的影響,若命中率低于閾值,則更改預(yù)取策略減少預(yù)取數(shù)量或關(guān)閉預(yù)取。本發(fā)明在預(yù)取前對訪問流做了過濾,還原了原來的多個順序流,然后分別針對每個順序流做預(yù)取,由于順序預(yù)取效率非常高,整個系統(tǒng)的性能將得到提升。
文檔編號G06F12/08GK102023931SQ201010611530
公開日2011年4月20日 申請日期2010年12月17日 優(yōu)先權(quán)日2010年12月17日
發(fā)明者楊杰, 袁清波, 邵宗有 申請人:曙光信息產(chǎn)業(yè)(北京)有限公司