一種緩存管理方法及緩存管理裝置制造方法
【專利摘要】本發明實施例提供了一種緩存管理方法及緩存管理裝置,涉及計算機應用【技術領域】,合理遷移內存頁,使得數據盡量集中在各CPU的本地內存區域,避免過多異地訪問內存導致的數據訪問速率下降,提高數據訪問速率。所述方法包括:記錄本地CPU對應的本地內存區域中各內存頁被各CPU訪問的頻率;檢測所述各內存頁中是否存在待遷移內存頁,若所述各內存頁中存在所述待遷移內存頁,則將對所述待遷移內存頁的訪問頻率最大的CPU確定為目標CPU;將所述待遷移內存頁遷移至所述目標CPU的本地內存區域。
【專利說明】一種緩存管理方法及緩存管理裝置
【技術領域】
[0001] 本發明涉及計算機應用【技術領域】,尤其涉及一種緩存管理方法及緩存管理裝置。
【背景技術】
[0002] 隨著計算機應用技術的迅速發展,會給服務器配置2個、4個甚至是8個CPU,進而 就產生了 NUMA (Non Uniform Memory Access Architecture,非統一內存訪問架構)。在 NUMA架構下,處理器會劃分出一個內存較大的地址空間作為數據緩沖區,將這個數據緩沖 區劃分成多個內存區域且每個CPU對應有一個內存區域。NUMA架構能夠降低各CPU之間的 鏈接延遲,且具有良好擴展性以及易編程的特點。
[0003] NUMA架構中將各CPU與其對應的內存區域劃分為一個NUMA節點,每兩個NUMA節 點之間通過QPI (Quick Path Interconnect,快速通道互聯)links (鏈接)實現高速通信鏈 接。通常,各CPU可以通過內部的QPI總線快速訪問到本地內存中的數據。若節點A、B分 別為兩個NUMA節點。當節點A中的CPU1需要訪問節點B對應的內存區域中的數據時,節 點A首先通過QPIlinks將數據請求發送給節點B,之后節點B再通過其內部的QPI總線訪 問其對應的內存區域,獲得數據之后再發送給節點A。這樣,導致跨NUMA節點訪問內存時需 要通過QPI的中轉才能實現,速度較慢,即NUMA系統中處理器訪問其本地內存的速度遠大 于訪問非本地內存的速度。
[0004] 因此,現有NUMA系統跨NUMA節點訪問非本地內存時,數據訪問速度下降,系統性 能下降。
【發明內容】
[0005] 本發明實施例提供一種緩存管理方法及緩存管理裝置,避免各CPU過多的訪問除 其對應的本地內存區域外的內存區域,提高數據訪問的速率,進而提高系統性能。
[0006] 為達到上述目的,本發明實施例采用的技術方案是,
[0007] 第一方面,公開了一種緩存管理方法,應用于非統一內存訪問架構NUMA設備,所 述NUMA設備包含至少兩個中央處理器CPU以及數據緩沖區,所述數據緩沖區包含至少兩 個本地內存區域,每個CPU對應一個本地內存區域,其特征在于,針對每個CPU,所述方法包 括:
[0008] 記錄本地CPU對應的本地內存區域中各內存頁被各CPU訪問的頻率;
[0009] 檢測所述各內存頁中是否存在待遷移內存頁,其中,所述待遷移內存頁被所述本 地CPU訪問的頻率小于被其他CPU訪問的頻率;
[0010] 若所述各內存頁中存在所述待遷移內存頁,則將對所述待遷移內存頁的訪問頻率 最大的CPU確定為目標CPU;
[0011] 將所述待遷移內存頁遷移至所述目標CPU的本地內存區域。
[0012] 結合第一方面,在第一方面的第一種可能的實現方式中,所述檢測所述各內存頁 中是否存在待遷移內存頁具體包括:
[0013] 檢測所述本地CPU的本地內存區域中是否存在被所述本地CPU訪問的頻率為零的 內存頁;
[0014] 若存在,則將所述被所述本地CPU訪問的頻率為零的內存頁確定為所述待遷移內 存頁。
[0015] 結合第一方面、第一方面的第一種可能的實現方式,在第一方面的第二種可能的 實現方式中,所述方法還包括:
[0016] 所述本地CPU利用局部索引記錄所述本地CPU的本地內存區域中各內存頁在本地 內存區域中的存儲地址,與所述各內存頁的編號之間的對應關系;利用全局索引記錄所述 本地CPU的本地內存區域中各內存頁在除所述本地CPU的本地內存區域外的緩存區域中的 存儲地址,與所述各內存頁的編號之間的對應關系。
[0017] 結合第一方面的第二種可能的實現方式,在第一方面的第三種可能的實現方式 中,所述方法還包括:
[0018] 所述本地CPU訪問其本地內存區域中的第一內存頁時,將所述本地CPU對所述第 一內存頁的訪問頻率值加1,將其他訪問所述第一內存頁的CPU對所述第一內存頁的訪問 頻率值均減1。
[0019] 結合第一方面、第一方面的第一至第三種可能的實現方式,在第一方面的第四種 可能的實現方式中,所述將所述待遷移內存頁遷移至所述目標CPU的本地內存區域具體包 括:
[0020] 若所述目標CPU的本地內存區域已飽和,且所述數據緩沖區的空閑內存不能容納 內存頁,則在所述目標CPU將所述目標CPU的本地內存區域中的一個內存頁刪除之后,所述 本地CPU再將所述待遷移內存頁遷移至所述目標CPU的本地內存區域。
[0021] 結合第一方面、第一方面的第一至第四種可能的實現方式,在第一方面的第五種 可能的實現方式中,所述將所述待遷移內存頁遷移至所述目標CPU的本地內存區域具體包 括:
[0022] 若所述目標CPU的本地內存區域已飽和,且所述數據緩沖區的空閑內存區域能容 納至少一個內存頁,則在所述目標CPU將所述目標CPU的本地內存區域中的一個內存頁遷 移至所述數據緩沖區的空閑內存區域中之后,所述本地CPU再將所述待遷移內存頁遷移至 所述目標CPU的本地內存區域。
[0023] 結合第一方面的第二種可能的實現方式,在第一方面的第六種可能的實現方式 中,所述方法還包括:
[0024] 所述本地CPU生成數據訪問指令,所述數據訪問指令攜帶所述本地CPU的待訪問 內存頁的編號Μ ;
[0025] 所述本地CPU檢測所述局部索引中是否記錄有編號為所述Μ的內存頁的存儲地 址;
[0026] 若所述局部索引中記錄有編號為所述Μ的內存頁的存儲地址,則根據記錄的編號 為所述Μ的內存頁的存儲地址獲取所述待訪問內存頁;若所述局部索引中沒有記錄編號為 所述Μ的內存頁的存儲地址,則檢測所述全局索引中是否記錄有編號為所述Μ的內存頁的 存儲地址;
[0027] 若所述全局索引中記錄有編號為所述Μ的內存頁的存儲地址,則根據記錄的編號 為所述Μ的內存頁的存儲地址查找到所述待訪問內存頁。
[0028] 結合第一方面的第六種可能的實現方式,在第一方面的第七種可能的實現方式 中,若所述全局索引中沒有記錄編號為所述Μ的內存頁的存儲地址,則所述本地CPU訪問物 理磁盤,查找到所述待訪問內存頁。
[0029] 結合第一方面的第七種可能的實現方式,在第一方面的第八種可能的實現方式 中,在所述本地CPU則訪問物理磁盤,查找到所述待訪問內存頁之后,所述方法還包括:
[0030] 若所述本地CPU的本地內存區域已飽和,則判斷所述數據緩沖區是否飽和;
[0031] 若判斷所述數據緩沖區未飽和,則將所述待訪問內存頁遷移至所述數據緩沖區中 除所述本地CPU的本地內存區域外的緩存區域。
[0032] 第二方面,公開了一種緩存管理裝置,應用于非統一內存訪問架構NUMA設備,所 述NUMA設備包含至少兩個中央處理器CPU以及數據緩沖區,所述NUMA設備包含數據緩沖 區,所述數據緩沖區包含至少一個本地內存區域,每個CPU對應一個本地內存區域,其特征 在于,包括:
[0033] 記錄單元,用于記錄本地CPU對應的本地內存區域中各內存頁被各CPU訪問的頻 率;
[0034] 檢測單元,用于檢測所述各內存頁中是否存在待遷移內存頁,其中,所述待遷移內 存頁被所述本地CPU訪問的頻率小于被其他CPU訪問的頻率;
[0035] 確定單元,用于在所述檢測單元檢測到所述各內存頁中存在所述待遷移內存頁之 后,將對所述待遷移內存頁的訪問頻率最大的CPU確定為目標CPU ;
[0036] 遷移單元,用于將所述待遷移內存頁遷移至所述目標CPU的本地內存區域。
[0037] 結合第二方面,在第二方面的第一種可能的實現方式中,
[0038] 所述檢測單元具體用于,檢測所述本地CPU的本地內存區域中是否存在被所述本 地CPU訪問的頻率為零的內存頁;
[0039] 所述確定單元具體用于,在所述檢測單元檢測到所述本地CPU的本地內存區域中 存在被所述本地CPU訪問的頻率為零的內存頁之后,將所述被所述本地CPU訪問的頻率為 零的內存頁確定為所述待遷移內存頁。
[0040] 結合第二方面、第二方面的第一種可能的實現方式,在第二方面的第二種可能的 實現方式中,
[0041] 所述記錄單元還用于,利用局部索引記錄所述本地CPU的本地內存區域中各內存 頁在本地內存區域中的存儲地址,與所述各內存頁的編號之間的對應關系;利用全局索引 記錄所述本地CPU的本地內存區域中各內存頁在除所述本地CPU的本地內存區域外的緩存 區域中的存儲地址,與所述各內存頁的編號之間的對應關系。
[0042] 結合第二方面的第二種可能的實現方式,在第二方面的第三種可能的實現方式 中,
[0043] 所述記錄單元還用于,在所述本地CPU訪問其本地內存區域中的第一內存頁時, 將所述本地CPU對所述第一內存頁的訪問頻率值加1,將其他訪問所述第一內存頁的CPU對 所述第一內存頁的訪問頻率值均減1。
[0044] 結合第二方面、第二方面的第一至第三種可能的實現方式,在第二方面的第四種 可能的實現方式中,
[0045] 所述遷移單元具體用于,若確定所述目標CPU的本地內存區域已飽和,且所述數 據緩沖區的空閑內存不能容納內存頁,則在所述目標CPU將所述目標CPU的本地內存區域 中的一個內存頁刪除之后,再將所述待遷移內存頁遷移至所述目標CPU的本地內存區域。
[0046] 結合第二方面、第二方面的第一至第四種可能的實現方式,在第二方面的第五種 可能的實現方式中,
[0047] 所述遷移單元具體用于,若確定所述目標CPU的本地內存區域已飽和,且所述數 據緩沖區的空閑內存區域能容納至少一個內存頁,則在所述目標CPU將所述目標CPU的本 地內存區域中的一個內存頁遷移至所述數據緩沖區的空閑內存區域中之后,再將所述待遷 移內存頁遷移至所述目標CPU的本地內存區域。
[0048] 結合第二方面的第二種可能的實現方式,在第二方面的第六種可能的實現方式 中,
[0049] 還包括生成單元和獲取單元,
[0050] 所述生成單元,用于生成數據訪問指令,所述數據訪問指令攜帶所述本地CPU的 待訪問內存頁的編號Μ ;
[0051] 所述檢測單元還用于,檢測所述局部索引中是否記錄有編號為所述Μ的內存頁的 存儲地址;
[0052] 所述獲取單元用于,在所述檢測單元確定所述局部索引中記錄有編號為所述Μ的 內存頁的存儲地址之后,根據記錄的編號為所述Μ的內存頁的存儲地址獲取所述待訪問內 存頁;
[0053] 所述檢測單元還用于,在確定所述局部索引中沒有記錄編號為所述Μ的內存頁的 存儲地址,檢測所述全局索引中是否記錄有編號為所述Μ的內存頁的存儲地址;
[0054] 所述獲取單元還用于,在所述檢測單元確定所述全局索引中記錄有編號為所述Μ 的內存頁的存儲地址之后,根據記錄的編號為所述Μ的內存頁的存儲地址查找到所述待訪 問內存頁。
[0055] 結合第二方面的第六種可能的實現方式,在第二方面的第七種可能的實現方式 中,
[0056] 所述獲取單元還用于,在所述檢測單元確定所述全局索引中沒有記錄編號為所述 Μ的內存頁的存儲地址之后,訪問物理磁盤,查找到所述待訪問內存頁。
[0057] 結合第二方面的第七種可能的實現方式,在第二方面的第八種可能的實現方式 中,
[0058] 所述檢測單元還用于,在確定所述本地CPU的本地內存區域已飽和之后,判斷所 述數據緩沖區是否飽和;
[0059] 所述遷移單元具體用于,在所述檢測單元判斷所述數據緩沖區未飽和之后,將所 述待訪問內存頁遷移至所述數據緩沖區中除所述本地CPU的本地內存區域外的緩存區域。
[0060] 本發明實施例提供的緩存管理方法及緩存管理裝置,針對設備中的每個CPU,記錄 所述CPU本地內存區域中各內存頁被各CPU訪問的頻率,并將所述CPU的各內存頁中存在 的待遷移內存頁遷移至對所述待遷移內存頁訪問頻率最大的CPU的本地內存區域中,進而 使得各(PU訪問的數據盡量集中在各CPU的本地內存區域中,減少了現有技術中由于各CPU 訪問異地內存而導致的數據訪問速率下降,提高數據訪問的速率,進而提高系統性能。
【專利附圖】
【附圖說明】
[0061] 為了更清楚地說明本發明實施例的技術方案,下面將對實施例描述中所需要使用 的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本 領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的 附圖。
[0062] 圖1為本發明實施例提供的NUMA系統的結構示意圖;
[0063] 圖2為本發明實施例1提供的緩存管理方法的流程示意圖;
[0064] 圖3為本發明實施例2提供的緩存管理方法的流程示意圖;
[0065] 圖4為本發明實施例3提供的另一緩存管理方法的流程示意圖;
[0066] 圖5為本發明實施例4提供的緩存管理裝置的結構框圖;
[0067] 圖6為本發明實施例5提供的另一緩存管理裝置的結構框圖。
【具體實施方式】
[0068] 下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚地描 述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基于本發明 中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施 例,都屬于本發明保護的范圍。
[0069] 本發明實施例將傳統數據庫的單一數據緩沖區依照其NUMA屬性劃分為多個區 域。即處理器會劃分出一個內存較大的地址空間作為數據緩沖區,將這個數據緩沖區劃 分成多個內存區域,每個CPU對應有一個內存區域,并且只使用該CPU對應的局部內存。 其中,本發明所述的數據緩沖區實為設備中的內存條等硬件。實現時,每一個應用程序與 DBMS (database management system,數據庫管理系統)的連接都被綁定到一個特定的CPU 上,并且盡可能地從該CPU的局部內存中查找數據。對于數據緩沖區中的各個頁面,使用兩 個索引記錄其位置,一個索引記錄的是該內存頁本地緩沖區的存儲位置,只供本地緩存區 域對應的CPU使用。另一個為全局索引,記錄了該內存頁相對于整個數據緩沖區的存儲地 址,所有CPU都可以通過該索引訪問該內存頁。需要說明的是本發明實施例中提到的第一、 第二無先后順序之分,僅用以區分不同的內存頁或者不同的CPU。
[0070] 所謂NUMA架構指的是服務器配置有多個CPU。圖1所示的NUMA系統,服務器的處 理器包含4個CPU,服務器的處理器將數據緩沖區劃分為四個區域分別是內存區域1、內存 區域2、內存區域3以及內存區域4,每個CPU對應一個內存區域。將各CPU與其對應的內 存區域劃分為一個NUMA節點,各CPU通過QPI總線把數據訪問異地數據(即不在該CPU對 應的內存區域中的數據)。具體地,若節點A、B分別為兩個NUMA節點。當節點A中的CPU1 需要訪問節點B對應的內存區域中的數據時,節點A首先通過QPI links將數據請求發送 給節點B,之后節點B再通過其內部的QPI總線訪問其對應的內存區域,獲得數據之后再發 送給節點A。
[0071] 實施例1 :
[0072] 本發明實施例提供了 一種緩存管理方法,應用于NUMA架構的設備,所述設備包含 至少兩個中央處理器CPU,所述設備包含數據緩沖區,所述數據緩沖區被劃分為至少兩個本 地內存區域,每個CPU對應一個本地內存區域,針對每個CPU。如圖2所述,所述方法包括以 下步驟:
[0073] 101、記錄本地CPU對應的本地內存區域中各內存頁被各CPU訪問的頻率。
[0074] 針對服務器(緩存管理裝置)中的每個CPU,對應本發明實施例提供的方法,當將 某CPU作為執行主體時,就將該CPU稱為本地CPU。各CPU均會記錄其本地內存區域中的內 存頁被各CPU訪問的頻率,這樣方便各CPU對各內存頁的被訪問頻率進行檢測,進而對自身 不常訪問的內存頁進行合理遷移。
[0075] 102、檢測所述各內存頁中是否存在待遷移內存頁,其中,所述待遷移內存頁被所 述本地CPU訪問的頻率小于被其他CPU訪問的頻率。
[0076] 這里,若某內存頁被本地CPU訪問的頻率小于被其他CPU(處理器中除了本地CPU 外的CPU)訪問的頻率,則說明該內存頁對于本地CPU來說可能是一個不常訪問的內存頁, 可以考慮將該內存頁遷移至對其訪問頻率高的CPU的本地內存區域。
[0077] 需要說明的是,在本發明實施例中數據庫系統劃分數據緩沖區域時各CPU就會記 錄其對應的本地內存區域中各內存頁的編號以及其本地內存區域中的各內存頁的被訪問 頻率,以便本地CPU能夠根據各內存頁的編號以及各CPU對內存頁的訪問頻率對內存頁進 行合理遷移,減少異地訪問數據導致的數據訪問速率的下降。
[0078] 103、若所述各內存頁中存在所述待遷移內存頁,則將對所述待遷移內存頁的訪問 頻率最大的CPU確定為目標CPU。
[0079] 若本地CPU的各內存頁中不存在待遷移內存頁,則不改變所述CPU中的內存頁。
[0080] 104、將所述待遷移內存頁遷移至所述目標CPU的本地內存區域。
[0081] 由于所述目標CPU對所述待遷移的訪問頻率大于本地CPU對所述待遷移內存頁的 訪問頻率,且所述目標CPU又多次訪問所述待遷移內存頁,因此若是將所述待遷移內存頁 遷移至所述目標CPU的本地內存區域,則會提高所述目標CPU訪問所述待遷移內存頁的速 率,進而提高服務器的數據訪問速率,進而提高整個設備的數據訪問效率。
[0082] 具體實現中,所述CPU根據預先存儲的所述CPU的本地內存區域中的所述各內存 頁的編號與所述各內存頁的本地存儲地址間的對應關系,查找到與所述待遷移內存頁的編 號對應的存儲地址,即所述待遷移內存頁的本地存儲地址。所述CPU再訪問其本地內存區 域中,所述待遷移內存頁的本地存儲地址對應的內存區域,就可以獲取所述待遷移內存頁, 進而將所述待遷移內存頁遷移至所述目標CPU對應的本地內存區域,所述目標CPU就可以 通過QPI總線訪問本地內存區域獲得數據,避免訪問異地內存,大大提高了數據訪問數據。
[0083] 參考上述結合圖1所做的闡述,由于CPU1通過QPI總線中轉訪問數據速度較慢, 因此,本發明實施例提供的方案通過使得各CPU盡量通過訪問本地內存獲得數據,就可以 提高數據訪問的速率。
[0084] 進一步地,在本發明的優選實施例中,
[0085] 本地CPU的檢測自身本地內存區域中是否存在被所述本地CPU訪問的頻率為零的 內存頁。若存在被所述本地CPU訪問的頻率為零的內存頁,本地CPU則將所述被所述本地 (PU訪問的頻率為零的內存頁確定為所述待遷移內存頁。
[0086] 進一步地,在本發明的優選實施例中,
[0087] 所述本地CPU利用局部索引記錄本地CPU的本地內存區域中各內存頁在本地內存 區域中的存儲地址,與所述各內存頁的編號之間的對應關系;利用全局索引記錄本地CPU 的本地內存區域中各內存頁在除所述本地CPU的本地內存區域外的緩存區域中的存儲地 址,與所述各內存頁的編號之間的對應關系。
[0088] 需要說明的是,局部索引只能供本地CPU使用,全局索引是各CPU共享的。
[0089] 也就是說,每個CPU之前會記錄其對應的本地內存區域中各內存頁的本地存儲地 址(即本地內存區域中各內存頁在本地內存區域中的存儲地址)、全局存儲地址(即本地內 存區域中各內存頁在除所述本地CPU的本地內存區域外的緩存區域中的存儲地址)以及各 內存頁的編號之間的對應關系。
[0090] 進一步地,在本發明的優選實施例中:
[0091] 所述本地CPU訪問其本地內存區域中的第一內存頁時,將所述本地CPU對所述第 一內存頁的訪問頻率值加1,將其他訪問所述第一內存頁的CPU對所述第一內存頁的訪問 頻率值均減1。
[0092] 這樣也是為了方便本地CPU對各內存頁的訪問情況進行準確的把控,以便對本地 內存頁進行合理遷移,提高整體設備的數據訪問速率。
[0093] 進一步地,在本發明的優選實施例中:
[0094] 若所述目標CPU的本地內存區域已飽和,且所述數據緩沖區的空閑內存不能容納 內存頁,則在所述目標CPU將所述目標CPU的本地內存區域中的一個內存頁刪除之后,所述 本地CPU再將所述待遷移內存頁遷移至所述目標CPU的本地內存區域。
[0095] 進一步地,在本發明的優選實施例中:
[0096] 若所述目標CPU的本地內存區域已飽和,且所述數據緩沖區的空閑內存區域能容 納至少一個內存頁,則在所述目標CPU將所述目標CPU的本地內存區域中的一個內存頁遷 移至所述數據緩沖區的空閑內存區域中之后,所述本地CPU再將所述待遷移內存頁遷移至 所述目標CPU的本地內存區域。
[0097] 進一步地,在本發明的優選實施例中:
[0098] 所述本地CPU生成數據訪問指令,所述數據訪問指令攜帶所述本地CPU的待訪問 內存頁的編號M。
[0099] 所述本地CPU檢測所述局部索引中是否記錄有編號為所述Μ的內存頁的存儲地 址。
[0100] 若所述局部索引中記錄有編號為所述Μ的內存頁的存儲地址,則根據記錄的編號 為所述Μ的內存頁的存儲地址獲取所述待訪問內存頁;若所述局部索引中沒有記錄編號為 所述Μ的內存頁的存儲地址,則檢測所述全局索引中是否記錄有編號為所述Μ的內存頁的 存儲地址。
[0101] 若所述全局索引中記錄有編號為所述Μ的內存頁的存儲地址,則根據記錄的編號 為所述Μ的內存頁的存儲地址查找到所述待訪問內存頁。
[0102] 進一步地,在本發明的優選實施例中:
[0103] 若所述局部索引中記錄有編號為所述Μ的內存頁的存儲地址,且所述本地CPU需 要訪問所述待訪問內存頁的次數大于預設門限值,則將所述待訪問內存頁遷移至所述本地 CPU的本地內存區域中。
[0104] 其中,NUMA設備中不同的應用程序對應不同的預設門限值。示例地,對于內存頁 1而言,應用程序A和應用程序B對應的預設門限值分別為5和4。當應用程序A通過本地 (PU訪問該待訪問內存頁時,一旦本地CPU判斷應用程序A要訪問該待訪問內存頁的次數大 于5,則將該待訪問內存頁遷移至本地CPU對應的本地內存區域。當應用程序B通過本地 (PU訪問該待訪問內存頁時,一旦本地CPU判斷應用程序B要訪問該待訪問內存頁的次數大 于4,則將該待訪問內存頁遷移至本地CPU對應的本地內存區域。綜上,是否將該待訪問內 存頁遷移至本地CPU對應的本地內存區域取決于當前調用CPU的應用程序的具體情況。 [0105] 進一步地,在本發明的優選實施例中:
[0106] 若所述全局索引中沒有記錄編號為所述Μ的內存頁的存儲地址,所述本地CPU則 訪問物理磁盤,查找到所述待訪問內存頁。
[0107] 進一步地,在本發明的優選實施例中:
[0108] 在所述本地CPU則訪問物理磁盤,查找到所述待訪問內存頁之后,若所述本地CPU 的本地內存區域已飽和,則判斷所述數據緩沖區是否飽和;
[0109] 若判斷所述數據緩沖區未飽和,則將所述待訪問內存頁遷移至所述數據緩沖區中 除所述本地CPU的本地內存區域外的緩存區域。
[0110] 進一步地,在本發明的優選實施例中:
[0111] 在所述本地CPU則訪問物理磁盤,查找到所述待訪問內存頁具體之后,
[0112] 若所述CPU的本地內存區域未飽和,且所述本地CPU訪問所述待訪問內存頁的次 數大于所述預設門限值,所述本地CPU則將所述待訪問內存頁遷移至所述本地CPU的本地 內存區域。
[0113] 同上所述,NUMA設備中不同的應用程序對應不同的預設門限值。
[0114] 進一步地,在本發明的優選實施例中:
[0115] 在所述本地CPU則訪問物理磁盤,查找到所述待訪問內存頁之后,若所述本地CPU 訪問所述待訪問內存頁的次數大于所述預設門限值,且所述數據緩沖區已飽和,所述本地 (PU則刪除所述本地CPU的本地內存區域中的一個內存頁,再將所述待訪問內存頁遷移至 所述本地CPU的本地內存區域。
[0116] 本發明實施例提供的緩存管理方法及緩存管理裝置,針對設備中的每個CPU,記錄 所述CPU本地內存區域中各內頁被各CPU訪問的頻率,并將所述CPU的各內存頁中存在的 待遷移內存頁遷移至對所述待遷移內存頁訪問頻率最大的CPU的本地內存區域中,進而使 得各CPU訪問的數據盡量集中在各CPU的本地內存區域中,減少了現有技術中由于各CPU 訪問異地內存而導致的數據訪問速率下降,提高數據訪問的速率,進而提高系統性能。
[0117] 實施例2:
[0118] 本發明實施例提供了一種緩存管理方法,應用于非統一內存訪問架構NUMA設備, 所述NUMA設備包含至少兩個中央處理器CPU以及數據緩沖區,所述NUMA設備包含數據緩 沖區,所述數據緩沖區包含至少一個本地內存區域,每個CPU對應一個本地內存區域。如圖 3所述,針對每個CPU,執行主體為本地CPU,所述方法包括以下步驟:
[0119] 201、記錄本地CPU對應的本地內存區域中各內存頁被各CPU訪問的頻率。
[0120] 需要說明的是,將本發明提供的內存管理方法應用于一個CPU時,就會將該CPU稱 為本地CPU。即當該CPU是執行主體時,將該CPU稱為本地CPU。
[0121] 參照上述結合圖1的描述可以獲知,CPU訪問異地內存區域(即數據緩沖區中除 所述CPU的本地內存區域外的內存區域)會導致數據訪問速率下降,因此有必要通過記錄 各內存頁被訪問的頻對內存頁進行合理遷移,使得各CPU訪問的內存頁盡可能在本地內存 區域,減少異地訪問,進而提高數據訪問速率。
[0122] 具體實現中,數據庫系統中劃分數據緩沖區域時各CPU就會記錄其對應的本地內 存區域中各內存頁的編號以及其本地內存區域中的各內存頁的被訪問頻率,以便所述CPU 能夠根據內存頁的編號以及各CPU對內存頁的訪問頻率對內存頁進行合理遷移,減少異地 訪問數據導致的數據訪問速率的下降。
[0123] 202、檢測所述本地CPU的本地內存區域中是否存在被所述本地CPU訪問的頻率為 零的內存頁。
[0124] 由于之前各CPU記錄了各自對應的本地內存區域中各內存頁被各CPU訪問的頻 率,因此所述CPU可以逐一判斷對應的本地內存區域中的各個內存頁被所述CPU訪問的頻 率,若存在未被所述CPU訪問的內存頁(即待遷移內存頁),則將所述待遷移內存頁遷移到 合適的內存區域。
[0125] 若存在,則進行步驟203 ;若不存在,所述CPU則不改變其本地內存區域中的內存 頁。
[0126] 203、將所述被所述本地CPU訪問的頻率為零的內存頁確定為所述待遷移內存頁, 將對所述待遷移內存頁的訪問頻率最大的CPU確定為目標CPU。
[0127] 由于所述CPU對所述待遷移的訪問頻率為零,且所述目標CPU又多次訪問所述待 遷移內存頁,因此若是將所述待遷移內存頁遷移至所述目標CPU的本地內存區域,則會提 高所述目標CPU訪問所述待遷移內存頁的速率,進而提高服務器的數據訪問速率。
[0128] 204、將所述待遷移內存頁遷移至所述目標CPU的本地內存區域。
[0129] 本地CPU根據預先存儲的局部索引(即本地CPU的本地內存區域中的所述各內存 頁的編號,與本地內存區域中各內存頁在本地內存區域中的存儲地址),查找到與所述待遷 移內存頁的編號對應的存儲地址,即所述待遷移內存頁的本地存儲地址。本地CPU再訪問 其本地內存區域中,所述待遷移內存頁的本地存儲地址對應的內存區域,就可以獲取所述 待遷移內存頁,進而將所述待遷移內存頁遷移至所述目標CPU對應的本地內存區域,所述 目標CPU就可以通過QPI總線訪問本地內存區域查找到數據,避免訪問異地內存,大大提高 了數據訪問數據。
[0130] 另外,每個CPU之前會利用局部索引記錄本地內存區域中各內存頁在本地內存區 域中的存儲地址,與所述各內存頁的編號之間的對應關系。利用全局索引記錄所述各內存 頁在除所述本地CPU的本地內存區域外的緩存區域中的存儲地址,與所述各內存頁的編號 之間的對應關系。其中,各CPU可以根據內存頁的本地存儲地址訪問本地內存區域查找到 數據。當CPU要訪問的內存頁不在本地內存區域,CPU可以根據所述全局存儲地址判斷CPU 要訪問的內存頁在不在數據緩沖區中,除該CPU的本地內存區域外的緩存區域中,或者根 據所述全局存儲地址判斷CPU要訪問的內存頁在不在所述數據緩沖區中。
[0131] 本發明實施例還提供了以下緩存管理方法,執行主體為服務器中的任一個CPU,包 括以下幾種:
[0132] 一、CPU訪問其本地內存區域中的目標內存頁時,將該CPU對該目標內存頁的訪問 頻率加1,將其他訪問該目標內存頁的CPU對所述目標內存頁的訪問頻率均減1。
[0133] 二、當CPU需要從所述物理磁盤中導出新的內存頁且該CPU對應的本地內存區域 已飽和,則判斷所述數據緩沖區是否飽和。
[0134] 若該CPU判斷所述數據緩沖區未飽和,則將所述新的內存頁遷移至所述數據緩沖 區中除該CPU對應的本地內存區域外的緩存區域。
[0135] 三、當CPU需要從所述物理磁盤中導出新的內存頁且訪問所述新的內存頁的次數 大于預設門限值時,若該CPU的本地內存區域未飽和,該CPU將所述新的內存頁遷移至自身 的本地內存區域。
[0136] 四、若CPU需要從所述物理磁盤中導出新的內存頁且所述數據緩沖區已飽和,該 (PU刪除自身的本地內存區域中的一個內存頁,將所述新的內存頁遷移至自身的本地內存 區域,訪問本地內存區域獲得數據。
[0137] 五、當CPU需要將除該CPU的本地內存區域外的緩存區域中的內存頁遷移至所述 CPU對應的本地內存區域中(即進行異地調頁),若除該CPU的本地內存區域外的緩存區域 不能容納內存頁(也可認為是除該CPU的本地內存區域外的緩存區域的空閑內存小于預設 值),該CPU將其本地內存區域中的一個內存頁刪除,再將需要的內存頁遷移至該CPU的本 地內存區域。
[0138] 六、當CPU需要將除該CPU的本地內存區域外的緩存區域中的內存頁遷移至該CPU 對應的本地內存區域中,若除該CPU對應的本地內存區域外的緩存區域能容納至少一個內 存頁(也可以認為除該CPU對應的本地內存區域外的緩存區域的空閑內存大于門限值), 該CPU將其本地內存區域中的一個內存頁遷移至除該CPU的本地內存區域外的緩存區域, 再將需要的內存頁遷移至該CPU對應的本地內存區域。
[0139] 結合本發明實施例提供的緩存管理方法,本發明實施例還提供了一種數據訪問方 法,執行主體為服務器中的任一 CPU,包括:
[0140] 所述CPU生成數據訪問指令,所述數據訪問指令攜帶所述本地CPU的待訪問內存 頁的編號M。
[0141] 所述CPU檢測所述局部索引中是否記錄有編號為所述Μ的內存頁的存儲地址。
[0142] 若所述局部索引中記錄有編號為所述Μ的內存頁的存儲地址,則根據記錄的編號 為所述Μ的內存頁的存儲地址獲取所述待訪問內存頁;若所述局部索引中沒有記錄編號為 所述Μ的內存頁的存儲地址,則檢測所述全局索引中是否記錄有編號為所述Μ的內存頁的 存儲地址。
[0143] 若所述全局索引中記錄有編號為所述Μ的內存頁的存儲地址,則根據記錄的編號 為所述Μ的內存頁的存儲地址查找到所述待訪問內存頁。
[0144] 另外,若所述數據緩沖區中除所述CPU的本地內存區域外的其他內存區域中存在 編號為所述Μ的內存頁,且所述CPU需要訪問所述待訪問內存頁的次數大于預設門限值,則 將所述待訪問內存頁遷移至所述CPU的本地內存區域中。這樣,就可使得所述CPU通過訪 問本地內存區域查找到需要訪問的內存頁,進而避免了過多的異地內存訪問,提高了數據 訪問速率。
[0145] 本發明實施例提供的緩存管理方法,針對設備中的每個CPU,記錄所述CPU本地內 存區域中各內頁被各CPU訪問的頻率,并將所述CPU的各內存頁中存在的待遷移內存頁遷 移至對所述待遷移內存頁訪問頻率最大的CPU的本地內存區域中,進而使得各CPU訪問的 數據盡量集中在各CPU的本地內存區域中,減少了現有技術中由于各CPU訪問異地內存而 導致的數據訪問速率下降,提高數據訪問的速率,進而提高系統性能。
[0146] 實施例3 :
[0147] 本發明實施例提供了一種緩存管理方法,如圖4所示,針對服務器中的每個CPU, 當某CPU作為執行主體時,就將該CPU稱為本地CPU,所述方法包括以下步驟:
[0148] 301、所述本地CPU利用局部索引以及全局索引來記錄本地內存區域中各內存頁 的存儲地址與各內存頁的編號之間的對應關系。
[0149] 其中,所述本地CPU利用局部索引記錄本地內存區域中各內存頁在本地內存區域 中的存儲地址,與所述各內存頁的編號之間的對應關系;利用全局索引記錄所述各內存頁 在除所述本地CPU的本地內存區域外的緩存區域中的存儲地址,與所述各內存頁的編號之 間的對應關系。
[0150] 在實現中,本發明實施例將傳統數據庫的數據緩沖區按照其NUMA劃分為多個內 存區域,且每個CPU對應一個內存區域,各CPU僅使用其對應的內存區域。對于數據緩沖區 中的各個內存頁,使用兩個索引來記錄其位置。一個是局部索引,為內存頁的本地存儲地址 (該內存頁在本地內存區域的存儲位置)與內存頁的編號之間的對應關系,僅供本地內存 區域對應的CPU使用。一個是全局索引,記錄內存頁的全局存儲地址(即內存頁在數據緩 沖區的存儲地址)與內存頁的編號之間的對應關系,由所有CPU共同使用。
[0151] 需要說明的是,索引也是一種數據結構,它本身需要耗費內存來存儲,一個緩沖區 大概占用12個字節,所以管理的緩沖區越多索引占用的存儲就越大。
[0152] 數據緩沖區的局部索引一般可以放入L3高速緩存。假定一個NUMA節點所對應 的內存空間為8GB,一個內存頁大小為32KB,一個索引項的大小為32Byte,那么索引的大小 為:8GB/32KB*32Byte = 8MB。一般而言,服務器配備CPU的L3高速緩存大小都超過20MB, 再加上數據訪問通常有較高的局部性,因此大部分對局部索引的訪問都可以在L3高速緩 存中進行。
[0153] 全局索引一般分散在不同的NUMA節點上,當數據量較小時,它也可以被放置在L3 高速緩存中。當全局索引占內存較大時(索引是一種數據結構,服務器的數據緩沖區被劃 分成極其多個本地內存區域時,就會導致索引較大,),對它的訪問往往需要跨節點,代價相 對較高。但是,我們的緩存機制將盡可能確保數據放置在本地緩沖池中,從而最小化對全局 索引的訪問頻率。
[0154] 302、記錄本地CPU對應的本地內存區域中各內存頁被各CPU訪問的頻率。
[0155] 示例地,處理器為每個內存頁配備一個短數組,用于記錄各CPU最近訪問該內存 頁的頻率,并通過該數組的內容決定是否對內存頁進行遷移。具體地,對于CPU1,若用于記 錄CPU1訪問內存頁A頻率的數組為零,即內存頁A近期內沒有被CPU1訪問,因此考慮將內 存頁A遷移,以便減少系統異地訪問內存。
[0156] 303、檢測所述本地CPU的本地內存區域中是否存在被所述本地CPU訪問的頻率為 零的內存頁。
[0157] 若存在,則進行304。所述CPU對應的本地內存區域中各內存頁中存在被所述CPU 訪問的頻率為零的內存頁,則需要檢測近期訪問該內存頁的CPU對該內存頁的訪問頻率, 以便合理遷移該內存頁,減少異地內存訪問。若不存在,則不改變所述CPU本地內存區域中 的內存頁。
[0158] 304、將所述被所述本地CPU訪問的頻率為零的內存頁確定為所述待遷移內存頁。
[0159] 示例地,所述CPU檢測到某內存頁的數組中本地CPU的訪問頻度為零,而正在發出 訪問請求的異地CPU的訪問頻度最高,則將該異地CPU指定為目標CPU,并將頁面遷移至所 述目標CPU對應的本地內存區域中,以便目標CPU通過QPI直接訪問本地內存獲取數據,提 高數據訪問的效率。
[0160] 需要說明的是,每個所述CPU對應的本地內存區域中的各內存頁被所述CPU訪問 的頻率小于等于預設門限值K ;在所述CPU訪目標內存頁時,處理器需要將所述CPU對所述 目標內存頁的訪問頻率加1,將其他訪問所述目標內存頁的CPU對所述目標內存頁的訪問 頻率均減1。即處理器在某CPU每次訪問內存頁時都需要將該CPU對內存頁的訪問頻率增 加1,而將其它CPU對該內存頁的訪問頻率減1。另外,需要設置訪問頻率的預設門限值K, 以防止對某內存頁訪問頻率過大(例如,K = 3)。
[0161] 示例地,若服務器的處理器包含4個CPU,如表1所示,內存頁p的訪問統計數據 為,CPU1 :2 ;CPU2 :3 ;CPU3 :1 ;CPU4 :1(即指定時間段內 CPU1、CPU2、CPU3、CPU4 對內存頁 p 的訪問次數依次為2、3、1、1),其中CPU3是本地CPU。
[0162] 表 1
[0163]
【權利要求】
1. 一種緩存管理方法,應用于非統一內存訪問架構NUMA設備,所述NUMA設備包含至少 兩個中央處理器CPU以及數據緩沖區,所述數據緩沖區包含至少兩個本地內存區域,每個 CPU對應一個本地內存區域,其特征在于,針對每個CPU,所述方法包括: 記錄本地CPU對應的本地內存區域中各內存頁被各CPU訪問的頻率; 檢測所述各內存頁中是否存在待遷移內存頁,其中,所述待遷移內存頁被所述本地CPU 訪問的頻率小于被其他CPU訪問的頻率; 若所述各內存頁中存在所述待遷移內存頁,則將對所述待遷移內存頁的訪問頻率最大 的CPU確定為目標CPU; 將所述待遷移內存頁遷移至所述目標CPU的本地內存區域。
2. 根據權利要求1所述的方法,其特征在于,所述檢測所述各內存頁中是否存在待遷 移內存頁具體包括: 檢測所述本地CPU的本地內存區域中是否存在被所述本地CPU訪問的頻率為零的內存 頁; 若存在,則將所述被所述本地CPU訪問的頻率為零的內存頁確定為所述待遷移內存 頁。
3. 根據權利要求1或2所述的方法,其特征在于,所述方法還包括: 所述本地CPU利用局部索引記錄所述本地CPU的本地內存區域中各內存頁在本地內存 區域中的存儲地址,與所述各內存頁的編號之間的對應關系;利用全局索引記錄所述本地 CPU的本地內存區域中各內存頁在除所述本地CPU的本地內存區域外的緩存區域中的存儲 地址,與所述各內存頁的編號之間的對應關系。
4. 根據權利要求3所述的方法,其特征在于,所述方法還包括: 所述本地CPU訪問其本地內存區域中的第一內存頁時,將所述本地CPU對所述第一內 存頁的訪問頻率值加1,將訪問所述第一內存頁的其他CPU對所述第一內存頁的訪問頻率 值均減1。
5. 根據權利1-4任一項所述的方法,其特征在于,所述將所述待遷移內存頁遷移至所 述目標CPU的本地內存區域具體包括: 若所述目標CPU的本地內存區域已飽和,且所述數據緩沖區的空閑內存不能容納內存 頁,則在所述目標CPU將所述目標CPU的本地內存區域中的一個內存頁刪除之后,所述本地 (PU再將所述待遷移內存頁遷移至所述目標CPU的本地內存區域。
6. 根據權利1-4任一項所述的方法,其特征在于,所述將所述待遷移內存頁遷移至所 述目標CPU的本地內存區域具體包括: 若所述目標CPU的本地內存區域已飽和,且所述數據緩沖區的空閑內存區域能容納至 少一個內存頁,則在所述目標CPU將所述目標CPU的本地內存區域中的一個內存頁遷移至 所述數據緩沖區的空閑內存區域中之后,所述本地CPU再將所述待遷移內存頁遷移至所述 目標CPU的本地內存區域。
7. 根據權利要求3所述的方法,其特征在于,所述方法還包括: 所述本地CPU生成數據訪問指令,所述數據訪問指令攜帶所述本地CPU的待訪問內存 頁的編號Μ ; 所述本地CPU檢測所述局部索引中是否記錄有編號為所述Μ的內存頁的存儲地址; 若所述局部索引中記錄有編號為所述Μ的內存頁的存儲地址,則根據記錄的編號為所 述Μ的內存頁的存儲地址獲取所述待訪問內存頁;若所述局部索引中沒有記錄編號為所述 Μ的內存頁的存儲地址,則檢測所述全局索引中是否記錄有編號為所述Μ的內存頁的存儲 地址; 若所述全局索引中記錄有編號為所述Μ的內存頁的存儲地址,則根據記錄的編號為所 述Μ的內存頁的存儲地址查找到所述待訪問內存頁。
8. 根據權利要求7所述的方法,其特征在于,若所述全局索引中沒有記錄編號為所述Μ 的內存頁的存儲地址,則所述本地CPU訪問物理磁盤,查找到所述待訪問內存頁。
9. 根據權利要求8所述的方法,其特征在于,在所述本地CPU則訪問物理磁盤,查找到 所述待訪問內存頁之后,所述方法還包括: 若所述本地CPU的本地內存區域已飽和,則判斷所述數據緩沖區是否飽和; 若判斷所述數據緩沖區未飽和,則將所述待訪問內存頁遷移至所述數據緩沖區中除所 述本地CPU的本地內存區域外的緩存區域。
10. -種緩存管理裝置,應用于非統一內存訪問架構NUMA設備,所述NUMA設備包含至 少兩個中央處理器CPU以及數據緩沖區,所述NUMA設備包含數據緩沖區,所述數據緩沖區 包含至少一個本地內存區域,每個CPU對應一個本地內存區域,其特征在于,包括: 記錄單元,用于記錄本地CPU對應的本地內存區域中各內存頁被各CPU訪問的頻率; 檢測單元,用于檢測所述各內存頁中是否存在待遷移內存頁,其中,所述待遷移內存頁 被所述本地CPU訪問的頻率小于被其他CPU訪問的頻率; 確定單元,用于在所述檢測單元檢測到所述各內存頁中存在所述待遷移內存頁之后, 將對所述待遷移內存頁的訪問頻率最大的CPU確定為目標CPU ; 遷移單元,用于將所述待遷移內存頁遷移至所述目標CPU的本地內存區域。
11. 根據權利要求10所述的緩存管理裝置,其特征在于, 所述檢測單元具體用于,檢測所述本地CPU的本地內存區域中是否存在被所述本地 (PU訪問的頻率為零的內存頁; 所述確定單元具體用于,在所述檢測單元檢測到所述本地CPU的本地內存區域中存在 被所述本地CPU訪問的頻率為零的內存頁之后,將所述被所述本地CPU訪問的頻率為零的 內存頁確定為所述待遷移內存頁。
12. 根據權利要求10或11所述的緩存管理裝置,其特征在于, 所述記錄單元還用于,利用局部索引記錄所述本地CPU的本地內存區域中各內存頁在 本地內存區域中的存儲地址,與所述本地CPU的本地內存區域中各內存頁的編號之間的對 應關系;利用全局索引記錄所述各內存頁在除所述本地CPU的本地內存區域外的緩存區域 中的存儲地址,與所述各內存頁的編號之間的對應關系。
13. 根據權利要求12所述的緩存管理裝置,其特征在于, 所述記錄單元還用于,在所述本地CPU訪問其本地內存區域中的第一內存頁時,將所 述本地CPU對所述第一內存頁的訪問頻率值加1,將其他訪問所述第一內存頁的CPU對所述 第一內存頁的訪問頻率值均減1。
14. 根據權利要求10-13任一項所述的緩存管理裝置,其特征在于, 所述遷移單元具體用于,若確定所述目標CPU的本地內存區域已飽和,且所述數據緩 沖區的空閑內存不能容納內存頁,則在所述目標CPU將所述目標CPU的本地內存區域中的 一個內存頁刪除之后,再將所述待遷移內存頁遷移至所述目標CPU的本地內存區域。
15. 根據權利要求10-13任一項所述的緩存管理裝置,其特征在于, 所述遷移單元具體用于,若確定所述目標CPU的本地內存區域已飽和,且所述數據緩 沖區的空閑內存區域能容納至少一個內存頁,則在所述目標CPU將所述目標CPU的本地內 存區域中的一個內存頁遷移至所述數據緩沖區的空閑內存區域中之后,再將所述待遷移內 存頁遷移至所述目標CPU的本地內存區域。
16. 根據權利要求12所述的緩存管理裝置,其特征在于, 還包括生成單元和獲取單元, 所述生成單元,用于生成數據訪問指令,所述數據訪問指令攜帶所述本地CPU的待訪 問內存頁的編號Μ ; 所述檢測單元還用于,檢測所述局部索引中是否記錄有編號為所述Μ的內存頁的存儲 地址; 所述獲取單元用于,在所述檢測單元確定所述局部索引中記錄有編號為所述Μ的內 存頁的存儲地址之后,根據記錄的編號為所述Μ的內存頁的存儲地址獲取所述待訪問內存 頁; 所述檢測單元還用于,在確定所述局部索引中沒有記錄編號為所述Μ的內存頁的存儲 地址,檢測所述全局索引中是否記錄有編號為所述Μ的內存頁的存儲地址; 所述獲取單元還用于,在所述檢測單元確定所述全局索引中記錄有編號為所述Μ的內 存頁的存儲地址之后,根據記錄的編號為所述Μ的內存頁的存儲地址查找到所述待訪問內 存頁。
17. 根據權利要求16所述的緩存管理裝置,其特征在于, 所述獲取單元還用于,在所述檢測單元確定所述全局索引中沒有記錄編號為所述Μ的 內存頁的存儲地址之后,訪問物理磁盤,查找到所述待訪問內存頁。
18. 根據權利要求16所述的緩存管理裝置,其特征在于, 所述檢測單元還用于,在確定所述本地CPU的本地內存區域已飽和之后,判斷所述數 據緩沖區是否飽和; 所述遷移單元具體用于,在所述檢測單元判斷所述數據緩沖區未飽和之后,將所述待 訪問內存頁遷移至所述數據緩沖區中除所述本地CPU的本地內存區域外的緩存區域。
【文檔編號】G06F13/16GK104156322SQ201410382467
【公開日】2014年11月19日 申請日期:2014年8月5日 優先權日:2014年8月5日
【發明者】周烜, 朱閱岸, 程廣衛 申請人:華為技術有限公司