My research centers primarily on large-scale computer systems and improving their performance and reliability. Recently, this interest has led me to investigate ways of making storage systems more predictable and controllable. My interests however also include operating systems, computer architecture, database systems, computer security, and anything interesting/fun.
I received my MSc. from the University of Toronto in 2012 under the supervision of Prof. Bianca Schroeder, and my H.BSc. from the University of Toronto in 2010 doing a Computer Science: Information Security Specialist with a minor in Mathematics at the University of Toronto Mississauga.
I've had industry and industrial research experience in the form of internships at Microsoft and Google, IBM T.J. Watson Research Center, and Microsoft Research. (see CV for more details).
Cosmic Rays Don't Strike Twice: Understanding the Nature of DRAM Errors and the Implications for System Design ( PDF | ACM ) Andy Hwang, Ioan Stefanovici, Bianca Schroeder The Seventh International Conference on Architectural Support for Programming Languages and Operating Systems ASPLOS 2012
IBM Research T.J. Watson - Research Summer Intern - Cloud Computing, Virtualization and Data Center Management (July 2012 - November 2012)
Researched and prototyped a customer-facing performance and management analytic for cloud environments, offering predictive and "what if?"-type exploration of application performance characteristics.
Google - Software Engineer Intern (May 2009 - August 2009)
Designed and implemented services that are available to the entire Google user base for the first public release of Google Apps Script, which enables users to leverage various Google services to automate tasks and increase workflow productivity.
Microsoft - Software Design Engineer in Testing Intern (June 2008 - August 2008)
Created a static code analysis taint-tracking tool used by the Common Language Runtime (.NET runtime engine) team on the Silverlight and 4.0 version releases of the engine, focusing primarily on its new security model.
The tool was designed to track the flow of potentially-malicious user input from the public surface of an API into critical regions of managed assemblies like mscorlib.dll. It was used by the CLR team to prioritize security-related fuzz-testing targets.
Created fuzz-test scenarios, and made recommendations concerning the highest-priority public surface areas of mscorlib.dll that required security-related fuzz-testing.
Topics in the Design and Implementation of Operating Systems - 2012
Designed and implemented a virtualized fault-injection framework based on QEMU.
Framework simulated the effects of permanent memory errors in user-specified locations, and was designed to be extended to replay memory error traces on a live system.
Special Topics in Software Engineering: Dependable Systems - 2012
Designed and implemented ReconDB, a modified version of SQLite that performs online consistency checking on critical DB metadata to protect itself against bugs in its own codebase.
ReconDB's online consistency checks were based on metadata invariants derived from SQLite's built-in offline consistency checker.
Advanced Topics in Database Systems - 2011
Implemented the PAX (Partition Attribute Across) layout for data pages in PostgreSQL.
Goal was to improve query performance by increasing on-chip cache utilization, and investigate the effects of changes in modern CPU architectures (specifically L2 cache size and hardware-level prefetching techniques) on cache locality for read-heavy queries.