码农必备:SSD编程秘籍29条(中)

荷兰阿姆斯特丹的一个码农Emmanuel Goossaert写了一系列文章,介绍程序员为SSD编程的秘籍。也有中文翻译,本文介绍其中的要点总结。

 

数据特征

 

14. 不要写小于页的数据

 

NAND Flash的页大小一般是8KB或16KB,很多SSD控制器内部数据管理单元大小就是物理页甚至物理页的倍数。如果写数据小于这个值,只能把整个页读出来,其中一部分改成新的,再把整个写下去,所以一次写=读+改+写,耗时久而且写了多余的数据。尽管有些SSD内部有很大的DRAM,可以管理4KB的页,但是这种SSD总是少的,而且大多是企业级SSD。

 

所以:写数据最好大于16KB。

 

15. 写数据大小要对齐

 

就是最好是16KB的倍数。

 

16. 小数据的写先缓存起来

 

如果有很多零碎的数据写,那么先缓存在内存里面,等凑够16KB甚至更大了再写到SSD。很多企业级应用,数据是累积成日志文件写下去。例如Twitter的fatcache就是凑够了1MB才会写到SSD。

17. 相关的数据一起写

 

SSD里面有很多个NAND Flash芯片,当来了一大笔写的时候,会把数据分散到每个芯片上,这样读的时候并行起来,速度就很快。所以,为了利用这个特点,我们如果需要同时读一些数据,就把它们放在一起写。

码农必备:SSD编程秘籍29条(中)

 

18. 读写尽量分开

 

SSD里面有缓存和预读等机制,小数据的混合读写会影响这些机制的发挥,导致读写性能下降。所以最好把读集中在一起,写集中在一起。例如要修改1000个文件,不要读一个,改完,写一个,再改下一个,最好是读出1000个文件,再统一改好写下去。

 

19. 无效的数据打包删除或覆盖写

 

SSD里面一直在做垃圾回收,旧的数据一直在搬。逻辑页被Trim或重写后,旧的数据就作废了。所以旧的数据打包作废,就使得它们对应的旧块有效数据很快下降,SSD就会挑出来搬走,搬的数据量就小。如果分散开作废,那有可能作废了一些后,SSD就开始搬旧的块,搬走的有些数据其实没必要,因为马上就被作废了。

 

20. 随机写并不是永远都慢

 

机械硬盘随机写很慢,因为每次换地址就要重新寻道,探针机械移动很慢。而SSD不一样,没有寻道时间。如下图,当随机写的数据大小逐渐变大的时候(L->M->H),最后达到16KB*芯片(不一定是物理芯片,而是最小能独立写的芯片上模块)个数左右的时候,随机写和顺序写速度差不多了。一般这个大小是32MB一下,所以,当数据量为32MB的时候,可以随机了,没必要再刻意的连起来写。

码农必备:SSD编程秘籍29条(中)

 

引用:

原文:http://codecapsule.com/2014/02/12/coding-for-ssds-part-1-introduction-and-table-of-contents/

中文翻译:http://blog.jobbole.com/69969/

微信搜索ssdfans,扫描或长按下面二维码图片关注ssdfans微信公众号,每天看一篇SSD好文!

你想在SSD领域积累更多人脉、学习核心技术、掌握最新动态?我们建了一个微信群,方便SSD Fans们讨论SSD,闪存和存储相关的话题。群友既包括各大公司SSD、存储方面的技术精英,行业大牛,也有很多SSD爱好者。

欢迎各位SSD行业人士、使用者和爱好者加入,谢绝猎头,广告(可联系contact@ssdfans.com通过公众平台发布)。

 加入后请修改昵称为:姓名(或昵称)-公司(或领域)-职业

例如:张三-Marvell-SSD FW QA
蛋蛋-SSD Controller-FW开发

微信加nanoarch为好友拉你入群。

转载请注明来自SSD技术学习网,本文地址:http://www.ssdfans.com/?p=346
除非注明,SSD Fans网站文章均为原创,欢迎转载,转载必须注明出处,作者和链接,并保留二维码图片!
signature

发表评论

电子邮件地址不会被公开。 必填项已用*标注