DAFS:一种新型高性能网络文件系统

这种新兴的文件访问协议显著增强了网络上的数据流,使数据中心的生活更加轻松。

Steve Kleiman,Network Appliance

直接访问文件系统(DAFS)是一种远程文件访问协议,旨在利用新的高吞吐量、低延迟网络技术。

新协议的动机来自过去几年中出现的三个技术趋势

网络存储

如今,存储可以与连接到存储系统的应用程序、操作系统和机器架构独立地共享、管理和扩展。应用程序可以使用四种基本方法访问分离的存储。

第一种访问方法使用原始块。这通常具有高性能,但应用程序必须提供任何数据管理功能,必须针对特定的存储配置进行调整以获得最佳性能,并且如果数据要共享,则必须提供应用程序间的协调。

第二种访问方法是将部分存储空间预留给特定的节点,然后该节点通过其操作系统支持的文件系统访问该存储空间。这通常提供良好的性能,但数据必须从每个节点进行管理,并且不支持直接数据共享。

第三种方法是在每个节点上使用集群文件系统,例如全局文件系统(GFS)。[参见 Steve Soltis、Grant Erickson、Ken Preslan、Matthew O'Keefe 和 Thomas Ruwart 合著的 “全局文件系统:共享磁盘存储的文件系统”,IEEE Transactions on Parallel and Distributed Systems,1997 年 10 月。]

这允许数据共享,但文件系统在每个节点上必须相同(或至少兼容);任何故障节点都可能损坏整个文件系统。

前三种方法使用块协议(如 SCSI)与外部存储通信。存储系统本身对存储的数据知之甚少,因此在数据管理、共享或保护方面无法提供太多帮助。

最后一种方法使用文件访问协议,例如网络文件系统(NFS)、通用互联网文件系统(CIFS)或 Web 分布式创作和版本控制(WebDAV)。这带来了以下好处

使用典型软件网络堆栈的文件访问协议往往比本地文件系统具有更高的每个操作 CPU 开销。在许多不需要高吞吐量的情况下,这不是问题。然而,在高吞吐量配置中,开销可能非常显着。

DAFS 的第二个动机趋势是互联网的快速增长。这种增长要求服务提供商开发对故障具有弹性的架构,并且可以在计算能力和存储容量方面快速扩展。由此产生的设计,称为本地文件共享架构,将服务负载分散到一组具有共享文件存储的应用服务器上,如图 1 所示。应用服务器可以是大型机器,也可以是相对较小的机器。最近的一个趋势是使用刀片服务器,它将一组服务器集成到一个热插拔板上,机箱包含一个交换结构。这种架构具有弹性,因为如果一个应用服务器发生故障,另一个可以接替它的位置。该架构也是可扩展的,因为只需添加更多应用服务器即可获得额外的计算资源。典型的应用程序包括电子邮件、新闻、Web 服务器、地理信息系统和集群数据库。

图 1

标准文件访问协议允许数据轻松共享,即使在异构系统之间也是如此。无论进程是在单台机器上还是在分布式系统上共享文件数据,文件访问范例都是相同的。这为所有应用服务器提供了对公共数据池的访问权限,以实现负载均衡。它还允许另一个应用服务器接管先前由发生故障的应用服务器访问的数据。

网络技术趋势

影响 DAFS 的第三个趋势是高速网络的出现,例如 10 千兆比特/秒 (Gbps) 以太网和 InfiniBand (IB)。如此高的速度可能会给现有网络堆栈带来许多压力。

对于基于以太网和 TCP/IP 的技术,首要问题是数据包处理速率。例如,全双工 10-Gbps 以太网处理的数据包速率可能高达每秒 100 万个数据包。这可能会占用大部分甚至全部可用的 CPU 周期。以太网数据包处理问题可以通过 TCP/IP 卸载引擎 (TOE) 来缓解。这些专用芯片可以处理 TCP/IP 数据包,并将它们组装成所需速率的可靠串行字节流。TOE 消除了与标头处理、数据包分片和重组、校验和计算和检查以及流多路复用和解复用相关的开销。TOE 类似于现代 SCSI 和光纤通道主机适配器,它们使用较小的链路级传输单元为固定格式 SCSI 命令执行类似的功能。在 InfiniBand 主机通道适配器 (HCA) 中,这些功能也内置在其中。

高速引起的第二个问题是接收数据的放置。典型的网络堆栈将传入的数据包放入通用数据包内存中,然后将与用户相关的数据部分复制到操作系统 (OS) 缓冲区或应用程序缓冲区(或两者兼有)。如图 2 所示,TOE 可以剥离底层 TCP/IP 标头,并将 TCP 有效负载分散或聚集到单独的缓冲区中或从中分散或聚集。然而,这仍然使更高级别的协议标头嵌入在数据中。操作系统或应用程序必须解释这些标头,然后才能将嵌入式应用程序数据复制到应用程序缓冲区中。

图 2

在高吞吐量下,数据复制的影响可能非常显着。例如,如果应用程序尝试以 10-Gbps 链路的完整吞吐量(大约为每秒 1 千兆字节 (GBps))接收数据,则会在系统内存总线上施加 3-GBps 的负载(1 GBps 用于传入链路数据,加上 1 GBps 用于从数据包缓冲区读取数据,再加上 1 GBps 用于将数据写入应用程序缓冲区)。这几乎是当前大容量服务器上可用的大部分内存带宽。

当然,可以增强 TOE 以解释更高级别的协议。这已经针对特定的且相对简单的协议(例如 Internet SCSI (iSCSI))完成,其中命令数据被单独放置到缓冲区中。然而,存在各种可能比 iSCSI 复杂得多的更高级别协议,例如 NFS、CIFS、HTTP 和特定于应用程序的协议,每种协议都可能随时间而变化。这使得难以拥有一个可以充分解释所有这些标头以将应用程序数据放置在单独缓冲区中的 TOE。或者,可以修改应用程序以告知 TOE 在解释标头后将数据放置在何处。不幸的是,这会产生额外的应用程序与 TOE 交互和/或每个处理的命令中断的副作用。除非使用较大的传输大小,否则这种额外的 CPU 负载可能会淹没任何数据放置增益。

系统区域网络的最新发展产生了一种新的网络范例:直接访问传输 (DAT)。支持直接访问的网络示例包括光纤通道上的虚拟接口 (FC-VI)、InfiniBand [http://www.ibta.org/] 以及 Internet 的远程直接数据放置 (RDDP) 协议 [http://www.ietf.org/html.charters/rddp-charter.htmlhttp://www.rdmaconsortium.org/]。

直接访问传输支持两种超越传统网络架构和 TOE 的基本功能

DAFS 协议

远程文件访问协议已广泛使用超过 15 年,用于工作组数据共享。前面提到的优势越来越多地使其对数据中心也具有吸引力,在数据库和本地文件共享应用程序中也是如此。

DAFS 旨在利用直接访问传输来实现远程文件访问,其 CPU 开销与通过块访问实现的开销相当或更好,同时保留共享文件访问范例的所有优势。

DAFS 还专门为数据库和本地文件共享架构等高性能应用程序扩展了文件访问语义。DAFS 1 版协议于 2001 年 9 月由 DAFS 协作组织发布,超过 85 家公司参与其中 [http://www.dafscollaborative.org/]。

DAFS 协议基于 NFS 版本 4 (NFSv4),NFSv4 是互联网工程任务组 (IETF) 最近批准的最新版本。[参见 Brian Pawlowski、Spencer Shepler、Carl Beame、Brent Callaghan、Michael Eisler、David Noveck、David Robinson、Robert Thurlow 合著的 “NFS 版本 4 协议”,第二届国际系统管理和网络会议 (SANE2000) 会议记录,第 94 页,2000 年。] 除了正常的网络文件访问之外,NFSv4 还引入了几个独特的优势

基本的 DAFS 操作语义与 NFSv4 类似。然而,底层的开放网络计算远程过程调用 (ONC RPC) 传输机制经过重新设计,可以充分利用直接访问传输。

直接访问传输源自研究和高性能计算社区使用的内存到内存互连网络。标准化直接访问传输语义的首次尝试是虚拟接口架构。这项工作已被 DAT 协作组织取代,该组织开发了一个用于 DAT 语义的开放 API,称为直接访问编程库 (DAPL) [http://www.datcollaborative.org/]。DAT 协作组织正在与开放组互连软件联盟合作,以增强 API。

所有这些直接访问标准都定义了一种面向连接的传输机制,该机制具有三个基本操作:发送、RDMA 写入和 RDMA 读取。连接的每一端都有一个请求队列,其中排队了包含操作指令、参数和缓冲区的命令。如图 3 所示,每个请求队列在引用 HCA 的应用程序或内核的内存空间中都有三个内部队列。发送队列是排队包含所需 DAT 操作及其引用的任何缓冲区的命令的位置。一旦新命令排队,硬件就会收到通知,通常是通过存储到 HCA 上的内存映射寄存器来实现。HCA 通过在事件队列中排队状态指示来发出操作完成的信号。可以批量处理完成通知以减少中断。

图 3

发送操作将与启动节点上的命令关联的缓冲区内容传输到目标节点。接收节点将数据放置在接收队列中的下一个可用缓冲区中。目标节点必须在接收队列中排队新缓冲区,然后另一个节点才能向其发出发送操作。这类似于典型的数据包发送和接收,只是缓冲区大小不受物理介质中任何底层数据包大小的约束。然而,发起者和目标必须就最大大小达成一致,并且发送者必须注意不要启动超过目标可以接收的发送操作。

RDMA 操作是不同的。发起节点指定目标节点上缓冲区的确切位置,并且可以将数据传输到(RDMA 写入)或从(RDMA 读取)该缓冲区传输到与命令关联的本地缓冲区。RDMA 操作使用远程地址,该远程地址由远程内存区域上下文(标识目标节点中特定内存区域)以及该区域内的偏移量和长度组成。目标节点必须显式导出内存区域。对非导出区域的 RDMA 操作将失败。为了增加保护,上下文标识符通常包含一个保护密钥,该密钥必须与 RDMA 操作发生时与该区域关联的密钥匹配。目标必须在发起者可以使用上下文之前通知发起者可用的上下文。这通常通过发送操作来完成。

内存区域通常必须锁定以防止在导出时进行分页。DAPL API 通过内存注册过程提供此功能。内存注册还为通道适配器提供正确的虚拟到物理地址映射,以便命令可以使用进程地址引用缓冲区。内存注册可能很昂贵,因此最佳方案是应用程序预先注册适当的缓冲区。然后,应用程序可以动态控制对每个请求的每个缓冲区的外部访问权限。

DAT 语义的使用

与 NFS 一样,DAFS 是一种请求-响应协议。通常,使用发送操作将请求发送到服务器,并将回复发送回客户端。服务器将仅允许有限数量的未完成操作,这通过信用系统进行管理。这限制了服务器接收队列中的缓冲区数量。客户端只需为其发送的每个请求向其接收队列添加一个缓冲区。

DAFS 使用 DAT 语义将数据直接放置在其在客户端和文件服务器中的位置。例如,在 DAFS 文件读取操作中,请求包括客户端缓冲区的地址,服务器应通过 RDMA 写入将数据放置在该缓冲区中,如图 4 所示。这个简单的协议将控制信息放置在接收队列缓冲区中,同时让应用程序所需的数据直接进入正确的缓冲区。

图 4

文件写入操作更为复杂。客户端可以选择在请求中传递要写入的数据(这适用于少量数据),也可以在请求中发送缓冲区的地址,并允许服务器使用 RDMA 读取将数据检索到正确的服务器缓冲区中。

DAFS 有几个语义扩展,超出了 NFSv4 和其他远程文件访问协议。一般来说,这些增强功能旨在帮助支持高性能 I/O,尤其是在数据库和集群应用程序中。让我们回顾一下其中一些更重要的功能。

增强的文件锁定。 本地或远程文件系统锁定的典型语义会使从故障中恢复变得困难。假设单台计算机上的应用程序使用文件锁定来协调两个进程之间的文件访问,并且其中一个进程获取锁并开始修改文件。如果在此时发生电源故障,系统将重新启动,并且其中一个进程将获取锁。但是,数据可能已损坏,因为在之前的锁被破坏时,文件的完整性没有重建。应用程序通常必须创建辅助“锁定”文件(一个相对缓慢的过程)来检测此类故障。

DAFS 通过在协议中提供两种新的锁定形式来扩展锁定语义。第一种形式是持久锁,它通知锁请求者之前的锁已损坏。然后,请求者可以运行一个过程来重建文件完整性。第二种形式是自动恢复锁,它将文件恢复到锁被破坏之前的状态。

批量 I/O。 高性能应用程序同时处理大量 I/O 事件。DAFS 在协议中提供了一种异步批量 I/O 机制,该机制允许应用程序同时启动许多请求。该机制允许应用程序指定服务器是在所有还是部分 I/O 完成时返回通知。这使应用程序可以对其 I/O 管道进行细粒度控制。这种机制特别适合数据库,数据库通常使用异步缓冲区写入器进程在事务记录后写出数据库记录缓冲区。

缓存提示。 DAFS 提供协议操作,允许应用程序控制存储缓存层次结构。应用程序可以指定很快将需要特定范围的文件数据,并且应将其预取到服务器的缓存中,或者指定将不需要其他范围,以便服务器可以从其缓存中清除它们。

集群围栏。 集群应用程序通常使用集群管理器来决定哪些节点运行良好并且应被视为集群成员,以及哪些节点发生故障或以其他方式不合作并且必须从集群成员资格中移除。必须阻止行为不端的节点访问任何资源(例如文件服务器),这些资源与集群成员共享,以防止它们损坏应用程序。这称为围栏。DAFS 通过在每个服务器资源上都有客户端访问控制列表来支持围栏。集群管理器可以通过操作这些列表来控制有权访问共享文件服务器的节点。

DAFS 实现

DAFS 可以通过多种方式实现。图 5 显示了两种最重要的实现方式。第一个称为 kDAFS,是一个加载在操作系统中的文件系统。图中显示的两种实现都使用 DAPL 来为 DAT 语义提供 API。kDAFS 实现对应用程序是透明的,但它会通过正常的 OS 控制和数据路径,并且无法利用 OS 绕过。此外,除非 OS API 也支持此类功能,否则应用程序无法利用增强的语义。这种实现的性能应与基于块存储的本地文件系统类似。

图 5

第二种实现风格称为 uDAFS,是一个用户库。DAFS 协作组织还定义了一个 DAFS API,以为此类库提供通用接口 [参见 直接访问文件系统:应用程序编程接口,DAFS 协作组织,2001 年 10 月,http://www.dafscollaborative.org/]。使用 uDAFS,应用程序可以使用 OS 绕过和所有扩展语义。潜在地,性能可能比本地文件系统更好。缺点是应用程序必须自行适应新的 API。幸运的是,许多高性能应用程序都有一个内部 OS 适配接口,它可以提供一种机制来完成适配,而无需更改应用程序的大部分内容。

性能测量具有多种维度,我们无法在此处充分涵盖。几篇已发表的论文更深入地介绍了 DAFS 和 RDMA 文件访问协议的性能;有些论文还将 RDMA 与替代技术进行了比较。[有关更多信息,请参见以下来源:Linux 上 VIA 到 NFS 的适配,富士通有限公司,http://www.pst.fujitsu.com/english/nfs/使用 Clan 满足 DAFS/VI 内核实现的 DAFS 性能,富士通有限公司,http://www.pst.fujitsu.com/english/dafsdemo/“直接访问文件系统的设计和实现”,Kostas Magoutis,BSDCon 2002 会议记录;“直接访问文件系统的结构和性能”,Kostas Magoutis、Salimah Addetia、Alexandra Fedorova、Margo Seltzer、Jeff Chase、Richard Kisley、Andrew Gallatin、Rajiv Wickremisinghe 和 Eran Gabber,Usenix 技术会议,第 1-14 页,2002 年 6 月;“充分利用直接访问网络连接存储”,Kostas Magoutis、Salimah Addetia、Alexandra Fedorova 和 Margo Seltzer,第二届文件和存储技术会议 (FAST) 会议记录,Usenix Association,2003 年 3 月;“直接访问文件系统”,Matt DeBergalis、Peter Corbett、Steve Kleiman、Arthur Lent、Dave Noveck、Tom Talpey 和 Mark Wittle,第二届文件和存储技术会议 (FAST) 会议记录,Usenix Association,2003 年 3 月。]

以下结果快速表明 DAFS 实现了降低共享文件访问开销的目标。

访问类型 应用服务器
(CPU 微秒/操作)
使用卷管理器 (VxVM) 的原始磁盘访问 113

本地文件系统 (ufs)

89
原始磁盘访问 76
用户级 DAFS 客户端(使用 VI/TCP HCA) 34

这显示了使用类似在线事务处理的工作负载和异步 I/O 进行 4-KB I/O 的客户端 CPU 开销(以微秒为单位)。DAFS 结果使用了 Emulex GN9000 VI/TCP HCA,它通过 1-Gbps 以太网和 TCP/IP 实现 RDMA。其他结果使用了直接连接的磁盘。结果表明,用户 I/O 的成本几乎只有磁盘原始(即块)访问成本的一半,并且几乎只有本地文件访问成本的三分之一。

DAFS 状态

DAFS 产品已使用 Emulex VI/TCP 主机通道适配器发货一年多。未来一年的工作重点是利用最近可用的 InfiniBand HCA。DAT 协作组织拥有 DAPL 的开源实现,这些实现正在移植到新的 HCA。开源 Linux kDAFS 和 uDAFS 工作正在进行中。

过去一年,RDMA 社区看到了大量的活动。RDMA 联盟 (RDMAC) 在约 60 家公司的参与下,定义了基于 TCP/IP 的 RDMA 协议。IETF 已成立一个 RDDP 工作组,其中包括 RDMA 语义。RDMA 联盟已将其工作提交给 IETF 进行审查。

IETF NFS 工作组最近完成了其在 NFSv4 上的工作,现在正在为 NFS 的下一个版本定义章程。对 RDMA 和类似 DAFS 的扩展语义的支持是新章程的候选要求之一。此外,Sun Microsystems 正在开发一个使用 RDMA 的开放网络计算远程过程调用 (ONC RPC) 版本。它将允许在当前版本的 NFS 中支持零拷贝文件访问。

新的高速网络具有与现代存储网络相等或更好的传输带宽。高速网络支持架构(例如本地文件共享),这些架构使用卷服务器和交换组件来实现以前仅在昂贵的高端服务器中看到的性能和弹性。传统的网络协议堆栈在高吞吐量下比存储传输具有更高的 CPU 开销。DAFS 协议使用 TOE 和 DAT 语义将这些开销降低到与标准块存储传输相同甚至更好的水平,同时保留文件访问协议在虚拟化、数据共享和保护方面的优势。诸如 DAFS 之类的协议还允许更直接和更高级别的应用程序到存储的对话,这对于这些数据速率下的 I/O 效率至关重要。

以下互联网资源将提供更多信息

http://www.dafscollaborative.org/ DAFS 协作组织发布 DAFS 协议规范和 API。该站点还包含 DAFS 的开源软件开发工具包以及指向其他参考实现的链接。

http://www.datcollaborative.org/ DAT 协作组织发布了一个 API,用于访问应用程序和 OS 内核环境(又名 uDAPL 和 kDAPL)的 DAT 语义。该站点包含指向 DAPL 开源参考实现的链接。

http://www.opengroup.org/icsc/ 开放组的互连软件联盟有几个与 DAT 互连相关的工作组。互连传输工作组正在指定与 DAT 协作组织的 DAPL 兼容的 DAT 语义 API。套接字 API 扩展工作组正在指定 Unix 套接字 API 的扩展,以支持使用底层 RDMA、DDP 或其他机制的零拷贝。结构管理 API 工作组正在指定最初针对 InfiniBand 的结构管理 API。

http://www.nfsv4.org/ 该站点是跟踪 NFS 社区最新发展的好资源。它包含指向规范以及互操作性论坛的链接。

http://www.rdmaconsortium.org/ RDMA 联盟发布 RDMA 和 DDP 协议规范。它还发布了一个协议,用于标记字节流协议(如 TCP)上的上层数据单元边界。RDMA 和 DDP 协议使用它,以便接收者可以有效地处理其标头。

http://www.ietf.org/html.charters/rddp-charter.html 该站点包含 IETF 的 RDDP 工作组文档,包括提交和章程。

http://www.infinibandta.org/home InfiniBand 贸易协会发布了 InfiniBand 规范。

http://www.ncits.org/ T11 是国际信息技术标准委员会 (INCITS) 内的技术委员会,负责设备级接口,例如光纤通道。它发布了用于光纤通道上 RDMA 的 FC-VI 规范。

acmqueue

最初发表于 Queue 第 1 卷,第 4 期
数字图书馆 中评论本文





更多相关文章

Pat Helland - 关注您的状态以保持您的心态
应用程序在进入分布式和可扩展的世界时经历了有趣的演变。同样,存储及其近亲数据库也与应用程序并肩发展。许多时候,存储和应用程序的语义、性能和故障模型都在微妙地跳舞,以支持不断变化的业务需求和环境挑战。在组合中添加规模确实激起了波澜。本文着眼于其中的一些问题及其对系统的影响。


Alex Petrov - 现代存储系统背后的算法
本文仔细研究了现代数据库中使用的两种存储系统设计方法(读优化 B 树和写优化 LSM(日志结构合并)树),并描述了它们的使用案例和权衡。


Mihir Nanavati, Malte Schwarzkopf, Jake Wires, Andrew Warfield - 非易失性存储
对于大多数执业计算机科学家的整个职业生涯而言,一个基本观察结果始终成立:CPU 的性能明显高于 I/O 设备,价格也更昂贵。CPU 可以极高的速率处理数据,同时为多个 I/O 设备提供服务,这一事实对各种规模系统的硬件和软件设计产生了广泛的影响,几乎和我们构建它们的时间一样长。


Thanumalayan Sankaranarayana Pillai, Vijay Chidambaram, Ramnatthan Alagappan, Samer Al-Kiswany, Andrea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau - 崩溃一致性
数据的读取和写入是任何冯·诺依曼计算机最基本的方面之一,但却出奇地微妙且充满细微差别。例如,考虑在具有多个处理器的系统中访问共享内存。虽然一种称为强一致性的简单直观的方法最容易让程序员理解,但许多较弱的模型已被广泛使用(例如,x86 总存储排序);这些方法提高了系统性能,但代价是使对系统行为的推理更加复杂且容易出错。





© 保留所有权利。

© . All rights reserved.