ASPLOS 2021 Paper 论文阅读笔记整理
问题
分离式内存通过提高内存利用率、减少内存不足错误或交换所需的总内存配置,来解决数据中心资源配置效率低下的问题[11]。此外,分离式内存实现了内存和计算的独立扩展,并将硬件故障和更换与单片服务器分开。
目前已经提出了软件运行时[10,15,36,57,72],使应用程序能够透明地使用远程内存。这些系统使用各种内核子系统[10,36,72]或重新设计内核[71],它们都依赖于虚拟内存机制来实现三个基本功能:
-
获取和缓存远程数据:通过页面错误检测远程访问,然后将远程页面缓存在本地DRAM缓存中。
-
跟踪脏数据:对页面进行写保护,对页面的第一次写入时出现写页面错误。
-
逐出缓存页:从本地DRAM缓存中驱逐缓存的页面,将页面标记为不存在并刷新转译后备缓冲区(TLB)。
已有的用于分离式存储器的软件运行时依赖于虚拟内存子系统,但有多个局限性:
-
使用页面错误来识别要在本地获取和缓存的数据所带来的高开销。
-
使用页面粒度来跟踪缓存数据的变化(4KB或更高)所带来的脏数据放大。在整个生命周期中,应用程序会写入每个页面的一小部分,通常在64行缓存行中只写1-8行,使用4KB页面会导致2-31倍的脏数据放大率。
本文方法
本文提出了一种全新的方法来设计分离式内存的软件运行时Kona,使用缓存一致性而不是虚拟内存,以缓存行粒度透明地跟踪应用程序的内存访问。从而消除了访问远程数据时应用程序关键路径的页面错误,将应用程序内存访问跟踪与虚拟内存页面大小解耦,实现了缓存行粒度脏数据跟踪和驱逐。
-
远程数据获取:利用缓存一致性实现,以缓存行粒度直接从远程内存获取。
-
脏数据跟踪:利用硬件原语,在FPGA记录页面写回操作。
-
缓存逐出:缓存行粒度逐出,先将逐出写入缓存行日志,通过RDMA批量写回。根据缓存行使用频率、空间局部性逐出,优先逐出非脏数据。
实验表明,与最先进的系统相比,它将平均内存访问时间提高了1.7-5倍,并将脏数据放大减少了2-10倍。
总结
针对基于缓存一致性的远程内存使用,避免页面粒度带来的页面错误开销、写放大。本文提出Kona,基于缓存一致性,在缓存行粒度实现远程数据获取、脏数据跟踪、缓存逐出(根据缓存行使用频率、空间局部性逐出,优先逐出非脏数据)。