PUSh

Autor: Diyu Zhou, Yuval Tamir
Rok vydání: 2019
Předmět:
Zdroj: MICRO
DOI: 10.1145/3352460.3358317
Popis: Some of the most difficult to find bugs in multi-threaded programs are caused by unintended sharing, leading to data races. The detection of data races can be facilitated by requiring programmers to explicitly specify any intended sharing and then verifying compliance with these intentions. We present a novel dynamic checker based on this approach, called PUSh. PUSh prevents sharing of global objects, unless the program explicitly specifies sharing policies that permit it. The policies are enforced using off-the-shelf hardware mechanisms. Specifically, PUSh uses the conventional MMU and includes a key performance optimization that exploits memory protection keys (MPKs), recently added to the x86 ISA. Objects' sharing policies can be changed dynamically. If these changes are unordered, unordered accesses to shared objects may not be detected. PUSh uses happens-before tracking of the policy changes to verify that they are ordered. We have implemented PUSh for C programs and evaluated it using ten benchmarks with up to 32 threads. PUSh's memory overhead was under 2.4% for eight of the benchmarks; 127% and 260% overhead for the remaining two. PUSh's performance overhead exceeded 18% for only three of the benchmarks, reaching 99% overhead in the worst case.
Databáze: OpenAIRE