Virtual Machine Warmup Blows Hot and Cold
arXiv:1602.00602 · doi:10.1145/3133876
Abstract
Virtual Machines (VMs) with Just-In-Time (JIT) compilers are traditionally thought to execute programs in two phases: the initial warmup phase determines which parts of a program would most benefit from dynamic compilation, before JIT compiling those parts into machine code; subsequently the program is said to be at a steady state of peak performance. Measurement methodologies almost always discard data collected during the warmup phase such that reported measurements focus entirely on peak performance. We introduce a fully automated statistical approach, based on changepoint analysis, which allows us to determine if a program has reached a steady state and, if so, whether that represents peak performance or not. Using this, we show that even when run in the most controlled of circumstances, small, deterministic, widely studied microbenchmarks often fail to reach a steady state of peak performance on a variety of common VMs. Repeating our experiment on 3 different machines, we found that at most 43.5% of <VM, benchmark> pairs consistently reach a steady state of peak performance.
arXiv comment40 pages, 11 figures, 9 tables, 3 listings
References in corpus (3)
Cited by in corpus (18)
- Robust benchmarking in noisy environments
- Towards effective assessment of steady state performance in Java software: Are we there yet?
- Enhancing Performance of Cloud-based Software Applications with GraalVM and Quarkus
- Efficient and Deterministic Record & Replay for Actor Languages
- AI-driven Java Performance Testing: Balancing Result Quality with Testing Time
- Type Stability in Julia: Avoiding Performance Pathologies in JIT Compilation (Extended Version)
- Search-Based Regular Expression Inference on a GPU
- Which of My Transient Type Checks Are Not (Almost) Free?
- Automated Identification of Performance Changes at Code Level
- Asynchronous Snapshots of Actor Systems for Latency-Sensitive Applications
- Topology-Level Reactivity in Distributed Reactive Programs: Reactive Acquaintance Management using Flocks
- Improving Power by Conditioning on Less in Post-selection Inference for Changepoints
- A Language-based Serverless Function Accelerator
- Supporting On-Stack Replacement in Unstructured Languages by Loop Reconstruction and Extraction
- Capturing High-level Nondeterminism in Concurrent Programs for Practical Concurrency Model Agnostic Record & Replay
- A Kernel-Based Approach for Accurate Steady-State Detection in Performance Time Series
- A VM-Agnostic and Backwards Compatible Protected Modifier for Dynamically-Typed Languages
- Deoptless: Speculation with Dispatched On-Stack Replacement and Specialized Continuations