Nanotube基于 LLVM 的編譯器
Nanotube 是編譯器通道、庫和 API 的集合,用于促進 EBPF XDP 和 similar networking 代碼在 SmartNIC 的 FPGA 上執(zhí)行。編譯器將 EBPF XDP C 代碼作為輸入,并在 HLS C++ 中輸出數(shù)據(jù)包處理管道。然后可以使用 Vitis HLS 合成此 HLS C++ 代碼并將其放置在 FPGA 上。
編譯器對程序進行各種轉(zhuǎn)換;從將 EBPF 調(diào)用轉(zhuǎn)換為對類似 Nanotube API 函數(shù)的調(diào)用開始。然后它在結(jié)構(gòu)上和不同的 API 級別上執(zhí)行多個階段的代碼轉(zhuǎn)換:
- mem2req:將 C 語言風格的指針訪問(加載和存儲)轉(zhuǎn)換為對 map 和 packet data 的顯式訪問
- optreq:將相鄰的 map / packet 訪問合并為更少的廣泛訪問
- converge:理順圍繞 Nanotube API 調(diào)用的控制流圖
- pipeline:將單個數(shù)據(jù)包處理功能拆分為多個粗粒度管道階段,并將應(yīng)用程序邏輯更改為處理流經(jīng)的 packet words,而不是內(nèi)存中的 flat packet 表示
- hls:從 LLVM IR 創(chuàng)建 HLS C++ 代碼,用于 Vitis HLS 的合成
Nanotube 庫以一種綜合友好的實現(xiàn)方式實現(xiàn)了數(shù)據(jù)包訪問和映射,這意味著它將被置于應(yīng)用程序中,并將在 high-level synthesis 中創(chuàng)建高效的硬件。
在編譯 Nanotube 之前,需要確保所有依賴項都可用。其中許多在常見的 Linux 發(fā)行版中作為軟件包提供,其他的是 LLVM 和 Vitis-HLS。
你將需要足夠的可用存儲空間來存放 Nanotube 及其依賴項。使用本地存儲會更快,但如果愿意,可以使用網(wǎng)絡(luò)存儲。
評論
圖片
表情
