您现在的位置: 万盛学电脑网 >> 网络安全 >> 网络基础知识 >> 正文

【原创】镁光M4 128G 256G测试

作者:佚名    责任编辑:admin    更新时间:2022-06-22

neeyuese 发表于 2011-6-12 19:18

【原创】镁光M4 128G & 256G测试
本次测试我会分成如下部分:

1、SSD专业术语解释:适合真正想去了解SSD的朋友,如果有兴趣和时间,强烈建议先看这部分。
2、产品的品质和稳定性:SSD是拿来放数据的,也就意味着稳定是第一位的,没有稳定的前提,一切速度都是浮云。
3、产品的包装和内部拆解:产品包装和内部裸照,各大网站都有不稀奇。(个人照相技术很烂,不要鄙视我)
4、产品的标准测试部分:喜欢看分数的朋友可以直接跳到这段。
5、产品的新特性:对比上一代产品,新产品提高或者下降的地方。
6、产品的极限测试部分:我个人有蹂躏倾向,重口味,不喜勿入。
7、产品的使用部分:系统安装和使用上的注意事项。
8、测试总结部分:自己到后面去看,这里没有。^_^


---------------------------------------------------------

第一部分: 专业术语解释


逻辑区块地址(Logical Block Address, LBA)
逻辑区块地址(LBA)是一种描述计算机存储设备上资料所在区块的通用机制,一般用在像硬盘这样的辅助储存装置上。LBA可以指某个资料区块的地址或者某个地址上所指向的资料区块。如非特别说明,一般硬盘上所谓一个逻辑区块的大小通常为512字节(Bit)。对于机械硬盘来说,一个数据区域由它所在的磁头(C)、柱面(即磁道 H)和扇区(S)三个数据所唯一确定。逻辑块寻址模式把硬盘所有的物理扇区的C/H/S编号通过一定的规则转变为一线性编号,在访问硬盘时由硬盘控制器内的地址翻译模块将这种逻辑地址转换为真正的物理地址。因为机械硬盘旧数据可以直接被覆盖,所以逻辑<->物理地址是固定的。到了固态硬盘(SSD)就没那么简单了,因为闪存(NANDFLASH)具有必须先擦除才能再次写入的工作特性(写入以页(Page),擦除则以块(Block)为单位),所以固态硬盘的逻辑<->物理地址是不固定的,需要经过转换才能应用在如今的文件系统上,做这工作的转换层就叫做FTL。(后面有关于FTL的说明)

由于闪存的工作特性,数据不能像普通机械硬盘那样被直接覆盖。当数据第一次写入SSD的时候,由于SSD内所有的NAND颗粒都为已擦除状态,所以数据能够以页为最小单位直接写入(页大小一般是4K,详情参考具体颗粒数据手册),SSD上的主控制器,使用了逻辑地址和物理地址的映射表来管理闪存。(逻辑地址我们一般指操作系统所记录的地址即LBA,而物理地址则是闪存上数据实际存在的地址即PBA)。当有新的数据写入,需替换旧数据时,SSD主控制器会把新数据写入到另外空白的闪存空间上(状态为已擦除的),然后更新地址映射表把逻辑地址指向新的物理地址。而旧地址的内容就成了无效的数据,但是若要在上面再次写入数据,就需要首先擦除掉这个无效数据(闪存的工作特性,1个块一般含128~256个页)。那么问题来了,闪存有编程的次数限制(由于闪存不能覆盖,写前必须擦除,所以习惯叫编程),这样每次的编程/擦除就叫做1个P/E(program/erase cycles)周期,大家应该都知道MLC一般是5000~10000次,而SLC是10万次左右(详情参考具体闪存颗粒数据手册)。

FTL(Flash translation layer) 闪存转换层
        
我们的操作系统通常是按照扇区大小写入数据(512Bit)。不幸的是,闪存的读写单位是页(大小4KB),且闪存的擦除操作是按照块来的(1块=128~256 页),更要命的是写入数据前必须要先擦除,也就是不能覆盖,这就给我们现有的文件系统带来了麻烦,很明显需要更高级、更繁琐的文件系统来解决这个问题。为了减轻操作系统的负担(不使用高级复杂的文件系统),我们可以用软件来把闪存的操作习惯虚拟成以独立的扇区操作(512Bit),这样就出现了闪存转换层(FTL)。它存在于文件系统和物理介质(闪存)之间。有了FTL,操作系统就可以按照扇区操作了,不用担心碰到之前说的擦除/读/写问题。一切逻辑地址到物理地址的转换,全部由FTL包了。FTL算法,说穿了就是一种逻辑地址到物理地址的映射,因此,当文件系统发送指令说要写入或者更新一个特定的逻辑页,FTL事实上是把数据写入到一个不同的空闲物理页并且更新映射表(逻辑地址映射物理地址的关联),并把这个页上包含的“旧数据”标记为“无效”。(更新后的文件已经写入新地址了,旧地址的文件自然就失效了)。可以说有了FTL,我们才能像平时的机械硬盘那样操作。很明显FTL的转换速度也直接影响着SSD的传输性能。
  

