The Programmable Data Plane Reading list has been permanently moved to its new home programmabledataplane.review. This repo is no longer maintained, please direct your pull requests to the new github repo.
This is a reading list for students, practitioners, and researchers interested in the general area of programmable data plane devices. Topics include SmartNICs, programmable middleboxes and software/hardware switches, that is, everything that may underlie a software-defined network, with only a marginal attention to the major application areas like Network Function Virtualization, service chaining, or 5G.
The reading list completes the survey paper:
Roberto Bifulco and Gábor Rétvári: A Survey on the Programmable Data Plane: Abstractions, Architectures, and Open Problems, in IEEE HPSR, 2018.
The reading list is organized into a rough hierarchy based on the major topics of Abstractions, Architecture, Applications, and Miscellanea; note that this hierarchy is more or less arbitrary and the purpose is just to have some organization at all. The individual papers are tagged as “mustread”, “important”, and “interesting” (available only in the HTML version), with the approximate meaning “read at least these papers to get a good understanding of the area”, “papers for getting more familiar with some sub-areas”, and “interesting contributions to the field”, respectively. Just like the hierarchy, the tags are also pretty much arbitrary and follow the subjective view of the authors; as always, your mileage may vary.
Note: Some of the linked papers are behind paywalls. We double-checked that all listed papers can be accessed freely by a moderate amount of googling; we still provide the paywall links as user-provided PDFs often do not prove overly stable over time.
At the heart of programmable data planes lies the question of which abstractions and programming interfaces to provide. We first review literature on low-level APIs, including OpenFlow and P4, and then discuss more high-level languages and compilers, including DevoFlow and the Frenetic framework. Particular focus is put on stateful abstractions. We then extend our review to literature on parser design as well as scheduling, and in particular, the question whether there exist universal packet scheduling algorithms.
We start our survey with the seminal paper on OpenFlow, introducing a standardized interface to manage flow table entries in data plane devices via a standard control-plane–data-plane API. We then proceed by discussing P4 and its alternatives and use cases. We also review, among other, high-performance packet processing languages and make the case for intermediate representations for programmable data planes.
We then proceed to more high-level languages and abstractions, discuss programming languages such as Pyretic, systems such as Maple, or novel switch designs like HARMLESS to seamlessly add SDN capability to legacy network gear.
McKeown et al.: OpenFlow: Enabling Innovation in Campus Networks, ACM SIGCOMM Comput. Commun. Rev., 2008.
Duncan et al.: packetC: Language for High Performance Packet Processing, IEEE HPCC, 2009.
Song et al.: Protocol-oblivious Forwarding: Unleash the Power of SDN Through a Future-proof Forwarding Plane, ACM HotSDN, 2013.
Bosshart et al.: P4: Programming protocol-independent packet processors, ACM SIGCOMM Comput. Commun. Rev., 2014.
Sivaraman et al.: DC.P4: Programming the Forwarding Plane of a Data-center Switch, ACM SOSR, 2015.
Shahbaz et al.: The Case for an Intermediate Representation for Programmable Data Planes, ACM SOSR, 2015.
Bifulco et al.: Improving SDN with InSPired Switches, ACM SOSR, 2016.
Choi et al.: PVPP: A Programmable Vector Packet Processor, ACM SOSR, 2017.
Curtis et al.: DevoFlow: scaling flow management for high-performance networks, SIGCOMM CCR, 2011.
Christopher Monsanto et al.: Composing Software Defined Networks, USENIX NSDI, 2013.
Voellmy et al.: Maple: simplifying SDN programming using algorithmic policies, ACM SIGCOMM Comput. Commun. Rev., 2013.
Foster et al.: Languages for software-defined networks, IEEE Communications Magazine, 2013.
Anderson et al.: NetKAT: Semantic Foundations for Networks, ACM POPL, 2014.
Bonelli et al.: A Purely Functional Approach to Packet Processing, IEEE/ACM ANCS, 2014.
Schiff et al.: Reclaiming the Brain: Useful OpenFlow Functions in the Data Plane, ACM HotNets, 2014.
Lavanya Jose et al.: Compiling Packet Programs to Reconfigurable Switches, USENIX NSDI, 2015.
Firestone et al.: VFP: A Virtual Switch Platform for Host SDN in the Public Cloud, USENIX NSDI, 2017.
Wang et al.: P4FPGA: A Rapid Prototyping Framework for P4, ACM SOSR, 2017.
Csikor et al.: HARMLESS: Cost-Effective Transitioning to SDN for Small Enterprises, IFIP Netwoking, 2018.
Dragos Dumitrescu et al.: Dataplane equivalence and its applications, USENIX NSDI, 2019.
While OpenFlow match/action table abstractions are stateless, there are many efforts toward devising a stateful data plane programming abstraction, e.g., based on finite state machines, for supporting more dynamic applications. We discuss such approaches as well as first workload characterizations of stateful networking applications. We also review literature on the challenge of consistent state migration and elastic scaling, and discuss security implications.
Verdú et al.: Workload Characterization of Stateful Networking Applications, IEEE HPC, 2008.
Bianchi et al.: OpenState: Programming Platform-independent Stateful Openflow Applications Inside the Switch, ACM SIGCOMM Comput. Commun. Rev., 2014.
Moshref et al.: Flow-level State Transition As a New Switch Primitive for SDN, ACM HotSDN, 2014.
Arashloo et al.: SNAP: Stateful Network-Wide Abstractions for Packet Processing, ACM SIGCOMM, 2016.
Kim et al.: Kinetic: Verifiable Dynamic Network Control, USENIX NSDI, 2015.
Sivaraman et al.: Packet Transactions: High-Level Programming for Line-Rate Switches, ACM SIGCOMM, 2016.
Giuseppe Bianchi et al.: Open Packet Processor: a programmable architecture for wire speed platform-independent stateful in-network processing, unpublished manuscript, 2016.
Junaid Khalid et al.: Paving the Way for NFV: Simplifying Middlebox Modifications Using StateAlyzr, USENIX NSDI, 2016.
Luo et al.: Swing State: Consistent Updates for Stateful and Programmable Data Planes, ACM SOSR, 2017.
Dargahi et al.: A Survey on the Security of Stateful SDN Data Planes, IEEE Communications Surveys Tutorials, 2017.
Murad Kablan et al.: Stateless Network Functions: Breaking the Tight Coupling of State and Processing, USENIX NSDI, 2017.
Shinae Woo et al.: Elastic Scaling of Stateful Network Functions, USENIX NSDI, 2018.
Salvatore Pontarelli et al.: FlowBlaze: Stateful Packet Processing in Hardware, USENIX NSDI, 2019.
We start by reviewing design principles for packet parsers. We then revisit the concept of a universal scheduler that would handle all queuing strategies that may arise in a programmable switch, and ask whether such a scheduling algorithm can really exist. We conclude with a review of fair queuing on reconfigurable switches.
Gibb et al.: Design principles for packet parsers, IEEE/ACM ANCS, 2013.
Sivaraman et al.: No Silver Bullet: Extending SDN to the Data Plane, ACM HotNets, 2013.
Radhika Mittal et al.: Universal Packet Scheduling, USENIX NSDI, 2016.
Sivaraman et al.: Programmable Packet Scheduling at Line Rate, ACM SIGCOMM, 2016.
Naveen Sharma et al.: Approximating Fair Queueing on Reconfigurable Switches, USENIX NSDI, 2018.
Vishal Shrivastav: Fast, Scalable, and Programmable Packet Scheduler in Hardware, ACM SIGCOMM, 2019.
We divide the discussion of switch architectures into software and hardware switch architectures.
We first discuss the viability of software switching and then review dataflow graph abstractions, also discussing, e.g., Click, ClickOS, and software NICs. We proceed by revisiting literature on match-action abstractions, discussing OVS and PISCES. We conclude with a review on packet I/O libraries.
Egi et al.: Towards High Performance Virtual Routers on Commodity Hardware, ACM CoNEXT, 2008.
Greenhalgh et al.: Flow Processing and the Rise of Commodity Network Hardware, SIGCOMM Comput. Commun. Rev., 2009.
Dobrescu et al.: RouteBricks: exploiting parallelism to scale software routers, ACM SOSP, 2009.
Morris et al.: The Click modular router, ACM Trans. on Computer Systems, 2000.
Sun et al.: Fast and Flexible: Parallel Packet Processing with GPUs and Click, IEEE/ACM ANCS, 2013.
Martins et al.: ClickOS and the Art of Network Function Virtualization, USENIX NSDI, 2014.
Sangjin Han et al.: Berkeley Extensible Software Switch, project website, 2015.
Honda et al.: mSwitch: A Highly-scalable, Modular Software Switch, ACM SOSR, 2015.
Aurojit Panda et al.: NetBricks: Taking the V out of NFV, USENIX OSDI, 2016.
Ben Pfaff et al.: The Design and Implementation of Open vSwitch, USENIX NSDI, 2015.
Shahbaz et al.: PISCES: A Programmable, Protocol-Independent Software Switch, ACM SIGCOMM, 2016.
Ethan Jackson et al.: SoftFlow: A Middlebox Architecture for Open vSwitch, USENIX ATC, 2016.
Molnár et al.: Dataplane Specialization for High-performance OpenFlow Software Switching, ACM SIGCOMM, 2016.
Rétvári et al.: Dynamic Compilation and Optimization of Packet Processing Programs, ACM SIGCOMM NetPL, 2017.
Michael Dalton et al.: Andromeda: Performance, Isolation, and Velocity at Scale in Cloud Network Virtualization, USENIX NSDI, 2018.
Rizzo et al.: Netmap: a novel framework for fast packet I/O, USENIX ATC, 2012.
Intel et al.: Intel DPDK: Data Plane Development Kit, project website, 2016.
tcpdump
), and run third-party fast path stacks.
fd.io: The Fast Data Project, project website, 2016.
We start off by discussing a first incarnation of a programmable switch, PLUG, then discuss the SwitchBlade platform and the seminal paper on RMT (Reconfigurable Match Tables). We then review existing performance evaluation studies and literature dealing with performance monitoring and the issue of potential inconsistencies in reconfigurable networks. We conclude with a paper on Azure SmartNICs based on FPGAs.
De Carli et al.: PLUG: Flexible Lookup Modules for Rapid Deployment of New Protocols in High-speed Routers, ACM SIGCOMM, 2009.
Anwer et al.: SwitchBlade: A Platform for Rapid Deployment of Network Protocols on Programmable Hardware, ACM SIGCOMM, 2010.
Bosshart et al.: Forwarding Metamorphosis: Fast Programmable Match-action Processing in Hardware for SDN, ACM SIGCOMM, 2013.
Brebner et al.: High-Speed Packet Processing using Reconfigurable Computing, IEEE Micro, 2014.
Kuzniar et al.: What You Need to Know About SDN Control and Data Planes, EPFL Technical Report 199497, 2014.
Han et al.: BlueSwitch: Enabling Provably Consistent Configuration of Network Switches, ACM/IEEE ANCS, 2015.
Li et al.: ClickNP: Highly Flexible and High Performance Network Processing with Reconfigurable Hardware, ACM SIGCOMM, 2016.
Chole et al.: dRMT: Disaggregated Programmable Switching, ACM SIGCOMM, 2017.
Narayana et al.: Language-Directed Hardware Design for Network Performance Monitoring, ACM SIGCOMM, 2017.
Daniel Firestone et al.: Azure Accelerated Networking: SmartNICs in the Public Cloud, USENIX NSDI, 2018.
It is often believed that the performance of programmable network processors is lower than hard‐coded chips. There exists interesting literature questioning this assumption and exploring these overheads empirically. We also discuss opportunities coming from Graphics Processing Units (GPUs) acceleration, e.g., for packet processing, as well as from hybrid hardware/software architectures in general.
Han et al.: PacketShader: A GPU-accelerated Software Router, ACM SIGCOMM, 2010.
Pongrácz et al.: Cheap Silicon: A Myth or Reality Picking the Right Data Plane Hardware for Software Defined Networking, ACM HotSDN, 2013.
Kalia et al.: Raising the Bar for Using GPUs in Software Packet Processing, USENIX NSDI, 2015.
Katta et al.: CacheFlow: Dependency-Aware Rule-Caching for Software-Defined Networks, ACM SOSR, 2016.
Younghwan Go et al.: APUNet: Revitalizing GPU as Packet Processing Accelerator, USENIX NSDI, 2017.
Pravin Shinde et al.: We Need to Talk About NICs, USENIX HotOS, 2013.
Zilberman et al.: NetFPGA SUME: Toward 100 Gbps as Research Commodity, IEEE Micro, 2014.
Sangjin Han et al.: SoftNIC: A Software NIC to Augment Hardware, unpublished manuscript, 2015.
Kaufmann et al.: High Performance Packet Processing with FlexNIC, ACM SIGPLAN Not., 2016.
Phitchaya Mangpo Phothilimthana et al.: Floem: A Programming System for NIC-Accelerated Network Applications, USENIX OSDI, 2018.
Liu et al.: Offloading Distributed Applications Onto SmartNICs Using iPipe, ACM SIGCOMM, 2019.
Kumar et al.: PicNIC: Predictable Virtualized NIC, ACM SIGCOMM, 2019.
Another very relevant research area regards the design of algorithms and data planes for this new technology.
Srinivasan et al.: Packet Classification Using Tuple Space Search, ACM SIGCOMM, 1999.
Pagiamtzis et al.: Content-addressable memory (CAM) circuits and architectures: A tutorial and survey, IEEE Journal of Solid-State Circuits, 2006.
Fu et al.: Efficient IP-address Lookup with a Shared Forwarding Table for Multiple Virtual Routers, ACM CoNEXT, 2008.
Ma et al.: A Smart Pre-classifier to Reduce Power Consumption of TCAMs for Multi-dimensional Packet Classification, ACM SIGCOMM Comput. Commun. Rev., 2012.
Zhou et al.: Scalable, High Performance Ethernet Forwarding with CuckooSwitch, ACM CoNEXT, 2013.
Rétvári et al.: Compressing IP Forwarding Tables: Towards Entropy Bounds and Beyond, ACM SIGCOMM, 2013.
Kogan et al.: SAX-PAC (Scalable And eXpressive PAcket Classification), ACM SIGCOMM, 2014.
Bifulco et al.: Towards Scalable SDN Switches: Enabling Faster Flow Table Entries Installation, ACM SIGCOMM, 2015.
Chen et al.: Hermes: Providing Tight Control over High-Performance SDN Switches, ACM CoNEXT, 2017.
Jepsen et al.: Fast String Searching on PISA, ACM SOSR, 2019.
A main motivation for programmable data planes are the novel applications they enable. We identify and, in the following, will discuss five main categories: applications related to resilient and efficient forwarding, in-network computation, consensus, telemetry, and load-balancing.
One may wonder, what aspects of SDN and programmable data plane make these applications possible? There is probably no single perfect answer to this question.
Applications related to in-network computation typically leverage new hardware-assisted primitive operations, supported in the data plane, to provide novel functionality and improve performance. Resilient and efficient routing (and to some extent load-balancing) leverage the unique and unprecedented programmatic control over the way traffic flows through the network, e.g., to implement advanced functionality in the data plane (whereas formerly it used to be handled, e.g., in the control plane). Measurement applications benefit from the improved traffic visibility and/or from the improved latency and throughput at which high-volume and highly variable traffic can be handled, if offloaded to the data plane. Reduced latency and improved reaction time is arguably also a key reason for consensus applications. Furthermore, measurement applications benefit from the fact that they can be expressed in terms of simple primitives (e.g., sketches). We also note that such applications are not limited to be “performed (only) in the network”: for example, telemetry can (and today often does) occur outside the network. That said, telemetry applications also benefit from the new visibility into the network, e.g., queues occupation levels of the switches along the path. Many interesting applications also arise from offloading applications that were formerly handled in a separate middlebox to programmable switches.
In general, any application designed for a non-programmable device may benefit from the flexibilities introduced by a programmable counterpart (e.g., allowing to evolve the application). Also, applications with a strong networking component (e.g., request-response patterns) are more likely to benefit from in-network services, as much communication traffic naturally traverses the network anyway.
Data planes often operate much faster than the control plane, which motivates to move functionality for maintaining connectivity and efficient routing under failures to the switches. At the same time, implementing such functionality is non-trivial, as discussed in the following research papers.
Al-Fares et al.: Hedera: Dynamic Flow Scheduling for Data Center Networks, USENIX NSDI, 2010.
Liu et al.: Ensuring Connectivity via Data Plane Mechanisms, USENIX NSDI, 2013.
Borokhovich et al.: The show must go on: Fundamental data plane connectivity services for dependable SDNs, Elsevier ComCom, 2018.
Thomas Holterbach et al.: Blink: Fast Connectivity Recovery Entirely in the Data Plane, USENIX NSDI, 2019.
Offloading computation, on‐path aggregation functionalities, caching, or even AI, to the network, has the potential to significantly improve the efficiency of distributed applications. Accordingly, the study of such mechanisms have recently received much attention.
Paolo Costa et al.: Camdoop: Exploiting In-network Aggregation for Big Data Applications, USENIX NSDI, 2012.
Mai et al.: Netagg: Using middleboxes for application-specific on-path aggregation in data centres, ACM CoNEXT, 2014.
Graham et al.: Scalable hierarchical aggregation protocol (SHArP): a hardware architecture for efficient data reduction, IEEE COMHPC, 2016.
Sapio et al.: In-Network Computation is a Dumb Idea Whose Time Has Come, ACM HotNets, 2017.
Liu et al.: IncBricks: Toward In-Network Computation with an In-Network Cache, SIGOPS Oper. Syst. Rev., 2017.
Naveen Sharma et al.: Evaluating the Power of Flexible Packet Processing for Network Resource Allocation, USENIX NSDI, 2017.
Sanvito et al.: Can the Network Be the AI Accelerator, SIGCOMM NetCompute, 2018.
Giuseppe Siracusano et al.: In-network Neural Networks, unpublished manuscript, 2018.
Another interesting application for programmable data planes is related to consensus algorithms: the coordination among controllers or switches may be performed most efficiently directly on the network devices. Over the last years, several interesting first approaches have been reported in the literature, not only to compute consensus but also to provide different notions of consistency more generally.
Dang et al.: NetPaxos: Consensus at Network Speed, ACM SOSR, 2015.
Dang et al.: Paxos Made Switch-y, ACM SIGCOMM Comput. Commun. Rev., 2016.
Li et al.: Be Fast, Cheap and in Control with SwitchKV, USENIX NSDI, 2016.
Schiff et al.: In-band synchronization for distributed SDN control planes, SIGCOMM CCR, 2016.
Xin et al.: NetCache: Balancing Key-Value Stores with Fast In-Network Caching, ACM SOSP, 2017.
Li et al.: KV-Direct: High-Performance In-Memory Key-Value Store with Programmable NIC, ACM SOSP, 2017.
Xin Jin et al.: NetChain: Scale-Free Sub-RTT Coordination, USENIX NSDI, 2018.
Perhaps the most interesting applications are related to network measurement, monitoring and diagnosis. Indeed, programmable data planes can be a game changer, providing deep insights into the network, even to end-hosts, as we discuss in the following.
Jeyakumar et al.: Millions of little minions: Using packets for low latency network programming and visibility, SIGCOMM CCR, 2014.
Kim et al.: In-band Network Telemetry via Programmable Dataplanes, ACM SIGCOMM, 2015.
Gong et al.: Towards Accurate Online Traffic Matrix Estimation in Software-defined Networks, ACM SOSR, 2015.
Kim et al.: In-band Network Telemetry (INT), P4 Consortium, 2015.
Sivaraman et al.: Heavy-Hitter Detection Entirely in the Data Plane, ACM SOSR, 2017.
Ghasemi et al.: Dapper: Data plane performance diagnosis of TCP, ACM SOSR, 2017.
Huang et al.: SketchVisor: Robust Network Measurement for Software Packet Processing, ACM SIGCOMM, 2017.
Last but not least, and similarly to the above discussion on resilient routing, programmable data planes provide unprecedented flexibilities (and performance) in how traffic can be dynamically load-balanced.
Katta et al.: Hula: Scalable load balancing using programmable data planes, ACM SOSR, 2016.
Miao et al.: SilkRoad: Making Stateful Layer-4 Load Balancing Fast and Cheap Using Switching ASICs, ACM SIGCOMM, 2017.
Bremler-Barr et al.: Load Balancing Memcached Traffic Using Software Defined Networking, IFIP Networking, 2017.
Molero et al.: Hardware-Accelerated Network Control Planes, ACM HotNets, 2018.
Kannan et al.: Precise Time-synchronization in the Data-Plane Using Programmable Switching ASICs, ACM SOSR, 2019.
There exists highly recommendable literature on the history of SDN and programmable data planes. We also report on two other important topics, deployment and algorithms of programmable data planes.
There are several interesting papers putting the technological trends around programmable networks into a historic perspective.
Schwartz et al.: Smart packets: Applying active networks to network management, ACM TOCS, 2000.
Feamster et al.: The Road to SDN, ACM Queue, 2013.
Zilberman et al.: Reconfigurable Network Systems and Software-Defined Networking, Proceedings of the IEEE, 2015.
Nick McKeown et al.: Programmable Forwarding Planes are Here to Stay, ACM SIGCOMM NetPL, 2017.
A very relevant question, which is also a research challenge, regards the deployment of SDN and programmable data planes.