PUSh
Autor: | Diyu Zhou, Yuval Tamir |
---|---|
Rok vydání: | 2019 |
Předmět: |
010302 applied physics
Exploit business.industry Computer science Concurrency 02 engineering and technology Thread (computing) 01 natural sciences 020202 computer hardware & architecture 0103 physical sciences 0202 electrical engineering electronic engineering information engineering x86 Overhead (computing) business Computer hardware Memory protection |
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 |
Externí odkaz: |