基於多級緩存的數據讀/寫方法、裝置和計算機系統與流程
2023-05-11 11:57:41 1
本發明涉及計算機系統的數據讀寫領域,尤其涉及一種基於多級緩存的數據讀/寫方法、裝置和計算機系統。
背景技術:
緩存(Cache,也稱為高速緩衝存儲器)位於中央處理器(CPU,CentralProcessingUnit)和內存(Memory)之間,主要是為了解決CPU運算速度和內存讀寫速度不匹配的問題。目前計算機最多採用三級Cache結構,其中L1(Level1)採用高速小容量的Cache,L2(Level2)採用速度中等容量較大的Cache,L3(Level3)採用低速大容量的Cache。基於上述的多級Cache,現有技術中CPU執行讀操作的具體過程如下:當CPUCore(CPU核)在發出讀數據請求時,通過逐層查找的方式,即先從L1Cache開始查找數據,如果Cache未命中(Cachemiss),去L2Cache中查找,依次類推,直至查找到數據為止。在上述的過程中,通常需要經過多次查找方可命中,例如假如讀操作針對的數據存儲在L3Cache中,這樣必須在L1Cache和L2Cache均未命中的情況下才會到L3Cache查找數據,從而導致Cache訪問效率比較低。
技術實現要素:
本發明的實施例提供了一種基於多級緩存的數據讀/寫方法、裝置和計算機系統,有助於提高Cache訪問效率,進而有助於在數據讀/寫過程中降低Cache缺失率。為達到上述目的,本發明的實施例採用如下技術方案:第一方面,本發明提供了一種基於多級緩存的數據讀/寫方法,包括:獲取讀/寫數據所針對的第一物理內存數據塊的第一查詢地址;獲取所述第一物理內存數據塊的第一緩存位置屬性;所述第一緩存位置屬性用於指示第一物理內存數據塊所能進入緩存的級別;根據所述第一查詢地址,按照所述第一緩存位置屬性所指示的第一物理內存數據塊所能進入的緩存級別從高到低的順序依次查詢緩存是否命中,直至一個緩存命中或所有緩存均未命中為止;若一個緩存命中,則針對所命中緩存中的第一物理內存數據塊的第一查詢地址讀/寫數據;或,若所有緩存均未命中,則針對內存中的第一物理內存數據塊的第一查詢地址讀/寫數據。在第一種可能的實現方式中,根據第一方面,所述第一緩存位置屬性為根據第一物理內存數據塊的被訪問情況,在頁表緩存TLB中為所述第一物理內存數據塊所設定的;所述獲取所述第一物理內存數據塊的第一緩存位置屬性包括:根據頁表緩存TLB中存儲的物理內存數據塊的屬性信息,查詢所述第一查詢地址對應的第一緩存位置屬性;所述TLB中存儲有物理內存數據塊的屬性信息,其中包括:物理內存數據塊的查詢地址、物理內存數據塊的緩存位置屬性的對應關係。在第二種可能的實現方式中,根據第一方面,所述第一緩存位置屬性為根據第一物理內存數據塊的被訪問情況,在系統寄存器中為所述第一物理內存數據塊所設定的;所述獲取所述第一物理內存數據塊的第一緩存位置屬性包括:讀取當前系統寄存器中存儲的緩存位置屬性,並其作為所述第一物理內存數據塊的第一緩存位置屬性;所述系統寄存器用於存儲緩存位置屬性。在第三種可能的實現方式中,根據第一方面,所述針對所命中緩存中的第一物理內存數據塊的第一查詢地址讀/寫數據包括:通過與所命中緩存間的直接數據通路,針對所命中緩存中的第一物理內存數據塊的第一查詢地址讀/寫數據;或者,所述針對內存中的第一物理內存數據塊的第一查詢地址讀/寫數據包括:通過與內存間的直接數據通路,針對內存中的第一物理內存數據塊的第一查詢地址讀/寫數據。在第四種可能的實現方式中,結合第一方面或前三種可能的實現方式中的任一種,在讀數據時,若所命中緩存的級別是所述第一緩存位置屬性指示的所能進入緩存級別中的非最高級別,則所述方法還包括:在所述第一緩存位置屬性指示的所能進入的緩存級別中,將需要讀的數據回填到級別高於所命中緩存的級別的緩存;或者,若所命中緩存的級別是所述第一緩存位置屬性指示的所能進入緩存級別中的最高級別,則不向其他緩存回填數據;或者,若所有緩存均未命中,則所述方法還包括:將需要讀的數據回填到所述第一緩存位置屬性指示的所能進入的緩存中。在第五種可能的實現方式中,結合第一方面或前三種可能的實現方式中的任一種,在寫數據時,在針對所命中緩存中的第一物理內存數據塊的第一查詢地址寫數據之後,所述方法還包括:若所寫的數據為共享數據,則在所述第一緩存位置屬性指示的所能進入的緩存級別中,向級別等於和/或低於所命中緩存的級別的其他緩存發起共享數據一致性請求。在第六種可能的實現方式中,結合第一方面或前五種可能的實現方式中的任一種,所述第一緩存位置屬性標識第一物理內存數據塊所能進入緩存級別中的最高級別,或者標識第一物理內存數據塊不能進入的緩存級別。第二方面,本發明提供了一種基於多級緩存的數據讀/寫裝置,所述裝置為包括多級緩存的中央處理器,包括:第一獲取單元,用於獲取讀/寫數據所針對的第一物理內存數據塊的第一查詢地址;第二獲取單元,用於獲取所述第一物理內存數據塊的第一緩存位置屬性;所述第一緩存位置屬性用於指示第一物理內存數據塊所能進入緩存的級別;查詢單元,用於根據所述第一獲取單元得到的所述第一查詢地址,按照第二獲取單元得到的所述第一緩存位置屬性所指示的所述第一物理內存數據塊所能進入的緩存級別從高到低的順序依次查詢緩存是否命中,直至一個緩存命中或所有緩存均未命中為止;讀寫單元,用於若一個緩存命中,則針對所述查詢單元所命中緩存中的第一物理內存數據塊的第一查詢地址讀/寫數據;或,若所述查詢單元的查詢結果為所有緩存均未命中,則針對內存中的第一物理內存數據塊的第一查詢地址讀/寫數據。在第一種可能的實現方式中,根據第二方面,所述第一緩存位置屬性為根據第一物理內存數據塊的被訪問情況,在頁表緩存TLB中為所述第一物理內存數據塊所設定的;所述第二獲取單元,用於根據TLB中存儲的物理內存數據塊的屬性信息,查詢所述第一查詢地址對應的第一緩存位置屬性;所述TLB中存儲有物理內存數據塊的屬性信息,其中包括:物理內存數據塊的查詢地址、物理內存數據塊的緩存位置屬性的對應關係。在第二種可能的實現方式中,根據第二方面,所述第一緩存位置屬性為根據第一物理內存數據塊的被訪問情況,在系統寄存器中為所述第一物理內存數據塊所設定的;所述第二獲取單元,用於讀取當前系統寄存器中存儲的緩存位置屬性,並其作為所述第一物理內存數據塊的第一緩存位置屬性;所述系統寄存器用於存儲緩存位置屬性。在第三種可能的實現方式中,根據第二方面,所述讀寫單元,用於通過與所命中緩存間的直接數據通路,針對所命中緩存中的第一物理內存數據塊的第一查詢地址讀/寫數據;或者,所述讀寫單元用於通過與內存間的直接數據通路,針對內存中的第一物理內存數據塊的第一查詢地址讀/寫數據在第四種可能的實現方式中,結合第二方面或前三種可能實現的方式中的任一種,所述讀寫單元,還用於在讀數據時,若所命中緩存的級別是所述第一緩存位置屬性指示的所能進入緩存級別中的非最高級別,則在所述第一緩存位置屬性指示的所能進入的緩存級別中,將需要讀的數據回填到級別高於所命中緩存的級別的緩存中;或者,若所命中緩存的級別是所述第一緩存位置屬性指示的所能進入緩存級別中的最高級別,則不向其他緩存回填數據;或者,若所有緩存均未命中,則將需要讀的數據回填到所述第一緩存位置屬性指示的所能進入的緩存中。在第五種可能的實現方式中,結合第二方面或前三種可能實現的方式中的任一種,所述讀寫單元,還用於在寫數據時,若所寫的數據為共享數據,則在所述第一緩存位置屬性指示的所能進入的緩存級別中,向級別等於和/或低於所命中緩存的級別的其他緩存發起共享數據一致性請求。在第六種可能的實現方式中,結合第二方面或前五種可能實現的方式中的任一種,所述第一緩存位置屬性標識第一物理內存數據塊所能進入緩存級別中的最高級別,或者標識第一物理內存數據塊不能進入的緩存級別。第三方面,本發明提供了一種計算機系統,包括:內存以及上述的所述裝置。本發明實施例提供的一種基於多級緩存的數據讀/寫方法、裝置和計算機系統,通過緩存位置屬性指示的物理內存數據塊所能進入緩存的級別,並按照其指示的所能進入的級別查詢緩存是否命中,能夠支持越過無需訪問的Cache,較快地命中緩存,從而有助於提高Cache訪問效率,進而有助於增強Cache命中率,換言之,有助於在數據讀/寫過程中降低Cache缺失率;尤其對於一些訪問頻率低的物理內存數據塊而言,可以通過對緩存位置屬性的限定,避免其進入資源緊缺的高級別緩存,進而有助於在數據讀/寫過程中降低Cache缺失率。附圖說明為了更清楚地說明本發明實施例的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對於本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。圖1為本發明實施例提供的一種基於多級緩存的數據讀/寫方法的示意圖;圖2為本發明實施例提供的一種計算機系統結構示意圖;圖3為本發明實施例提供的一種基於多級緩存的數據讀操作的方法示意圖;圖4為本發明實施例提供的另一種基於多級緩存的數據讀操作的方法示意圖;圖5為本發明實施例提供的一種基於多級緩存的數據寫操作的方法示意圖;圖6為本發明實施例提供的另一種基於多級緩存的數據寫操作的方法示意圖;圖7為本發明實施例提供的一種基於多級緩存的數據讀/寫操作的裝置的結構示意圖。具體實施方式下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基於本發明中的實施例,本領域普通技術人員在沒有作出創造性勞動前提下所獲得的所有其他實施例,都屬於本發明保護的範圍。本發明提供了一種基於多級緩存的數據讀/寫方法,其執行主體可以為包含多級緩存的CPU中的CPUCore,也可以為包含多級緩存的CPU中的具有讀/寫功能的硬體設備。所述方法可以適用於單核計算機系統,也可以適用於多核計算機系統,如圖1所示,包括:S101、獲取讀/寫數據所針對的第一物理內存數據塊的第一查詢地址。其中,所述物理內存數據塊是指在計算機系統中,將內存分成的若干用於存儲數據的存儲單元,示例的,可以是內存頁、內存段、或者是直接來自I/O的數據信息等;這些存儲單元的大小沒有限定,可以相等或不等。所述查詢地址可以為物理內存數據塊的物理地址(PA,PhysicalAddress)的高位比特,當然不限於此。為了清楚描述,本發明實施例中,將一次讀/寫數據過程中相關的對象前加「第一」。例如,第一物理內存數據塊是指在一次讀/寫數據過程中所針對的物理內存數據塊,第一查詢地址是指第一物理內存數據塊的物理地址的高位比特。示例的,CPUCore中可以包含TLB(TranslationLookasideBuffer,旁路轉換緩衝或頁表緩存);此步驟可以是,通過在TLB中得到一次讀/寫數據過程中的物理地址的高位比特。但TLB不限於設置在CPUCore中。此步驟具體可以為:當CPUCore中的基於多級緩存的數據讀/寫的裝置在發出一次數據讀/寫請求時,該裝置會給出一個虛擬地址(VA,VirtualAddress),用該VA的高位若干比特去TLB中進行查找,TLB負責將虛擬地址轉化為物理內存數據塊的物理地址的高位比特,從而使得該裝置得到物理地址的高位比特。S102、獲取所述第一物理內存數據塊的第一緩存位置屬性;所述第一緩存位置屬性用於標識所述第一物理內存數據塊所能進入緩存的級別。其中,所述第一緩存位置屬性為根據所述第一物理內存數據塊的被訪問情況,為所述第一物理內存數據塊所設定的。一般而言,訪問頻率較高的物理內存數據塊存在於高級別的緩存中,訪問頻率較低的物理內存數據塊存在於低級別的緩存中。為合理設置緩存位置屬性,上述緩存位置屬性可以為根據物理內存數據塊的被訪問情況,為該物理內存數據塊所設定的。其中,物理內存數據塊的被訪問情況可以但不限於物理內存數據塊的訪問頻率,還可根據該數據塊本身的屬性,例如:流媒體數據,這些數據很大程度上是只需要訪問一遍就可以被丟棄的,所以這些數據也不需要進入高級別的緩存中。可選的,通常內存中存儲有所有物理內存數據塊的屬性信息,本實施例可以在內存中的原有的物理內存數據塊屬性信息中添加若干比特,用此來標識各物理內存數據塊的緩存位置屬性,此時,物理內存數據塊的屬性信息中包括:物理內存數據塊的查詢地址、物理內存數據塊的緩存位置屬性的對應關係;該緩存位置屬性可以根據物理內存數據塊的被訪問情況,由作業系統在劃分數據塊的時候直接設定。另外,內存會將添加了緩存位置屬性的屬性信息填入TLB用於存儲屬性項的空間中,可選的,若TLB原有空間存在保留比特(未被佔用的比特)能夠填入緩存位置屬性,則直接填入即可,否則,可以增加原有空間的寬度用以填入緩存位置屬性。此時,此步驟可以為:當CPUCore中的基於多級緩存的數據讀/寫的裝置在發出一次數據讀/寫請求時,根據所述TLB中存儲的物理內存數據塊的查詢地址和物理內存數據塊屬性信息的對應關係,查詢所述第一查詢地址對應的第一緩存位置屬性。或者可選的,本發明實施例還可以為將緩存位置屬性設置為CPU所包含的系統寄存器,也就是說,增設一系統寄存器用於存儲緩存位置屬性。通過一條新增的指令,或者在原指令集中添加一些比特專門來對緩存位置屬性寄存器進行設置。此時,此步驟可以為:當CPUCore中的基於多級緩存的數據讀/寫的裝置發起一次數據讀/寫請求時,讀取當前系統寄存器中存儲的緩存位置屬性,並其作為所述第一物理內存數據塊的第一緩存位置屬性。進一步的,所述第一緩存位置屬性標識第一物理內存數據塊所能進入緩存級別中的最高級別,或者標識第一物理內存數據塊不能進入的緩存級別。例如,假定計算機系統中的共有三級緩存,為了區分可以分別用00、01、10表示一級緩存(L1Cache)、二級緩存(L2Cache)、三級緩存(L3Cache)。若所述緩存位置屬性為01,且表示該內存數據塊最高只能進入L2Cache,即該內存數據塊可能進入L2Cache或者L3Cache,但是不能進入L1Cache。若所述緩存位置屬性為01,且表示該內存數據塊不能進入L2Cache,相應的,該緩存位置屬性控制物理內存數據塊進入緩存的級別包括L1Cache和L3Cache。由於第一物理內存數據塊與其第一緩存位置屬性是一一對應的關係,則對於步驟S101和步驟S102,可以先獲取讀/寫數據所針對的第一物理內存數據塊的第一緩存位置屬性,然後再獲取所述第一物理內存數據塊的第一查詢地址;無論採取怎樣的獲取方式,都必須獲取得到第一物理內存數據塊的第一查詢地址和第一緩存位置屬性。S103、根據所述第一查詢地址,按照所述第一緩存位置屬性所指示的第一物理內存數據塊所能進入的緩存級別從高到低的順序依次查詢緩存是否命中,直至一個緩存命中或所有緩存均未命中為止。對於具有N級緩存的計算機系統而言,一級緩存的級別最高,N級緩存的級別最低,一級緩存到N級緩存之間的緩存級別遞減。根據第一查詢地址查詢一個i(1≤i≤N)級緩存是否命中的過程可以為:利用虛擬地址的中間若干比特到該i級緩存中查找,選出一組CacheLine的標籤(Tag),該Tag可以是物理地址PA的高位比特;然後將TLB得到的第一查詢地址和選出的一組Tag進行比較,若某條CacheLine的Tag能和PA高位比特匹配上,則該i級緩存命中,否則,則該i級緩存未命中。示例的,假定計算機系統中的共有三級緩存,S102中獲取的所述緩存位置屬性為01,且表示該內存數據塊最高只能進入L2Cache。此時,此步驟具體可以為:CPUCore中的基於多級緩存的數據讀/寫的裝置按照緩存位置屬性忽略L1Cache,直接查詢L2Cache是否命中,若L2Cache命中,則查詢過程到此為止,若L2Cache未命中,則查詢L3Cache是否命中;若L3Cache命中,則查詢過程到此為止,若L3Cache未命中,由於L3Cache是最後一級緩存,則意味著第一緩存位置屬性控制進入所有緩存均未命中,則查詢過程也到此為止。又示例的,假定計算機系統中的共有三級緩存,S102中獲取的所述緩存位置屬性為01,且表示該內存數據塊不能進入L2Cache,相應的,該緩存位置屬性控制物理內存數據塊進入緩存的級別包括L1和L3。此時,此步驟具體可以為CPUCore中的基於多級緩存的數據讀/寫的裝置按照緩存位置屬性先查詢L1Cache是否命中,若L1Cache命中,則查詢過程到此為止,若L1Cache未命中,則查詢L3Cache是否命中,由於L3Cache是最後一級緩存,故L3Cache命中或未命中,則查詢過程均到此為止。若此步驟中存在一個緩存命中,則進行步驟S104;若此步驟中所有緩存均未命中,則進行步驟S105。S104、若一個緩存命中,則針對所命中緩存中的第一物理內存數據塊的第一查詢地址讀/寫數據。優選的,可以預先增設各級別的緩存到CPUCore中的基於多級緩存的數據讀/寫的裝置的直接數據通路,此時,此步驟可以為:通過所述裝置與所命中緩存間的直接數據通路,針對所命中緩存中的第一物理內存數據塊的第一查詢地址讀/寫數據。當然,採用現有技術中所建立的數據通路,針對所命中緩存中的第一物理內存數據塊的第一查詢地址讀/寫數據也是可以的。S105、若所有緩存均未命中,則針對內存中的第一物理內存數據塊的第一查詢地址讀/寫數據。由於內存中必然能找到第一物理內存數據塊,故而當所有緩存均未命中的情況下,可以利用此步驟完成數據的讀/寫。本發明實施例提供的一種基於多級緩存的數據讀/寫方法,通過緩存位置屬性指示的物理內存數據塊所能進入緩存的級別,並按照其指示的所能進入的級別查詢緩存是否命中,能夠支持越過無需訪問的Cache,較快地命中緩存,從而有助於提高Cache訪問效率,進而有助於增強Cache命中率,換言之,有助於在數據讀/寫過程中降低Cache缺失率;尤其對於一些訪問頻率低的物理內存數據塊而言,可以通過對緩存位置屬性的限定,避免其進入資源緊缺的高級別Cache,進而有助於在數據讀/寫過程中降低Cache缺失率。進一步的,針對在讀數據時,若所命中緩存的級別是所述第一緩存位置屬性指示的所能進入緩存級別中的非最高級別,則在S104針對所命中緩存中的第一物理內存數據塊讀數據之後,所述方法還包括:在所述第一緩存位置屬性指示的所能進入的緩存級別中,將需要讀的數據回填到級別高於所命中緩存的級別的緩存中;或者,若所命中緩存的級別是所述第一緩存位置屬性指示的所能進入緩存級別中的最高級別,則不向其他緩存回填數據;或者,若所有緩存均未命中,則所述方法還包括:將需要讀的數據回填到所述第一緩存位置屬性指示的所能進入的緩存中。示例的,假定計算機系統中的共有三級緩存,且S102中獲取的所述緩存位置屬性為01,且表示該內存數據塊最高只能進入L2Cache,也就是說,L2Cache是第一緩存位置屬性指示的所能進入的最高級別。若經過步驟S103所命中的緩存是L2Cache,由於L2Cache是第一緩存位置屬性指示的所能進入的最高級別,則不向其他緩存(例如:L1Cache)回填數據。若經過步驟S103所命中的緩存是L3Cache,則可以在S104針對L3Cache中的第一物理內存數據塊讀數據之後或同時,CPUCore中的基於多級緩存的數據讀/寫的裝置在第一緩存位置屬性指示的所能進入緩存的級別下,將需要讀的數據回填到L2Cache中。這樣,使得在再次針對第一物理內存數據塊讀/寫數據時,就可以一次命中L2Cache。若經過步驟S103所有緩存均未命中,則可以在S105針對內存中的第一物理內存數據塊讀數據之後或同時,CPUCore中的基於多級緩存的數據讀/寫的裝置將需要讀的數據回填到L3Cache和L2Cache中。這樣使得可以在下一次讀取該數據的過程中,經一次查詢就可命中L2Cache。通過對物理內存數據塊進行合適的緩存位置級別限定,對於引起Cache缺失率高的應用,可以防止訪問頻率低的數據調入缺失率高的Cache中,避免了無謂的Cache數據回填。進一步的,為維護共享數據的一致性,針對寫數據時,在S104針對所命中緩存中的第一物理內存數據塊的第一查詢地址寫數據之後,所述方法還包括:若所寫的數據為共享數據,則在所述第一緩存位置屬性指示的所能進入的緩存級別中,向級別等於和/或低於所命中緩存的級別的其他緩存發起共享數據一致性請求。其中,所述共享數據為在多核處理器的緩存結構中,若其中一個CPUCore對某一數據進行了修改,而該數據同時在其他CPUCore的緩存中,則該數據為不同CPUCore間的共享數據。示例的,假定計算機系統中有兩個CPUCore(CPUCore0和CPUCore1),每個CPUCore包含有三級緩存,若CPUCore0對其緩存中的L1Cache的數據進行了修改,而該數據同時在CPUCore1的L1Cache中,則該數據為CPUCore0和CPUCore1的共享數據。示例的,假定計算機系統中共有三級緩存,且S102中獲取的所述緩存位置屬性為01,且表示該內存數據塊最高只能進入L2Cache,也就是說,在第一緩存位置屬性指示的所能進入的緩存級別包括:L2、L3。若經過步驟S103所命中的緩存是L2Cache,且經步驟S104所寫入的數據為共享數據,則(1)在計算機系統中除了所命中的L2Cache外,還包含其他L2Cache的情況下,CPUCore中的基於多級緩存的數據讀/寫的裝置向其他L2Cache以及L3Cache發起共享數據一致性請求;(2)在計算機系統中不包含其他L2Cache的情況下,該裝置僅向L3Cache發起共享數據一致性請...