在大多数计算机科学家的整个职业生涯中,有一个基本的观察结果始终是正确的:cpu的性能明显优于I/O设备,价格也比I/O设备贵得多。cpu可以以极高的速率处理数据,同时为多个I/O设备提供服务,这一事实对各种规模的系统的硬件和软件的设计产生了广泛的影响,几乎从我们构建系统开始就有了这种影响。
然而,这一假设正处于被完全推翻的过程中。
高速、非易失性存储设备的到来,通常被称为存储类内存(SCM),可能是数据中心和软件设计人员在可预见的未来将面临的最重要的架构变化。SCM越来越多地成为服务器系统的一部分,它们构成了一个巨大的变化:一个SCM的成本为3,000美元5,000美元,很容易超过一个多核CPU(1,000美元2,000美元),而一个SCM的性能(每秒数十万个I/O操作)是这样的,需要一个或多个完整的多核CPU来饱和它。
这种变化影响深远:
本文回顾了四年来使用scm构建可伸缩企业存储系统的经验;特别是,我们讨论了为什么传统的存储架构不能利用scm所提供的性能,需要什么来最大化地利用,以及我们从中学到了什么。
事实上,处理能力远远领先于磁盘延迟,预取必须提前多个块工作,以保持处理器提供数据. ...幸运的是,现代机器有足够的空闲周期来支持比任何人提出的更需要计算的预测器。”
Papathanasiou和Scott,102005
磁盘既便宜又慢,而cpu又贵又快,这一点已经被开发人员灌输了多年。事实上,本科生的教科书,比如布莱恩特和奥哈拉伦的计算机系统:程序员的视角,3.强调分层内存的后果和新手开发人员理解其对程序的影响的重要性。杰夫·迪恩的《每个人都应该知道的数字》也许不那么迂腐7强调了所有形式的I/O所涉及的令人痛苦的延迟。多年来,开发人员得到的一致信息是:保持应用程序的工作集足够小,以适应RAM,最好是适应处理器缓存,才能保证良好的性能。如果不是那么小,我们就有麻烦了。
事实上,虽然持久存储一直比CPU慢,但这种“I/O差距”实际上在整个20世纪90年代和21世纪初每年都在扩大。10处理器以稳定的速度改进,但机械驱动器的性能保持不变,受制于物理的转速和寻道时间。几十年来,I/O间隙一直是大量创造性方案的发明之母,以避免阻塞I/O带来的浪费、处理器闲置的痛苦。
缓存一直是而且仍然是解决高容量、持久存储的糟糕性能的最常用解毒剂。在当前的系统中,缓存扩展到所有层:处理器透明地缓存RAM的内容;操作系统在内部缓冲缓存中缓存整个磁盘扇区;应用程序级架构前端是慢的、持久的后端数据库,带有memcached和Redis等内存存储。事实上,关于堆栈中数据应该缓存在什么位置的问题一直存在摩擦:数据库和分布式数据处理系统需要更好的控制,有时在用户空间应用程序中缓存数据。作为设计空间中的一个极端点,RAMCloud9探索了将集群的所有数据保存在DRAM中并通过快速恢复机制使其持久的可能性。
缓存并不是处理I/O差距的唯一策略。许多技术实际上是用CPU时间来换取磁盘性能:例如,压缩和重复数据删除会导致数据减少,并为使更快的内存看起来更大而付出计算代价。更大的内存允许应用程序拥有更大的工作集,而不必使用旋转磁盘。压缩主存是20世纪90年代桌面“RAM倍增”系统扩展的流行策略。12在企业存储系统和大数据环境中,它仍然是一种常见的技术,使用Apache Parquet等工具重新组织和压缩磁盘上的数据,以减少等待I/O的时间。
“多套接字发布IOs将Linux块层的吞吐量降低到大约125,000 IOPS,尽管市场上已经有高端固态设备几年来能够实现比这更高的IOPS。Linux块层的可伸缩性不是我们未来可能会遇到的问题,它是当今高性能计算在实践中面临的一个重要问题。”
Bjørling等人,22013
高速、非易失性存储设备的到来,通常被称为存储类内存(SCM),可能是数据中心和软件设计者在可预见的未来将面临的最重要的架构变化。
基于闪存的存储设备并不新鲜:SAS和SATA固态硬盘至少在过去十年就已经出现了,它们将闪存以与旋转磁盘相同的形式引入了计算机。scm反映了这些闪存设备的成熟,成为一种新的、一流的I/O设备:scm将闪存从历来由磁盘使用的缓慢的SAS和SATA总线转移到性能更敏感的设备(如网络接口和gpu)使用的速度明显更快的PCIe总线上。此外,新兴的scm,如非易失性内存(nvdimm),与CPU的接口就像DRAM一样,为非易失性存储提供更高级别的性能。
与旋转磁盘相比,当前基于pcie的scm代表了惊人的3个数量级的性能变化(每秒约100K个I/O操作与每秒约100个I/O操作)。对于计算机科学家来说,我们对底层硬件组件变化1000倍或更多的性能假设是很少的。非易失性内存的性能和容量在同比性能提升方面继续超过cpu,缩小甚至可能逆转I/O差距,这一事实强化了这种变化。
scm的性能意味着系统必须不再通过缓存和数据减少来“隐藏”它们,以实现高吞吐量。然而,不幸的是,这种性能提高的代价很高:scm的成本是传统旋转磁盘的25倍(1.50美元/GB vs 0.06美元/GB),企业级PCIe闪存设备的成本在3,000美元/ 5,000美元之间。这意味着非易失性存储的成本很容易超过cpu、DRAM和安装它们的服务器系统的其他部分。这一转变的意义是重大的:非易失性内存正在取代CPU,成为数据中心的经济中心。
为了最大化从高成本scm中获得的价值,存储系统必须始终能够使这些设备饱和。这绝非易事:例如,将MySQL从SATA RAID迁移到ssd只能提高57倍的性能14显著低于原始设备的差速器。在大数据背景下,Cloudera最近对ssd的分析也有类似的不同:“我们了解到ssd在某些工作负载下提供了相当大的性能优势,在最坏的情况下也不会造成损害。”4我们自己的经验是,要使PCIe flash设备饱和,通常需要对现有的存储子系统进行优化,然后消耗大量的CPU周期。除了这些周期之外,完整的应用程序栈还要花费一些(希望是相当多的)时间来实际处理正在读写的数据。为了使昂贵的scm保持繁忙,因此将经常需要大量的cpu来生成足够的I/O负载。
总而言之,尽管这些设备的性能非常吸引人,但要将它们有效地插入现有系统是非常具有挑战性的;相反,硬件和软件需要一起设计,以最大化效率为目标。
在这里,我们将讨论在企业存储系统中为实现极高的性能和利用率而设计时的一些技术和考虑因素:
平衡系统解决在scm存在时未发现的其他组件的容量不足和瓶颈。例如,必须有足够的CPU内核可用,并且网络必须提供足够的连通性,以使数据能够在满负荷的情况下通过存储提供服务。如果不能构建平衡的系统,就会浪费在昂贵的scm上的资本投资。
无争用以I/ o为中心的调度对于多个cpu来说,为了高效地将I/O分配到相同的存储设备,也就是说,共享一个SCM,而不序列化所有cpu之间的访问,是必须的。未能正确地调度I/O将导致性能低于标准和昂贵的scm的低利用率。
水平缩放和位置感知通过避免传统的文件风格的整合来解决资源限制,而是跨集群分布数据并主动移动数据以实现更好的负载平衡。如果不能实现水平伸缩和位置感知,将导致存储系统无法增长。
Workload-aware存储分层利用大多数工作负载中的访问位置来平衡性能、容量和成本需求。高速、低容量存储用于缓存来自低速层的热数据,随着工作负载的变化,系统会主动提升和降低数据。未能实现感知工作负载的分层将导致高价值的SCM容量浪费在冷数据上。
最后,我们通过指出在数据中心和应用程序设计方面的一些挑战来结束,这些挑战将来自未来几年将出现的更快的非易失性设备。
我们能把scm而不是磁盘放进我们的系统里,然后宣布结案吗?不是真的。通过用scm替换慢速磁盘,我们仅仅转移了性能瓶颈,并在硬件和软件方面发现了其他方面的资源短缺。作为一个简单但具有解释性的示例,考虑一个应用程序,它通过异步发出大量未完成的请求(以保持磁盘繁忙)来处理磁盘上的数据,然后使用一个或多个工作线程池来处理从磁盘读取的操作。在磁盘是瓶颈的传统系统中,请求几乎在完成后立即被处理,可以编写保持磁盘请求队列满的(合理的)逻辑,以始终保持指定数量的请求在运行中。使用scm,瓶颈可以很容易地从磁盘转移到CPU:请求几乎立即完成,然后等待工作者拾取它们,直到它们被处理,消耗内存。因此,我们看到在现实世界的网络服务器实现和数据分析工作中,更快的存储介质的具体结果是需要更多的RAM来存储已读取但未处理的数据。移动性能瓶颈会导致系统中的内存需求发生变化,在最坏的情况下,甚至可能导致主机将数据交换回磁盘!
除了由scm的性能导致的对现有软件的行为更改之外,实现它们的价值还需要使它们保持忙碌。未充分利用和空闲的scm构成了对昂贵资源的浪费,并提供了整合工作负载的机会。有趣的是,这与十多年前推动CPU虚拟化作为提高计算资源利用率的方法所使用的推理是相同的。在参与了CPU和SCM虚拟化的重要系统构建工作之后,我们发现,与CPU相比,实现SCM的持续利用是一个更具挑战性的目标。这不是简单地虚拟化服务器上的SCM硬件并添加更多的vm或应用程序的问题:我们可能会在SCM饱和之前很久就遇到CPU或内存瓶颈。相反,使SCM饱和通常需要为SCM使用专用机器,并在其他物理机器上扩展应用程序。
因此,存储设备的成本和性能决定了数据中心的设计。确保它们的利用率成为一个关键焦点,我们发现这只能通过构建平衡的系统来实现:系统具有适当数量的内核和适当数量的内存,以满足给定工作负载所需的确切数量的flash设备。
这种注重存储的平衡设计并不新鲜:像TritonSort这样的努力,通过仔细优化集群的磁盘吞吐量,在2011年赢得了排序基准,11我以前做过。然而,这样的优化工作在磁盘时代是罕见的,在TritonSort的情况下当然是硬件和工作负载特定的。磁盘的传统速度较慢,这意味着对于大多数工作负载来说,平衡存储速度与其他系统组件之间的平衡是不可能的屏蔽访问存储,以阻止它破坏其他资源的平衡。
良好的SCM利用率更迫切地需要这种平衡:购买过多的闪存设备和过少的内核或过少的RAM最终会浪费资金,但购买过少、稀疏分布的闪存设备可能会在访问它们时遇到瓶颈,尽管瓶颈最有可能是在系统资源而不是SCM本身!当然,正确的平衡仍然是工作负载的属性,这与我们的整合目标结合在一起,使它成为一个难以置信的具有挑战性的目标:异构工作负载已经使实现充分的系统利用率变得困难,甚至在考虑存储层之前。我们自己的工作中的一个例子是动态扩展传统NFS服务器实现,以便在向系统添加更多scm(以及相应的cpu和网卡)时公开更多的物理带宽,这个问题看起来很简单。5
即使硬件资源和工作负载完全平衡,资源共享的时间维度也同样重要。长期以来,中断驱动的I/O一直是cpu -磁盘交互的选择模型。这是它们速度不匹配的直接后果:对于运行在几千兆赫的核心,每隔几毫秒处理一次中断是相当容易的。单个核心可以为数十或数百个磁盘提供服务,而不会出现过载或错过截止日期的情况。
对于低延迟(“微秒时代”)设备,这种模式必须彻底改变。然而,存储设备并不是唯一出现速度变化的外围设备,网络设备的性能也有类似的快速提升,从10G到40G,最近到100G。也许存储系统可以使用同样的技术来饱和设备?
不幸的是,答案不是简单的“是”或“否”。与存储设备速度的急剧提高相比,网络设备所取得的进步相形见绌;例如,图1而且2说明在同一时期,网络速度提高了一千倍,存储设备的速度提高了一百万倍。此外,存储堆栈通常必须直接在数据路径上支持复杂的特性,如压缩、加密、快照和重复数据删除,这使得假设没有数据依赖性的独立包的优化应用变得困难。
网络设备通常采用的一种减少延迟的技术是,当系统处于高负载时,通过转换到轮询来消除中断处理开销。Linux NAPI和Intel忙轮询套接字为网络适配器实现轮询模式,这消除了上下文切换以及与中断相关的缓存和TLB污染。而且,繁忙的轮询核心从不切换到省电模式,从而节省了处理器状态转换的成本。将网络适配器切换到轮询模式可以减少约30%的延迟,非易失性存储也证明了类似的改进。16
然而,民意调查也有其自身的一系列挑战。CPU的职责不仅仅是为设备提供服务,它必须处理请求,并充当与之关联的数据的源或接收器。在Hadoop和Spark等数据并行框架的情况下,7,17CPU可能还需要对数据执行更复杂的转换。因此,必须仔细选择轮询频率,以确保设备和计算都不会遭受饥荒,并且需要重新评估设计用于利用传统I/ o高负载工作负载的调度策略,因为这些工作负载现在也必然是计算高负载的。
对于统一随机工作负载,当IOPS达到100K时,CPU大约有10微秒的时间来处理一个I/O请求。由于当前的scm在处理顺序工作负载或只读工作负载时的速度通常要快得多,因此在商用硬件上,这一速度可能会下降到接近2.5微秒。更糟糕的是,由于这些请求通常来自远程源,因此必须以相同的速率为网络设备提供服务,这进一步减少了每个请求的可用处理时间。把这些数字放在环境中来看,在今天的系统中获取单个无争用锁大约需要20ns,而非阻塞缓存失效可能花费高达100ns,仅比I/O操作少25倍。
当前的scm很容易压倒单个核心;他们需要多个核心同时提交请求,以达到饱和。虽然硬件多队列支持允许并行提交,但内核块层序列化对队列的访问,并需要进行重大的重新设计以避免争用锁。2然而,即使使用无争用块层,对重叠区域的请求也必须序列化,以避免数据损坏。
高性能网络堆栈用于显著降低延迟的另一项关键技术是绕过内核,直接在应用程序中操作数据包。13此外,它们在CPU内核之间划分网络流,1,8允许拥有流的核心对流的TCP状态执行无争用、无锁的更新。
虽然绕过内核块层进行存储访问具有类似的延迟好处,但网络和存储设备之间有一个显著的区别:网络流在很大程度上是独立的,可以在多个核和队列上并行处理,但存储请求共享一个公共基板,需要一定程度的协调。对物理存储设备和存储元数据进行分区,以便让单个CPU内核独占访问某些数据是可能的,但这需要仔细的数据结构设计,而过去存储和文件系统设计人员不需要这样做。我们的经验是,网络代码经常涉及必须根据性能和并发性进行设计的数据结构,而文件系统代码涉及复杂的数据依赖关系,需要仔细推理以确保正确性。对于scm,系统设计人员突然需要同时处理这两个问题。
除了由scm的性能导致的对现有软件的行为更改之外,实现它们的价值还需要使它们保持忙碌。未充分利用和空闲的scm构成了对昂贵资源的浪费,并提供了整合工作负载的机会。
以I/O为中心的调度概念认识到,在存储系统中,CPU的主要任务是驱动I/O设备。调度配额是根据所执行的IOPS而不是所消耗的CPU周期来确定的,因此典型的调度方法并不直接适用。例如,一种常见的遗留调度策略是鼓励在负载较轻时让步,以换取在繁忙和有错过最后期限危险时的更高优先级,这种策略会惩罚驱动系统以最大容量运行所需的设备轮询线程。以I/ o为中心的调度的目标必须是对驱动设备饱和的操作进行优先级排序,同时保持公平性并限制客户机之间的干扰。
企业数据中心存储经常被整合到具有许多磁盘的单个服务器中,通俗地称为JBOD(只是一堆磁盘)。jbod通常包含7080个旋转磁盘,由单个控制器或“磁头”控制,并向数据中心的其余部分提供高容量、低性能的存储服务器。
jbod方便地抽象了这个控制器后面的存储;客户端只需要向头部发送请求,不需要任何内部架构和数据位置的知识。单个SCM的性能可以超过整个JBOD,但它提供的容量要低得多。scm的JBOD能否为数据中心的其他部分提供高速和高容量的存储?这将如何影响连通性、电源和CPU利用率?
一个完整的基于磁盘的JBOD需要不到10G的网络带宽,即使在满负荷运行时也是如此。相反,scm的JBOD将需要350G400G的网络带宽,或者大约10个40G的网络适配器。按每个SCM 25W计算,JBOD将消耗约3000 w。
显然,这是不切实际的,但更糟糕的是,它会非常低效。单个控制器根本无法同时调解对大量scm的访问。这样做需要在100ns左右处理整个请求,这是一次内存访问的延迟。集中式控制器将使存储硬件严重未得到充分利用,在这些昂贵设备上的投资回报很低。需要一种不同的方法。
跨核心分布访问,即拥有多个头,在访问文件系统元数据时需要协调。JBOD中的多个网络适配器公开多个远程访问点,需要支持位置的客户机将请求导向正确的网络端点和头。在这一点上,JBOD类似于一个分布式系统,这样的合并几乎没有好处。相反,在集群中跨机器的水平向外扩展更可取,因为它提供了与配置和负载平衡相关的额外好处。
向外扩展允许根据需求逐步添加存储服务器,而不是在第一次构建数据中心时确定JBOD的规范。这可以节省大量的资金,因为逐渐增加的设备获得了摩尔定律的好处。此外,由于这些服务器是跨机架提供的,因此数据的智能放置可以帮助缓解热点及其相应的网络瓶颈,从而实现统一的高利用率。
这里的结论是,除非系统中的大部分数据是热的,否则将它们全部存储在高速闪存设备中是非常低效的。
然而,在集群机器之间保持高性能需要的不仅仅是减少中断开销和增加并行性。必须小心地同步对共享状态(如文件系统元数据)的访问,并且可能需要额外的通信来服务跨多个服务器的大文件。对文件及其元数据的更新必须跨多台计算机进行协调,以防止损坏,而支持数据结构本身必须跨核扩展,使争用最小化。转移工作负载模式通常会导致较差的负载平衡,这可能需要将文件从一台计算机转移到另一台计算机。分布式存储系统多年来一直面临这些问题,但是在基于scm的企业存储系统所经历的极高负载下,这些问题要严重得多。
scm的容量和性能是正交的:一个4TB闪存驱动器与同一系列的1TB或2TB驱动器具有相同的性能特征。容量和性能的工作负载需求与硬件能力不匹配,导致磁盘利用率不足;例如,一个10TB的数据集,预期负载为500K IOPS,当所有数据都存储在能够100K IOPS的1TB scm中时,它是一半空闲的。
除了使用未充分利用的昂贵scm所带来的明显的成本低效率外,基于pci的scm还存在处理器套接字连接限制。单个这样的设备需要4到8个PCIe通道,这些通道在所有高速I/O设备之间共享,限制了单个套接字可以支持的驱动器数量。相比之下,SATA驱动器,无论是旋转磁盘或闪存,都不计入相同的配额。
这里的结论是,除非系统中的大部分数据是热的,否则将它们全部存储在高速闪存设备中是非常低效的。然而,许多工作负载并不是均匀的热,而是遵循一种接近帕累托分布的分布:80%的数据访问集中在20%的数据集中。
具有不同存储介质层(每一层具有不同的性能特性)的混合系统是混合热数据和冷数据的更好选择。scm充当较慢磁盘的缓存,并且只填充热数据。访问模式随时间而变化,需要对其进行监视,以便系统能够主动提升和降低数据,以匹配其当前的热度级别。在实践中,跟踪系统的失踪率曲线可以在开销相当低的情况下,估计不同工作负载下更改缓存大小对性能的影响15并支持关于数据应该驻留在何处的细粒度决策。
分层是对已有缓存机制的扩展。系统设计人员必须独立考虑层,就像ccNUMA机器一样,本地和远程内存具有显著不同的性能。分级允许系统独立地扩展容量和性能,这是企业存储的必要条件。
尽管分层有明显的好处,但它充满了复杂性。不同存储层访问粒度的差异导致阻抗不匹配。例如,scm擅长于随机访问,而旋转磁盘更适合于顺序访问模式。在磁盘层中保持一定程度的连续性可能会导致热数据和冷数据在特定层中“固定”在一起。
这种粒度不匹配并非存储设备独有:mmu和缓存也在页面和缓存线粒度上操作,因此单个热字节可以在内存中固定整个页面或缓存中固定一行。虽然这个问题没有完美的解决方案,但访问模式的空间局部性提供了一些帮助:可预测的重复访问允许一定程度的建模,以帮助识别和修复病态工作负载。
在配置充分的系统中,简单的分层启发式通常可以有效地利用硬件而不降低性能。但是,不同的工作负载可能有不同的优先级。在这种情况下,优先级反转和公平性成为确定布局的重要标准。分级机制必须支持灵活的策略,以防止活动但低优先级的工作负载干扰关键业务工作负载。这类政策与最大限度提高效率的愿望之间往往存在矛盾;平衡这些问题使得分层成为一个具有挑战性的问题。
PCIe固态硬盘是最明显的scm类型,并且已经对数据中心的硬件和软件设计产生了重大影响,但它们远远不是这类设备的唯一成员。
nvdimm具有DRAM的性能特性,同时提供持久性。最近一种常用的设计nvdimm的方法是将内存上的DRAM数量与闪存数量相匹配。然后,DRAM就像普通内存一样被使用,而闪存则完全不受影响,直到系统经历掉电。当电源被切断时,一个超级电容被用来提供足够的功率来将RAM中的(易挥发的)内容刷新到闪存中,以便在系统重新启动时将其重新加载到RAM中。现在已经有了闪存支持的dram,而较新的存储器技术,如电阻式和相变存储器,有可能实现更大、性能更高的非易失性RAM。
这种新兴的非易失性存储器暴露了软件的低效率,这些低效率以前被设备的性能特征所掩盖,这些设备不仅运行在旋转磁盘上,甚至还运行在第一代ssd上。我们相信,当这些效率变得更加明显时(考虑到SCM性能的持续快速改进,它们很可能会),它们将邀请软件系统设计中的创新。这将不得不发生在基础设施堆栈的许多层,以便能够利用快速非易失性存储;我们今天看到的只是一个开始!
相关文章
在queue.acm.org
不要满足于最终的一致性
怀亚特·劳埃德,迈克尔·j·弗里德曼,迈克尔·卡明斯基,大卫·g·安德森
http://queue.acm.org/detail.cfm?id=2610533
企业网格计算
保罗强
http://queue.acm.org/detail.cfm?id=1080877
为什么云计算永远不会免费
戴夫Durkee
http://queue.acm.org/detail.cfm?id=1772130
1.Belay, A.等人。IX:高吞吐量和低延迟的受保护数据面操作系统。在十一届会议记录th操作系统设计和实现USENIX研讨会。
2.Bjørling, M., Axboe, J., Nellans, D.和Bonnet, P. Linux块IO:在多核系统上引入多队列SSD访问。在六人会议记录th国际系统与存储会议, 2013年。
3.布莱恩特·r·e和奥哈拉伦博士计算机系统:程序员的视角,第2卷。普伦蒂斯大厅,恩格尔伍德悬崖,新泽西州,2003年。
4.陈颖。关于MapReduce在ssd上性能的真相;http://radar.oreilly.com/2015/07/the-truth-about-mapreduce-performance-on-ssds.html
5.Cully, B.等人。2014。Strata:在虚拟化非易失性内存上的可伸缩高性能存储。在12人会议记录th文件和存储技术USENIX会议, 2014年。
6.从构建大规模分布式系统中获得软件工程建议。斯坦福大学CS295讲座(2007年7月);http://research.google.com/people/jeff/stanford-295-talk.pdf
7.Dean, J.和Ghemawat, S. MapReduce:大型集群的简化数据处理。在六人会议记录th操作系统设计与实现研讨会, 2004年。
8.mTCP:用于多核系统的高度可扩展的用户级TCP栈。在十一届会议记录th网络系统设计与实现USENIX研讨会, 2014年。
9.Ongaro, D., Rumble, s.m., Stutsman, R., Ousterhout, J.和Rosenblum, M. RAMCloud中的快速崩溃恢复。在二十三次会议的会议记录理查德·道金斯ACM操作系统原理研讨会, 2011年。
10.激进的预取:一个时代已经到来的想法。在十人会议记录thUSENIX操作系统热点专题研讨会, 2005年。
11.Rasmussen, A.等人。2011。TritonSort:一个平衡的大规模排序系统。在八人会议记录th网络系统设计与实现USENIX研讨会, 2011年。
12.一种非常快速的RAM压缩算法。ACM SIGOPS操作系统回顾, 2(1997), 3645。
13.Netmap:一种用于快速包I/O的新框架。在USENIX年度技术会议论文集, 2012年。
14.Tkachenko, V. Intel SSD 910与HDD RAID在TPC-C-MySQL基准;https://www.percona.com/blog/2012/09/11/intel-ssd-910-vs-hdd-raid-in-tpcc-mysql-benchmark/
15.电线,J.,英格拉姆,S.,德鲁迪,Z.,哈维,新泽西,沃菲尔德,A.用计数器堆栈描述存储工作负载。在十一届会议记录th操作系统设计和实现USENIX研讨会, 2014年。
16.杨杰,敏特,D.B.,哈迪,F.什么时候投票比打断好。在十人会议记录th文件和存储技术USENIX会议, 2012年。
17.Zaharia, M.等。弹性分布式数据集:内存集群计算的容错抽象。在会议记录th网络系统设计与实现USENIX研讨会, 2012年。
数字图书馆是由计算机协会出版的。版权所有©2016 ACM, Inc.
没有找到条目