学习断电好榜样 (2) – Data Pattern

原创内容,转载请注明:  [http://www.ssdfans.com]  谢谢!

 

这帮外国弟兄设计的Pattern比较有意思,写入是以Record为单位的,一条record由Header和data组成,Header里有以下Field:

Field

Reason

Checksum

用于检查bit corruption和shorn writes

Timestamp

用于检查unserializable writes

Block Number

用于检查 flying writes

Raw Block Number

用于检查容量和workload code

Worker Id

用于检查unserializable writes和重新生成workload

Operation Count 

用于检查unserializable writes和重新生成workload

Seed

用于重新生成workload

Marker 

Header Boundary

 

 

Checksum容易理解,如果有bit错误,可以通过比较checksum发现;

通过Timestamp可以知道每一笔数据被写入的时间,在检查是否存在unserializable writes时会用到;

Marker方便把不同的Header 区分开来;

Block Number:这个是数据应该写入的Block,与数据实际的Block进行比较,可以检查flying writes的问题

Raw Block Number这个field似乎是因为解决测试程序bug而设计的,我没看明白,有兴趣的朋友可以去看原文;

Worker_id, Operation Count和Seed这三个field有两个用途:

  1. 检查unserializable writes
  2. 通过哈希算法根据这三个field得到各个操作的顺序

 

而data部分则用Header填充而成想要的长度。一个Header的长度可能就几个Byte,而Record的长度设定为4K,用Header拼成data部分也有不同的方法:

 

最简单的方法,是所有Record里的data部分都用一个完全相同的header去填充,这样的话所有的block里写入的内容一致性会非常高(除了Header部分其他都一样),这样的后果是即使发生shorn writes的情况,也没法发现。

 

另一个方法,是用随机数填充data部分,这样每个record内容都不一样,可以发现shorn writes的问题,但是因为是随机数据,没法知道细节,不知道写了一部分的数据是从哪里来的。

 

所以比较好的方式是用当前这个record自己的header部分去填充自己data部分,这样哪里错,错从哪里来都比较直观。

 

上面的方法虽好,但是扛不住有些SSD自带压缩功能,直接把data部分里重复的header给压缩掉再写入NAND,解决方法是在写入的时候把数据跟一个随机掩码进行XOR,读出来的时候再用相同的随机掩码恢复数据。

 

下篇讨论Unserializability write的问题。

分类目录 未分类.
扫一扫二维码或者微信搜索公众号ssdfans关注(添加朋友->点最下面的公众号->搜索ssdfans),可以经常看到SSD技术和产业的文章(SSD Fans只推送干货)。
ssdfans微信群介绍
技术讨论群 覆盖2000多位中国和世界华人圈SSD以及存储技术精英
固件、软件、测试群 固件、软件和测试技术讨论
异构计算群 讨论人工智能和GPU、FPGA、CPU异构计算
ASIC-FPGA群 芯片和FPGA硬件技术讨论群
闪存器件群 NAND、3D XPoint等固态存储介质技术讨论
企业级 企业级SSD、企业级存储
销售群 全国SSD供应商都在这里,砍砍价,会比某东便宜20%
工作求职群 存储行业换工作,发招聘,要关注各大公司招聘信息,赶快来
高管群 各大SSD相关存储公司高管和创始人、投资人

想加入这些群,请微信扫描下面二维码,或搜索nanoarchplus,加阿呆为微信好友,介绍你的昵称-单位-职务,注明群名,拉你进群。SSD业界需要什么帮助,也可以找阿呆聊。