Today’s developers are facing tremendous challenges to keep up with skyrocketing network I/O rates. As CPU performance and memory bandwidth scaling stagnate, the compute capacity head- room for running network application logic is shrinking, leaving a few hundreds cycles for processing at line speed. To scale, future applications will have to break out of CPU-centric designs, instead processing data in flight on the NICs during the transfer. Emerging NIC architectures are turning this vision into reality, incorporating increasingly programmable compute elements. These modern intelligent NICs, or iNICs, are being integrated into modern data-centers, a process mostly driven by their ability to offload network functions such as virtualization bridging, network address translation, firewalls, network cryptography acceleration, and other network and transport layer applications. Yet since iNICs are programmable, they have the potential to accelerate higher level applications. Given a machine that is already equipped with an iNIC it would be worthwhile to utilize them for the benefit of other applications.
In this work we develop NICA, a set of new OS abstractions and APIs that facilitate application development for both the iNIC and the CPU, and add support for efficient and safe execution of user code on iNICs. We implement a thermal monitoring service as an example, with preliminary performance results showing that the iNIC can process packet/s, 12.3× faster than the host CPU, while using 30% less power.