高性能DMA并沒有一種統(tǒng)一的設(shè)計方法,根據(jù)不同的應(yīng)用場景,大體上可以分為2種:用于傳遞報文的多通道DMA和用于塊數(shù)據(jù)傳輸及運算。
他們的主要區(qū)別其實是buffer descriptor的差別。首先是用于傳遞報文的DMA。這種設(shè)計的典型代表是intel網(wǎng)卡的DMA實現(xiàn)方式,他的實現(xiàn)機(jī)制一般是這樣:每個通道一般分為收和發(fā)兩個方向獨立的隊列。隊列中的報文描述符一般包含以下信息:報文在CPU的主內(nèi)存中的地址,長度信息,報文在FPGA上需要做的處理動作、處理結(jié)果狀態(tài)等。由于報文的特點是數(shù)量巨大,而每個報文都不大,一般是在2K以下(更大的報文可以用多個buffer鏈在一起的方式實現(xiàn)),因此每個描述符描述對應(yīng)的buffer一般是2K左右。第2種就是用于計算加速協(xié)處理的塊傳輸DMA,這個典型芯片有mellanox的網(wǎng)卡芯片。一般也是通過多個隊列進(jìn)行設(shè)計,隊列中的描述符一般包含幾個信息:取數(shù)據(jù)的位置、長度,回寫數(shù)據(jù)的地址;需要加速處理的action動作編碼、及計算攜帶的參數(shù);處理結(jié)束后狀態(tài)回寫等。當(dāng)需要計算大量的小塊數(shù)據(jù)時,可以在一個描述符中攜帶多個數(shù)據(jù)塊信息以提升性能。