About

I'm a PhD student in the School of Informatics at the University of Edinburgh. I'm a member of the Institute for Computing Systems Architecture and I'm currently working on the JIT-as-a-Service project, supervised by Tom Spink and Björn Franke. My research interests include compilers, operating systems, parallel architectures, and virtualisation. In particular, I'm interested in accelerating just-in-time compilation and using code profiling to direct compiler optimisation.

Research

JIT-as-a-Service

My current research focuses on JIT compilation as a service. Rather than having devices JIT compile code locally, we propose having specialised JIT servers that devices can instead query for compiled code. These JIT servers can then be hardware accelerated to produce highly optimised code quickly and efficiently. The servers can also cache compiled code, which will be beneficial in any scenario where multiple devices of the same architecture compile the same applications, such as data centres and mobile phones. This will reduce wasted computation, latency, and power consumption.

Multicore Processing for a Research OS

Most modern operating systems are extremely complex and difficult to understand, due to the way they have evolved over several decades. They are also inflexible to new scheduling approaches, due to the large and unwieldy nature of the code. I redesigned a research operating system to support multicore processing in an object-oriented way, resulting in a well-structured operating system that operates as both a teaching tool for undergraduate students and a research tool for investigating intelligent scheduling approaches.

Publications

Leaps and bounds: Analyzing WebAssembly's performance with a focus on bounds checking
In proceedings of the IEEE International Symposium on Workload Characterization (IISWC)
DOI: 10.1109/IISWC55918.2022.00030

WebAssembly is gaining more and more popularity, finding applications beyond the Web browser for which it was initially designed. However, its performance, which developers intended to be comparable with native, has not been extensively studied to identify overheads and pinpoint their causes. This paper identifies that WebAssembly's bounds-checked memory access safety mechanism may introduce up to a 650% overhead, and requires further tuning. Based on that, we extend four popular WebAssembly runtimes with modern bounds checking mechanisms and compare the performance of each with native compiled code. The runtimes are evaluated on three different instruction set architectures: x86-64, Armv8, and RISC-V RV64GC. We show that, for simple numerical kernels from Poly-Bench/C, there are no significant differences in the bounds checking performance overheads across different instruction set architectures. With the default bounds checking mechanism, performance-oriented runtimes are able to achieve execution times within 20% of native on x86-64 platforms, within 35% on Armv8 platforms, and within 17% on RISC-V. We also show that, when scaling the tested runtimes to multiple threads, the default bounds checking approach taken by WAVM, Wasmtime, and V8 of using the mprotect syscall to resize memory can cause excessive locking in the Linux kernel. Such scaling might be used to quickly start up serverless instances for a single function without the overhead of spawning new processes. We present an alternative userfaultfd-based solution to mitigate this issue. We share our results, tools, and scripts under an open source license for other researchers to replicate and use to monitor the progress that WebAssembly runtimes make as they evolve.

Outreach

Talk at UKSRC'24

My talk at the UK System Research Challenges Workshop gave a brief history of just-in-time compilation before outlining various methods employed to reduce JIT compilation latency, including hardware specialisation. It then covered our own ongoing efforts to implement the first tier of a JIT compiler entirely on an FPGA.

Talk at UKSRC'21

My talk at UKSRC'21 discussed the motivation behind redesigning a research operating system to support multicore processing. It also discussed the technical details involved in the implementation, and the resulting impact of having a clean multicore interface and a modular scheduler on both teaching and research. If you're interested in using InfOS for teaching, please get in touch!

Industry

AMD

I worked as a Compiler Development Intern within the Adaptive Computing Tools (ACT) Vitis HLS team in Cologne from December 2022 to November 2023.


Google

I worked as a Software Engineering Intern within the Play Console team on the Pre Launch Report (PLR) feature for Android apps from June 2021 to September 2021.

Teaching

University of Edinburgh

At the University of Edinburgh, I am a teaching assistant on several large undergraduate Computer Science courses. This role mainly involves creating coursework assignments, marking student submissions, running tutorial and lab sessions, and lecturing.


University of Cambridge

I provide remote supervisions for courses at the University of Cambridge. This takes the form of weekly sessions with small groups of one or two students.


Private Tutoring

I also offer private tutoring at various levels, from GCSE/N5 to undergraduate. Please get in touch if you'd like to know more!

Coronavirus Tutoring Initiative

During the national school closures, I volunteered to support both GCSE and A-Level Computer Science students with their studies, in the form of individual weekly tutoring sessions. The aim of the initiative was to make sure that no child lost out on their education due to the pandemic, and to avoid increasing the disparity between the young people who can afford private tutoring and the young people who can't. In total, CTI provided over 50,000 hours of free tutoring to students across the UK.