@pceva.com.cn:SSD工作原理傻瓜教程

标签: pceva com cn | 发表时间:2011-07-29 09:21 | 作者:yuanbor maxiyun
出处:http://yuanbor.blog.163.com
首先我们来看下,作为L63B颗粒,Intel/Micron的34nm 4KB page的颗粒,内部结构是这样的。
image001.jpg

1个page为4KB,1个Block为256个page组成,1个Plane由2048个Block组成,2个Plane组成1个Die,也就是最小的芯片(4GB),X25-M 80G Gen2 SSD上面我们看到10个颗粒,每个颗粒是8GB的,就是由2个Die封装起来的。
Page为最小的读写单位,Block为最小的擦除/编程单位。 (我知道这些很多人都知道,重复重复再重复我也很烦)。
接下来,我来假设一个主控和颗粒环境:
image003.jpg

1个8通道8位的主控连接到8个Die上,为了解释方便,我这里就画了每个Die里的第一个Block。(实际当然要复杂很多)
好了,接下来我们要进行读写了,看清楚,这下面的东西才是你们最想知道的。
1. 现在我先对主机发送一条命令,要求写入4KB。
image005.jpg

主控接到主机发来的指令后,往颗粒1的Block1里写入了1个4KB(占1Page)。
2.继续写入8KB。
image007.jpg

主控接到主机发来的指令后,往颗粒2的Block1里和颗粒3的Block1里各写入4KB。
好了,我们来举一反三,如果写入的是32KB,那么主控就会一下子往每个颗粒的Block1里写入4KB,这样就能发挥出这个SSD主控理论最大的写入带宽,相对4KB来说最好情况下我们可以得到8倍的速度(取决于主控对通道的优化,颗粒当前的文件状况等等)。这样你们就会知道为啥4KB的写入慢,而持续写入SSD并不慢的道理了吧,实际情况下当然不会都写Block1,我这里只是想解释的简单点。这个类似RAID 0的操作模式就是大部分的SSD内部操作情况。
上面是写入的情况,对于读取自然也是如此,4KB的读取就从一个Block里读,而32KB的话就从8个Block里拿,速度是不是8倍提升取决于要读取 的数据是不是平均分布在每个颗粒的Block里,如果32KB数据是存储在图中颗粒1~4的Block1里的(每个Block假设8KB),那么读取就最 多只有4倍的提升了,这也是为啥文件越小传输率越低的道理。
这样经过一段时间之后,所有的NAND Block都被填满了,就会产生如下图的情况:
image009.jpg
这个图显示的是LBA(逻辑块地址),也就是我们的操作系统看到的文件系统结构,而非我们的SSD主控制器看到的结构。
图中红色的地方表示为这个地址里的数据已经“过期”或者“无效”,这些红色地址是如何产生的?在你删除文件的时候,这个地址就“无效”了,里面的文件还在,只不过不用了而已,等待下一次的数据更新并覆盖进去。
对于SSD的主控制器来说,它看到的并不是如图中这样,而是如下图:
image011.jpg


是的,在SSD主控制器看来,这里的文件都是有效的,也就是不能擦除,那么接下来如何?在操作系统的要求下,继续写入数据的话就要在前面LBA红色的地方写入,对于SSD来说,这时候就需要把整个块的绿色读进缓存并更新操作系统发来的数据,之后擦除这整个块并把缓存里的整个更新完的块写回去,这样即使写入4KB的数据,其实也是大费周章的折腾,这就是早期SSD主控制器或者U盘写入放大高的道理,这些SSD的算法上不支持GC,也没有Trim,所以在随机写入的表现上非常的悲剧。

Trim是一条ATA的指令,当最新的操作系统删除文件的时候(包括格式化),同时把这个文件地址发送给SSD的主控制器,让主控制器知道这个地址的文件地址无效了,好了,到此结束,没有下文了。
Trim的完成需要几点:1.SSD的主控制器必须认识Trim指令,也就是固件要支持。2.操作系统必须会发送Trim指令,也就是删除时候会发送。3.操作系统下的控制器驱动必须要支持Trim指令的传输,也就是能够Pass Trim指令到SSD主控制器。
如果SSD的主控制器支持Trim并且有开启的话,他看到的图就会是这样:
8.jpg

