專利名稱:用于刪除緩存塊的方法和系統(tǒng)的制作方法
用于刪除緩存塊的方法和系統(tǒng)
背景技術(shù):
隨著計(jì)算機(jī)處理能力的增強(qiáng),技術(shù)用戶和應(yīng)用的需求也增強(qiáng)。對于許多行業(yè),這會(huì)導(dǎo)致資源優(yōu)先級排序的快速的移動(dòng)。例如,在許多關(guān)系數(shù)據(jù)庫應(yīng)用中,非易失性存儲(chǔ)器容量的相對重要性和成本急速地降低。對于系統(tǒng)管理員,關(guān)于存儲(chǔ)容量的關(guān)心已經(jīng)轉(zhuǎn)移到對性能和可靠性的關(guān)心,因?yàn)榇鎯?chǔ)技術(shù)的事務(wù)延遲限制了更快的并且更加強(qiáng)大微處理器的潛在的好處。在半導(dǎo)體工業(yè)內(nèi),存在類似的現(xiàn)象。遵循摩爾定律的處理能力和計(jì)算速度的理論增益大大地受到諸如存儲(chǔ)器訪問速度之類的非CPU瓶頸的限制。隨著研究人員探索下一范式轉(zhuǎn)移存儲(chǔ)技術(shù),諸如改善的緩存方法之類的中間技術(shù)幫助彌合該縫隙。通過跨一系列不同的應(yīng)用利用多種類型的緩存存儲(chǔ)設(shè)備,對于某些應(yīng)用,可以降低訪問延遲的瓶頸。對緩存設(shè)計(jì)和緩存算法的研究導(dǎo)致緩存和緩存管理設(shè)備的復(fù)雜性的增大。對于從CPU緩存到磁盤緩存和數(shù)據(jù)庫緩存的一切,緩存系統(tǒng)在總體系統(tǒng)性能方面和跨每一層的計(jì)算譜變得越來越重要。緩存算法主要處理緩存數(shù)據(jù)項(xiàng)的插入、刪除,以及修改。被緩存的數(shù)據(jù)的相關(guān)性和優(yōu)先級排序優(yōu)于緩存的有效的操作。通過將頻繁地使用的數(shù)據(jù)項(xiàng)保持在緩存中,并清除在未來很少會(huì)使用的那些,傳統(tǒng)的緩存算法旨在提高緩存命中率和性能。
發(fā)明內(nèi)容
一般而言,一方面,本發(fā)明涉及一種將緩存塊從緩存隊(duì)列刪除的方法。該方法包括:由處理器檢測緩存隊(duì)列的第一緩存未中;識別所述緩存隊(duì)列內(nèi)存儲(chǔ)存儲(chǔ)塊的值的新緩存塊;由處理器計(jì)算包括所述存儲(chǔ)塊的存儲(chǔ)容器的估計(jì)的緩存未中成本;由所述處理器基于所述估計(jì)的緩存未中成本的數(shù)學(xué)公式來計(jì)算所述存儲(chǔ)容器的刪除概率;從均勻分布中隨機(jī)地選擇概率數(shù),其中,所述刪除概率超過所述概率數(shù);以及響應(yīng)于刪除概率超過概率數(shù),從緩存隊(duì)列清除新緩存塊。一般而言,一方面,本發(fā)明涉及一種計(jì)算機(jī)可讀的存儲(chǔ)介質(zhì),其存儲(chǔ)用于從緩存隊(duì)列刪除緩存塊的多條指令。該多條指令包括以下功能:檢測所述緩存隊(duì)列的第一緩存未中;識別緩存隊(duì)列內(nèi)存儲(chǔ)存儲(chǔ)塊的值的新緩存塊;計(jì)算包括所述存儲(chǔ)塊的存儲(chǔ)容器的估計(jì)的緩存未中成本;基于所述估計(jì)的緩存未中成本的數(shù)學(xué)公式來計(jì)算存儲(chǔ)容器的刪除概率;從均勻分布中隨機(jī)地選擇概率數(shù),其中刪除概率超過概率數(shù);以及響應(yīng)于刪除概率超過概率數(shù),從緩存隊(duì)列清除新緩存塊。一般而言,一方面,本發(fā)明涉及一種用于刪除緩存塊的系統(tǒng)。該系統(tǒng)包括在緩存隊(duì)列末端具有試用段的緩存隊(duì)列。該試用段包括存儲(chǔ)存儲(chǔ)塊的值的新緩存塊,其中所述新緩存塊自從插入到緩存隊(duì)列中以來具有零個(gè)累積的緩存命中。該緩存隊(duì)列還具有與試用段相鄰的保護(hù)段。該系統(tǒng)進(jìn)一步包括在處理器上運(yùn)行并且包括以下功能的緩存管理器:檢測緩存隊(duì)列的第一緩存未中;識別緩存隊(duì)列內(nèi)的新緩存塊;計(jì)算包括該存儲(chǔ)塊的存儲(chǔ)容器的估計(jì)的緩存未中成本;基于估計(jì)的緩存未中成本的數(shù)學(xué)公式來計(jì)算存儲(chǔ)容器的刪除概率;從均勻分布中隨機(jī)地選擇概率數(shù),其中刪除概率超過概率數(shù);以及響應(yīng)于刪除概率超過概率數(shù),從緩存隊(duì)列清除該新緩存塊。通過下面的描述和所附權(quán)利要求書,本發(fā)明的其他方面將變得顯而易見。
圖1A和IB描繪了根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的系統(tǒng)的示意框圖。圖2、3、4A和4B描繪了根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的流程圖。圖5A、5B,以及5C描繪了根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的緩存隊(duì)列的示例。圖6描繪了根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的計(jì)算機(jī)系統(tǒng)。
具體實(shí)施例方式現(xiàn)在將參考附圖詳細(xì)描述本發(fā)明的具體實(shí)施例。為確保一致性,各附圖中的相同元件通過相同附圖標(biāo)記來表示。在下面的對本發(fā)明的各實(shí)施例的詳細(xì)描述中,闡明了眾多具體細(xì)節(jié)以提供對本發(fā)明的各實(shí)施例的更加全面的理解。然而,對本領(lǐng)域的技術(shù)人員顯而易見的是,本發(fā)明也可以在沒有這些具體細(xì)節(jié)的情況下實(shí)施。在其他情況下,沒有對已知的特征進(jìn)行詳細(xì)描述,以避免不必要地使描述復(fù)雜化。一般而言,本發(fā)明的各實(shí)施例提供了用于管理緩存的方法和系統(tǒng)。具體而言,本發(fā)明的各實(shí)施例向緩存隊(duì)列內(nèi)的一個(gè)或多個(gè)緩存塊分配估計(jì)的緩存未中成本。估計(jì)的緩存未中成本是對緩存塊的緩存未中的成本的估計(jì)。對于新緩存塊,估計(jì)的緩存未中成本基于對應(yīng)于存儲(chǔ)設(shè)備上的緩存塊的存儲(chǔ)容器。估計(jì)的緩存未中成本被用來以概率的方式選擇一緩存塊用于從緩存隊(duì)列清除。出于說明的目的,緩存操作可以是指任何對緩存的訪問和/或修改。緩存操作的示例可以包括但不僅限于:讀取操作、寫入操作、回寫操作、任何類型的緩存命中、任何類型的緩存未中,和/或任意數(shù)量的其他緩存操作。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存操作可以是指導(dǎo)致緩存隊(duì)列中的一個(gè)或多個(gè)緩存塊被回收利用的任何緩存請求?;厥绽每梢允侵妇彺骊?duì)列內(nèi)的一個(gè)或多個(gè)緩存塊的任何反向移動(dòng)。對存儲(chǔ)容器的緩存操作和/或訪問可以是指對存儲(chǔ)容器內(nèi)的存儲(chǔ)塊的訪問。出于說明的目的,緩存未中可以是指請求對緩存(和/或相關(guān)聯(lián)的緩存隊(duì)列,如果適用的話)中不存在的存儲(chǔ)塊的讀取或?qū)懭氲木彺娌僮?。因此,在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,存儲(chǔ)塊被直接從相應(yīng)的存儲(chǔ)設(shè)備讀取,隨后被插入到緩存中。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存未中可以是指寫入未中、讀取未中,和/或需要對當(dāng)前不存儲(chǔ)在緩存內(nèi)的存儲(chǔ)塊的訪問的寫入和讀取請求的某種組合。出于說明的目的,緩存命中可以是指訪問當(dāng)前存儲(chǔ)在緩存(以及相關(guān)聯(lián)的緩存隊(duì)列,如果適用的話)中的存儲(chǔ)塊的緩存操作。根據(jù)本發(fā)明的各實(shí)施例,緩存命中可以包括對相應(yīng)于該緩存的緩存隊(duì)列的修改?!白x取”緩存命中可以是指讀取緩存內(nèi)的存儲(chǔ)單元的內(nèi)容的請求。“寫入”緩存命中可以是指將值從緩存中的存儲(chǔ)單元寫入到存儲(chǔ)設(shè)備中的相應(yīng)的存儲(chǔ)塊的請求。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,寫入操作可以通過將所述值寫入到存儲(chǔ)單元而不修改存儲(chǔ)塊(例如,在回寫緩存中)來執(zhí)行。然后,在某個(gè)預(yù)定時(shí)間或在事件觸發(fā)之后,該值可以被回寫到存儲(chǔ)塊。
出于說明的目的,舊緩存塊是自從被插入到緩存隊(duì)列中以來接收到至少一個(gè)緩存命中的緩存塊。新緩存塊是指自從被插入到緩存隊(duì)列中以來沒有接收到緩存命中的緩存塊。圖1A示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的系統(tǒng)(199)。如圖1A所示,系統(tǒng)(199)具有多個(gè)組件,包括緩存(100)、存儲(chǔ)設(shè)備(110)、一組存儲(chǔ)容器(例如,存儲(chǔ)容器I (120)、存儲(chǔ)容器Z (130))、一組存儲(chǔ)塊(例如,存儲(chǔ)塊A (122)、存儲(chǔ)塊B (124)、存儲(chǔ)塊C (126)、存儲(chǔ)塊D (128)、存儲(chǔ)塊E (132)、存儲(chǔ)塊F (134)、存儲(chǔ)塊G (136)、存儲(chǔ)塊H (138))、緩存管理器(140)、緩存隊(duì)列(142),以及管理模塊(144)。系統(tǒng)(199)的組件可以位于同一個(gè)設(shè)備上(例如,服務(wù)器、大型機(jī)、臺式個(gè)人計(jì)算機(jī)(PC)、膝上型計(jì)算機(jī)、個(gè)人數(shù)字助理(PDA)、電話、移動(dòng)電話、自助服務(wù)終端、電纜盒,以及任何其他設(shè)備)或可以位于通過網(wǎng)絡(luò)(例如,因特網(wǎng))利用有線和/或無線段連接的分離的設(shè)備上。本領(lǐng)域技術(shù)人員將認(rèn)識到,可以有多于一個(gè)的每一個(gè)單獨(dú)的組件在設(shè)備上運(yùn)行,以及在本發(fā)明的給定實(shí)施例內(nèi)可以有這些組件的任意組
口 ο在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存(100)是具有一個(gè)或多個(gè)存儲(chǔ)單元的存儲(chǔ)器模塊。緩存(100)內(nèi)的每一個(gè)存儲(chǔ)單元(未示出)可以將被引用的存儲(chǔ)塊(例如,存儲(chǔ)塊A
(122)、存儲(chǔ)塊B (124)、存儲(chǔ)塊C (126)、存儲(chǔ)塊D (128)、存儲(chǔ)塊E (132)、存儲(chǔ)塊F (134)、存儲(chǔ)塊G (136)、存儲(chǔ)塊H (138))的一個(gè)或多個(gè)值存儲(chǔ)在存儲(chǔ)設(shè)備(110)中。如果存儲(chǔ)單元的值不同于被引用的存儲(chǔ)塊的值,則它稱為“臟的”。因此,存儲(chǔ)塊(例如,存儲(chǔ)塊A(122)、存儲(chǔ)塊B (124)、存儲(chǔ)塊C (126)、存儲(chǔ)塊D (128)、存儲(chǔ)塊E (132)、存儲(chǔ)塊F (134)、存儲(chǔ)塊G (136)、存儲(chǔ)塊H (138))稱為“被緩存”和/或“被存儲(chǔ)”在緩存(100)內(nèi),如果它被緩存(100)中的存儲(chǔ)單元引用和/或如果引用存儲(chǔ)塊的緩存塊被存儲(chǔ)在對應(yīng)的緩存隊(duì)列內(nèi)的話。 緩存(100 )可以包括具有用于每一個(gè)存儲(chǔ)單元的一個(gè)或多個(gè)緩存地址的緩存地址空間。因此,在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,每一個(gè)存儲(chǔ)單元都可以具有緩存地址、存儲(chǔ)存儲(chǔ)塊的地址的引用字段,和/或存儲(chǔ)存儲(chǔ)塊的值的值字段。緩存(100)可以是存儲(chǔ)器設(shè)備和/或一個(gè)或多個(gè)存儲(chǔ)器設(shè)備的一部分。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存可以被實(shí)現(xiàn)為存儲(chǔ)設(shè)備和一個(gè)或多個(gè)應(yīng)用和/或設(shè)備(下面稱為“請求者”)之間的抽象的中間層。以此方式,從存儲(chǔ)設(shè)備請求的值可以作為中間物被存儲(chǔ)在緩存(100)內(nèi),并提供給請求者。由請求者對存儲(chǔ)塊中的值的以后的訪問可以在不訪問存儲(chǔ)設(shè)備的情況下執(zhí)行。繼續(xù)圖1A,緩存(100)可以構(gòu)成一個(gè)或多個(gè)硬盤驅(qū)動(dòng)器上的存儲(chǔ)器的一部分和/或任何其他形式的易失性和/或非易失性存儲(chǔ)器。存儲(chǔ)在易失性存儲(chǔ)器中的緩存的一個(gè)示例是計(jì)算機(jī)系統(tǒng)內(nèi)的隨機(jī)存取存儲(chǔ)器(RAM)的指定的部分或指定的量。指定的RAM存儲(chǔ)器可以被用來存儲(chǔ)來自硬盤驅(qū)動(dòng)器或其他存儲(chǔ)設(shè)備的一個(gè)或多個(gè)值,以便進(jìn)行更快的訪問。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存(100)是跨通過網(wǎng)絡(luò)連接的一個(gè)或多個(gè)物理存儲(chǔ)設(shè)備散布的分布式緩存。存儲(chǔ)器設(shè)備可以被動(dòng)態(tài)地修改,以便緩存的大小隨著一個(gè)或多個(gè)存儲(chǔ)單元的添加和/或刪除而增長或收縮。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存(100)比一個(gè)或多個(gè)對應(yīng)的存儲(chǔ)設(shè)備具有更低的訪問延遲(例如,讀和/寫延遲)。緩存中的存儲(chǔ)單元的數(shù)量也可以小于存儲(chǔ)設(shè)備中的存儲(chǔ)塊的數(shù)量。因此,在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存中的存儲(chǔ)單元根據(jù)一個(gè)或多個(gè)緩存算法被刪除、插入,和/或修改。緩存算法可以包括涉及緩存的任何操作的同步和/或異步步驟。同步操作可以與一個(gè)或多個(gè)周期性的事件和/或指令(例如,與系統(tǒng)時(shí)鐘關(guān)聯(lián))重合,而異步操作可以是指按需執(zhí)行的操作和/或在同步時(shí)間窗口之外執(zhí)行的操作。緩存(100)的示例可以包括但不僅限于:CPU緩存、磁盤緩存、數(shù)據(jù)庫緩存、受害者緩存、Web緩存、回寫緩存、無寫入緩存、數(shù)據(jù)庫緩沖池、DRAM緩存、閃存緩存、存儲(chǔ)器緩存(例如,作為甲骨文公司的ΕΧΛ丨)Λ ’Λ”存儲(chǔ)器服務(wù)器產(chǎn)品線的一部分)、操作系統(tǒng)緩沖池,和/或?qū)?yīng)于中間層緩存的對象緩存。EXADATA 是位于加利福尼亞州雷德伍德城的甲骨文公司的注冊商標(biāo)。在一個(gè)示例中,緩存(100)駐留在硬盤驅(qū)動(dòng)器上,并被虛擬存儲(chǔ)器管理模塊用來存儲(chǔ)具有對應(yīng)于一個(gè)或多個(gè)其他存儲(chǔ)設(shè)備(例如,RAM)上的物理地址的虛擬地址的頁面表。在此示例中,存儲(chǔ)單元是存儲(chǔ)了來自實(shí)際(即,物理)存儲(chǔ)器的一個(gè)或多個(gè)存儲(chǔ)塊的虛擬地址。在另一個(gè)示例中,緩存(100)是駐留在存儲(chǔ)設(shè)備內(nèi)的數(shù)據(jù)結(jié)構(gòu)。因此,緩存(100)本身可以是被設(shè)計(jì)用于基于一個(gè)或多個(gè)緩存算法存儲(chǔ)來自物理或虛擬存儲(chǔ)器設(shè)備的內(nèi)容的虛擬緩存。在另一個(gè)示例中,CPU緩存是安裝在主板(B卩,印刷電路板)上并通過總線操作地連接到中央處理單元(CPU)的存儲(chǔ)器設(shè)備。在此示例中,緩存是使用存儲(chǔ)器芯片上的靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)來實(shí)現(xiàn)的。在另一個(gè)示例中,使用公司數(shù)據(jù)庫的企業(yè)資源計(jì)劃(ERP)系統(tǒng)是使用三層體系結(jié)構(gòu)來實(shí)現(xiàn)的。公司數(shù)據(jù)庫在 單獨(dú)的主機(jī)(即,數(shù)據(jù)層)上從ERP應(yīng)用來實(shí)現(xiàn)。為了通過減少網(wǎng)絡(luò)流量來提高數(shù)據(jù)庫性能,輕便的數(shù)據(jù)庫安裝在應(yīng)用層主機(jī)上,并被配置成緩存公司數(shù)據(jù)庫的數(shù)據(jù)。因此,緩存在存儲(chǔ)了輕便的數(shù)據(jù)庫的應(yīng)用層主機(jī)上在一組本地硬盤驅(qū)動(dòng)器上實(shí)現(xiàn)。在此示例中,存儲(chǔ)單元可以對應(yīng)于數(shù)據(jù)庫表、行或字段。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,存儲(chǔ)設(shè)備(110)是存儲(chǔ)器設(shè)備。存儲(chǔ)設(shè)備的示例可以包括但不僅限于:硬盤驅(qū)動(dòng)器、隨機(jī)存取存儲(chǔ)器(RAM)、閃存模塊、磁帶驅(qū)動(dòng)器、光驅(qū)動(dòng)器,和/或存儲(chǔ)設(shè)備的任何組合。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,存儲(chǔ)設(shè)備(110)包括存儲(chǔ)塊(例如,存儲(chǔ)塊A (122)、存儲(chǔ)塊B (124)、存儲(chǔ)塊C (126)、存儲(chǔ)塊D (128)、存儲(chǔ)塊E(132)、存儲(chǔ)塊 F (134)、存儲(chǔ)塊 G (136)、存儲(chǔ)塊 H (138))。繼續(xù)圖1A,在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,存儲(chǔ)塊可以是存儲(chǔ)設(shè)備內(nèi)的存儲(chǔ)器的任何邏輯和/或物理段。每一個(gè)存儲(chǔ)塊都可以是可尋址的,意思是說,它可以基于某個(gè)預(yù)定義的尋址方法或機(jī)制而被訪問。存儲(chǔ)塊的示例可以包括但不僅限于:比特、存儲(chǔ)器字節(jié)、存儲(chǔ)器字、寄存器、slab、數(shù)據(jù)庫記錄、數(shù)據(jù)庫字段、超文本標(biāo)記語言(HTML)頁面、數(shù)據(jù)庫引用、文件,和/或存儲(chǔ)設(shè)備內(nèi)的數(shù)據(jù)的任何可尋址的段。根據(jù)本發(fā)明的各實(shí)施例,存儲(chǔ)設(shè)備內(nèi)的存儲(chǔ)塊的大小可以是固定的(即,對所有存儲(chǔ)塊一致)或可變的(例如,取決于存儲(chǔ)塊的內(nèi)容的大小)。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,存儲(chǔ)塊(例如,存儲(chǔ)塊A (122)、存儲(chǔ)塊B (124)、存儲(chǔ)塊C (126)、存儲(chǔ)塊D (128)、存儲(chǔ)塊E (132)、存儲(chǔ)塊F (134)、存儲(chǔ)塊G (136)、存儲(chǔ)塊H (138))可以被分組到存儲(chǔ)容器(例如,存儲(chǔ)容器I (120)、存儲(chǔ)容器Z (130))中。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,存儲(chǔ)容器可以是指存儲(chǔ)設(shè)備內(nèi)的存儲(chǔ)塊的邏輯和/或物理組。存儲(chǔ)容器的示例可以包括但不僅限于:文件、數(shù)據(jù)庫記錄、數(shù)據(jù)庫字段、HTML頁面、數(shù)據(jù)庫引用、存儲(chǔ)器字節(jié)、存儲(chǔ)器字、寄存器、slab、和/或存儲(chǔ)設(shè)備內(nèi)的一個(gè)或多個(gè)存儲(chǔ)塊的任何分組。在一個(gè)示例中,存儲(chǔ)容器是駐留在硬盤驅(qū)動(dòng)器上的文件,而存儲(chǔ)塊是所述硬盤驅(qū)動(dòng)器上的存儲(chǔ)器字節(jié)。在另一個(gè)示例中,存儲(chǔ)容器是數(shù)據(jù)庫行,而其對應(yīng)的存儲(chǔ)塊是數(shù)據(jù)庫行內(nèi)的數(shù)據(jù)庫字段。如示例所示,存儲(chǔ)容器可以只是特定硬件設(shè)備上的一組僅有且所有的存儲(chǔ)塊、特定表或特定數(shù)據(jù)庫上的一組僅有且所有的存儲(chǔ)塊,或任何其他邏輯或物理組。根據(jù)本發(fā)明的各實(shí)施例,存儲(chǔ)設(shè)備內(nèi)的存儲(chǔ)容器的大小可以是固定的(S卩,對所有存儲(chǔ)容器一致)或可變的(例如,取決于存儲(chǔ)容器的內(nèi)容的大小)。進(jìn)一步地,存儲(chǔ)容器中的存儲(chǔ)塊的數(shù)量可以是固定的或可變的。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,存儲(chǔ)容器是可尋址的。數(shù)據(jù)可以基于任何存儲(chǔ)機(jī)制和/或算法,跨一個(gè)或多個(gè)存儲(chǔ)容器被存儲(chǔ)在一個(gè)或多個(gè)存儲(chǔ)塊內(nèi)。因此,存儲(chǔ)容器內(nèi)的存儲(chǔ)塊可以對應(yīng)于相同邏輯單元,和/或根據(jù)它們在軟件程序內(nèi)的用途相關(guān)聯(lián)。存儲(chǔ)設(shè)備(110)的內(nèi)容可以被能夠讀取所述存儲(chǔ)設(shè)備(110)的任何類型的計(jì)算機(jī)和/或設(shè)備使用,并可以被分段,或以任何邏輯次序存儲(chǔ)。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存管理器(140)包括管理緩存(100)和緩存隊(duì)列(142)的功能。緩存管理器(140)可以控制緩存塊在緩存隊(duì)列(142)內(nèi)的插入、刪除,和/或修改。緩存管理器(140)也可以對緩存(100)內(nèi)的存儲(chǔ)單元執(zhí)行諸如插入、刪除,和/或修改之類的操作和/或請求所述操作由另一實(shí)體(例如,緩存控制器)執(zhí)行。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存管理器(140)可以實(shí)現(xiàn)諸如此處所公開的方法中的一個(gè)或多個(gè)的緩存算法。緩存算法的示例可以包括但不僅限于:最近最少使用(LRU)、最近使用(MRU)和/或描述對緩存和/或緩存隊(duì)列(142)的插入、刪除,和/或修改的步驟的一種或多種方法的任何組合。繼續(xù)圖1A,在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存管理器(140)可以對應(yīng)于硬件、軟件,或其組合。例如,緩存管理器(140)可以被實(shí)現(xiàn)為管理DRAM和閃存緩存的數(shù)據(jù)庫緩沖池管理器(例如,數(shù)據(jù)庫內(nèi)核)的一部分、作為操作地連接到硬件緩存的存儲(chǔ)器管理單元、作為管理存儲(chǔ)器緩存的存儲(chǔ)器服務(wù)器的一部分(例如,作為甲骨文公司的EXADATA存儲(chǔ)器服務(wù)器產(chǎn)品線的一部分)、作為管理DRAM和閃存緩存(readzilla)兩者的ZFS儀器緩存管理器的一部分、作為管理操作系統(tǒng)緩沖池的操作系統(tǒng)的一部分,和/或作為管理哪些對象將被維護(hù)在中間層緩存中的對象緩存的一部分。如前所述的組件只是其中可以實(shí)現(xiàn)緩存管理器(140)的組件的示例。在不偏離本發(fā)明的范圍的情況下,可以使用其他硬件或軟件組件。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存管理器(140)控制緩存操作與一個(gè)或多個(gè)周期性的事件(例如,系統(tǒng)時(shí)鐘)的同步。緩存管理器(140)也可以基于一個(gè)或多個(gè)周期性的事件和/或觸發(fā)器(例如,惰性寫入),來控制諸如回寫到存儲(chǔ)設(shè)備(110)之類的周期性的和/或異步操作。緩存管理器(140)可以是存儲(chǔ)設(shè)備(110)和發(fā)出請求的實(shí)體之間的中介。發(fā)出請求的實(shí)體的示例包括但不僅限于:軟件程序、CPU,和/或能夠從存儲(chǔ)設(shè)備(110)請求數(shù)據(jù)和/或向存儲(chǔ)設(shè)備(110)寫入數(shù)據(jù)的任何實(shí)體。因此,緩存管理器(140)可以接收來自發(fā)出請求的實(shí)體的指令(例如,讀和/或?qū)懼噶?,并可以從緩存(100)、緩存隊(duì)列(142)和/或存儲(chǔ)設(shè)備中檢索數(shù)據(jù)和/或向它們中寫入數(shù)據(jù)。圖1B示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的緩存隊(duì)列(142)。如圖1B所示,系統(tǒng)具有多個(gè)組件,包括多個(gè)緩存塊(例如,緩存塊I (156)、緩存塊i (158)、緩存塊i+1 (160)、緩存塊j (162)、緩存塊j+k (164))、保護(hù)段(152)、試用段(154),以及受害者段(170)。系統(tǒng)的組件可以位于同一個(gè)設(shè)備上(例如,硬盤驅(qū)動(dòng)器、RAM、存儲(chǔ)設(shè)備、存儲(chǔ)器管理單元(MMU)Jg務(wù)器、大型機(jī)、臺式個(gè)人計(jì)算機(jī)(PC)、膝上型計(jì)算機(jī)、個(gè)人數(shù)字助理(PDA)、電話、移動(dòng)電話、自助服務(wù)終端、電纜盒,以及任何其他設(shè)備)或可以位于通過網(wǎng)絡(luò)(例如,因特網(wǎng))利用有線和/或無線段連接的分離的設(shè)備上。本領(lǐng)域技術(shù)人員將認(rèn)識到,可以有多于一個(gè)的每一個(gè)單獨(dú)的組件在設(shè)備上運(yùn)行,在本發(fā)明的給定實(shí)施例內(nèi)可以有這些組件的任何組合。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存隊(duì)列(142)是緩存塊(例如,緩存塊I(156)、緩存塊i (158)、緩存塊i+1 (160)、緩存塊j (162)、緩存塊j+k (164))的隊(duì)列。緩存隊(duì)列(142)中的每一個(gè)緩存塊(例如,緩存塊I (156)、緩存塊i (158)、緩存塊i+1 (160)、緩存塊j (162)、緩存塊j+k (164))可以引用緩存內(nèi)的一個(gè)或多個(gè)存儲(chǔ)單元。緩存隊(duì)列(142)可以是虛擬結(jié)構(gòu)(例如,存儲(chǔ)器中的數(shù)據(jù)結(jié)構(gòu))、在存儲(chǔ)設(shè)備(例如,靜態(tài)隨機(jī)存取存儲(chǔ)器設(shè)備)上實(shí)現(xiàn)的物理結(jié)構(gòu),和/或其任何組合。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存塊的值引用緩存中的對應(yīng)的存儲(chǔ)單元的位置和/或其拷貝。因此,緩存塊可以是引用存儲(chǔ)了存儲(chǔ)塊的值的物理存儲(chǔ)單元的邏輯實(shí)體。引用可以呈現(xiàn)位于存儲(chǔ)單元的存儲(chǔ)位置中、存儲(chǔ)物理存儲(chǔ)單元的存儲(chǔ)位置,或使用用于識別被引用的存儲(chǔ)單元的另一種直接或間接技術(shù)的形式。根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例,將緩存塊插入到緩存隊(duì)列中與將存儲(chǔ)塊的值插入到緩存中的存儲(chǔ)單元重合,以便緩存塊引用存儲(chǔ)單元。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,當(dāng)一個(gè)或多個(gè)緩存塊被重新定位在緩存隊(duì)列(142)內(nèi)時(shí),它們的對應(yīng)的存儲(chǔ)單元不在緩存內(nèi)移動(dòng)。因此,緩存塊在緩存隊(duì)列(142)內(nèi)的順序可以不反映存儲(chǔ)單元在緩存內(nèi)的順序。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,當(dāng)選擇用于插入到緩存中的存儲(chǔ)塊時(shí),從緩存中清除對應(yīng)于不同的存儲(chǔ)塊的值。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,對于動(dòng)態(tài)地調(diào)整大小的緩存,緩存隊(duì)列(142)的大小與緩存成比例地增長。繼續(xù)圖1B,在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存隊(duì)列(142)包括位于緩存隊(duì)列(142)末端的受害者段(170)。受害者段(170)是構(gòu)成緩存隊(duì)列(142)的子集的緩存塊的相鄰組。受害者段(170)內(nèi)的緩存塊可以是用于從緩存隊(duì)列(142)清除的候選者。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,不在受害者段(170)中的緩存塊不是用于從緩存隊(duì)列(142)清除的候選者。因此,在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,在插入到緩存中之前,當(dāng)緩存隊(duì)列中的空間不足以用于新緩存塊時(shí),緩存隊(duì)列(142)從受害者段(170)中清除緩存塊。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存隊(duì)列(142)包括位于緩存隊(duì)列(142)末端的試用段(154)。試用段(154)是構(gòu)成緩存隊(duì)列(150)的子集的緩存塊的相鄰組。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,試用段(154)包括受害者段(170),以便受害者段(170)是試用段(154)的子集。試用段(154)可以包括一個(gè)或多個(gè)新緩存塊和/或一個(gè)或多個(gè)舊緩存塊。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,新緩存塊被插入到緩存隊(duì)列(142)中的試用段(154)的開始。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存隊(duì)列(142)包括位于緩存隊(duì)列(142)開始處的保護(hù)段(152)。保護(hù)段(152)是構(gòu)成緩存隊(duì)列(142)的子集的緩存塊的相鄰組。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,保護(hù)段(152)與試用段(154)相鄰。繼續(xù)圖1B,在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存塊在進(jìn)入緩存隊(duì)列(142)的受害者段(170)時(shí)完成了對緩存隊(duì)列(142)的通過。因此,緩存塊可以穿過整個(gè)緩存隊(duì)列(142)或僅僅穿過緩存隊(duì)列的試用段(154),以便完成通過。具體而言,對緩存塊的通過的開始處于保護(hù)段(例如,緩存塊I (156))的開始處,或者試用段(例如,緩存塊i+1 (160))的開始處。隨著緩存塊被從緩存隊(duì)列(142)中清除和/或在緩存隊(duì)列(142)內(nèi)回收利用,任何剩余緩存塊都可以重復(fù)緩存隊(duì)列中的一個(gè)或多個(gè)點(diǎn)(例如,向圖1B所示出的圖中的右側(cè)移動(dòng))。例如,如果緩存塊j+k (164)被回收利用到試用段(154)的開始處(S卩,到位置i+1
(160))并且緩存塊j+k-1 (未示出)被清除,那么,試用段(154)中的剩余緩存塊中每一個(gè)都在圖1B的圖中向右移動(dòng)兩個(gè)空格。作為另一個(gè)示例,如果緩存塊j+k (164)被回收利用到保護(hù)段(152)的開始處(B卩,到位置I (156))并且緩存塊j+k-Ι (未示出)被清除,那么,緩存隊(duì)列(142)中的剩余緩存塊每一個(gè)都向圖1B中的圖中的右側(cè)移動(dòng)。當(dāng)緩存塊進(jìn)入受害者段(170)時(shí),對緩存隊(duì)列的通過完成。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,如果緩存塊已經(jīng)被回收利用了 N-1次,則可以說該緩存塊對于任何正整數(shù)N,在緩存隊(duì)列(142)的第N次通過內(nèi)。因此,在緩存隊(duì)列(142)的第一次通過內(nèi)的緩存塊是從來沒有被回收利用的任何緩存塊,并且在緩存隊(duì)列的第三次通過內(nèi)的緩存塊是已經(jīng)被回收利用2次的緩存塊。容器統(tǒng)計(jì)回頭參考圖1A,在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存管理器(140)存儲(chǔ)一組容器統(tǒng)計(jì)對象(未示出)。每一個(gè)容器統(tǒng)計(jì)對象都存儲(chǔ)存儲(chǔ)設(shè)備中的存儲(chǔ)容器的數(shù)據(jù)。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,為對應(yīng)于緩存隊(duì)列(142)中的一個(gè)或多個(gè)緩存塊的每一個(gè)存儲(chǔ)容器創(chuàng)建容器統(tǒng)計(jì)對象。容器統(tǒng)計(jì)對象可以在將該存儲(chǔ)容器的第一緩存塊插入到緩存隊(duì)列(142)的基礎(chǔ)上創(chuàng)建。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,當(dāng)容器統(tǒng)計(jì)對象的對應(yīng)的存儲(chǔ)容器在緩存隊(duì)列(142)中沒有剩余緩存塊時(shí),刪除容器統(tǒng)計(jì)對象。因此,當(dāng)存儲(chǔ)容器的最后一個(gè)緩存塊從緩存隊(duì)列(142)中清除時(shí),可以刪除容器統(tǒng)計(jì)對象。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,容器統(tǒng)計(jì)對象在對應(yīng)于存儲(chǔ)容器的緩存隊(duì)列內(nèi)包括若干個(gè)舊緩存塊和若干個(gè)新緩存塊。存儲(chǔ)容器的舊緩存塊的數(shù)量是存儲(chǔ)容器中的作為舊緩存塊存儲(chǔ)在緩存隊(duì)列(142)中的存儲(chǔ)塊的計(jì)數(shù)。存儲(chǔ)容器的新緩存塊的數(shù)量是存儲(chǔ)容器中的作為新緩存塊存儲(chǔ)在緩存隊(duì)列(142)中的存儲(chǔ)塊的計(jì)數(shù)。作為緩存塊“存儲(chǔ)”的存儲(chǔ)塊是指在緩存隊(duì)列(142)內(nèi)具有對應(yīng)的緩存塊的存儲(chǔ)塊。緩存塊引用存儲(chǔ)了存儲(chǔ)塊的值(即,臟或非臟值)的緩存(100)內(nèi)的存儲(chǔ)單元。繼續(xù)圖1A,在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,在啟動(dòng)緩存之后,緩存管理器(140)與分段的最近最少使用的(SLRU)緩存隊(duì)列類似地(S卩,沒有概率性的插入和/或刪除)操作緩存隊(duì)列。因此,在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存管理器(140)被配置成在預(yù)定義的預(yù)熱期(被定義為若干個(gè)預(yù)熱事務(wù)和/或時(shí)間段)之后激活概率性的插入和/或概率性的刪除。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存管理器(140)被配置成延遲概率性的插入和/或概率性的刪除,直到緩存在指定數(shù)量的事務(wù)(T)上收集了容器統(tǒng)計(jì)對象的數(shù)據(jù)。在此時(shí)間段過程中和/或在此時(shí)間段之后,緩存管理器(140)可以收集每一個(gè)容器統(tǒng)計(jì)對象的下列容器統(tǒng)計(jì)中的一個(gè)或多個(gè):a.第一遍緩存塊的數(shù)量(“num_first_pass_blocks”)。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,第一遍緩存塊是完成了對試用段的第一次通過的那些(即,插入在試用段的開始處(即,頂部)的隨后回收利用到試用段或保護(hù)段的開始處(即,頂部)的那些)。
b.第一遍命中的數(shù)量(“num_first_pass_hits”)。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,這是完成了對試用段的第一次通過的那些緩存塊的緩存命中的總數(shù)的計(jì)數(shù)。c.第二機(jī)會(huì)塊的數(shù)量(“num_second_chance_blocks”)。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,這是完成了在沒有接收到緩存命中的情況下完成對試用段的第一次通過并被回收利用到試用段的開始處的緩存塊的數(shù)量。d.第二遍命中塊的數(shù)量(“num_second_pass_hit_blocks”)。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,這是在對試用段的第二次通過過程中被命中的緩存塊的數(shù)量。e.在接收到第一命中之前緩存訪問的平均數(shù)(“avg_cache_accesses_before_first_hit”)。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,這是在將緩存塊插入到緩存隊(duì)列中和對試用段的第二次通過中接收到緩存命中之間的緩存訪問的平均數(shù)。f.“活動(dòng)”狀態(tài)標(biāo)志跟蹤概率性的刪除是否對于對應(yīng)的存儲(chǔ)容器激活。活動(dòng)狀態(tài)標(biāo)記最初被設(shè)置為假(FALSE )。g.自從最后一次訪問以來的事務(wù)的數(shù)量(“transactions_since_last_access”)。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,這保持跟蹤自從對緩存塊的最后一次訪問(即,緩存命中)以來執(zhí)行的(即,由緩存服務(wù)的)事務(wù)的數(shù)量。如果此值超過預(yù)定義的閾值數(shù)字,則在被考慮從緩存中清除之后以概率I刪除對應(yīng)于此存儲(chǔ)容器的緩存塊??梢詮木彺婀芾砥?140)的圖形用戶界面和/或從任何被授權(quán)的用戶或?qū)嶓w接收到預(yù)定義的閾值數(shù)字。在指定數(shù)量的事務(wù)(T)完成之后,緩存管理器(140)可以繼續(xù)收集這些容器統(tǒng)計(jì)。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,基于所述容器統(tǒng)計(jì)每T個(gè)事務(wù)更新一次容器統(tǒng)計(jì)對象。因此,緩存管理器(140)可以實(shí)現(xiàn)計(jì)數(shù)器以周期性地更新容器統(tǒng)計(jì)對象,以便每T個(gè)事務(wù)表示數(shù)據(jù)收集周期。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,在每個(gè)事務(wù)之后更新容器統(tǒng)計(jì)對象。因此,可以使用事務(wù)的移動(dòng)窗口來計(jì)算每一個(gè)容器統(tǒng)計(jì)對象的容器統(tǒng)計(jì)。緩存管理器(140)可以接收預(yù)熱時(shí)間段和/或使用指定數(shù)量的事務(wù)來與本發(fā)明的各實(shí)施例的元素和/或步驟中的任何一個(gè)相結(jié)合地延遲概率性的插入和/或刪除。繼續(xù)圖1A,根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例,緩存管理器(140)包括圖形用戶界面(GUI)和/或應(yīng)用編程接口(API)。GUI和/或API包括從用戶和/或軟件應(yīng)用接收移動(dòng)窗口的大小、指定數(shù)量的事務(wù)、預(yù)熱時(shí)間段,在緩存管理器(140)內(nèi)使用的任何屬性或性質(zhì)。GUI可以在軟件應(yīng)用(例如,Web應(yīng)用、桌面應(yīng)用、移動(dòng)應(yīng)用等等)內(nèi)向軟件應(yīng)用的用戶顯示,以便接收輸入并提供反饋??梢允褂肎UI來提供自定義、報(bào)告性能統(tǒng)計(jì),和/或修改系統(tǒng)性質(zhì)。GUI的用戶可以是計(jì)算機(jī)系統(tǒng)的最終用戶、數(shù)據(jù)庫管理員、系統(tǒng)管理員、硬件設(shè)計(jì)師、和/或符合一個(gè)或多個(gè)預(yù)先頒發(fā)的安全憑據(jù)的任何實(shí)體或個(gè)人。作為替代地或附加地,緩存管理器(140)可以被預(yù)先配置或設(shè)計(jì)有預(yù)先指定的大小的移動(dòng)窗口、指定數(shù)量的事務(wù)、預(yù)熱時(shí)間段,和/或在緩存管理器(140)內(nèi)使用的任何屬性或性質(zhì)。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存管理器(140)使用在指定數(shù)量的事務(wù)過程中收集的數(shù)據(jù)來填充和/或修改容器統(tǒng)計(jì)對象。這可以在每T個(gè)事務(wù)之后基于為該T個(gè)事務(wù)收集的數(shù)據(jù),在每個(gè)事務(wù)之后(基于過去的事務(wù)的移動(dòng)窗口),和/或基于對過去的事務(wù)數(shù)據(jù)的任何采樣來進(jìn)行。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,下列操作中的一個(gè)或多個(gè)可以基于收集的數(shù)據(jù)來執(zhí)行:
a.對于具有num_f irst_pass_hits>l的所有容器統(tǒng)計(jì)對象,作為容器延遲*num_first_pass_hits/num_first_pass_blocks,來計(jì)算存儲(chǔ)容器的估計(jì)的新塊成本(“estimated_new_block_cost”)(遵循公式Ctlj=E[N」]禮」,其中,E[Nj]是在對緩存隊(duì)列的第一次通過過程中對來自存儲(chǔ)容器j的新緩存塊的緩存命中的期望數(shù),如下面所討論的)。對于這樣的容器統(tǒng)計(jì)對象,活動(dòng)狀態(tài)標(biāo)記可以被設(shè)置為真(TRUE),并且num_first_pass_blocks 和 num_first_pass_hits 可以被設(shè)置為 O。b.那些沒有num_first_pass_hits>l的容器統(tǒng)計(jì)對象繼續(xù)使用estimated_new_block_cost 的舊值,并持續(xù)增大 num_first_pass_blocks 和 num_first_pass_hits,直到下
一容器統(tǒng)計(jì)更新。c.在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,對于具有num_second_pass_hit_blocks>l的所有容器統(tǒng)計(jì)對象,作為 latency* (num_second_pass_hit_blocks/num_second_chance_blocks)/avg_cache_accesses_before_first_hit來計(jì)算估計(jì)的零命中緩存未中成本(“estimated_Ohit_miss_cost”)(遵循公式 Cj=LjRj=LjP(A|B」)/Tj,如下面所討論的)。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,對于這些容器統(tǒng)計(jì)對象,num_second_chance_blocks、num_second_pass_hit_blocks,以及 avg_cache_accesses_before_first_hit 可以被復(fù)位為零。d.在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,那些沒有num_second_pass_hit_blocks>l的容器統(tǒng)計(jì)對象可以繼續(xù)使用現(xiàn)有的estimated_Ohit_miss_cost,和/或繼續(xù)增大num_second_chance_blocks> num_second_pass_hit_blocks 和 / 或 avg_cache_accesses_before_first_hit0在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,在預(yù)熱期之后和/或執(zhí)行指定數(shù)量的事務(wù)之后,對于活動(dòng)狀態(tài)標(biāo)記被設(shè)置為FALSE的容器統(tǒng)計(jì)對象,緩存管理器(140)以概率I將對應(yīng)于存儲(chǔ)容器的新緩存塊插入在試用段的開始處(即,頂部)。另外,緩存管理器(140)還以概率0.5刪除對應(yīng)于存儲(chǔ)容器的緩存塊,如果它們在對試用段的第一次通過過程中接收到零個(gè)緩存命中(此時(shí)被認(rèn)為從緩存中清除)的話。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,這增強(qiáng)了這樣的緩存塊的回收利用,以便提高估計(jì)的容器統(tǒng)計(jì)數(shù)據(jù)的精確度。分析緩存刪除繼續(xù)圖1A,根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例,緩存管理器(140)以概率的方式從緩存隊(duì)列(142)的受害者段刪除一個(gè)或多個(gè)新緩存塊。因此,可以給受害者段中的一個(gè)或多個(gè)新緩存塊指派刪除概率。刪除概率是:如果檢查相應(yīng)的緩存塊,則該緩存塊將被從緩存中清除的概率。例如,刪除概率可以是零和一(含)之間的數(shù)字。當(dāng)新緩存塊被考慮從緩存隊(duì)列中清除時(shí),緩存管理器(140)可以隨機(jī)地選擇概率數(shù)。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,概率數(shù)可以從均勻分布中選擇和/或在匹配刪除概率的潛在值的范圍的潛在值的范圍內(nèi)選擇。隨后,將概率數(shù)與刪除概率進(jìn)行比較,并且對是否要清除緩存塊作出判斷。繼續(xù)上述示例,如果刪除概率大于或等于概率數(shù),則從緩存隊(duì)列中清除緩存塊(對應(yīng)的存儲(chǔ)單元被釋放)。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存管理器(140)響應(yīng)于被請求的緩存操作,識別緩存命中和/或緩存未中。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存管理器(140)跟蹤在對緩存隊(duì)列(142)的每一次通過過程中由緩存塊接收到的緩存命中的數(shù)量(對每一個(gè)緩存塊b表示為nb)。對緩存隊(duì)列(142)的通過可以包括對緩存隊(duì)列的在其之后緩存塊被清除或回收利用的任何段(例如,試用段和/或保護(hù)段)的通過。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,如果對于正在被考慮清除的緩存塊,nb等于零,則從緩存隊(duì)列中刪除緩存塊。如果nb>0,那么,緩存塊被回收利用到緩存隊(duì)列(142)的保護(hù)段的開始處(S卩,頂部)。在插入到緩存隊(duì)列(142)時(shí),nb可以被初始化為任何值。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,當(dāng)緩存塊被回收利用時(shí),nb被復(fù)位到零。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,每當(dāng)需要將新緩存塊插入到緩存隊(duì)列(140)中時(shí)(例如,當(dāng)緩存未中發(fā)生時(shí)),緩存管理器(140)順序地考慮緩存隊(duì)列(142)的受害者段中的緩存塊,以從緩存隊(duì)列(142)末端開始清除。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存管理器(140)作為rb=nb/tb來計(jì)算緩存中舊緩存塊的估計(jì)的訪問速率,其中,tb是自從舊緩存塊b被插入到緩存隊(duì)列(142)中以來消逝的時(shí)間。繼續(xù)圖1A,在本發(fā)明的·一個(gè)或多個(gè)實(shí)施例中,緩存管理器(140)將預(yù)定義的比率的帶有nb等于零的新緩存塊回收利用到緩存隊(duì)列(142)的試用段的開始處(即,頂部)。然后,緩存管理器(140)可以對于每一個(gè)存儲(chǔ)容器觀察在對試用段的第二次通過過程中被命中的那些緩存塊的一部分。在一個(gè)實(shí)施例中,預(yù)定義的部分可以由連接到緩存管理器(140)的任何被授權(quán)的用戶和/或?qū)嶓w設(shè)置和/或修改。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,可以在緩存的操作過程中動(dòng)態(tài)地調(diào)整預(yù)定義的部分,以便改進(jìn)緩存的性能。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存管理器(140)計(jì)算在對試用段的第一次通過之后帶有nb=0的新緩存塊將在對試用段的第二次通過過程中接收到緩存命中的條件概率為P (A| Bj) =P (A H Bj)/P (Bj)。在此公式中,Bj是屬于在其對試用段的第一次通過過程中沒有接收到緩存命中的存儲(chǔ)容器j的新塊的事件,A是該新塊在其對試用段的第二次通過過程中接收到緩存命中的事件。對于每一個(gè)存儲(chǔ)容器j,此條件概率可以被估計(jì)為滿足事件Bj并在被回收利用到緩存隊(duì)列的試用段的開始處(即,頂部)之后接收到緩存命中的緩存塊的一部分。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存管理器(140)作為Rj=P (A| Bj)/Tj來計(jì)算來自存儲(chǔ)容器j的新緩存塊的估計(jì)的訪問速率,其中,Tj是在在對試用段的第二次通過過程中接收到緩存命中之前由來自存儲(chǔ)容器j的新緩存塊花費(fèi)在緩存中的平均時(shí)間。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,可以使用其中1^是1的遞減函數(shù)的任何公式來計(jì)算估計(jì)的訪問速率(包括所示出的公式的任何線性和/或指數(shù)變體)。繼續(xù)圖1A,在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存管理器(140)作為Cj=LfRj來計(jì)算在受害者緩存中具有一個(gè)或多個(gè)新緩存塊的存儲(chǔ)容器的估計(jì)的緩存未中成本,其中Lj是存儲(chǔ)容器j的延遲。緩存管理器(140)可以計(jì)算刪除這樣的緩存塊的概率Pj,以便對于在受害者段中有新緩存塊的任何兩個(gè)存儲(chǔ)容器j和k,相對刪除概率與相對緩存未中成本成反比:Pj/Pk=Ck/Cj。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,可以使用其中存儲(chǔ)容器的刪除概率與其估計(jì)的緩存未中成本逆相關(guān)的任何公式或給定公式的變體(包括所示出的公式的任何線性和/或指數(shù)變體)。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,緩存管理器(140)可以使用此公式和/或此公式的變體來隔離在緩存隊(duì)列中具有緩存塊的任何存儲(chǔ)容器的刪除概率(pp。首先,緩存管理器(140)可以識別在受害者段中具有一個(gè)或多個(gè)新緩存塊的存儲(chǔ)容器之中的最低估計(jì)的緩存未中成本(Cjmin )。然后,緩存管理器(140)可以作為
權(quán)利要求
1.一種將緩存塊從緩存隊(duì)列刪除的方法,包括: 由處理器檢測所述緩存隊(duì)列的第一緩存未中; 識別所述緩存隊(duì)列內(nèi)存儲(chǔ)存儲(chǔ)塊的值的新緩存塊; 由所述處理器計(jì)算包括所述存儲(chǔ)塊的存儲(chǔ)容器的估計(jì)的緩存未中成本; 由所述處理器基于所述估計(jì)的緩存未中成本的數(shù)學(xué)公式來計(jì)算所述存儲(chǔ)容器的刪除概率; 從均勻分布中隨機(jī)地選擇概率數(shù),其中,所述刪除概率超過所述概率數(shù);以及 響應(yīng)于所述刪除概率超過所述概率數(shù),從所述緩存隊(duì)列清除所述新緩存塊。
2.如權(quán)利要求1所述的方法,進(jìn)一步包括: 在清除所述新緩存塊之后,檢測所述緩存隊(duì)列的第二緩存未中; 計(jì)算對應(yīng)于非清除新緩存塊的非清除存儲(chǔ)容器的非清除估計(jì)的緩存未中成本; 計(jì)算舊緩存塊的估計(jì)的舊緩存未中成本,其中所述估計(jì)的舊緩存未中成本小于所述非清除估計(jì)的緩存未中成本;以及 從所述緩存隊(duì)列清除所述舊緩存塊。
3.如權(quán)利要求2所述的方法,其中計(jì)算所述非清除估計(jì)的舊緩存未中成本包括: 對于所述舊緩存塊,基于自從插入到所述緩存隊(duì)列以來接收的緩存命中數(shù)量除以自從插入到所述緩存隊(duì)列以來消逝的時(shí)間,`計(jì)算估計(jì)的訪問速率;以及 基于所述非清除存儲(chǔ)容器的延遲乘以所述估計(jì)的訪問速率,計(jì)算所述非清除估計(jì)的舊緩存未中成本。
4.如權(quán)利要求1所述的方法,其中計(jì)算存儲(chǔ)容器的估計(jì)的緩存未中成本包括: 對于所述存儲(chǔ)容器計(jì)算在對所述試用段的第二次通過的過程中接收到至少一個(gè)緩存命中的多個(gè)回收利用的新緩存塊的分?jǐn)?shù),其中所述多個(gè)回收利用的新緩存塊在對所述試用段的第一次通過的過程中接收到零個(gè)緩存命中; 基于所述分?jǐn)?shù)計(jì)算估計(jì)的訪問速率;以及 基于所述估計(jì)的訪問速率和所述存儲(chǔ)容器的延遲的積,計(jì)算所述估計(jì)的緩存未中成本。
5.如權(quán)利要求1所述的方法,其中清除新緩存塊基于所述緩存隊(duì)列內(nèi)的多個(gè)舊緩存塊的最低估計(jì)的緩存未中成本超過所述估計(jì)的緩存未中成本。
6.如權(quán)利要求1所述的方法,進(jìn)一步包括: 在所述緩存隊(duì)列內(nèi)識別位于緩存隊(duì)列末端的試用段和與所述試用段相鄰的保護(hù)段,其中所述新緩存塊位于所述試用段內(nèi)的位置; 在清除所述新緩存塊之后并且在所述試用段內(nèi),識別位于所述新緩存塊的所述位置之后的舊緩存塊,其中所述舊緩存塊在對所述試用段的當(dāng)前通過的過程中具有至少一個(gè)累積的緩存命中; 在清除所述新緩存塊之后并且在所述試用段內(nèi),識別位于所述新緩存塊的所述位置之后的非清除新緩存塊,其中所述非清除新緩存塊具有零個(gè)累積的緩存命中; 將所述舊緩存塊重新利用到所述保護(hù)段的開頭;以及 將所述非清除新緩存塊重新利用到所述試用段的開頭。
7.如權(quán)利要求6所述的方法,進(jìn)一步包括:在清除所述新緩存塊之后,插入緩存塊到所述緩存隊(duì)列中所述試用段的開頭,其中所述緩存塊包括響應(yīng)于所述緩存未中而被訪問的存儲(chǔ)塊的值。
8.如權(quán)利要求1所述的方法,其中所述數(shù)學(xué)公式代表作為所述估計(jì)的緩存未中成本的遞減函數(shù)的刪除概率。
9.一種計(jì)算機(jī)可讀的存儲(chǔ)介質(zhì),其存儲(chǔ)用于從緩存隊(duì)列刪除緩存塊的多條指令,所述多條指令包括以下功能: 檢測所述緩存隊(duì)列的第一緩存未中; 識別所述緩存隊(duì)列內(nèi)存儲(chǔ)存儲(chǔ)塊的值的新緩存塊; 計(jì)算包括所述存儲(chǔ)塊的存儲(chǔ)容器的估計(jì)的緩存未中成本; 基于所述估計(jì)的緩存未中成本的數(shù)學(xué)公式來計(jì)算所述存儲(chǔ)容器的刪除概率; 從均勻分布中隨機(jī)地選擇概率數(shù),其中,所述刪除概率超過所述概率數(shù);以及 響應(yīng)于所述刪除概率超過所述概率數(shù),從所述緩存隊(duì)列清除所述新緩存塊。
10.如權(quán)利要求9所述的計(jì)算機(jī)可讀的存儲(chǔ)介質(zhì),其中所述多條指令進(jìn)一步包括以下功能: 在清除所述新緩存塊之后,檢測所述緩存隊(duì)列的第二緩存未中; 計(jì)算對應(yīng)于非清除新緩存塊的非清除存儲(chǔ)容器的非清除估計(jì)的緩存未中成本; 計(jì)算舊緩存塊的估計(jì)的舊緩存未中成本,其中所述估計(jì)的舊緩存未中成本小于所述非清除估計(jì)的緩存未中成本;以及 從所述緩存隊(duì)列清除所述舊緩存塊。
11.如權(quán)利要求10所述的計(jì)算機(jī)可讀的存儲(chǔ)介質(zhì),其中計(jì)算所述非清除估計(jì)的舊緩存未中成本包括: 對于所述舊緩存塊,基于自從插入到所述緩存隊(duì)列以來接收的緩存命中數(shù)量除以自從插入到所述緩存隊(duì)列以來消逝的時(shí)間,計(jì)算估計(jì)的訪問速率;以及 基于所述非清除存儲(chǔ)容器的延遲乘以所述估計(jì)的訪問速率,計(jì)算所述非清除估計(jì)的舊緩存未中成本。
12.如權(quán)利要求9所述的計(jì)算機(jī)可讀的存儲(chǔ)介質(zhì),其中計(jì)算存儲(chǔ)容器的估計(jì)的緩存未中成本包括: 對于所述存儲(chǔ)容器計(jì)算在對所述試用段的第二次通過的過程中接收到至少一個(gè)緩存命中的多個(gè)回收利用的新緩存塊的分?jǐn)?shù),其中所述多個(gè)回收利用的新緩存塊在對所述試用段的第一次通過的過程中接收到零個(gè)緩存命中; 基于所述分?jǐn)?shù)計(jì)算估計(jì)的訪問速率;以及 基于所述估計(jì)的訪問速率和所述存儲(chǔ)容器的延遲的積,計(jì)算所述估計(jì)的緩存未中成本。
13.如權(quán)利要求9所述的計(jì)算機(jī)可讀的 存儲(chǔ)介質(zhì),其中清除新緩存塊基于所述緩存隊(duì)列內(nèi)的多個(gè)舊緩存塊的最低估計(jì)的緩存未中成本超過所述緩存未中成本。
14.如權(quán)利要求9所述的計(jì)算機(jī)可讀的存儲(chǔ)介質(zhì),其中所述多條指令進(jìn)一步包括以下功能: 在所述緩存隊(duì)列內(nèi)識別位于緩存隊(duì)列末端的試用段和與所述試用段相鄰的保護(hù)段,其中所述新緩存塊位于所述試用段內(nèi)的位置;在清除所述新緩存塊之后并且在所述試用段內(nèi),識別位于所述新緩存塊的所述位置之后的舊緩存塊,其中所述舊緩存塊在對所述試用段的當(dāng)前通過的過程中具有至少一個(gè)累積的緩存命中; 在清除所述新緩存塊之后并且在所述試用段內(nèi),識別位于所述新緩存塊的所述位置之后的非清除新緩存塊,其中所述非清除新緩存塊具有零個(gè)累積的緩存命中; 將所述舊緩存塊重新利用到所述保護(hù)段的開頭;以及 將所述非清除新緩存塊重新利用到所述試用段的開頭。
15.一種用于刪除緩存塊的系統(tǒng),包括: 緩存隊(duì)列,包括 在所述緩存隊(duì)列末端的試用段,其包括存儲(chǔ)存儲(chǔ)塊的值的新緩存塊,其中所述新緩存塊自從插入到所述緩存隊(duì)列中以來具有零個(gè)累積的緩存命中, 與所述試用段相鄰的保護(hù)段;以及 在處理器上運(yùn)行并且包括以下功能的緩存管理器: 檢測所述緩存隊(duì)列的第一緩存未中; 識別所述緩存隊(duì)列內(nèi)的新緩存塊; 計(jì)算包括所述存儲(chǔ)塊的存儲(chǔ)容器的估計(jì)的緩存未中成本; 基于所述估計(jì)的緩存未中成本的數(shù)學(xué)公式來計(jì)算所述存儲(chǔ)容器的刪除概率; 從均勻分布中隨機(jī)地選擇概率數(shù),其中,所述刪除概率超過所述概率數(shù);以及 響應(yīng)于所述刪除概率超過所述概率數(shù),從所述緩存隊(duì)列清除所述新緩存塊。
16.如權(quán)利要求15所述的系統(tǒng),其中所述緩存管理器進(jìn)一步被配置為: 在清除所述新緩存塊之后,檢測所述緩存隊(duì)列的第二緩存未中; 計(jì)算對應(yīng)于非清除新緩存塊的非清除存儲(chǔ)容器的非清除估計(jì)的緩存未中成本; 計(jì)算舊緩存塊的估計(jì)的舊緩存未中成本,其中所述估計(jì)的舊緩存未中成本小于所述非清除估計(jì)的緩存未中成本;以及 從所述緩存隊(duì)列清除所述舊緩存塊。
17.如權(quán)利要求16所述的系統(tǒng),其中計(jì)算所述非清除估計(jì)的舊緩存未中成本包括: 對于所述舊緩存塊,基于自從插入到所述緩存隊(duì)列以來接收的緩存命中數(shù)量除以自從插入到所述緩存隊(duì)列以來消逝的時(shí)間,計(jì)算估計(jì)的訪問速率;以及 基于所述非清除存儲(chǔ)容器的延遲乘以所述估計(jì)的訪問速率,計(jì)算所述非清除估計(jì)的舊緩存未中成本。
18.如權(quán)利要求15所述的系統(tǒng),其中計(jì)算存儲(chǔ)容器的估計(jì)的緩存未中成本包括: 對于所述存儲(chǔ)容器計(jì)算在對所述試用段的第二次通過的過程中接收到至少一個(gè)緩存命中的多個(gè)回收利用的新緩存塊的分?jǐn)?shù),其中所述多個(gè)回收利用的新緩存塊在對所述試用段的第一次通過的過程中接收到零個(gè)緩存命中; 基于所述分?jǐn)?shù)計(jì)算估計(jì)的訪問速率;以及 基于所述估計(jì)的訪問速率和所述存儲(chǔ)容器的延遲的積,計(jì)算所述估計(jì)的緩存未中成本。
19.如權(quán)利要求15所述的系統(tǒng),其中所述緩存隊(duì)列進(jìn)一步包括: 所述試用段內(nèi)的受害者段,其中所述新緩存塊位于對所述受害者段的第一次通過內(nèi)。
20.如權(quán)利要求19所述的系統(tǒng),其中所述緩存管理器進(jìn)一步被配置為: 在所述受害者段內(nèi)識別所述新緩存塊的位置; 在清除所述新緩存塊之后并且在所述受害者段內(nèi),識別位于所述新緩存塊的所述位置之后的舊緩存塊,其中所述舊緩存塊在對所述試用段的當(dāng)前通過的過程中具有至少一個(gè)累積的緩存命中; 在清除所述新緩存塊之后并且在所述試用段內(nèi),識別位于所述新緩存塊的所述位置之后的非清除新緩存塊,其中所述非清除新緩存塊具有零個(gè)累積的緩存命中; 將所述舊緩存塊回收利用到所述保護(hù)段的開頭;以及 將所述非清除新緩 存塊回收利用到所述試用段的開頭。
全文摘要
一種將緩存塊從緩存隊(duì)列刪除的方法包括檢測緩存隊(duì)列的第一緩存未中;識別所述緩存隊(duì)列內(nèi)存儲(chǔ)存儲(chǔ)塊的值的新緩存塊;計(jì)算包括所述存儲(chǔ)塊的存儲(chǔ)容器的估計(jì)的緩存未中成本;基于所述估計(jì)的緩存未中成本的數(shù)學(xué)公式來計(jì)算存儲(chǔ)容器的刪除概率;從均勻分布中隨機(jī)地選擇概率數(shù),其中,刪除概率超過概率數(shù);以及響應(yīng)于刪除概率超過概率數(shù),從緩存隊(duì)列清除新緩存塊。
文檔編號G06F12/12GK103168293SQ201180049892
公開日2013年6月19日 申請日期2011年8月31日 優(yōu)先權(quán)日2010年8月31日
發(fā)明者G·F·斯沃特, D·溫格沃弗 申請人:甲骨文國際公司