Papers for

performance engineers

Papers whose findings have a practical use for this group, as judged from the abstract. Open a paper to read what it means in practice.

AdapBench reduces microbenchmark time up to 85 percent in cloud CI CD

AdapBench: Adaptive Early-Stopping and Prioritization for Efficient Microbenchmarking in Cloud-based CI/CD

Abstract: Cloud-based software systems frequently release new versions, a fact further accelerated through agentic coding. Each new release, however, brings the risk of performance regressions which can irritate end users, increase infrastructure costs, and increase carbon footprints. Therefore, developers strive to catch such regressions in testing stages, usually through so-called continuous benchmarking. The standard way of doing this is using microbenchmark suites which, however, take notoriously long to execute. Optimizing the execution of microbenchmark suites is, hence, an active field of research. In this paper, we propose AdapBench, an online scheduling system for reducing the execution duration of microbenchmark suites. AdapBench is the first approach which dynamically makes at-runtime decisions for prioritizing the most informative benchmarks and early-stopping each one once enough evidence has accumulated to accept or reject a performance change hypothesis. We evaluate our prototype on eight popular Java projects, commonly used by microbenchmark research, and four additional Go projects. At matched 90% change detections and false-positive rate compared to an optimistic uniform run, AdapBench saves 42% of the aggregate execution duration on the Java projects, with negligible scheduling overhead (below 0.001% of the total runtime). On the Go projects, AdapBench finds every performance change with zero false positives while saving 85% of the full run.

Sat 31 OctSoftware EngineeringDistributed, Parallel, and Cluster ComputingPerformance
The gist
Software updates released in the cloud often slow down user programs, costing money and energy. The authors created AdapBench, a tool that runs small tests to catch these slowdowns more quickly. It decides which tests are most important and stops running tests early once it has enough proof. In their tests on popular Java and Go projects, AdapBench cut testing time by up to 85% without missing real slowdowns or raising false alarms.
Open → 2611.01255v1

Phronix improves agent learning and reliability in scientific computing tasks

Phronix: The Capability-Centric Learning Paradigm for Agents

Abstract: Scientific computing increasingly relies on large language model-based agents for performance engineering tasks such as instrumentation, analysis, and workflow porting. However, agent effectiveness depends heavily on the surrounding harness, which typically relies on manually written skills and curated memory. This limits autonomous learning, forcing agents to repeatedly rediscover solutions rather than retain and reuse knowledge from prior executions. We introduce Phronix, a capability-centric learning paradigm that enables agentic harnesses to acquire, validate, and refine reusable capabilities from their own executions. Phronix operates through a predictor-validator-corrector loop: MCP tools and associated skills propose solutions, tool executions validate them, and observed outcomes refine the stored capabilities. It distills every observed interaction into a capability store and researches a failing task rather than abandoning it. First, such learned capabilities solve a recurring task on the first attempt in 93-95% of cases across every model, significantly reducing solution non-determinism and improving reliability. Second, Phronix turns an agent's own execution into 7.6-30.8 durable capabilities per task without user instruction, and creation falls below two once the needed capability exists. Third, warm-start runs consume only 0.38-0.40 million tokens per task, which is three to four times less than a single baseline attempt, while a cold-start costs no more than the baseline. On the 1000 Genome Pegasus workflow, instrumenting a production application for I/O performance analysis, Phronix passes all 11 correctness checks against six for the baseline harness, and also lifts the task solving rates of two cheaper models from 29% and 27% of SWE-bench tasks solved to 91% and 87%, respectively, matching the performance of the most expensive evaluated model.

Thu 22 OctArtificial Intelligence
The gist
Solving complex computer tasks often requires software agents to learn from their own experience so they don’t make the same mistakes repeatedly. The authors present Phronix, a system that helps such agents remember successful methods and fix failures automatically by learning reusable capabilities. This leads to agents solving tasks more reliably and quickly, using less computing power over time. Phronix also improves the quality of work on real scientific workflows compared to existing approaches.
Open → 2610.31789v1

Forth interpreter speed improves with shared stack window technique

RPyForth: Exposing a Call-Shared Data Stack to a Meta-Tracing JIT Compiler