是的,基本和操作系统看到的差不多,那些不一样的地址是因为并非删除操作造成的“无效”,而是由于覆盖等原因造成的,所以操作系统并没有发送Trim指令告诉SSD主控这个地址。
那么相比之前的SSD主控制器,我们有了Trim,带来了提升是啥道理哪。
如果光有Trim,提升并不大,因为数据的写入还是需要读取进入缓存并更改整个块,只是Trim后红色的page就不需要读取进入缓存更新了,因为SSD主控已经知道那个地址的数据无效了,只省下来了红色page的读取写入时间,写入放大一样很高,如何才能解决这个问题?
那就是GC,垃圾回收技术:
垃圾回收类似于硬件级的整理,不受制于文件系统和操作系统,而由SSD主控制器全权负责的合并有效文件,擦除无效文件。
我们知道每个SSD至少都有7.37%容量的第一层OP(预留空间),GC技术就可以利用那个空间来作为垃圾回收处理厂。
如图:
image015.jpg

前面说过了,SSD有备用空间,那么合理应用那个空间作为垃圾回收,我们可以把颗粒1的Block1和颗粒2的Block1里的绿色有效page合并到颗粒N的block1里面,并删除掉颗粒1的Block1和颗粒2的Block1.这样我们就用了1个空白Block(颗粒N的Block1换到了2个空白Block) ,并把2个空白Block转到备用区去,这就是垃圾回收操作。
操作后就像下图:
image017.jpg

