Dependable computing needs pervasive debugging Tim Harris
Outline Motivation Problems with existing debuggers Pervasive debugging System architecture Demo
Motivation One of the projects we’ve been working on is building lock-free data structures Safe for multi-threaded use, but don’t use locks Built from atomic read, write and CAS – lots of subtle interactions Algorithms are short, but formal methods hard to apply here
Debugger problems Usually only forward execution Probe effects / heisenbugs e.g. relaxed memory orderings or genuine-parallelism versus time-sliced Support for concurrency e.g. deterministic re-execution Support for distribution usually one debugger needed for each process sometimes support for tracing across RPCs network monitoring software, tcpdump, nProbe
Pervasive debugging Present the user with a single interface to the entire system All of the processes involved All of the threads within them All of the communication links Execute the application in a virtualized and completely deterministic environment At least we’d have bohrbugs rather than heisen- ones Challenges Correspondence between the real and virtual environments Design of internal interfaces Implementation efficiency
System architecture Currently GDB Remote stub Execution driver Instruction virtualizer Scheduler definition Instruction annotations Virtualized libraries Pervasive debugger User interface Program files
Demo CPU Write buffer Shared memory CPU Write buffer