非一致性内存访问的读写锁
原文作者:
- Irina Calciu Brown University irina@cs.brown.edu
- Dave Dice Oracle Labs dave.dice@oracle.com
- Yossi Lev Oracle Labs yossi.lev@oracle.com
- Victor Luchangco Oracle Labs victor.luchangco@oracle.com
- Virendra J. Marathe Oracle Labs virendra.marathe@oracle.com
- Nir Shavit MIT shanir@csail.mit.edu
摘要
因为多核和多芯片计算机的快速增长,非一致性内存访问(NUMA)架构在主流计算机系统中的地位越来越重要。为了在这些新系统上获取最好的性能,我们需要重新修改当前程序组成部分的并发算法和同步原语。这篇论文重新设计了很关键的同步原语——读写锁。
据我们所知,本文论述的读写锁是第一个专门为NUMA架构设计的,以及这个读写锁的变种。这些变种考虑了在高并发读的情况下的读和写的公平性以及在同一个NUMA节点上让写批量运行。我们的算法利用群组所技术来处理写者之间的同步,比较适合NUMA架构,同时使用二进制标志来协调读者和写者,利用简化的读者计数器,可以在NUMA上使读者间取得更好的并发性。最经过我们的基准程序测试之后,这些简单的NUMA锁算法竟然比目前比较出色的读-写锁的效率还高出10倍以上。为了了评估在真实环境中我们算法的效率,我们也提供了用基准程序 kccachetest测试的结果。Kccachetest属于Kyoto-Cabinet 发行版,这是一个开源的数据库使用了大量的 pthread 线程库的读写锁。跟最好的锁比,我们的锁也把kccachetest的效率提升了40%。 阅读全文