这样接下的写入就可以直接写入没写入过的颗粒N的Block1里的page和颗粒N+1的Block1。达到写入的性能提升,也避免了写入放大的大幅度增加。
如果没有Trim的支持,而光有GC垃圾回收的话又会如何?(很多人没有开Trim,或者组了RAID开不了Trim的就会像下面这样,如图:
image019.jpg

由于没有Trim,操作系统在删除文件的时候并不会告诉SSD主控这个文件地址为无效,那么只有在更新操作的时候SSD主控才知道这个地址为无效(新数据写入新page,旧page地址被主控映射表标记为无效)。由于红色的page很少,这样就给垃圾回收带来了效率低下的问题,按照这个图中的情况做垃圾回收后会如下图:
image021.jpg

是的,垃圾回收用2个空白Block换来了几个page的空白,这样低下的垃圾回收就类似于基本上Copy了整个Block数据到空白Block,花费的时间很多。所以这里我们知道,Trim提升速度的奥秘是产生了大量的红色page(无效数据),造成垃圾回收的效率提高,类似以1换N的效率。
垃圾回收分为闲置垃圾回收和被动垃圾回收。
所谓闲置垃圾回收就是在机器闲置的时候做提前垃圾回收,保证一定数量的空白Block来保证接下来的写入可以顺利进行。而被动垃圾回收就是到了不能不做垃圾回收的时候了,边写入边垃圾回收。(这时候的性能一般是比较低下的,但是肯定不会增加多余的写入放大)
闲置垃圾回收会增加写入放大的道理是这样的,比如前面图中颗粒3的Block1和颗粒4的Block1内部红色page还是比较少的情况下在闲置时被垃圾回收了,如果我们接下来删除的数据(有Trim)原本是颗粒3的Block1和颗粒4的Block1内部绿色page里的话,就等于做了多余的垃圾回收,因为如果我们可以等到删除的时候,这几个绿色的page变红色后就不用Copy到新的block里了,所以等于说写入放大被增加了。
很多人会问垃圾回收何时做?为啥我明明开Trim了,但是还是没感觉到性能的提升?
一般在全盘的物理地址被写满一次后做,由于主控设计上为了尽量减少没必要的写入放大,所以闲置垃圾回收被限制了一定的容量,也就是说并非所有包含无效page的Block都会被垃圾回收,主控会尽量取其中效率最高的先做掉,还有一点就是,Trim后不一定马上做垃圾回收,而是等待到不得不做的时候做来做。比如镁光C300的0002固件的Trim指令发送完后就会马上做垃圾回收,但是到了0006固件,Trim指令发送完后垃圾回收并没有马上做,而是要等待到最佳时机,所以我们说0006的固件写入放大会低于0002固件,但是性能的恢复会慢一点。这是在耐久度和写入性能之间需要取得的平衡。

你们也知道,SSD的读取很快,但是写入相对较慢,其实影响SSD写性能的并不是很多人认为的擦除操作(一般1.5ms),而是写入(每个page/SLC 250us,MLC 900us)。对于相同平台相同的2块SSD在使用环境不同的情况下,写入性能的差距是很明显的,为何会造成了这么明显的差距?这是因为同样的写入操作,需要花费的时间是不同的。
下面2张图我来告诉你
image025.jpg

 image023.jpg

这是2块一摸一样的SSD,一样的平台甚至操作系统驱动,但是唯一的不同是环境,前面个SSD作为系统盘,后面个SSD偏向于视频编辑,所以在上面2个图中我们得到了完全2个情况,我可以这样说,下图中的SSD写入会强于上图的SSD,因为对下图的SSD来说,要得到2个空Block只要直接擦除掉颗粒1的Block1和颗粒2的Block1就行了,而上面的图里就需要做完整的垃圾回收操作,同样的写入操作由于后台垃圾回收的关系会造成性能上的差距也就不言而喻了,为啥下图会有全红块的情况?因为视频文件一般都偏大,当删除的时候地址是连续的,一整块都变无效(红page)了,所以在垃圾回收的时候效率是极高的,这也是为啥持续写入并不会对SSD耐久度造成太大伤害的道理。说句直接了当的话,SSD在每个时间段的写入性能都会不同,因为性能取决于当前内部碎片的程度。

企业级产品大多都有很高的OP容量,一般为20%以上,这是为啥哪?
最简单一个道理,看图吧:
gc1.jpg

image027.jpg

有谁认为下图的垃圾回收效率会低于上图的?我相信没人吧,更多的备用空间意味着啥?更高的效率,更多的写入空间,磁盘碎片整理程序也是空白空间越大效率越高吧,在企业级这类极限情况下,靠着被动GC来拉开性能的话,备用空间就显得尤为重要了。
没有Trim的时代:OP的容量越大,代表用户的可用空间越小,当写满整个LBA的时候,用户就需要删除文件以得到空闲容量,LBA里文件占的地址page变红了,而在SSD看来还是全绿(无Trim),删除文件后用户可以继续写入(LBA地址覆盖),在SSD主控内的FTL帮助下,操作系统LBA的红色在慢慢变绿,而SSD实际把数据更新到之后没写入过的PBA(物理地址)里,在SSD里看来,PBA—LBA越大,在LBA里红色出现的概率越高,需要复制进缓存的绿色page越少,性能越好。在没有Trim甚至GC的年代,提升OP容量是唯一保证SSD写入性能的方法,在极端情况下OP是非常重要的,如今虽然SSD性能大大增强了,但是OP被大多数企业级SSD产品沿用了下来。
OP不能提升SSD的最高性能,但是却能明显提升SSD的最低性能,越是极端情况下,OP越显得重要,OP还能让SSD的性能下降更慢,恢复更快,减少写入放大来大大提升颗粒耐久度。

相关 [pceva com cn] 推荐:

HTML5@电子商务.com

- never-online - 随网之舞
在这么短的时间内国内组织了这多次和HTML5相关的大规模顶级会议,几乎涉及到国内所有最领先的互联网企业,从中可以看出HTML5的热度. HTML5引起业界如此重视这是好事,但短时间内过热反而说明了业界对于HTML5的理解程度不够,这点和2005年言必称标准和ajax非常类似,等大家真正对标准和ajax深刻理解并应用到生产实践的时候反而在谈论的是利用标准和ajax成就了某项产品而不仅仅是技术本身,HTML5也正经历这样一个过程.

Win32/MFC/COM学习推荐书籍

- Raymond - 博客园-首页原创精华区
以前有不少朋友问关于学习各种技术的推荐书籍的问题,这里把我觉得比较好的一些书籍列一下,希望能起到抛砖引玉的作用就好了:). Programming Windows by Charles Petzold:Charles Petzold的书,Windows编程入门的超经典书籍,很多朋友学习了MFC,可是还是不清楚Windows程序的运作原理,结构和各种API的用法,这本书由浅入深的讲解了用Win32 API编程,特别是和GUI相关的API,强烈推荐.

记首次cn-clojure线下聚会

