張冬:OpenPOWER CAPI爲什麼這麼快?(二)



張冬:OpenPOWER CAPI爲什麼這麼快?(二)


PMC公司數據中心存儲架構師張冬


有了CAPIFPGA是怎麼做的?

      首先認識一下這個體系裏的三個角色:

       AFU(Acceleration Function Unit),主加速邏輯部分就是FPAG的加速芯片,用戶可以把自己的加速邏輯和Firmware寫進去。

      PSL—Power Service Layer,提供接口給AFU用於讀寫主存和V2P地址翻譯(CPU側使用同一個頁表,幷包含TLB),同時負責Probe CAPP實現全局cc,並提供CachePSLIBM作爲硬核IP提供給FPGA開發者。

      CAPP—Coherent Attached Processor Proxy,相當於FPGA側的ccAgent,但是被放在了CPU側,其維護一個filter目錄並接受來自其他CPUProbe,未過濾掉的Probe轉發PSL

       操作要點可以簡要的概括爲以下6點:

  • 針對專用場景、PCIE專用加速卡進行優化;

  • FPGA直接訪問當前進程的全部虛擬地址空間,無需轉成PCIE地址;

  • 加速卡上可以使用Cache並通過CAPPProbe操作自動與主存cc

  • 加速卡與CPU看到同樣的地址空間並且cc

  • 提供API,包括打開設備、傳遞任務描述信息等,相當於驅動程序;

  • PSLIBM提供,硬核IPAFU通過opcode及地址控制PSL收發數據。  

      在此過程中,CAPI致力於把FPGA當成CPU的對等端,但這是一個特殊的CPU,對計算加速非常快的,非常高效的一個CPU。優勢在於:兩邊看到了一樣的地址空間,FPGA看到的不再是PCIe空間了,所以就省去了映射地址這一環節。再就是FPGA一側可以有Cache,可以緩存主存裏的數據,而且Cache是與主存一致的。

       現在FPGA可直接訪問主存空間,但它不會訪問所有的物理空間,因爲CAPI 1.0每個時刻只能給一個進程來用,CAPI會爲進程會提供一個接口,打開FPGA之後發數據和指令。CAPI 2.0會讓FPGA有一個分時複用機制,比如,每10毫秒跳一個線程,但是當前的FPGA不具備這個功能,只能是誰用誰打開。誰打開了FPGA就看到誰的虛擬空間。有了這種機制以後就不需要映射了,再就是可以直接訪問內存地址了。還有Cache,基本就融入了所有的CPU了,就是一個對等、對稱的關係。

性能能提高多少?

硬件配置是這樣的: 

        IBM Power8 Server, S822L

        Ubuntu, kernel 3.18.0-14-generic

        Nallatech 385 CAPI card

        Samsung SM1715 1.6TB NVM ExpressSSD

       測試時,ŸPMC工程師用FPGA製作了一個文本搜索引擎,如上圖。

       測試過程中,Host端主程序從NVMe SSD讀入數據,並生成任務描述鏈表,ŸAFU採用pooling的方式訪問主存獲取任務描述鏈表並執行搜索任務,Snooper用來debug和性能監控。

性能 – P8<->AFU

     當隊列深度60時的時候,獲得一個極限吞吐量,接近6GB/s的帶寬,帶寬非常大。

 

       延時也很小,只有1.5微秒,平均90%讀寫在1.5微秒完成。

 

CAPI1.0暫時做不到的事情

       現在CPU的線程看不到AFU上的地址空間(MMIO控制寄存器地址除外)。而且,AFU只能給一個進程使用。如果未來可以把FPGA直接接入CPUFSB,是不是會更快?


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章