本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,尤其涉及內(nèi)存訪問的方法、系統(tǒng)及本地節(jié)點(diǎn)。
背景技術(shù):
常用的內(nèi)存訪問機(jī)制之一為遠(yuǎn)端直接內(nèi)存訪問(Remote Direct Memory Access,RDMA)訪問機(jī)制。該機(jī)制是在傳統(tǒng)直接內(nèi)存訪問(Direct Memory Access,DMA)訪問機(jī)制基礎(chǔ)上,添加本地內(nèi)存和遠(yuǎn)端內(nèi)存交換控制功能的工作方式。即,RDMA控制器完全接管CPU以實(shí)現(xiàn)對(duì)總線的控制,內(nèi)存數(shù)據(jù)交換不經(jīng)過CPU,而直接在本地內(nèi)存和遠(yuǎn)端內(nèi)存之間進(jìn)行,以中斷方式向CPU報(bào)告?zhèn)魉筒僮鞯慕Y(jié)束。其中,本地內(nèi)存位于本地節(jié)點(diǎn)中,遠(yuǎn)端內(nèi)存位于多個(gè)遠(yuǎn)端節(jié)點(diǎn)中。
現(xiàn)有技術(shù)中,先申請(qǐng)分配一定數(shù)量的遠(yuǎn)端內(nèi)存給本地節(jié)點(diǎn)使用。該情況下,一般會(huì)將每個(gè)遠(yuǎn)端節(jié)點(diǎn)內(nèi)的一大段連續(xù)地址空間分配給本地節(jié)點(diǎn)使用。舉例而言,本地節(jié)點(diǎn)申請(qǐng)0x0000_0000-0xFFFF_FFFF共4G的地址空間,這4G的地址空間可以分布在遠(yuǎn)端節(jié)點(diǎn)1-4上。其中,若遠(yuǎn)端節(jié)點(diǎn)1-4每個(gè)為1G,則,0x0000_0000-0x3FFFF_FFFF這1G的連續(xù)地址空間集中在遠(yuǎn)端節(jié)點(diǎn)1上,0x4000_0000-0x7FFF_FFFF這1G的地址空間集中在遠(yuǎn)端節(jié)點(diǎn)2上,0x8000_0000-0xBFFF_FFFF這1G的地址空間集中在遠(yuǎn)端節(jié)點(diǎn)3上,0xC000_0000-0xFFFF_FFFF這1G的地址空間集中在遠(yuǎn)端節(jié)點(diǎn)4上。
然而,在上述過程中,發(fā)明人發(fā)現(xiàn)至少存在如下問題:將每個(gè)遠(yuǎn)端節(jié)點(diǎn)內(nèi)的一大段連續(xù)地址空間分配給本地節(jié)點(diǎn)使用,當(dāng)訪問的數(shù)據(jù)集中在某一遠(yuǎn)端節(jié)點(diǎn)時(shí),就會(huì)導(dǎo)致訪存帶寬受限于本地節(jié)點(diǎn)與該遠(yuǎn)端節(jié)點(diǎn)間的鏈路帶寬。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的實(shí)施例提供一種內(nèi)存訪問的方法、系統(tǒng)及本地節(jié)點(diǎn),能夠避免訪存帶寬受限于本地節(jié)點(diǎn)與遠(yuǎn)端節(jié)點(diǎn)間的鏈路帶寬的問題。
為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案:
第一方面,本發(fā)明實(shí)施例提供一種內(nèi)存訪問的方法,包括:
對(duì)數(shù)據(jù)對(duì)應(yīng)的,本地節(jié)點(diǎn)的地址和多個(gè)遠(yuǎn)端節(jié)點(diǎn)的地址之間用交叉編址的方式建立映射關(guān)系;
基于所述建立的映射關(guān)系,將所述數(shù)據(jù)分別路由給所述多個(gè)遠(yuǎn)端節(jié)點(diǎn)。
結(jié)合第一方面,在第一種可能的實(shí)現(xiàn)方式中,所述映射關(guān)系包括以下信息:本地節(jié)點(diǎn)的地址、遠(yuǎn)端節(jié)點(diǎn)的循環(huán)距離、遠(yuǎn)端節(jié)點(diǎn)識(shí)別碼ID、遠(yuǎn)端節(jié)點(diǎn)的地址以及粒度;
其中,所述本地節(jié)點(diǎn)的地址和所述遠(yuǎn)端節(jié)點(diǎn)的地址形成映射關(guān)系;所述遠(yuǎn)端節(jié)點(diǎn)的循環(huán)距離表示所述本地節(jié)點(diǎn)所映射的所述遠(yuǎn)端節(jié)點(diǎn)的個(gè)數(shù);所述遠(yuǎn)端節(jié)點(diǎn)ID表示映射的所述遠(yuǎn)端節(jié)點(diǎn)的起始節(jié)點(diǎn)號(hào);所述粒度表示每次分配給所述映射的遠(yuǎn)端節(jié)點(diǎn)的連續(xù)地址的長(zhǎng)度。
結(jié)合第一方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述本地節(jié)點(diǎn)內(nèi)的地址和多個(gè)遠(yuǎn)端節(jié)點(diǎn)內(nèi)的地址之間用交叉編址的方式建立映射關(guān)系具體包括:
確定所述本地節(jié)點(diǎn)的地址;
設(shè)置所述節(jié)點(diǎn)循環(huán)距離及所述粒度;
根據(jù)所述確定的本地節(jié)點(diǎn)的地址、所述設(shè)置的節(jié)點(diǎn)循環(huán)距離及粒度,利用內(nèi)存分割公式確定所述遠(yuǎn)端節(jié)點(diǎn)ID以及所述遠(yuǎn)端節(jié)點(diǎn)的地址。
結(jié)合第一方面,在第三種可能的實(shí)現(xiàn)方式中,在所述基于所述建立的映射關(guān)系,將所述數(shù)據(jù)分別路由給所述多個(gè)遠(yuǎn)端節(jié)點(diǎn)之后,所述方法還包括:
當(dāng)訪問所述數(shù)據(jù)的至少一部分時(shí),確定所述至少一部分?jǐn)?shù)據(jù)的本地節(jié)點(diǎn)的地址;
根據(jù)所述確定的本地節(jié)點(diǎn)的地址,基于所述建立的映射關(guān)系,獲取所述遠(yuǎn)端節(jié)點(diǎn)的信息,所述遠(yuǎn)端節(jié)點(diǎn)的信息包含所述遠(yuǎn)端節(jié)點(diǎn)ID和所述遠(yuǎn)端節(jié)點(diǎn)的地址;
將所述遠(yuǎn)端節(jié)點(diǎn)ID和所述遠(yuǎn)端節(jié)點(diǎn)的地址封裝到數(shù)據(jù)報(bào)文中。
結(jié)合第一方面的第一種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,根據(jù)緩存線cache line或頁page確定所述粒度的大小。
第二方面,本發(fā)明實(shí)施例提供一種本地節(jié)點(diǎn),包括:
建立單元,用于對(duì)數(shù)據(jù)對(duì)應(yīng)的,本地節(jié)點(diǎn)內(nèi)的地址和多個(gè)遠(yuǎn)端節(jié)點(diǎn)內(nèi)的地址之間用交叉編址的方式建立映射關(guān)系;
路由單元,用于基于所述建立單元建立的映射關(guān)系,將所述數(shù)據(jù)分別路由給所述多個(gè)遠(yuǎn)端節(jié)點(diǎn)。
結(jié)合第二方面,在第一種可能的實(shí)現(xiàn)方式中,所述映射關(guān)系包括以下信息:本地節(jié)點(diǎn)的地址、遠(yuǎn)端節(jié)點(diǎn)的循環(huán)距離、遠(yuǎn)端節(jié)點(diǎn)識(shí)別碼ID、遠(yuǎn)端節(jié)點(diǎn)的地址以及粒度;
其中,所述本地節(jié)點(diǎn)的地址和所述遠(yuǎn)端節(jié)點(diǎn)的地址形成映射關(guān)系;所述遠(yuǎn)端節(jié)點(diǎn)的循環(huán)距離表示所述本地節(jié)點(diǎn)所映射的所述遠(yuǎn)端節(jié)點(diǎn)的個(gè)數(shù);所述遠(yuǎn)端節(jié)點(diǎn)ID表示映射的所述遠(yuǎn)端節(jié)點(diǎn)的起始節(jié)點(diǎn)號(hào);所述粒度表示每次分配給所述映射的遠(yuǎn)端節(jié)點(diǎn)的連續(xù)地址的長(zhǎng)度。
結(jié)合第二方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述建立單元具體包括:
確定模塊,用于確定所述本地節(jié)點(diǎn)的地址;
設(shè)置模塊,用于設(shè)置所述節(jié)點(diǎn)循環(huán)距離及所述粒度;
所述確定模塊還用于,根據(jù)所述確定模塊確定的本地節(jié)點(diǎn)的地址、所述設(shè)置模塊設(shè)置的節(jié)點(diǎn)循環(huán)距離及粒度,利用內(nèi)存分割公式確定所述遠(yuǎn)端節(jié)點(diǎn)ID以及所述遠(yuǎn)端節(jié)點(diǎn)的地址。
結(jié)合第二方面,在第三種可能的實(shí)現(xiàn)方式中,所述路由單元還用于:
當(dāng)訪問所述數(shù)據(jù)的至少一部分時(shí),確定所述至少一部分?jǐn)?shù)據(jù)的本地節(jié)點(diǎn)的地址;
根據(jù)所述確定的本地節(jié)點(diǎn)的地址,基于所述建立的映射關(guān)系,獲取所述遠(yuǎn)端節(jié)點(diǎn)的信息,所述遠(yuǎn)端節(jié)點(diǎn)的信息包含所述遠(yuǎn)端節(jié)點(diǎn)ID和所述遠(yuǎn)端節(jié)點(diǎn)的地址;
將所述遠(yuǎn)端節(jié)點(diǎn)ID和所述遠(yuǎn)端節(jié)點(diǎn)的地址封裝到數(shù)據(jù)報(bào)文中。
第三方面,本發(fā)明實(shí)施例提供一種內(nèi)存訪問的系統(tǒng),所述系統(tǒng)包括多個(gè)遠(yuǎn)端節(jié)點(diǎn)以及第二方面中任一方面所述的本地節(jié)點(diǎn)。
本發(fā)明實(shí)施例提供的內(nèi)存訪問的方法、系統(tǒng)及本地節(jié)點(diǎn),該方法包括:對(duì)數(shù)據(jù)對(duì)應(yīng)的,本地節(jié)點(diǎn)和多個(gè)遠(yuǎn)端節(jié)點(diǎn)之間用交叉編址的方式建 立映射關(guān)系;基于建立的映射關(guān)系,將數(shù)據(jù)分別路由給多個(gè)遠(yuǎn)端節(jié)點(diǎn)。這種基于用交叉編址的方式建立的映射關(guān)系將數(shù)據(jù)分別分配在多個(gè)遠(yuǎn)端節(jié)點(diǎn)內(nèi)的方式,與現(xiàn)有技術(shù)中將數(shù)據(jù)的一大段連續(xù)地址分配到每一個(gè)遠(yuǎn)端節(jié)點(diǎn)的方式相比,在訪問數(shù)據(jù)時(shí)不會(huì)出現(xiàn)集中訪問某一遠(yuǎn)端節(jié)點(diǎn)進(jìn)而導(dǎo)致訪存帶寬受限于鏈路帶寬的問題,而是可以從多個(gè)遠(yuǎn)端節(jié)點(diǎn)分別、并行地訪問,充分利用各個(gè)遠(yuǎn)端節(jié)點(diǎn)與本地節(jié)點(diǎn)之間的鏈路帶寬,進(jìn)而提高了鏈路帶寬的利用率。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例一的內(nèi)存訪問的方法的一種流程示意圖;
圖2為本發(fā)明的實(shí)施例二提供的本地節(jié)點(diǎn)的一種結(jié)構(gòu)示意圖;
圖3為本發(fā)明的實(shí)施例二提供的本地節(jié)點(diǎn)的另一種結(jié)構(gòu)示意圖;
圖4為本發(fā)明的實(shí)施例三提供的內(nèi)存訪問的系統(tǒng)的一種系統(tǒng)架構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明實(shí)施例一提供一種內(nèi)存訪問的方法,如圖1所示,該方法包括以下步驟:
步驟S101,本地節(jié)點(diǎn)對(duì)數(shù)據(jù)對(duì)應(yīng)的,本地節(jié)點(diǎn)的地址和多個(gè)遠(yuǎn)端節(jié)點(diǎn)的地址之間用交叉編址的方式建立映射關(guān)系。
具體地,對(duì)數(shù)據(jù)對(duì)應(yīng)的,本地節(jié)點(diǎn)的地址和多個(gè)遠(yuǎn)端節(jié)點(diǎn)的地址之間用交叉編址的方式建立映射關(guān)系,以便在接收訪問該數(shù)據(jù)的指令后, 從映射的多個(gè)遠(yuǎn)端節(jié)點(diǎn)的地址中獲取所述數(shù)據(jù)。在本發(fā)明實(shí)施例中,交叉編址的方式可以將數(shù)據(jù)的連續(xù)地址分割成多個(gè)小段的連續(xù)地址,每小段的連續(xù)地址的大小可以以單位“KB”或“B”衡量。
可選地,本步驟中的映射關(guān)系包括以下信息:
本地節(jié)點(diǎn)的地址、遠(yuǎn)端節(jié)點(diǎn)的循環(huán)距離、遠(yuǎn)端節(jié)點(diǎn)識(shí)別碼ID、遠(yuǎn)端節(jié)點(diǎn)的地址以及粒度;
其中,本地節(jié)點(diǎn)的地址和遠(yuǎn)端節(jié)點(diǎn)的地址形成映射關(guān)系,其中遠(yuǎn)端節(jié)點(diǎn)的地址為物理地址;遠(yuǎn)端節(jié)點(diǎn)的循環(huán)距離表示本地節(jié)點(diǎn)所映射的遠(yuǎn)端節(jié)點(diǎn)的個(gè)數(shù);遠(yuǎn)端節(jié)點(diǎn)ID表示映射的遠(yuǎn)端節(jié)點(diǎn)的起始節(jié)點(diǎn)號(hào);粒度表示每次分配給所述映射的遠(yuǎn)端節(jié)點(diǎn)的連續(xù)地址的長(zhǎng)度。
具體而言,遠(yuǎn)端節(jié)點(diǎn)的循環(huán)距離可以取的數(shù)值為不大于可以與本地節(jié)點(diǎn)形成映射的遠(yuǎn)端節(jié)點(diǎn)個(gè)數(shù)的最大值。例如,可以與本地節(jié)點(diǎn)形成映射的遠(yuǎn)端節(jié)點(diǎn)個(gè)數(shù)的最大值為4時(shí),則遠(yuǎn)端節(jié)點(diǎn)的循環(huán)距離可設(shè)置為1,2,3或4。其中當(dāng)設(shè)置為4時(shí),這表示4個(gè)遠(yuǎn)端節(jié)點(diǎn)與本地節(jié)點(diǎn)形成映射關(guān)系。
以及,遠(yuǎn)端節(jié)點(diǎn)ID表示在本地節(jié)點(diǎn)與至少一個(gè)遠(yuǎn)端節(jié)點(diǎn)形成映射關(guān)系后,該本地節(jié)點(diǎn)映射的至少一個(gè)遠(yuǎn)端節(jié)點(diǎn)中的第一個(gè)遠(yuǎn)端節(jié)點(diǎn)的編號(hào)。當(dāng)訪問的數(shù)據(jù)根據(jù)該本地節(jié)點(diǎn)的地址并通過該本地節(jié)點(diǎn)的地址與多個(gè)遠(yuǎn)端節(jié)點(diǎn)的地址的映射關(guān)系,找到多個(gè)遠(yuǎn)端節(jié)點(diǎn)的地址時(shí),然后在訪問過程中根據(jù)遠(yuǎn)端節(jié)點(diǎn)ID,從第一個(gè)遠(yuǎn)端節(jié)點(diǎn)的地址開始訪問。
以及,粒度表示每次分配給映射的遠(yuǎn)端節(jié)點(diǎn)的連續(xù)地址的長(zhǎng)度單位。例如,當(dāng)粒度取值10Kbyte時(shí),則表示以10Kbyte的單位向映射的每個(gè)遠(yuǎn)端節(jié)點(diǎn)依次、循環(huán)地分配地址。例如,當(dāng)需要將1G內(nèi)存的數(shù)據(jù)分配到映射的2個(gè)遠(yuǎn)端節(jié)點(diǎn)(編號(hào)為1和2)時(shí),則可以將1G中的第一個(gè)10Kbyte分配給遠(yuǎn)端節(jié)點(diǎn)1,將1G中的第二個(gè)10Kbyte分配給遠(yuǎn)端節(jié)點(diǎn)2,然后將1G中的第三個(gè)10Kbyte分配給遠(yuǎn)端節(jié)點(diǎn)1,依次循環(huán),直至該1G內(nèi)存被完全分配到這2個(gè)遠(yuǎn)端節(jié)點(diǎn)上。
進(jìn)一步地,對(duì)于如何確定粒度的大小,可以根據(jù)緩存線cache line或頁page來確定。
具體地,cache line的長(zhǎng)度一般為32Byte或者64Byte,當(dāng)粒度按照cache line的長(zhǎng)度作為分配給映射的遠(yuǎn)端節(jié)點(diǎn)的連續(xù)地址的長(zhǎng)度單位時(shí), 能夠避免緩存cache從內(nèi)存取數(shù)據(jù)時(shí),該數(shù)據(jù)的內(nèi)存卻被分配到兩個(gè)不同的遠(yuǎn)端節(jié)點(diǎn)的情況,也即當(dāng)粒度的長(zhǎng)度小于cache line的長(zhǎng)度時(shí)容易產(chǎn)生數(shù)據(jù)的內(nèi)存卻被分配到兩個(gè)不同的遠(yuǎn)端節(jié)點(diǎn)的情況。當(dāng)然,還可以以比cache line的長(zhǎng)度更大的長(zhǎng)度作為粒度。例如按照page的長(zhǎng)度。Page的長(zhǎng)度一般為4KByte,當(dāng)粒度按照Page的長(zhǎng)度作為分配給映射的遠(yuǎn)端節(jié)點(diǎn)的連續(xù)地址的長(zhǎng)度單位時(shí),能夠避免跨頁而引起的多次進(jìn)行內(nèi)存訪問的問題。
需說明的是,粒度還能根據(jù)其他方式確定其大小。這可以由本領(lǐng)域技術(shù)人員根據(jù)數(shù)據(jù)內(nèi)存的大小及實(shí)際應(yīng)用來設(shè)置。例如,可對(duì)應(yīng)用在不同粒度下多次運(yùn)行,挑選出最優(yōu)粒度,以期實(shí)現(xiàn)最快完成應(yīng)用的執(zhí)行,對(duì)此本發(fā)明并不做限定。
此外,建立的映射關(guān)系中還可以包括信息:標(biāo)識(shí)。標(biāo)識(shí)用于表示遠(yuǎn)端節(jié)點(diǎn)的地址映射是否有效。當(dāng)標(biāo)識(shí)設(shè)置為1時(shí),表示設(shè)置為“1”的標(biāo)識(shí)對(duì)應(yīng)的地址映射是有效的;當(dāng)標(biāo)識(shí)設(shè)置為0時(shí),表示設(shè)置為“0”的標(biāo)識(shí)對(duì)應(yīng)的地址映射是無效的。其中,該標(biāo)識(shí)可被設(shè)置為允許更改。標(biāo)識(shí)是否允許更改可根據(jù)本領(lǐng)域技術(shù)人員的經(jīng)驗(yàn)和具體情況確定。
可選地,在本發(fā)明一個(gè)具體實(shí)施例中,本地節(jié)點(diǎn)的地址和多個(gè)遠(yuǎn)端節(jié)點(diǎn)的地址之間采用交叉編址的方式建立映射關(guān)系具體包括:
確定本地節(jié)點(diǎn)的地址;
設(shè)置節(jié)點(diǎn)循環(huán)距離及粒度;
根據(jù)確定的本地節(jié)點(diǎn)的地址、設(shè)置的節(jié)點(diǎn)循環(huán)距離及粒度,利用內(nèi)存分割公式確定要訪問的遠(yuǎn)端節(jié)點(diǎn)ID以及該遠(yuǎn)端節(jié)點(diǎn)的地址。
上述步驟中,確定本地節(jié)點(diǎn)的地址的步驟和設(shè)置節(jié)點(diǎn)循環(huán)距離及粒度的步驟并無先后順序,也即,可以先確定本地節(jié)點(diǎn)的地址,再設(shè)置節(jié)點(diǎn)循環(huán)距離及粒度;也可以先設(shè)置節(jié)點(diǎn)循環(huán)距離及粒度,再確定本地節(jié)點(diǎn)的地址;還可以同時(shí)執(zhí)行這兩個(gè)步驟。
在本發(fā)明實(shí)施例中,內(nèi)存分割公式例如可以通過以下程序?qū)崿F(xiàn),以被分配的數(shù)據(jù)內(nèi)存為4G、設(shè)置的粒度為4KB且節(jié)點(diǎn)循環(huán)距離為4為例:
以及,遠(yuǎn)端節(jié)點(diǎn)的地址=32’b{2’b00,addr_local[31:14],addr_local[11:0]};
其中,32’b代表為遠(yuǎn)端的32位地址;addr_local[31:14]代表當(dāng)前4kB應(yīng)該放到遠(yuǎn)端節(jié)點(diǎn)的哪個(gè)位置。
在上述程序中實(shí)現(xiàn)如下過程:若數(shù)據(jù)內(nèi)存為4G,則按照現(xiàn)有技術(shù)的實(shí)施方式為將整個(gè)4G內(nèi)存分成4大塊內(nèi)存,所以每大塊內(nèi)存的編址為0-1G,故最高位設(shè)為2’b00。而在本發(fā)明實(shí)施例中,可以根據(jù)設(shè)置為4KB大小的粒度,將4G分割成多個(gè)小塊內(nèi)存,其中每個(gè)小塊內(nèi)存對(duì)應(yīng)4KB的小段地址,而每一小塊內(nèi)存的訪問地址和本地地址的低12位地址相比是不變的,所以低12位保持不變,而addr_local[13:12]將由遠(yuǎn)端內(nèi)存nodeID來體現(xiàn),所以此處去掉addr_local[13:12]兩位。然后,將addr_local[31:14]后移兩位,用來表示4G中的4KB分配到某一遠(yuǎn)端節(jié)點(diǎn)后,該4KB在遠(yuǎn)端節(jié)點(diǎn)中的位置。舉例而言,4G中的第1個(gè)4KB地址{000,addr_local[11:0]}應(yīng)該放到遠(yuǎn)端節(jié)點(diǎn)1的第1個(gè)4KB內(nèi)存地址中,對(duì)應(yīng)地,在程序中,去掉addr_local[13:12],addr_local[14]=0,正好能夠代表遠(yuǎn)端節(jié)點(diǎn)1的第一個(gè)地址;4G中的第5個(gè)4KB地址{100,addr_local[11:0]}應(yīng)該放到遠(yuǎn)端節(jié)點(diǎn)1的第二個(gè)4KB內(nèi)存地址中,對(duì)應(yīng)地,在程序中,去掉addr_local[13:12],addr_local[14]=1,正好能夠代表遠(yuǎn)端節(jié)點(diǎn)1的第二個(gè)地址。
可理解的,上述過程可由軟件實(shí)現(xiàn),該軟件用于在將地址發(fā)往內(nèi)存資源控制器之前完成地址轉(zhuǎn)換。而且,上述程序的功能可通過升級(jí)軟件的方式實(shí)現(xiàn)。另外,在硬件層面上,需要對(duì)本地節(jié)點(diǎn)的內(nèi)存資源控制器 進(jìn)行修改,如在內(nèi)存資源控制器上增加類似譯碼器的功能,用于查尋訪存所在的遠(yuǎn)端節(jié)點(diǎn),然后進(jìn)行運(yùn)算得到遠(yuǎn)端內(nèi)存地址。
需說明的是,本發(fā)明實(shí)施例中的本地節(jié)點(diǎn)和多個(gè)遠(yuǎn)端節(jié)點(diǎn)之間建立的映射關(guān)系可以以映射表的形式存在。而且該映射表可以存儲(chǔ)在本地節(jié)點(diǎn)的內(nèi)存資源控制器中。
步驟S102,本地節(jié)點(diǎn)基于建立的映射關(guān)系,將數(shù)據(jù)分別路由在多個(gè)遠(yuǎn)端節(jié)點(diǎn)內(nèi)。
具體地,由于用交叉編址的方式建立映射關(guān)系,因此基于該建立的映射關(guān)系,數(shù)據(jù)可被分成若干小塊分別路由在多個(gè)遠(yuǎn)端節(jié)點(diǎn)內(nèi)。
可選地,在本發(fā)明一個(gè)具體實(shí)施例中,在步驟S102之后,方法還包括以下步驟:
步驟1021,當(dāng)訪問數(shù)據(jù)的至少一部分時(shí),確定所述至少一部分?jǐn)?shù)據(jù)的本地節(jié)點(diǎn)的地址;
步驟1022,根據(jù)確定的本地節(jié)點(diǎn)的地址,基述建立的映射關(guān)系,獲取遠(yuǎn)端節(jié)點(diǎn)的信息,遠(yuǎn)端節(jié)點(diǎn)的信息包含遠(yuǎn)端節(jié)點(diǎn)ID和遠(yuǎn)端節(jié)點(diǎn)的地址;
步驟1023,本地節(jié)點(diǎn)將遠(yuǎn)端節(jié)點(diǎn)ID和遠(yuǎn)端節(jié)點(diǎn)的地址封裝到數(shù)據(jù)報(bào)文中。
在步驟1021中,訪問的數(shù)據(jù)可以是之前被路由的數(shù)據(jù)中的全部數(shù)據(jù),也可以是之前被路由的數(shù)據(jù)中的一部分?jǐn)?shù)據(jù)。
在步驟1023中,遠(yuǎn)端節(jié)點(diǎn)的地址為所訪問的數(shù)據(jù)在遠(yuǎn)端節(jié)點(diǎn)的地址。另外,在本地節(jié)點(diǎn)在完成封裝后,將該封裝的報(bào)文傳輸給本地節(jié)點(diǎn)的高速串行通信協(xié)議,高速串行通信協(xié)議的路由機(jī)制根據(jù)遠(yuǎn)端節(jié)點(diǎn)ID確定本地物理層的端口。通過該端口將報(bào)文發(fā)送給遠(yuǎn)端節(jié)點(diǎn),從而遠(yuǎn)端節(jié)點(diǎn)根據(jù)該報(bào)文信息進(jìn)行讀寫內(nèi)存操作。
遠(yuǎn)端節(jié)點(diǎn)可通過端口將讀寫內(nèi)存的結(jié)果發(fā)送給本地節(jié)點(diǎn)。
需指出,上述步驟1021至1023可由本地節(jié)點(diǎn)中的內(nèi)存資源控制器執(zhí)行。
本發(fā)明實(shí)施例提供一種內(nèi)存訪問的方法,該方法包括:對(duì)數(shù)據(jù)對(duì)應(yīng)的,本地節(jié)點(diǎn)和多個(gè)遠(yuǎn)端節(jié)點(diǎn)之間用交叉編址的方式建立映射關(guān)系;基于建立的映射關(guān)系,將數(shù)據(jù)分別存儲(chǔ)在多個(gè)遠(yuǎn)端節(jié)點(diǎn)內(nèi)。這種基于用交 叉編址的方式建立的映射關(guān)系將數(shù)據(jù)分別存儲(chǔ)在多個(gè)遠(yuǎn)端節(jié)點(diǎn)內(nèi)的方式,與現(xiàn)有技術(shù)中將數(shù)據(jù)的一大段連續(xù)地址分配到每一個(gè)遠(yuǎn)端節(jié)點(diǎn)的方式相比,在訪問數(shù)據(jù)時(shí)不會(huì)出現(xiàn)集中訪問某一遠(yuǎn)端節(jié)點(diǎn)進(jìn)而導(dǎo)致訪存帶寬受限于鏈路帶寬的問題,而是可以從多個(gè)遠(yuǎn)端節(jié)點(diǎn)分別、并行地訪問,充分利用各個(gè)遠(yuǎn)端節(jié)點(diǎn)與本地節(jié)點(diǎn)之間的鏈路帶寬,進(jìn)而提高了鏈路帶寬的利用率。
本發(fā)明實(shí)施例二還提供一種本地節(jié)點(diǎn),如圖2所示,本地節(jié)點(diǎn)20包括:
建立單元201,用于對(duì)數(shù)據(jù)對(duì)應(yīng)的,本地節(jié)點(diǎn)內(nèi)的地址和多個(gè)遠(yuǎn)端節(jié)點(diǎn)內(nèi)的地址之間用交叉編址的方式建立映射關(guān)系;
路由單元202,用于基于建立單元201建立的映射關(guān)系,將數(shù)據(jù)分別路由給所述多個(gè)遠(yuǎn)端節(jié)點(diǎn)。
本發(fā)明實(shí)施例提供一種本地節(jié)點(diǎn),本地節(jié)點(diǎn)包括:建立單元,用于對(duì)數(shù)據(jù)對(duì)應(yīng)的,本地節(jié)點(diǎn)內(nèi)的地址和多個(gè)遠(yuǎn)端節(jié)點(diǎn)內(nèi)的地址之間用交叉編址的方式建立映射關(guān)系;存儲(chǔ)單元,基于建立單元建立的映射關(guān)系,將數(shù)據(jù)分別路由給所述多個(gè)遠(yuǎn)端節(jié)點(diǎn)。這種基于用交叉編址的方式建立的映射關(guān)系從而將數(shù)據(jù)分別分配在多個(gè)遠(yuǎn)端節(jié)點(diǎn)內(nèi)的本地節(jié)點(diǎn),與現(xiàn)有技術(shù)中將數(shù)據(jù)的一大段連續(xù)地址分配到每一個(gè)遠(yuǎn)端節(jié)點(diǎn)的本地節(jié)點(diǎn)相比,在訪問數(shù)據(jù)時(shí)不會(huì)出現(xiàn)集中訪問某一遠(yuǎn)端節(jié)點(diǎn)進(jìn)而導(dǎo)致訪存帶寬受限于鏈路帶寬的問題,而是能夠從多個(gè)遠(yuǎn)端節(jié)點(diǎn)分別、并行地訪問,從而充分利用各個(gè)遠(yuǎn)端節(jié)點(diǎn)與本地節(jié)點(diǎn)之間的鏈路帶寬,進(jìn)而提高了鏈路帶寬的利用率。
可選地,映射關(guān)系包括以下信息:本地節(jié)點(diǎn)的地址、遠(yuǎn)端節(jié)點(diǎn)的循環(huán)距離、遠(yuǎn)端節(jié)點(diǎn)識(shí)別碼ID、遠(yuǎn)端節(jié)點(diǎn)的地址以及粒度;
其中,本地節(jié)點(diǎn)的地址和遠(yuǎn)端節(jié)點(diǎn)的地址形成映射關(guān)系;遠(yuǎn)端節(jié)點(diǎn)的循環(huán)距離表示本地節(jié)點(diǎn)所映射的遠(yuǎn)端節(jié)點(diǎn)的個(gè)數(shù);遠(yuǎn)端節(jié)點(diǎn)ID表示映射的遠(yuǎn)端節(jié)點(diǎn)的起始節(jié)點(diǎn)號(hào);粒度表示每次分配給所述映射的遠(yuǎn)端節(jié)點(diǎn)的連續(xù)地址的長(zhǎng)度。
可選地,在本發(fā)明的一個(gè)具體實(shí)施例中,如圖3所示,建立單元201具體包括:
確定模塊2011,用于確定本地節(jié)點(diǎn)的地址;
設(shè)置模塊2012,用于設(shè)置節(jié)點(diǎn)循環(huán)距離及粒度;
確定模塊2011還用于,根據(jù)確定模塊2011確定的本地節(jié)點(diǎn)的地址、設(shè)置模塊2012設(shè)置的節(jié)點(diǎn)循環(huán)距離及粒度,利用內(nèi)存分割公式確定遠(yuǎn)端節(jié)點(diǎn)ID以及遠(yuǎn)端節(jié)點(diǎn)的地址。
可選地,在本發(fā)明的一個(gè)具體實(shí)施例中,路由單元202還用于:
當(dāng)訪問數(shù)據(jù)的至少一部分時(shí),確定所述至少一部分?jǐn)?shù)據(jù)的本地節(jié)點(diǎn)的地址;
根據(jù)確定的本地節(jié)點(diǎn)的地址,基于建立的映射關(guān)系,獲取遠(yuǎn)端節(jié)點(diǎn)的信息,所述遠(yuǎn)端節(jié)點(diǎn)的信息包含遠(yuǎn)端節(jié)點(diǎn)ID和遠(yuǎn)端節(jié)點(diǎn)的地址;
將遠(yuǎn)端節(jié)點(diǎn)ID和遠(yuǎn)端節(jié)點(diǎn)的地址封裝到數(shù)據(jù)報(bào)文中。
需要說明的是,本發(fā)明實(shí)施例提供的本地節(jié)點(diǎn)中部分功能模塊的具體描述可以參考方法實(shí)施例中的對(duì)應(yīng)內(nèi)容,本實(shí)施例這里不再詳細(xì)贅述。
本發(fā)明實(shí)施例三還提供一種內(nèi)存訪問的系統(tǒng)30,如圖4所示,該系統(tǒng)包括多個(gè)遠(yuǎn)端節(jié)點(diǎn)以及上述實(shí)施例中的任意具體實(shí)施例所述的本地節(jié)點(diǎn)20,在圖4中,多個(gè)遠(yuǎn)端節(jié)點(diǎn)用遠(yuǎn)端節(jié)點(diǎn)“1”、遠(yuǎn)端節(jié)點(diǎn)“2”、遠(yuǎn)端節(jié)點(diǎn)“N”表示。
通過以上的實(shí)施方式的描述,所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,僅以上述各功能模塊的劃分進(jìn)行舉例說明,實(shí)際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將裝置的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過程,在此不再贅述。
在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述模塊或單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開 的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)或處理器(processor)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤、移動(dòng)硬盤、只讀存儲(chǔ)器(ROM,Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以所述權(quán)利要求的保護(hù)范圍為準(zhǔn)。