Welcome to my web page/mini-CV! I am working on a variety of interesting research projects in Computer Systems and Networking. I founded the Mininet project, which has been used by hundreds of researchers, professionals and students worldwide for prototyping Software-Defined Networks. I also contributed to the development and implementation of OpenFlow at Stanford and Arista Networks. I completed my Ph.D. in Electrical Engineering in Stanford's Computer Systems Laboratory, working with Mendel Rosenblum. My dissertation project, Parallel SimOS, was the first complete machine simulator capable of simulating large shared-memory machines, of up to 1024 processors, with practical performance.
Network Operating Systems Computer networks are currently “hardware without an operating system.” An OS for networks could provide the sorts of benefits – resource management, protection, isolation, and abstraction – that computer operating systems provide for hardware “inside the box.” I am interested in network OS design as well as the infrastructure required to support it. Current commodity network hardware, while cheap and ubiquitous, lacks the programmability and flexibility required to implement a network OS. The OpenFlow project aims to make switches and routers programmable, to enable arbitrary management of packet flows, supporting a wide variety of new capabilities, including network OS development, cluster interconnects, new protocols, new routing algorithms, campus-scale research networks, etc..
Operating System Design and Evolution Virtualization is changing the way we think about operating systems. I am interested in the way OS design is evolving in response. One possibility is that large, monolithic operating systems will be split into smaller, application-specific systems on top of a virtual machine monitor. Virtualization also highlights what OS designers have abandoned or failed at: mobility/process migration; legacy software support; isolation; security; flexibility. It is likely that many features implemented in virtual machine monitors will migrate back into operating systems, and this is beginning to happen already with application and OS-level virtualization. Mininet makes use of OS-level virtualization for scalable network emulation.
Parallel Computing The shift to parallel computing poses a grand challenge for computer scientists and engineers: how to create multicore and multiprocessor computer systems (hardware and software) that provide meaningful benefits, for example improved responsiveness, better/new applications, and enhanced usability/programmability, to mainstream users and programmers. I am interested in the new capabilities which are required to make it easier (and possible) to design, program, debug and analyze parallel systems, for example scalable/practical simulation technology (e.g. Parallel SimOS), and improved system transparency/visibility (e.g. SimProf.)
Research and Publications
"Reproducible Network Experiments using Container Based Emulation", currently in submission, 2012.
"In-Network Live Snapshot Service for Recovering Virtual Infrasctructures", IEEE Network, vol. 25, no. 4, July 2011.
"A Network in a Laptop: Rapid Prototyping for Software-Defined Networks", HotNets-IX, Monterey, CA, October 2010."Mininet: Squeezing a 1000-node OpenFlow Network onto a Laptop", Presentation. OpenFlow Software Architecture and Implementation Working Group, Stanford, CA, November 2009.
"Enterprise GENI" (OpenFlow virtualization design) poster session. Third GENI Engineering Conference, Palo Alto, CA, October 2008.
"Virtual Machine Migration with OpenFlow", Demo. SIGCOMM 2008, Seattle, WA, August 2008. Awarded Best Demo.
"Fast Functional Simulation with Parallel Embra", Workshop on Modeling, Benchmarking and Simulation (MoBS), ISCA 2008. Beijing, China, June 2008.
Parallel SimOS: Performance and Scalability for Large System Simulation, Ph.D. Dissertation. Computer Systems Laboratory, Stanford University, Stanford, CA, 2007.
Parallel SimOS: Performance and Scalability for Large System Simulation , Ph.D. Oral Defense. Computer Systems Laboratory, Stanford University, 2006.
SimProf: Phase-based Visualization of Parallel Programs, Computer Systems Laboratory, Stanford University, 2006.
OpenFlow design and implementation. In addition to contributing towards the core OpenFlow design, specification and reference implementation, I developed a prototype implementation of OpenFlow for Arista Networks in 2009.
Portable Binary Translation. Binary translation offers the possibility of dramatically improved performance at the expense of runtime portability. By taking advantage of a flexible dynamic code generator (Dawson Engler's vcode system), I modified the Embra binary translation emulator in the SimOS/Parallel SimOS complete machine simulators to generate code for multiple host architectures. Utilizing this approach, researchers will be able to simulate non-native target architectures with high performance on a variety of host systems. With portable Embra, it will be possible to simulate MIPS-like target architectures on commonly available x86- and PowerPC-based workstations.
Automatic Debugging. By taking advantage of deterministic execution and a previous implementation, it is possible to detect an initial instance of divergence from correct behavior by using binary search over the execution time of a program. I used this method to automatically find binary translator bugs.
CS106-java. I met with Eric Roberts, Nick Parlante and the rest of the CS106 redesign team over the course of Summer 2003, helping address issues related to the transition from C to Java in CS106a, Stanford's introductory CS course. In addition to contributing to the general discussion, I developed prototypes of two graphical programming models: vector graphics/display lists and the "felt board" paradigm, as well as a live demo (using DrJava's java console) of both systems and simplified methods for composition and animation. Similar ideas were subsequently implemented in Nick Parlante's Stanford Graphics package and the eventual acm.graphics package (developed through the ACM Java Task Force, chaired by Eric Roberts), which is currently used in CS106a and in other CS courses worldwide.