一種適用于numa架構內多節點間訪存延時平衡的內存分配方法及延時感知-內存分配裝置的制造方法
【技術領域】
[0001] 本發明涉及一種對NUMA架構服務器的內存分配,更特別地說,是指一種適用于 Linux操作系統的NUMA架構服務器的訪存延時平衡的內存分配方法。
【背景技術】
[0002] 隨著多核架構的普及和發展,NUMA(NonUniformMemoryAccessArchitecture, 非統一內存訪問架構)多核架構憑借其本地訪存低延時的優勢,被各大數據中心以及科學 計算集群廣泛采用。但是NUMA復雜的結構導致操作系統管理內存更加復雜。雖然Linux 操作系統可以充分利用NUMA多核架構的本地訪存低延時的特點,但是多個內存節點間的 訪存延時平衡問題還沒有解決。如何有效地管理NUMA多核架構下內存資源的使用已經是 Linux操作系統開發的關鍵所在。
[0003]參考"Intelif.64andIA-32ArchitecturesOptimizationReferenceManual", 序號248966-030, 2014年9月。在此手冊的圖B-5和圖B-6中公開了NUMA多核架構中包 含GQ(GlobalQueue,全局隊列)單元的示意圖。GQ單元用于緩存Core單元中未命中兩級 緩存(L1、L2)的訪存請求(memoryrequests)。
[0004] 訪存延時(memoryaccesslatency)是多核架構下影響應用性能(application performance)的重要因素,在NUMA多核架構下尤為突出。NUMA多核架構緩解了多核對同 一個內存控制器(MC)的爭用,但是多個內存節點之間的訪存延時不平衡導致運行的多 個應用進程(process)之間共享內存資源的不公平性,進而增大進程應用性能(process performance)的差異,從而導致整體應用性能(applicationperformance)的波動。 Linux操作系統的內存分配方法在分配內存時只考慮內存節點可分配的內存容量(memory capacity),這樣會造成內存節點間的訪存延時(memoryaccesslatency)的不平衡。因 此,有效地保持多個內存節點的訪存延時(memoryaccesslatency)平衡是非常重要的。 在支持NUMA多核架構的Linux操作系統的內存分配方法,需要直接獲取訪存延時(memory accesslatency)是比較困難的,因此需要一種感知訪存延時的內存分配方法是解決問題 的關鍵。
【發明內容】
[0005] 本發明的目的之一是設計了一種適用于NUMA架構內多節點間訪存延時平衡的延 時感知-內存分配裝置,該裝置包括有延時感知單元(1)和內存分配單元(2)。所述延時感 知單元(1)由事件監控模塊(11)和延時獲取模塊(12)組成。所述內存分配單元(2)由平 衡狀及延時最小生成模塊(21)和內存節點選取模塊(22)組成。所述延時感知單元(1)內 嵌在NUMA多核架構的GQ單元。所述內存分配單元(2)內嵌在Linux操作系統中。Linux 操作系統運行于NUMA多核架構中。
[0006] 本發明的目的另一是提出了一種適用于NUMA架構內多節點間訪存延時平衡的內 存分配方法,該方法是針對含多個內存節點的NUMA多核架構服務器,處于不同訪存延時平 衡狀態時進行的內存分配的處理。訪存延時是借助GQ單元中訪存請求的平均滯留時間得 到訪存延時。本發明方法通過延時感知單元(1)周期性地感知內存節點間的訪存延時,使 得內存分配單元(2)獲取各個內存節點的訪存延時是否平衡,并根據平衡狀態選擇內存分 配節點(目標內存節點),最后輸出給Linux操作系統的Buddy內存分配器,實現物理內存 的分配。本發明方法中的延時感知周期(latencyawarenessperiod)能夠根據平衡狀態 的變化頻率做出適應性地調整,并且將延時感知單元(1)設置為系統自啟動或者手動啟動 兩種。本發明方法針對NUMA多核架構服務器,在保證訪存延時平衡的前提下,穩定了應用 性能(applicationperformance),降低了應用進程間共享內存的不公平性。
[0007] 本發明設計了一種適用于NUMA架構內多節點間訪存延時平衡的延時感知-內存 分配裝置,其特征在于:該裝置包括有延時感知單元(1)和內存分配單元(2);所述延時感 知單元(1)由事件監控模塊(11)和延時獲取模塊(12)組成;所述內存分配單元(2)由平 衡狀及延時最小生成模塊(21)和內存節點選取模塊(22)組成;所述延時感知單元(1)內 嵌在NUMA多核架構的GQ單元;所述內存分配單元(2)內嵌在Linux操作系統中;Linux操 作系統運行于NUMA多核架構中;
[0008] 事件監控模塊(11) 一方面用于采集GQ單元的硬件事件,并記錄下所述硬件事件 對應的事件計數值,即GQ事件計數序列EVENI^i{evA-1evB-' . . .,evN-,;另一方面將事 件計數值輸出給延時獲取模塊(12);
[0009] 延時獲取模塊(12) -方面用于接收GQ事件計數序列EVENTGQ ={evA-GQ,evB-,...,evN-GQ},另一方面對EVENTGQ= {θνΑΛθνΒΛ. . .,evN-,中的事件計數值進行比值處 理,得到訪存延時序列CYCLES()= {CYAJM),CYBJ:Q,. . .,CYNJM)};最后將CYCLES()輸出給平衡狀及 延時最小生成模塊(21);
[0010]對于A-GQ單元的事件計數值evA-GQ={ortA-GQ,artA-1owtA-GQ,awtA-GQ,opptA- 'apptAJ:Q}采用
-,得到讀請求的平均訪存延時
辱到寫請求
的平均訪存延時 到遠端訪存請求的平均訪存延時η采 C}'ClL ;>pt , 月
2表征訪存延時;
[0011]對于B-GQ單元的事件計數值evB-GQ={ortB-GQ,artB-1owtB-GQ,awtB-GQ,opptB- 'apptBJ:Q}采用
,得到讀請求的平均訪存延時
-得到寫請求 的平均訪存延時
I到遠端訪存請求的平均訪存延時采 用
表征訪存延時;
[0012] 對于N-GQ單元的事件計數值evN-GQ={ortN-GQ,artN-1owtN-GQ,awtN-GQ,opptN- 〇rtN-GQ
,apptNJ:Q}采用~^,得到讀請求的平均訪存延時 得到寫請求 artN-GQ < 的平均訪存延時
#到遠端訪存請求的平均訪存延時
,采 用
'表征訪存延時;
[0013] 平衡狀態及延時最小生成模塊(21)第一方面接收訪存延時序列0¥〇^()={0¥ ;'-,CYBJM),. . .,CYNJM)},第二方面采用快排序算法對訪存延時序列0¥0^()={0¥ ;'-(:(),〇¥8-,...,CYNJ:Q}進行從小到大的排序,得到排序后的訪存延時序列H_CYCLESQ={CYΑΛCYB- ,...,CYN-SQ};第三方面,選取所述H_CYCLESQ中的第一個訪存延時CZ|e和最后一個訪存 延時CTf^第四方面,采用模糊邊界方法,對CTjf與crj0作比,得到平衡狀態的屬性3 ={True,False};并將S= {True,False}輸出給內存節點選取模塊(22);第五方面,依 據ICYCLE?^{CYΑΛCYB-'. ..,CYN-3中的延時順序,得到內存節點標識序列DST?^ {NameA-1NameB-GQ,…,NameN-GQ};第六方面,選取DST0^ {NameA-GQ,NameB-1…,NameN-中 的第一個內存節點標識號,記;并將輸出給內存節點選取模塊(22); 所述的_;?02°對應的是按從小到大排序得到的ICYCLE?^{CYAJM),CYBJiQ,. . .,CYNJiQ}中 的首個;
[0014] 所述模糊邊界中,若CKp-S ,則平衡狀態的屬性記為多個 內存節點的訪存延時平衡,符號為True;LeVel_diff表示同一級別的模糊邊界閾值;
[0015] 所述模糊邊界中,若>LevWj/,,則平衡狀態的屬性記為多個 內存節點的訪存延時不平衡,符號為False;
[0016] 內存節點選取模塊(22)第一方面接收S= {True,False}和;第二方面 依據S= {True,False}來選取內存目標節點;若S=True,貝IJ直接選擇本地內存節點作為 內存分配的內存目標節點;若S=False,則選擇Abwdf對應的內存作為內存分配的內存 目標節點;第三方面,將選取的內存目標節點輸出給Linux操作系統的Buddy內存分配器。
[0017] 本發明設計的延時感知-內存分配裝置的優點在于:
[0018]①通過在Linux操作系統中擴展內存分配單元(2),使得已有的Linux操作系統能 夠感知多個內存節點間的訪存延時平衡狀態。在已有的Linux操作系統中通過軟件編程得 到內存分配單元(2),使Linux內核的改動很小,不會給內核造成很大的負擔。
[0019]②通過在NUMA多核架構的GQ單元中擴展延時感知單元(1),并由延時感知單元 (1)來采集多個GQ單元的訪存請求(memoryrequests)的平均滯留時間(averagestill eye1es),并依據平均滯留時間來得到各個內存節點的訪存延時。
[0020]本發明提出的適用于NUMA多核架構內多節點間訪存延時平衡的內存分配方法的 優點在于:
[0021] ①采用快排序算法對訪存延時序列進行從小到大的排序,降低了排序對Linux操 作系統帶來的開銷。
[0022] ②采用模糊邊界方法來計算平衡狀態,保證了平衡狀態的穩定性。
[0023] ③應用目標內存節點來進行內存分配,保證進程所分配到的內存頁面在同一個內 存節點上,同時保證進程間共享內存的公平性。
【附圖說明】
[0024] 圖1是本發明延時感知-內存分配裝置與NUMA多核架構服務器和Linux操作系 統的關系框圖。
[0025] 圖2是本發明多節點間訪存延時平衡的內存分配方法及延時感知-內存分配裝置 的結構圖。
[0026] 圖3A是stream在非延時感知分配下運行的各個進程的性能降低比值示意圖。
[0027] 圖3B是stream在訪存延時平衡的分配下運行的各個進程的性能降低比值示意 圖。
[0028] 圖3C是stream在有無延時感知分配下運行的進程間不公平的對比示意圖。
【具體實施方式】
[0029] 下面將結合附圖和