# Share SOP ###### tags: `MS` They say life is about balance. For much of my career in software systems, my curiosity to explore new avenues had to be balanced with the necessity to hone my proficiency in familiar domains. My pursuit of taking online courses and reading engineering blog posts was one such means to augment my intellectual bent. Having said that, this is not a substitute for expertise one needs to effectively design scalable and performant systems. Admittedly, I feel inadequate in my capacity to research niche problems at times. I believe that pursuing the Master's program at UW Madison will not only enhance my general awareness of the domain with its advanced and diverse course offering but also help build the requisite mastery in researching software systems. My journey to becoming a systems aficionado began with my undergraduate courses on computer architecture, which continued into advanced graduate-level subjects such as Advanced Topics in Operating Systems, bringing me into the lush world of research. The theory and hands-on aspects of the architectural designs, such as memory caches and pipelined processors, hooked me into the domain. During this tenure, I've studied numerous academic papers on system designs ranging from novel OS abstractions to network verification frameworks. My favorite of the bunch is a paper on EbbRT, a framework for building per-application library operating systems. I found their heterogeneous distributed design particularly fascinating. The document also presents various ideas, such as uni-kernels and continuations, which were new to me at that point in time. Moreover, the memory allocators described in the paper were valuable later in my undergraduate project and my work at Tower Research Capital. My undergraduate project under Professor [Redacted] further offered a wonderful research experience. The project goals are similar to the Linux x32 ABI, intending to optimize the performance of memory-intensive applications. For the uninitiated, the x32 ABI uses 32-bit wide pointers instead of the full 64-bit to increase cache efficiency. Furthermore, the x32 ABI benefits from most advantages of an x86-64 architecture, such as possessing a larger number of CPU registers. Nevertheless, the x32 ABI applications are limited by the 4GB virtual memory cap. As a part of the project, I had designed and developed a Proof of Concept for a custom memory allocator that alleviates the above limit without significant runtime overhead. In conclusion, a sample benchmark demonstrated a 20-25% performance improvement. The runtime overhead against the native x32 ABI was no more than 10%. The eventual goal is to remove the need for manual memory allocation. More recently, I have worked as a full-time developer and a maintainer of core libraries and backend services for the Market Data team at Tower Research Capital. Continuing with my obsession with system design, I had worked on some challenging projects. Once, I was tasked with designing an extensible and backward-compatible application layer network protocol. To elaborate, stock exchanges disseminate essential metadata at the start of their trading sessions. Trading strategies then utilize this metadata to interpret the incoming market data throughout the session. Due to its one-time nature, strategies that missed the initial data stream cannot trade throughout the day, thus missing out on valuable trade opportunities. Here, I developed a service that served this critical data on-demand, allowing applications to recover from unforeseen restarts. Particularly challenging was the requirement for the protocol to be shared across numerous stock exchanges that we trade daily. Additionally, the API needed to ease adding support for the new and upcoming stock exchanges. I ended up doing extensive research on various market data protocols for inspiration. The end result delighted me to the core, knowing that the service was successfully deployed to serve the metadata of major US stock exchanges. In furtherance, I took my next step as a systems developer to optimize the performance of our trading systems. It did not take me long to realize that optimizing production libraries looks deceptively simple. Performance is one of the most important aspects of core libraries, given their widespread usage. For similar reasons, care must be taken not to modify their public interface, making specific optimizations difficult. In addition, the measured latency can go as low as a microsecond. Therefore, the measurement must be precise, requiring code instrumentation using manual tracepoints. The incredibly low latencies are also sensitive to noise, so I had to acquaint myself with a bit of statistical theory to compute confidence intervals assuming a normal distribution. Profiling the code to identify bottlenecks was only the initial step of this iterative process; any optimizations must preserve existing behavior. For example, the floor of a floating-point division between two integers can not be transformed into a euclidean division if any of the integers cannot be precisely represented as a floating-point number. After stacking numerous optimizations and testing rigorously, I was pleased to achieve a 10-15% performance improvement. In my free time, I enjoy browsing through StackOverflow. The site has helped me resolve my difficulties innumerable times, and I am in debt for that. Consequently, I try to repay the community by answering questions within my area of expertise. I also enjoy preparing interview questions, and I was always excited to conduct interviews. I made significant contributions to our company's OS and networks question bank. I derive inspiration for the questions from my academic courses and StackOverflow while keeping the subject matter relevant to the nature of work at our company. I also led mock interviews in the past, because as an alumnus of IITD, I feel responsible for helping students in need, extending the same courtesy offered to me as an undergraduate. UW Madison is a pioneer in tackling some of the most challenging problems in systems design. The academic paper on the THEMIS GPU cluster scheduler by Professors Shivaram Venkataraman and Aditya Akella comes to mind. I was immediately fascinated to learn more about fairness metrics described in the paper, namely Sharing Incentive, Pareto Efficiency, and Envy Freedom. Particularly intriguing was the idea of partial allocation auctions to incentivize ML applications to be truthful about their finish-time fairness metrics. Moreover, it was interesting to see how the "f" parameter determines the trade-off between the application's sharing incentive and efficiency. As an aspiring software architect, I am keen on designing systems that create a remarkable technological impact on the masses. Conclusively, UW Madison, with its top-notch resources and distinguished professors, will gear me further to achieve my professional goals.