Abstract: Forth is a concatenative language whose words share one data stack across calls, with a depth and call effects that need not be known before execution. That leaves a meta-tracing JIT compiler with no stack location it can name: a cell is reached through the stack pointer, so its accesses stay in the compiled code, and declaring every cell of the stack array instead ties what the compiler carries to the capacity the array reserves rather than to the depth a program uses. We answer with a fixed-width window over the top of the stack, a shared spill holding every deeper cell, and a decoding function that joins the two, on top of which call-entry normalization and adaptive entry are policies. Decoding shows that all of them preserve the logical stack and that a trace exit rebuilds data-stack state bounded by the window's width, not by the stack's depth. RPyForth realizes this in an RPython interpreter covering Forth's Core word set, with two scalar fields and eight frame positions and no static stack-effect analysis, and RPyFactor realizes the same window for a subset of Factor. Exposing the window to the compiler, rather than merely caching cells in it, is what pays. With the layout and the call policy held fixed, annotating the window's fields makes eighteen Shootout kernels 1.44-1.45x faster and six Appbench applications about 1.60x faster on two x86-64 machines, and 1.42-1.56x in RPyFactor. How the window is shaped and whether calls normalize it matter much less, varying by program with no setting winning everywhere. As a complete system, RPyForth is faster than gforth-fast and SwiftForth on both suites and reaches 1.90-2.36x the speed of VFX Forth on the kernels, while the applications, whose stacks are deeper and whose calls are far more frequent, remain its weak point at 0.68-0.76x. All timings measure repeated execution of an already-loaded program.

Sun 20 SeptProgramming Languages
The gist
Forth is a programming language that uses one shared stack of data across different function calls, making it hard for tools that try to speed up programs to keep track of where data is. The authors found a way to speed up these programs by keeping a small, fixed-size 'window' of the top stack items easily accessible while managing deeper parts of the stack separately. They built an implementation in RPython that made many Forth programs run notably faster than before. However, programs with very deep stacks and lots of calls still run slower than some existing alternatives.
Open → 2609.23759v1

Presage improves software prefetching performance with ai agents

Presage: Prefetch Search via Agent-Guided Experiments

Abstract: Data prefetching is an established technique to mitigate cache miss latency and keep the processor saturated with data. Software exists in a unique position to issue prefetches, having algorithmic knowledge of the workload at hand. However, inserting software prefetches is a time consuming, unpredictable task, with a high degree of sensitivity to microarchitecture or future code changes. While several compiler- and FDO-based approaches insert and tune software prefetches automatically, they use heuristics that do not generalize and do not consider issues that arise in large codebases. In this paper, we show that semantic understanding and reasoning about a program is a vital component in inserting effective software prefetches. We also identify that prefetching at the scale of large codebases poses new challenges, including prefetch codependence and interference. To remedy this, we build Presage, a system that leverages the semantic reasoning of Large Language Models to insert effective software prefetches. Presage processes a workload through a custom agent harness specifically designed to navigate the wide space of potential prefetches on large-scale workloads. First, a proposer agent with access to performance metrics identifies promising software prefetching candidates. Then, several long-horizon optimizer agents optimize prefetching candidates in a loop, working towards discovery of performance wins. Finally, a combiner agent handles composition of individually effective prefetches. Through this method, Presage is able to insert prefetches that improve performance by a geomean of 10% across 81 workloads by exploring tens of different prefetching alternatives per workload, including a 2.7% runtime reduction on SPEC CPU 2026 where prior SOTA fails. When compared against prior SOTA on its evaluation suite, Presage achieves a geomean runtime improvement of 17% compared to SOTA's 10%.

Fri 18 SeptHardware ArchitecturePerformance
The gist
Cache misses slow down computer programs by making them wait for data. Software prefetching can help by guessing what data the program will need next and loading it early, but adding these guesses is tricky and time-consuming. The authors show that using AI models to understand the program’s behavior helps insert better prefetches automatically, even for large and complex programs. Their system, Presage, tries many different prefetch options and combines the best ones, resulting in faster program execution compared to previous methods.
Open → 2609.22636v1