460 likes | 729 Views
Dthreads: Efficient Deterministic Multithreading. Tongping Liu, Charlie Curtsinger , Emery Berger. Insanity: Doing the same thing over and over again and expecting different results. . In the Beginning…. There was the Core. And it was Good. It gave us our Daily Speed.
E N D
Dthreads: Efficient Deterministic Multithreading Tongping Liu, Charlie Curtsinger, Emery Berger Insanity: Doing the same thing over and over again and expecting different results.
color = ; row = 0; // globals void nextStripe(){ for (c = 0; c < Width; c++) drawBox (c,row,color); color = (color == )? : ; row++; } for (n = 0; n < 9; n++) pthread_create(t[n], nextStripe); for (n = 0; n < 9; n++) pthread_join(t[n]); JUST USE THREADS…
race conditions atomicity violations pthreads deadlock order violations
Dthreads race conditions race conditions atomicity violations atomicity violations pthreads Dthreads deadlock deadlock order violations order violations deterministic
Dthreads Enables… Race-free Executions Replay Debugging w/o Logging Replicated State Machines
Overhead with CoreDet Dthreads: Efficient Determinism 7.8 Usually faster than the state of the art
Overhead with CoreDet Dthreads: Efficient Determinism 7.8 Generally as fast or faster than pthreads
Dthreads: Easy to Use % g++ myprog.cpp–l thread p
Isolation disjoint address spaces shared address space
Performance: Processes vs. Threads 1.4 1.2 1.0 0.8 0.6 0.4 0.2 0.0 threads processes Normalized Execution Time 1 2 4 8 16 32 64 128 256 512 1024 Thread Execution Time (ms)
Performance: Processes vs. Threads 1.4 1.2 1.0 0.8 0.6 0.4 0.2 0.0 threads processes Normalized Execution Time 1 2 4 8 16 32 64 128 256 512 1024 Thread Execution Time (ms)
Performance: Processes vs. Threads 1.4 1.2 1.0 0.8 0.6 0.4 0.2 0.0 threads processes Normalized Execution Time 1 2 4 8 16 32 64 128 256 512 1024 Thread Execution Time (ms)
“Shared Memory” Snapshot pagesbeforemodifications
“Shared Memory” Write back diffs
Update in Deterministic Time & Order Parallel Serial Parallel mutex_lock “Thread” 1 cond_wait “Thread” 2 pthread_create “Thread” 3
The Culprit: False Sharing Core 2 Core 1 Thread 1 Thread 2 Invalidate Main Memory
The Culprit: False Sharing Core 2 Core 1 Thread 1 Thread 2 Invalidate 20x Main Memory
Dthreads: Eliminates False Sharing! Core 2 Core 1 Process 1 Process 2 Process 1 Process 2 Global State
Dthreads detailed analysis Dthreads: Detailed Analysis
Dthreads detailed analysis Dthreads: Detailed Analysis
Dthreads detailed analysis Dthreads: Detailed Analysis
Scalability Dthreads: Scalable Determinism
Scalability Dthreads: Scalable Determinism
Scalability Dthreads: Scalable Determinism
Dthreads Dthreads % g++ myprog.cpp–l thread p