存储 频道

ReFlex:让远程闪存访问拥有本地访问的性能

  【IT168 资讯】早在数年前,使用闪存的固态硬盘(SSD)很容易就能与价值10万美元的存储阵列的IOPS性能相当,而价格只是其一小部分。此外,SSD不需要存储区域网络(SAN),因为每个服务器都可以有自己的内部PCIe SSD,其延迟之低是SAN阵列难以企及的。

  在那时,即使一个400GB的SSD成本达到几千美元,企业还是很乐意使用的。但是,随着企业和云供应商采用低成本、无共享架构、横向扩展基础设施——谷歌文件系统和Hadoop为其中的典型代表——服务器SSD的不可用滞留性能和成本已经成为一个主要问题。

  远程访问NVMe闪存可以实现灵活的伸缩性,以及数据中心内闪存容量和IOPS的高利用率。然而,现有的远程闪存访问系统,要么引入了显著的性能开销,要么无法隔离共享每个闪存设备的多个远程客户端。为此,斯坦福大学的研究员Ana Klimovic、Heiner Litz研发了ReFlex,一种远程闪存访问软件系统,它为远程内存访问提供了几乎与本地闪存访问相同的性能。ReFlex使用数据平面(dataplane)内核将网络和存储处理紧密集成,以在低资源需求下实现低延迟和高吞吐量。具体地说,ReFlex可以在TCP/IP网络上为每个核心提供850K IOPS,延迟只在直接本地闪存访问之上增加21μs。

ReFlex:让远程闪存访问拥有本地访问的性能

  ReFlex的性能表现主要来源于以下几个关键因素:

  ·NIC和SSD的硬件虚拟化功能可以直接在硬件I/O队列上运行,无需复制。

  ·与基于库的I/O调用相比,数据平面内核极大地减少了I/O开销。

  ·一种新的服务质量(QoS)调度器,可以让多个租户公平共享远程设备,同时最小化长尾延迟。

  ·I/O在可能的情况下被批处理。

  ·基于轮询的执行消除了基于中断的I/O的不确定性和开销。

ReFlex:让远程闪存访问拥有本地访问的性能

  实测结果

  ReFlex服务器的空负载往返延迟只比直接的、用户空间通过NVMe队列访问本地闪存的时间高21μs。使用ReFlex的两核服务器可以完全使一个100万IOP SSD饱和,与本地访问相比,此延迟可忽略。相比之下,使用libaio和libevent的Linux基线,只获得75K IOPS /核心,由于计算强度更高,延迟也更高,需要多用10倍左右的CPU核,才能实现和ReFlex一样的吞吐量。

  此外,测试发现ReFlex可以支持数千个远程租户,这是一个重要因素,因为一个云数据中心里可能有10万台或更多服务器。

ReFlex:让远程闪存访问拥有本地访问的性能

  未来存储的可能

  在过去的十多年里,闪存一直是数据中心的“常客”,但是系统架构师们仍然在研究如何优化它在实际中的应用。当然,十年前ReFlex系统的目标用户——拥有大规模横向扩展架构的互联网服务供应商,并不多见。

  但是,一旦ReFlex——或者类似的工具——被内置到系统内核中,我们中的许多人,即使硬件规模不大,也能够利用共享的SSD。想象一下这种性能提升,假设我们有一个8节点视频渲染农场,装备了两个高性能的PCIe/NVMe SSD和一个10Gb的以太网结构。

  ReFlex类型的功能变得更加重要,因为新的、更高性能和更昂贵的非易失性存储技术(如英特尔的3D XPoint)得到了更广泛的应用。共享远程ReFlex的经济效益将比现在更大。

  ReFlex是一个开源软件,GitHub地址为https://github.com/stanford-mast/reflex

0
相关文章