论文部分内容阅读
受功耗、线延迟、芯片引脚封装成本的限制,通过大幅增加存储资源来提高系统访存性能的方式,日益受到严重挑战。但随着应用种类的丰富以及工作集规模的扩大,大量数据被映射到相同的存储结构,即有限的存储资源所承载的数据访问量不断增加。访存请求频繁争抢存储资源产生访问冲突,导致访存性能进一步恶化。为了应对这一挑战,软硬件协同的优化技术,尤其是借助操作系统来加强应用访存行为与存储器结构间的匹配,已经成为提高访存性能的重要手段之一。操作系统能基于对存储器结构的理解,利用编译器提供的静态信息,并结合性能监测单元分析运行时的动态信息,在低成本和低复杂度的约束条件下,通过减少访问冲突来提高访存性能。 本文通过调整操作系统的内存分配策略开展软硬件协同的访存性能优化技术研究。从面向的存储层次来看,内存分配策略可以影响数据在Cache中的分布,从而减少访存请求对Cache的争抢,使局部性较强的数据驻留,降低失效率。另外,内存分配策略还可以直接调整数据在主存中的分布,即将数据放置到指定的主存结构(如Rank/Bank/Row)中。通过减少访存请求对存储体和行缓冲区的争抢,提高访存的并行性和行局部性,降低主存访问开销。本文利用操作系统分析应用和设备的访存行为,并结合存储器的结构特点,通过调整内存分配策略加强应用访存行为与存储器结构之间的匹配,具有较强的灵活性和覆盖性。同时,基于操作系统来改变数据布局,无需修改上层应用和特殊硬件支持,能以透明的方式利用现有存储资源提高访存性能。本文的贡献和创新之处包括: (1)提出了一种基于I/O数据分布的自适应缓冲区管理策略。LRU替换算法在Cache设计中被广泛使用,并默认处理器所访问的数据均具有较强的局部性。这会导致局部性较差的I/O数据抢占应用程序拥有的Cache资源,产生Cache污染问题。该方法利用操作系统的软件接口感知无效I/O数据在Cache中的分布位置,并修改内存分配策略使I/O处理过程尽快重用包含无效数据的Cache块,减少I/O数据占用的Cache资源以缓解污染问题。同时,该方法还能根据系统的I/O负载自适应地控制I/O数据在Cache中的分布数量,并调整缓冲区的重用顺序,减少因写缓冲区而导致的失效,提高I/O处理过程自身的访存性能。本文将该方法应用于PKUnitySoC中的网络子系统,实验结果表明,该方法能够减少I/O处理过程与应用程序之间对Cache的争抢,使网络应用程序的性能提升5.2%~8.1%。 (2)提出了一种基于访存负载均衡的内存分配策略。设备之间所争抢的存储资源并不仅限于Cache,SoC系统中多个并行工作的设备相互争抢主存存储体,导致访存请求串行执行并降低系统带宽利用率。该方法通过操作系统对物理内存的管理,将设备所访问的数据映射到独立的存储体中,减少设备间因争抢存储体而导致的体冲突。该方法基于带宽、延迟两个参数分析设备访存行为与体冲突之间的关系,并以此来均衡各存储体的访问负载,充分利用存储体资源来提高访存并行性。实验结果表明,与基于带宽的划分方法相比,该方法在提高带宽利用率的同时能降低访存延迟,并将高清视频解码帧率提升8.4%~12.3%。 (3)提出了一种基于内存分配的多Rank数据放置策略。即使在访存并行性较低的应用场景下,同一循环体中所访问的数据因共享存储体使处理器交替访问不同行,导致争抢行缓冲区结构并增加主存访问延迟。本文通过观察数据在主存中的分布,发现传统的内存分配策略倾向分配地址连续的物理页帧,使进程的数据聚簇于单个Rank中,加剧行缓冲区冲突。该方法利用编译器和操作系统提供的信息来分析数据间的冲突开销,并将冲突开销较大的数据放置到不同的Rank,减少因聚簇导致的行缓冲区冲突。实验结果表明,同现有的BUDDY和PARBLO两种分配策略相比,采用该方法后处理器的平均性能分别提升了8.04%和3.7%。 (4)提出了一种以数据对象为中心的混合式存储体划分方法。在多道程序负载中,进程间和进程内的访存请求争抢存储体和行缓冲区,导致访存并行性和行局部性被破坏。该方法通过缺页异常将进程的执行过程切分成多个片段,基于异常地址标识处理器所访问的数据对象,并利用性能监测单元评估各个时间片段内的访存性能。然后,在进程间划分存储体的基础上,根据分析结果在进程内的数据对象间再次进行划分,同时提升进程间的访存并行性和进程内的行局部性。实验结果表明,同现有的BUDDY和BPART分配策略相比,该方法使系统的整体性能分别提高了9.1%和3.6%。