- Tim - BlogJava-庄周梦蝶
    没有耐心看经过的请直接拉到末尾看slide列表.     这个聚会是由江宏首先提议的,我参与协助. 目的是让长三角地区对clojure语言感兴趣,或者正在使用的朋友当面认识和交流一下. 会议的组织过程一波三折,首先是会议地点本来定在了上海google办公室,但是后来google那边又说不让过去,我再联系了原来淘宝网的同事火狐,经过他的努力和帮助,最终将地点确定在了上海大众点评.

谈谈12306.cn网站性能技术

- - IT瘾-startup
12306.cn网站挂了,被全国人民骂了. 我这两天也在思考这个事,我想以这个事来粗略地和大家讨论一下网站性能的问题. 因为仓促,而且完全基于本人有限的经验和了解,所以,如果有什么问题还请大家一起讨论和指正. (这又是一篇长文,只讨论性能问题,不讨论那些UI,用户体验,或是是否把支付和购票下单环节分开的功能性的东西).

天才少年黄艺博总队长.COM

- evan - FeedzShare
来自: zongduizhang.com - FeedzShare  . 发布时间:2011年05月06日,  已有 3 人推荐. 两三岁开始看“新闻联播”,7岁开始坚持每天读“人民日报”、“参考消息”,如今,黄艺博已在全国重要报刊上发表过100多篇文章,并将其近3000元稿费和变卖废品赚来的零花钱都用在资助与看望孤寡老人.

由12306.cn谈谈网站性能技术

- - 酷壳 - CoolShell.cn
12306.cn网站挂了,被全国人民骂了. 我这两天也在思考这个事,我想以这个事来粗略地和大家讨论一下网站性能的问题. 因为仓促,而且完全基于本人有限的经验和了解,所以,如果有什么问题还请大家一起讨论和指正. (这又是一篇长文,只讨论性能问题,不讨论那些UI,用户体验,或是是否把支付和购票下单环节分开的功能性的东西).

从12306.cn谈大网站架构与性能优化

- - 服务器运维与网站架构|Linux运维|X研究
PS:关于12306.cn网站,前些时间,骂的人很多,但是这网站的压力和架构不是一般非专业人生想得这么简单. 下文是资深架构师陈皓写的关于12306.cn购票网站的架构和性能系列分析,个人认为很有参考价值,转载如下:. 12306.cn网站挂了,被全国人民骂了. 我这两天也在思考这个事,我想以这个事来粗略地和大家讨论一下网站性能的问题.

.CN 根域名被攻击至瘫痪,谁之过?

- - 开源中国社区最新新闻
.CN根域名遭受有史以来最大规模DDoS攻击. 2013年8月25日凌晨,.CN域名凌 晨出现大范围解析故障,经分析.CN的根域授权DNS全线故障,导致大面积.CN域名无法解析. 事故造成大量以.cn和.com.cn结尾的域名无法访 问. 直到当日凌晨4点左右,CN根域名服务器的解析才有部分恢复. 此后,经CNNIC确认,国家域名解析节点遭受到有史以来规模最大的拒绝服务攻击,导致 访问延迟或中断,部分网站的域名解析受到影响.

P1.CN 邀请: 请忽略和举报,切勿注册 [紧急提醒]

- yyq123 - 善用佳软
[摘要] 我在未能坚持原则,而注册某P1.cn网站后,导致我所有的Gmail联系人,收到了所谓的邀请信. 并进而导致一些网友,再次发生类似悲剧,又发邀请给了他的所有联系人. [摘要] 由于不够谨慎、不够坚持原则,在注册品质或技术存在严重问题的P1.cn网站后,导致我所有的Gmail联系人,收到了所谓的邀请信.

域名注册新规明日起实施:恢复个人注册.CN域名

- - TechWeb 今日焦点 RSS阅读
  【TechWeb报道】5月28日消息,中国互联网络信息中心(CNNIC)今日发布公告,宣布将从明日开始实施修订后的域名注册实施细则. 新则规定,.CN和.中国域名注册的主体扩大至自然人.   此次细则修订重点就原《实施细则》第十四条中关于域名注册主体的规定进行了修改,并增加专门章节对域名注册信息的保护进行阐述,同时,针对域名注册、转移、续费等环节进行了修改完善.