高效能DMA並沒有一種統一的設計方法,根據不同的應用場景,大體上可以分為2種:用於傳遞報文的多通道DMA和用於塊資料傳輸及運算。他們的主要區別其實是buffer descriptor的差別。
首先是用於傳遞報文的DMA。這種設計的典型代表是intel網絡卡的DMA實現方式,他的實現機制一般是這樣:每個通道一般分為收和發兩個方向獨立的佇列。佇列中的報文描述符一般包含以下資訊:報文在CPU的主記憶體中的地址,長度資訊,報文在FPGA上需要做的處理動作、處理結果狀態等。由於報文的特點是數量巨大,而每個報文都不大,一般是在2K以下(更大的報文可以用多個buffer鏈在一起的方式實現),因此每個描述符描述對應的buffer一般是2K左右。
第2種就是用於計算加速協處理的塊傳輸DMA,這個典型晶片有mellanox的網絡卡晶片。一般也是透過多個佇列進行設計,佇列中的描述符一般包含幾個資訊:取資料的位置、長度,回寫資料的地址;需要加速處理的action動作編碼、及計算攜帶的引數;處理結束後狀態回寫等。當需要計算大量的小塊資料時,可以在一個描述符中攜帶多個數據塊資訊以提升效能。
高效能DMA並沒有一種統一的設計方法,根據不同的應用場景,大體上可以分為2種:用於傳遞報文的多通道DMA和用於塊資料傳輸及運算。他們的主要區別其實是buffer descriptor的差別。
首先是用於傳遞報文的DMA。這種設計的典型代表是intel網絡卡的DMA實現方式,他的實現機制一般是這樣:每個通道一般分為收和發兩個方向獨立的佇列。佇列中的報文描述符一般包含以下資訊:報文在CPU的主記憶體中的地址,長度資訊,報文在FPGA上需要做的處理動作、處理結果狀態等。由於報文的特點是數量巨大,而每個報文都不大,一般是在2K以下(更大的報文可以用多個buffer鏈在一起的方式實現),因此每個描述符描述對應的buffer一般是2K左右。
第2種就是用於計算加速協處理的塊傳輸DMA,這個典型晶片有mellanox的網絡卡晶片。一般也是透過多個佇列進行設計,佇列中的描述符一般包含幾個資訊:取資料的位置、長度,回寫資料的地址;需要加速處理的action動作編碼、及計算攜帶的引數;處理結束後狀態回寫等。當需要計算大量的小塊資料時,可以在一個描述符中攜帶多個數據塊資訊以提升效能。