郭曉梅
[摘要]目前,大數(shù)據(jù)的高性能處理日益重要,本文通過實(shí)驗(yàn),對(duì)非均勻存儲(chǔ)訪問的各種情況進(jìn)行了詳細(xì)深入的研究,對(duì)訪問時(shí)間差別進(jìn)行了深入的分析,揭示了在非均勻存儲(chǔ)訪問系統(tǒng)中線程本地存儲(chǔ)訪問和遠(yuǎn)程存儲(chǔ)訪問的性能差異。發(fā)現(xiàn)了讀寫內(nèi)存、不同訪問距離等各種情況下線程內(nèi)存訪問的性能特點(diǎn)。得出了在線程調(diào)度中的重要結(jié)論,對(duì)應(yīng)用程序在進(jìn)行大數(shù)據(jù)處理的線程調(diào)度執(zhí)行提出了重要的建議。
[關(guān)鍵詞]大數(shù)據(jù);非均勻存儲(chǔ)訪問;線程調(diào)度
[中圖分類號(hào)]C37 [文獻(xiàn)標(biāo)識(shí)碼]A [文章編號(hào)]1672-5158(2013)06-0031-02
引言
在當(dāng)今時(shí)代,互聯(lián)網(wǎng)迅猛發(fā)展,各行各業(yè)數(shù)據(jù)量猛增。數(shù)據(jù)種類繁多,數(shù)據(jù)量巨大,大數(shù)據(jù)時(shí)代來臨。隨著大數(shù)據(jù)的來臨,大數(shù)據(jù)處理成為越來越有價(jià)值的工作,而大數(shù)據(jù)的高性能處理則至關(guān)重要。
目前大數(shù)據(jù)處理大都采用多處理器系統(tǒng),而多處理器系統(tǒng)中的非均勻存儲(chǔ)訪問架構(gòu)為進(jìn)行大數(shù)據(jù)高性能處理的主流體系結(jié)構(gòu)之一。
1 非均勻存儲(chǔ)訪問技術(shù)特點(diǎn)
1.1 多處理器系統(tǒng)模式
在多處理器系統(tǒng)中,比較流行的有三種模式,即對(duì)稱多處理模式、大規(guī)模并行處理模式、非均勻存儲(chǔ)訪問模式。對(duì)稱多處理模式是在一個(gè)主存上連接著兩個(gè)或兩個(gè)以上的處理器,這些處理器共享一個(gè)主存,也被稱為均勻性存儲(chǔ)訪問系統(tǒng)。大規(guī)模并行處理模式是分布式存儲(chǔ)器模式,可擴(kuò)展性比較好,但是需要并行編程和并行編譯,在軟件系統(tǒng)構(gòu)建上比較復(fù)雜,使用不便。非均勻存儲(chǔ)訪問架構(gòu)是將若干個(gè)單元通過專門的互聯(lián)設(shè)備聯(lián)結(jié)在一起組成分布式和共享內(nèi)存系統(tǒng)。每一個(gè)處理器可以訪問自己?jiǎn)卧拇鎯?chǔ)器,也可以訪問其他單元的存儲(chǔ)器,所有訪存有遠(yuǎn)近、時(shí)延長短之分,稱為非均勻存儲(chǔ)訪問。
1.2 非均勻存儲(chǔ)訪問架構(gòu)的性能優(yōu)勢(shì)
非均勻存儲(chǔ)訪問架構(gòu)的性能優(yōu)勢(shì)主要體現(xiàn)在以下幾個(gè)方面:第一,非均勻存儲(chǔ)訪問處理器訪問同一單元上的內(nèi)存的速度比一般對(duì)稱多處理模式超出一倍。第二,非均勻存儲(chǔ)訪問的突破性技術(shù)徹底擺脫了傳統(tǒng)的超大總線對(duì)多處理結(jié)構(gòu)的束縛,它大大增強(qiáng)單一操作系統(tǒng)可管理的處理器、內(nèi)存和I/O插槽。最后,非均勻存儲(chǔ)訪問系統(tǒng)提供內(nèi)存互聯(lián)的硬件結(jié)構(gòu),這種技術(shù)可以開發(fā)新型動(dòng)態(tài)的分區(qū)系統(tǒng)。系統(tǒng)分區(qū)可以允許系統(tǒng)管理員根據(jù)用戶工作負(fù)荷的要求,簡(jiǎn)單地管理和使用CPU和內(nèi)存資源,從而達(dá)到最高的資源利用率和最佳的性能。正因?yàn)橐陨系脑?,非均勻存?chǔ)訪問架構(gòu)得到越來越廣泛的應(yīng)用。
2 非均勻存儲(chǔ)訪問技術(shù)線程訪問時(shí)間研究
非均勻存儲(chǔ)訪問系統(tǒng)的基本特征是具有多個(gè)CPU模塊,每個(gè)CPU模塊由多個(gè)核(如6個(gè))組成,并且具有獨(dú)立的本地內(nèi)存、I/O槽口等。由于其節(jié)點(diǎn)之間可以通過互聯(lián)模塊進(jìn)行連接和信息交互,因此每個(gè)CPU可以訪問整個(gè)系統(tǒng)的內(nèi)存。但是線程訪問遠(yuǎn)近程存儲(chǔ)器的時(shí)間是不一樣的。
我們使用的非均勻存儲(chǔ)訪問系統(tǒng)是四個(gè)主頻為2.2GHZ的雙核AMD opteron多處理器,每個(gè)處理器有2x1GB DDR400 DRAM內(nèi)存。如(圖1)所示。四個(gè)處理器由coherent HyperTransport(相關(guān)性超傳輸)總線連接,每個(gè)處理器有一條雙向HyperTransport(超傳輸)總線和I/O連接,兩條雙向相關(guān)性超傳輸總線分別和另外兩個(gè)雙核處理器連接。每個(gè)雙向超傳輸總線的數(shù)據(jù)傳輸帶寬為4 GB/s。系統(tǒng)有4個(gè)節(jié)點(diǎn)NO,N1,N2,N3。每個(gè)節(jié)點(diǎn)有自己的內(nèi)存控制器(MCT),連接著本節(jié)點(diǎn)的內(nèi)存。每個(gè)節(jié)點(diǎn)有2個(gè)核CO,c1,兩個(gè)核連接著一個(gè)系統(tǒng)需求接口(sRI),系統(tǒng)中間有一個(gè)交叉設(shè)備XBar,SRI、內(nèi)存控制器、各種各樣的超傳輸總線都和XBar連接。
在非均勻存儲(chǔ)訪問系統(tǒng)中,內(nèi)存需要可以來自于本節(jié)點(diǎn)的核,也可以通過超傳輸總線來自于其它節(jié)點(diǎn)的核。前者叫做本地訪問,對(duì)內(nèi)存的訪問要求從核到SRI,到XBAR,再到MCT;后者叫做遠(yuǎn)程訪問,內(nèi)存訪問要求的路線是從遠(yuǎn)程節(jié)點(diǎn)的核通過超傳輸總線到達(dá)XBAR,從XBAR再到MCT。每個(gè)節(jié)點(diǎn)的SRI、XBAR、MCT都有緩沖區(qū),緩沖區(qū)用來存放需要傳送的數(shù)據(jù)包。
在非均勻存儲(chǔ)訪問系統(tǒng)里,影響應(yīng)用程序處理大數(shù)據(jù)的性能主要有以下幾個(gè)方面:
①遠(yuǎn)程內(nèi)存訪問。處理器訪問遠(yuǎn)程存儲(chǔ)器的次數(shù)多少會(huì)直接影響一個(gè)應(yīng)用程序的性能。提高非均勻存儲(chǔ)訪問系統(tǒng)性能的策略之一就是減少遠(yuǎn)程訪問的次數(shù)。要盡可能地讓進(jìn)程在本節(jié)點(diǎn)執(zhí)行。
②相互連接的超傳輸總線帶寬的影響。
③內(nèi)存競(jìng)爭(zhēng)的影響。當(dāng)許多處理器在同一時(shí)刻訪問一個(gè)內(nèi)存單元的時(shí)候就會(huì)出現(xiàn)內(nèi)存競(jìng)爭(zhēng),內(nèi)存競(jìng)爭(zhēng)會(huì)增加內(nèi)存響應(yīng)時(shí)間,降低程序的執(zhí)行效率。恰當(dāng)?shù)臄?shù)據(jù)分配策略會(huì)減少內(nèi)存競(jìng)爭(zhēng)。
④內(nèi)存帶寬的影響。
⑤緩沖區(qū)影響。在非均勻存儲(chǔ)訪問多處理器系統(tǒng)中,緩沖區(qū)在性能上發(fā)揮著重要的作用。如果處理器在本地緩沖區(qū)中沒有找到需要的數(shù)據(jù),就會(huì)訪問遠(yuǎn)程的存儲(chǔ)器。
⑥系統(tǒng)中各種各樣緩沖區(qū)可容納緩沖隊(duì)列長度的影響。
2.1 遠(yuǎn)近程內(nèi)存訪問的時(shí)間差別
線程本地存儲(chǔ)器訪問和遠(yuǎn)程存儲(chǔ)器訪問時(shí)間究竟有多大的差別呢?我們先用一個(gè)例子來研究遠(yuǎn)近程內(nèi)存訪問的時(shí)間差別。
我們得到處理器所記錄的當(dāng)前時(shí)間的方法是使用時(shí)鐘周期數(shù)TSC的值乘以CPU的時(shí)鐘周期cycle來得到。就是在每次處理器啟動(dòng)的時(shí)候把TSC的值清零,然后每個(gè)時(shí)鐘周期TSC的值都加1,這樣要得到代碼執(zhí)行的周期數(shù)就在一段固定代碼執(zhí)行前后分別讀取TSC的值即可。用下列公式可以計(jì)算代碼執(zhí)行時(shí)間:
T=(TSC1-TSC2)·cycle
當(dāng)線程運(yùn)行和訪問內(nèi)存都在同一個(gè)節(jié)點(diǎn)時(shí),就叫做本地訪問或0-跳訪問。當(dāng)線程運(yùn)行在一個(gè)節(jié)點(diǎn),訪問內(nèi)存卻在其他節(jié)點(diǎn),就叫做遠(yuǎn)程訪問。在遠(yuǎn)程訪問中,如果線程運(yùn)行的節(jié)點(diǎn)和內(nèi)存訪問的節(jié)點(diǎn)是彼此直接連接的,就叫做1-跳訪問。如果線程運(yùn)行的節(jié)點(diǎn)和內(nèi)存訪問的節(jié)點(diǎn)不是直接連接的,就叫做2-跳訪問。如圖1中,線程在節(jié)點(diǎn)0運(yùn)行,則其對(duì)于節(jié)點(diǎn)1、2、3的訪問即為遠(yuǎn)程存儲(chǔ)器訪問,對(duì)節(jié)點(diǎn)1、2的內(nèi)存訪問叫做1-跳訪問,對(duì)節(jié)點(diǎn)3的內(nèi)存訪問叫做2-跳訪問。
我們采取了一段串行程序使用一個(gè)線程向不同節(jié)點(diǎn)存儲(chǔ)區(qū)域?qū)懭?M相同大小數(shù)據(jù)量的方法來測(cè)試訪問的時(shí)間,并且,每次實(shí)驗(yàn)我們重復(fù)了2000次。統(tǒng)計(jì)結(jié)果表明,本地存儲(chǔ)區(qū)域的訪問時(shí)間是最短的,平均為2166μs;而對(duì)于遠(yuǎn)程存儲(chǔ)區(qū)域的訪問則需要較長的時(shí)間,其中1、2節(jié)點(diǎn)的訪問時(shí)間平均達(dá)2445μs,而節(jié)點(diǎn)3,訪問距離最遠(yuǎn),訪問時(shí)間也最長,平均達(dá)3032μS。
由此實(shí)驗(yàn)可見,在非均勻存儲(chǔ)訪問系統(tǒng)中,訪問遠(yuǎn)程內(nèi)存的速度要慢于訪問本地內(nèi)存的速度。在本例中,1-跳距離的存儲(chǔ)訪問時(shí)間是本地存儲(chǔ)訪問的1.13倍,2-跳距離的存儲(chǔ)訪問時(shí)間是本地存儲(chǔ)訪問的1.4倍。訪問遠(yuǎn)程數(shù)據(jù)的距離越遠(yuǎn),付出的時(shí)間代價(jià)越高。我們?cè)趹?yīng)用程序中,盡量保持?jǐn)?shù)據(jù)在節(jié)點(diǎn)內(nèi)部訪問。
2.2 單線程只讀和只寫遠(yuǎn)近程存儲(chǔ)器的研究
如果對(duì)內(nèi)存的訪問為只讀或只寫,本地訪問和遠(yuǎn)程訪問時(shí)間有什么差別呢?我們用下面的例子來研究只讀和只寫訪問遠(yuǎn)近程存儲(chǔ)器的影響。
我們采取一段串行程序使用一個(gè)線程向不同節(jié)點(diǎn)存儲(chǔ)區(qū)域分別連續(xù)讀出和寫入60M相同大小數(shù)據(jù)量,讀寫入的大小要遠(yuǎn)遠(yuǎn)大于緩沖區(qū)大小。線程運(yùn)行在節(jié)點(diǎn)O的C0上。并且整個(gè)系統(tǒng)只有這一個(gè)線程運(yùn)行。線程的數(shù)據(jù)訪問分為以下幾種:
*線程本地訪問節(jié)點(diǎn)0內(nèi)存。(0-跳)
*線程遠(yuǎn)程訪問節(jié)點(diǎn)1內(nèi)存。(1-跳)
*線程遠(yuǎn)程訪問節(jié)點(diǎn)2內(nèi)存。(1-跳)
*線程遠(yuǎn)程訪問節(jié)點(diǎn)3內(nèi)存。(2-跳)
訪問時(shí)間結(jié)果表明,隨著訪問距離的增加,讀寫訪問的訪問時(shí)間都增加了。每種情況,寫訪問的時(shí)間都大于讀訪問的時(shí)間,因?yàn)閷懖僮鲿?huì)生產(chǎn)出更多的內(nèi)存帶寬負(fù)載。但是讀寫訪問的訪問時(shí)間都隨著訪問內(nèi)存距離的增加而增加。
2.3 節(jié)點(diǎn)間和節(jié)點(diǎn)內(nèi)線程調(diào)度訪問研究
如果是多線程,通過節(jié)點(diǎn)調(diào)度多線程有以下幾個(gè)制約因素:
*系統(tǒng)是否空閑,也就是系統(tǒng)有沒有其它負(fù)載;
*多線程是否訪問各自私有的數(shù)據(jù)。
*多線程是否訪問共享的數(shù)據(jù)。
我們先來研究系統(tǒng)空閑下線程只訪問本節(jié)點(diǎn)私有的數(shù)據(jù)。
我們使用2個(gè)線程進(jìn)行寫操作,每個(gè)線程都寫)260M的數(shù)據(jù),都訪問本節(jié)點(diǎn)的內(nèi)存。第一種方法是節(jié)點(diǎn)間調(diào)度,即一個(gè)線程在節(jié)點(diǎn)0的核0運(yùn)行,另一個(gè)線程在節(jié)點(diǎn)1的核0運(yùn)行;第二種方法是節(jié)點(diǎn)內(nèi)調(diào)度,即2個(gè)線程分別在節(jié)點(diǎn)0的核0和核1上運(yùn)行。比較兩個(gè)線程運(yùn)行的總時(shí)間。結(jié)果表明,節(jié)點(diǎn)間調(diào)度線程的執(zhí)行時(shí)間比較少。
隨后我們又使用8-CPU非均勻存儲(chǔ)訪問系統(tǒng)工作站(AMDOpteron 6168 1.9GHz processor,64G RAM,48 core,8節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)6個(gè)核)實(shí)驗(yàn)環(huán)境,使用6個(gè)線程進(jìn)行寫操作。都訪問本節(jié)點(diǎn)內(nèi)存,分上述兩種情況,即第一種方法是節(jié)點(diǎn)間調(diào)度,每個(gè)線程分別在6個(gè)節(jié)點(diǎn)的核0運(yùn)行,第二種方法是節(jié)點(diǎn)內(nèi)調(diào)度,6個(gè)線程都在節(jié)點(diǎn)0的每個(gè)核運(yùn)行。結(jié)果為,第一種情況執(zhí)行時(shí)間比較少。
在非均勻存儲(chǔ)訪問系統(tǒng)中,在空閑執(zhí)行環(huán)境下訪問私有的數(shù)據(jù),我們應(yīng)盡量避免使用第二種情況來調(diào)度線程。從負(fù)載平衡的角度來說,如果某一個(gè)節(jié)點(diǎn)負(fù)載過多,而其他節(jié)點(diǎn)空閑,必然會(huì)導(dǎo)致一個(gè)節(jié)點(diǎn)內(nèi)的資源產(chǎn)生競(jìng)爭(zhēng),從而影響應(yīng)用程序的執(zhí)行效率。
如果在空閑執(zhí)行環(huán)境下,各線程之間的數(shù)據(jù)共享,我們使用2個(gè)線程和6個(gè)線程在2種環(huán)境下分別進(jìn)行了測(cè)試。線程都訪問本節(jié)點(diǎn)內(nèi)存,第一種方法是節(jié)點(diǎn)間調(diào)度,一個(gè)線程在節(jié)點(diǎn)0的核0運(yùn)行,另一個(gè)線程在節(jié)點(diǎn)1的核0運(yùn)行;第二種方法是節(jié)點(diǎn)內(nèi)調(diào)度,2個(gè)線程分別在節(jié)點(diǎn)0的核0和核1上運(yùn)行。6個(gè)線程寫60M數(shù)據(jù)的兩種方法,第一種方法是節(jié)點(diǎn)間調(diào)度,每個(gè)線程分別在6個(gè)節(jié)點(diǎn)的核0運(yùn)行,第二種方法是節(jié)點(diǎn)內(nèi)調(diào)度,6個(gè)線程都在節(jié)點(diǎn)0的每個(gè)核運(yùn)行。結(jié)果表明,在節(jié)點(diǎn)內(nèi)調(diào)度線程的執(zhí)行時(shí)間比較少。因?yàn)楦骶€程之間數(shù)據(jù)共享,訪問內(nèi)存數(shù)據(jù)的距離越短,時(shí)間越少。所以我們?cè)诳臻e環(huán)境下進(jìn)行線程調(diào)度,各線程間數(shù)據(jù)共享,優(yōu)先從節(jié)點(diǎn)內(nèi)進(jìn)行調(diào)度,一個(gè)節(jié)點(diǎn)調(diào)度為完畢,再從另一個(gè)節(jié)點(diǎn)進(jìn)行調(diào)度。
對(duì)于上述實(shí)驗(yàn),我們?cè)谙到y(tǒng)有少量負(fù)載的情況下也做了相應(yīng)的實(shí)驗(yàn),取得了類似的結(jié)果。
由此可知,在非均勻存儲(chǔ)訪問系統(tǒng)中,在系統(tǒng)空閑的情況下,或者少量負(fù)載的情況下,對(duì)應(yīng)用程序進(jìn)行大數(shù)據(jù)處理提出如下建議:
*如果線程僅訪問本節(jié)點(diǎn)私有的數(shù)據(jù),優(yōu)先從節(jié)點(diǎn)間調(diào)度線程;
*如果線程間數(shù)據(jù)共享,優(yōu)先從節(jié)點(diǎn)內(nèi)調(diào)度線程,一個(gè)節(jié)點(diǎn)飽和后再從另一個(gè)節(jié)點(diǎn)進(jìn)行調(diào)度;
*如果線程需要訪問的既有獨(dú)立數(shù)據(jù)又有共享數(shù)據(jù),但私有數(shù)據(jù)遠(yuǎn)遠(yuǎn)大于共享數(shù)據(jù),優(yōu)先從節(jié)點(diǎn)間調(diào)度線程。
3 結(jié)束語
當(dāng)今,在互聯(lián)網(wǎng)及各行各業(yè)都存在著大量數(shù)據(jù)需要高性能處理,本文通過實(shí)驗(yàn)對(duì)非均勻存儲(chǔ)訪問技術(shù)進(jìn)行研究,發(fā)現(xiàn)了讀寫內(nèi)存、不同訪問距離等各種情況下線程內(nèi)存訪問的性能特點(diǎn)。得出了應(yīng)用程序在線程調(diào)度中的重要結(jié)論,對(duì)大數(shù)據(jù)的高性能處理有重要的指導(dǎo)意義。
參考文獻(xiàn)
[1]都志輝,高性能計(jì)算并行編程技術(shù)-MPI并行程序設(shè)計(jì),清華大學(xué)出版社,2001
[2]郭靜,祝永志,王延玲,基于MPI的動(dòng)態(tài)負(fù)載平衡算法的研究[J]計(jì)算機(jī)技術(shù)與發(fā)展,2009(05)