本發(fā)明涉及計算機領(lǐng)域的共享緩存調(diào)控,特別是涉及在緩存分配技術(shù)下的共享緩存的分配方法、裝置、介質(zhì)以及設(shè)備。
背景技術(shù):
高速緩存的作用在于加速訪存速度,在現(xiàn)在多核處理器架構(gòu)中,往往采用多級緩存架構(gòu)。如intelx86架構(gòu)的cpu,每個核會有獨占的l1,l2緩存,所有核會共享l3緩存。在實際使用中,不同的核上往往會運行不同的線程,它們會在共享緩存上產(chǎn)生競爭。傳統(tǒng)的lru策略對所有訪存一視同仁,這會導(dǎo)致緩存污染的問題,即某一個程序可能會侵占大量緩存,導(dǎo)致其他程序性能下降。學(xué)術(shù)界對此進行了大量研究,但大部分都需要在硬件層進行改動,無法在商用處理器得到應(yīng)用。2016年intel在第四代xeon處理器全線引入了緩存分配技術(shù)(cacheallocationtechnology,cat),在硬件層面對共享緩存管理提供了支持。如何利用新型的cat工具,對緩存進行調(diào)控和優(yōu)化是一個很有意義的問題。
因為現(xiàn)在的處理器并不是順序把物理地址映射到高速緩存上,而是采用哈希的算法。所以“頁面著色”在現(xiàn)在的處理器架構(gòu)下已經(jīng)不再適用。這樣操作系統(tǒng)就無法通過“著色”來控制緩存的位置。同時該方法的額外開銷較大,也沒有被linux內(nèi)核所采用。
技術(shù)實現(xiàn)要素:
針對現(xiàn)有技術(shù)中的上述問題,本發(fā)明提供了一種新的共享緩存的分配方法,可以利用cat高效地管理共享緩存。
根據(jù)本發(fā)明實施例的基于cat的共享緩存的分配方法,該方法包括獲得多個程序在cat分配下的緩存失效率;基于所述多個程序在cat分配下的緩存失效率,計算共享緩存的分配方案;根據(jù)所述共享緩存的所述分配方案分配所述多個程序的緩存。
本發(fā)明的方法使用英特爾的緩存分配技術(shù),對并發(fā)執(zhí)行的程序進行自動化的緩存分配調(diào)優(yōu),可以適用于多種多樣的優(yōu)化目標,比如增大吞吐量、降低失效率或者保證qos(服務(wù)質(zhì)量,qualityofservice)。
根據(jù)本發(fā)明實施例的基于cat的共享緩存的分配方法,進一步包括通過模擬退火算法計算所述共享緩存的分配方案。
根據(jù)本發(fā)明實施例的分配方法的模擬退火算法包括,初始化溫度值并隨機產(chǎn)生分配方案;產(chǎn)生所述分配方案的相鄰分配方案;c.判斷所述相鄰分配方案的指標數(shù)值是否優(yōu)于所述分配方案的指標數(shù)值,如果判斷為是,則選擇所述相鄰分配方案;如果判斷為否,則以概率判斷是否選擇所述相鄰分配方案;d.降低溫度值,并判斷所述溫度值是否低于預(yù)定的閾值,如果判斷為是,則選擇當前的分配方案,如果判斷為否,則返回步驟b。
根據(jù)本發(fā)明實施例的模擬退火算法進一步包括以概率判斷是否選擇所述相鄰分配方案包括做如下的概率判斷exp(-△/(kt))≤random(0,1),其中δ是所述相鄰分配方案的指標數(shù)值與所述分配方案的指標數(shù)值的差值,k是常數(shù),t是溫度值;如果判斷為是,則選擇所述相鄰分配方案,如果判斷為否,則轉(zhuǎn)到步驟d。
通過搜索算法尋找近似最優(yōu)解,而不是直接計算出最優(yōu)解?;谀M退火算法,實現(xiàn)針對多種優(yōu)化目標的搜索近似最優(yōu)解算法,在較小的時間空間開銷內(nèi),產(chǎn)生一個優(yōu)化決策。模擬退火算法通過隨機走動和逐漸降溫,找到一個全局較優(yōu)分配。該算法可以有效地避免陷入局部最優(yōu)解,它能在較短地時間內(nèi)找出一個全局的較優(yōu)解。
根據(jù)本發(fā)明實施例的基于cat的共享緩存的分配裝置包括獲取模塊,獲得多個程序在cat分配下的緩存失效率;計算模塊,基于所述多個程序在cat分配下的緩存失效率,計算共享緩存的分配方案;以及分配模塊,根據(jù)所述共享緩存的分配方案分配所述多個程序的緩存。
其中,計算模塊包括模擬退火算法模塊。
其中,模擬退火算法模塊進一步包括初始化模塊,初始化溫度值并隨機產(chǎn)生分配方案;產(chǎn)生模塊,產(chǎn)生所述分配方案的相鄰分配方案;判斷模塊,判斷所述相鄰分配方案的指標數(shù)值是否優(yōu)于所述分配方案的指標數(shù)值,如果判斷為是,則選擇所述相鄰分配方案;如果判斷為否,則以概率判斷是否選擇所述相鄰分配方案;第二判斷模塊,降低溫度值,并判斷所述溫度值是否低于預(yù)定的閾值,如果判斷為是,則選擇當前的分配方案,如果判斷為否,則由所述產(chǎn)生模塊產(chǎn)生新的相鄰分配方案。
其中,判斷模塊進一步包括概率判斷模塊,所述概率判斷模塊做出以下概率判斷
exp(-△/(kt))≤random(0,1)
其中δ是所述相鄰分配方案的指標數(shù)值與所述分配方案的指標數(shù)值的差值,k是常數(shù),t是溫度值;如果判斷為是,則選擇所述相鄰分配方案,如果判斷為否,則由所述第二判斷模塊進行判斷。
根據(jù)本發(fā)明的技術(shù)方案,對并發(fā)執(zhí)行的程序的共享緩存的分配方案進行計算,并且通過模擬退火算法,在較短地時間內(nèi)找出一個全局的較優(yōu)解,并且可以適用于多種多樣的,如增大吞吐量、降低失效率或者保證qos的優(yōu)化目標。
附圖說明
圖1是根據(jù)本發(fā)明的實施例的共享緩存分配方法示意圖;
圖2是根據(jù)本發(fā)明的實施例的共享緩存分配方法的模擬退火算法示意圖;
圖3是根據(jù)本發(fā)明的實施例的共享緩存分配裝置的示意圖。
具體實施方式
下面將結(jié)合附圖,對本發(fā)明的實施例進行詳細說明。
根據(jù)本發(fā)明實施例的共享緩存分配方法如圖1所示。該方法包括以下步驟,在步驟s1,獲得多個程序在cat分配下的緩存失效率;步驟s2基于所述多個程序在cat分配下的緩存失效率,計算共享緩存的分配方案;最后步驟s3根據(jù)所述共享緩存的所述分配方案分配所述多個程序的緩存。
其中,步驟s1獲得多個程序在cat分配下的緩存失效率可以通過以下的方式進行。
首先,對每個程序的訪存序列進行采樣,采樣可以采用intelpin等工具進行靜態(tài)采樣;如果處理器有相關(guān)硬件,比如power(performanceoptimizationwithenhancedrisc)支持,可以在運行時進行采樣。
接下來,根據(jù)采樣結(jié)果的訪存序列,計算緩存失效率曲線mrc(missratecurve),即使用的緩存大小與失效率之間的關(guān)系。首先根據(jù)訪存序列,統(tǒng)計出重用距離直方圖。重用距離(reusedistance)定義為對同一數(shù)據(jù)的相鄰兩次訪問之間所間隔的訪問數(shù),可以用一個直方圖來統(tǒng)計一串訪存序列中每次重用的重用距離的分布,其橫坐標為重用距離,縱坐標為頻率。
對于lru(leastrecentlyused)策略下的全相聯(lián)緩存,該訪存序列在不同緩存大小下的命中次數(shù)可以直接由重用距離直方圖精準地推算出來。程序在理想狀態(tài)下的緩存失效率可以由如下公式算出:
其中x是緩存大小,i是重用距離。
雖然真實硬件存在多級緩存、組相聯(lián)設(shè)計、包含型緩存、數(shù)據(jù)預(yù)取以及非嚴格lru等諸多影響因素,上述測量值會和真實值有所偏差,但上述方法仍能較為準確地刻畫出真實情況下的緩存特性。
本發(fā)明根據(jù)直方圖計算出mrc,通過直方圖計算mrc是準確率相對較高的一種方法。也可以采用例如rapidmrc的方法獲得mrc(tamdk,azimir,soareslb,etal.rapidmrc:approximatingl2missratecurvesoncommoditysystemsforonlineoptimizations[c]//acmsigarchcomputerarchitecturenews.acm,2009,37(1):121-132.)。
接下來,在得到mrc以后,通過迭代算法來計算在多個程序在cat分配下的緩存失效率。迭代算法通過真實緩存占用與失效率的互相推導(dǎo),在多次迭代以后找到均衡狀態(tài)下,這個狀態(tài)下的緩存占用和失效率即是真實結(jié)果。該算法實際上模擬了緩存預(yù)熱的過程,每一輪迭代相當于模擬少量的訪存,通過計算失效次數(shù),可以推導(dǎo)出當輪結(jié)束以后,每個程序的實際占用,然后再用這個占用結(jié)果,來推導(dǎo)下一輪失效率,最終收斂的結(jié)果就是穩(wěn)定狀態(tài)下的失效率。還可以根據(jù)失效率進一步推導(dǎo)出程序的執(zhí)行效率,程序的執(zhí)行效率用周期指令數(shù)(instructionspercycle,ipc)來表示。
對于本領(lǐng)域的技術(shù)技術(shù)人員而言,獲得多個程序在cat分配下的緩存失效率不僅限于上述的方法。
以下,對根據(jù)本發(fā)明實施例的共享緩存分配方法進行進一步說明。根據(jù)本發(fā)明實施例的方法,基于上述獲得的多個程序的緩存失效率,通過模擬退火算法來計算對于多個程序的緩存分配方案。
由于潛在的分配數(shù)量極其巨大,無法通過樸素的搜索來找到最優(yōu)分配。通過模擬退火算法,在較小的時間空間開銷下,找到一個近似最優(yōu)解。該算法基于多個程序的緩存失效率,通過隨機走動和逐漸降溫,找到一個全局較優(yōu)分配。如果把一個分配看成一個狀態(tài),如果另一個分配與它相差一個分配單位,可以認為兩個分配為相鄰狀態(tài)(在cat下,緩存的路多一個或少一個)。模擬退火算法從一個初始的隨機狀態(tài)開始,每一輪找一個相鄰狀態(tài)進行嘗試,如果相鄰的狀態(tài)更優(yōu),則跳到該狀態(tài),否則有一定概率依然跳轉(zhuǎn),該概率決定于當前的溫度。初始溫度較高時,所以跳到更差狀態(tài)的概率較大,隨著溫度逐漸降低,跳躍到較差解的概率也逐漸降低。該算法可以有效地避免陷入局部最優(yōu)解,它能在較短地時間內(nèi)找出一個全局的較優(yōu)解。
圖2是根據(jù)本發(fā)明實施例的模擬退火算法的流程圖。如圖2所示,在步驟s21,設(shè)定初始的溫度值t,然后在步驟s22隨機產(chǎn)生一個分配方案s,并且根據(jù)該分配方案計算器指標數(shù)值m,指標數(shù)值m可以是吞吐量、緩存失效數(shù)、ipc等。接下來,步驟s23中,隨機生成一個分配方案s’,該分配方案s’是分配方案s的相鄰分配方案。同樣,s’的指標數(shù)值m’也要被計算出來,即步驟s24。通過在步驟s25中比較兩個分配方案的指標數(shù)值,對這兩種分配方案的優(yōu)劣做出判斷。如果步驟s25中判斷為是,就表示相鄰分配方案s’優(yōu)于隨機生成的方案s,這時,在步驟s26中,選擇相鄰分配方案s’作為當前的分配方案。
進一步的,由于溫度t是一個遞減的函數(shù),通過降低溫度t,降低得到較差解的概率,最終找到一個全局最優(yōu)解。如圖2所示,在步驟s27中,降低溫度值t,并且在步驟s28判斷溫度值t是否低于預(yù)定的閾值,該閾值可以根據(jù)實際情況來調(diào)整。如果步驟s28的判斷為是,則表示當前生成的分配方案能夠滿足業(yè)務(wù)需求,將當前的方案作為結(jié)果輸出。如果s28的判斷為否,則返回步驟s23,根據(jù)當前的分配方案重新生成相鄰分配方案,程序循環(huán),直至輸出最終的分配方案。
在上述過程中,如果步驟s25的判斷為否,則需要進一步在步驟s30做出如下概率判斷。
exp(-△/(kt))≤random(0,1)
其中,△是兩個分配方案的指標數(shù)值的差值,k是根據(jù)具體業(yè)務(wù)和實際需要設(shè)定的常數(shù)。
如果s30的判斷為是,則表示跳到更差狀態(tài)的概率較小,則程序轉(zhuǎn)到步驟s26,更新當前的分配方案,如果s30的判斷為否,則表示跳到更差狀態(tài)的概率較大,程序轉(zhuǎn)到步驟s27,通過降低溫度以減小跳到更差狀態(tài)的概率。
圖3是根據(jù)本發(fā)明的實施例的共享緩存分配裝置的示意圖。如圖3所示,預(yù)測裝置包括獲取模塊31,計算模塊32以及分配模塊33。獲取模塊31獲得多個程序在cat分配下的緩存失效率;計算模塊32基于所述多個程序在cat分配下的緩存失效率,計算共享緩存的分配方案;分配模塊33根據(jù)所述共享緩存的所述分配方案分配所述多個程序的緩存。
圖3所示僅僅是本發(fā)明的一種實現(xiàn)方式,除了圖中已經(jīng)示出的單元外,系統(tǒng)還可以包括其他未示出的單元、模塊和/或組件。
根據(jù)本發(fā)明的又一實施例,還包括一種計算機可讀存儲介質(zhì),該存儲介質(zhì)存儲有基于cat的共享緩存的分配程序,所述預(yù)測程序被計算機執(zhí)行以實施如圖1所述的基于cat的共享緩存的分配方法。
根據(jù)本發(fā)明的又一實施例,還包括一種基于cat的共享緩存的分配設(shè)備,該設(shè)備包括存儲器,存儲器存儲有基于cat的共享緩存的分配程序;以及處理器,該處理器執(zhí)行基于cat的共享緩存的分配程序以實施如上所述的基于cat的共享緩存的分配方法。
雖然經(jīng)過對本發(fā)明結(jié)合具體實施例進行描述,對于本領(lǐng)域的技術(shù)技術(shù)人員而言,根據(jù)上文的敘述后作出的許多替代、修改與變化將是顯而易見。因此,當這樣的替代、修改和變化落入附后的權(quán)利要求的精神和范圍之內(nèi)時,應(yīng)該被包括在本發(fā)明中。