Data plane programming has been widely adopted by both academia and industry. As a prominent instance, the P4 programming language has been a key language enabling flexible data plane programming with the support of compilers, formal semantics, verification frameworks, testing systems, as well as commodity hardware such as Intel Tofino and Cisco Silicon One. Despite these promising development, there is still a long way to go to let average network architects program data planes in a natural and efficient way. One unique challenge for data plane programming stems from the inherent tension between abstraction and customized optimization.
On one hand, todayβs data plane programming is too low level β P4 and other languages used by practitioners are hardware-specific and lack many common features most other programmers enjoy everyday (e.g., encapsulation, modularity, libraries); network programmers have to be aware of hardware resources and limitations, tune a lot of details (e.g., determining states, table sizes or memory configurations) of the code to satisfy different hardware constraints, update the code frequently when the network changes, and receive little help for debugging.
On the other hand, todayβs data plane programming is also too high level β it relies on compilers to perform standard, per-switch optimizations, and it is hardly possible for a programmer to make any networkwide optimizations (e.g., distributing workload to multiple switches) or customize the optimization target for a special scenario or application.
Matching the two conflicting problems, we have seen two disconnected directions of research in recent years. One emerging direction is to introduce higher-level, more abstract languages with more convenient programming tools; but programmers usually have to give up their flexible, fine-granulated optimization goals. Oppositely, another direction is to develop advanced optimization techniques that expect user-provided-guidance (e.g., program segmentations, application-specific labels and policies), making them not accessible to simple network programmers.
The goal of this project is to reconcile the two research directions by developing a radically new programming system for data plane programming, with which a user can naturally and flexibly describe her network design and optimization goals and the corresponding optimal data plane can be automatically generated.