My research focuses on the design of system software: the software that manages the hardware and decides how to allocate its resources to applications. We are investigating how to make system software more performant, scalable and and energy-efficient, how to gain better observability into its internal workings, how to bridge the gap between applications and hardware. We are looking for ways to use semantic information in the application (i.e., what the application is actually trying to do) as hints for allocating hardware resources, such as CPU cores and memory.
In the past, my students and I focused on operating system scheduling and memory management algorithms that reduce contention for hardware resources. This work culminated in techniques for intelligent placement of virtual containers on physical hardware, to ensure predictable performance and energy efficiency.
While I continue to work on many research directions, my recent passion is memory and storage systems. My current projects revolve around processing-in-memory, NVRAM and other evolving storage hardware, and its applications for deep learning, key-value stores and data analytics systems. Another area of my passion is building system software for accelerator-centric hardware.