本申請(qǐng)涉及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,特別涉及一種數(shù)據(jù)讀取的方法和裝置。
背景技術(shù):
fpga(field-programmablegatearray,現(xiàn)場(chǎng)可編程門(mén)陣列)內(nèi)存可以分為內(nèi)存顆粒和內(nèi)存條兩種類型。在實(shí)際應(yīng)用中,由于單個(gè)用戶所需要的內(nèi)存空間遠(yuǎn)小于一個(gè)內(nèi)存顆?;蛘邇?nèi)存條的內(nèi)存空間,因此,為了充分利用內(nèi)存的存儲(chǔ)資源,通常會(huì)多個(gè)用戶共用一個(gè)內(nèi)存顆?;蛘咭粋€(gè)內(nèi)存條。
在相關(guān)技術(shù)中,內(nèi)存顆粒或者內(nèi)存條,都會(huì)存在一個(gè)獨(dú)立的內(nèi)存控制器,用戶在從內(nèi)存顆?;蛘邇?nèi)存條中讀數(shù)據(jù)時(shí),通常是依賴于與該內(nèi)存顆?;蛘邇?nèi)存條相對(duì)應(yīng)的內(nèi)存控制器來(lái)完成。其中,上述內(nèi)存控制器,通??梢栽谶壿嬌蟿澐譃樽x命令模塊和回讀數(shù)據(jù)模塊。當(dāng)內(nèi)存控制器接收到用戶發(fā)送的讀命令時(shí),將讀命令添加至所述讀命令模塊中。內(nèi)存控制器可以從所述讀命令模塊中依次讀取讀命令,然后在內(nèi)存中獲取與所述讀命令對(duì)應(yīng)的數(shù)據(jù),并將所述數(shù)據(jù)添加至回讀數(shù)據(jù)模塊的隊(duì)列中。
然而,內(nèi)存控制器在將回讀數(shù)據(jù)模塊的隊(duì)列中的數(shù)據(jù)返回給用戶時(shí),按照數(shù)據(jù)在隊(duì)列中的順序,依次將數(shù)據(jù)發(fā)送至對(duì)應(yīng)的用戶。在這樣的情況下,由于不同用戶的回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)不同,如果此時(shí)正在處理回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)長(zhǎng)的用戶的數(shù)據(jù),那么在回讀數(shù)據(jù)模塊中,如果在該數(shù)據(jù)后面的數(shù)據(jù)為回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)短的用戶的數(shù)據(jù),那么會(huì)導(dǎo)致后面回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)短的用戶所對(duì)應(yīng)的數(shù)據(jù)延遲處理。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本申請(qǐng)?zhí)峁┮环N數(shù)據(jù)讀取的方法和裝置,應(yīng)用于基于fpga實(shí)現(xiàn)的內(nèi)存控制器,采用本申請(qǐng)?zhí)峁┑募夹g(shù)方案,可以提高所述內(nèi)存控制器的性能。
具體地,本申請(qǐng)是通過(guò)如下技術(shù)方案實(shí)現(xiàn)的:
一種數(shù)據(jù)讀取的方法,應(yīng)用于基于fpga實(shí)現(xiàn)的內(nèi)存控制器,所述內(nèi)存控制器與目標(biāo)內(nèi)存連接,共享所述目標(biāo)內(nèi)存的多個(gè)用戶,基于回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)被劃分為多種用戶類型;其中,不同的用戶類型分別對(duì)應(yīng)不同的回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)區(qū)間,所述方法包括:
響應(yīng)接收到的讀命令,從目標(biāo)內(nèi)存中讀取數(shù)據(jù);其中,所述讀命令攜帶用戶標(biāo)識(shí);
確定與所述用戶標(biāo)識(shí)對(duì)應(yīng)的目標(biāo)用戶類型;
觸發(fā)與所述目標(biāo)用戶類型對(duì)應(yīng)的分發(fā)任務(wù),并基于所述分發(fā)任務(wù)將讀取到的數(shù)據(jù)發(fā)送至對(duì)應(yīng)的用戶;其中,不同的用戶類型分別對(duì)應(yīng)不同的分發(fā)任務(wù),且不同的用戶類型對(duì)應(yīng)的分發(fā)任務(wù)互相隔離。
一種數(shù)據(jù)讀取的裝置,應(yīng)用于基于fpga實(shí)現(xiàn)的內(nèi)存控制器,所述內(nèi)存控制器與目標(biāo)內(nèi)存連接,共享所述目標(biāo)內(nèi)存的多個(gè)用戶,基于回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)被劃分為多種用戶類型;其中,不同的用戶類型分別對(duì)應(yīng)不同的回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)區(qū)間,所述方法包括:
響應(yīng)單元,用于響應(yīng)接收到的讀命令,從目標(biāo)內(nèi)存中讀取數(shù)據(jù);其中,所述讀命令攜帶用戶標(biāo)識(shí);
確定單元,用于確定與所述用戶標(biāo)識(shí)對(duì)應(yīng)的目標(biāo)用戶類型;
發(fā)送單元,用于觸發(fā)與所述目標(biāo)用戶類型對(duì)應(yīng)的分發(fā)任務(wù),并基于所述分發(fā)任務(wù)將讀取到的數(shù)據(jù)發(fā)送至對(duì)應(yīng)的用戶;其中,不同的用戶類型分別對(duì)應(yīng)不同的分發(fā)任務(wù),且不同的用戶類型對(duì)應(yīng)的分發(fā)任務(wù)互相隔離。
根據(jù)用戶的回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)將用戶劃分成多種用戶類型,其中,不同的用戶類型對(duì)應(yīng)于不同的分發(fā)任務(wù)。當(dāng)內(nèi)存控制器根據(jù)用戶發(fā)送的讀命令獲取到數(shù)據(jù)時(shí),可以根據(jù)該用戶的用戶類型,觸發(fā)與所述用戶類型對(duì)應(yīng)的分發(fā)任務(wù),將獲取到的數(shù)據(jù)發(fā)送至對(duì)應(yīng)的用戶。由于不同用戶類型所對(duì)應(yīng)的分發(fā)任務(wù)進(jìn)行相互隔離,因此內(nèi)存控制器在分發(fā)不同用戶類型的數(shù)據(jù)時(shí),不同用戶類型的數(shù)據(jù)處理互不影響。
附圖說(shuō)明
圖1為本申請(qǐng)示出的一種現(xiàn)有技術(shù)中數(shù)據(jù)讀取的框架示意圖;
圖2為本申請(qǐng)一示例性實(shí)施例示出的一種數(shù)據(jù)讀取的框架示意圖;
圖3為本申請(qǐng)一示例性實(shí)施例示出的一種數(shù)據(jù)讀取的方法示意圖;
圖4為本申請(qǐng)一示例性實(shí)施例示出的另一種數(shù)據(jù)讀取的框架示意圖;
圖5為本申請(qǐng)一種數(shù)據(jù)讀取的裝置所在的基于fpga實(shí)現(xiàn)的內(nèi)存控制器的一種硬件結(jié)構(gòu)圖;
圖6為本申請(qǐng)一示例性實(shí)施例示出的一種數(shù)據(jù)讀取的裝置。
具體實(shí)施方式
這里將詳細(xì)地對(duì)示例性實(shí)施例進(jìn)行說(shuō)明,其示例表示在附圖中。下面的描述涉及附圖時(shí),除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實(shí)施例中所描述的實(shí)施方式并不代表與本申請(qǐng)相一致的所有實(shí)施方式。相反,它們僅是與如所附權(quán)利要求書(shū)中所詳述的、本申請(qǐng)的一些方面相一致的裝置和方法的例子。
在本申請(qǐng)使用的術(shù)語(yǔ)是僅僅出于描述特定實(shí)施例的目的,而非旨在限制本申請(qǐng)。在本申請(qǐng)和所附權(quán)利要求書(shū)中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應(yīng)當(dāng)理解,本文中使用的術(shù)語(yǔ)“和/或”是指并包含一個(gè)或多個(gè)相關(guān)聯(lián)的列出項(xiàng)目的任何或所有可能組合。
應(yīng)當(dāng)理解,盡管在本申請(qǐng)可能采用術(shù)語(yǔ)第一、第二、第三等來(lái)描述各種信息,但這些信息不應(yīng)限于這些術(shù)語(yǔ)。這些術(shù)語(yǔ)僅用來(lái)將同一類型的信息彼此區(qū)分開(kāi)。例如,在不脫離本申請(qǐng)范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語(yǔ)境,如在此所使用的詞語(yǔ)“如果”可以被解釋成為“在……時(shí)”或“當(dāng)……時(shí)”或“響應(yīng)于確定”。
請(qǐng)參見(jiàn)圖1,圖1為本申請(qǐng)示出的一種現(xiàn)有技術(shù)中數(shù)據(jù)讀取的框架示意圖。
目前多用戶共享內(nèi)存,并從內(nèi)存中讀取數(shù)據(jù)的方法如圖1所示。假如一個(gè)內(nèi)存顆粒有n個(gè)用戶共享,那么這n個(gè)用戶向讀命令模塊發(fā)送讀命令時(shí),讀命令模塊就可以將接收到的讀命令添加至與各用戶對(duì)應(yīng)的緩存空間。
為了方便回讀數(shù)據(jù)模塊接收到數(shù)據(jù)之后,判斷出需要將該數(shù)據(jù)發(fā)送給哪一個(gè)用戶。讀命令模塊可以為這n個(gè)用戶分別分配一個(gè)用戶id,然后將該用戶id添加至讀命令中。同時(shí),讀命令模塊會(huì)將用戶地址與用戶id的映射關(guān)系發(fā)送給回讀數(shù)據(jù)模塊。當(dāng)內(nèi)存控制器從讀命令模塊中讀取讀命令時(shí),該讀命令就會(huì)攜帶用戶id,內(nèi)存控制器根據(jù)該讀命令從共享內(nèi)存中讀取對(duì)應(yīng)的數(shù)據(jù),并將所述用戶id攜帶于所述數(shù)據(jù)中。然后,內(nèi)存控制器可以將攜帶用戶id的數(shù)據(jù)發(fā)送至回讀數(shù)據(jù)模塊,以使回讀數(shù)據(jù)模塊對(duì)該數(shù)據(jù)進(jìn)行分發(fā)。
其中,這n個(gè)用戶向讀命令模塊發(fā)送讀命令,回讀數(shù)據(jù)模塊將數(shù)據(jù)分發(fā)至對(duì)應(yīng)的用戶,這兩個(gè)過(guò)程相互獨(dú)立。比如:用戶1向讀命令模塊連續(xù)發(fā)送了100條讀命令,用戶1之后就等待著接收回讀數(shù)據(jù)模塊發(fā)送的數(shù)據(jù),而不需要向讀命令模塊發(fā)送一條讀命令,然后當(dāng)接收到該讀命令對(duì)應(yīng)的數(shù)據(jù)時(shí),再繼續(xù)向讀命令模塊發(fā)送讀命令。
然而,內(nèi)存控制器從讀命令模塊中讀取讀命令,以及從內(nèi)存中讀取與該讀命令對(duì)應(yīng)的數(shù)據(jù)所需要消耗的時(shí)間之和,小于回讀數(shù)據(jù)模塊從將數(shù)據(jù)發(fā)送至對(duì)應(yīng)的用戶,至回讀數(shù)據(jù)模塊接收到用戶的響應(yīng)消息這一過(guò)程所需要消耗的時(shí)間。因此當(dāng)讀命令模塊接收到多個(gè)讀命令的時(shí)候,回讀數(shù)據(jù)模塊中會(huì)滯留大量的數(shù)據(jù)。
回讀數(shù)據(jù)模塊在將數(shù)據(jù)分發(fā)至對(duì)應(yīng)的用戶時(shí),按照接收到數(shù)據(jù)的時(shí)間順序,依次處理。在實(shí)現(xiàn)時(shí),回讀數(shù)據(jù)模塊可以從該數(shù)據(jù)中讀取用戶id,然后根據(jù)用戶地址與用戶id的映射關(guān)系,獲取到用戶信息,最后將數(shù)據(jù)發(fā)送至該用戶地址。
然而,不同用戶響應(yīng)回讀數(shù)據(jù)模塊發(fā)送的數(shù)據(jù)所需要消耗的時(shí)間不一樣。假設(shè),現(xiàn)在回讀數(shù)據(jù)模塊中有5個(gè)數(shù)據(jù)(a,b,c,d,e)需要處理,回讀數(shù)據(jù)模塊接收到這5個(gè)數(shù)據(jù)的時(shí)間先后順序?yàn)閍早于b,b早于c,c早于d,d早于e,其中,用戶響應(yīng)a需要花費(fèi)的時(shí)間為50ms,用戶響應(yīng)b,c,d,e需要花費(fèi)的時(shí)間均為25ms,在這樣的情況下,b需要等待50ms后才能被處理。如果這五個(gè)數(shù)據(jù)的時(shí)間先后順序?yàn)閏,b,a,d,e,用戶響應(yīng)這5個(gè)數(shù)據(jù)需要花費(fèi)的時(shí)間不變,那么此時(shí),b只需要等待25ms后就能處理。
因此,回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)長(zhǎng)的用戶會(huì)導(dǎo)致回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)短的用戶的數(shù)據(jù)延遲處理。為了解決現(xiàn)有技術(shù)中的問(wèn)題,本申請(qǐng)?zhí)峁┝艘环N數(shù)據(jù)讀取的方法,應(yīng)用于基于fpga實(shí)現(xiàn)的內(nèi)存控制器,所述內(nèi)存控制器與目標(biāo)內(nèi)存連接。其中,共享所述目標(biāo)內(nèi)存的多個(gè)用戶,基于回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)被劃分為多種用戶類型;其中,不同的用戶類型分別對(duì)應(yīng)不同的回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)區(qū)間;所述方法為:響應(yīng)接收到的讀命令,從目標(biāo)內(nèi)存中讀取數(shù)據(jù);其中,所述讀命令攜帶用戶標(biāo)識(shí);確定與所述用戶標(biāo)識(shí)對(duì)應(yīng)的目標(biāo)用戶類型;觸發(fā)與所述目標(biāo)用戶類型對(duì)應(yīng)的分發(fā)任務(wù),并基于所述分發(fā)任務(wù)將讀取到的數(shù)據(jù)發(fā)送至對(duì)應(yīng)的用戶;其中,不同的用戶類型分別對(duì)應(yīng)不同的分發(fā)任務(wù),且不同的用戶類型對(duì)應(yīng)的分發(fā)任務(wù)互相隔離。
根據(jù)用戶的回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)將用戶劃分成多種用戶類型,其中,不同的用戶類型對(duì)應(yīng)于不同的分發(fā)任務(wù)。當(dāng)內(nèi)存控制器根據(jù)用戶發(fā)送的讀命令獲取到數(shù)據(jù)時(shí),可以根據(jù)該用戶的用戶類型,觸發(fā)與所述用戶類型對(duì)應(yīng)的分發(fā)任務(wù),將獲取到的數(shù)據(jù)發(fā)送至對(duì)應(yīng)的用戶。由于不同用戶類型所對(duì)應(yīng)的分發(fā)任務(wù)進(jìn)行相互隔離,因此內(nèi)存控制器在分發(fā)不同用戶類型的數(shù)據(jù)時(shí),不同用戶類型的數(shù)據(jù)處理互不影響。
下面通過(guò)具體的實(shí)施例并結(jié)合具體的示意圖來(lái)描述本申請(qǐng)?zhí)峁┑募夹g(shù)方案。
請(qǐng)參見(jiàn)圖2,圖2為本申請(qǐng)一示例性實(shí)施例示出的一種數(shù)據(jù)讀取的框架示意圖。
在本申請(qǐng)中,所述基于fpga實(shí)現(xiàn)的內(nèi)存控制器與所述fpga內(nèi)存相連。其中,上述內(nèi)存控制器在邏輯上可以被劃分為一個(gè)讀命令模塊和若干回讀數(shù)據(jù)模塊,所述fpga內(nèi)存由若干個(gè)用戶共享。其中,所述讀命令模塊和所述回讀數(shù)據(jù)模塊,可以為軟件層面上的一段邏輯代碼。
為了方便回讀數(shù)據(jù)模塊接收到數(shù)據(jù)之后,判斷出需要將該數(shù)據(jù)發(fā)送給哪一個(gè)用戶。在本申請(qǐng)中,讀命令模塊可以為共享所述內(nèi)存的用戶分別分配用戶標(biāo)識(shí),建立用戶地址與用戶標(biāo)識(shí)之間的映射關(guān)系,并將所述映射關(guān)系發(fā)送至回讀數(shù)據(jù)模塊,以使回讀數(shù)據(jù)模塊可以基于所述映射關(guān)系判斷出將數(shù)據(jù)發(fā)送至對(duì)應(yīng)的用戶。
比如,共享目標(biāo)內(nèi)存的用戶數(shù)量為6,那么可以為6個(gè)用戶分別添加用戶標(biāo)識(shí),所述用戶標(biāo)識(shí)可以為用戶1,用戶2,用戶3,用戶4,用戶5,用戶6。
其中,所述讀命令模塊用于接收用戶發(fā)送的讀命令,同時(shí)為用戶分配用戶標(biāo)識(shí),建立用戶標(biāo)識(shí)與用戶地址的映射關(guān)系,并將所述映射關(guān)系發(fā)送至回讀數(shù)據(jù)模塊。此外,讀命令模塊在接收到讀命令時(shí),會(huì)根據(jù)發(fā)送該讀命令的用戶的用戶地址,查找到對(duì)應(yīng)的用戶標(biāo)識(shí),然后將用戶標(biāo)識(shí)添加至該讀命令中,最后將該讀命令添加至與該用戶對(duì)應(yīng)的緩存空間中,以等待內(nèi)存控制器對(duì)所述讀命令模塊中的讀命令進(jìn)行處理。
所述回讀數(shù)據(jù)模塊用于接收內(nèi)存控制器發(fā)送的數(shù)據(jù)以及讀命令模塊發(fā)送的用戶地址與用戶標(biāo)識(shí)的映射關(guān)系。其中,所述數(shù)據(jù)中攜帶了用戶標(biāo)識(shí)?;刈x數(shù)據(jù)模塊接收到內(nèi)存控制器在確定所述數(shù)據(jù)所對(duì)應(yīng)的用戶類型,并查找到與該用戶類型對(duì)應(yīng)的回讀數(shù)據(jù)模塊后發(fā)送的數(shù)據(jù)時(shí),根據(jù)所述數(shù)據(jù)中的用戶標(biāo)識(shí)查找對(duì)應(yīng)的用戶地址,并將所述數(shù)據(jù)發(fā)送至該用戶地址所指示的用戶。在這里只是對(duì)內(nèi)存控制器的組成,以及各組成部分的功能進(jìn)行示例性的描述,至于內(nèi)存控制器里的其它組成內(nèi)容不進(jìn)行限定。
請(qǐng)參見(jiàn)圖3,圖3為本申請(qǐng)一示例性實(shí)施例示出的一種數(shù)據(jù)讀取的方法示意圖,應(yīng)用于基于fpga實(shí)現(xiàn)的內(nèi)存控制器,具體執(zhí)行以下步驟:
步驟301:響應(yīng)接收到的讀命令,從目標(biāo)內(nèi)存中讀取數(shù)據(jù);其中,所述讀命令攜帶用戶標(biāo)識(shí);
步驟302:確定與所述用戶標(biāo)識(shí)對(duì)應(yīng)的目標(biāo)用戶類型;
步驟303:觸發(fā)與所述目標(biāo)用戶類型對(duì)應(yīng)的分發(fā)任務(wù),并基于所述分發(fā)任務(wù)將讀取到的數(shù)據(jù)發(fā)送至對(duì)應(yīng)的用戶;其中,不同的用戶類型分別對(duì)應(yīng)不同的分發(fā)任務(wù),且不同的用戶類型對(duì)應(yīng)的分發(fā)任務(wù)互相隔離。
在本申請(qǐng)中,內(nèi)存控制器可以從讀命令模塊中讀取讀命令。然后,從所述讀命令中獲取用戶標(biāo)識(shí),確定與所述用戶標(biāo)識(shí)對(duì)應(yīng)的用戶類型,同時(shí)根據(jù)所述讀命令從所述共享內(nèi)存中讀取數(shù)據(jù)。確定所述用戶標(biāo)識(shí)對(duì)應(yīng)的用戶類型后,內(nèi)存控制器可以基于所述用戶類型對(duì)應(yīng)的分發(fā)任務(wù),將讀取到的數(shù)據(jù)分發(fā)至對(duì)應(yīng)的回讀數(shù)據(jù)模塊,以使回讀數(shù)據(jù)模塊將所述數(shù)據(jù)發(fā)送至對(duì)應(yīng)的用戶。
當(dāng)讀命令模塊接收到用戶發(fā)送的讀命令時(shí),讀命令模塊可以讀取發(fā)送該讀命令的目標(biāo)用戶地址,然后根據(jù)用戶地址與用戶標(biāo)識(shí)的映射關(guān)系,查找到與該目標(biāo)用戶地址對(duì)應(yīng)的用戶標(biāo)識(shí),并將所述用戶標(biāo)識(shí)添加至所述讀命令中。
由于用戶發(fā)送讀命令的速度比內(nèi)存控制器讀取讀命令的速度更快,因此大量的讀命令會(huì)滯留在讀命令模塊中,等待著內(nèi)存控制器的處理。讀命令模塊可以為共享所述內(nèi)存的用戶分別分配一個(gè)緩存空間,其中,各緩存空間與用戶標(biāo)識(shí)一一對(duì)應(yīng),且各用戶的緩存空間可以根據(jù)讀命令的數(shù)量進(jìn)行調(diào)整,在這里對(duì)緩存空間的大小不進(jìn)行限定。
當(dāng)讀命令模塊將所述用戶標(biāo)識(shí)添加至所述讀命令中后,可以將所述讀命令添加至該用戶標(biāo)識(shí)對(duì)應(yīng)的緩存空間,等到內(nèi)存控制器的處理。
內(nèi)存控制器從所述讀命令模塊中讀取讀命令時(shí),按照依次循環(huán)讀取的方式。比如,共享所述內(nèi)存的用戶數(shù)量為4,所述用戶標(biāo)識(shí)分別為用戶1,用戶2,用戶3,用戶4,那么內(nèi)存控制器從所述讀命令模塊中讀取讀命令時(shí),先讀取用戶1的讀命令,然后讀取用戶2的讀命令,接著讀取用戶3的讀命令,最后讀取用戶4的讀命令,之后按照用戶1,用戶2,用戶3,用戶4的順序輪流循環(huán)讀取用戶的讀命令。
當(dāng)內(nèi)存控制器讀取到讀命令時(shí),可以根據(jù)所述讀命令的要求,從所述共享內(nèi)存中讀取到相應(yīng)的數(shù)據(jù),并從所述讀命令中讀取到目標(biāo)用戶標(biāo)識(shí),將所述目標(biāo)用戶標(biāo)識(shí)添加至讀取到的數(shù)據(jù)中。
同時(shí),為了確認(rèn)需要將所述讀取到的數(shù)據(jù)發(fā)送至哪一個(gè)回讀數(shù)據(jù)模塊,內(nèi)存控制器可以根據(jù)用戶標(biāo)識(shí)與用戶類型的映射關(guān)系中,查詢所述目標(biāo)用戶標(biāo)識(shí)所對(duì)應(yīng)的用戶類型。
其中,上述用戶標(biāo)識(shí)與用戶類型的映射關(guān)系為內(nèi)存控制器通過(guò)檢測(cè)用戶的回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng),然后根據(jù)所述回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)確定命中的目標(biāo)回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)區(qū)間;其中所述回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)區(qū)間為預(yù)配置的。基于預(yù)配置的回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)區(qū)間與用戶類型的映射關(guān)系,查詢所述目標(biāo)回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)所對(duì)應(yīng)的用戶類型,然后將所述用戶類型與用戶標(biāo)識(shí)建立映射關(guān)系。
上述檢測(cè)用戶的回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng),在實(shí)現(xiàn)時(shí),內(nèi)庫(kù)控制器通過(guò)檢測(cè)從回讀數(shù)據(jù)模塊將數(shù)據(jù)發(fā)送至對(duì)應(yīng)的用戶開(kāi)始,到回讀數(shù)據(jù)模塊接收到該用戶發(fā)送的響應(yīng)消息為止,這一過(guò)程所需要消耗的時(shí)長(zhǎng)。由于用戶在處理不同業(yè)務(wù)的數(shù)據(jù)時(shí),所需要花費(fèi)的時(shí)間不同,因此造成用戶在處理不同業(yè)務(wù)的數(shù)據(jù)時(shí),回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)也不同。
比如,用戶1接收到回讀數(shù)據(jù)模塊發(fā)送的業(yè)務(wù)1的數(shù)據(jù)后,用戶1需要花費(fèi)10ms才能將業(yè)務(wù)1的數(shù)據(jù)處理完,那么回讀數(shù)據(jù)模塊從將業(yè)務(wù)1的數(shù)據(jù)發(fā)送至用戶1后需要等待10ms后才能接收到用戶1返回的響應(yīng)消息。用戶1接收到回讀數(shù)據(jù)模塊發(fā)送的業(yè)務(wù)2的數(shù)據(jù)后,用戶1需要花費(fèi)50ms才能將業(yè)務(wù)2的數(shù)據(jù)處理完,那么回讀數(shù)據(jù)模塊從將業(yè)務(wù)2的數(shù)據(jù)發(fā)送至用戶1后需要等待50ms后才能接收到用戶1返回的響應(yīng)消息。
需要說(shuō)明的是,同一用戶可以處理不同的業(yè)務(wù)的數(shù)據(jù),該用戶在處理不同業(yè)務(wù)的數(shù)據(jù)時(shí)的回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)不一樣,因此可以根據(jù)該用戶的回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)的變化,更新該用戶的用戶標(biāo)識(shí)與用戶類型的映射關(guān)系。
在實(shí)現(xiàn)時(shí),如果內(nèi)存控制器檢測(cè)到任一用戶的回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)所在的目標(biāo)回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)區(qū)間,基于用戶類型與回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)區(qū)間的映射關(guān)系,查找到所述目標(biāo)回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)區(qū)間所對(duì)應(yīng)的用戶類型,判斷該用戶類型與內(nèi)存控制器中保存的所述用戶的用戶標(biāo)識(shí)所對(duì)應(yīng)的用戶類型是否相同。
如果不相同,那么內(nèi)存控制器可以將所述用戶的用戶標(biāo)識(shí)與原先的用戶類型解除映射關(guān)系,將所述用戶的用戶標(biāo)識(shí)與查找到的新的用戶類型建立映射關(guān)系。如果相同,那么保持所述用戶的用戶標(biāo)識(shí)與原先的用戶類型的映射關(guān)系。
另外,上述用戶類型基于回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)來(lái)劃分的,在實(shí)現(xiàn)時(shí),可以根據(jù)實(shí)際需求對(duì)回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)區(qū)間進(jìn)行調(diào)整,比如調(diào)整區(qū)間大小,區(qū)間數(shù)量。
例如,原先將回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)不大于10ms的用戶定義為快速用戶,將回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)大于10ms,同時(shí)不大于50ms的用戶定義為中速用戶,將回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)大于50ms的用戶定義為慢速用戶?,F(xiàn)在根據(jù)需求需要對(duì)回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)進(jìn)一步劃分,將回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)不大于10ms的用戶定義為快速用戶,將回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)大于10ms,同時(shí)不大于25ms的用戶定義為中快速用戶,將回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)大于25ms,同時(shí)不大于50ms的用戶定義為中慢速用戶,將回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)大于50ms的用戶定義為慢速用戶。
當(dāng)內(nèi)存控制器讀取到數(shù)據(jù),并根據(jù)用戶標(biāo)識(shí)查找到對(duì)應(yīng)的用戶類型時(shí),內(nèi)存控制器可以將讀取到的數(shù)據(jù)發(fā)送至所述用戶類型對(duì)應(yīng)的回讀數(shù)據(jù)模塊,以使回讀數(shù)據(jù)模塊對(duì)所述數(shù)據(jù)進(jìn)行分發(fā)處理。
其中,上述回讀數(shù)據(jù)模塊分別對(duì)應(yīng)不同的分發(fā)任務(wù),各分發(fā)任務(wù)相互隔離。
比如,假設(shè)有3種用戶類型,分別為快速用戶,中速用戶和慢速用戶,與這3種用戶類型分別對(duì)應(yīng)的回讀數(shù)據(jù)模塊分別為快速用戶回讀數(shù)據(jù)模塊,中速用戶回讀數(shù)據(jù)模塊和慢速用戶回讀數(shù)據(jù)模塊??焖儆脩艋刈x數(shù)據(jù)模塊在分發(fā)該模塊中的數(shù)據(jù)時(shí),其它兩個(gè)模塊也會(huì)同時(shí)分發(fā)其模塊中的數(shù)據(jù),彼此互不影響。
當(dāng)回讀數(shù)據(jù)模塊將數(shù)據(jù)分發(fā)至對(duì)應(yīng)的用戶時(shí),回讀數(shù)據(jù)模塊可以從會(huì)數(shù)據(jù)中讀取目標(biāo)用戶標(biāo)識(shí),然后根據(jù)接收到的讀命令模塊發(fā)送的用戶標(biāo)識(shí)與用戶地址的映射關(guān)系,查找與所述目標(biāo)用戶標(biāo)識(shí)對(duì)應(yīng)的用戶地址,然后將所述數(shù)據(jù)發(fā)送至該用戶地址所指示的用戶。
需要說(shuō)明的是,當(dāng)用戶類型的數(shù)量發(fā)生改變時(shí),那么回讀數(shù)據(jù)模塊的數(shù)量也需要進(jìn)行相應(yīng)的調(diào)整,使得不同的用戶類型對(duì)應(yīng)不同的回讀數(shù)據(jù)模塊。
在可選的方式中,所述內(nèi)存控制器上設(shè)置的回讀數(shù)據(jù)模塊的具體形式可以為分發(fā)隊(duì)列的形式,其中不同的分發(fā)隊(duì)列對(duì)應(yīng)于不同的用戶類型,且不同的分發(fā)隊(duì)列也對(duì)應(yīng)不同的分發(fā)任務(wù),各分發(fā)任務(wù)相互隔離。
當(dāng)內(nèi)存控制器確定了與所述用戶標(biāo)識(shí)對(duì)應(yīng)的用戶類型后,內(nèi)存控制器可以查找與所述用戶類型對(duì)應(yīng)的分發(fā)隊(duì)列,并將讀取的數(shù)據(jù)添加至所述分發(fā)隊(duì)列。然后,各分發(fā)隊(duì)列根據(jù)該分發(fā)隊(duì)列所對(duì)應(yīng)的分發(fā)任務(wù),將分發(fā)隊(duì)列中的數(shù)據(jù)發(fā)送至對(duì)應(yīng)的用戶。
當(dāng)然,當(dāng)用戶類型的數(shù)量不會(huì)發(fā)生變化時(shí),本申請(qǐng)?zhí)峁┑募夹g(shù)方法中,所述讀命令模塊可以是基于fpga實(shí)現(xiàn)的收集硬件,所述回讀數(shù)據(jù)模塊可以是基于所述fpga實(shí)現(xiàn)的分發(fā)硬件。
請(qǐng)參見(jiàn)圖4,圖4為本申請(qǐng)一示例性實(shí)施例示出的另一種數(shù)據(jù)讀取的框架示意圖。
其中,在所述內(nèi)存控制器上預(yù)先配置了與所述用戶類型分別對(duì)應(yīng)的分發(fā)硬件,并將所述分發(fā)硬件與共享所述內(nèi)存的用戶均建立連接關(guān)系。另外,不同的分發(fā)硬件對(duì)應(yīng)不同的分發(fā)任務(wù),各分發(fā)任務(wù)互相隔離。在此,對(duì)所述讀命令模塊的具體操作過(guò)程不再贅述,主要對(duì)所述回讀數(shù)據(jù)模塊進(jìn)行描述。
在實(shí)現(xiàn)時(shí),當(dāng)內(nèi)存控制器根據(jù)所述讀命令讀取到對(duì)應(yīng)的數(shù)據(jù)時(shí),根據(jù)所述讀命令中攜帶的用戶標(biāo)識(shí),讀取所述用戶標(biāo)識(shí)對(duì)應(yīng)的目標(biāo)用戶類型。然后,內(nèi)存控制器可以根據(jù)預(yù)設(shè)的用戶類型與分發(fā)硬件的映射關(guān)系,查找與所述目標(biāo)用戶類型對(duì)應(yīng)的分發(fā)硬件。
當(dāng)內(nèi)存控制器查找到對(duì)應(yīng)的分發(fā)硬件時(shí),可以將所述讀取到的數(shù)據(jù)下發(fā)至所述分發(fā)硬件,并觸發(fā)所述分發(fā)硬件上的分發(fā)任務(wù),將所述數(shù)據(jù)分發(fā)至對(duì)應(yīng)的用戶。
綜上所述,根據(jù)用戶的回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)將用戶劃分成多種用戶類型,其中,不同的用戶類型對(duì)應(yīng)于不同的分發(fā)任務(wù)。當(dāng)內(nèi)存控制器根據(jù)用戶發(fā)送的讀命令獲取到數(shù)據(jù)時(shí),可以根據(jù)該用戶的用戶類型,觸發(fā)與所述用戶類型對(duì)應(yīng)的分發(fā)任務(wù),將獲取到的數(shù)據(jù)發(fā)送至對(duì)應(yīng)的用戶。由于不同用戶類型所對(duì)應(yīng)的分發(fā)任務(wù)進(jìn)行相互隔離,因此內(nèi)存控制器在分發(fā)不同用戶類型的數(shù)據(jù)時(shí),不同用戶類型的數(shù)據(jù)處理互不影響。
與前述一種數(shù)據(jù)讀取的方法的實(shí)施例相對(duì)應(yīng),本申請(qǐng)還提供了一種數(shù)據(jù)讀取的裝置的實(shí)施例。
本申請(qǐng)一種數(shù)據(jù)讀取的裝置的實(shí)施例可以應(yīng)用在基于fpga實(shí)現(xiàn)的內(nèi)存控制器上。裝置實(shí)施例可以通過(guò)軟件實(shí)現(xiàn),也可以通過(guò)硬件或者軟硬件結(jié)合的方式實(shí)現(xiàn)。以軟件實(shí)現(xiàn)為例,作為一個(gè)邏輯意義上的裝置,是通過(guò)其所在基于fpga實(shí)現(xiàn)的內(nèi)存控制器的處理器將非易失性存儲(chǔ)器中對(duì)應(yīng)的計(jì)算機(jī)程序指令讀取到內(nèi)存中運(yùn)行形成的。從硬件層面而言,如圖5所示,為本申請(qǐng)一種數(shù)據(jù)讀取的裝置所在的基于fpga實(shí)現(xiàn)的內(nèi)存控制器的一種硬件結(jié)構(gòu)圖,除了圖5所示的處理器、內(nèi)存、網(wǎng)絡(luò)接口、以及非易失性存儲(chǔ)器之外,實(shí)施例中裝置所在的基于fpga實(shí)現(xiàn)的內(nèi)存控制器通常根據(jù)該數(shù)據(jù)讀取的實(shí)際功能,還可以包括其他硬件,對(duì)此不再贅述。
請(qǐng)參見(jiàn)圖6,圖6為本申請(qǐng)一示例性實(shí)施例示出的一種數(shù)據(jù)讀取的裝置,應(yīng)用于基于fpga實(shí)現(xiàn)的內(nèi)存控制器,所述內(nèi)存控制器與目標(biāo)內(nèi)存連接,共享所述目標(biāo)內(nèi)存的多個(gè)用戶,基于回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)被劃分為多種用戶類型;其中,不同的用戶類型分別對(duì)應(yīng)不同的回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)區(qū)間,所述裝置包括:響應(yīng)單元610,確定單元620,發(fā)送單元630。
其中,所述響應(yīng)單元610,用于響應(yīng)接收到的讀命令,從目標(biāo)內(nèi)存中讀取數(shù)據(jù);其中,所述讀命令攜帶用戶標(biāo)識(shí);
所述確定單元620,用于確定與所述用戶標(biāo)識(shí)對(duì)應(yīng)的目標(biāo)用戶類型;
所述發(fā)送單元630,用于觸發(fā)與所述目標(biāo)用戶類型對(duì)應(yīng)的分發(fā)任務(wù),并基于所述分發(fā)任務(wù)將讀取到的數(shù)據(jù)發(fā)送至對(duì)應(yīng)的用戶;其中,不同的用戶類型分別對(duì)應(yīng)不同的分發(fā)任務(wù),且不同的用戶類型對(duì)應(yīng)的分發(fā)任務(wù)互相隔離。
在實(shí)現(xiàn)時(shí),所述內(nèi)存控制器預(yù)配置了多個(gè)回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)區(qū)間;其中,不同的回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)區(qū)間分別對(duì)應(yīng)于不同的用戶類型,所述裝置還包括:
檢測(cè)單元,用于檢測(cè)共享所述目標(biāo)內(nèi)存的各用戶的回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng);
匹配單元,用于將檢測(cè)到的回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)依次與所述多個(gè)回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)區(qū)間進(jìn)行匹配;
建立單元,用于如果檢測(cè)到的回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)命中所述多個(gè)回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)區(qū)間中的任一目標(biāo)回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)區(qū)間,在本地建立該用戶的用戶標(biāo)識(shí),與所述目標(biāo)回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)區(qū)間對(duì)應(yīng)的用戶類型之間的映射關(guān)系。
當(dāng)用戶的回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)所對(duì)應(yīng)的區(qū)間發(fā)送變化時(shí),所述裝置還包括:判斷單元,用于判斷檢測(cè)到的任一用戶的回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)所在的目標(biāo)回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)區(qū)間,與本地保存的映射關(guān)系中所述用戶的用戶類型所對(duì)應(yīng)的回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)區(qū)間是否相同;
查詢單元,用于如果不相同,查詢所述目標(biāo)回讀數(shù)據(jù)響應(yīng)時(shí)長(zhǎng)區(qū)間所對(duì)應(yīng)的用戶類型;
更新單元,用于根據(jù)查詢到的用戶類型,更新所述用戶的用戶標(biāo)識(shí)與所述用戶的用戶類型的映射關(guān)系。
其中,所述確定單元620,在實(shí)現(xiàn)時(shí),具體用于獲取所述讀命令中攜帶的用戶標(biāo)識(shí);查找所述映射關(guān)系,確定與所述用戶標(biāo)識(shí)對(duì)應(yīng)的目標(biāo)用戶類型。
當(dāng)所述內(nèi)存控制器配置了多個(gè)分發(fā)隊(duì)列時(shí),其中,不同的分發(fā)隊(duì)列分別對(duì)應(yīng)于不同的用戶類型。所述發(fā)送單元630,在實(shí)現(xiàn)時(shí),具體用于:
查找與所述目標(biāo)用戶類型對(duì)應(yīng)的分發(fā)隊(duì)列;
將讀取到的數(shù)據(jù)添加至查找到的分發(fā)隊(duì)列;
觸發(fā)與所述分發(fā)隊(duì)列對(duì)應(yīng)的分發(fā)任務(wù),并基于所述分發(fā)任務(wù)將所述分發(fā)隊(duì)列中的數(shù)據(jù)返回給對(duì)應(yīng)的用戶。
另外,當(dāng)所述內(nèi)存控制器配置了多個(gè)基于fpga實(shí)現(xiàn)的分發(fā)硬件時(shí),其中,不同的分發(fā)硬件分別對(duì)應(yīng)于不同的用戶類型。所述發(fā)送單元630,在實(shí)現(xiàn)時(shí),具體用于:
查找與所述目標(biāo)用戶類型對(duì)應(yīng)的分發(fā)硬件;
將讀取到的數(shù)據(jù)發(fā)送至查找到的分發(fā)硬件,以由所述分發(fā)硬件基于預(yù)設(shè)的數(shù)據(jù)連接將所述讀取到的數(shù)據(jù)返回給對(duì)應(yīng)的用戶。
上述裝置中各個(gè)單元的功能和作用的實(shí)現(xiàn)過(guò)程具體詳見(jiàn)上述方法中對(duì)應(yīng)步驟的實(shí)現(xiàn)過(guò)程,在此不再贅述。
對(duì)于裝置實(shí)施例而言,由于其基本對(duì)應(yīng)于方法實(shí)施例,所以相關(guān)之處參見(jiàn)方法實(shí)施例的部分說(shuō)明即可。以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部模塊來(lái)實(shí)現(xiàn)本申請(qǐng)方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動(dòng)的情況下,即可以理解并實(shí)施。
以上所述僅為本申請(qǐng)的較佳實(shí)施例而已,并不用以限制本申請(qǐng),凡在本申請(qǐng)的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請(qǐng)保護(hù)的范圍之內(nèi)。