Nanotube is a collection of compiler channels, libraries and APIs to facilitate the execution of EBPF XDP and similar networking code on SmartNIC’s FPGA. The compiler takes as input EBPF XDP C code and outputs a packet processing pipeline in HLS C++. This HLS C++ code can then be synthesized using Vitis HLS and placed on the FPGA.

The compiler does various transformations on the program; starting with converting EBPF calls to calls to functions like the Nanotube API. It then performs multiple stages of code transformation structurally and at different API levels:

  • mem2req: converts C-style pointer accesses (loads and stores) to explicit accesses to map and packet data
  • optreq: coalesce adjacent map/packet accesses into fewer broad accesses
  • converge: straighten out the control flow graph around Nanotube API calls
  • pipeline: splits a single packet processing function into multiple coarse-grained pipeline stages, and changes application logic to process flow-through packet words rather than flat packet representations in memory
  • hls: Create HLS C++ code from LLVM IR for Vitis HLS synthesis

The Nanotube library implements packet access and mapping in a synthesis-friendly implementation, which means it will be placed in the application and will create efficient hardware in high-level synthesis.

Before compiling Nanotube, you need to make sure all dependencies are available. Many of these are available as packages in common Linux distributions, others are LLVM and Vitis-HLS.

You will need enough free storage space for Nanotube and its dependencies. It will be faster to use local storage, but you can use network storage if you prefer.

#Nanotube #Homepage #Documentation #Downloads #LLVMbased #Compiler #News Fast Delivery

Leave a Comment

Your email address will not be published. Required fields are marked *