EmbedSanitizer: Runtime Race Detection Tool for 32-bit Embedded ARM

We propose EmbedSanitizer, a tool for detecting concurrency data races in 32-bit ARM-based multithreaded C/C++ applications. Moreover, we motivate the idea of detecting data races in embedded systems software natively; without virtualization or emulation or use of alternative architecture. Detecting data races in applications on a target hardware provides more precise results and increased throughput and hence enhanced developer productivity. EmbedSanitizer extends ThreadSanitizer, a race detection tool for 64-bit applications, to do race detection for 32-bit ARM applications. We evaluate EmbedSanitizer using PARSEC benchmarks on an ARMv7 CPU with 4 logical cores and 933 MB of RAM. Our race detection results precisely match with results when the same benchmarks run on 64-bit machine using ThreadSanitizer. Moreover, the performance overhead of EmbedSanitizer is relatively low as compared to running race detection on an emulator, which is a common platform for embedded software development.

[1]  Barton P. Miller,et al.  What are race conditions?: Some issues and formalizations , 1992, LOPL.

[2]  Ok-Kyoon Ha,et al.  An Efficient Algorithm for On-the-Fly Data Race Detection Using an Epoch-Based Technique , 2015, Sci. Program..

[3]  Yong-Kee Jun,et al.  Dynamic Race Detection Techniques for Interrupt-Driven Programs , 2012, FGIT.

[4]  Stephen N. Freund,et al.  FastTrack: efficient and precise dynamic race detection , 2009, PLDI '09.

[5]  Serdar Tasiran,et al.  Runtime verification of concurrency-specific correctness criteria , 2011, International Journal on Software Tools for Technology Transfer.

[6]  Christian Bienia,et al.  Benchmarking modern multiprocessors , 2011 .

[7]  Bin Gu,et al.  Static Data Race Detection for Interrupt-Driven Embedded Software , 2011, 2011 Fifth International Conference on Secure Software Integration and Reliability Improvement - Companion.

[8]  Assaf Schuster,et al.  MultiRace: efficient on‐the‐fly data race detection in multithreaded C++ programs , 2007, Concurr. Comput. Pract. Exp..

[9]  Serdar Tasiran,et al.  Goldilocks: a race and transaction-aware java runtime , 2007, PLDI '07.

[10]  Gu Bin,et al.  Static Data Race Detection for Interrupt-Driven Embedded Software , 2011, SSIRI 2011.

[11]  Konstantin Serebryany,et al.  ThreadSanitizer: data race detection in practice , 2009, WBIA '09.

[12]  Nicholas Nethercote,et al.  Valgrind: a framework for heavyweight dynamic binary instrumentation , 2007, PLDI '07.

[13]  Assaf Schuster,et al.  MultiRace: efficient on-the-fly data race detection in multithreaded C++ programs: Research Articles , 2007 .

[14]  Yong-Kee Jun,et al.  Verification of Data Races in Concurrent Interrupt Handlers , 2013, Int. J. Distributed Sens. Networks.

[15]  Ji Wang,et al.  Data Race Detection for Interrupt-Driven Programs via Bounded Model Checking , 2013, 2013 IEEE Seventh International Conference on Software Security and Reliability Companion.

[16]  Steffen Keul,et al.  Tuning Static Data Race Analysis for Automotive Control Software , 2011, 2011 IEEE 11th International Working Conference on Source Code Analysis and Manipulation.

[17]  Vikram S. Adve,et al.  LLVM: a compilation framework for lifelong program analysis & transformation , 2004, International Symposium on Code Generation and Optimization, 2004. CGO 2004..

[18]  Doo-Hwan Bae,et al.  Experimental Performance Comparison of Dynamic Data Race Detection Techniques , 2017 .