一种名为Leap的新系统在USENIX ATC‘20上获得了最佳论文奖,因为它在数据中心网络上产生了与本地机器相当的远程内存访问速度。
在大型计算机集群中的应用程序之间共享服务器内存仍然是云和高性能计算社区的主要目标。通过快速联网技术,整个中心服务器机架上可用的内存可以像管理单一资源一样由调度员进行管理,从而大大提高了速度和性能。
密歇根大学(University Of Michigan)研究人员开发的一项名为Infiniswap的服务使这项名为“内存解聚”的技术在2017年成为可能,但它仍然受到几个延迟开销的影响,这使得现实世界不太可能采用这项技术。现在,同一实验室的一个名为Leap的新系统通过将一种称为预取的技术应用于远程内存环境,改进了这个解决方案和其他分解解决方案。Leap在2020年USENIX年度技术大会上荣获最佳论文奖。
根据Leap合著者Hasan Al Maruf的说法,实际内存分解面临的主要问题是本地和远程内存访问之间的速度差异。
“当你在本地访问内存时,”密歇根大学计算机科学与工程部的博士生Maruf说,“内存运行在纳秒级别。但当你进入网络时,一切都是在微秒级别上运行的。“。
从内存远程加载一页数据平均需要4或5微秒(一页是处理器通常一次从内存获取的最小数据单位)。在最坏的情况下,可能需要长达40-50微秒的时间。
这听起来可能不是很多,但从纳秒到微秒的数量级延迟代表着性能的重大下降-与将RAM与固态驱动器进行比较,或将固态驱动器与硬盘驱动器进行比较大致相同。折衷太大了,现有的方法证明对远程内存访问是有利的。
Maruf和合著者Mosharaf Chowdhury教授写道:“我们的测量显示,在像Infiniswap这样的最先进的内存分解系统中,平均4KB的远程页面访问需要近40微秒。”“如此高的访问延迟会显著影响性能,因为内存密集型应用程序最多可以容忍单个微秒的延迟。”
操作系统带来的管理费用进一步加剧了这个问题。这些远程设置中的操作系统用来访问内存中地址的数据路径最初是为与本地磁盘交互而设计的,本地磁盘在更慢的毫秒级别运行。这些数据路径与旨在隐藏磁盘访问时间的功能捆绑在一起,这些功能对数据中心网络来说是不现实的,最终会使一切陷入困境。
Maruf和Chowdhury在Leap上的目标是通过两个技巧“隐藏”这些延迟来源:尽可能地预取页面,以及使用更高效的数据路径,允许他们丢弃操作系统不相关的磁盘访问功能。
他们使用预取器的目标是减少在程序所需的关键路径中调用远程内存的次数,使运行程序的本地机器上的有用数据近在咫尺。现在,这种技术在单机设置中很常见,其中最常见的性能瓶颈是调用硬盘。在那里,系统试图聪明地识别可能很快有用的序列中的额外指令,并将它们放入处理器的更快的高速缓存中。
在远程内存设置中模拟此技术变得很困难,因为相关数据可能不会按顺序存储-事实上,它可能会随机存储在数据中心的所有可用内存中。现有的解决此问题的尝试确定如何实时访问内存的模式,或者跟踪程序在整个虚拟内存地址空间上的内存访问足迹。
取而代之的是,作者只对程序内存访问中的模式进行了近似。这使Leap能够识别预取额外数据的最明显机会,而不必占用更精确的资源-只有程序重复访问内存中相同地址的情况,即所谓的多数访问模式,才会被识别。
结合使用为程序访问的远程内存中的每个地址记录的简化数据路径,预取器允许几乎所有应用程序像使用本地内存一样运行。
Maruf说:“这种预取解决方案有助于隐藏网络延迟,数据路径确保操作系统没有开销。”
使用Leap修复系统的数据路径在95%的任务中提供了最差1微秒的延迟,平均为5或6微秒。将预取程序包括在他们的测试中,Leap为85%的任务提供了亚微秒延迟,或以纳秒为单位的延迟。
从长远来看,这些速度极大地推动了数据中心内存分解的未来。在短期内,Leap可以在从远程内存以外的存储设备(如传统磁盘和固态驱动器)读取页面时提供延迟优势。
“让一些东西存在和让东西变得实用是两码事,”他说。“如果我们不越过这个性能延迟开销的界限,我们拥有的任何系统都不会投入使用。”
但Maruf表示,它的实际采用仍然存在障碍。乔杜里的实验室正在解决未来工作中该领域面临的安全和弹性挑战,这本身可能会给系统带来额外的延迟。
“我们正在许多不同的方向进行探索,”Maruf说,“如果我们能全部完成,我们希望我们能在公共云设置中让事情变得更实用、更有用。”
LEAP是在远程举行的2020年USENIX年度技术会议上发表的题为“用LEAP有效预取远程内存”的论文中提出的。在USENIX ATC网站上观看Maruf关于这项工作的虚拟演示文稿。