  The ongoing shift of cloud services from monolithic designs to microservices
creates high demand for efficient and high performance datacenter networking
stacks, optimized for fine-grained workloads. Commodity networking systems
based on software stacks and peripheral NICs introduce high overheads when it
comes to delivering small messages.
  We present Dagger, a hardware acceleration fabric for cloud RPCs based on
FPGAs, where the accelerator is closely-coupled with the host processor over a
configurable memory interconnect. The three key design principle of Dagger are:
(1) offloading the entire RPC stack to an FPGA-based NIC, (2) leveraging memory
interconnects instead of PCIe buses as the interface with the host CPU, and (3)
making the acceleration fabric reconfigurable, so it can accommodate the
diverse needs of microservices. We show that the combination of these
principles significantly improves the efficiency and performance of cloud RPC
systems while preserving their generality. Dagger achieves 1.3-3.8x higher
per-core RPC throughput compared to both highly-optimized software stacks, and
systems using specialized RDMA adapters. It also scales up to 84 Mrps with 8
threads on 4 CPU cores, while maintaining state-of-the-art us-scale tail
latency. We also demonstrate that large third-party applications, like
memcached and MICA KVS, can be easily ported on Dagger with minimal changes to
their codebase, bringing their median and tail KVS access latency down to 2.8 -
3.5us and 5.4 - 7.8us, respectively. Finally, we show that Dagger is beneficial
for multi-tier end-to-end microservices with different threading models by
evaluating it using an 8-tier application implementing a flight check-in
service.
