Building the next generation of programmable networking - powered by Linux
Introduction
Programmable networking has the potential to enable new applications, as well as increase the flexibility of existing ones. Over the last several years, the performance of general purpose computers has reached the point where it has become practical to perform high-speed packet processing in software, and several frameworks have emerged to enable this, such as the DataPlane Developer Kit (DPDK). However, as these new frameworks have been focused on maximising performance, they have adapted a clean-slate design that means that existing mature network management tools are harder to integrate with them. On the other hand, mature operating system networking stacks are featureful and well-integrated into the ecosystem, but lack the performance to keep up with the specialised frameworks. Finally, networking hardware is starting to become ever more programmable, leading to a desire to integrate programmable hardware features with the software stack.
The Linux networking community has reacted to these challenges by integrating a new data path into the Linux kernel, called the eXpress Data Path (XDP). This runs inline with the regular data path, allowing flexible high-performance programmable networking to function in concert with the regular networking stack. In addition, some network adapters have adopted the eBPF byte code format used by XDP as an option for offloading programmable processing to the hardware. This makes XDP a promising technology for solving the problems of integration between existing stacks, high-speed packet programming in software, and hardware offloading of programmable features. However, while XDP shows promise, there are several open problems that need to be resolved before the vision of an integrated architecture for programmable networking can be achieved. This research project aims to explore these problems and offer solutions at both the architectural and technical implementation levels.
An explicit aim of this project is to integrate the academic work with an open-source implementation. To this end, this project is structured as a partnership between Red Hat and Karlstad University in Sweden. Karlstad University has a strong history of research excellence in the field of computer networking, with particular competences in the areas of 5G, programmable networking and SDN/NFV. As such, this research project is envisioned as the beginning of a longer collaboration that will bring these competences into play in the future development of XDP and related technologies.
Problems this project seeks to solve
This project aims to explore multiple areas related to programmable networking in general, and XDP in particular. The exact areas to be explored will be adjusted along the way, as participants explore the possibilities.
Areas of interest at the time of writing this include:
- Defining a coherent architecture for using Linux as a programmable network platform. The XDP and eBPF technologies in the Linux kernel are only building blocks for a larger programmable architecture based on Linux. Defining just what this architecture needs to look like, what problems it can solve and cannot solve, and how it fits into a wider ecosystem of programmable network technology and hardware, is still very much up in the air. As such, this project seeks to explore these architectural issues further, possibly in collaboration with other programmable network initiatives.
- Expanding the scope of programmability in XDP . As noted above, the XDP subsystem is just a building block, and one that is still under active development, which presents an opportunity to expand the scope of what is programmable. This project seeks to explore different ways that the programmability of the data path can be usefully expanded in Linux. This could include things like adding new XDP hooks for transmission or adding programmable queueing.
- Using XDP as a platform for implementing Virtual Network Functions (VNFs) . The Linux kernel networking stack already implements several features that can be deployed as virtual network functions, such as connection tracking, and transport protocol parsers. Because XDP is integrated with the networking stack, it is possible to use these features from a programmable packet processor context. This project will explore best practices and architectural issues needed to see this potential be realised.
- Defining an infrastructure for container-based NFVs on Linux . Containers are an increasingly popular technology for deploying applications to cloud environments, because of the lower overhead compared to full virtualisation. However, to be useful in an NFV context, the networking interconnect between containers need to be high performance as well. XDP enables programmable steering of traffic, and is tightly integrated with the virtual networking interfaces used for interconnecting containers. As such, XDP has the potential to realise the promise of high-performance container-based NFVs. This project seeks to explore the technical and architectural challenges involved in realising this potential.
- Specifying an architecture for programmable protocol processing . As more programmable networking solutions appear on the market, interoperability becomes an important issue, as does the smooth integration of different architectures (e.g., hardware-based and software-based). At the same time, a way to specify behaviours or define parsing semantics at a higher level of abstraction is needed. The c3po initiative was 3 announced after the Netdev conference in March 2019, and aims to define a specification for a "common model of programmable protocol processing". This project will participate in that effort.