Curriculum Vitae
Work Experience
Linux Kernel: btrfs 2020-
Recently, I have been focusing on fragmentation the chunk allocator, but this work is ongoing. It started for me out of a large scale mitigation I performed last year to staunch the bleeding while we worked on several long term improvements.
I added support for fs-verity to btrfs. This feature allows for lazy, cached, block-level Merkle tree integrity authentication of files. This is a fairly detailed write-up on the btrfs implementation.
I noticed that the btrfs free space tree could not be enabled on remount. This practically made it impossible to use without wiping the disk with a new filesystem. I did some refactoring of the btrfs remount path to support enabling the free space tree on remounts.
FBOSS 2016-2020
FBOSS is an open source Network Operating System (NOS) written at Facebook to control our switches and routers. It is primarily responsible for programming the underlying routing ASIC and for facilitating network protocols that aren't fully hardware offloaded (e.g. NDP, BGP, LACP). More details are available in the SIGCOMM experience paper we wrote.
I helped scale our FBOSS deployment by identifying opportunites to streamline and automate our oncall process. To that end, I came up with a reliable proxy for FBOSS availability and built a system that detected outages, categorized their root causes and let us track trends across software and hardware variables. This allowed us to focus on actual debugging rather than wrangling this information. It also helped drive decision making for both software and hardware teams. I also built a canary system to support a reliable bi-weekly release process that could always roll forward and backward.
I added support for ECN to the routers, which allowed us to improve link sharing between different classes of flows under congestion.
I implemented Unequal Cost Multipath routes (as opposed to the standard Equal Cost Multipath or ECMP). This enabled advanced routing decision making by our routing protocols in the face of link failure and other asymmetries in the network.
Switch Abstraction Interface (SAI) is an Open Compute Project standard implemented by multiple network ASIC vendors that provides a common API for programming the ASIC. I led a team porting FBOSS to SAI, to support porting FBOSS across ASIC vendors. FBOSS SAI. In this process, I implemented a declarative DSL for using the hyper-regular SAI API, which was a fun opportunity to learn C++ metaprogramming.
Twine 2012-2016
Twine is a Facebook system that has components similar to what's offered by Kubernetes+Docker. I worked on it relatively early in its life, so I got to work on all of its components. Some highlights for me were working on the feature exposing cgroups to users, the machine allocator, and the CLI frontend.
Skills
Languages
- C
- C++
- Python
- Bash
- Rust
- Haskell
Tracing/Debugging
- eBPF
- bpftrace
- perf
- gdb
- atop
Ops
- Chef
- systemd
Virtualization
- qemu
- KVM
- libvirt
- linux containers
Source Control
- git
- hg
Education
B.S. Computer Science
- Functional Programming and Data Structures (T.A.)
- Operating Systems
- Compilers
- Algorithms (T.A.)
- Computer Vision
- Machine Learning
B.S. Mathematics (Magna Cum Laude)
- Real Analysis
- Multivariable Real Analysis
- Complex Analysis
- Linear Algebra
- Abstract Algebra
- Ordinary Differential Equations
- Partial Differential Equations
- Statistics
- Topology
Personal Projects
I am quite interested in shell scripting environments and REPLs. I have been experimenting with trying to create an environment that gets the insane terseness and wealth of tools from shell scripting as well as more powerful, familiar programming constructs that aren't constrained by shell parsing. The approach I am currently pursuing is to embed easy to type primitives for commands, pipes, and redirection into Haskell, thanks to its support for DSLs with infix operators.
Similarly, I like streamlining creating CLI tools. To that end, I made a recursive cli framework in C that is heavily inspired by daemontools: clitools
In the past, I enjoyed implementing some basic server facilities like an http server using the C++ standard library. It didn't get too advanced (especially in terms of compute and I/O multiplexing) but was still an interesting learning experience in parsing and generating HTTP: web server libraries