專(zhuān)利名稱(chēng):分級(jí)式不可變內(nèi)容可尋址存儲(chǔ)器處理器的制作方法
分級(jí)式不可變內(nèi)容可尋址存儲(chǔ)器處理器發(fā)明領(lǐng)域本發(fā)明涉及計(jì)算機(jī)存儲(chǔ)器管理。 背景在常規(guī)的馮 諾伊曼計(jì)算機(jī)體系結(jié)構(gòu)中,存儲(chǔ)器被構(gòu)造成大小固定的 爭(zhēng)元的線(xiàn)性陣列,按順序地址進(jìn)行索引。
圖1示出此常規(guī)體系結(jié)構(gòu)的一個(gè)示例。指令102執(zhí)行后的結(jié)果使存儲(chǔ)器104的內(nèi)容如圖所示。雖然此方法 易于實(shí)現(xiàn),而且對(duì)于大小固定的應(yīng)用數(shù)據(jù)單元應(yīng)用起來(lái)也比較方便,但是 對(duì)軟件結(jié)構(gòu)和技術(shù)提出的要求是處理大小可變且結(jié)構(gòu)化的數(shù)據(jù)。對(duì)于大小可變的數(shù)據(jù),軟件通常實(shí)現(xiàn)一動(dòng)態(tài)存儲(chǔ)器分配器,該動(dòng)態(tài) 存儲(chǔ)器分配器在存儲(chǔ)器中定位一個(gè)至少與所需區(qū)域一樣大的連續(xù)區(qū)域。然 而,在長(zhǎng)時(shí)間執(zhí)行后,存儲(chǔ)空間可能被分割成了較小的區(qū)域,以致于即使 可用的存儲(chǔ)器總量是充足的,但存儲(chǔ)器分配請(qǐng)求仍會(huì)失敗。諸如生成無(wú)用 信息收集程序(generational garbage collector)等機(jī)制可以通過(guò)復(fù)制區(qū)域使 之連續(xù)的方式來(lái)周期性地重新壓縮存儲(chǔ)器,但當(dāng)這樣的無(wú)用信息收集被調(diào) 用時(shí)會(huì)影響應(yīng)用程序正在進(jìn)行中的執(zhí)行,特別是在實(shí)時(shí)系統(tǒng)中或者在總體 上要求可預(yù)測(cè)響應(yīng)的系統(tǒng)中,這是一個(gè)不可接受的方面。而且,如果大小 可變的數(shù)據(jù)項(xiàng)長(zhǎng)度增加,則軟件必須分配所需大小的新的連續(xù)區(qū)域并將數(shù) 據(jù)復(fù)制到該新位置,而且使指向舊位置的所有引用變?yōu)楝F(xiàn)在指向該新位置。 為了方便后一動(dòng)作, 一些軟件通過(guò)大小固定的特定區(qū)域引入一個(gè)額外的間 接指定級(jí)(level of indirection),該特定區(qū)域提供指向大小可變的數(shù)據(jù)的實(shí) 際指針,因此只有單個(gè)特定區(qū)域需要更新,但這是以每次訪(fǎng)問(wèn)時(shí)的額外間 接指定為代價(jià)的。針對(duì)大小可變的數(shù)據(jù)的一種替代方法是使用指針從非連續(xù)的存儲(chǔ)器單 元來(lái)構(gòu)造大小可變的數(shù)據(jù)類(lèi)型(即,使用結(jié)構(gòu)化的數(shù)據(jù))。處理結(jié)構(gòu)化的6數(shù)據(jù)極具挑戰(zhàn)性,因?yàn)樵诖嬖谧鳛榻Y(jié)構(gòu)化數(shù)據(jù)的特征的復(fù)雜指針引用的情 況下是難以確定何時(shí)存儲(chǔ)器區(qū)域可得釋放的。訪(fǎng)問(wèn)結(jié)構(gòu)化數(shù)據(jù)表示下的數(shù) 據(jù)還需要開(kāi)銷(xiāo)來(lái)通過(guò)指針間接指定以固定大小可變的數(shù)據(jù)項(xiàng)中的下一條目。對(duì)于以多個(gè)分離的進(jìn)程運(yùn)行的應(yīng)用程序,因?yàn)橐话惚仨殞⒔Y(jié)構(gòu)化的數(shù) 據(jù)串行化并將該結(jié)果復(fù)制到分離的地址空間,然后將其串并轉(zhuǎn)換以便共享 該結(jié)構(gòu)化的數(shù)據(jù),所以結(jié)構(gòu)化的數(shù)據(jù)引入進(jìn)一步的開(kāi)銷(xiāo)。這之所以發(fā)生是 因?yàn)?,?duì)于作為用來(lái)提供進(jìn)程之間隔離的虛擬地址變換的結(jié)果的每個(gè)地址 空間而言,用來(lái)將數(shù)據(jù)進(jìn)行結(jié)構(gòu)化的地址都是唯一的。共享還受到用于地址變換的存儲(chǔ)頁(yè)的與典型的應(yīng)用數(shù)據(jù)單元(例如,32-128字節(jié))相比較大 的粒度(例如,8千字節(jié)或更大)的阻礙。結(jié)果,應(yīng)用程序或者被組織成一個(gè)進(jìn)程內(nèi)的多個(gè)線(xiàn)程,放棄對(duì)單獨(dú)地址的保護(hù),或者在將結(jié)構(gòu)化的數(shù)據(jù)于 地址空間之間串行化、復(fù)制以及串并轉(zhuǎn)換中付出重大代價(jià)。近來(lái)的和預(yù)期的技術(shù)發(fā)展使此標(biāo)準(zhǔn)馮 諾伊曼模型的缺點(diǎn)愈加突顯問(wèn) 題。首先,存儲(chǔ)器系統(tǒng)性能未跟上增強(qiáng)的處理器性能的步伐,使存儲(chǔ)器性 能成為對(duì)計(jì)算機(jī)性能而言越來(lái)越具限制性的因素。因此,諸如復(fù)制和無(wú)用 信息收集等存儲(chǔ)器密集型操作變得相應(yīng)地代價(jià)高昂。高速緩沖已是對(duì)付處 理器/存儲(chǔ)器速度失配的首要方法。然而,隨著存儲(chǔ)器大小增大、應(yīng)用對(duì)象 更大且更復(fù)雜、以及應(yīng)用程序更數(shù)據(jù)密集化,高速緩存使用此常規(guī)存儲(chǔ)器 模型就變得顯著地捉襟見(jiàn)肘了。作為另一個(gè)方向,計(jì)算機(jī)硬件越來(lái)越依賴(lài)于并行執(zhí)行以實(shí)現(xiàn)性能收 益。特別地,在單個(gè)微片上實(shí)現(xiàn)多個(gè)"核"是可行的,這在允許分享存儲(chǔ) 器控制器與高速緩存的同時(shí)改善成本效率。然而,由結(jié)構(gòu)化數(shù)據(jù)引起的額 外復(fù)制操作由于數(shù)據(jù)重復(fù)問(wèn)題導(dǎo)致對(duì)高速緩存的使用效率低下。而且,諸 如引用計(jì)數(shù)更新等額外更新和高速緩存線(xiàn)中與更新的假共享,導(dǎo)致存儲(chǔ)器 和高速緩存效能性進(jìn) 一 步降低。作為最終趨勢(shì),應(yīng)用程序變得越來(lái)越大且越來(lái)越復(fù)雜,這得益于存 儲(chǔ)器的大小和處理器的性能都在提高,但卻增加了維持軟件正確性的難度, 特別是還要求持續(xù)的改進(jìn)和特征。與此同時(shí),應(yīng)用軟件采用了越來(lái)越時(shí)間攸關(guān)、任務(wù)攸關(guān)、甚至壽命攸關(guān)的功能,使應(yīng)用軟件的可靠性變得重要得 多了。針對(duì)這些和其它理由,已考慮了替代的存儲(chǔ)器體系結(jié)構(gòu)。例如,在US 4,989,137中,用戶(hù)處理器只經(jīng)由作為存儲(chǔ)器管理系統(tǒng)的一個(gè)組成部分的 綁定寄存器單元訪(fǎng)問(wèn)存儲(chǔ)器。這樣一來(lái),存儲(chǔ)器管理系統(tǒng)可對(duì)用戶(hù)處理器 隱藏物理存儲(chǔ)器組織的低級(jí)別細(xì)節(jié),改為將邏輯存儲(chǔ)器抽象呈現(xiàn)給用戶(hù)處 理器。在US 4,695,949中描述了塊結(jié)構(gòu)存儲(chǔ)器,其中為每個(gè)塊維持引用計(jì) 數(shù),從而減輕對(duì)頻繁的無(wú)用信息收集的需要。在US 5,784,699中,考慮了具有若干種標(biāo)準(zhǔn)塊大小的塊結(jié)構(gòu)存儲(chǔ)器 系統(tǒng)。存儲(chǔ)器分配請(qǐng)求被上舍入到最接近的標(biāo)準(zhǔn)塊大小。在US 5,950,231 中,考慮了使用指針棧來(lái)控制的塊結(jié)構(gòu)存儲(chǔ)器管理系統(tǒng)。在US 5,247,634 和US 5,864,867中,考慮了基于樹(shù)的使用的存儲(chǔ)器管理。然而,以上這些方法和標(biāo)準(zhǔn)馮 諾伊曼高速緩存方法都有其困難, 特別是針對(duì)結(jié)構(gòu)化的數(shù)據(jù)而言。因此,提供改進(jìn)的存儲(chǔ)器管理,尤其是提 供針對(duì)大小可變且結(jié)構(gòu)化的數(shù)據(jù)的改進(jìn)的存儲(chǔ)器管理,在本技術(shù)領(lǐng)域是一 種進(jìn)步。發(fā)明內(nèi)容根據(jù)分級(jí)式不可變內(nèi)容可尋址存儲(chǔ)器處理器(HICAMP)體系結(jié)構(gòu)提 供-一種改進(jìn)的存儲(chǔ)器管理。在HICAMP中,物理存儲(chǔ)器被組織為兩個(gè)或更 多個(gè)物理存儲(chǔ)器塊,每個(gè)物理存儲(chǔ)器塊具有固定的存儲(chǔ)容量。提供一種在任何時(shí)間點(diǎn)上哪一個(gè)物理存儲(chǔ)器塊是現(xiàn)用塊的指示。存儲(chǔ) 器控制器提供非重復(fù)寫(xiě)能力,其中將待寫(xiě)至物理存儲(chǔ)器的數(shù)據(jù)與寫(xiě)之時(shí)刻 所有現(xiàn)用物理存儲(chǔ)器塊的內(nèi)容相比較來(lái)確保在完成非重復(fù)寫(xiě)之后沒(méi)有兩個(gè) 現(xiàn)用存儲(chǔ)器塊具有相同的數(shù)據(jù)。在有重復(fù)的情況下,使用現(xiàn)有塊而非用相 同的值來(lái)創(chuàng)建另一個(gè)塊。附圖簡(jiǎn)要說(shuō)明圖1示出常規(guī)計(jì)算機(jī)存儲(chǔ)器使用的示例。圖2是根據(jù)本發(fā)明實(shí)施例的計(jì)算機(jī)系統(tǒng)的示意性框圖。圖3a-d示出根據(jù)本發(fā)明實(shí)施例的計(jì)算機(jī)存儲(chǔ)器使用的示例。 圖4示出適于結(jié)合本發(fā)明實(shí)施例使用的虛擬-物理塊ID映射(VPBIM) 的邏輯結(jié)構(gòu)的示例。圖5a-d示出對(duì)應(yīng)于圖3a-d的示例的VPBIM示例。圖6a-b示出其中同一多塊對(duì)象可用兩種不同方式在存儲(chǔ)器中表示的示例。
具體實(shí)施方式
為有助于更好地理解本發(fā)明,將首先以相對(duì)抽象、不依賴(lài)于實(shí)現(xiàn)的方 式來(lái)考慮本發(fā)明實(shí)施例的關(guān)鍵方面,然后借助說(shuō)明性示例提供一些進(jìn)一步 的實(shí)現(xiàn)細(xì)節(jié)。1)關(guān)鍵方面為簡(jiǎn)潔計(jì),宜將本發(fā)明的各實(shí)施例作為分級(jí)式不可變內(nèi)容可尋址存儲(chǔ) 器處理器(HICAMP)體系結(jié)構(gòu)的示例。HICAMP體系結(jié)構(gòu)在幾個(gè)基本方 面有別于標(biāo)準(zhǔn)馮 諾伊曼結(jié)構(gòu)體系。第一,在HICAMP中,物理存儲(chǔ)器被組織為兩個(gè)或更多個(gè)物理存儲(chǔ)器 塊,每個(gè)物理存儲(chǔ)器塊具有固定的存儲(chǔ)容量。第二,提供對(duì)于在任何時(shí)間 點(diǎn)上哪個(gè)物理存儲(chǔ)器塊是現(xiàn)用塊的指示。第三,存儲(chǔ)器控制器提供無(wú)重復(fù) 寫(xiě)能力,其中將待寫(xiě)至物理存儲(chǔ)器的數(shù)據(jù)與寫(xiě)之時(shí)刻所有現(xiàn)用物理存儲(chǔ)器 塊的內(nèi)容相比較來(lái)確保在完成無(wú)重復(fù)寫(xiě)之后沒(méi)有兩個(gè)現(xiàn)用存儲(chǔ)器塊具有相 同的數(shù)據(jù)。從該HICAMP體系結(jié)構(gòu)的這些方面得出幾個(gè)主要優(yōu)點(diǎn)。1) 因?yàn)閷?duì)存儲(chǔ)器的分配按照大小固定的物理存儲(chǔ)塊進(jìn)行,所以消除了 與存儲(chǔ)器碎片化有關(guān)的常規(guī)問(wèn)題。重復(fù)抑制使這些塊可被高效地定位和管理。2) 由于對(duì)重復(fù)的抑制,給定量的應(yīng)用數(shù)據(jù)所需的存儲(chǔ)器的量可相對(duì)于 應(yīng)用數(shù)據(jù)的大小來(lái)分析和限制。3) 因?yàn)閿?shù)據(jù)塊為現(xiàn)用時(shí)不被修改,所以在地址空間內(nèi)和地址空間之間9數(shù)據(jù)都可被安全地共享,從而存儲(chǔ)器復(fù)制得以減少。
4) 因?yàn)楫?dāng)且僅當(dāng)存儲(chǔ)器中兩個(gè)對(duì)象由同一物理塊表示時(shí)它們是等同 的,所以可以高效地實(shí)現(xiàn)其等同/非等同比較。
5) 對(duì)重復(fù)的抑制使可用物理存儲(chǔ)器得到高效使用。
6) 因?yàn)榭梢詫?duì)許多公共數(shù)據(jù)結(jié)構(gòu)執(zhí)行原子性非阻塞更新,所以并行編 程被簡(jiǎn)化并變得更高效。
在優(yōu)選的HICAMP實(shí)施例中,無(wú)重復(fù)寫(xiě)的概念被擴(kuò)展到也包括需要多 于一個(gè)物理存儲(chǔ)塊來(lái)存儲(chǔ)的數(shù)據(jù)項(xiàng)(簡(jiǎn)稱(chēng)多塊數(shù)據(jù))。這一點(diǎn)可以通過(guò)為 需要兩個(gè)或多個(gè)物理塊來(lái)存儲(chǔ)的任何數(shù)據(jù)項(xiàng)提供一個(gè)指定唯一表示的多塊 數(shù)據(jù)約定來(lái)實(shí)現(xiàn)。當(dāng)多塊數(shù)據(jù)被寫(xiě)至存儲(chǔ)器時(shí)就可實(shí)施多塊數(shù)據(jù)約定,從 而使無(wú)重復(fù)寫(xiě)確保在該組現(xiàn)用物理存儲(chǔ)器塊中不存在多塊數(shù)據(jù)的任何實(shí)例 的重復(fù)。
作為多塊無(wú)重復(fù)寫(xiě)的效果的一簡(jiǎn)單示例,考慮字符串"abcde"在其中 物理塊存儲(chǔ)容量為三個(gè)字符的系統(tǒng)中的表示。這樣的字符串可以總共由三 個(gè)塊來(lái)表示,其中塊1包含該字符串的頭部,塊2包含該字符串的尾部, 而塊3包含指向塊1和塊2的指針。沒(méi)有規(guī)定多塊唯一性的約定,該示例 字符串可以表示為("abc" , "de")或者表示為("ab" , "cde"), 其中第 -項(xiàng)是塊l的內(nèi)容,第二項(xiàng)是塊2的內(nèi)容。通過(guò)實(shí)施(或支持)這 樣的多塊唯一性約定(例如,先填頭部,或先填尾部),排除了此類(lèi)多種 表示的可能性。結(jié)果,其指針指向塊1和塊2的塊3是存儲(chǔ)器中字符串 "abcde"的唯一表示,從而對(duì)多塊重復(fù)做出抑制。
較佳地,物理存儲(chǔ)塊的每一個(gè)都具有相同的存儲(chǔ)容量,以便簡(jiǎn)化存儲(chǔ) 器管理。而且,與諸如通過(guò)在磁或光介質(zhì)上記錄來(lái)實(shí)現(xiàn)的文件系統(tǒng)等持久 性存儲(chǔ)器相反,這里的物理存儲(chǔ)器最好是易失性存儲(chǔ)器(例如,諸如動(dòng)態(tài) RAM等計(jì)算機(jī)主存)。
圖2示出一優(yōu)選實(shí)施例,其中HICAMP通過(guò)提供與物理存儲(chǔ)器202通 信的存儲(chǔ)器控制器220來(lái)實(shí)現(xiàn)。 一個(gè)或多個(gè)處理器230可以經(jīng)由存儲(chǔ)器控 制器220來(lái)訪(fǎng)問(wèn)物理存儲(chǔ)器202,該存儲(chǔ)器控制器220將HICAMP型組織 的存儲(chǔ)器模型提供給處理器。在此示例中,有三個(gè)處理器,210、 212以及214。因此,HICAMP可應(yīng)用于單處理器或多處理器環(huán)境中。關(guān)于此示例中 的存儲(chǔ)器控制器220的其它細(xì)節(jié)描述如下。
可以用硬件和/或軟件的組合來(lái)提供對(duì)哪個(gè)物理存儲(chǔ)塊是現(xiàn)用塊的指 示。此外,在實(shí)踐本發(fā)明時(shí)可采用對(duì)"現(xiàn)用塊"的各種定義。例如,如果 物理塊在整體系統(tǒng)初始化后已經(jīng)由HICAMP系統(tǒng)初始化或分配,那么可將 其視為現(xiàn)用。以此方法,無(wú)法收回先前被使用過(guò)但現(xiàn)在不在使用中的物理 存儲(chǔ)塊。由于一些計(jì)算機(jī)系統(tǒng)被設(shè)計(jì)成當(dāng)存儲(chǔ)器短缺時(shí)可以再次初始化, 對(duì)于這樣的系統(tǒng)而言這樣的對(duì)"現(xiàn)用"的相對(duì)最小指示就足夠了。
用于提供"現(xiàn)用"指示的另一種方法是為每個(gè)存儲(chǔ)塊維持一個(gè)標(biāo)志, 該標(biāo)志指示存儲(chǔ)塊是否為現(xiàn)用。這樣的標(biāo)志可根據(jù)先前描述的由HICAMP 初始化/分配的方法來(lái)設(shè)置?;蛘撸槍?duì)塊現(xiàn)用性的標(biāo)志可以在確定哪些塊 為現(xiàn)用的單獨(dú)操作中設(shè)置(例如,如在標(biāo)記和清掃式無(wú)用信息收集中所完 成)。
用于提供"現(xiàn)用"指示的又一方法是為每個(gè)物理存儲(chǔ)塊維持一引用計(jì) 數(shù),其中現(xiàn)用塊對(duì)應(yīng)的引用計(jì)數(shù)大于O,而非現(xiàn)用塊的引用計(jì)數(shù)等于O。在 某些情況下,這些引用計(jì)數(shù)可區(qū)分具有各種特定區(qū)域的引用,諸如處理器 寄存器中的引用、物理存儲(chǔ)塊中的引用、和/或虛擬-物理映射(VPBIM)中 的引用。
在一優(yōu)選實(shí)施例中,每個(gè)塊提供一組標(biāo)記,該組標(biāo)記指示塊中哪些字 段包含物理和虛擬塊引用或普通數(shù)據(jù),使這樣的塊引用可以作為引用計(jì)數(shù)、 標(biāo)記和清掃式無(wú)用信息收集或類(lèi)似的"主動(dòng)"確定方案的一部分來(lái)處理, 并且防止應(yīng)用級(jí)處理沒(méi)有HICAMP實(shí)施例的知識(shí)就產(chǎn)生塊引用。其它標(biāo)記 可以支持檢測(cè)循環(huán)引用以及提供特殊化的更新語(yǔ)義,諸如用于高爭(zhēng)用數(shù)據(jù) 塊的更新時(shí)合并。
在HICAMP的優(yōu)選實(shí)施例中,提供VPBIM來(lái)針對(duì)物理存儲(chǔ)器的一些 或所有內(nèi)容將虛擬塊ID映射至物理塊ID。通過(guò)提供這樣的映射,就可以 在限制開(kāi)銷(xiāo)的同時(shí)原子性地更新結(jié)構(gòu)化的數(shù)據(jù)的表示。例如,對(duì)象中的字 符串描述字段可被實(shí)現(xiàn)為存儲(chǔ)虛擬塊ID的一個(gè)塊中的存儲(chǔ)單元。該描述通 過(guò)使用根物理塊創(chuàng)建一個(gè)修正的字符串?dāng)?shù)據(jù)項(xiàng)和將此物理塊的標(biāo)識(shí)符存儲(chǔ)在對(duì)應(yīng)于虛擬塊ID的映射條目中得到更新。
圖3a-d示出結(jié)合虛擬和物理塊ID (分別是圖上縮寫(xiě)的VID和PID)的 HICAMP存儲(chǔ)器使用的一些示例。為了簡(jiǎn)化說(shuō)明,此示例為每個(gè)塊存儲(chǔ)單 個(gè)值。在圖3a上,指令302的執(zhí)行致使存儲(chǔ)器304的內(nèi)容如圖中所示。更 具體而言,指令302中的第一賦值使值37被存儲(chǔ)在新的物理塊(即,PID1) 中,并將VID1與PID1相關(guān)聯(lián),因?yàn)樵撡x值是到VID而不是到PID。同樣 地,指令302中的第二賦值使值125被存儲(chǔ)在新的物理塊(即,PID2)中, 并將VID2關(guān)聯(lián)于PID2。由于對(duì)應(yīng)于VID3的值是已經(jīng)存儲(chǔ)的值的重復(fù), 所以指令302中的第三賦值只是將VID3關(guān)聯(lián)于PID1。這種對(duì)重復(fù)的抑制 與圖1的常規(guī)存儲(chǔ)器模型形成鮮明對(duì)比,在圖1的常規(guī)存儲(chǔ)器模型中存儲(chǔ) 器訪(fǎng)問(wèn)是經(jīng)由PID進(jìn)行,而且重復(fù)的值被存儲(chǔ)在存儲(chǔ)器中。
在圖3b上,執(zhí)行指令306致使存儲(chǔ)器308的內(nèi)容如圖中所示。指令 306唯一有別于指令302之處在于增加了最后的使VID1具有值25的賦值。 此第四指令使值25被存儲(chǔ)在新的物理塊(即,PID3)中,并將VID1與PID3 相關(guān)聯(lián)。
在圖3c上,指令310的執(zhí)行致使存儲(chǔ)器312的內(nèi)容如圖中所示。指令 310唯一有別于指令306之處在于增加了最后的使VID3具有值125的賦值。 因?yàn)橹?25已經(jīng)在存儲(chǔ)器中,所以此第五指令只是將VID3與PID2相關(guān)聯(lián)。
在圖3d上,指令314的執(zhí)行致使存儲(chǔ)器316的內(nèi)容如圖中所示。指令 314唯一有別于指令310之處在于增加了最后的使VID4指向VID3的賦值。 此第六指令使地址VID3被存儲(chǔ)在新的物理塊PID4中,并將VID4關(guān)聯(lián)于 PID4。
此示例說(shuō)明可以通過(guò)用VID指向存儲(chǔ)器內(nèi)容在消除所有重復(fù)的物理存 儲(chǔ)的同時(shí)提供賦值語(yǔ)句和指針的普通邏輯。 一旦物理塊被創(chuàng)建,其內(nèi)容保 持不可變。在圖3a-d的示例中,字母"A"出現(xiàn)在現(xiàn)用的物理存儲(chǔ)塊之后, 而字母"F"出現(xiàn)在空閑的(即,可供分配的)存儲(chǔ)塊之后。在圖3c-d上, 物理塊PID1被標(biāo)識(shí)為空閑,因?yàn)椴淮嬖趯?duì)它的引用。
圖4示出適于實(shí)現(xiàn)VPBIM的邏輯結(jié)構(gòu)的示例。在此示例中,VPBIM 中的每個(gè)條目包括VID、對(duì)應(yīng)的PID以及對(duì)該VID的引用數(shù)。圖5a-d示出具有此結(jié)構(gòu)且分別對(duì)應(yīng)于圖3a-d中示例的VPBIM示例。由于如這些示例 中所示的那樣,同一 PID可能對(duì)應(yīng)于幾個(gè)VID , VPBIM往往是多對(duì)一 的 VID-PID映射。因此,VID的使用可被視為管理對(duì)同一物理數(shù)據(jù)塊的多個(gè) 不同引用的系統(tǒng)性方式,這是一種由于作為HICAMP的特性消除了存儲(chǔ)器 中的物理重復(fù)后所自然引起的情況。在一可選實(shí)施例中,VID不需要是 VPBIM中的顯式條目。相反,映射可以是隱含的。例如,(PID,引用計(jì) 數(shù))對(duì)的陣列可以起到VPBIM的作用,其中使陣列索引充當(dāng)VID??梢杂?與任何其它多塊數(shù)據(jù)項(xiàng)相同的方式將VPBIM存儲(chǔ)在HICAMP型組織的存 儲(chǔ)器中。
在一優(yōu)選實(shí)施例中,HICAMP無(wú)重復(fù)寫(xiě)能力是根據(jù)按內(nèi)容塊讀取 (BFBC)指令提供的,其中將塊數(shù)據(jù)作為輸入并提供塊標(biāo)識(shí)符作為輸出。 有兩種情況要考慮。如果輸入塊數(shù)據(jù)是存在于現(xiàn)用物理存儲(chǔ)塊中的數(shù)據(jù)的 重復(fù),那么由BFBC指令返回的標(biāo)識(shí)符是此現(xiàn)存的現(xiàn)用存儲(chǔ)塊的地址。
如果輸入塊數(shù)據(jù)不是存在于任何現(xiàn)用物理存儲(chǔ)塊中的數(shù)據(jù)的重復(fù),那 么由存儲(chǔ)器控制器分配新的物理數(shù)據(jù)塊,其內(nèi)容被設(shè)置為輸入塊數(shù)據(jù),而 且這個(gè)新的現(xiàn)用物理存儲(chǔ)塊的塊地址由BFBC指令返回。
通過(guò)按照BFBC指令對(duì)存儲(chǔ)器訪(fǎng)問(wèn)進(jìn)行結(jié)構(gòu)化,管理重復(fù)抑制的過(guò)程 可以由存儲(chǔ)器控制器來(lái)執(zhí)行,而且無(wú)須在應(yīng)用級(jí)分別考慮以上兩種情況。 更具體而言,由于以BFBC存儲(chǔ)器訪(fǎng)問(wèn)表達(dá)的應(yīng)用程序算法通過(guò)實(shí)現(xiàn)BFBC 抽象來(lái)處理,所以這種算法不需要去關(guān)心存儲(chǔ)器重復(fù)抑制的細(xì)節(jié)。在采用 VPBIM映射的情況下,由BFBC指令返回的塊地址可以是物理塊ID或虛 擬塊ID。通常,應(yīng)用級(jí)BFBC指令返回虛擬塊ID會(huì)更有用。
在一優(yōu)選實(shí)施例中,現(xiàn)用物理存儲(chǔ)器塊被組織成兩個(gè)或更多個(gè)有向非 循環(huán)圖(DAG)。在這樣的情況下,每個(gè)多塊數(shù)據(jù)項(xiàng)都有其自己的DAG, 以DAG是非循環(huán)性的這一條件排除了 DAG內(nèi)部的引用閉循環(huán),而且DAG 的方向性提供用于從整體上指向多塊數(shù)據(jù)項(xiàng)的明確無(wú)誤的根塊。為了排除 全局性循環(huán)引用環(huán),更傾向于不在DAG的組中包括多DAG循環(huán)引用環(huán)(例 如,任何包括這些DAG中的兩個(gè)或更多個(gè)的指針引用閉環(huán))。
實(shí)現(xiàn)HICAMP可以依靠提供物理存儲(chǔ)器內(nèi)容可尋址性的各種方法。一
13個(gè)方法是提供對(duì)物理存儲(chǔ)器中一些或所有內(nèi)容的順序讀比能力。另一個(gè)方 法是提供對(duì)物理存儲(chǔ)器中一些或所有內(nèi)容的并行讀比能力。例如,可以實(shí) 現(xiàn)順序法,其中單個(gè)比較器被安排成順序地讀取現(xiàn)用物理存儲(chǔ)塊的內(nèi)容并 將其與輸入數(shù)據(jù)相比較。類(lèi)似地,并行法可以通過(guò)提供(例如,用硬件) 分離的對(duì)應(yīng)于每個(gè)物理存儲(chǔ)塊的比較器來(lái)實(shí)現(xiàn),從而可同時(shí)執(zhí)行對(duì)現(xiàn)用塊 內(nèi)容與輸入數(shù)據(jù)的所有比較。因此,在確定是采用順序比較還是并行比較 (或某種混合方法)來(lái)提供內(nèi)容可尋址性時(shí),要考慮速度與成本之間的折 衷。
在一優(yōu)選實(shí)施例中,通過(guò)將物理存儲(chǔ)器分為N個(gè)組(bank)來(lái)提供對(duì) HICAMP的內(nèi)容可尋址性,其中N是大于1的正整數(shù)。當(dāng)數(shù)據(jù)被寫(xiě)至該存 儲(chǔ)器時(shí),向塊數(shù)據(jù)應(yīng)用一個(gè)具有N個(gè)可能的輸出的散列功能于產(chǎn)生一散列 值。散列值被用來(lái)選擇對(duì)應(yīng)的存儲(chǔ)器組,該組將根據(jù)通常的HICAMP約定 來(lái)存儲(chǔ)數(shù)據(jù)(即,在相關(guān)組中創(chuàng)建新的塊——當(dāng)且僅當(dāng)不會(huì)由此在該組中 產(chǎn)生重復(fù)時(shí))。這樣一來(lái),只要求針對(duì)內(nèi)容尋址的讀比能力一次處理一個(gè) 組,而非整個(gè)物理存儲(chǔ)器。如果每個(gè)組有M個(gè)塊并且配置M個(gè)比較器,則 可以通過(guò)這樣的方案提供快速并行比較,這可以比實(shí)現(xiàn)全塊級(jí)的并行性(即 NM個(gè)比較器)大大地降低成本。
例如,假設(shè)要根據(jù)以上方案將字符串"abc"存儲(chǔ)至存儲(chǔ)器。假定"abc" 散列到3,那么在物理存儲(chǔ)器中"abc"可以被存儲(chǔ)于現(xiàn)用物理存儲(chǔ)塊的唯 一所在在組3中。從而,為了防止重復(fù),只檢査組3中的塊就足夠了。
圖6a-b示出多塊數(shù)據(jù)對(duì)象的簡(jiǎn)單示例。圖6a示出在本發(fā)明的一個(gè)實(shí) 施例中通過(guò)指令602將三元素列[1,2,3]賦值到VID1的結(jié)果。所產(chǎn)生的存 儲(chǔ)器604的內(nèi)容可以理解如下。因?yàn)樵诖耸纠袥](méi)有元素是重復(fù)的,所以 每個(gè)列元素得到其自己的物理塊,諸虛擬IDVID3、 VID4和VID5對(duì)應(yīng)于 陣列元素。該列的根在由VID1引用的塊中,其內(nèi)容是指向該列第一元素的 指針(即,VID3)和指向該列其它部分(即,指向列[2,3])的指針。在 VID2中,有指向列[2, 3]第一元素的指針(即,VID4)和指向列[2, 3]第二 元素的指針(即,VID5)。
圖6b的示例與圖6a的示例相似。圖6b中存儲(chǔ)器內(nèi)容 與圖6a中存儲(chǔ)器內(nèi)容604之間的差別僅存在于VID1與VID2的塊引用的內(nèi)容。更具 體而言,在圖6a的示例中,列是從其末尾逐步建立,而在圖6b的示例中 是從其開(kāi)頭逐步建立。為了允許對(duì)多塊重復(fù)的消除,規(guī)定多塊唯一性的約 定(如上所述)為任何給定系統(tǒng)所支持的所有多塊數(shù)據(jù)結(jié)構(gòu)指定唯一的組 織是重要的。有了這樣的約定,同一對(duì)象將不可能具有兩個(gè)不同的存儲(chǔ)器 表示,如圖6a-b所示。
2)實(shí)現(xiàn)細(xì)節(jié)
塊組織
在一示例性實(shí)施例中,HICAMP物理存儲(chǔ)塊可以被結(jié)構(gòu)化如下 refCountl tags | inLevel| exLevel | data。
refCount (引用計(jì)數(shù))字段包含對(duì)此塊的完全引用的次數(shù)。refCount 為零指示該塊是空閑的且可供再使用。
Tags (標(biāo)記)字段對(duì)應(yīng)于相關(guān)聯(lián)數(shù)據(jù)字段的每個(gè)子字段分別指示 i ) 00 —data (數(shù)據(jù))。
ii) 01—intraRef (內(nèi)部引用)一包含指向多塊樹(shù)結(jié)構(gòu)中在此塊內(nèi)部并從 屬于此塊的塊的blockld (塊標(biāo)識(shí))。即,子樹(shù)引用,使此塊引用計(jì)數(shù)加一。 如果任何子字段是intraRef,那么要求塊中所有的子字段都是intraRef。
iii) 11 一extraRef (外引用)一包含指向另一個(gè)塊的blockld, extraRef使該 其它塊引用計(jì)數(shù)加一。iv)10 — backRef (反向引用) 一包含指向另一對(duì)象的 blockld,但不表示該其它對(duì)象引用計(jì)數(shù)加一。extraRef值和backRef值是虛擬 bloddd。 tags字段可以包括單個(gè)"合并一更新"標(biāo)志,該"合并一更新"標(biāo)志指示 該塊應(yīng)該于更新時(shí)與當(dāng)前塊內(nèi)容合并,而非替代這些內(nèi)容。inLevel (內(nèi)級(jí))字 段指示從此節(jié)點(diǎn)經(jīng)由intmRef到不包含intraRef的節(jié)點(diǎn)的最大距離。例如,在 大小可變的對(duì)象的典型分級(jí)(樹(shù)或DAG)表示中,這個(gè)級(jí)是樹(shù)或DAG中此節(jié) 點(diǎn)的高度。exLevel (外級(jí))字段的要求是至少比如下的任何節(jié)點(diǎn)的exLevel大 1:它擁有到該節(jié)點(diǎn)的intraRefl,不論是直接地引用還是間接地通過(guò)它可以經(jīng) 由intraRef能夠到達(dá)的節(jié)點(diǎn)而引用。例如,如果此節(jié)點(diǎn)是表示多塊對(duì)象的樹(shù)的 根,那么其exLevel大于此對(duì)象對(duì)其擁有extraRef (相當(dāng)于常規(guī)編程中的智能 指針)的所有節(jié)點(diǎn)的exLevel。將此限定推行于exLevel是一種確保在HICAMP
15存儲(chǔ)器組織中沒(méi)有有害的循環(huán)引用環(huán)的方式。 分析
為了評(píng)估HICAMP對(duì)于各種情況的適用性,限制添加至存儲(chǔ)器系統(tǒng)和控 制器的字段的大小是有幫助的,討論如下。
不同于常規(guī)存儲(chǔ)器系統(tǒng),在本發(fā)明系統(tǒng)中對(duì)給定塊的引用次數(shù)因每個(gè)內(nèi)容 至多存在爭(zhēng)一拷貝而受到限制。特別地,最差情況是所有DAG具有一個(gè)塊的
單個(gè)共用前綴,因此此塊具有最大引用次數(shù)。每個(gè)DAG必須具有一內(nèi)部節(jié)點(diǎn) 塊來(lái)引用此共用塊,另外它必須具有至少一個(gè)唯一的塊來(lái)確保每個(gè)根塊是不同 的。而且,每個(gè)內(nèi)部節(jié)點(diǎn)需要由另一內(nèi)部節(jié)點(diǎn)引用, 一直到某個(gè)根節(jié)點(diǎn)。那么, 假設(shè)創(chuàng)建最小附加唯一引用DAG需要2個(gè)塊且每個(gè)最小DAG引用這些根節(jié) 點(diǎn)需要另一個(gè)塊內(nèi)節(jié)點(diǎn),則使用64-字節(jié)的塊和太字節(jié)(240)的存儲(chǔ)器(因此 233塊)時(shí),最差情況下的引用次數(shù)被限定至232個(gè)這樣的根節(jié)點(diǎn),(即,32-比特的refCount是足夠的)。在此結(jié)構(gòu)中,作為選擇,葉子是共用塊和唯一塊 的序列,其中另一N用作整個(gè)DAG中的內(nèi)節(jié)點(diǎn)。
通過(guò)為每個(gè)塊存儲(chǔ)inLevel和exLevel避免了引用循環(huán)。inLevel字段需要 足夠大以容納最大的intraRef結(jié)構(gòu)化對(duì)象。比特?cái)?shù)是1oglogN/B,其中N是最 大的單個(gè)對(duì)象,B是每個(gè)塊的字節(jié)數(shù)。因此,6比特將容納大至B+2"的對(duì)象。 exLevel需要容納extraRef的深度,這個(gè)深度通常遠(yuǎn)小于100。例如,指向具有 子對(duì)象的對(duì)象的目錄基本上處于exLevel (外級(jí))3。因此,8比特似對(duì)于這一 字段就非常適合。
在一實(shí)施例中,塊是20字節(jié)的數(shù)據(jù)、4字節(jié)的refCount (引用計(jì)數(shù))、2 字節(jié)的level (級(jí))、l字節(jié)的tag (標(biāo)記),招致近25%的空間開(kāi)銷(xiāo)。較大的 塊允許每一塊存儲(chǔ)4個(gè)blockld,支持四叉樹(shù)作為分級(jí)數(shù)據(jù)表示。另外的實(shí)施 例可支持更大的塊大小和多重塊大小,以進(jìn)一步減少開(kāi)銷(xiāo)。
存儲(chǔ)器控制器
在一示例中,圖2的存儲(chǔ)器控制器220包括3個(gè)主要組件。blockld/偏移 量讀取器204響應(yīng)于處理器請(qǐng)求來(lái)定位并返回一個(gè)存儲(chǔ)器存儲(chǔ)中對(duì)應(yīng)于在分級(jí) 塊結(jié)構(gòu)內(nèi)的指定偏移量的其根位于blockld所標(biāo)識(shí)的塊的數(shù)據(jù)塊。VPBIM206 在虛擬塊ID (vBlockld或VID)與物理塊ID (pBlockld或PID)之間轉(zhuǎn)換,而且通過(guò)為PID維持引用計(jì)數(shù)來(lái)管理這些映射的分配和釋放。塊數(shù)據(jù)目錄208
向塊實(shí)現(xiàn)指定的數(shù)據(jù)和標(biāo)記規(guī)范(例如,如上所述),如果這樣的塊尚不存在 則分配這樣的塊并將其初始化。已知有各種技術(shù)可實(shí)現(xiàn)此等映射。在一實(shí)施例
中,二元內(nèi)容可尋址存儲(chǔ)器可用作數(shù)據(jù)存儲(chǔ)。在此情況下,refCount和level (級(jí))可被分別存儲(chǔ)在較廉價(jià)的DRAM中。在另一實(shí)施例中,映射可使用可 供選擇的査找數(shù)據(jù)結(jié)構(gòu),諸如前面所述的基于樹(shù)或哈希表的實(shí)現(xiàn)。
在一示例性實(shí)施例中,存儲(chǔ)器控制器管理被組織成B字節(jié)的塊的存儲(chǔ)器 DRAM組,其中B的期望值在16至64字節(jié)的范圍內(nèi),但就每個(gè)系統(tǒng)而言(至 少在系統(tǒng)運(yùn)行期間)是固定的。它還具有一個(gè)32比特引用計(jì)數(shù)字段的陣列, 每個(gè)塊一個(gè)。 一種實(shí)現(xiàn)是一個(gè)DRAM陣列,DRAM陣列中對(duì)應(yīng)于系統(tǒng)中的 每個(gè)物理塊都有一個(gè)條目。存儲(chǔ)器控制器提供以下操作,在給定索引處使 引用計(jì)數(shù)字段原子性地加l和減l,當(dāng)引用計(jì)數(shù)減少至零時(shí),釋放這個(gè)塊, 如下所述。
塊分配可以通過(guò)使用空閑塊的引用計(jì)數(shù)字段將其鏈入塊空閑列表中來(lái) 控制。即,空閑存儲(chǔ)塊的引用計(jì)數(shù)字段包含空閑列表中的下一空閑存儲(chǔ)塊 的索引。系統(tǒng)一初始化,所有空閑塊立即在此空閑列表上排隊(duì)。當(dāng)需要新 的塊時(shí),存儲(chǔ)器控制器使空閑塊從空閑列表的頭部出列,而且該空閑塊的 引用計(jì)數(shù)被置位到l,對(duì)應(yīng)于新的引用。當(dāng)塊的引用計(jì)數(shù)變?yōu)榱銜r(shí),存儲(chǔ)器 控制器將該塊添加在空閑列表的頭部。相應(yīng)地,可將壞的存儲(chǔ)塊從空閑列 表中移除,因此不分配它們,這與用在頁(yè)級(jí)的常規(guī)技術(shù)相似,但粒度更細(xì)。 通過(guò)維持空閑列表尾指針,釋放的塊可被添加到該空閑列表的末端,從而 它們?cè)诒M可能長(zhǎng)的時(shí)間不被使用。當(dāng)通過(guò)諸如在存儲(chǔ)器芯片的整個(gè)使用壽 命中支持有限次的寫(xiě)操作的閃存等技術(shù)來(lái)實(shí)現(xiàn)存儲(chǔ)器時(shí),此可選的改良提 供了一種塊間"磨損均勻化"的形式。 .
--種可行的做法是將一額外比特與引用計(jì)數(shù)機(jī)制相關(guān)聯(lián)來(lái)指示其以此 形式用作空閑的"下一"字段,以便避免諸如對(duì)空閑塊的錯(cuò)誤引用等錯(cuò)誤 行為。
以此方法,引用計(jì)數(shù)字段需要足夠大以便存儲(chǔ)blockld?;蛘?,可以有 K個(gè)空閑列表,從而使第i個(gè)空閑列表中的所有塊在其低位比特中有i,這樣就不需要存儲(chǔ)blockld了。下面將對(duì)在K個(gè)空閑列表間的塊進(jìn)行分區(qū)的實(shí)用程 序作為實(shí)現(xiàn)內(nèi)容可尋址査找或按內(nèi)容塊讀取(BFBC)的一部分來(lái)進(jìn)行進(jìn)一 步描述。
按物理塊ID的塊讀取以與在常規(guī)存儲(chǔ)器中一樣的方式執(zhí)行。存儲(chǔ)器控 制器將blockld解碼到一DRAM組中,亦即此組中的行/列,發(fā)出對(duì)此塊的讀 取并返回?cái)?shù)據(jù)。更非同一般的方面是支持按內(nèi)容塊讀取(BFBC),如下所 述。
在理想的或邏輯的環(huán)境中,主存被實(shí)現(xiàn)為二元的內(nèi)容可尋址存儲(chǔ)器 (CAM),其寬度對(duì)應(yīng)于塊大小,不含引用計(jì)數(shù)字段。因此,按內(nèi)容塊讀 取(BFBC)存儲(chǔ)器控制器操作將塊數(shù)據(jù)傳遞給CAM并且如果塊或"行"ID 存在則將其接收回,否則接收回不存在指示。在后一情況下,按內(nèi)容塊讀 取(BFBC)存儲(chǔ)器控制器操作如上所述分配塊并向塊寫(xiě)入相關(guān)數(shù)據(jù)?;?在整個(gè)存儲(chǔ)器系統(tǒng)中的數(shù)據(jù)唯一性,即不會(huì)存在兩個(gè)命中,存儲(chǔ)器可被分 成多個(gè)組,其中在每個(gè)組中并行執(zhí)行查找。通過(guò)把比較邏輯嵌入各DRAM 芯片中,可使此方法具有可行性。然而,當(dāng)下的二元的CAM存儲(chǔ)器相對(duì)于 常規(guī)DRAM而言還是非常昂貴的且功耗大。
允許使用常規(guī)DRAM的實(shí)現(xiàn)降低了比較器的數(shù)量,組中的每K行只有一 個(gè)比較器,而非每行有一個(gè)比較器。塊內(nèi)容隨后被散列為值0至K-1,例如, h,而且要求每個(gè)比較器將數(shù)據(jù)與其第h相關(guān)聯(lián)行相比較。如果該塊匹配, 則比較器報(bào)告命中和塊號(hào)碼。為了使其正確工作,在K個(gè)空閑列表中維持空 閑塊。若散列為h的數(shù)據(jù)未命中,立即由第h空閑列表分配一個(gè)塊來(lái)存儲(chǔ)該 數(shù)據(jù)。
使用以上方法,存儲(chǔ)器控制器可以包含C個(gè)比較器并訪(fǎng)問(wèn)C個(gè)獨(dú)立組中 的存儲(chǔ)器,每個(gè)組都通過(guò)常規(guī)DRAM芯片來(lái)實(shí)現(xiàn)。存儲(chǔ)器控制器接著執(zhí)行 并行的存儲(chǔ)器讀取和比較,以及未命中時(shí)塊的分配。用適當(dāng)?shù)纳⒘泄δ埽?耗盡一空閑列表應(yīng)該不可能比耗盡所有空閑列表提前很多。反言之,空閑 列表的分隔應(yīng)該不顯著減小存儲(chǔ)器的有效大小。如前所述,K個(gè)空閑列表可 以被用來(lái)減少當(dāng)它用作樹(shù)列表中的"下一"鏈接時(shí)需要存儲(chǔ)在引用計(jì)數(shù)字 段中的比特?cái)?shù)。
18K的大小和比較器的數(shù)量可以就HICAMP的特定實(shí)現(xiàn)具體而定,對(duì)于軟 件是透明的。它可以取決于存儲(chǔ)器控制器上可行的I/0引腳的數(shù)量。而且, 在某些情況下,每次BFBC請(qǐng)求可以為每個(gè)DRAM的組發(fā)出多個(gè)讀取(read) 的,通過(guò)每一次BFBC操作多次使用比較器而有效增加比較器的數(shù)量。
VPBIM機(jī)制
虛擬-物理blockld映射(VPBIM)可以被實(shí)現(xiàn)成由虛擬塊ID (vBlockld) 做索引的存儲(chǔ)器陣列。每個(gè)條目具有字段 [pBlockId|refCount) J
使用pBlockld (物理塊ID)字段將空閑條目鏈接在一起,與針對(duì)pBlock (物理塊)所描述的方案相似。由于blockld對(duì)應(yīng)40比特而且每個(gè)引用計(jì)數(shù) 32比特,每個(gè)條目是9字節(jié)。存儲(chǔ)器控制器被配制成支持相對(duì)于pBlock足夠 多的條目,因此VPBIM條目不是限制性的資源。假定比率是每4個(gè)字的存儲(chǔ) 器1個(gè)指針、每個(gè)塊4個(gè)字的數(shù)據(jù),則存儲(chǔ)器控制器可以每個(gè)塊提供一個(gè) VPBIM,因此pBlockld字段對(duì)于空閑列表而言足夠大。理想的情況是,存 儲(chǔ)器控制器可被配置來(lái)支持不同大小的VPBIM。
對(duì)于VPBIM,存儲(chǔ)器控制器支持以下操作
a) 分配VPBIM條目并使用給定的pBlockld和引用計(jì)數(shù)l來(lái)將其初始化, 使相關(guān)聯(lián)的pBlockld引用計(jì)數(shù)加l。這只是包括使空閑VPBIM條目出列并將
其初始化。
b) 返回對(duì)應(yīng)于給定vBlockld的pBlockld。這就是用vBlockld做VPBIM 陣列的索引并返回該條目中的pBlockld。
c) 使給定的vBlockld引用計(jì)數(shù)加l。這就是用vBlockld做VPBIM陣列的
索引并使那個(gè)特定區(qū)域處的引用計(jì)數(shù)加一。
d) 使給定的vBlockld引用計(jì)數(shù)減l,如果引用計(jì)數(shù)為零則釋放該條目, 使pBlockld減1并將此VPBIM條目添加至空閑列表。
以上存儲(chǔ)器控制器操作可以使用固件和用于諸如分配等復(fù)雜操作的內(nèi) 部微控制器來(lái)實(shí)現(xiàn)。簡(jiǎn)單的性能攸關(guān)性操作可以使用硬連線(xiàn)邏輯。存儲(chǔ)器 控制器性能受DRAM性能限制,如同常規(guī)體系結(jié)構(gòu)一樣。因此,HICAMP 處理性能高度取決于在處理器單元級(jí)上對(duì)高速緩存的有效使用,如下所述。高速緩存
HICAMP處理器單元是基于實(shí)現(xiàn)常規(guī)的寄存器到寄存器算法的、邏輯 的等指令和存儲(chǔ)器寄存器負(fù)載操作的CPU塊,但是被進(jìn)一步擴(kuò)充以用于與 新穎的HICAMP存儲(chǔ)器系統(tǒng)接口的特殊化操作。如常規(guī)體系結(jié)構(gòu)所充分證 明,此處理器單元包括以時(shí)間和空間局部性提供所訪(fǎng)問(wèn)的數(shù)據(jù)的高效訪(fǎng)問(wèn)。 對(duì)于HICAMP的重大性能挑戰(zhàn)是提供能對(duì)常規(guī)處理器單元有競(jìng)爭(zhēng)力的存儲(chǔ) 器高速訪(fǎng)問(wèn)。對(duì)于后者而言, 一個(gè)關(guān)鍵方面是有效的高速緩存。
HICAMP處理器高速緩存被結(jié)構(gòu)化為其大小與存儲(chǔ)塊大小兼容,通常 與塊的大小相匹配的高速緩存線(xiàn)的集合,這與常規(guī)處理器高速緩存一樣。 同樣地,HICAMP處理器高速緩存包括常規(guī)的高速緩存目錄,將blockld映 射于高速緩存線(xiàn),可能賦予某些合理的集合結(jié)合性,比如4或8。此高速緩 存機(jī)制可以用HICAMP數(shù)據(jù)-blockld映射,即內(nèi)容可尋址性來(lái)擴(kuò)充。此映射 的實(shí)現(xiàn)與存儲(chǔ)器控制器的BFBC操作相似,但是是應(yīng)用于高速緩存中的數(shù) 據(jù)。高速緩存中的塊也組成對(duì)存儲(chǔ)器控制器的引用。當(dāng)把塊從高速緩存中 刪除時(shí),其引用計(jì)數(shù)在存儲(chǔ)器控制器中減l (因此替換必須跳過(guò)寄存器所引 用的任何塊)。
高速緩存支持如果給定的物理blockld存在則檢索對(duì)應(yīng)于它的數(shù)據(jù)塊的 操作。高速緩存還支持如果給定塊的數(shù)據(jù)的pBlockld存在則將其返回,否則 此映射即依賴(lài)于存儲(chǔ)器控制器。高速緩存獨(dú)立于要被比較的數(shù)據(jù)的塊來(lái)存 儲(chǔ)其物理blockld。這是個(gè)對(duì)應(yīng)于pBlockld的寬度的單獨(dú)的組,C個(gè)各有R行 的存儲(chǔ)器組具有I^C個(gè)條目,即每個(gè)高速緩存線(xiàn)一個(gè)條目。只要塊-pBlockld 映射得到支持,這就可以與支持pBlockld查找的高速緩存目錄相結(jié)合。
在未命中的情況下,如通過(guò)高速緩存中的額外比特所指派,高速緩存 還支持在稱(chēng)為"開(kāi)"的瞬態(tài)下的塊分配。這樣可以使塊被增量寫(xiě)入高速緩 存中,然后在完成時(shí)"被提交"到存儲(chǔ)器,只在那個(gè)時(shí)刻方確定對(duì)應(yīng)于塊 數(shù)據(jù)的系統(tǒng)pBlockld。特別地,當(dāng)塊的pBlockld從其初始分配寄存器中被移 走時(shí)或當(dāng)塊被存儲(chǔ)進(jìn)存儲(chǔ)器時(shí),或者當(dāng)塊正在從高速緩存中被移除時(shí),該 塊被提交向存儲(chǔ)器。該提交需要為數(shù)據(jù)確定系統(tǒng)指派的pBlockld,而且可能 要將線(xiàn)移到該數(shù)據(jù)散列至其上的行。提交有可能確定具有此數(shù)據(jù)的塊已經(jīng)存在于該高速緩存中,導(dǎo)致原始的塊被釋放,在片段中由現(xiàn)存塊和高速緩 存線(xiàn)代替。
高速緩存支持"打開(kāi)"新的或現(xiàn)存的高速緩存線(xiàn)以供寫(xiě)入。如果是新 的,則新的線(xiàn)被分配,標(biāo)記為打開(kāi)。如果是現(xiàn)存的而且該線(xiàn)具有另外的引 用,則數(shù)據(jù)被復(fù)制到新的高速緩存線(xiàn)上而且此新的高速緩存線(xiàn)接著被標(biāo)記 為"打開(kāi)"。提交高速緩存線(xiàn)將其對(duì)修改關(guān)閉,并如上基于內(nèi)容確定其
LI —KTJ
高速緩存在任何給定的時(shí)間永遠(yuǎn)只包含數(shù)據(jù)塊的至多一個(gè)拷貝這一事 實(shí)超越常規(guī)的處理器高速緩存改善了高速緩存的利用。有各種軟件技術(shù)預(yù) 計(jì)都會(huì)提高高速緩存中的共享,比如將數(shù)據(jù)和代碼在塊邊界上對(duì)準(zhǔn)和標(biāo)準(zhǔn) 化的指令序列的使用。
存儲(chǔ)器操作
處理器按照vBlockld和偏移量來(lái)訪(fǎng)問(wèn)數(shù)據(jù)。例如,程序的常規(guī)代碼段可 以原狀引用,因此程序計(jì)數(shù)器是由blockld指示的一個(gè)代碼段中的偏移量。硬 件遍歷對(duì)象的分級(jí)結(jié)構(gòu)來(lái)定位指定偏移量處的數(shù)據(jù)并將該數(shù)據(jù)返回,或者如果 不存在則指示存儲(chǔ)器異常。當(dāng)數(shù)據(jù)被返回時(shí),即被加載到處理器寄存器中,該 處理器寄存器保留指示數(shù)據(jù)是否是blockld的標(biāo)記,而如果是blockld則保留其 引用類(lèi)型。因?yàn)橛布檎以趇ntraRefblocklds中繼續(xù),所以響應(yīng)于訪(fǎng)問(wèn)而返回 的數(shù)據(jù)中的blockld是或者extraRef或者是backRef,即它實(shí)際上是應(yīng)用級(jí)的指 針或引用。
數(shù)據(jù)讀取可以在硬件中設(shè)置為索引加載操作,指定blockld和偏移量,返 回指定的特定區(qū)域處的數(shù)據(jù)或blockld,或者拋出意外/中斷。此操作沿樹(shù)向下 遞歸,如果指定的偏移量處的數(shù)據(jù)存在則將其返回,否則扔出指示訪(fǎng)問(wèn)失敗的異常。
在一實(shí)施例中,處理器支持一個(gè)或多個(gè)迭代器寄存器,每個(gè)迭代器寄存器 保持通過(guò)多塊數(shù)據(jù)DAG向當(dāng)前存儲(chǔ)器特定區(qū)域有效地映射和向下一特定區(qū)域 有效地加1所需的狀態(tài)。讀和寫(xiě)訪(fǎng)問(wèn)由通過(guò)迭代器寄存器的非直接讀和寫(xiě)替代, 這與常規(guī)計(jì)算機(jī)處理器中地址寄存器的使用相似。
在一優(yōu)選實(shí)施例中,硬件按內(nèi)容塊讀取操作采用指定所需數(shù)據(jù)和塊的標(biāo)記m 的參數(shù)并將該塊的虛擬blockld返回。如果BFBC參數(shù)指定blockld,則參數(shù)只 可以從已經(jīng)保存這些blockld的寄存器中產(chǎn)生。當(dāng)塊的blockld在使用BFBC操 作的新的塊中被指定時(shí),該塊的引用計(jì)數(shù)也加1。
讀取包含blockld的現(xiàn)存塊以及BFBC是處理器可使blockld出現(xiàn)在寄存 器中的唯一方式。Blockld不能以另外的方式通過(guò)計(jì)算產(chǎn)生。因此,硬件系統(tǒng) 可以維持每個(gè)塊的精確引用計(jì)數(shù),而一個(gè)進(jìn)程只可以訪(fǎng)問(wèn)它已經(jīng)接收到了其 blockld的對(duì)象,或者是通過(guò)有效地指定其內(nèi)容或者是被(直接地或間接地) 傳遞以blockld。
在一實(shí)施例中,為了說(shuō)明基本操作,HICAMP程序以將字符串的字符生 成到塊寄存器中并隨后進(jìn)行BFBC操作獲取包含那些字符的塊的blockld的方 式來(lái)創(chuàng)建該字符串,該字符串末端用零來(lái)填充。如果字符串的長(zhǎng)度大于可以納 入塊數(shù)據(jù)部分的字符個(gè)數(shù)B,那么程序?yàn)樽址械拿緽個(gè)字符創(chuàng)建一個(gè)塊, 并且通過(guò)使用獲取包含對(duì)應(yīng)于該字符串的前綴和后綴的blocldds的塊的BFBC 操作來(lái)有效地遞歸級(jí)聯(lián)這些塊??梢砸灶?lèi)似的方式來(lái)例示大于單個(gè)塊的數(shù)據(jù)大 小的任何連續(xù)數(shù)據(jù)對(duì)象,例如,陣列。
在一實(shí)施例中,比塊大的對(duì)象可以實(shí)現(xiàn)為具有根節(jié)點(diǎn)的二叉樹(shù),根節(jié)點(diǎn)包 含用于前綴樹(shù)的blockld和用于后綴樹(shù)的blockld??梢员A鬮lockld 0來(lái)表示數(shù) 據(jù)為0。在另一實(shí)施例中,樹(shù)可以是四叉樹(shù),每個(gè)內(nèi)節(jié)點(diǎn)具有多達(dá)4個(gè)子節(jié)點(diǎn)。
我們提議參考將狀態(tài)的邏輯連續(xù)部分表示為一個(gè)對(duì)象的塊樹(shù),無(wú)論是單個(gè)塊或 是非平凡樹(shù)。
對(duì)象具有了針對(duì)另-一對(duì)象的根節(jié)點(diǎn)的extraRef即可有效地包含對(duì)另一對(duì) 象的指針,被存儲(chǔ)為一個(gè)虛擬blockld,由VPBIM映射到物理blockld。因此, 可以通過(guò)原子性地更新VPBIM使虛擬blockld映射于另一個(gè)對(duì)象的物理 blockld,對(duì)象就變成指向該新的對(duì)象了。在一實(shí)施例中,比較并交換操作支持 此原子更新,條件是當(dāng)前映射包含指定的物理blockld。因此,基本更新可以 通過(guò)以下操作來(lái)獲取創(chuàng)建即將被更新的對(duì)象的"虛擬"復(fù)制(實(shí)際上只是對(duì)原 始對(duì)象的另一物理blockld引用),修改此復(fù)制,從而向新的對(duì)象提供新的物 理blockld,并且隨后如果對(duì)象自虛擬復(fù)制以來(lái)沒(méi)有改變則自動(dòng)更新VPBIM映 射以便映射到新的物理blockld,否則異常中斷更新。接著軟件可以按照使用無(wú)鎖定編程的常見(jiàn)模式來(lái)重試該操作。
當(dāng)塊被創(chuàng)建得具有到vBlockld的新引用時(shí),對(duì)應(yīng)的vBlockld上的引用計(jì) 數(shù)加一。同樣地,當(dāng)包含vBlockld的塊被釋放時(shí),對(duì)應(yīng)的vBlockld上的引用
計(jì)數(shù)減-,當(dāng)該引用計(jì)數(shù)變?yōu)榱銜r(shí)實(shí)際上將它釋放并移除它對(duì)對(duì)應(yīng)的物理 blockld的引用。通俗而言,VPBIM為HICAMP中的"智能指針"等效物保持引 用計(jì)數(shù),艮卩extraRefs。
要求I/0經(jīng)歷以上機(jī)制。g卩,不存在到存儲(chǔ)器的直接寫(xiě)。每個(gè)DMA I/O 設(shè)備只請(qǐng)求具有給定數(shù)據(jù)的塊,建立如諸如包緩沖器或磁盤(pán)存儲(chǔ)塊等對(duì)象,如 上所述。這消除了預(yù)分配I/0緩沖器的需要。如果需要,只需限定接收的量。
-般,與連網(wǎng)相關(guān)聯(lián)的復(fù)制在很大程度上得以消除,尤其是在網(wǎng)絡(luò)有效負(fù)載起 始于塊邊界的情況下。
已經(jīng)根據(jù)幾個(gè)示例性實(shí)施例描述了本發(fā)明,所述示例性實(shí)施例旨在在 所有方面都起說(shuō)明性作用而非限制作用。因此,本發(fā)明可接受用硬件和/或 軟件的具體實(shí)現(xiàn)中的多種變化,本技術(shù)領(lǐng)域中具有普通技能的人員可以從
這里所包含的描述中得出此結(jié)論。 一變化涉及其中HICAMP被實(shí)現(xiàn)為通過(guò) 單個(gè)邏輯存儲(chǔ)器控制器操作的多個(gè)處理器的實(shí)施例,如圖2所示。本發(fā)明 還可以被實(shí)現(xiàn)得具有多個(gè)存儲(chǔ)器控制器和處理器芯片,通過(guò)在分配塊和更 新到VPBIM之后立即在不同單元之間進(jìn)行適當(dāng)?shù)耐絹?lái)實(shí)現(xiàn)。在另一變化 中,盡管本發(fā)明是針對(duì)通用計(jì)算機(jī)而描述的,但也可以應(yīng)用于網(wǎng)絡(luò)包交換, 允許帶有重復(fù)抑制的單元/塊分配,提供無(wú)對(duì)多播的專(zhuān)門(mén)優(yōu)化的內(nèi)容共享。 本發(fā)明還可應(yīng)用于具有存儲(chǔ)器系統(tǒng)的其它設(shè)備。在又一變化中,歸于硬件 的機(jī)制可以用微碼或受保護(hù)的軟件或者甚至是在可靠性上有某些損失的未 受保護(hù)的機(jī)制來(lái)替代實(shí)現(xiàn)。所有這些變化和其它變化被認(rèn)為在本發(fā)明的范 圍和要旨之內(nèi)。
2權(quán)利要求
1.一種計(jì)算機(jī)系統(tǒng),包括包括兩個(gè)或多個(gè)物理存儲(chǔ)塊的內(nèi)容可尋址物理存儲(chǔ)器,每個(gè)所述物理存儲(chǔ)塊具有固定的存儲(chǔ)容量,其中對(duì)哪個(gè)所述物理存儲(chǔ)塊是現(xiàn)用物理存儲(chǔ)塊的指示被提供;以及提供無(wú)重復(fù)寫(xiě)能力的存儲(chǔ)器控制器,其中將即將寫(xiě)至所述物理存儲(chǔ)器的數(shù)據(jù)與寫(xiě)時(shí)刻的所有現(xiàn)用物理存儲(chǔ)塊的內(nèi)容相比來(lái)確保在完成無(wú)重復(fù)寫(xiě)之后沒(méi)有兩個(gè)所述現(xiàn)用物理存儲(chǔ)塊具有相同的數(shù)據(jù)。
2. 如權(quán)利要求l所述的系統(tǒng),其特征在于,所述存儲(chǔ)器控制器提供多 塊非重復(fù)寫(xiě)能力,該多塊非重復(fù)寫(xiě)能力包括提供為需要兩個(gè)或多個(gè)所述物理存儲(chǔ)塊來(lái)存儲(chǔ)的任何數(shù)據(jù)項(xiàng)指定唯一 表示的多塊數(shù)據(jù)約定;當(dāng)所述數(shù)據(jù)項(xiàng)被寫(xiě)至所述物理存儲(chǔ)器時(shí)支持所述多塊數(shù)據(jù)約定,由此 所述無(wú)重復(fù)寫(xiě)能力可以被擴(kuò)展來(lái)確保沒(méi)有任何多塊數(shù)據(jù)實(shí)例的重復(fù)存在于 所述現(xiàn)用物理存儲(chǔ)塊中。
3. 如權(quán)利要求l所述的系統(tǒng),其特征在于,每個(gè)所述物理存儲(chǔ)塊具有 相同的存儲(chǔ)容量。
4. 如權(quán)利要求1所述的系統(tǒng),其特征在于,還包括一個(gè)或多個(gè)處理器, 所述處理器與所述存儲(chǔ)器控制器通信且能夠只經(jīng)由所述無(wú)重復(fù)寫(xiě)能力向所 述物理存儲(chǔ)器寫(xiě)。
5. 如權(quán)利要求l所述的系統(tǒng),其特征在于,所述物理存儲(chǔ)器是易失性的。
6. —種計(jì)算機(jī)存儲(chǔ)器管理的方法,包括提供包括兩個(gè)或多個(gè)物理存儲(chǔ)塊的內(nèi)容可尋址物理存儲(chǔ)器,每個(gè)所述物理存儲(chǔ)塊具有固定的存儲(chǔ)容量;提供對(duì)哪個(gè)所述物理存儲(chǔ)塊是現(xiàn)用物理存儲(chǔ)塊的指示;以及 提供無(wú)重復(fù)寫(xiě)能力,其中將即將寫(xiě)入物理存儲(chǔ)器中的數(shù)據(jù)與寫(xiě)時(shí)刻的所有現(xiàn)用物理存儲(chǔ)塊的內(nèi)容相比來(lái)確保在完成無(wú)重復(fù)寫(xiě)之后沒(méi)有兩個(gè)所述現(xiàn)用物理存儲(chǔ)塊具有相同的數(shù)據(jù)。
7. 如權(quán)利要求6所述的方法,其特征在于,還包括提供為需要兩個(gè)或多個(gè)所述物理存儲(chǔ)塊來(lái)存儲(chǔ)的任何數(shù)據(jù)項(xiàng)指定唯一 表示的多塊數(shù)據(jù)約定。當(dāng)所述數(shù)據(jù)項(xiàng)被寫(xiě)至所述物理存儲(chǔ)器時(shí)支持所述多塊數(shù)據(jù)約定,由此 所述無(wú)重復(fù)寫(xiě)能力可以被擴(kuò)展來(lái)確保沒(méi)有任何多塊數(shù)據(jù)實(shí)例的重復(fù)存在于 所述現(xiàn)用物理存儲(chǔ)塊中。
8. 如權(quán)利要求6所述的方法,其特征在于,所述提供對(duì)哪個(gè)所述物理 存儲(chǔ)塊是現(xiàn)用物理存儲(chǔ)塊的指示包括如果物理存儲(chǔ)塊已經(jīng)根據(jù)所述無(wú)重復(fù)寫(xiě)能力被初始化并分配,則將其 視為現(xiàn)用。
9. 如權(quán)利要求6所述的方法,其特征在于,所述提供對(duì)哪個(gè)所述物理存儲(chǔ)塊是現(xiàn)用物理存儲(chǔ)塊的指示包括為每個(gè)所述物理存儲(chǔ)塊維持標(biāo)記位,該標(biāo)記位指示所述物理存儲(chǔ)塊是 否是現(xiàn)用。
10. 如權(quán)利要求6所述的方法,其特征在于,所述提供對(duì)哪個(gè)所述物理存儲(chǔ)塊是現(xiàn)用物理存儲(chǔ)塊的指示包括為每個(gè)所述物理存儲(chǔ)塊維持引用計(jì)數(shù),該引用計(jì)數(shù)指示對(duì)每個(gè)所述物 理存儲(chǔ)塊的現(xiàn)用引用次數(shù),以及將具有大于0的對(duì)應(yīng)的引用計(jì)數(shù)的物理存儲(chǔ)塊標(biāo)識(shí)為現(xiàn)用物理存儲(chǔ)塊。
11. 如權(quán)利要求6所述的方法,其特征在于,還包括為一些或所有所述現(xiàn)用物理存儲(chǔ)塊提供虛擬塊ID到物理塊ID的映射。
12. 如權(quán)利要求11所述的方法,其特征在于,所述無(wú)重復(fù)寫(xiě)能力通過(guò) 提供按內(nèi)容塊讀取(BFBC)指令來(lái)實(shí)現(xiàn),該按內(nèi)容塊讀取指令將塊數(shù)據(jù)作 為輸入并提供塊地址作為輸出。其中,如果所述塊數(shù)據(jù)是執(zhí)行所述BFBC指令之前所述現(xiàn)用物理存儲(chǔ) 塊之一中的數(shù)據(jù)的重復(fù),則所述塊地址是現(xiàn)用物理存儲(chǔ)塊的一地址。其中,如果所述塊數(shù)據(jù)不是執(zhí)行所述BFBC指令之前所述現(xiàn)用物理存 儲(chǔ)塊之一中的數(shù)據(jù)的重復(fù),則所述塊地址是新分配的物理存儲(chǔ)塊的地址。
13. 如權(quán)利要求12所述的方法,其特征在于,所述塊地址是物理塊ID 或?qū)?yīng)的虛擬塊ID。
14. 如權(quán)利要求6所述的方法,其特征在于,所述現(xiàn)用物理存儲(chǔ)塊被 組織為復(fù)數(shù)個(gè)有向非循環(huán)圖(DAG)。
15. 如權(quán)利要求14所述的方法,其特征在于,所述復(fù)數(shù)個(gè)DAG被限 制得不包括多DAG循環(huán)引用環(huán)。
16. 如權(quán)利要求6所述的方法,其特征在于,還包括提供對(duì)所述物理 存儲(chǔ)器的一些或所有內(nèi)容的順序讀和比較能力,以便提供內(nèi)容可尋址性。
17. 如權(quán)利要求6所述的方法,其特征在于,還包括提供對(duì)所述物理 存儲(chǔ)器的一些或所有內(nèi)容的并行讀和比較能力,以便提供內(nèi)容可尋址性。
18. 如權(quán)利要求6所述的方法,其特征在于,還包括提供將所述物理存儲(chǔ)器分區(qū)成N個(gè)組,其中N是大于1的整數(shù); 根據(jù)具有N個(gè)可能輸出的散列功能將塊數(shù)據(jù)散列,以便提供所述塊數(shù) 據(jù)的散列值。提供對(duì)所述塊數(shù)據(jù)的讀和將所述數(shù)據(jù)與對(duì)應(yīng)于所述散列值的所述物理 存儲(chǔ)器的所述組的內(nèi)容比較的能力;由此提供內(nèi)容可尋址性。
全文摘要
改進(jìn)的存儲(chǔ)器管理根據(jù)分級(jí)式不可變內(nèi)容可尋址存儲(chǔ)器處理器(HICAMP)體系結(jié)構(gòu)來(lái)提供。在HICAMP中,物理存儲(chǔ)器被組織為兩個(gè)或更多物理存儲(chǔ)器塊,每個(gè)物理存儲(chǔ)器塊具有固定的存儲(chǔ)容量。對(duì)在任何時(shí)間點(diǎn)哪個(gè)物理存儲(chǔ)器塊中是現(xiàn)用的指示被提供。存儲(chǔ)器控制器提供無(wú)重復(fù)寫(xiě)能力,其中將即將寫(xiě)至物理存儲(chǔ)器的數(shù)據(jù)與寫(xiě)時(shí)刻的所有現(xiàn)用物理存儲(chǔ)器塊的內(nèi)容相比較來(lái)確保在完成無(wú)重復(fù)寫(xiě)之后沒(méi)有兩個(gè)現(xiàn)用存儲(chǔ)器塊具有相同的數(shù)據(jù)。
文檔編號(hào)G06F12/00GK101652758SQ200880010154
公開(kāi)日2010年2月17日 申請(qǐng)日期2008年1月24日 優(yōu)先權(quán)日2007年1月26日
發(fā)明者大衛(wèi)·R·謝里登 申請(qǐng)人:大衛(wèi)·R·謝里登