论文部分内容阅读
本世纪初,摩尔定律的失效加速了多核处理器的问世和不断普及,硬件并行化的发展反过来也推动了工业界对软件并发性的研究。软件内存事务是用软件的方法对内存操作进行封装,以事务的原子性与隔离型来保证并行程序执行逻辑的一种方法。较之于传统上基于互斥锁的多线程编程方法,软件内存事务具有编程接口易用,不产生死锁等优点。软件内存事务主要可分为基于锁的实现和无锁的实现,本文分别详细介绍了两大类中的几个典型实现,并对它们各自的优缺点进行了分析和比较。经过研究我们发现,现实中的程序运行压力并不是恒定不变的,尤其对服务器程序而言,其处理压力往往会在短时内出现剧烈波动。我们还发现,能够使软件内存事务的性能达到最优化的参数往往取决于目标状态的运行时压力,如写入型事务占事务总数的比例,在内存地址上的访问竞争度等。在现有的软件内存事务的实现中普遍缺乏对运行时压力变化做出反应和调整的机制,于是我们提出了一种基于运行时压力检测和动态策略调整的软件内存事务实现:PA-TinySTM。PA-TinySTM主要由压力探测前端,动态调整模块,TinySTM主体和反馈信息处理后端四大部分组成。压力探测前端在事务进入执行前对事务执行速率变化进行检测,并相应地计算出当前系统的处理压力。反馈处理模块负责对一些事务执行以后才能获取的信息进行搜集和统计,例如事务执行平均时间,事务撤销率等。前后端的处理结果提供给动态调整模块用作动态调整的依据,动态调整模块又分为TinySTM运行时参数调整子模块和内存分配策略调整子模块。前者根据运行时处理压力变化和访问地址特性对TinySTM中的两个主要参数进行调整;而后者则根据多线程内存分配的压力变化和内存块大小的规律进行分配策略上的优化。这两个模块根据前后端模块得到的统计数据进行动态调整,以使PA-TinySTM的参数搭配和分配策略能够及时地适应运行时压力的变化。通过试验数据的对比我们可以看到,PA-TinySTM对运行时压力变化可以做出很快的反应,并通过动态调整参数和策略以适应压力的变化,通过这种方法,基于PA-TinySTM实现的服务器程序能够使自身的运行时性能达到并保持在最佳水平上。