專利名稱:多計算機系統(tǒng)中節(jié)點的dma設(shè)備及通信方法
技術(shù)領(lǐng)域:
本發(fā)明涉及DMA (Direct Memory Access,直接內(nèi)存存取)領(lǐng)域,尤其 涉及多計算機系統(tǒng)中節(jié)點的DMA設(shè)備及通信方法。
背景技術(shù):
在多計算機系統(tǒng)內(nèi)部,任意節(jié)點間經(jīng)常需要進行數(shù)據(jù)的交換,因此數(shù)據(jù) 交換的性能會影響通信的新能。靈活高效地將數(shù)據(jù)從一個節(jié)點的內(nèi)存復(fù)制到 另一個節(jié)點的內(nèi)存中,能夠為多計算機系統(tǒng)提供的強大的通信能力。由處理 器直接處理內(nèi)存數(shù)據(jù)的存取會帶來巨大的處理器開銷,而DMA技術(shù)能夠避免 處理器將處理能力浪費在簡單重復(fù)的內(nèi)存讀寫操作中,因此多計算機系統(tǒng)的 節(jié)點間在通信時也會使用DMA技術(shù)。實現(xiàn)DMA技術(shù)的專用硬件稱為DMA設(shè)備。
現(xiàn)在通用的微處理器在發(fā)出一條或者幾條讀內(nèi)存指令后就會處于等待狀 態(tài),直到數(shù)據(jù)返回。當(dāng)微處理器處于等待狀態(tài)時不會執(zhí)行其它指令,這會造 成處理器的吞吐能力和運算能力的浪費。如果需要讀取的數(shù)據(jù)的物理地址是 連續(xù)的,微處理器中cache的預(yù)取機制可以極大地降低處理器的等待時間, 從而有效地提高處理器的吞吐能力。但是在處理器讀內(nèi)存時,處理器中的運 算部件會長時間空閑,因而造成處理器的運算能力的浪費。同樣地,在處理 器寫內(nèi)存時,處理器中的運算部件也會長時間空閑,造成處理器的運算能力 的浪費。
DMA設(shè)備能夠取代處理器從事簡單重復(fù)的內(nèi)存讀寫操作,避免處理器的 處理能力的浪費。因此,DMA設(shè)備廣泛應(yīng)用在單計算機系統(tǒng)和多計算機系統(tǒng) 中。在單計算機系統(tǒng)中,DMA設(shè)備能夠?qū)崿F(xiàn)內(nèi)存到自身、內(nèi)存到I/0接口的 數(shù)據(jù)傳送。而在多計算機系統(tǒng)中,DMA設(shè)備能夠按照處理器的命令,讀取源 節(jié)點的內(nèi)存中的數(shù)據(jù),并寫入目標(biāo)節(jié)點的內(nèi)存中。
在單計算機系統(tǒng)中,處理器通常通過一組寄存器實現(xiàn)對DMA設(shè)備的使用。
這組寄存器包括源地址寄存器、目標(biāo)地址寄存器、數(shù)據(jù)長度寄存器和狀態(tài)寄存器。源地址寄存器存放需要傳送的數(shù)據(jù)在內(nèi)存中的首地址;目標(biāo)地址寄
存器存放用于接收數(shù)據(jù)的內(nèi)存空間的首地址;數(shù)據(jù)長度寄存器存放需要傳送
的數(shù)據(jù)的長度;狀態(tài)寄存器存放DMA設(shè)備的狀態(tài)。處理器在進行一次DMA數(shù) 據(jù)傳輸之前要先檢査狀態(tài)寄存器的值,如果DMA設(shè)備處于空閑狀態(tài),就設(shè)置 好源地址寄存器、目標(biāo)地址寄存器和數(shù)據(jù)長度寄存器,然后將狀態(tài)寄存器設(shè) 置為工作狀態(tài);如果DMA設(shè)備已經(jīng)處于工作狀態(tài),處理器就需要等待。DMA 設(shè)備在空閑時如果看到狀態(tài)寄存器被設(shè)置為工作狀態(tài)就會自動啟動,完成 DMA數(shù)據(jù)傳輸后又會將狀態(tài)寄存器設(shè)置成空閑狀態(tài)。
在多計算機系統(tǒng)中,通過類似單計算機系統(tǒng)的一組寄存器來實現(xiàn)對DMA 設(shè)備的控制通常是不夠的。這是由于多計算機系統(tǒng)中一次DMA數(shù)據(jù)傳輸需要 傳輸?shù)臄?shù)據(jù)量經(jīng)常很大,并且這些數(shù)據(jù)在內(nèi)存空間上是不連續(xù)的。此時需要 使用較為復(fù)雜的數(shù)據(jù)結(jié)構(gòu)描述一次DMA數(shù)據(jù)傳輸需要的源地址、目標(biāo)地址和 數(shù)據(jù)長度等信息,該些按照一定的數(shù)據(jù)結(jié)構(gòu)組成的信息稱為DMA描述符。同 時為了實現(xiàn)通信與計算的重疊,處理器可能會連續(xù)發(fā)出多次DMA數(shù)據(jù)傳輸, 這就需要多計算機系統(tǒng)中DMA設(shè)備的啟動方式也要與單計算機系統(tǒng)有所不 同。多計算機系統(tǒng)的結(jié)構(gòu)如圖l所示, 一個節(jié)點包括處理器、內(nèi)存、橋接芯 片和DMA設(shè)備,各個節(jié)點通過互網(wǎng)絡(luò)相互通信。
本領(lǐng)域中常用術(shù)語如下。
在多計算機系統(tǒng)中,發(fā)起一次DMA數(shù)據(jù)傳輸?shù)墓?jié)點稱為本地節(jié)點;接收 DMA數(shù)據(jù)傳輸?shù)墓?jié)點稱為遠(yuǎn)端節(jié)點。
多計算機系統(tǒng)中的DMA設(shè)備通常支持通道,從而實現(xiàn)多個應(yīng)用程序?qū)?個DMA設(shè)備的共享,使得每個應(yīng)用程序邏輯上獨立擁有能夠進行DMA方式數(shù) 據(jù)傳輸?shù)脑O(shè)備。
通信庫軟件,是位于DMA設(shè)備和應(yīng)用程序之間的程序,它根據(jù)本發(fā)明中 的DMA設(shè)備和方法為應(yīng)用程序提供標(biāo)準(zhǔn)的程序接口 。這些標(biāo)準(zhǔn)的程序接口滿 足一種或者多種編程模型規(guī)范,例如消息傳遞接口 (MPI)規(guī)范。
DMA描述符,是將描述一次DMA數(shù)據(jù)傳輸需要的源地址、目標(biāo)地址和數(shù) 據(jù)長度等信息,按照一定的數(shù)據(jù)結(jié)構(gòu)組成的信息。
命令窗口,是DMA設(shè)備在處理器的I/0空間上峽射的一段地址區(qū)間,用 于啟動DMA設(shè)備。處理器將一條DMA命令的描述符填寫到一塊8字節(jié)對齊、物理地址連續(xù)的內(nèi)存區(qū)域,然后將這塊內(nèi)存區(qū)域的首地址和長度發(fā)送到DMA
設(shè)備的命令窗口,以啟動一次DMA數(shù)據(jù)傳輸。
門鈴,是用于啟動畫A設(shè)備進行一次DMA傳輸?shù)南ⅰ?br>
一次DMA發(fā)送操作,是指DMA設(shè)備按照描述符中的相關(guān)信息,將全部需
要傳送的數(shù)據(jù)從內(nèi)存中讀出來,并將數(shù)據(jù)按照網(wǎng)格包的格式封裝成一個或者
多個網(wǎng)絡(luò)包,最后發(fā)送到互連網(wǎng)絡(luò)上的過程。
一次DMA接收操作,是指DMA設(shè)備接收互連網(wǎng)絡(luò)上的網(wǎng)絡(luò)包,并將其中
的數(shù)據(jù)寫入內(nèi)存,直到將一個標(biāo)記為尾包的網(wǎng)絡(luò)包中的全部數(shù)據(jù)寫入內(nèi)存的過程。
發(fā)明內(nèi)容
為解決上述問題,本發(fā)明提供了多計算機系統(tǒng)中節(jié)點的DMA設(shè)備及通信 方法,能夠提供多計算機系統(tǒng)中節(jié)點的信息傳輸方式,同時保證多計算機系 統(tǒng)的高效通信。
本發(fā)明公開了多計算機系統(tǒng)中節(jié)點的通信方法,所述方法包括
步驟1,本地節(jié)點的通信庫軟件根據(jù)應(yīng)用程序生成DMA命令,將所述DMA 命令的描述符存儲到內(nèi)存中,將包含所述DMA命令的描述符內(nèi)存位置信息的 門鈴傳送給本地節(jié)點的DMA設(shè)備;
步驟2,本地節(jié)點的DMA設(shè)備根據(jù)所述門鈴讀取所述描述符;根據(jù)所述 描述符中信息將網(wǎng)絡(luò)包發(fā)送到互連網(wǎng)絡(luò)并在發(fā)送完成后生成發(fā)送完成事件, 或僅生成發(fā)送完成事件;
步驟3,遠(yuǎn)端節(jié)點的DMA設(shè)備從互連網(wǎng)絡(luò)上接收網(wǎng)絡(luò)包,根據(jù)所述網(wǎng)絡(luò) 包的類型保存所述網(wǎng)絡(luò)包中數(shù)據(jù)并在接收完成后生成接收完成事件,或僅生 成接收完成事件,或?qū)⑺鲞h(yuǎn)端節(jié)點的數(shù)據(jù)裝入網(wǎng)絡(luò)包發(fā)送給所述本地節(jié)點。
所述DMA設(shè)備支持通道,所述步驟l前還包括,
步驟21,在處理器1/0地址空間上映射用于接收所述門鈴的命令窗口。 所述命令窗口的大小與所述DMA設(shè)備支持的通道數(shù)成正比。 所述步驟21還包括
步驟41,為所述DMA設(shè)備支持的每個通道在內(nèi)存中分配用于暫存DMA命 令的發(fā)送完成事件的發(fā)送完成事件緩沖區(qū)、用于暫存DMA命令的接收完成事件的接收完成事件緩沖區(qū)和用于暫存DMA設(shè)備接收到的NAP網(wǎng)絡(luò)包中數(shù)據(jù)的 DMA數(shù)據(jù)接收緩沖區(qū)。
所述DMA命令為NAP立即數(shù)命令或NAP間接數(shù)命令,
所述步驟2進一步為 '
步驟51,根據(jù)所述描述符獲得待傳輸?shù)臄?shù)據(jù),DMA設(shè)備將所述描述符中 與接收相關(guān)的信息和所述數(shù)據(jù)封裝成一個NAP網(wǎng)絡(luò)包,發(fā)送到互連網(wǎng)絡(luò);
步驟52,在所述NAP網(wǎng)絡(luò)包發(fā)送到互連網(wǎng)絡(luò)上后,根據(jù)所述描述符中與 發(fā)送完成事件相關(guān)的信息,確定是否生成發(fā)送完成事件,并發(fā)送給所述本地 節(jié)點。
所述DMA命令為RDMA put命令, 所述步驟2進一步為
步驟61,根據(jù)所述描述符讀取內(nèi)存中待傳輸?shù)臄?shù)據(jù),DMA設(shè)備將所述描 述符中與接收相關(guān)的信息和所述數(shù)據(jù)封裝成一個或多個RDMAput網(wǎng)絡(luò)包,發(fā) 送到互連網(wǎng)絡(luò);
步驟62,在全部所述RDMA put網(wǎng)絡(luò)包發(fā)送到互連網(wǎng)絡(luò)上后,根據(jù)所述 描述符中與發(fā)送完成事件相關(guān)的信息,確定是否生成發(fā)送完成事件,并發(fā)送 給所述本地節(jié)點。
所述DMA命令為RDMA get命令,
所述步驟2進一步為
步驟71,將所述RDMA get命令封裝為一個RDMA get網(wǎng)絡(luò)包,發(fā)送到互 連網(wǎng)絡(luò);
歩驟72,在所述RDMA get網(wǎng)絡(luò)包發(fā)送到互連網(wǎng)絡(luò)上后,根據(jù)所述描述 符中與發(fā)送完成事件相關(guān)的信息,確定是否生成發(fā)送完成事件,并發(fā)送給所 述本地節(jié)點。
所述DMA命令為Fence命令,
所述步驟2進一步為
步驟81,生成所述Fence命令對應(yīng)的網(wǎng)絡(luò)包,發(fā)送到互連網(wǎng)絡(luò),并且不 生成發(fā)送完成事件。步驟91,不生成網(wǎng)絡(luò)包,直接生成發(fā)送完成事件。
所述步驟3進一步為,
步驟101,根據(jù)所述網(wǎng)絡(luò)包中保存的與接收相關(guān)的信息將網(wǎng)絡(luò)包中的數(shù) 據(jù)寫入對應(yīng)通道的DMA數(shù)據(jù)接收緩存區(qū)中; z
步驟102,在所述網(wǎng)絡(luò)包中的全部數(shù)據(jù)己經(jīng)寫入接收緩存區(qū)中后,在所 述網(wǎng)絡(luò)包中保存的信息指示需要生成接收完成事件時,生成接收完成事件。
所述步驟3進一步為,
步驟111,根據(jù)所述RDMAput網(wǎng)絡(luò)包中保存的用于接收的內(nèi)存空間的首 地址和長度的信息將所述數(shù)據(jù)包中的數(shù)據(jù)寫入對應(yīng)的內(nèi)存空間;
步驟112,在標(biāo)記為尾包的RDMAput網(wǎng)絡(luò)包中的全部數(shù)據(jù)己經(jīng)寫入內(nèi)存 中,并且所述網(wǎng)絡(luò)包中保存的信息指示需要生成接收完成事件時,生成接收 完成事件。
所述步驟3進一步為,
步驟121,根據(jù)所述網(wǎng)絡(luò)包中信息讀取所述遠(yuǎn)端節(jié)點內(nèi)存中待傳輸?shù)臄?shù) 據(jù),將所述數(shù)據(jù)封裝成一個或多個RDMA put網(wǎng)絡(luò)包,發(fā)送給所述本地節(jié)點。 所述步驟3進一步為,
步驟131,接收完所述網(wǎng)絡(luò)包后,直接生成接收完成事件。
本發(fā)明還公開了多計算機系統(tǒng)中節(jié)點的DMA設(shè)備,DMA設(shè)備包括用于連 接所述DMA設(shè)備和互連網(wǎng)絡(luò)的交換機接口模塊和用于連接所述DMA設(shè)備和所 述節(jié)點的處理器和內(nèi)存的系統(tǒng)總線接口模塊,DMA設(shè)備還包括
DMA啟動模塊,用于接收包含DMA命令的描述符的內(nèi)存位置信息的門鈴, 將所述門鈴傳給描述符讀取模塊,啟動一次DMA傳輸;
所述描述符讀取模塊,用于根據(jù)所述門鈴中信息讀取所述描述符,以使 數(shù)據(jù)讀取模塊、匿A發(fā)送引擎模塊和DMA發(fā)送完成通知模塊獲得所述描述符;
所述數(shù)據(jù)讀取模塊,用于獲得當(dāng)前操作相關(guān)的描述符,根據(jù)所述描述符 讀取內(nèi)存中待傳輸?shù)臄?shù)據(jù),以使DMA發(fā)送引擎模塊獲得所述數(shù)據(jù);
所述DMA發(fā)送引擎模塊,用于獲得當(dāng)前操作相關(guān)的描述符,按照所述描 述符中信息生成網(wǎng)絡(luò)包,并將所述網(wǎng)絡(luò)包發(fā)送到互連網(wǎng)絡(luò);
所述DMA發(fā)送完成通知模塊,用于獲得當(dāng)前操作相關(guān)的描述符,根據(jù)所 述描述符進行生成發(fā)送完成事件和/或發(fā)送完成中斷的操作;DMA接收引擎模塊,用于從互連網(wǎng)絡(luò)上接收網(wǎng)絡(luò)包,根據(jù)所述網(wǎng)絡(luò)包的
類型進行保存所述網(wǎng)絡(luò)包中數(shù)據(jù)的操作,并在在所述網(wǎng)絡(luò)包中DMA命令指示 從所述DMA設(shè)備所在節(jié)點提取數(shù)據(jù)時,以所述網(wǎng)絡(luò)包中描述符為當(dāng)前操作相 關(guān)的描述符,啟動所述數(shù)據(jù)讀取模塊;'"
DMA接收完成通知模塊,用于根據(jù)所述描述符進行生成接收完成事件和/ 或接收完成中斷的操作。
所述DMA設(shè)備支持多個通道。
所述DMA啟動模塊包括門鈴緩沖區(qū),
所述DMA啟動模塊進一步用于接收所述門鈴,如果所述DMA設(shè)備的描述 符讀取模塊處于空閑狀態(tài),則將所述門鈴傳給所述描述符讀取模塊以啟動一 次DMA傳輸,如果所述DMA設(shè)備的描述符讀取模塊處于工作狀態(tài),則將所述 門鈴暫存到所述門鈴緩沖區(qū),等到DMA設(shè)備的描述符讀取模塊處于空閑時, 將所述門鈴傳給所述描述符讀取模塊以啟動一次DMA傳輸。
所述描述符讀取模塊包括描述符緩沖區(qū),
所述描述符讀取模塊進一步用于接收所述門鈴,按所述門鈴信息從內(nèi)存 中讀取所述描述符,將所述描述符存儲到所述描述符緩沖區(qū)以供所述數(shù)據(jù)讀 取模塊、所述DMA發(fā)送引擎模塊和所述DMA發(fā)送完成通知模塊使用時讀取。
所述數(shù)據(jù)讀取模塊包括數(shù)據(jù)緩沖區(qū),
所述數(shù)據(jù)讀取模塊進一步用于獲得當(dāng)前操作相關(guān)的描述符,在需要傳輸 數(shù)據(jù)時,根據(jù)所述描述符中信息從內(nèi)存中讀取所述待傳輸?shù)臄?shù)據(jù),將所述數(shù) 據(jù)存儲到所述數(shù)據(jù)緩沖區(qū)以供所述DMA發(fā)送引擎模塊讀取。
所述DMA發(fā)送引擎模塊進一步用于獲得當(dāng)前操作相關(guān)的描述符,并在需 要傳輸數(shù)據(jù)時,讀取所述數(shù)據(jù)緩沖區(qū),獲得所述待傳輸?shù)臄?shù)據(jù),生成網(wǎng)絡(luò)包 發(fā)送到互連網(wǎng)絡(luò);在不需要傳輸數(shù)據(jù)時,直接生成網(wǎng)絡(luò)包發(fā)送到互連網(wǎng)絡(luò)。
所述DMA發(fā)送引擎模塊還包括網(wǎng)絡(luò)包緩沖區(qū),
所述DMA發(fā)送引擎模塊還用于在互連網(wǎng)絡(luò)無法接收網(wǎng)絡(luò)包時,將整個或 部分所述網(wǎng)絡(luò)包緩存到網(wǎng)絡(luò)包緩沖區(qū)。
所述DMA發(fā)送完成通知模塊,用于獲得當(dāng)前操作相關(guān)的描述符,根據(jù)所 述描述符的信息,確定是否需要生成發(fā)送完成事件和/或發(fā)送完成中斷,如果 需要生成發(fā)送完成事件,則在一次DMA發(fā)送操作完成后,根據(jù)描述符信息生成相應(yīng)的發(fā)送完成事件并將所述發(fā)送完成事件寫入對應(yīng)通道的發(fā)送完成事件
緩沖區(qū);如果需要生成發(fā)送完成中斷,則在一次DMA發(fā)送操作完成后,根據(jù) 描述符生成相應(yīng)的發(fā)送完成中斷。
DMA 1t收引擎模塊進一步用于從互連網(wǎng)絡(luò)上接收網(wǎng)絡(luò)包,并在所述網(wǎng)絡(luò) 包中包含數(shù)據(jù)時根據(jù)所述網(wǎng)絡(luò)包的類型選擇將所述網(wǎng)絡(luò)包中的數(shù)據(jù)通過寫內(nèi) 存命令寫入所述網(wǎng)絡(luò)包指定的內(nèi)存空間或者寫入對應(yīng)通道的DMA數(shù)據(jù)接收緩 沖區(qū)。
所述DMA接收引擎模塊還包括寫內(nèi)存命令緩沖區(qū);
所述DMA接收引擎模塊還用于在總線忙碌時將所述寫內(nèi)存命令緩存到所 述寫內(nèi)存命令緩沖區(qū)。
所述DMA接收完成通知模塊進一步用于根據(jù)所述網(wǎng)絡(luò)包中的控制信息, 確定是否需要生成接收完成事件和/或接收完成中斷,如果需要生成接收完成 事件,則在一次DMA接收操作完成后,根據(jù)網(wǎng)絡(luò)包中控制信息生成相應(yīng)的接 收完成事件并寫入對應(yīng)通道的接收完成事件緩沖區(qū);如果需要生成接收完成 中斷,則在一次匿A接收操作完成后,根據(jù)網(wǎng)絡(luò)包中的相關(guān)信息生成相應(yīng)的 接收完成中斷。
所述DMA設(shè)備還包括DMA接收緩沖區(qū)管理模塊,用于為DMA設(shè)備支持的 每個通道分配多個用以記錄所述通道的接收完成事件緩沖區(qū)和DMA數(shù)據(jù)接收 緩沖區(qū)的狀態(tài)信息的寄存器,以管理所述通道的接收完成事件緩沖區(qū)和DMA 數(shù)據(jù)接收緩沖區(qū)。
所述DMA設(shè)備支持的DMA命令包括NAP立即數(shù)命令、NAP間接數(shù)命令、 RDMA get命令、RDMA put命令、Flush命令和Fence命令。
本發(fā)明的有益效果在于,通過采用DMA方式通信,能夠有效降低處理 器在通信過程中的參與時間,節(jié)約處理器的處理能力;通過使用描述符,能 夠使源節(jié)點上多個任意起始地址、任意長度的數(shù)據(jù),可以在一次DMA操作 中傳輸?shù)侥繕?biāo)節(jié)點上多個任意起始地址、任意長度的位置;DMA設(shè)備在提 供高效的通信能力的同時,有效地節(jié)約了硬件資源;通過在DMA設(shè)備上使 用本發(fā)明,處理器和DMA設(shè)備之間高效的流量控制方法,保證網(wǎng)絡(luò)的擁塞 情況不會影響處理器;為應(yīng)用程序提供靈活高效的通信接口 。
圖1是多計算機系統(tǒng)的結(jié)構(gòu)示意圖; 圖2是本發(fā)明的門鈴的結(jié)構(gòu)圖3是本發(fā)明多計算機系統(tǒng)中節(jié)點的DMA設(shè)備的結(jié)構(gòu)圖; 圖4是本發(fā)明方法中DMA設(shè)備的發(fā)送流程圖; 圖5是本發(fā)明方法中DMA設(shè)備的接收流程圖6是描述符的結(jié)構(gòu)示意圖7是網(wǎng)絡(luò)包的結(jié)構(gòu)示意圖。
具體實施例方式
下面結(jié)合附圖,對本發(fā)明做進一步的詳細(xì)描述。
本發(fā)明的多計算機系統(tǒng)中節(jié)點的DMA設(shè)備的結(jié)構(gòu)如圖3所示。DMA設(shè)備 包括系統(tǒng)總線接口模塊301、交換機接口模塊302、 DMA啟動模塊303、描 述符讀取模塊304、數(shù)據(jù)讀取模塊305、謹(jǐn)A發(fā)送引擎模塊306、 DMA發(fā)送完 成通知模塊307、 DMA接收引擎模塊308、 DMA接收完成通知模塊309、 DMA接 收緩沖區(qū)管理模塊310。
系統(tǒng)總線接口模塊301,用于連接所述DMA設(shè)備和所述節(jié)點的處理器和 內(nèi)存。
系統(tǒng)總線接口模塊301為系統(tǒng)總線接口 。 DMA啟動模塊303、描述符讀取 模塊304、數(shù)據(jù)讀取模塊305、 DMA發(fā)送完成通知模塊307、 DMA接收引擎模 塊308、DMA接收緩沖區(qū)管理模塊310和DMA接收完成通知模塊309都要通過 系統(tǒng)總線接口模塊進行內(nèi)存存取,由系統(tǒng)總線接口模塊301負(fù)責(zé)系統(tǒng)總線接 口的仲裁和分發(fā)。
交換機接口模塊302,用于連接所述DMA設(shè)備和互連網(wǎng)絡(luò)。
交換機接口模塊302,包含有交換機接口。匿A發(fā)送引擎模塊306、 DMA 接收引擎模塊308都要通過交換機接口模塊302連接互連網(wǎng)絡(luò)。
DMA啟動模塊303,用于接收包含DMA命令的描述符的內(nèi)存位置信息的門 鈴,將所述門鈴傳給描述符讀取模塊304,啟動一次DMA傳輸。
當(dāng)DMA設(shè)備的描述符讀取模塊304處于空閑狀態(tài)時,DMA啟動模塊303 將門鈴交給描述符讀取模塊304,從而啟動DMA設(shè)備;當(dāng)固A設(shè)備的描述符讀取模塊304處于工作狀態(tài)時,DMA啟動模塊303暫存門鈴,等待DMA設(shè)備 的描述符讀取模塊304空閑時,再將門鈴傳給描述符讀取模塊304以啟動一 次DMA傳輸。DMA啟動模塊303包含一塊門鈴緩沖區(qū)用于暫存門鈴,該門鈴 緩沖區(qū)由DMA啟動模塊303負(fù)責(zé)管理。本發(fā)明具體實施方式
中,門鈴的結(jié)構(gòu) 如圖2所示,其中包括描述符的首地址和描述符的長度。
描述符讀取模塊304,用于根據(jù)所述門鈴中信息讀取所述描述符,以使 數(shù)據(jù)讀取模塊305、DMA發(fā)送引擎模塊306和DMA發(fā)送完成通知模塊307獲得 所述描述符。
描述符讀取模塊304處理DMA啟動模塊303交給它的門鈴,門鈴中包含 一次DMA傳輸所需的描述符在內(nèi)存空間中的存放位置。描述符讀取模塊304 根據(jù)門鈴中的首地址和長度信息,生成對該內(nèi)存空間的一次或者多次讀操作, 并將返回的數(shù)據(jù)整理成描述符供給數(shù)據(jù)讀取模塊305、 DMA發(fā)送引擎模塊306 和DMA發(fā)送完成通知模塊307使用。描述符讀取模塊304包含描述符緩沖區(qū), 描述符緩沖區(qū)用于暫存描述符,該描述符緩沖區(qū)由描述符讀取模塊304負(fù)責(zé) 寫入,由其它相關(guān)模塊負(fù)責(zé)讀取。
數(shù)據(jù)讀取模塊305,用于當(dāng)前操作相關(guān)的描述符,根據(jù)所述描述符讀取 內(nèi)存中待傳輸?shù)臄?shù)據(jù),以使DMA發(fā)送引擎模塊306獲得所述數(shù)據(jù)。
數(shù)據(jù)讀取模塊305根據(jù)描述符中源數(shù)據(jù)所在內(nèi)存空間的首地址和長度信 息,生成對該內(nèi)存空間的一次或者多次讀操作,并將返回的數(shù)據(jù)暫存起來。 在數(shù)據(jù)讀取模塊305中包含有一塊數(shù)據(jù)緩沖區(qū),數(shù)據(jù)緩沖區(qū)由數(shù)據(jù)讀取模塊 305負(fù)責(zé)寫入,由DMA發(fā)送引擎模塊306負(fù)責(zé)讀取。
DMA發(fā)送引擎模塊306,用于獲得當(dāng)前操作相關(guān)的描述符,按照所述描述 符中信息生成網(wǎng)絡(luò)包,并將所述網(wǎng)絡(luò)包發(fā)送到互連網(wǎng)絡(luò)。
DMA發(fā)送引擎模塊306根據(jù)描述符緩沖區(qū)中的描述符信息,讀取描述符 緩沖區(qū)和數(shù)據(jù)緩沖區(qū)的內(nèi)容來構(gòu)造網(wǎng)絡(luò)包并發(fā)送到互連網(wǎng)絡(luò)上。根據(jù)DMA命 令類型的不同, 一條DMA命令可以對應(yīng)一個或者多個網(wǎng)絡(luò)包。DMA發(fā)送引擎 模塊306包含一塊網(wǎng)絡(luò)包緩沖區(qū),用來在互連網(wǎng)絡(luò)無法接收網(wǎng)絡(luò)包時緩存部 分或者整個網(wǎng)絡(luò)包。
DMA發(fā)送完成通知模塊307,用于獲得當(dāng)前操作相關(guān)的描述符,根據(jù)所述 描述符進行生成發(fā)送完成事件和/或發(fā)送完成中斷的操作。DMA發(fā)送完成通知模塊307根據(jù)描述符信息,判斷是否需要生成一個發(fā) 送完成事件和/或一個發(fā)送完成中斷;如果需要生成一個發(fā)送完成事件,則在 一次DMA發(fā)送操作完成后根據(jù)描述符生成相應(yīng)的發(fā)送完成事件并寫入對應(yīng)通 道的發(fā)送完成事件緩沖區(qū);如果需要生成一個發(fā)送完成中斷,則在一次DMA 發(fā)送操作完成后根據(jù)描述符生成相應(yīng)的發(fā)送完成中斷。
在具體實現(xiàn)中,每個發(fā)送完成事件的大小均為8字節(jié),并8字節(jié)對齊寫 入發(fā)送完成事件緩沖區(qū)。DMA發(fā)送完成通知模塊307負(fù)責(zé)維護每個通道的發(fā) 送完成事件緩沖區(qū)。每次生成一個發(fā)送完成事件,發(fā)送完成事件緩沖區(qū)當(dāng)前 指針寄存器就會加8字節(jié),同時發(fā)送完成事件緩沖區(qū)可用大小寄存器減一。 當(dāng)發(fā)送完成事件緩沖區(qū)當(dāng)前指針的值等于發(fā)送完成事件緩沖區(qū)終止地址寄存 器,并且有新的完成事件生成時,發(fā)送完成事件緩沖區(qū)當(dāng)前指針寄存器會重 新指向發(fā)送完成事件緩沖區(qū)起始地址寄存器。此外,DMA發(fā)送完成通知模塊 307會根據(jù)描述符中的相關(guān)信息增加發(fā)送完成事件緩沖區(qū)可用大小寄存器, 一次增加的數(shù)量由通信庫軟件設(shè)置。
DMA接收引擎模塊308,用于從互連網(wǎng)絡(luò)上接收網(wǎng)絡(luò)包,根據(jù)所述網(wǎng)絡(luò)包 的類型進行保存所述網(wǎng)絡(luò)包中數(shù)據(jù)的操作,并在在所述網(wǎng)絡(luò)包中DMA命令指 示從所述DMA設(shè)備所在節(jié)點提取數(shù)據(jù)時,以所述網(wǎng)絡(luò)包中描述符為當(dāng)前操作 相關(guān)的描述符,啟動數(shù)據(jù)讀取模塊305。
DMA接收引擎模塊308從互連網(wǎng)絡(luò)上接收網(wǎng)絡(luò)包,在網(wǎng)絡(luò)包包含數(shù)據(jù)時, 根據(jù)網(wǎng)絡(luò)包的類型選擇將網(wǎng)絡(luò)包中的數(shù)據(jù)寫入網(wǎng)絡(luò)包指定的內(nèi)存空間或者寫 入對應(yīng)通道的DMA數(shù)據(jù)接收緩沖區(qū)。 一個網(wǎng)絡(luò)包中的數(shù)據(jù)可以分解為對內(nèi)存 的一次或者多次寫操作。DMA接收引擎模塊308包含一塊寫內(nèi)存命令緩沖區(qū), 用來在系統(tǒng)總線忙碌時緩存寫內(nèi)存命令。
畫A接收完成通知模塊309,用于根據(jù)所述描述符進行生成接收完成事件 和/或接收完成中斷的操作。
DMA接收完成通知模塊309根據(jù)網(wǎng)絡(luò)包中的控制信息,判斷是否需要生 成一個接收完成事件和/或一個接收完成中斷,如果需要生成一個接收完成事 件,則在一次DMA接收操作完成后根據(jù)網(wǎng)絡(luò)包中的控制信息生成相應(yīng)的接收 完成事件并寫入接收完成事件緩沖區(qū);如果需要生成一個接收完成中斷,則 一次DMA接收操作完成后根據(jù)網(wǎng)絡(luò)包中的相關(guān)信息生成相應(yīng)的接收完成中斷。
在DMA設(shè)備的接收時,由通信庫軟件保證每個通道的接收完成事件緩沖
區(qū)的項數(shù)要大于等于DMA數(shù)據(jù)接收緩沖區(qū)的項數(shù),從而只需要接收完成事件 緩沖區(qū)有流量控制,而DMA數(shù)據(jù)接收緩沖區(qū)就不需要有流量控制。因為NAP 命令一定會生成接收完成事件,而DMA數(shù)據(jù)接收緩沖區(qū)只用于暫存NAP命令 的數(shù)據(jù)。接收完成事件緩沖區(qū)的流量控制與發(fā)送完成事件緩沖區(qū)的流量控制 相同。通信庫軟件在描述符中會攜帶相關(guān)信息增加接收完成事件緩沖區(qū)可用 大小寄存器,通信庫也可以用Flush命令對接收完成事件緩沖區(qū)進行流量控 制。
DMA接收緩沖區(qū)管理模塊310,用于為DMA設(shè)備支持的每個通道分配多個 用以記錄所述通道的接收完成事件緩沖區(qū)和DMA數(shù)據(jù)接收緩沖區(qū)的狀態(tài)信息 的寄存器,以管理所述通道的接收完成事件緩沖區(qū)和DMA數(shù)據(jù)接收緩沖區(qū)。
DMA接收緩沖區(qū)管理模塊310會根據(jù)DRB索引空間當(dāng)前指針寄存器,從 索引空間讀取多個數(shù)據(jù)接收緩沖區(qū)所在的頁面地址,并將這些頁面地址暫存 在DRB寄存器組中。當(dāng)DRB寄存器組中可用的頁面數(shù)量小于一個閾值時,DMA 接收緩沖區(qū)管理模塊310就會再次讀取新的數(shù)據(jù)接收緩沖區(qū)的頁面地址。數(shù) 據(jù)接收緩沖區(qū)以2KB為單位劃分為多個暫存空間,每個NAP命令使用一個2KB 大小的暫存空間,而不管實際攜帶數(shù)量的多少。
該DMA設(shè)備主要支持四種方式的DMA命令
NAP (No Address Packet,無地址)立即數(shù)方式、NAP間接數(shù)方式、RDMA (Remote Direct Memory Access,遠(yuǎn)程內(nèi)存直接存取)put方式禾口 RDMA get 方式。
其中,NAP立即數(shù)操作和NAP間接數(shù)操作對應(yīng)互連網(wǎng)絡(luò)上一個NAP網(wǎng)絡(luò) 包,RDMA put操作對應(yīng)互連網(wǎng)絡(luò)上一個或者多個RDMA put網(wǎng)絡(luò)包,RDMA get 操作對應(yīng)一個RDMA get網(wǎng)絡(luò)包。
DMA設(shè)備的每個通道均支持上述四種方式的DMA命令。 NAP立即數(shù)方式,用于將數(shù)據(jù)從本地節(jié)點傳送到遠(yuǎn)端節(jié)點;其描述符中 包含有具體的源數(shù)據(jù)所在內(nèi)存空間的信息和目標(biāo)節(jié)點在多機系統(tǒng)中的編號, 沒有具體的目標(biāo)內(nèi)存空間的信息;需要傳輸?shù)臄?shù)據(jù)位于描述符內(nèi);每個NAP 立即數(shù)命令對應(yīng)一個NAP網(wǎng)絡(luò)包,DMA接收引擎模塊308將NAP網(wǎng)絡(luò)包中的數(shù)據(jù)暫存在DMA接收緩沖區(qū)。
NAP間接數(shù)方式,用于將數(shù)據(jù)從本地節(jié)點傳送到遠(yuǎn)端節(jié)點;其描述符 中包含有具體的源數(shù)據(jù)所在內(nèi)存空間的信息和目標(biāo)節(jié)點在多機系統(tǒng)中的編 號,沒有具體的目標(biāo)內(nèi)存空間的地址;需要傳輸?shù)臄?shù)據(jù)在本地節(jié)點的一塊或
者多塊內(nèi)存空間中,該些內(nèi)存空間的首地址和長度位于描述符內(nèi),具體的數(shù)
據(jù)需要數(shù)據(jù)讀取模塊305根據(jù)描述符中的相關(guān)信息讀??;每個NAP間接數(shù)命 令對應(yīng)一個NAP網(wǎng)絡(luò)包,DMA接收引擎模塊308將NAP網(wǎng)絡(luò)包中的數(shù)據(jù)暫存 在DMA數(shù)據(jù)接收緩沖區(qū)。
RDMAput方式,用于將數(shù)據(jù)從本地節(jié)點傳送到遠(yuǎn)端節(jié)點;其描述符中包 含有具體的源和目標(biāo)內(nèi)存空間的信息;需要傳輸?shù)臄?shù)據(jù)在本地節(jié)點的一塊或 者多塊內(nèi)存空間中,該些內(nèi)存空間的首地址和長度位于描述符內(nèi),具體的數(shù) 據(jù)需要數(shù)據(jù)讀取模塊305根據(jù)描述符中的相關(guān)信息從本地節(jié)點讀??;每個 RDMA put命令對應(yīng)一個或者多個RDMA put網(wǎng)絡(luò)包。
RDMAget方式,用于將數(shù)據(jù)從遠(yuǎn)端節(jié)點讀取到本地節(jié)點;其描述符中包 含有具體的源和目標(biāo)內(nèi)存空間的信息;需要傳輸?shù)臄?shù)據(jù)在遠(yuǎn)端節(jié)點的一塊或 者多塊內(nèi)存空間中,而目標(biāo)內(nèi)存空間的首地址和長度位于本地節(jié)點內(nèi),具體 的數(shù)據(jù)需要目標(biāo)節(jié)點的數(shù)據(jù)讀取模塊305根據(jù)描述符中的相關(guān)信息從遠(yuǎn)端節(jié) 點讀?。幻總€RDMA get命令對應(yīng)一個RDMA get網(wǎng)絡(luò)包。
D區(qū)設(shè)備支持Flush命令,不會生成網(wǎng)絡(luò)包;不需要數(shù)據(jù)的存??; 一定 會生成發(fā)送完成事件。
D區(qū)設(shè)備還支持Fence命令,會生成一個Fence網(wǎng)絡(luò)包,不會發(fā)生數(shù)據(jù) 的存取, 一定會生成接收完成事件。
此外,固A設(shè)備還包括如下寄存器。
命令窗口起始地址寄存器和命令窗口終止地址寄存器,用于通信庫軟件 配置DMA設(shè)備的命令窗口在I/O空間上的位置,使得DMA設(shè)備能夠從系統(tǒng)總 線上接收DMA命令。
用于維護每個通道的SCEB (發(fā)送完成事件緩沖區(qū))的寄存器,SCEB起始 地址寄存器、SCEB終止地址寄存器、SCEB當(dāng)前指針寄存器和SCEB可用大小 寄存器。SCEB起始地址寄存器和SCEB終止地址寄存器由通信庫軟件設(shè)置, SCEB當(dāng)前指針寄存器初始時指向發(fā)送完成事件緩沖區(qū)起始地址,SCEB可用大小寄存器初始時為發(fā)送完成事件緩沖區(qū)能容納發(fā)送完成事件數(shù)量的最大值。
用于維護每個通道的RCEB(接收完成事件緩沖區(qū))的寄存器,RCEB起始 地址寄存器、RCEB終止地址寄存器、RCEB當(dāng)前指針寄存器和RCEB可用大小 寄存器。RCEB起始地址寄存器和RCEB終止地址寄存器由通信庫軟件設(shè)置, RCEB當(dāng)前指針寄存器初始時指向接收完成事件緩沖區(qū)起始地址,RCEB可用大 小寄存器初始時為接收完成事件緩沖區(qū)能容納發(fā)送完成事件數(shù)量的最大值。
用于維護每個通道的DRB (DMA數(shù)據(jù)接收緩沖區(qū))的寄存器,DRB索引空 間起始地址寄存器、DRB索引空間終止地址寄存器、DRB索引空間當(dāng)前指針寄 存器和DRB寄存器組。由于DMA數(shù)據(jù)接收緩沖區(qū)非常大,因此它通常由許多 個內(nèi)存頁面構(gòu)成,該些內(nèi)存頁面的信息又存放在一段連續(xù)的地址空間內(nèi),這 段地址空間稱為索引空間。DRB索引空間起始地址寄存器和DRB索引空間終 止地址寄存器由通信庫軟件設(shè)置,DRB索引空間當(dāng)前指針寄存器初始時指向 DMA數(shù)據(jù)接收緩沖區(qū)索引空間的起始地址,DRB寄存器組用來存放多個接收緩 沖區(qū)所在頁面的地址。
此外,還包括狀態(tài)寄存器供通信庫軟件觀察每個通道的狀態(tài),狀態(tài)包括 是否接收到錯誤的網(wǎng)絡(luò)包,和已經(jīng)處理的網(wǎng)絡(luò)包的個數(shù)。
DMA設(shè)備支持多個通道,體現(xiàn)在命令窗口上。寫入命令窗口的同一位置 的多個門鈴會被DMA設(shè)備認(rèn)作是同一個應(yīng)用程序的多個DMA命令,寫入命令 窗口的不同位置的多個門鈴會被DMA設(shè)備認(rèn)作是不同應(yīng)用程序的多個DMA命 令。謹(jǐn)A設(shè)備接收到門鈴時如果處于空閑狀態(tài)就會處理門鈴;否則DMA設(shè)備 會將門鈴暫時緩存,等待當(dāng)前DMA命令完成后再處理緩存的門鈴。命令窗口 的大小與門鈴的大小的比值就是匿A設(shè)備支持的最大通道數(shù),命令窗口的大 小應(yīng)為8字節(jié)的整數(shù)倍。
本發(fā)明多計算機系統(tǒng)中節(jié)點的通信方法包括.-
步驟100,本地節(jié)點的通信庫軟件根據(jù)應(yīng)用程序生成DMA命令,將所述 DMA命令的描述符存儲到內(nèi)存中,將包含所述DMA命令的描述符內(nèi)存位置信 息的門鈴傳送給本地節(jié)點的DMA設(shè)備。
步驟200,本地節(jié)點的DMA設(shè)備根據(jù)所述門鈴讀取所述描述符;根據(jù)所 述描述符中信息進行生成網(wǎng)絡(luò)包發(fā)送到互連網(wǎng)絡(luò)和生成發(fā)送完成事件的操 作,或僅進行生成發(fā)送完成事件的操作。步驟300,遠(yuǎn)端節(jié)點的DMA設(shè)備從互連網(wǎng)絡(luò)上接收網(wǎng)絡(luò)包,根據(jù)所述網(wǎng) 絡(luò)包的類型進行保存所述網(wǎng)絡(luò)包中數(shù)據(jù)和生成接收完成事件的操作,或僅進 行生成接收完成事件的操作,或根據(jù)所述網(wǎng)絡(luò)包的類型進行將所述遠(yuǎn)端節(jié)點 的數(shù)據(jù)裝入網(wǎng)絡(luò)包發(fā)送給所述本地節(jié)點的操作。
本發(fā)明多計算機系統(tǒng)中節(jié)點的通信方法中DMA設(shè)備的發(fā)送流程如圖4所示。
步驟S401, DMA設(shè)備初始化。
DMA設(shè)備初始化包括為DMA設(shè)備在處理器I/O地址空間上映射一段用 于接收門鈴的命令窗口,命令窗口的大小與DMA設(shè)備支持的通道數(shù)成正比; 為DMA設(shè)備的每個通道在內(nèi)存中分配發(fā)送完成事件緩沖區(qū)、接收完成事件緩 沖區(qū)和DMA數(shù)據(jù)接收緩沖區(qū)。
三個緩沖區(qū)均環(huán)狀使用,其中發(fā)送完成事件緩沖區(qū)用于暫存DMA命令的 發(fā)送完成事件,接收完成事件緩沖區(qū)用于暫存DMA命令的接收完成事件,DMA 數(shù)據(jù)接收緩沖區(qū)用于暫存DMA設(shè)備接收到的NAP網(wǎng)絡(luò)包中的數(shù)據(jù)。
在DMA設(shè)備,通信庫軟件通過使用基于信用的流量控制保證發(fā)送給每個 通道的門鈴數(shù)量不會超過該通道能夠暫存的最大數(shù)量。通信庫軟件在通道初 始化時會獲得該通道的信用。每發(fā)起一次DMA數(shù)據(jù)傳輸后,通信庫軟件自動 將"信用"值減1,當(dāng)"信用"值為0時,通信庫軟件不再發(fā)起DMA數(shù)據(jù)傳 輸;通信庫軟件接收到發(fā)送完成事件時,會根據(jù)完成事件的內(nèi)容將信用增加 1或者多個。此處,要求DMA設(shè)備按照時間的順序處理DMA命令。
步驟S402,本地節(jié)點的通信庫軟件根據(jù)數(shù)據(jù)傳輸?shù)男枰x擇DMA命令的 類型,并將DMA命令的相關(guān)信息按照該命令類型對應(yīng)的描述符的格式寫入一 塊連續(xù)的、8字節(jié)對齊的內(nèi)存空間。
步驟S403,本地節(jié)點的通信庫軟件將存放有描述符的內(nèi)存空間的首地址 和長度以門鈴方式發(fā)送給DMA設(shè)備。
步驟S404,本地節(jié)點的DMA設(shè)備根據(jù)門鈴中關(guān)于描述符所在內(nèi)存空間的 首地址和長度信息,從相應(yīng)的內(nèi)存空間讀取出描述符信息。
步驟S405,本地節(jié)點的DMA設(shè)備根據(jù)描述符中DMA命令的類型選擇對應(yīng) 的處理的方式。
如果DMA命令是NAP立即數(shù)命令,則描述符中就包含有需要傳輸?shù)臄?shù)據(jù),DMA設(shè)備將描述符中與接收相關(guān)的信息和需要傳輸?shù)臄?shù)據(jù)封裝成一個NAP 網(wǎng)絡(luò)包,發(fā)送到互連網(wǎng)絡(luò)上。
如果DMA命令是NAP間接數(shù)命令,則描述符中會包含有需要傳輸?shù)臄?shù) 據(jù)所在的一個或者多個內(nèi)存空間的首地址和長度,DMA設(shè)備根據(jù)首地址和長 度信息讀取相應(yīng)的內(nèi)存空間,并將描述符中與接收相關(guān)的信息和讀取回來的 數(shù)據(jù)封裝成一個NAP網(wǎng)絡(luò)包,發(fā)送到互連網(wǎng)絡(luò)上。
如果DMA命令是RDMA put命令,則描述符中會包含有本地需要傳輸?shù)?數(shù)據(jù)所在的一個或者多個內(nèi)存空間的首地址和長度及遠(yuǎn)端用于接收數(shù)據(jù)的一 個或者多個內(nèi)存空間的首地址和長度,DMA設(shè)備根據(jù)源的首地址和長度信息 讀取相應(yīng)的內(nèi)存空間,并將描述符中與接收相關(guān)的信息和讀取回來的數(shù)據(jù)封 裝成一個或者多個RDMA put網(wǎng)絡(luò)包,發(fā)送到互連網(wǎng)絡(luò)上。
如果DMA命令是RDMA get命令,則描述符中會包含有遠(yuǎn)端需要傳輸?shù)?數(shù)據(jù)所在的一個或者多個內(nèi)存空間的首地址和長度及本地用于接收數(shù)據(jù)的一 個或者多個內(nèi)存空間的首地址和長度,DMA設(shè)備將RDMA get命令封裝成一個 RDMA get網(wǎng)絡(luò)包,發(fā)送到互連網(wǎng)絡(luò)上。
如果DMA命令是Fence命令,DMA設(shè)備則生成網(wǎng)絡(luò)包。
如果DMA命令是Flush命令,DMA設(shè)備則不生成網(wǎng)絡(luò)包,直接生成發(fā) 送完成事件。
步驟S406,在DMA命令對應(yīng)的全部網(wǎng)絡(luò)包發(fā)送到互連網(wǎng)絡(luò)上以后,DMA 設(shè)備根據(jù)描述符中與發(fā)送完成事件相關(guān)的信息,選擇是否生成發(fā)送完成事件 發(fā)送給本地節(jié)點。
本發(fā)明方法中DMA設(shè)備的接收流程如圖5所示。
步驟S501,遠(yuǎn)端節(jié)點的DMA設(shè)備從互連網(wǎng)絡(luò)上接收網(wǎng)絡(luò)包,根據(jù)網(wǎng)絡(luò)包 的類型選擇對應(yīng)的處理的方式。
如果網(wǎng)絡(luò)包是NAP包,則DMA設(shè)備會根據(jù)網(wǎng)絡(luò)包中保存的與接收相關(guān)的 信息將網(wǎng)絡(luò)包中的數(shù)據(jù)寫入對應(yīng)的接收緩存區(qū)中。
如果網(wǎng)絡(luò)包是RDMA put網(wǎng)絡(luò)包,則DMA設(shè)備會根據(jù)網(wǎng)絡(luò)包中保存的用于 接收的內(nèi)存空間的首地址和長度的信息將包中的數(shù)據(jù)寫入對應(yīng)的內(nèi)存空間。
如果網(wǎng)絡(luò)包是RDMA get網(wǎng)絡(luò)包,則DMA設(shè)備會將其理解為本地發(fā)起的 RDMA put命令,根據(jù)描述符中源的首地址和長度信息讀取相應(yīng)的內(nèi)存空間,并將描述符中與接收相關(guān)的信息和讀取回來的數(shù)據(jù)封裝成一個或者多個
R匿A put網(wǎng)絡(luò)包,發(fā)送到互連網(wǎng)絡(luò)上。
如果是Fence命令,則接收該網(wǎng)絡(luò)包。
步驟S502, DMA接收操作完成后,選擇是否生成發(fā)送完成事件。 DMA設(shè)備在下列情況下會生成接收完成事件。
NAP包中的全部數(shù)據(jù)己經(jīng)寫入內(nèi)存,或者標(biāo)記為尾包的RDMA put包中的 全部數(shù)據(jù)已經(jīng)寫入內(nèi)存且網(wǎng)絡(luò)包中保存的信息指示需要生成接收完成事件。 如果是Fence命令,則在接收完成后生成接收完成事件。 DMA設(shè)備在接收完RDMA get網(wǎng)絡(luò)包后不會生成接收完成事件。 描述符的結(jié)構(gòu)如圖6所示,整個描述符可以分為6個部分 類型區(qū),用來標(biāo)識DMA命令的類型,根據(jù)DMA命令類型的不同,DMA設(shè) 備執(zhí)行的方式也會不同。具體地講,DMA命令的類型可以為NAP立即數(shù)命令、 NAP間接數(shù)命令、RDMA put命令、RDMA get命令、Flush命令和Fence命令 共6種類型。
控制信息1區(qū),該部分對于所有類型的DMA命令都相同。該部分主要包 括接收事件環(huán)流控位、發(fā)送完成事件控制位、接收完成事件控制位、發(fā)送 完成中斷控制位、接收完成中斷控制位、本地節(jié)點編號、遠(yuǎn)端節(jié)點編號、本 地通道號和遠(yuǎn)端通道號等。
控制信息2區(qū),該部分根據(jù)DMA命令的類型的不同而不同。對于NAP立 即數(shù)命令,該部分是傳輸數(shù)據(jù)總長度信息;對于NAP間接數(shù)命令,該部分是 源內(nèi)存空間的個數(shù)信息;對于RDMA put和RDMA get命令,該部分是源內(nèi)存 空間和目標(biāo)內(nèi)存空間的個數(shù)信息;對于Flush命令和Fence命令,該部分無 意義。
控制信息3區(qū),該部分根據(jù)DMA命令的類型的不同而不同。對于NAP立 即數(shù)命令,該部分是需要傳輸?shù)臄?shù)據(jù);對于NAP間接數(shù)命令,該部分是源內(nèi) 存空間的首地址和長度信息;對于RDMA put和RDMA get命令,該部分是源 內(nèi)存空間和目標(biāo)內(nèi)存空間的首地址和長度信息;對于Flush命令和Fence命 令,該部分不存在。
控制信息4區(qū),對于NAP間接數(shù)命令、RDMA put命令和RDMA get命令, 該部分為傳輸數(shù)據(jù)總長度信息;而對于NAP立即數(shù)命令、Flush命令和Fence命令,該部分不存在。
軟件信息區(qū),該部分由軟件填寫,DMA設(shè)備用其生成發(fā)送完成事件和接
收完成事件。
網(wǎng)絡(luò)包的結(jié)構(gòu)如圖7所示,整個網(wǎng)絡(luò)包可以分為6個部分
類型區(qū),用來標(biāo)識網(wǎng)絡(luò)包的類型,根據(jù)網(wǎng)絡(luò)包類型的不同,DMA設(shè)備處 理的方式也會不同。具體地講,網(wǎng)絡(luò)包的類型可以為NAP、 RDMAput、 RDMA get 和Fence共4種類型。
控制信息1區(qū),該部分對于所有類型的網(wǎng)絡(luò)包都是相同的。
該部分主要包括網(wǎng)絡(luò)包總長度、數(shù)據(jù)總長度、接收事件環(huán)流控位、接 收完成事件控制位、接收完成中斷控制位、本地節(jié)點編號、遠(yuǎn)端節(jié)點編號、 本地通道號和遠(yuǎn)端通道號等。
控制信息2區(qū),只有當(dāng)網(wǎng)絡(luò)包為RDMAput網(wǎng)絡(luò)包時該部分存在。該部分 是用于接收的內(nèi)存空間的首地址信息。
控制信息3區(qū),對于Fence網(wǎng)絡(luò)包,該部分不存在;而對于其它網(wǎng)絡(luò)包, 這部分是8字節(jié)對齊的傳輸?shù)臄?shù)據(jù)。
控制信息4區(qū),只有當(dāng)網(wǎng)絡(luò)包為RDMAput尾包時該部分存在,該部分是 RDMA put命令傳輸?shù)臄?shù)據(jù)的總長度。
軟件信息區(qū),該部分就是描述符中的軟件信息區(qū),DMA設(shè)備用其生成接 收完成事件。
控制信息5區(qū),該部分是網(wǎng)絡(luò)包的校驗信息,通常為整個網(wǎng)絡(luò)包的CRC值。
本領(lǐng)域的技術(shù)人員在不脫離權(quán)利要求書確定的本發(fā)明的精神和范圍的條 件下,還可以對以上內(nèi)容進行各種各樣的修改。因此本發(fā)明的范圍并不僅限 于以上的說明,而是由權(quán)利要求書的范圍來確定的。
權(quán)利要求
1.一種多計算機系統(tǒng)中節(jié)點的通信方法,其特征在于,所述方法包括步驟1,本地節(jié)點的通信庫軟件根據(jù)應(yīng)用程序生成DMA命令,將所述DMA命令的描述符存儲到內(nèi)存中,將包含所述DMA命令的描述符內(nèi)存位置信息的門鈴傳送給本地節(jié)點的DMA設(shè)備;步驟2,本地節(jié)點的DMA設(shè)備根據(jù)所述門鈴讀取所述描述符;根據(jù)所述描述符中信息將網(wǎng)絡(luò)包發(fā)送到互連網(wǎng)絡(luò)并在發(fā)送完成后生成發(fā)送完成事件,或僅生成發(fā)送完成事件;步驟3,遠(yuǎn)端節(jié)點的DMA設(shè)備從互連網(wǎng)絡(luò)上接收網(wǎng)絡(luò)包,根據(jù)所述網(wǎng)絡(luò)包的類型保存所述網(wǎng)絡(luò)包中數(shù)據(jù)并在接收完成后生成接收完成事件,或僅生成接收完成事件,或?qū)⑺鲞h(yuǎn)端節(jié)點的數(shù)據(jù)裝入網(wǎng)絡(luò)包發(fā)送給所述本地節(jié)點。
2. 如權(quán)利要求l所述的多計算機系統(tǒng)中節(jié)點的通信方法,其特征在于, 所述DMA設(shè)備支持通道,所述步驟1前還包括,步驟21,在處理器1/0地址空間上映射用于接收所述門鈴的命令窗口。
3. 如權(quán)利要求2所述的多計算機系統(tǒng)中節(jié)點的通信方法,其特征在于, 所述命令窗口的大小與所述DMA設(shè)備支持的通道數(shù)成正比。
4. 如權(quán)利要求2所述的多計算機系統(tǒng)中節(jié)點的通信方法,其特征在于, 所述步驟21還包括步驟41,為所述DMA設(shè)備支持的每個通道在內(nèi)存中分配用于暫存DMA命 令的發(fā)送完成事件的發(fā)送完成事件緩沖區(qū)、用于暫存DMA命令的接收完成事 件的接收完成事件緩沖區(qū)和用于暫存DMA設(shè)備接收到的NAP網(wǎng)絡(luò)包中數(shù)據(jù)的 DMA數(shù)據(jù)接收緩沖區(qū)。
5. 如權(quán)利要求4所述的多計算機系統(tǒng)中節(jié)點的通信方法,其特征在于, 所述DMA命令為NAP立即數(shù)命令或NAP間接數(shù)命令, 所述步驟2進一步為步驟51,根據(jù)所述描述符獲得待傳輸?shù)臄?shù)據(jù),DMA設(shè)備將所述描述符中 與接收相關(guān)的信息和所述數(shù)據(jù)封裝成一個NAP網(wǎng)絡(luò)包,發(fā)送到互連網(wǎng)絡(luò);步驟52,在所述NAP網(wǎng)絡(luò)包發(fā)送到互連網(wǎng)絡(luò)上后,根據(jù)所述描述符中與 發(fā)送完成事件相關(guān)的信息,確定是否生成發(fā)送完成事件,并發(fā)送給所述本地節(jié)點。
6. 如權(quán)利要求4所述的多計算機系統(tǒng)中節(jié)點的通信方法,其特征在于,所述DMA命令為RDMA put命令, 所述步驟2進一步為"步驟61,根據(jù)所述描述符讀取內(nèi)存中待傳輸?shù)臄?shù)據(jù),DMA設(shè)備將所述描 述符中與接收相關(guān)的信息和所述數(shù)據(jù)封裝成一個或多個RDMAput網(wǎng)絡(luò)包,發(fā) 送到互連網(wǎng)絡(luò);步驟62,在全部所述RDMA put網(wǎng)絡(luò)包發(fā)送到互連網(wǎng)絡(luò)上后,根據(jù)所述 描述符中與發(fā)送完成事件相關(guān)的信息,確定是否生成發(fā)送完成事件,并發(fā)送 給所述本地節(jié)點。
7. 如權(quán)利要求4所述的多計算機系統(tǒng)中節(jié)點的通信方法,其特征在于, 所述DMA命令為RDMA get命令,所述步驟2迸一步為步驟71,將所述RDMA get命令封裝為一個RDMA get網(wǎng)絡(luò)包,發(fā)送到互 連網(wǎng)絡(luò);步驟72,在所述RDMA get網(wǎng)絡(luò)包發(fā)送到互連網(wǎng)絡(luò)上后,根據(jù)所述描述 符中與發(fā)送完成事件相關(guān)的信息,確定是否生成發(fā)送完成事件,并發(fā)送給所 述本地節(jié)點。
8. 如權(quán)利要求4所述的多計算機系統(tǒng)中節(jié)點的通信方法,其特征在于, 所述DMA命令為Fence命令,所述步驟2進一步為步驟81,生成所述Fence命令對應(yīng)的網(wǎng)絡(luò)包,發(fā)送到互連網(wǎng)絡(luò),并且不生成發(fā)送完成事件。
9. 如權(quán)利要求4所述的多計算機系統(tǒng)中節(jié)點的通信方法,其特征在于, 所述DMA命令為Flush命令,所述步驟2進一步為步驟91,不生成網(wǎng)絡(luò)包,直接生成發(fā)送完成事件。
10. 如權(quán)利要求5所述的多計算機系統(tǒng)中節(jié)點的通信方法,其特征在于, 所述歩驟3進一步為,據(jù)寫入對應(yīng)通道的DMA數(shù)據(jù)接收緩存區(qū)中;步驟102,在所述網(wǎng)絡(luò)包中的全部數(shù)據(jù)已經(jīng)寫入接收緩存區(qū)中后,在所 述網(wǎng)絡(luò)包中保存的信息指示需要生成接收完成事件時,生成接收完成事件。
11. 如權(quán)利要求6所述的多計算機系統(tǒng)中節(jié)點的通信方法,其特征在于,所述步驟3進一步為,步驟111,根據(jù)所述RDMAput網(wǎng)絡(luò)包中保存的用于接收的內(nèi)存空間的首 地址和長度的信息將所述數(shù)據(jù)包中的數(shù)據(jù)寫入對應(yīng)的內(nèi)存空間;步驟112,在標(biāo)記為尾包的RDMAput網(wǎng)絡(luò)包中的全部數(shù)據(jù)己經(jīng)寫入內(nèi)存 中,并且所述網(wǎng)絡(luò)包中保存的信息指示需要生成接收完成事件時,生成接收 完成事件。
12. 如權(quán)利要求7所述的多計算機系統(tǒng)中節(jié)點的通信方法,其特征在于, 所述步驟3進一步為,步驟121,根據(jù)所述網(wǎng)絡(luò)包中信息讀取所述遠(yuǎn)端節(jié)點內(nèi)存中待傳輸?shù)臄?shù) 據(jù),將所述數(shù)據(jù)封裝成一個或多個RDMA put網(wǎng)絡(luò)包,發(fā)送給所述本地節(jié)點。
13. 如權(quán)利要求8所述的多計算機系統(tǒng)中節(jié)點的通信方法,其特征在于, 所述步驟3進一步為,步驟131,接收完所述網(wǎng)絡(luò)包后,直接生成接收完成事件。
14. 一種多計算機系統(tǒng)中節(jié)點的DMA設(shè)備,匿A設(shè)備包括用于連接所述 DMA設(shè)備和互連網(wǎng)絡(luò)的交換機接口模塊和用于連接所述DMA設(shè)備和所述節(jié)點 的處理器和內(nèi)存的系統(tǒng)總線接口模塊,其特征在于,DMA設(shè)備還包括DMA啟動模塊,用于接收包含DMA命令的描述符的內(nèi)存位置信息的門鈴, 將所述門鈴傳給描述符讀取模塊,啟動一次DMA傳輸;所述描述符讀取模塊,用于根據(jù)所述門鈴中信息讀取所述描述符,以使 數(shù)據(jù)讀取模塊、DMA發(fā)送引擎模塊和DMA發(fā)送完成通知模塊獲得所述描述符;所述數(shù)據(jù)讀取模塊,用于獲得當(dāng)前操作相關(guān)的描述符,根據(jù)所述描述符 讀取內(nèi)存中待傳輸?shù)臄?shù)據(jù),以使DMA發(fā)送引擎模塊獲得所述數(shù)據(jù);所述DMA發(fā)送引擎模塊,用于獲得當(dāng)前操作相關(guān)的描述符,按照所述描 述符中信息生成網(wǎng)絡(luò)包,并將所述網(wǎng)絡(luò)包發(fā)送到互連網(wǎng)絡(luò);所述DMA發(fā)送完成通知模塊,用于獲得當(dāng)前操作相關(guān)的描述符,根據(jù)所 述描述符進行生成發(fā)送完成事件和/或發(fā)送完成中斷的操作;DMA接收引擎模塊,用于從互連網(wǎng)絡(luò)上接收網(wǎng)絡(luò)包,根據(jù)所述網(wǎng)絡(luò)包的類型進行保存所述網(wǎng)絡(luò)包中數(shù)據(jù)的操作,并在在所述網(wǎng)絡(luò)包中DMA命令指示 從所述DMA設(shè)備所在節(jié)點提取數(shù)據(jù)時,以所述網(wǎng)絡(luò)包中描述符為當(dāng)前操作相 關(guān)的描述符,啟動所述數(shù)據(jù)讀取模塊; 'DMA接收完成通知模塊,用于根據(jù)所述描述符進行生成接收完成事件和/ 或接收完成中斷的操作。
15. 如權(quán)利要求14所述的多計算機系統(tǒng)中節(jié)點的DMA設(shè)備,其特征在于, 所述DMA設(shè)備支持多個通道。
16. 如權(quán)利要求15所述的多計算機系統(tǒng)中節(jié)點的DMA設(shè)備,其特征在于, 所述DMA啟動模塊包括門鈴緩沖區(qū),所述DMA啟動模塊進一步用于接收所述門鈴,如果所述DMA設(shè)備的描述 符讀取模塊處于空閑狀態(tài),則將所述門鈴傳給所述描述符讀取模塊以啟動一 次固A傳輸,如果所述DMA設(shè)備的描述符讀取模塊處于工作狀態(tài),則將所述 門鈴暫存到所述門鈴緩沖區(qū),等到DMA設(shè)備的描述符讀取模塊處于空閑時, 將所述門鈴傳給所述描述符讀取模塊以啟動一次DMA傳輸。
17. 如權(quán)利要求16所述的多計算機系統(tǒng)中節(jié)點的DMA設(shè)備,其特征在于, 所述描述符讀取模塊包括描述符緩沖區(qū),所述描述符讀取模塊進一步用于接收所述門鈴,按所述門鈴信息從內(nèi)存 中讀取所述描述符,將所述描述符存儲到所述描述符緩沖區(qū)以供所述數(shù)據(jù)讀 取模塊、所述DMA發(fā)送引擎模塊和所述DMA發(fā)送完成通知模塊使用時讀取。
18. 如權(quán)利要求17所述的多計算機系統(tǒng)中節(jié)點的DMA設(shè)備,其特征在于, 所述數(shù)據(jù)讀取模塊包括數(shù)據(jù)緩沖區(qū),所述數(shù)據(jù)讀取模塊進一步用于獲得當(dāng)前操作相關(guān)的描述符,在需要傳輸 數(shù)據(jù)時,根據(jù)所述描述符中信息從內(nèi)存中讀取所述待傳輸?shù)臄?shù)據(jù),將所述數(shù) 據(jù)存儲到所述數(shù)據(jù)緩沖區(qū)以供所述DMA發(fā)送引擎模塊讀取。
19. 如權(quán)利要求18所述的多計算機系統(tǒng)中節(jié)點的DMA設(shè)備,其特征在于, 所述DMA發(fā)送引擎模塊進一步用于獲得當(dāng)前操作相關(guān)的描述符,并在需要傳輸數(shù)據(jù)時,讀取所述數(shù)據(jù)緩沖區(qū),獲得所述待傳輸?shù)臄?shù)據(jù),生成網(wǎng)絡(luò)包 發(fā)送到互連網(wǎng)絡(luò);在不需要傳輸數(shù)據(jù)時,直接生成網(wǎng)絡(luò)包發(fā)送到互連網(wǎng)絡(luò)。
20. 如權(quán)利要求19所述的多計算機系統(tǒng)中節(jié)點的DMA設(shè)備,其特征在于,所述DMA發(fā)送引擎模塊還包括網(wǎng)絡(luò)包緩沖區(qū),所述DMA發(fā)送引擎模塊還用于在互連網(wǎng)絡(luò)無法接收網(wǎng)絡(luò)包時,將整個或部分所述網(wǎng)絡(luò)包緩存到網(wǎng)絡(luò)包緩沖區(qū)。
21. 如權(quán)利要求19所述的多計算機系統(tǒng)中節(jié)點的DMA設(shè)備,其特征在于, 所述DMA發(fā)送完成通知模塊,用于獲得當(dāng)前操作相關(guān)的描述符,根據(jù)所述描述符的信息,確定是否需要生成發(fā)送完成事件和/或發(fā)送完成中斷,如果 需要生成發(fā)送完成事件,則在一次DMA發(fā)送操作完成后,根據(jù)描述符信息生 成相應(yīng)的發(fā)送完成事件并將所述發(fā)送完成事件寫入對應(yīng)通道的發(fā)送完成事件 緩沖區(qū);如果需要生成發(fā)送完成中斷,則在一次DMA發(fā)送操作完成后,根據(jù) 描述符生成相應(yīng)的發(fā)送完成中斷。
22. 如權(quán)利要求21所述的多計算機系統(tǒng)中節(jié)點的DMA設(shè)備,其特征在于, DMA接收引擎模塊進一步用于從互連網(wǎng)絡(luò)上接收網(wǎng)絡(luò)包,并在所述網(wǎng)絡(luò)包中包含數(shù)據(jù)時根據(jù)所述網(wǎng)絡(luò)包的類型選擇將所述網(wǎng)絡(luò)包中的數(shù)據(jù)通過寫內(nèi) 存命令寫入所述網(wǎng)絡(luò)包指定的內(nèi)存空間或者寫入對應(yīng)通道的DMA數(shù)據(jù)接收緩 沖區(qū)。
23. 如權(quán)利要求22所述的多計算機系統(tǒng)中節(jié)點的DMA設(shè)備,其特征在于, 所述DMA接收引擎模塊還包括寫內(nèi)存命令緩沖區(qū);所述匿A接收引擎模塊還用于在總線忙碌時將所述寫內(nèi)存命令緩存到所 述寫內(nèi)存命令緩沖區(qū)。
24. 如權(quán)利要求22所述的多計算機系統(tǒng)中節(jié)點的DMA設(shè)備,其特征在于, 所述DMA接收完成通知模塊進一步用于根據(jù)所述網(wǎng)絡(luò)包中的控制信息,確定是否需要生成接收完成事件和/或接收完成中斷,如果需要生成接收完成 事件,則在一次DMA接收操作完成后,根據(jù)網(wǎng)絡(luò)包中控制信息生成相應(yīng)的接 收完成事件并寫入對應(yīng)通道的接收完成事件緩沖區(qū);如果需要生成接收完成 中斷,則在一次DMA接收操作完成后,根據(jù)網(wǎng)絡(luò)包中的相關(guān)信息生成相應(yīng)的 接收完成中斷。
25. 如權(quán)利要求24所述的多計算機系統(tǒng)中節(jié)點的DMA設(shè)備,其特征在于, 所述DMA設(shè)備還包括DMA接收緩沖區(qū)管理模塊,用于為DMA設(shè)備支持的每個通道分配多個用以記錄所述通道的接收完成事件緩沖區(qū)和DMA數(shù)據(jù)接收 緩沖區(qū)的狀態(tài)信息的寄存器,以管理所述通道的接收完成事件緩沖區(qū)和DMA數(shù)據(jù)接收緩沖區(qū)。
26.如權(quán)利要求25所述的多計算機系統(tǒng)中節(jié)點的DMA設(shè)備,其特征在于, 所述DMA設(shè)備支持的DMA命令包括NAP立即數(shù)命令、NAP間接數(shù)命令、 RDMA g6t命令、RDMA put命令、Flush命令和Fence命令。
全文摘要
本發(fā)明涉及多計算機系統(tǒng)中節(jié)點的DMA設(shè)備及通信方法,方法包括步驟1,本地節(jié)點根據(jù)應(yīng)用程序生成DMA命令,將DMA命令的描述符存儲到內(nèi)存中,將包含DMA命令的描述符內(nèi)存位置信息的門鈴傳送給本地節(jié)點;步驟2,本地節(jié)點根據(jù)門鈴讀取描述符;根據(jù)描述符中信息生成網(wǎng)絡(luò)包發(fā)送到互連網(wǎng)絡(luò)和生成發(fā)送完成事件,或僅生成發(fā)送完成事件;步驟3,遠(yuǎn)端節(jié)點的DMA設(shè)備從互連網(wǎng)絡(luò)上接收網(wǎng)絡(luò)包,根據(jù)網(wǎng)絡(luò)包的類型保存網(wǎng)絡(luò)包中數(shù)據(jù)和生成接收完成事件,或僅生成接收完成事件,或?qū)⑺鲞h(yuǎn)端節(jié)點的數(shù)據(jù)裝入網(wǎng)絡(luò)包發(fā)送給所述本地節(jié)點。本發(fā)明能夠提供多計算機系統(tǒng)中節(jié)點的信息傳輸方式,同時保證多計算機系統(tǒng)的高效通信。
文檔編號G06F13/20GK101539902SQ20091008345
公開日2009年9月23日 申請日期2009年5月5日 優(yōu)先權(quán)日2009年5月5日
發(fā)明者孫凝暉, 安學(xué)軍, 政 曹, 凱 王, 濤 胡 申請人:中國科學(xué)院計算技術(shù)研究所