假设在page0上写入数据(物理地址n),接下来写入数据到page1(物理地址n+1)。接着page0数据被更新,但是更新后的数据并不是覆盖上去,FTL会把它写入到地址(n+2)上,然后标记(地址n)为“无效”。经过多次这样的操作后,这个块上就会装满了许多“有效”及“无效”的数据。如果要再次写入到这个块,就需要先擦除整个块的数据,当然就需要先把所有“有效”数据复制到另外的空白块上再进行擦除。这样的操作就是“垃圾回收”(GC,相关知识在后面会介绍)
WL (Wear leveling) 磨损平衡 - 确保闪存的每个块被写入的次数相等的一种机制。
通常情况下,用户逻辑地址空间里的数据更新速度是不同的:有些区域会经常更新,有些则不常更新。很明显,那些经常更新的数据所占用的闪存块会被快速的磨损掉,而不常更新的数据占用的闪存块磨损就小得多。为了解决这个问题,需要让每个闪存块的编程次数尽可能保持一致:这就需要对每个页的读取、编程操作进行监测,在最乐观的情况下,这个技术会让整个SSD的颗粒物理磨损程度接近并同时报废,当然由于闪存块之间的耐久度个体差异也不小,综合来说这只是个最理想态。磨损平衡技术依赖于逻辑和物理地址的转换:也就是说,每次主机上应用程序请求相同的逻辑页地址时,闪存控制器动态的映射逻辑页地址到另一个不同的物理页地址,并把这个映射的指向存放在一个特定的”映射表“里。而之前过期的物理页地址就被标记为”无效“并等待随后的擦除操作。这样一来,所有的物理块就能被控制在一个相同磨损范围,并同时“老化”。磨损平衡算法分静态和动态。动态磨损算法是最基本的磨损算法:只有用户在使用中更新的文件所占用的物理页地址被进行磨损平衡。而静态磨损算法是更高级的磨损算法:在动态磨损算法的基础上,增加了对于那些不常更新的文件占用的物理地址进行磨损平衡,这才算是真正的全盘磨损平衡。解释得更简单点 - 动态磨损平衡就是每次都挑最年轻的闪存块来用,老的闪存块尽量不用。静态磨损平衡就是把长期没有修改的老数据从一个年轻闪存块里面搬出来,重新找个最老的闪存块放着,这样年轻的闪存块就能再度进入经常使用区,其实概念都很简单,就这么一句话,实现却非常的复杂,特别是静态磨损平衡。




GC(Garbagecollection) 垃圾回收 - NAND颗粒“清洁工”
  

接着上面FTL的图,开始做“垃圾回收”,把所有“有效”页复制到新的空白块里,然后把旧的块整个擦除。垃圾回收是SSD里一个非常关键的操作,对性能起到决定性的影响作用。
垃圾回收的效率取决于整个块里包含的“有效”页数量,“有效”页越少,垃圾回收的效率就越高,因为需复制的“有效”页数量少,所花费的时间也就少。下面那张图中把Block X和Block Y里的“有效”页复制到Block N里,然后擦除Block X和Y作为备用的“空白块”。由前面的磨损平衡机制可知,磨损平衡的执行需要有“空白块”来写入更新后的数据。当可以直接写入数据的备用“空白块”数量低于一个阀值(厂商在主控固件里设置,一般是全盘闪存容量写满后),那么SSD主控制器就会把那些包含“无效”数据的块里的所有“有效”数据合并起来放到新的“空白块”里,并删除“无效”数据块来增加备用的“空白块”数量。这个操作就是SSD的垃圾回收机制。闲置垃圾回收:很明显在进行垃圾回收时,会消耗大量的主控处理能力和带宽,从而造成处理用户请求的性能下降,SSD主控制器可以设置在系统闲置时候“预先”做垃圾回收(提前垃圾回收操作,保证一定数量的"空白块"),让SSD在运行时能够保持较高的性能。闲置垃圾回收的缺点是会增加额外的“写入放大”,因为你刚进行垃圾回收的“有效”数据,也许马上就会被更新后的数据所替代,变成“无效”数据,这样就造成之前的垃圾回收做无用功了。被动垃圾回收:每个SSD都支持的技术,对SSD主控制器的性能有相当要求,在垃圾回收操作消耗带宽和处理能力的同时处理用户操作数据,如果没有足够强劲的主控制器性能则会造成明显的速度下降。这就是为什么很多SSD在全盘写满一次后会出现性能下降的道理,因为要想继续写入数据就必须一边做垃圾回收一边做写入操作。简单点来说:GC的本质是在包含“无效”页和“有效”页的块中把“有效”页复制到新的只包含“有效”页的块,擦除旧的“无效”页所占用的块,之后这个被“回收”的块就能被用来写入新数据(空白块)。而闲置GC,就是提前做GC,让"空白块"更多,这个行为是固件“主动”去做的。Trim能直接产生“无效”页,没有Trim的时候,对SSD主控制器来说,被更新的数据,旧数据就是“无效”的。应该说GC是每个SSD的必须要有的基本功能,根本不能算是什么需要特别提起的功能,每次看到厂商宣称支持GC,我都觉得很可笑。除非他们还在使用U盘时代的算法,每写一个页,都要写入整个块,那样就不需要 GC了,但是会造成任何时候都一样非常烂的性能。(Trim的相关知识在后面介绍)
OP(Over-provisioning)预留空间

预留