<html><head><style type='text/css'>p { margin: 0; }</style></head><body><div style='font-family: arial,helvetica,sans-serif; font-size: 12pt; color: #000000'><div style="color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;"><style>p { margin: 0; }</style><div style="font-family: arial,helvetica,sans-serif; font-size: 12pt; color: #000000"><span style="font-size:12.8px">Talk<br>Arjun Guha, University of Massachusetts, Amherst<br>Monday, November 30, 1:30PM<br>CITP Conference room, 3rd floor Sherrerd Hall<br style="font-size:12.8px"></span><br style="font-size:12.8px"><span style="font-size:12.8px">A Fast Compiler for NetKAT</span><br><br style="font-size:12.8px"><span style="font-size:12.8px">In the past few years, high-level programming languages have played a key role</span><br style="font-size:12.8px"><span style="font-size:12.8px">in several networking platforms, by providing abstractions that streamline</span><br style="font-size:12.8px"><span style="font-size:12.8px">application development. Unfortunately, current compilers can take tens of</span><br style="font-size:12.8px"><span style="font-size:12.8px">minutes to generate forwarding state for even relatively small networks. This</span><br style="font-size:12.8px"><span style="font-size:12.8px">forces programmers to either work around performance issues or revert to using</span><br style="font-size:12.8px"><span style="font-size:12.8px">lower-level APIs.</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">In this talk, we first present a new compiler for NetKAT (a network programming</span><br style="font-size:12.8px"><span style="font-size:12.8px">language) that is two orders of magnitude faster than existing systems. Our key</span><br style="font-size:12.8px"><span style="font-size:12.8px">insight is a new intermediate representation based on a variant of binary</span><br style="font-size:12.8px"><span style="font-size:12.8px">decision diagrams that can represent network programs compactly and supports</span><br style="font-size:12.8px"><span style="font-size:12.8px">fast, algebraic manipulation. We argue that our compiler scales to large</span><br style="font-size:12.8px"><span style="font-size:12.8px">networks using a diverse set of benchmarks.</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">In addition to speed, our new intermediate representation lets us build a</span><br style="font-size:12.8px"><span style="font-size:12.8px">powerful new abstraction for network programming. Existing languages provide</span><br style="font-size:12.8px"><span style="font-size:12.8px">constructs for programming individual switches, which forces programmers to</span><br style="font-size:12.8px"><span style="font-size:12.8px">specify whole-network behavior on a switch-by-switch basis. For the first time,</span><br style="font-size:12.8px"><span style="font-size:12.8px">we can compile programs that syntactically represent sets of end-to-end paths</span><br style="font-size:12.8px"><span style="font-size:12.8px">through the network.&nbsp; To do so, our compiler automatically inserts stateful</span><br style="font-size:12.8px"><span style="font-size:12.8px">operations (e.g., VLAN tagging) to distinguish overlapping paths from each</span><br style="font-size:12.8px"><span style="font-size:12.8px">other.</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">Finally, we present a very general implementation of network virtualization that</span><br style="font-size:12.8px"><span style="font-size:12.8px">leverages our ability to compile end-to-end paths.&nbsp; The key insight is to give</span><br style="font-size:12.8px"><span style="font-size:12.8px">packets two locations--physical and virtual--and synthesize a program that moves</span><br style="font-size:12.8px"><span style="font-size:12.8px">packets along physical paths to account for hops in the virtual network. We show</span><br style="font-size:12.8px"><span style="font-size:12.8px">that different synthesis strategies can be used to implement global</span><br style="font-size:12.8px"><span style="font-size:12.8px">requirements, such as shortest paths, load-balancing, and so on.</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">Arjun Guha is an assistant professor of Computer Science at UMass Amherst. He</span><br style="font-size:12.8px"><span style="font-size:12.8px">enjoys tackling problems in systems using the tools and principles of</span><br style="font-size:12.8px"><span style="font-size:12.8px">programming languages. Apart from network programming, he has worked on Web</span><br style="font-size:12.8px"><span style="font-size:12.8px">security and system configuration languages. He received a PhD in Computer</span><br style="font-size:12.8px"><span style="font-size:12.8px">Science from Brown University in 2012 and a BA in Computer Science from Grinnell</span><br style="font-size:12.8px"><span style="font-size:12.8px">College in 2006.</span><br></div><br></div><br></div></body></html>