百度面向大规模存储系统的软件定义Flash

  百度是国内最早大规模使用SSD/Flash的互联网公司之一,早在2007年,就开始在搜索引擎中大规模使用SSD。在过去的几年中,百度数据中心部署了数以十万计的SSD,支撑了每天60亿次的搜索请求及其背后的广告、大数据实时分析处理、CDN等系统。在百度多年部署使用SSD的过程中,积累了很多经验,也发现了传统SSD的一些缺陷。在实际系统中,传统SSD只能为上层软件或存储系统提供硬件裸带宽(raw bandwidth)的40%左右,甚至更低。因为Flash必须先擦除再写入的特性(Out-of-place Update)以及需要7%~50%的预留空间(over-provisioning space)来处理随机写,传统SSD还需要提供10%左右的空间来做Flash通道之间的奇偶校验,因此,传统SSD只能提供硬件裸容量(raw capacity)的50%~70%给上层应用或存储系统。另外,传统SSD的性能往往会在使用过程中出现抖动,或随着剩余空间变小而降低。考虑到百度大规模的数据中心和大规模的SSD部署,传统SSD的不足给我们带来了巨大的成本和效率开销。

  我们认为非常有必要按照大规模存储系统的需求重新设计SSD的软硬件架构,以彻底解决其不足。于是我们提出“软件定义Flash”(SDF,Software–Defined Flash)的概念。SDF是一个软件硬件协同的系统,把底层Flash通道的接口暴露给上层软件,软件可以管理数据的分布,以充分挖掘硬件的并发性;同时针对大规模存储系统的特性设计软硬件架构,消除了传统SSD的冗余空间和奇偶校验空间,使得几乎所有的Flash空间都能提供给上层软件使用。百度自行实现了SDF所有的软件和硬件设计,并部署在内部存储系统上,实现了99%的容量利用率和95%的带宽利用率。相对于传统同配置的PCIE SSD,性能提高了3倍,成本降低了50%。

  传统SSD的特性与不足

  SSD是采用NAND为介质的存储设备,与机械硬盘不同,它不需要任何机械操作,因而功耗很低,带宽比机械硬盘高1个数量级,IOPS高两个数量级。随着NAND颗粒不断降价,SSD应用更加广泛,基本成为数据中心的标准配置之一。但其每GB成本仍然比机械硬盘贵1个量级以上,因此,充分发挥SSD的潜能就显得非常重要。

  NAND有如下两个特性,决定了SSD的一切设计取舍。

  先擦除才能写(Out-of-place Update):一个物理块必须先擦除才能写入新数据。

  该特性会影响随机写性能,因为更新的数据不能直接覆盖旧数据,而是必须先写到一块已擦除过的新块中,等写到一定程度,需要把老的、无用的数据统一删除,以腾出空间给新数据。这个过程需要merge操作,非常耗时。因此传统SSD必须预留很大容量(一般为7%~50%),作为写缓存,以降低merge的代价。一般越高端、性能越好的SSD冗余空间就越大。也就是说,一个本来有1TB空间的SSD,为了确保高效,用户只能使用500GB。这意味着落到用户的每GB成本就更高,但如果冗余空间较小,往往性能也没法满足用户的需求。

  我们选择一款SATA接口的SSD硬盘,通过调节冗余空间,在不同比例下做随机写测试,可以看到,冗余空间为7%时相对于0%有接近4倍的性能提升,冗余空间为50%相对于7%有40%多的性能提升(如图1所示)。

  

  Out-of-place Update还会导致一个问题是写放大系数(Amplification Factor)。SSD在做垃圾回收的过程中要做merge操作,会把一些有效数据搬移到新块,并把原来的块擦掉,导致了额外的擦除。如果写放大系数太大,会大大降低SSD的使用寿命,一般写放大系数都在2~3之间。

  传统SSD的大部分设计努力,都是在保证一定性能的前提下,尽量降低冗余空间的比例和写放大系数。

  单个NAND的性能非常有限,必须利用多个NAND并发操作来达到较高的性能。

  一般一个页的读延时是几十μs,写延时是ms量级,一个NAND芯片内部会有多个plane,一个SSD会有多个NAND通道。SSD控制器会把数据尽量strip到多个通道中的多个plane中,以通过并发访问提高总性能。传统SSD的硬件架构如图2。

  

  一个SSD控制器包含十个到几十个Flash通道,每个通道一般包含1~2个NAND颗粒,每个NAND颗粒有数个到十几个Flash plane。如果用户要写一块数据到SSD,这时SSD控制器会负责把数据拆成小块,并发写到多个通道中,以充分利用硬件的并发性。如果要读数据,SSD也会根据之前写的映射关系找到对应的通道,将数据读出来。传统SSD的控制器需要承担数据stripping、layout和mapping管理等策略,很难针对不同应用需求、不同访问模式做到最优,而且会增加硬件复杂度,提升成本。

  NAND还有一些其他特点,如读写以为页单位,擦除以块为单位,数据必须经过BCH校验,使用过程中会出现坏块,每个块都有固定的使用寿命等,这导致了SSD设计还有其他一些妥协,如磨损平衡、地址映射等。

  软件定义硬件原则

  所谓软件定义硬件,从系统角度来看,有两个原则。

  应用驱动。

  软硬件协同系统。

  从实现的角度,有如下三个设计原则。

  硬件要简单,可控性大于智能化。

  尽可能暴露硬件底层接口。

  软件从层次化变成竖井化。

  软件定义Flash

  基于这样的设计原则,在2011年初,我们开始着手设计面向大规模存储需求的下一代SSD——SDF。

  SDF拥有与传统SSD完全不一样的架构和设计,我们针对海量存储系统的数据访问模式设计,底层硬件接口暴露给上层软件,取消了传统的Linux文件系统和I/O栈,主要创新包括以下几点。

  全新的硬件架构

  底层Flash通道暴露给上层软件,软件可直接管理数据的layout以充分挖掘硬件的并发能力。SDF的架构如图3所示,可以看到,其架构和SSD有明显不同。在SDF中,每个Flash通道对于上层软件来说都是一个独立的小SSD,软件通过自己定义的调度器来管理数据的布局,使得多个通道能比较容易同时工作,这样实际带宽可以在不同场景下都能达到硬件裸带宽的极限。

  

  每个Flash通道具有一个独立的FTL(Flash Translation Layer)控制器,实现了简单的地址映射、坏块管理等功能。

  全新的软件架构

  消除了传统的Linux文件系统和I/O栈,我们自行研发了轻量级的用户态文件系统,大大降低了I/O请求延时。SDF的软件架构如图4所示。

  

  基于从层次到竖井的设计原则,我们可以看到,SDF的软件栈,只保留了最底层的硬件驱动,其他层次都没有了,Linux的文件系统也变成了用户态的一个轻量级文件系统。

  不对称的读写粒度,写单位是2MB,刚好是一个擦除块的大小;读单位是8KB,刚好是一个页的大小。在互联网大规模存储系统中,为了提高I/O性能,一般都会在内存中把随机写合并成顺序写,典型系统包括Google的LevelDB,Facebook的Haystack,以及百度的新存储体系。可以把持久化写的粒度设置成NAND的擦除块大小,并且硬件不做stripping,这样就不需要预留冗余空间,也不需要垃圾回收,因此写放大系数恒为1。

  全新的系统视角

  通过软硬件结合的办法保证系统的可靠性。因为存储系统本身已对数据进行了3副本备份或做了Erasure Code,因此并不需要硬件提供非常苛刻的可靠性保障。而传统SSD除了对数据做了必须的BCH校验,还在通道之间做了横向的奇偶校验,奇偶校验数据存储在一个独立的通道,相当于消耗了一个通道的容量。SDF取消通道间的奇偶校验,把之前存放奇偶校验数据的通道用来存放数据,相当于多增加了10%的存储空间。

  具体的设计细节和设计原则,可以参考百度发表在ASPLOS 2014上的论文《SDF: Software-Defined Flash for Web-scale Internet Storage Systems》。

  SDF性能数据

  2011年设计的SDF采用25nm的Micron MLC NAND,控制器采用Xilinx的FPGA,硬件板卡由第三方ODM提供,百度自行设计了Verilog RTL代码、驱动代码和用户态文件系统代码。

  在大压力测试时,性能数据如表1。

  

  百度SDF和“市场某主流PCIE SSD”采用同样的硬件配置,但性能更好。SDF的读带宽达到1.59GB/s,是PCIE 1.1 x8实际性能的上限,带宽利用率99%;写性能达到0.96GB/s,是44个Flash通道写聚合性能的上限,写带宽利用率达到96%。

  我们可以通过定义不同的软件调度策略来激活不同的Flash通道,通过不断增加工作的通道数量,可以看到,其读写性能也线性提高(如图5),可见SDF的设计具有非常良好的扩展性。

  

  结论

  百度提出软件定义硬件的概念,并依此原则设计了软件定义Flash(SDF),我们将SDF部署在实际生产环境,每GB成本比市场上主流的PCIE SSD降低了50%,性能提高了3倍。同时在ASPLOS、EUROSYS、ISLPED等全球顶级计算机系统和体系结构会议发表论文3篇,发明专利9个,取得了良好的应用效果和学术成果。

  SDF除了可以应用在百度的大规模存储系统中,也可以用在其他基于LSM-tree的存储系统,如Haystack、LevelDB等,具有很好的适应性。

