解释一下unserialiability write。
如图,线程A有三笔同步写操作,分别是:
将Record A1写入Block #1
将Record A2写入 Block #1
将Record A3写入 Block #3
因为是同步操作,所以
正常情况下:SSD上的情况应该是Block #1上存着A2, Block #3上存着A3
而Unserializable的情况是:Block #1存着A1 (应该是A2),Block3上存着A3,导致这种情况有两个可能,第一种是record A2写入操作在record A1之前完成了,第二种是record A2这个操作没有执行。
有些SSD为了 提高Performance会在内部尽量多的使用并发,而不够完善的FTL在遇到突然掉电的时候,则可能出现问题:例如没有把数据真正写入Media,或者Mapping table更新错误,最终导致从host角度来看, 一个已经commit complete的写命令,真正写入Flash的时间可能比另一个稍后commit complete的写命令晚。这种问题称为Unserialiability Write。
用Header里time stamp field可以获得每个命令的实际完成时间,从而判定命令的完成顺序,比较命令的下发顺序和完成顺序,就可以检查出Unserialiability Write。
请教了一下冬瓜哥,Unserialiability可以翻译成时序乱序,翻译这东西,信雅达最好,实在不行也不用勉强,大家看了理解意思就行。