SDF: Software-defined flash for web-scale internet storage systems

1、摘要

In the last several years hundreds of thousands of SSDs have been deployed in the data centers of Baidu, China’s largest Internet search company. Currently only 40% or less of the raw bandwidth of the flash memory in the SSDs is delivered by the storage system to the applications. Moreover, because of space over-provisioning in the SSD to accommodate non sequential or random writes, and additionally, parity coding across flash channels, typically only 50-70% of the raw capacity of a commodity SSD can be used for user data. Given the large scale of Baidu’s data center, making the most effective use of its SSDs is of great importance. Specifically, we seek to maximize both bandwidth and usable capacity.

To achieve this goal we propose software-defined flash (SDF), a hardware/ software co-designed storage system to maximally exploit the performance characteristics of flash memory in the context of our workloads. SDF exposes individual flash channels to the host software and eliminates space over-provisioning. The host software, given direct access to the raw flash channels of the SSD, can effectively organize its data and schedule its data access to better realize the SSD’s raw performance potential.

Currently more than 3000 SDFs have been deployed in Baidu’s storage system that supports its web page and image repository services. Our measurements show that SDF can deliver approximately 95% of the raw flash bandwidth and provide 99% of the flash capacity for user data. SDF increases I/O bandwidth by 300% and reduces per-GB hardware cost by 50% on average compared with the commoditySSD-based system used at Baidu.

Categories and Subject Descriptors B.3.2 [Memory Structures]: Design Styles - mass storage (e.g., magnetic, optical, RAID)
Keywords Solid-State Drive (SSD), Flash Memory, Data Center.

近年来,SSD设备已经应用到百度的数据中心。当前SSD设备中flash只有不到40%的原始带宽通过存储系统带到应用层。另外,SSD设备中因处理随机写操作和校验,需要预留额外的空间,故SSD中只有50%-70%的空间用于存储用户数据。故需要寻求更大的带宽和用户空间。

本文提出软件定义的flash(SDF),软硬件联合设计的存储系统,最大程度的开发性能特点。SDF将flash通道暴露给主机软件,并消除了预留空间。主机软件,直接访问SSD的裸设备通道,有效的组织数据、调度数据访问,以开发SSD裸设备的潜能。

2、现有背景下的问题

为了满足日益增长的数据中心的需求,基于flash的SSD设备因其高吞吐率和低延迟而得到广泛应用。过去七年里,百度在其基础存储设施中就应用了超过300000个SSD设备。SSD设备每单元价格较高,故需要充分发挥SSD的性能和存储潜能。实际上,SSD商品的原始带宽和原始容量都没有得到充分的利用。

3、提出的解决方案

百度的软件定义的flash(SDF)工程,通过将SSD硬件的通道信息向软件透明,可以将负载并发与硬件并行相匹配,同时在一个通道中使用多线程将接口最小化。SDF需要软件显示初始化块擦除操作,需要在写操作之前对块进行软件擦除,故设备不需要为GC操作预留空间。同时,系统软件在设备空闲时调度擦除操作。同时,移除通道中的奇偶校验码,使用系统级的数据复制确保数据的一致性。

每个SDF包含一个自定义的flash设备和对应的软件层,软件层提供一个不对称的块访问接口(写/擦除单位:8MB,读单位:8KB)。硬件提供多个独立的通道,同时,软件层将硬件的并行性转化成为应用层的吞吐量。

3.1 方案的具体论述

SDF的硬件层结构见图2。SDF控制器包含5个FPGA,一个Xilinx Virtex-5 FPGA控制数据通路,用于PCIe的DMA传输和芯片间的桥接。Virtex-5 FPGA连接4个Xilinx Spartan-6 FPGA,每个Spartan-6 FPGA实现一个独立的FTL,管理11个通道。每个通道控制2片Micron 25nm MLC flash芯片,每个芯片有2个plane,每个芯片8GB,故整个SDF设备容量为704GB = 8GB*2片/通道11通道/FTL 4个FTL。

每个flash通道都有专用的通道驱动,实现FTL(包含块地址映射、动态磨损均衡、坏块管理、数据通路逻辑)。块映射表和用于动态磨损均衡的擦除次数表存储在片上SRAM中,只能通过FPGA访问。

图4显示了Spartan-6 FPGA的逻辑图。逻辑总线接口(LB_IF)是片间总线,是连接Virtex-5 FPGA的桥接线。为了充分使用带宽,所有通道共享一个高带宽的数据通路,经过通道的数据被缓存在一个DRAM中,故在数据传输调度时更加灵活。如图4,在逻辑总线接口与通道驱动间,有一个DDR管理器,管理2个512 MB DDR3 16-bit DRAM。每个专用通道控制器(CH_ENGINE)中,有三个模块:映射表(LA2PA)、坏块管理(BBM)模块、动态磨损均衡(DWL)模块。SDF使用中断归约(interrupt reduction)技术,减少CPU的负载,提高IOPS。SDF合并同一个Spartan-6中通道控制器中的中断,然后合并Virtex-5中所有Spartan-6中的中断。通过这种合并,中断率减少到最大IOPS的1/5到1/4。