时间: 2024-07-31 18:42:54

百度面向大规模存储系统的软件定义Flash的相关文章

百度地图 覆盖物-如何在百度地图上添加自定义图片,Flash API好像没有提供。

问题描述 如何在百度地图上添加自定义图片,Flash API好像没有提供. 如何在百度地图上添加自定义图片,Flash API好像没有提供,默认的是marker,而且属性icon类型是DisplayObject.

[文档]一种面向大规模数据处理的数据库引擎

一种面向大规模数据处理的数据库引擎 王毅,刘长城,马建庆 当数据量从GB 级上升至TB 级甚至PB 级时,具有高性能的并行数据库在保证扩展性和容错性的同时计算代价会很高.针对该问题,设计一种面向大规模数据处理的并行数据库引擎FlexDB.利用Map Reduce 的并行计算框架作为通信层,调度和协调集群中各节点的计算和通信.实验结果表明,FlexDB 的系统性能接近于并行数据库,并且具有较好的扩展性和容错性. 关键词:海量数据:扩展性:容错性:Map Reduce框架:并行数据库 [下载地址]h

360搜索上线以来,百度首次大规模反击

百度开始大规模反击360搜索,用过通过360搜索访问百度新闻.MP3.地图将跳转至百度首页. 今年8月16日,360综合搜索上线,其中新闻.MP3.地图搜索皆跳转至百度相关频道,网页搜索.视频则由360自身提供. 8月22日,百度首次小范围反击360.用户通过360搜索访问问答,跳转至百度知道页面被提示:"您是通过"奇虎搜索"访问至百度知道,如希望获得完整优质的百度搜索体验,您可以把百度设为首页或把百度添加到桌面."在搜索框右侧,显示:"推荐 : 把百度添

