内存申请是引发共享存储系统上MapReduce性能下降的主要瓶颈之一,特别是对于需要处理大量键值的应用尤为严重.为了解决此问题,提出了一种内存开销低、能高效处理大规模键值的MapReduce并行计算框架——MALK(high-efficient MapReduce for applications having large amount of keys).MALK对于离散的大规模键值采用连续的存储管理方法,避免了大量小块内存的申请;通过更细粒度地处理Map阶段的任务和流水化Reduce阶段的任务,来减少系统运行过程中同时活跃的数据量,从而将应用程序对内存的需求控制在一个较小的范围内;并提出一种Hash表的复用机制,通过复用Hash表的存储空间来避免流水过程中Hash表内存的重复申请;MALK还综合考虑了任务的粒度和数量对任务管理开销和整体性能的影响,把Reduce阶段的任务数量设成对系统性能最优的值.实验结果表明:相对于Phoenix++,MALK的性能最高可提升3.8倍(平均2.8倍);在Map和Reduce阶段,MALK最多可节省95.2%和87.8%的存储空间;MALK在Reduce阶段还取得了更好的负载均衡,降低了L2和LLC Cache的缺失率.
功耗是当今处理器设计领域的重要问题之一.随着多核处理器的普及,片上缓存占有了越来越多的芯片面积和功耗.提出一种带有无效缓存路访问过滤机制的低功耗高速缓存结构来降低CPU的动态功耗,具体为,通过无效缓存块的预先检查(Pre-Invalid Way Checking,PIWC)消除对无效缓存路的访问,及通过不匹配缓存路的预先检测(Pre-Mismatch Way Detecting,PMWD)消除对tag低位不匹配缓存路的访问.对实际程序的测试表明,65.2%-88.9%缓存路的无效访问可以通过以上方法被消除,约60.9%-85.6%由缓存访问带来的动态能耗从而被降低.同时,跟tag-data顺序访问方法相比,对于大多数程序,我们的方法可以获得5.1%-13.8%的节能效果提升.