SDF中,每个Spartan-6有59%的逻辑区域用于实施功能,其中42%(总容量的25%)用于每个芯片的BCH编码。SDF移除了垃圾回收逻辑、芯片内奇偶校验、静态磨损均衡,减少了16%的逻辑空间,SDF中剩余的FPGA逻辑容量可用于计算,在文献[ ]中已实现。

SDF设备主要作为机械盘的缓存,不使用DRAM做缓存,因为DRAM易失。写操作只有在数据写回到flash中才被确认,故SDF中的写操作都是同步的。SDF通过BCH ECC和软件管理的数据复制保证可靠性,不仅可以有效的保证可靠性,也可节省空间。

3.2 接口设计

首先,将读/写/擦除操作的不对称向上层软件透明。传统的SSD设备提供对称接口,读写单位大小相等。SDF中,读操作单位较小,写操作单位增大到多个擦除块的大小,但这需要写操作的块地址对齐。故写放大被消除,因为在垃圾回收期间没有flash块会既包含有效数据页,也包含无效数据页。

写/擦除单位:8MB,读单位:8KB。

其次,将设备的内部并行行向负载透明。如图5,传统的SSD设备中只有一个控制器,且设备作为单一的逻辑设备软件挂载,而SDF将每个通道做为独立设备,呈现给应用层(比如/dev/sda0到/dev/sda43)。为了开发每个通道的并行性(每个通道4个plane),将SDF中写操作单位设为8MB。

最后,将擦除操作作为一个新的命令,它被软件调用。SDF将所有的原始空间都提供给软件层,并在软件层执行垃圾回收操作。软件层在后台调度垃圾回收操作,或者将垃圾回收的优先级置为很低。

3.3 百度的存储系统:SDF

SDF的存储系统包含三个数据管理子系统:Table、FS和KV,存储的数据格式分别为数据库表格、文件系统、简单的键值对(simple key-value pairs)。Table系统,关键字是一个表的行索引,值是表的行数据。FS系统中,关键字是文件的路径名,值是文件的数据或段。

每个子系统托管在分布式存储系统中。根据关键字,用户请求被散列到不同的hash堆栈(即slices)。Slice使用百度的CCDB系统管理它的KV pairs,KV pair使用LSM tree[ ]管理。与谷歌的BigTable[ ]相似,CCDB使用一个容器存储写请求的KV项。

底层的slice抽象是一个统一的用户空间块设备层,处理由 slices到SDF设备的I/O请求,并规定8MB的写大小,要求每个写请求为一个128位ID。ID的低64 位用于识别写操作的数据块;高64位ID作为关键字。块设备层将ID均匀散列到通道。连续ID的块循环的写入到44个通道。

SDF只在本地服务器的CCDB数据管理软件中使用,故大多文件系统的功能均不需要。为提高效率,我们开打一个设备作为裸设备文件,使用IOCTRL接口尽可能绕过内核,直接访问下层PCIE设备驱动。块设备层实现文件系统的基本功能:块分配、地址映射。SDF与传统SSD的I/O堆栈的不同见图6。SDF的软件堆栈带来的延迟约2-4 us,主要用于处理PCIe接口的中断。

4、测试结果及分析

4.1 测试环境

实验中,建立很多用户节点,用于将KV读写请求发送给服务器节点。用户节点和服务器节点在同一集群中,且配置相同,如表2示。

服务器连接两个10Gbps NIC的开关,SDF安装在服务器上,其规范见表3.与华为Gen3的配置相同。对比设备:华为Gen3、基于SATA的intel 320.华为Gen3中,使用30%的额外空间供内部操作(比如垃圾回收)使用,数据分段,分段单位为8KB。

4.2 实验基准测试

SDF中将请求发送给SDF裸设备,绕过了内核的I/O堆栈。在Intel和华为的SSD设备中,请求通过Linux 的I/O堆栈发送到相应的设备。
实验中,首次运行microbenchmarks,对三种设备,它流出大小为8KB、16KB、64KB的随机读请求以及8KB的写请求。SDF使用44个线程,每个通道使用一个线程,以开发硬件并行性。而Intel和华为只使用一个线程,因为上层只知道有一个通道,通道流出异步请求。SDF的所有请求都是同步流出,且尽可能保持通道忙碌,结果见表4。SDF的写请求大小最小为8KB。

对于数据读和数据写PCIe最大吞吐率为1.61GB/s和1.4GB/s,SDF聚合的flash原始读写带宽为1.67GB/s和1.01GB/s,很接近此结构的上限带宽。SDF擦除操作的开销达到40GB/s。

华为Gen3与SDF有相同数目的通道、相同的芯片和FPGA,但是它的吞吐率比SDF小。64KB或者更小的请求,其吞吐率较小。SDF中,只要请求不大于8KB,都由一个通道服务。但华为Gen3中,逻辑地址空间在44个通道上分段,每段大小为8KB,大请求被分割成多个子请求,分散到不同的通道。故请求数据需要被分割(写请求)或合并(读请求),且每个通道需要服务大量的小请求,这增大了开销,减小了吞吐率。