百度面向全国提供500个销售类职位

本报讯 (记者 孟飞鸿) 在跨国公司纷纷裁员及减少招聘名额的形势下,国内互联网企业再度逆势展开大规模招聘. 昨日,全球最大中文搜索引擎公司百度宣布,为进一步提高销售人员水平.同时缓解社会就业压力,公司将于近日启动一项新的招聘计划,在年内面向全国提供500个销售类职位,包括四川本地在内的全国各大高校应届毕业生将成为这一招聘计划的主要受益者.

【干货】刘知远:面向大规模知识图谱的表示学习技术

演讲全文: 我们为什么要关注表示学习这个问题呢?我们可以看关于机器学习的一个重要公式,这个公式有三个部分组成,第一部分是关于数据或者问题的表示,在表示的基础上我们要去设计或者构建一个目标,也就是说我们要实现一个什么样的目标. 在设定了目标之后,开始看怎么实现这个目标,这就是优化的过程.对于机器学习来讲,表示是这三个环节中最基础的部分,也是我们为什么会关注它的重要原因. 对于自然语言处理和多媒体处理而言,所处理的数据是典型的无结构数据.为了让计算机更好地对这些数据进行智能处理,如何很好地表示它们是

从云存储到云生态,百度面向开发者推出“百度开放云”

还记得有期湖南台<天天向上>做了一个百度专场,里面有个百度云布道师,无论主持人说什么,都万能的回复一句"可以存在云里".昨天的百度云媒体开放日上,布道师除了重复"可以存在云里"外,还多加了一句"云生态".布道师表示,百度的云生态包括面向个人用户的"百度云"和面向开发者的"百度开放云". "百度云"主要面向个人用户,提供照片.文档.音乐.通讯录等云数据的同步.分享.备份等云存储

百度启动大规模校园招聘

9月15日下午消息,百度今日宣布,经过一段时间的酝酿和准备,将全面启动2010年秋季校园招聘计划,无论招聘人数,还是覆盖范围,今年的校园招聘规模都将大大超出往年.鉴于百度此前刚刚推出全新的"框计算"概念,此次大规模的招聘活动也被业内认为是百度为未来框计算研发的揽才之举. 据百度方面介绍,今年的百度校园招聘活动将分为预热报名期.校园宣讲期.笔试期和面试期四个阶段,计划为旗下的14个核心技术部门招聘600名左右的顶尖人才.而除了网罗技术人才这一使命外,百度今年还特别加大了开放管理培训生的招

百度开始大规模推广网盟推广业务

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 中国最大的搜索引擎百度正在把商业盈利模式扩张到站外,跳出单纯搜索营销. 10月13日,百度正式发布其全新的"网盟推广"营销服务.百度方面集结了30万家互联网联盟成员网站,以供广告主在其中灵活地投放广告.这是百度扩张其收入来源的一个重要手段. 目前,中国网民上网起点有两种方式,一种是通过搜索引擎查询网站,随后进行浏览;另一种

大数据时代到来 百度大规模机器学习算法受追捧

"我在机器学习领域已经超过10年了,今天主要跟大家分享一下,百度是通过什么技术来容纳百亿数据特征,并且让学习效率提升千倍.让模型分钟更新.将模型训练算法速度提升十倍的." 3月15日,百度联盟大数据机器学习技术负责人夏粉在第48期百度技术沙龙现场上说. 机器学习是人工智能研究领域中一个重要的方向,在现今大数据背景下,面向大数据量的机器学习,通常需要做分布式的算法,来容纳上亿特征和数据.本期的百度技术沙龙,夏粉为大家分享了大规模机器学习和数据挖掘方面的话题和研发成果. 百度联盟大数据机器