About the Role
About the Role
The Performance Engineer will focus on optimizing managed language runtimes for ARM64 mobile-class CPUs, working across the entire runtime stack. This role involves identifying performance bottlenecks, improving compiler efficiency, and collaborating with CPU architects to enhance runtime workloads.
What You'll Do
- Finding and ranking performance bottlenecks in interpreter, JIT/AOT, GC and runtime library code using sampling profilers, PMU counters, top-down analysis and flame graphs.
- Improving interpreter and compiler tiers, including dispatch, inline caches, hidden classes, tier-up and deoptimisation policy, instruction selection, register allocation, inlining heuristics and check elimination.
- Reducing startup time through snapshots, AOT images, lazy compilation and warm-up tuning.
- Tuning allocation and collection for throughput, pause time and footprint, including barriers, generational and concurrent collectors, object layout and pointer compression.
- Explaining runtime behaviour in hardware terms, such as indirect-branch misprediction, I-cache and iTLB pressure and load-to-use latency, and turning findings into software changes and hardware feedback.
- Building benchmarking and regression-tracking pipelines with noise control and statistically sound A/B comparison.
- Building and using LLM-agent pipelines to analyse profiles, propose patches and validate correctness.
- Working with CPU architects on which hardware or ISA features would help runtime workloads.
- Landing upstream patches, writing technical reports and contributing to patents and publications where appropriate.
Who You Are
- Degree in Computer Science, Computer Engineering, Electrical Engineering or a related field, or equivalent practical experience.
- Strong C and C++ (or Rust), with the ability to work productively in a large, performance-critical codebase.
- Hands-on performance work in a language runtime, VM or compiler backend, with measured speedups you can walk through in detail.
- Fluency with profiling tools such as perf, PMU counters and flame graphs, and the ability to read disassembly and relate it to source.
- Solid grasp of a modern ISA (ARM64 or x86-64), calling conventions, the memory model and the cost of branches and cache misses.
- Measurement rigour: you design experiments, control for noise and report results with appropriate statistics.
Bonus Points
- Working knowledge of CPU microarchitecture, including out-of-order pipelines, branch prediction, caches, TLBs and prefetching.
- ARM64 experience, particularly on mobile or embedded SoCs.
- Contributions to an open-source runtime, compiler or GC.
- Experience with LLM agents or ML-assisted tooling for code optimisation.
- Familiarity with simulators such as gem5.
- Publications or patents in runtimes, compilers or computer architecture.
Compensation
This is an inside IR35/PAYE contract, initially for 12 months and will require 100% onsite presence in Cambridge, UK.
Benefits
In accordance with local employment laws, applicants must have current, valid authorisation to work in the UK at the time of application.
Requirements
C and C++ proficiency
Strong skills in C and C++ (or Rust) are essential for working in a performance-critical codebase.
Performance optimization experience
Hands-on experience in optimizing language runtimes, VMs, or compiler backends is required.
Profiling tools expertise
Fluency with profiling tools such as perf and PMU counters is necessary.
ISA knowledge
A solid understanding of modern ISAs like ARM64 or x86-64 is important.
Nice to Have
Familiarity with CPU microarchitecture concepts such as out-of-order pipelines and branch prediction is a plus.
Experience contributing to open-source runtimes or compilers is desirable.
Benefits
Work authorization
Applicants must have valid authorization to work in the UK.