Srinivas Narayana : Statement of Research Interests

For modern computer networks to support novel high-performance applications, the underlying infrastructure (ranging from data centers to carrier backbones to sensor networks and IoTs) must be flexible. I design computer networks that can be programmed, yet have performance competitive with fixed-function hardware designs. Programmability enables network designers and operators to manage the increasing scale and complexity of networks, allowing them to understand the network’s operation and implement novel functions without investing in new hardware. For example, network operators need to diagnose bad application performance (e.g., poor quality Skype calls), allocate resources smartly (e.g., congestion control, traffic engineering), and ensure secure operation (e.g., avoid data exfiltration). I have combined my expertise in networking with principles from programming languages, computer architecture, and algorithms, to bridge the gap between high-level language abstractions and efficient packet processing. Given the traditional inflexibility of network router and network interface card (NIC) hardware on endpoints, programmability in network infrastructure is challenging to achieve in general. It is also increasingly expensive to process high-rate packet data on flexible commodity servers. With Moore’s law coming to an end, modern server cores today need several hardware offloads simply to keep up with 10–100 Gbit/s NICs. Further, pushing packet data out of just a single latest-generation switch (e.g., running multiple 1 Ghz pipelines with an aggregate rate of 6.4 Tbit/s) could require spinning up 100—1000 server cores. This motivates leveraging routers and NICs as first-class citizens in managing networks. Software-Defined Networking (SDN) technology has enabled the flexible programming of packet forwarding; my goal is to make network operation programmable in general—including problem diagnosis, resource allocation, and secure operation—on top of switches, NICs, and endpoint software stacks. In my research, I have enabled network operators to express operational tasks as programs in declarative languages. To implement these languages, I have designed primitives that are general enough to support a broad variety of programs, yet efficient enough to be built into the critical packet-processing path. I have applied this approach to three problems: measuring network performance on a per-flow basis [1], measuring traffic that takes a specified path through the network [2], and enabling flexible high-performance congestion control algorithms [3]. The primitives summarize just the data relevant to the programs, leaving a manageable rate of data to be processed on server cores. To design and implement end-to-end systems, I have constructed novel hardware-compatible data structures, introduced new compilation techniques, and applied tools and insights from related fields like control theory. My other projects on detecting heavy flows on switches [4] and formally verifying controllers [5] also build hardware-compatible data structures and domain-specific abstractions. All this research has benefited from the support and insights of my collaborators.