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!
Day of Women in Science
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.