一種numa架構下平衡多線程間訪存延遲的調度系統(tǒng)及方法
【技術領域】
[0001]本發(fā)明屬于計算機體系結構下的多線程性能優(yōu)化領域,更具體的,涉及一種NUMA架構下平衡多線程間訪存延遲的調度系統(tǒng)及方法。
【背景技術】
[0002]非一致訪存(NUMA)架構是目前流行的商用服務器架構之一,它采用了分布式存儲器模式,且其中所有節(jié)點的處理器都可以訪問全部的物理內存,易于管理,可擴充性好,因此得到了廣泛的應用。
[0003]在NUMA架構中,每個CPU訪問的內存可以分為兩種:與CPU在同一個節(jié)點的內存稱為本地內存,訪問延遲非常低;與CPU在不同節(jié)點上的內存叫做遠端內存,對于遠端內存的訪問,CPU需要通過節(jié)點互聯(lián)的方式進行,所以其訪問延遲要比本地內存的訪問延遲長。這種訪存延遲的不一致性是NUMA架構的最主要特點,但它卻給程序的調度和運行帶來了困難,如果沒有得到合理的線程以及數據分配,那么很有可能導致該程序中所有的訪存操作都成為遠端訪存,從而經歷較大的訪存延遲,程序運行時間大大延長,使程序的性能大打折扣。當然,這些由于遠端訪存造成的延遲可以通過系統(tǒng)仔細地將程序的線程和它所用的數據協(xié)同調度進一步減少或消除。
[0004]針對程序在NUMA架構下運行的特殊性,目前已經提出了一些NUMA感知的調度算法。大部分NUMA感知的調度算法僅是針對單個線程,或者針對多個線程時僅單純地將各個線程獨立開來考慮,并沒有考慮到多線程并行時的同步問題。
[0005]對于運行過程中存在線程同步操作的多線程程序,在NUMA架構下運行時需要考慮各個線程的運行速度問題,如果在需要達到同步的線程中存在一些線程,由于執(zhí)行的遠端訪存較多,導致運行速度慢,那么該線程成為了拖累程序運行速度的關鍵線程,這個時候為了減少其他線程遠端訪存所做的工作,其對于最終程序所表現出來的整體性能并不能有很好的提高?,F有的針對NUMA架構下程序運行性能的優(yōu)化工具中,缺乏針對多線程之間訪存延遲均衡這一問題的優(yōu)化方式。相應地,本領域亟需尋找一種適用于NUMA架構下平衡多線程訪存延遲的方法。
【發(fā)明內容】
[0006]針對現有技術的以上缺陷或不足,本發(fā)明提出一種NUMA架構下平衡多線程間訪存延遲的調度系統(tǒng)及方法。利用本發(fā)明中的系統(tǒng)及方法,相應能夠有效解決由于NUMA架構下訪存行為的非一致性導致的多線程程序各線程間訪存延遲的不一致問題,顯著提高了 NUMA架構下分析調度的實時性,大大優(yōu)化了 NUMA架構下程序運行性能。
[0007]為實現上述目的,本發(fā)明一種NUMA架構下平衡多線程間訪存延遲的調度系統(tǒng),其特征在于,所述系統(tǒng)包括檢測模塊、采樣模塊、分析模塊、判斷模塊和調度模塊,其中,
[0008]檢測模塊,用于探測程序是否進入多線程并行執(zhí)行區(qū)域,還用于在探測程序進入多線程并行執(zhí)行區(qū)域后,啟動采樣模塊;
[0009]采樣模塊,用于對多線程程序運行過程中每個線程的訪存行為進行采樣,并將采樣過程中獲取的訪存信息保存;
[0010]分析模塊,一方面用于根據所述采樣模塊獲取的訪存信息,定期對所述多線程程序中各線程的訪存延遲不平衡度進行評估,還用于針對發(fā)生不平衡現象的多線程程序進行訪存行為分析,此外,所述分析模塊還用于根據所述采樣模塊獲取的訪存信息進行訪存規(guī)律分析;
[0011]判斷模塊,用于根據所述訪存延遲不平衡度判斷是否發(fā)生多線程間訪存延遲不平衡現象,同時,還用于在訪存延遲不平衡現象發(fā)生時進一步判斷線程訪問變量是否僅由一個線程訪問、線程訪問變量與訪問該變量的線程是否處于同一個節(jié)點及線程訪問變量大小是否小于第二閾值Size,此外,所述判斷模塊,還用于判斷程序多線程并行執(zhí)行的區(qū)域是否結束;
[0012]調度模塊,用于根據所述分析模塊的訪存行為分析和訪問規(guī)律分析,及判斷模塊的判斷結果對遠端訪存的線程訪問變量進行迀移調度至線程所在節(jié)點或使用交錯存放將其平均分配到各節(jié)點上。
[0013]作為進一步優(yōu)選的,所述訪存信息包括發(fā)起訪存行為的線程ID,訪存行為的目的地址,完成訪存行為所耗費的時鐘周期數和訪存行為的類型。
[0014]作為進一步優(yōu)選的,所述訪存延遲不平衡度具體為:
[001 5] ξτ= I DT-Davg I /Davg
[0016]其中,ξτ為線程T的訪存延遲不平衡度,Dt為線程T的平均訪存延遲,Davg為所有線程的平均訪存延遲。
[0017]作為進一步優(yōu)選的,所述訪存行為分析具體包括:
[0018]根據所述采樣模塊獲取的訪存信息,估計每個線程訪問變量的線程平均訪存延遲,并依次將線程平均訪存延遲最大的線程訪問變量交由判斷模塊進行處理。
[0019]作為進一步優(yōu)選的,所述訪問規(guī)律分析具體為:觀察多線程程序中每個線程訪問變量中是否沒有被多個線程共同訪問的線程訪問變量子塊。
[0020]作為進一步優(yōu)選的,所述采樣模塊還用于保存采樣過程中為線程訪問數據分配的內存大小及分配的內存地址。
[0021]按照本發(fā)明的另一個方面,提出了一種基于上述系統(tǒng)的NUMA架構下平衡多線程間訪存延遲調度系統(tǒng)的調度方法,其特征在于,包括以下步驟:
[0022](I)檢測模塊檢測程序是否進入多線程并行執(zhí)行區(qū)域,一旦發(fā)現程序處于多線程并行執(zhí)行區(qū)域,立即啟動采樣模塊;
[0023](2)采樣模塊持續(xù)對程序的多線程訪存行為進行采樣,并將采樣獲取的訪存信息根據線程ID進行分類并保存,根據訪存行為的時間順序為每個線程建立一個訪存事件流,并通過分析模塊不斷更新計算每個線程的平均訪存延遲;
[0024](3)分析模塊定期對各線程的訪存延遲不平衡度進行評估;
[0025](4)通過判斷模塊判斷各線程的訪存延遲不平衡度是否大于第一閾值Threshhold;若是,則跳轉至步驟(5),否則,繼續(xù)執(zhí)行步驟(3);
[0026](5)分析模塊對多線程程序進行訪存行為分析,根據估計的每個線程訪問變量的線程平均訪存延遲,選取線程平均訪存延遲最大的線程訪問變量,并將該線程訪問變量交由判斷模塊進行處理;
[0027](6)判斷模塊判斷所述線程訪問變量是否僅由一個線程訪問,若是,則跳轉至步驟
(7),否則跳轉至步驟(8)。
[0028](7)判斷模塊進一步判斷所述線程訪問變量與訪問該變量的線程是否處于同一個節(jié)點,若是,則返回步驟(5)分析模塊依次選取下一個訪存延遲最大的線程訪問變量進行訪存行為分析,否則,調度模塊將該線程訪問變量迀移至訪問該變量的線程所在節(jié)點;
[0029](8)判斷模塊進一步判斷所述線程訪問變量大小是否小于第二閾值Size,若是,則轉入步驟(9),否則轉入步驟(1);
[0030](9)將該線程訪問變量復制分發(fā)到NUMA架構下的各個節(jié)點;
[0031](10)分析模塊根據所述采樣模塊獲取的訪存信息對多線程程序進行訪問規(guī)律分析,若所述線程訪問變量中沒有被多個線程共同訪問的線程訪問變量子塊,則轉入步驟(10-1),否則轉入步驟(10-2);
[0032](10-1)將各線程訪問的線程訪問變量子塊分別存放到各線程所在的節(jié)點;
[0033](10-2)通過交錯存放將所述線程訪問變量平均分配到NAMU架構下的各個節(jié)點上;
[0034](11)判斷模塊判斷程序多線程并行執(zhí)行的區(qū)域是否結束,若否,則返回步驟(3)繼續(xù)執(zhí)行;否則調度結束。
[0035]作為進一步優(yōu)選的,所述訪存信息包括發(fā)起訪存行為的線程ID,訪存行為的目的地址,完成訪存行為所耗費的時鐘周期數和訪存行為的類型。
[0036]作為進一步優(yōu)選的,所述訪存延遲不平衡度具體為:
[0037]ξτ= I DT-Davg I /Davg
[0038]其中,ξτ為線程T的訪存延遲