当前位置: X-MOL 学术Int. J. Parallel. Program › 论文详情
Our official English website, www.x-mol.net, welcomes your feedback! (Note: you will need to create a separate account there.)
Convoider: A Concurrency Bug Avoider Based on Transparent Software Transactional Memory
International Journal of Parallel Programming ( IF 1.5 ) Pub Date : 2019-09-12 , DOI: 10.1007/s10766-019-00642-1
Zhen Yu , Yu Zuo , Yong Zhao

Software transactional memory is an effective mechanism to avoid concurrency bugs in multi-threaded programs. However, two problems hinder the adoption of traditional such systems in wild world: high human cost for equipping programs with transaction functionality and low compatibility with I/O calls and conditional variables. This paper presents Convoider to try to solve these problems. By intercepting inter-thread operations and designating code among them as transactions in each thread, Convoider automatically transactionalizes target programs without any source code modification and recompiling. By saving/restoring stack frames and CPU registers on beginning/aborting a transaction, Convoider makes execution flow revocable. By turning threads into processes, leveraging virtual memory protection and customizing memory allocation/deallocation, Convoider makes memory manipulations revocable. By maintaining virtual file systems and redirecting I/O operations onto them, Convoider makes I/O effects revocable. By converting lock/unlock operations to no-ops, customizing signal/wait operations on condition variables and committing memory changes transactionally, Convoider makes deadlocks, data races and atomicity violations impossible. Experimental results show that Convoider succeeds in transparently transactionalizing twelve real-world applications and perfectly avoid 94% of thirty-one concurrency bugs used in our experiments. This study can help efficiently transactionalize legacy multi-threaded applications and effectively improve the runtime reliability of them.

中文翻译:

Convoider:一种基于透明软件事务内存的并发错误避免器

软件事务内存是避免多线程程序并发错误的有效机制。然而,有两个问题阻碍了在野外采用传统的此类系统:为程序配备事务功能的高人力成本以及与 I/O 调用和条件变量的低兼容性。本文提出Convoider来尝试解决这些问题。Convoider通过拦截线程间操作并将其中的代码指定为每个线程中的事务,无需任何源代码修改和重新编译即可自动将目标程序事务化。通过在开始/中止事务时保存/恢复堆栈帧和 CPU 寄存器,Convoider 使执行流程可撤销。通过将线程变成进程,利用虚拟内存保护和自定义内存分配/释放,Convoider 使内存操作可撤销。通过维护虚拟文件系统并将 I/O 操作重定向到它们,Convoider 使 I/O 效果可撤销。通过将锁定/解锁操作转换为无操作、自定义条件变量上的信号/等待操作以及以事务方式提交内存更改,Convoider 使死锁、数据竞争和原子性违规成为不可能。实验结果表明,Convoider 成功地将 12 个实际应用程序透明地事务化,并完美地避免了我们实验中使用的 31 个并发错误中的 94%。这项研究可以帮助有效地对遗留多线程应用程序进行事务处理,并有效提高它们的运行时可靠性。Convoider 使 I/O 效果可撤销。通过将锁定/解锁操作转换为无操作、自定义条件变量上的信号/等待操作以及以事务方式提交内存更改,Convoider 使死锁、数据竞争和原子性违规成为不可能。实验结果表明,Convoider 成功地将 12 个实际应用程序透明地事务化,并完美地避免了我们实验中使用的 31 个并发错误中的 94%。这项研究可以帮助有效地对遗留多线程应用程序进行事务处理,并有效提高它们的运行时可靠性。Convoider 使 I/O 效果可撤销。通过将锁定/解锁操作转换为无操作、自定义条件变量上的信号/等待操作以及以事务方式提交内存更改,Convoider 使死锁、数据竞争和原子性违规成为不可能。实验结果表明,Convoider 成功地将 12 个实际应用程序透明地事务化,并完美地避免了我们实验中使用的 31 个并发错误中的 94%。这项研究可以帮助有效地对遗留多线程应用程序进行事务处理,并有效提高它们的运行时可靠性。数据竞争和原子性违规是不可能的。实验结果表明,Convoider 成功地将 12 个实际应用程序透明地事务化,并完美地避免了我们实验中使用的 31 个并发错误中的 94%。这项研究可以帮助有效地对遗留多线程应用程序进行事务处理,并有效提高它们的运行时可靠性。数据竞争和原子性违规是不可能的。实验结果表明,Convoider 成功地将 12 个真实世界的应用程序透明地事务化,并完美地避免了我们实验中使用的 31 个并发错误中的 94%。这项研究可以帮助有效地对遗留多线程应用程序进行事务处理,并有效提高它们的运行时可靠性。
更新日期:2019-09-12
down
wechat
bug