|
One of the main challenges with writing concurrent software is debugging. Errors are often subtle, difficult to reason about and hard to reproduce. In this talk I will describe Jinx, a beta development tool that significantly aids the debugging and quality assurance testing of multithreaded software. Using this tool, applications that have subtle concurrency errors experience these errors orders of magnitude more often than they would under ordinary circumstances.
Jinx is fast: programs can still execute interactively. Jinx is platform and language independent: it does not require programmers to modify their code base or build processes. Finally, Jinx is accurate: there are no false positive results. Exposed bugs are all real program bugs that exist in an application and can occur in the shipping product.
Jinx is a thin hypervisor that slips underneath an already booted operating system. Once installed, Jinx periodically takes snapshots of the guest virtual machine (VM) and executes these VM images looking for shared memory communications between processors. It then carefully orchestrates these VM simulations looking for ways to expose concurrency errors. Once it finds a particular execution path in a simulated VM that exposes a concurrency error it deterministically replays that path onto the real VM that the user is experiencing.
In this talk I describe the Jinx hypervisor. I will discuss how Jinx installs itself after the guest has already booted; how Jinx simulates copies of the guest operating system efficiently; how simulations are deterministically replayed onto reality, and an important debugging feature of Jinx called, ShortStop, that halts processors at their precise semantically important shared memory communication point that precipitates a program error. Finally, I'll conclude the talk with a demo of Jinx executing on Windows 7 and discuss the future of thin hypervisor approaches to debugging and system reliability.
|