【论文】DAOS: 一种面向SCM的可扩展高性能存储栈
摘要
分布式异步对象存储(Distributed Asynchronous Object Storage,DAOS)是一个开源的、可扩展的存储系统,其核心设计理念在于支持用户空间中的存储级内存(Storage Class Memory,SCM)和NVMe存储。其先进的存储API具有原生支持结构化、半结构化和非结构化数据模型的能力,从而突破了传统基于POSIX的并行文件系统的局限。对于高性能计算(HPC)工作负载,DAOS不仅提供了直接的MPI-IO和HDF5支持,还兼容传统应用程序的POSIX访问方式。本文介绍了DAOS存储引擎的架构及其高级应用程序接口,并展示了其在IO500基准测试中的初步性能结果。
Source: Zhen Liang, Johann Lombardi, Mohamad Chaarawi, Michael Hennecke; DAOS: A Scale-Out High Performance Storage Stack for Storage Class Memory; 03 June 2020
1. 引言
随着商业、政府和学术界对数据密集型应用的需求日益增长,现有的I/O模型已难以满足需求。现代I/O工作负载中,元数据占比不断攀升,数据也呈现出不对齐和碎片化的特点。传统存储栈在处理这些工作负载时性能低下,不仅增加了许多延迟,还引入了对齐约束。如今,廉价大容量持久性内存与高速网络的结合,为重新定义存储范式、有效支持现代I/O工作负载提供了难得的机会。
这场技术革命需要对整个存储栈进行深刻的反思与重构。为了充分发挥新技术的全部潜能,新堆栈必须从根本上采用字节粒度的共享无状态接口。同时,它还需支持大规模分布式存储,在故障常态化的环境中保持对网络的低延迟和高带宽访问。
DAOS是一个完整的I/O架构,它将分布在网络中的SCM和NVMe存储整合到一个全局可访问的对象地址空间中,确保一致性、可用性和容错性,同时不牺牲性能。
本文第2节详细阐述了SCM和NVMe存储对传统I/O堆栈带来的挑战。第3节则介绍了DAOS的架构,并深入解析了它是如何与新存储技术完美融合的。第4节概述了DAOS的数据模型和I/O接口,而第5节则展示了DAOS在IO500基准测试中的首个性能表现。
2. 使用传统并行文件系统的限制
传统的并行文件系统建立在块设备之上,它们通过操作系统内核的块I/O接口提交I/O操作,这一接口是针对机械硬盘优化设计的。这包括利用I/O调度程序优化磁盘搜索,通过聚合和合并写来适应不同工作负载的特性,并发送大型流数据至机械硬盘以实现高带宽。然而,随着新存储技术如3D-XPoint的出现,这些技术的延迟远低于传统存储,原先为机械硬盘设计的软件层对新存储技术而言,反而成了额外的负担。
此外,为了减少数据在不同层之间的复制,大多数并行文件系统都选择利用RDMA能力的网络作为快速传输层。例如,数据可以直接从客户端的页面缓存传输到服务器的缓冲缓存,然后持久化到块设备。但由于传统存储栈中缺乏统一的轮询或进度机制,处理块I/O和网络事件的I/O请求仍严重依赖中断和多线程来处理并发的RPC。因此,I/O处理期间的频繁上下文切换,会极大地削弱低延迟网络的性能优势。
在传统并行文件系统的多层复杂堆栈中,包括缓存和分布式锁定等机制,尽管用户可以使用3D NAND、3D-XPoint存储和高速网络来提升性能,但软件堆栈所带来的额外开销也会让他们失去这些先进技术的大部分优势。
3. DAOS:为SCM和NVMe存储构建的存储栈
分布式异步对象存储(DAOS)是一个开源的软件定义对象存储系统,专为大规模分布式非易失性内存(NVM)设计。它提供了键值存储接口,同时支持事务性非阻塞I/O、版本化数据模型以及全局快照等先进功能。
本节将详细阐述DAOS的架构,深入探讨其核心组件,并解析为何DAOS能够成为一个既具备高性能又极具韧性的存储系统。
3.1 DAOS系统架构
DAOS是一种利用下一代NVM技术(如SCM和NVMe)的存储系统。它摒弃了所有Linux内核I/O,完全在用户空间端到端运行,整个I/O过程中不执行任何系统调用。
图1. DAOS系统架构
如图1所示,DAOS的构建主要基于三个关键部分。首先是持久性内存及其开发工具包(Persistent Memory Development Toolkit,PMDK)。DAOS利用它存储所有内部元数据、应用程序/中间件的关键索引以及延迟敏感的小I/O操作。在系统启动时,DAOS通过系统调用初始化对持久性内存的访问,例如,将支持DAX(Direct-Access)的文件系统的持久性内存文件映射到虚拟内存地址空间。在系统运行时,DAOS则可以直接通过内存指令(如加载和存储)在用户空间访问持久性内存,无需经过复杂的存储栈。
然而,持久性内存虽然速度快,但容量有限且成本效益不高,因此仅依赖持久性内存来构建大容量存储层几乎不可能。为此,DAOS引入了第二个关键部分,即NVMe固态硬盘和存储性能开发工具包(Storage Performance
Development Kit,SPDK)软件。它们共同支持大I/O操作以及延迟稍高的小I/O操作。SPDK提供了一个可链接到存储服务器中的C库,该库为NVMe固态硬盘提供直接的零拷贝数据传输。DAOS服务能够通过SPDK队列异步地、完全从用户空间提交多个I/O请求,并在SPDK I/O完成时,在持久性内存中为存储在固态硬盘上的数据创建索引。
第三个关键部分是Libfabric和高性能网络底层(如Omni-Path Architecture、InfiniBand或标准TCP网络)。Libfabric是一个定义了OFI(Open Fabric Interface)用户空间API的库,为应用程序或存储服务提供网络通信服务。DAOS的传输层建立在Mercury项目之上,利用了一个libfabric/OFI插件。它提供了基于回调的异步API用于消息和数据传输,并提供了无线程轮询API以监控网络活动进展。DAOS服务线程可以从Mercury/libfabric主动轮询网络事件,作为异步网络操作的通知,从而避免了因上下文切换而产生的性能损失。
总的来说,DAOS建立在最新的存储和网络技术之上,并完全在用户空间操作,摒弃了所有Linux内核代码。由于它专为SCM和NVMe设计,因此不支持基于磁盘的存储。对于基于磁盘的存储需求,传统存储系统(如Lustre、Spectrum Scale或CephFS)仍然适用,并可以在DAOS和这些外部文件系统之间灵活移动数据。
3.2 DAOS I/O服务
从堆栈层面来说,DAOS是一个分布式存储系统,它采用了客户端/服务器模型。DAOS客户端是一个与应用程序紧密集成的库,它直接在应用程序的地址空间中运行。这个库提供的数据模型能够直接兼容多种传统数据格式和中间件库,这些将在第4节中详细介绍。
DAOS I/O服务器是一个多租户守护程序,它可以直接部署在数据存储节点或容器中。这个服务器能够直接访问持久性内存和NVMe固态硬盘,正如前文所述。它会把元数据和小型I/O操作存储在持久性内存中,而将大型I/O操作存储在NVMe固态硬盘中。值得一提的是,DAOS服务器并不依赖pthread进行I/O的并发处理。相反,它采用了一种创新的方式:为每个传入的I/O请求创建一个Argobots用户级线程(ULT)。Argobots ULT是一个轻量级的执行单元,它与执行流(xstream)紧密关联,而该执行流则映射到DAOS服务的pthread。这意味着,任何ULT的传统POSIX I/O函数调用、pthread锁定或同步消息等待调用,都可能影响到执行流上所有ULT的进度。
然而,由于DAOS所使用的所有构建块都提供了非阻塞的用户空间接口,因此DAOS I/O ULT永远不会因系统调用而被阻塞。相反,如果I/O或网络请求尚未完成,它可以主动放弃执行权。这些I/O ULT最终将由负责从网络和SPDK轮询完成事件的系统ULT重新调度。ULT的创建和上下文切换都非常高效。基准测试显示,一个xstream每秒可以创建数百万个ULT,并且可以每秒执行超过一千万次ULT上下文切换。因此,它非常适合DAOS服务器端I/O处理,能够支持微秒级的I/O延迟。(图2)
3.3 数据保护和数据恢复
DAOS存储以对象的形式展现,用户可以通过键值(key-value)或键数组(key-array)API进行访问。为避免规模化问题以及维护每个对象元数据的开销(如描述对象数据局部性的对象布局),DAOS对象仅通过一个128位ID进行标识。这个ID中包含了几个编码位,用于描述对象的数据分布和保护策略(如复制或纠删码、条带计数等)。DAOS可以利用这些位作为提示,并将对象ID的剩余位作为伪随机种子,结合DAOS存储池的配置,生成对象的布局。这种机制被称为算法性对象放置(Algorithmic Object Placement)。它与Ceph的数据放置技术类似,但DAOS并没有采用CRUSH算法。
本文仅从高层次介绍数据保护和恢复协议。详细的放置算法和恢复协议信息,可以查阅在线的DAOS设计文档。
数据保护
为了实现超低延迟的I/O,DAOS存储服务器将应用程序数据和元数据存储在与内存总线直接相连的SCM中,以及通过PCIe连接的SSD中。DAOS服务器使用加载/存储指令从内存映射的持久性内存中直接访问数据,同时使用SPDK API从用户空间直接访问NVMe固态硬盘。然而,如果持久性内存发生不可纠正的错误或SSD介质损坏,那么没有额外保护的情况下,运行在DAOS上的应用程序可能会面临数据/元数据丢失的风险。
启用数据保护后,DAOS对象可以实现复制,也可以被分割为数据和校验分片,随后被存储于多个存储节点之上。一旦存储设备或节点发生故障,DAOS对象仍可在降级模式下正常访问,并且能够借助副本或校验数据来恢复数据冗余。
复制和数据恢复
复制机制确保了数据的高可用性,因为只要有一个副本存活,对象就能被访问。DAOS的复制过程采用主/从协议来执行写操作:主副本负责将请求转发给从副本,并推进分布式事务状态。值得注意的是,DAOS的主/从模型与传统的复制模型存在细微差异,如图3a所示。主副本仅将RPC转发至从副本服务器,随后所有副本会发起RDMA请求,直接从客户端缓冲区获取数据。DAOS之所以选择这种模型,是因为在大多数HPC环境中,客户端与服务器间的网络带宽远超服务器间的带宽,后者通常用于数据恢复和重新平衡。如果DAOS应用于服务器间带宽更高的非HPC场景,其数据传输路径可以调整为传统模型。
为确保复制更新的原子性,DAOS采用了优化的两阶段提交(two-phase commit)协议:若某个副本无法应用更改,则所有副本都将放弃更改。在正常运行情况下,该协议执行起来简单直接。然而,当处理复制写的服务器在两阶段事务期间发生故障时,DAOS不会遵循传统的等待失败节点恢复的两阶段提交协议。相反,它会将故障节点从事务中排除,并通过算法选择另一节点作为替代,继续推进事务状态。若故障节点在未来某个时刻恢复,它将忽略其本地事务状态,依赖数据恢复协议来同步事务状态。
当DAOS的健康监控系统检测到存储目标故障时,会立即将事件报告给基于高度复制的RAFT池服务。该服务能在存储池中的所有服务器上全局激活重建服务。DAOS服务器的重建服务能够迅速扫描本地持久性内存中存储的对象ID,独立计算每个对象的布局,并通过检查失败目标是否存在于其布局中来识别所有受影响的对象。接着,重建服务会将这些受影响对象的ID发送给算法选择的备用存储服务器。这些备用服务器随后会从存活副本中拉取数据,为受影响的对象重建数据。
在此过程中,没有中央集中点来执行数据/元数据扫描或数据重建,因此,重建服务的I/O工作负载会被完全分散和并行处理。
纠删码和数据恢复
DAOS还支持纠删码(EC)进行数据保护,这种方法比复制更加节省空间和带宽,但相应地需要更多的计算资源。由于DAOS客户端是一个轻量级的库,与计算节点上应用程序的计算资源相比,其资源需求较少,因此数据编码的工作由客户端在写时完成。客户端会计算奇偶校验,并为数据和奇偶校验分片创建RDMA描述符,然后向奇偶校验组的领导服务器发送RPC请求以协调写操作。
EC的RPC请求和数据流与复制相同,EC写的所有参与者都会直接从客户端缓冲区中提取数据,而非从领导服务器的缓存中提取。DAOS的EC同样采用与复制相同的两阶段提交协议,确保对不同服务器的写操作的原子性。
如果写操作与EC条带大小不对齐,大多数存储系统需要通过读/编码/写的过程来确保数据和奇偶校验的一致性。然而,这个过程成本高昂且效率低下,因为它会产生远大于实际I/O大小的流量。此外,它还需要分布式锁定来确保读和写之间的一致性。而DAOS凭借其多版本数据模型,可以避免这一昂贵的过程。它仅将部分写数据复制到奇偶校验服务器,如果在一段时间后,应用程序继续写并最终组成完整的条带,奇偶校验服务器可以简单地基于这些复制数据来计算奇偶校验。若未形成完整的条带,奇偶校验服务器将与其它服务器协调,从部分覆盖的数据及其旧版本中生成一个合并视图,并计算其奇偶校验,然后将合并数据与新的奇偶校验一起存储。
在发生故障时,EC保护数据的降级模式读相较于复制更为复杂。通过复制,DAOS客户端可以简单地切换到另一个副本进行读。但对于EC,客户端必须获取完整的数据条带,并在传输过程中重构丢失的数据片段。然而,在降级模式下进行写处理时,EC与复制的处理方式相同:两阶段提交事务可以继续进行,不会被故障的服务器所阻塞。一旦为事务选择了备用服务器,写操作便可立即执行。
EC的重建协议与复制类似,但相比复制,它会产生更多的数据移动。这是所有基于奇偶校验的数据保护技术的共同特点。
端到端数据完整性
服务崩溃,DAOS通过运行类似于Gossip协议的SWIM机制来捕捉这类故障。 NVMe SSD故障,DAOS可以通过SPDK轮询设备状态来检测此类故障。 由存储介质故障引起的数据损坏,DAOS则通过存储和验证校验和来识别这类故障。
为了确保数据的完整性和检测静默数据损坏,DAOS客户端在将数据写入服务器之前,会先为待写入的数据计算校验和。当服务器接收到写入请求时,它可以选择验证校验和,或者直接存储校验和与数据而不进行验证。服务器端是否进行校验和验证,可以根据用户的性能要求进行灵活设置。
当应用程序读取数据时,如果读取操作与原始写入操作对齐,服务器将直接返回数据和校验和。若读取操作与原始写入操作不对齐,DAOS服务器将验证所有相关数据范围的校验和,然后计算要读取的数据部分的校验和,并将数据和校验和一起返回给客户端。客户端在将数据返回给应用程序之前,会再次验证校验和的正确性。
如果DAOS客户端在读取过程中检测到校验和错误,它将为该特定对象启用降级模式,并可以选择切换到另一个副本进行读取,或者如果对象受到EC保护,则会在客户端重构数据传输。此外,客户端还会将校验和错误报告给服务器。DAOS服务器将收集由本地验证和清理过程中检测到的所有校验和错误,以及客户端报告的错误。一旦错误数达到预设的阈值,服务器将请求池服务从存储系统中移除损坏的设备,并触发相应的数据恢复机制。
值得注意的是,DAOS的校验和存储在持久性内存中,并由持久性内存模块的ECC提供保护。如果持久性内存中出现无法纠正的错误,存储服务将被SIGBUS信号终止。在这种情况下,池服务将禁用整个存储节点,并在其它存活节点上启动数据恢复流程。
4. DAOS数据模型和I/O接口
本节主要介绍了DAOS的数据模型,阐述了专为该数据模型打造的本机API的构建过程,并详细说明了如何在该数据模型上实现POSIX命名空间。
4.1 DAOS数据模型
DAOS数据模型涵盖了两种不同类型的对象:数组对象(array objects),它允许应用程序灵活地表示多维数组;而键/值存储对象(key/value store objects)则支持常规的KV I/O接口和多级KV接口。无论是KV对象还是数组对象,它们都具有版本化数据特性,这使得应用程序能够实施破坏性更改,并在必要时回滚到数据集的旧版本。每个DAOS对象都属于一个特定的域,这个域被称为DAOS容器(DAOS container)。容器为对象提供了一个私有的地址空间,允许事务独立地修改存储在同一DAOS池中的其它容器,互不干扰(图4)。
DAOS容器将通过多个I/O中间件库向应用程序提供接口,为应用程序的迁移提供了一条顺畅的路径,几乎无需(或有时仅需少量)修改应用程序代码。通常,这些I/O中间件都运行在POSIX之上,涉及将中间件的数据模型序列化为目录和文件(即字节数组)的POSIX方案。然而,DAOS提供了一个更为丰富和强大的API,为中间件库和应用程序提供了更加优秀和高效的构建基础。
通过将POSIX视为在DAOS之上实现的一个中间件I/O库,所有建立在POSIX之上的库都能得到支持。同时,这些中间件I/O库也可以被移植为直接在DAOS上本地工作,从而跳过了具有多个缺点的POSIX序列化步骤(这些缺点在此文档中不再赘述)。目前,已经实现在DAOS库之上的I/O中间件库包括POSIX、MPI-IO和HDF5。未来,还将有更多的I/O中间件和框架被移植为直接使用本机DAOS存储API。
4.2 DAOS POSIX支持
POSIX并非DAOS存储模型的核心基础,而是作为一个库建立在DAOS后端API之上,与其它I/O中间件无异。一个POSIX命名空间可以被封装在一个DAOS容器中,并且可以由应用程序挂载至其文件系统树中。
图5展示了DAOS针对POSIX的软件栈结构。通过FUSE驱动程序,利用DAOS存储引擎API(通过libdaos)和DAOS文件系统API(通过libdfs),使得应用程序能够使用POSIX API。这样的设计会引入FUSE通常带来的开销,如系统调用等。虽然对于大多数文件系统操作而言,这种开销是可以接受的,但像读写这样的I/O操作实际上可能会带来显著的性能损耗,尤其是当所有操作都必须通过系统调用进行时。为了优化这些对性能敏感的操作,堆栈中额外添加了一个拦截库。这个库与dfuse协同工作,能够拦截POSIX的read(2)和write(2)调用,使应用程序能够通过libdaos直接从其上下文中发起这些I/O操作,而无需对应用程序进行任何修改。
在图5中,dfuse/拦截库与libdaos之间有一个名为libdfs的层。libdfs层直接在DAOS API之上提供了类似POSIX的API,为本机libdaos库提供了文件和目录的抽象。在libdfs中,一个POSIX命名空间被封装在一个容器中,文件和目录均映射到容器中的对象。这个命名空间容器可以挂载到Linux的文件系统树中。封装后的POSIX文件系统的数据和元数据将完全分布在DAOS池的所有可用存储中。dfuse守护程序与libdfs链接,所有来自FUSE的调用都将先通过libdfs,再经过libdaos,最终访问由DAOS服务器提供的远程对象存储。
此外,正如之前所述,libdfs可以通过多个接口暴露给最终用户,包括像SPARK、MPI-IO和HDF5这样的框架。当存在作为I/O中间件插件的shim层时,用户可以直接将应用程序与libdfs链接,这种方法对用户来说是透明的,无需对应用程序进行任何修改。
5. 性能
IOR-Easy:用于测试大型顺序I/O模式下的良好带宽表现。 IOR-Hard:针对带有小型非对齐I/O传输(47001字节)的分段I/O工作负载的带宽测试。 MDTest-Easy:在每个MPI任务的单独目录中针对0字节文件进行元数据操作的测试。 MDTest-Hard:在共享目录中针对小型(3901字节)文件进行元数据操作的测试。 Find:通过目录遍历来查找相关文件的测试。
添加一个初始化回调,用于连接到DAOS池并打开封装命名空间的DAOS容器。随后在该容器上创建一个DFS挂载。 为所有必要的操作添加回调,并用相应的DFS API替换原有的POSIX API。由于IOR和mdtest中使用的所有POSIX操作都有对应的DFS API,因此映射过程变得相对简单。例如: 将mkdir()替换为dfs_mkdir(); 将open64()替换为dfs_open(); 将write()替换为dfs_write(); 以此类推。 添加一个完成回调,用于卸载DFS挂载并关闭池和容器句柄。
IO500发布了两个结果列表:“完整列表”(Full List)和“排名列表”(Ranked List),它们记录了在不同数量的客户端节点上实现的性能数据。“10节点挑战”(10 Node Challenge)列表则特别展示了仅使用10个客户端节点的结果,这为比较那些随着客户端节点数量扩展的IO500工作负载提供了标准化的基准。对于这两个列表,都没有对存储系统大小的限制。若提交中包含了可选的数据字段,则可能会提供关于数据和元数据的存储设备数量和类型的信息,这些信息可用于评估存储系统的相对效率。
在SC19的IO500提交中,IO500基准测试已在英特尔的DAOS原型集群“Wolf”上成功运行。该“Wolf”集群的八个双插槽存储节点采用英特尔Xeon Platinum 8260处理器。每个存储节点都配备了12个容量为512 GiB的英特尔Optane数据中心持久内存模块(DCPMM),总计每个节点3 TiB,配置为应用程序直接/交错模式。而“Wolf”集群的双插槽客户端节点则使用了英特尔Xeon E5-2699 v4处理器。无论是DAOS的存储节点还是客户端节点,都装备了两个英特尔Omni-Path 100适配器。
图6展示了2019年11月版IO500“10节点挑战”中位列前四的存储系统的IOR带宽情况。DAOS在总体排名中拔得头筹,并获得了最高的“bw”带宽得分(四个IOR工作负载的几何平均值)。由于DAOS采用了多版本数据模型,因此无需针对小型或非对齐写进行读-修改-写操作,这在传统的POSIX文件系统中会产生额外的I/O流量和锁竞争。DAOS存储引擎的这一特点使得“难”和“易”IOR工作负载下的DAOS带宽表现非常接近,并能在各种不同的工作负载下提供稳定的性能。
图7则显示了2019年11月版IO500“10节点挑战”中位列前四的存储系统的mdtest元数据性能。在整体“md”元数据得分(所有mdtest工作负载的几何平均值)上,DAOS表现出色,与最接近的竞争对手相比,其性能优势近3倍。这主要得益于其轻量级的端到端用户空间存储栈,结合超低延迟网络和DCPMM存储介质。与IOR带宽结果类似,DAOS的元数据性能在各种测试中表现均衡,而许多其它文件系统则在不同的元数据工作负载间表现出较大的性能差异。
值得一提的是,在2019年11月的“完整列表”中,DAOS排名第二,仅使用了26个客户端节点。如果使用更多的客户端节点,其性能表现有望进一步提升,特别是在那些随着客户端节点数量增加而扩展的元数据测试中。因此,与“完整列表”上其它使用数百个客户端节点进行测试的存储系统进行直接比较,并不像“10节点挑战”那样具有直接的意义。
IO500结果的完整列表和IO500基准套件的详细描述可以在参考文献中找到。
6. 结论
随着存储类内存和NVMe存储的日益普及,软件栈的开销逐渐凸显为整体存储系统的重要部分。传统的存储系统往往难以充分发挥这些新型存储硬件设备的优势。为此,本文特地介绍了专为这类新型存储技术设计的软件栈——DAOS。文中详细描述了DAOS的技术特点,并深入解析了它是如何实现高性能和高可靠性的。
在性能表现方面,DAOS的IO500基准测试结果充分展现了其能够充分利用新型存储设备及其用户空间接口的能力。相较于IO500列表上的绝对排名,更值得关注的是,DAOS在IO500工作流中展现出了非常稳定的性能表现。相比之下,其它文件系统在某些IO500测试之间可能会表现出显著的性能差异。
本文仅对DAOS及其当前的POSIX I/O中间件中的几个核心技术组件进行了简要介绍。至于其它支持的I/O库,如MPI-I/O和HDF5,本文暂未涉及,但将作为未来研究的重点。此外,基于DAOS/libdfs的其它I/O中间件插件目前仍在积极开发中。有关DAOS的详细路线图、设计文档和开发状态,读者可以访问Github和DAOS网站进行查阅。
References
1. Breitenfeld, M.S., et al.: DAOS for extreme-scale systems in scientific applications (2017). https://arxiv.org/pdf/1712.00423.pdf
2. Rudoff, A.: APIs for persistent memory programming (2018). https://storageconference.us/ 2018/Presentations/Rudoff.pdf
3. Monnier, N., Lofstead, J., Lawson, M., Curry, M.: Profiling platform storage using IO500 and mistral. In: 4th International Parallel Data Systems Workshop, PDSW 2019 (2019). https://conferences.computer.org/sc19w/2019/pdfs/PDSW2019-6YFSp9XMTx6Zb1FALM AAsH/5PVXONjoBjWD2nQgL1MuB3/6lk0OhJlEPG2bUdbXXPPoq.pdf
4. DAOS. https://wiki.hpdd.intel.com/display/DC/DAOS+Community+Home
5. DAOS github. https://github.com/daos-stack/daos
6. Seo, S., et al.: Argobots: a lightweight low-level threading and tasking framework. IEEETrans. Parallel Distrib. Syst. 29(3) (2018). https://doi.org/10.1109/tpds.2017.2766062
7. SPDK. https://spdk.io/
8. Libfabric. https://ofiwg.github.io/libfabric/
9. Mercury. https://mercury-hpc.github.io/documentation/
10. Weil, S.A., Brandt, S.A., Miller, E.L., Maltzahn, C.: CRUSH: controlled, scalable,decentralized placement of replicated data. In: Proceedings of the 2006 ACM/IEEE Conference on Supercomputing, SC 2006 (2006). https://doi.org/10.1109/sc.2006.19
11. Braam, P.J.: The Lustre storage architecture (2005). https://arxiv.org/ftp/arxiv/papers/1903/ 1903.01955.pdf
12. Schmuck, F., Haskin, R.: GPFS: a shared-disk file system for large computing clusters. In: Proceedings of the First USENIX Conference on File and Storage Technologies, Monterey, CA, 28–30 January 2002, pp 231–244 (2002). http://www.usenix.org/publications/library/ proceedings/fast02/
13. Das, A., Gupta, I., Motivala, A.: SWIM: scalable weakly-consistent infection-style processgroup membership protocol. In: Proceedings of the 2002 International Conference on Dependable Systems and Networks, DSN 2002, pp. 303–312 (2002)
14. Ongaro, D., Ousterhout, J.: In search of an understandable consensus algorithm (2014). https://www.usenix.org/system/files/conference/atc14/atc14-paper-ongaro.pdf
15. Barton, E.: DAOS: an architecture for extreme storage scale storage (2015). https://www.snia.org/sites/default/files/SDC15_presentations/dist_sys/EricBarton_DAOS_Architecture_ Extreme_Scale.pdf
16. IO500 List, November 2019. https://www.vi4io.org/io500/list/19-11/start
17. Kunkel, J., et al.: Virtual institute for I/O. https://www.vi4io.org/start
---【本文完】---
近期受欢迎的文章:
更多交流,可添加本人微信
(请附姓名/关注领域)