如图7,显示了在连续8MB的读请求和写请求下,当通道数量变化时,SDF的吞吐率。由图可得,在达到PCIe带宽或flash原始带宽之前,随着通道数量的增加,吞吐率线性增大。

SDF中,擦除操作在写操作之前,显示的、立即执行,故写操作的延迟包含了擦除操作的时间,如图8。

如图8,当写请求为8MB时,华为Gen3延迟在7ms到650ms间变化,平均为73ms,SDF延长为383ms,变化很小。华为Gen3有一个1GB的板上DRAM缓存,缓存命中是的延长很低,但是SDF中没有这个缓存。SDF在每个写操作前显示执行擦除操作,提供了写性能的一致性。当写请求大小增大到352MB时,华为Gen3平均延长达到2.94s,方差减小到25%。

4.3 生产系统

目前生产系统中部署的SDF设备支持网页服务。首先,爬虫收集互联网中的网页,并存储在网页存储库中。库中的网页经过不同的处理步骤(提取摘要、分析网页间的联系、构建逆向索引)。如图9,网页库是搜索引擎的中心部件。CCDB的表格系统处理网页库。

随机读:图10显示了单个slice时,随机读大小为512KB时,不同批处理大小下的吞吐率。由图可知,当批处理大小小于32时,SDF的吞吐率总比华为Gen3小;SDF的高通道并发的优势在随机读请求和一个slice下不能实现。

图11显示了slice为4或8时,在不同大小的批处理下的吞吐率。由图可知,当批处理很小时,SDF的吞吐率比华为Gen3小,当时随着批处理的增大,SDF的吞吐率相应的增大,但是华为Gen3的吞吐率大致不变。

当slice为4或者8时,华为Gen3的8KB的分段方式,使得所有的通道都在工作。当并发请求很少时,华为Gen3也可达到较高的吞吐率;增大并发性,也不能进一步增大吞吐率。当请求大小为512KB,分段大小为8KB,44个通道中,每个通道服务16KB或者8KB的请求,故并发性很高。但调度开销会随着增加,不同通道中异步请求的服务时间会增大某些请求的服务时间。

当批处理足够大,SDF的44个通道逐渐被占用,其吞吐率的增长逐渐变缓,但这种增长并没有停止。当请求数只比通道数大一点点,由于轮询地址映射,随机请求不可能均匀分布到通道,即需要更多的并发请求来平衡负载。

图12显示了批处理大小为44时,不同slice、不同随机读请求大小时的吞吐率。由图可知,只要请求能够并发,不管请求是大还是小,都可以达到很高的吞吐率。通过将44个通道向软件透明,在高并发的负载条件下,软件的并行性可得到充分的利用。

顺序读:I/O密集操作用于构建逆向索引表,逆向索引服务器向Central Repository of Web Pages发送构建逆向索引的请求,Central Repository of Web Pages中储存网页数据。每个网页服务器有一个或者多个slice,每个slice可存储或者访问特定范围的关键字。每个表被不同的slice管理。根据需求,逆向索引服务器构建大小不同的索引表。已构建索引的slice中的I/O操作,在指定的范围内浏览/顺序读出所有键值对。生产系统中为了限制一个slice的I/O请求,每个slice使用6个线程向存储器流出同步请求。如图13显示了不同数目的slice下的吞吐率。由图可知,吞吐率随着slice的增大而增大,当slice为16时,SDF吞吐率达到峰值。

写操作:在CCDB,百度的KV存储系统,所有的写操作在写入存储器之前,累积成8KB的补丁。因为写操作导致压缩操作(即从储存器中读出补丁,归并分类补丁,然后再写回存储器),存储设备服务的I/O请求来源于用户的写请求和CCDB内部的读写请求,均为8MB。

实验中,用户不断发送同步写请求到一个slice。如图14。由于只有在压缩操作中会产生读操作,故途中的读操作代表了内部数据清理操作的强度。当slice增长到16时,SDF的吞吐率增长到峰值1GB/s;slice由16增长到32时,读操作的吞吐率所占的比例减小,这是因为写请求的需求量增大,促使了压缩负荷的降低。另一方面,华为Gen3的吞吐率在slice很小时也很多,但是并不随着slice的增大而增大;且读操作(压缩操作)所占的比例持续降低。

5、方案优缺点

优点:将读/写/擦除操作的不对称向上层软件透明,而不是使用传统的块设计接口,增加了操作的灵活性;将设备的内部并行行向负载透明,上层软件看到的每个通道都是一个独立的设备,故软件能更好的利用设备,最大限度的开发设备的并行性;根据应用环境的特点,SDF中移除了垃圾回收逻辑、芯片内奇偶校验、静态磨损均衡等功能,减少了额外空间的使用。

缺点:SDF的设计针对百度的数据中心,不具有通用性;写操作的单位为8MB,不利于小写操作; SDF中没有DRAM做缓存,故当写操作较小时,平均写响应时间比一般系统大;当只有一个slice时,SDF通道的高并发的优势不能实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值