專利名稱:一種基于隨機(jī)擾動的防餓死訪存請求喚醒方法
技術(shù)領(lǐng)域:
本發(fā)明主要涉及到面向多核處理器中訪存請求的調(diào)度方法領(lǐng)域,特指一種基于隨機(jī)擾動的防餓死訪存請求喚醒方法。
背景技術(shù):
在多核處理器中,Cache提高了處理器核與存儲器間數(shù)據(jù)交換的能力,但由于多個處理器核同時緩存同一數(shù)據(jù)塊副本,也帶來了數(shù)據(jù)不一致現(xiàn)象,給存儲器層次設(shè)計增加了困難,這就是所謂的Cache —致性問題。基于目錄的Cache —致性協(xié)議是目前很多處理器所采用的解決方法,它通過專用的目錄項來記錄和跟蹤數(shù)據(jù)塊的狀態(tài),從而清楚地知道哪些Cache應(yīng)該對請求做出何種操作。在目錄項中,數(shù)據(jù)塊的“忙”狀態(tài)是不可避免的一種狀態(tài),表明當(dāng)前的目錄項不能處理其他的訪存請求,必須要等待使該項置“忙”的請求完成。 當(dāng)從Cache來的訪存請求遇到目錄項為忙時,通常的處理方法是拒絕該請求的處理,直接將該請求返回到請求源,迫使請求源在適當(dāng)?shù)臅r機(jī)重發(fā)該請求。這種處理方法的好處是思路簡單直接、易于硬件實(shí)現(xiàn),缺點(diǎn)是將訪存請求打回到請求源,不僅占用了寶貴的網(wǎng)絡(luò)帶寬,增加了訪存延時,而且容易出現(xiàn)某些請求被反復(fù)打回而長期得不到處理造成饑餓的現(xiàn)象。為了解決這些問題,傳統(tǒng)的方法是在請求報文和目錄項中都增設(shè)優(yōu)先級。當(dāng)請求報文被多次打回后,其請求報文中的優(yōu)先級和目錄項中的優(yōu)先級都會逐漸增加,這時低于目錄項中優(yōu)先級的請求(表明是新接收到的請求)就會被拒絕處理,直到高優(yōu)先級的請求被處理完畢。這種處理方法雖然可以避免請求的餓死現(xiàn)象,但卻增加了請求報文和目錄項的寬度,由于一個系統(tǒng)中目錄項數(shù)比較多,由此帶來的硬件代價增加往往比較大,并且仍然有較多的低優(yōu)先級請求報文被打回而得不到及時處理,浪費(fèi)了網(wǎng)絡(luò)帶寬,增加了訪存延時。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題就在于針對現(xiàn)有技術(shù)存在的技術(shù)問題,本發(fā)明提供一種能夠消除訪存請求的餓死現(xiàn)象、降低訪存延時、減小硬件開銷和網(wǎng)絡(luò)帶寬占用的基于隨機(jī)擾動的防餓死訪存請求喚醒方法。為解決上述技術(shù)問題,本發(fā)明采用以下技術(shù)方案
一種基于隨機(jī)擾動的防餓死訪存請求喚醒方法,當(dāng)從Cache來的訪存請求遇到目錄項為忙時,令暫時不能處理的訪存請求進(jìn)入休眠狀態(tài),然后通過隨機(jī)擾動的請求方式將處于休眠狀態(tài)的訪存請求喚醒,使其重新進(jìn)入請求處理流水線。作為本發(fā)明的進(jìn)一步改進(jìn)
在訪存請求處理部分設(shè)置一個休眠請求緩存隊列SRQ,暫時不能處理的訪存請求進(jìn)入休眠請求緩存隊列SRQ并處于休眠狀態(tài);在休眠請求緩存隊列SRQ中等待的請求,從休眠請求緩存隊列SRQ的出口按順序被喚醒。
在休眠請求緩存隊列SRQ出口的請求不是直接進(jìn)入到請求處理流水線,而是再繼續(xù)等待一個隨機(jī)延時值后再進(jìn)入請求處理流水線。在休眠請求緩沖隊列SRQ的出口處設(shè)置一個隨機(jī)數(shù)發(fā)生器,隨機(jī)數(shù)發(fā)生器用來產(chǎn)生休眠喚醒的隨機(jī)擾動延時值。在所述隨機(jī)數(shù)發(fā)生器的輸出端設(shè)置一個計數(shù)器,所述計數(shù)器打入隨機(jī)數(shù)發(fā)生器產(chǎn)生的隨機(jī)值作為初始值,當(dāng)休眠請求緩沖隊列SRQ中有請求需要被喚醒時,計數(shù)器開始倒計時;計數(shù)器值為0時,該請求被喚醒。在所述請求處理流水線中協(xié)議處理器的入口處增加一個請求仲裁器,請求仲裁器用來對請求處理流水線中輸入請求緩沖器的請求和休眠請求緩沖隊列SRQ中的請求進(jìn)行仲裁。在所述請求仲裁器中,來自休眠請求緩沖隊列SRQ的請求具體更高的優(yōu)先級,即只要有來自休眠請求緩沖隊列SRQ的已喚醒的訪存請求,則優(yōu)先處理。 與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)在于本發(fā)明的基于隨機(jī)擾動的防餓死訪存請求喚醒方法,令暫時不能處理的訪存請求進(jìn)入休眠狀態(tài),并基于隨機(jī)擾動的請求方式將其喚醒。這樣,既消除了訪存請求的餓死現(xiàn)象,又避免了打回請求而造成的帶寬浪費(fèi)和訪存延時增加,從而實(shí)現(xiàn)了簡潔高效、無餓死現(xiàn)象的Cache —致性處理方法。
圖I是現(xiàn)有技術(shù)中典型協(xié)議處理控制器的結(jié)構(gòu)示意圖。圖2是應(yīng)用了本發(fā)明后的協(xié)議處理控制器的示意圖。圖3是本發(fā)明中休眠請求緩沖隊列的示意圖。圖4是本發(fā)明中隨機(jī)數(shù)發(fā)生器的邏輯結(jié)構(gòu)示意圖。
具體實(shí)施例方式以下將結(jié)合說明書附圖和具體實(shí)施例對本發(fā)明做進(jìn)一步詳細(xì)說明。本發(fā)明方法的基本原理為令暫時不能處理的訪存請求進(jìn)入休眠狀態(tài),并基于隨機(jī)擾動的請求方式將其喚醒。這樣,既消除了訪存請求的餓死現(xiàn)象,又避免了打回請求而造成的帶寬浪費(fèi)和訪存延時增加,從而實(shí)現(xiàn)了簡潔高效、無餓死現(xiàn)象的Cache —致性處理方法。 本發(fā)明是在訪存請求處理部分增加一個休眠請求緩存隊列SRQ (SleepingRequest Queue)。當(dāng)從Cache來的訪存請求遇到目錄項為忙時,不是直接打回到請求源,而是進(jìn)入休眠請求緩存隊列SRQ中等待被喚醒。在休眠請求緩存隊列SRQ中等待的請求,從休眠請求緩存隊列SRQ的出口按順序被喚醒,但被喚醒的請求暫時還不能直接進(jìn)入到請求處理流水線,而是再繼續(xù)等待一個隨機(jī)延時值,以防止其再次遇忙而休眠,打破訪存請求規(guī)律性的“喚醒一忙一休眠”循環(huán)。g卩,當(dāng)Cache發(fā)出訪存請求后,首先由輸入請求緩沖隊列(輸入請求緩沖器)接收并暫存,如果目錄項控制器可以接收新的請求來查詢,則從輸入請求緩沖隊列中調(diào)度相應(yīng)的請求進(jìn)行目錄項狀態(tài)查詢。如果目錄項狀態(tài)為“非忙”,則按正常處理流程進(jìn)行,形成該請求的響應(yīng)和新的目錄項狀態(tài)。如果目錄項狀態(tài)為“忙”,則該請求進(jìn)入到休眠請求緩存隊列中等待被喚醒。一旦休眠請求緩沖隊列中有請求,則延時計數(shù)器從隨機(jī)數(shù)發(fā)生器中打入一個隨機(jī)值后開始倒計時,計數(shù)器為0時,該請求被喚醒,到請求仲裁器進(jìn)行仲裁后重新查詢目錄項狀態(tài)。本發(fā)明的基于隨機(jī)擾動的防餓死訪存請求喚醒方法主要應(yīng)用于Cache —致性協(xié)議處理控制器中。該Cache —致性協(xié)議處理控制器為基于目錄的Cache —致性處理控制器DB-CPC (Directory-Based Cache Coherence Process Controller),它包括輸入請求緩沖器 IRB (Incoming Request Buffer)、目錄存儲器 DMU (Directory Memory Unit)、協(xié)議處理器 PPU (Protocol Process Unit)和輸出響應(yīng)緩沖器 ORB (Outgoing Response B uffer)。如圖I所示,為現(xiàn)有技術(shù)中協(xié)議處理控制器的結(jié)構(gòu)示意圖。典型的Cache —致性協(xié)議處理控制器包含一個輸入請求緩沖器IRB、一個目錄存儲器MDU,一個協(xié)議處理器PI3U和一個輸出相應(yīng)緩沖器0RB。輸入請求緩沖器IRB用來接收來自Cache的一致性存儲器訪問請求,如獨(dú)占讀、共享讀、寫回和替換等,并將不能及時處理的請求暫存在緩沖器中。目錄存儲器MDU由若干目錄項組成,每一個目錄項對應(yīng)于Cache中的一個數(shù)據(jù)塊,記錄并跟蹤C(jī)ache中數(shù)據(jù)塊的狀態(tài),以準(zhǔn)確知道每個Cache的當(dāng)前狀態(tài)。協(xié)議處理部件PTO則根據(jù)目錄項的狀態(tài)形成當(dāng)前請求的各種響應(yīng),并產(chǎn)生新的目錄項內(nèi)容重新寫回到目錄項中。輸出響應(yīng)緩沖器ORB暫存還沒有發(fā)出的響應(yīng)。如圖2所示,本發(fā)明在上述結(jié)構(gòu)的基于目錄的Cache —致性處理控制器中設(shè)置一個休眠請求緩存隊列SRQ,該休眠請求緩存隊列SRQ的主體采用靜態(tài)隨機(jī)訪問存儲器SRAM構(gòu)成,休眠請求緩沖隊列SRQ用于存放處于休眠狀態(tài)的請求。如圖3所示,為本發(fā)明中的休眠請求緩沖隊列SRQ。休眠請求緩沖隊列SRQ的主體為SRAM組成的存儲器,用于存放休眠的請求。休眠請求緩沖隊列SRQ的輔助邏輯為讀、寫地址指針和請求計數(shù)器,用以完成隊列的讀寫控制和空滿標(biāo)志。當(dāng)協(xié)議處理器中的請求遇到目錄項狀態(tài)為忙時,該請求就會進(jìn)入到休眠請求緩沖隊列SRQ中休眠。休眠請求緩沖隊列SRQ的深度確定可以綜合考慮請求總數(shù)量、休眠請求緩沖隊列面積和訪問時間等因素,如果請求總數(shù)不是很多,則可以按最大請求數(shù)量設(shè)置休眠請求緩沖隊列SRQ的深度。如果不能為全部請求都預(yù)留空間,則可以在休眠請求緩沖隊列SRQ滿時采用傳統(tǒng)的打回請求的處理方法,由于所有請求都需要進(jìn)入休眠狀態(tài)的概率很低,因此不會對延時和帶寬造成明顯影響。參見圖2,本發(fā)明在上述結(jié)構(gòu)中進(jìn)一步設(shè)置隨機(jī)擾動源。即,在休眠請求緩沖隊列SRQ的出口處設(shè)置一個16位的隨機(jī)數(shù)發(fā)生器RDG (Random Generator),隨機(jī)數(shù)發(fā)生器用來產(chǎn)生休眠喚醒的隨機(jī)擾動延時值,該隨機(jī)數(shù)發(fā)生器可以產(chǎn)生周期為216-1的偽隨機(jī)數(shù)序列,隨機(jī)數(shù)發(fā)生器采用移位寄存器和異或邏輯實(shí)現(xiàn)。如圖4所示,為具體應(yīng)用實(shí)例中一個隨機(jī)數(shù)發(fā)生器的邏輯示意圖。該隨機(jī)數(shù)發(fā)生器由16個寄存器r0 rl5構(gòu)成。其中r3、r4和r5的輸入端在前一級輸出的基礎(chǔ)上,又和rl5做了異或操作,其他寄存器的輸入端則直接從上一級的輸出端接入。該隨機(jī)數(shù)發(fā)生器是一個偽隨機(jī)數(shù)發(fā)生器,其循環(huán)周期為216-1。本發(fā)明將上述產(chǎn)生的隨機(jī)擾動加入到喚醒機(jī)制中。在隨機(jī)數(shù)發(fā)生器RDG的輸出端設(shè)置一個16位的計數(shù)器,擾動延時的具體實(shí)現(xiàn)是通過計數(shù)器來完成的。該計數(shù)器打入RDG產(chǎn)生的隨機(jī)值作為初始值,當(dāng)休眠請求緩沖隊列SRQ中有請求需要被喚醒時,計數(shù)器開始倒計時。計數(shù)器值為0時,該請求被喚醒,進(jìn)入請求仲裁器。為了防止請求等待時間過長,在計數(shù)器的打入端口,設(shè)置一個16位的延時屏蔽寄存器MASK[15:0],如果MASK[i] =1 (i=0,1,2,…,15),則計數(shù)器初始值CNT的相應(yīng)位為0,即CNT[i]=0,這樣便可以通過對MASK設(shè)置適當(dāng)值以控制喚醒延時的最大值,實(shí)現(xiàn)了隨機(jī)擾動的可配置,增加了訪存調(diào)度的靈活性。參見圖2,本發(fā)明進(jìn)一步在協(xié)議處理器PPU的入口處增加一個請求仲裁器ARB,該請求仲裁器ARB對輸入請求緩沖器IRB的請求和休眠請求緩沖隊列SRQ中的請求進(jìn)行仲裁。由于休眠請求緩沖隊列SRQ中的請求已經(jīng)進(jìn)行了隨機(jī)擾動延時,所以在請求仲裁器ARB中,來自休眠請求緩沖隊列SRQ的請求具體更高的優(yōu)先級,即只要有來自休眠隊列的已喚醒的訪存請求,則優(yōu)先處理。以上僅是本發(fā)明的優(yōu)選實(shí)施方式,本發(fā)明的保護(hù)范圍并不僅局限于上述實(shí)施例,凡屬于本發(fā)明思路下的技術(shù)方案均屬于本發(fā)明的保護(hù)范圍。應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的 普通技術(shù)人員來說,在不脫離本發(fā)明原理前提下的若干改進(jìn)和潤飾,應(yīng)視為本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種基于隨機(jī)擾動的防餓死訪存請求喚醒方法,其特征在于當(dāng)從Cache來的訪存請求遇到目錄項為忙時,令暫時不能處理的訪存請求進(jìn)入休眠狀態(tài),然后通過隨機(jī)擾動的請求方式將處于休眠狀態(tài)的訪存請求喚醒,使其重新進(jìn)入請求處理流水線。
2.根據(jù)權(quán)利要求I所述的基于隨機(jī)擾動的防餓死訪存請求喚醒方法,其特征在于在訪存請求處理部分設(shè)置一個休眠請求緩存隊列SRQ,暫時不能處理的訪存請求進(jìn)入休眠請求緩存隊列SRQ并處于休眠狀態(tài);在休眠請求緩存隊列SRQ中等待的請求,從休眠請求緩存隊列SRQ的出口按順序被喚醒。
3.根據(jù)權(quán)利要求2所述的基于隨機(jī)擾動的防餓死訪存請求喚醒方法,其特征在于在 休眠請求緩存隊列SRQ出口的請求不是直接進(jìn)入到請求處理流水線,而是再繼續(xù)等待一個隨機(jī)延時值后再進(jìn)入請求處理流水線。
4.根據(jù)權(quán)利要求2或3所述的基于隨機(jī)擾動的防餓死訪存請求喚醒方法,其特征在于在休眠請求緩沖隊列SRQ的出口處設(shè)置一個隨機(jī)數(shù)發(fā)生器,隨機(jī)數(shù)發(fā)生器用來產(chǎn)生休眠喚醒的隨機(jī)擾動延時值。
5.根據(jù)權(quán)利要求4所述的基于隨機(jī)擾動的防餓死訪存請求喚醒方法,其特征在于在所述隨機(jī)數(shù)發(fā)生器的輸出端設(shè)置一個計數(shù)器,所述計數(shù)器打入隨機(jī)數(shù)發(fā)生器產(chǎn)生的隨機(jī)值作為初始值,當(dāng)休眠請求緩沖隊列SRQ中有請求需要被喚醒時,計數(shù)器開始倒計時;計數(shù)器值為O時,該請求被喚醒。
6.根據(jù)權(quán)利要求5所述的基于隨機(jī)擾動的防餓死訪存請求喚醒方法,其特征在于在所述請求處理流水線中協(xié)議處理器的入口處增加一個請求仲裁器,請求仲裁器用來對請求處理流水線中輸入請求緩沖器的請求和休眠請求緩沖隊列SRQ中的請求進(jìn)行仲裁。
7.根據(jù)權(quán)利要求6所述的基于隨機(jī)擾動的防餓死訪存請求喚醒方法,其特征在于在所述請求仲裁器中,來自休眠請求緩沖隊列SRQ的請求具體更高的優(yōu)先級,即只要有來自休眠請求緩沖隊列SRQ的已喚醒的訪存請求,則優(yōu)先處理。
全文摘要
本發(fā)明公開了一種基于隨機(jī)擾動的防餓死訪存請求喚醒方法,當(dāng)從Cache來的訪存請求遇到目錄項為忙時,令暫時不能處理的訪存請求進(jìn)入休眠狀態(tài),然后通過隨機(jī)擾動的請求方式將處于休眠狀態(tài)的訪存請求喚醒,使其重新進(jìn)入請求處理流水線。本發(fā)明具有能夠消除訪存請求的餓死現(xiàn)象、降低訪存延時、減小硬件開銷和網(wǎng)絡(luò)帶寬占用等優(yōu)點(diǎn)。
文檔編號G06F11/00GK102831024SQ20121027481
公開日2012年12月19日 申請日期2012年8月3日 優(yōu)先權(quán)日2012年8月3日
發(fā)明者李永進(jìn), 晏小波, 鄧讓鈺, 周宏偉, 衣曉飛, 張英, 竇強(qiáng), 馬卓, 王永文, 謝倫國 申請人:中國人民解放軍國防科學(xué)技術(shù)大學(xué)