论文部分内容阅读
并行编程是有效利用多核资源的重要方式。然而,传统的并行编程模型要求程序员手动管理诸多的并发细节,使得并行编程变得困难且易错。MapReduce编程模型通过自动管理并发任务,简化并行编程。Phoenix是MapReduce模型在多核系统上的一种实现,它证明了应用程序通过使用MapReduce能够获得与Pthreads相媲美的性能。但是,Phoenix的可伸缩性较差。本文旨在分析影响Phoenix可伸缩性的关键因素,然后设计并实现一个具有较好可伸缩性的MapReduce库SMR。本文的主要贡献为:(1)通过实验测试以及使用Linux Perf等性能分析工具,深入分析影响Phoenix可伸缩性与性能的关键因素。Phoenix因Pthreads线程对共享地址空间的竞争导致其较差的可伸缩性,因map和reduce阶段间存在同步屏障影响性能。(2)利用课题组已有的新型线程模型Sthread,设计并实现一个Phoenix接口兼容且具有较好可伸缩性的MapReduce库SMR。SMR通过避免多个线程对共享地址空间的竞争,提升系统的可伸缩性;通过让map和reduce阶段间的无阻塞流水线并行,提升系统的性能。(3)在一台32核机器上使用Phoenix测试程序对SMR和Phoenix进行性能评估,还分析了近年来Linux内核的优化对多核MapReduce库可伸缩性与性能的影响。实验结果表明,基于SMR运行的五个测试用例都具有较好的可伸缩性和性能。32核CPU下,SMR相比Phoenix的性能提升为9.0倍~26.7倍。Linux内核的优化能够有效提升Phoenix的执行效率,而对于SMR的影响较小。(4)为了高效支持迭代型MapReduce应用,本文初步设计并实现了面向多核可伸缩的迭代式MapReduce库iSMR。SMR因每次迭代计算都需要重复地创建和销毁环境,浪费大量的时间,致使其无法高效地支持迭代型应用。iSMR只在处理流程的开始和结束时创建和销毁环境,并且它采用线程池复用线程,以提升迭代型应用的处理效率。本文提出的SMR为程序员提供了一种简单高效的方式使用多核资源。此外,本文关于多核MapReduce库可伸缩性的分析,对其他Pthreads程序的分析具有指导意义;关于近年来Linux内核优化的分析,对Linux的相关研究工作具有参考价值。