论文部分内容阅读
多核处理器的出现,让单线程应用移植到并发的多线程应用变得容易起来。多核之间有效同步问题是并行计算的一个挑战。在过去,锁作为多线程同步的一种主要的机制,但使用锁的系统很容易导致较多的错误出现和较差的扩展性。大量多核处理器出现以后,事务存储作为一种替代锁同步的并行编程模型被提出。事务存储可以在访问共享内存时保持自身的原子性。从实现方式看,有三种事务存储系统分别是软件、硬件和混合事务存储系统。相对于其它的实现方式硬件事务存储具有强原子性和高性能的优点因而是本文的研究重点。和其它实现方式一样在硬件事务存储系统中也会因共享存储发生事务冲突,引起系统性能降低甚至死锁。尤其是在实际设计中,常常使用了容量受限的签名,会让事务冲突加剧。所以还存在着许多问题亟待解决,为此本文提出了一些解决机制。问题之一是使用的事务退避时间模式单一固定,没有根据系统运行时的冲突程度动态的调整。根据监测运行时的系统信息,本文提出了自适应事务退避机制,根据事务冲突程度调整事务退避时间的长度。该机制通过观测在前后两个采样时的放弃阶段的时间比例的变化和有用事务的时间比例的变化,自适应地调节当前放弃事务采用的退避时间长度,从而使退避时间和冲突程度联系起来,解决了退避时间模式过于单一的问题,减少了执行时间的开销。实验数据表明,带有自适应退避机制的系统执行时间减少,退避时间会随着系统中的冲突的程度的改变而变化。问题之二是如何选择放弃的事务,尽可能的节省已有的工作同时满足其他事务对于资源的需求。本文提出了基于EnemyQue队列的事务放弃机制,根据事务的竞争事务的个数来确定放弃事务的选择顺序。这种机制通过将每个事务和它申请资源冲突的事务设为竞争事务并统计竞争事务的个数,在放弃事务时优先选择竞争事务个数多的事务放弃,让更多的事务收益于它释放的资源。实验数据表明,采用EnemyQue事务放弃机制后系统的性能得到提高,避免了不必要的已有的工作的损失。问题之三是如何选择重新启动的事务。事务的重新启动操作通常由事务退避时间来确定,如果退避时间用完,即使它所需要的共享资源仍被其他的事务占用也不得不重新启动,从而给系统引入了新的事务冲突。本文提出了基于即时通知的事务重启机制,在事务完成提交或者放弃以后释放占有的资源并通知和它竞争同一资源的竞争事务重启。这样就使事务的重新启动避免了盲目性。实验数据表明,采用即时通知重新启动机制的系统的加速比增加,避免了退避时间点和重新启动时间点的不一致性造成的系统性能的下降。并将该机制应用在EL和LL系统中,相应的系统也有性能的提升。