f: Z' m, \7 g$ K/ j% r) }1 U* U而无缓SSD是啥样的? * m2 l$ f0 }/ d6 b, A. ^ ~$ F" y& |顾名思义,没有独立DRAM缓存的SSD则称之为DRAM-Less无缓SSD,例如致态TiPlus7100、宏碁掠夺者GM7等等都属于这个范畴。) D/ m' J/ @- c8 p/ ~' P
目前国产SSD大量采用了搭载联芸MAP1602系列主控的最新无缓方案,会采用HMB技术,通过占用一小部分电脑内存(一般在40MB以内)来替代SSD上的独立DRAM缓存颗粒,以达成存储简化版的FTL映射表的目的。 . z) Q7 z2 x' h& U Y7 l9 y8 K5 y/ `( f0 R) `8 P% _事实上,由于消费级SSD普遍有着SLC Cache技术的加持,所以在SLC Cache容量范围内可以提供更加精简的FTL映射结构、更低的读写延迟和更高的混合性能,这也使得HMB技术得以借用较小的主机内存容量,来达成接近有缓SSD的FTL映射表查找效率。: y2 L' [5 W4 k2 d: |) `
DRAM-Less无缓SSD在随机读写性能方面稍弱于有缓SSD,不过在目前日趋成熟的HMB技术和SLC Cache机制的加持下,二者在中轻度负载场景中的使用体验已经非常接近了。" _+ L% S$ x i; Z9 Y
4 f) o1 t2 Q3 J同时,无缓SSD还有价格便宜、发热更低的优点,尤其特别适合适合笔记本、迷你主机等散热空间狭小的设备,这也是目前更推荐大家入手的SSD种类。 5 r) s# k" B/ D' F: I" B5 \5 I+ W; z- s# S0 b
宏碁掠夺者GM7这款DRAM-Less无缓SSD,可以看到在GM7的PCB板上没有DRAM颗粒,只有一枚主控芯片和四枚NAND闪存颗粒: 8 W6 R4 L& ~: U. Y$ f8 r3 a对比宏碁掠夺者GM7000和GM7的背面,可以看到身为无缓SSD的GM7只有一枚标签贴纸,并没有其他零件了: ) Y% c( c2 U6 _, U+ L0 w- K. @* K. r0 `' q# z
0 ^, d) A' k2 L7 V2 r: |. f1 [8 q综合来看,旗舰有缓SSD虽然性能更强,但是个人觉得其实更适合发烧友和生产力用户选择,像家用、办公以及玩游戏等需求的话,其实发挥不出有缓SSD的性能优势来。 / y z) ^6 j; ]2 T5 w5 n" y! Q; B: a& @+ S" b5 L" a" C4 |
二、DRAM缓存的作用是什么? 4 R7 j D; @) c上一节只是简要介绍了SSD的有缓/无缓方案,下面我们就从技术的角度分析,来看看DRAM缓存的作用到底是什么。' r& i) o0 b9 A) \( f) A/ t1 w
该部分内容有点枯燥,看不进去的朋友可以直接跳转至结尾看选购总结哈。 1 `, q% Y! \4 n" r8 P7 G1.DRAM缓存可以存储FTL闪存映射表 ' \" T, v. `; x; d- z闪存颗粒的物理特性决定了它不能覆盖写入,一般来说,其擦除以Block(块)为单位,而写入以Page(页)为单位。* m, {: x/ j* y- l
Page中含有非常多的存储单元,是闪存颗粒写入数据的最小单位: Y+ ], a( t) v% S D6 {9 k5 Z" I# H; K0 n3 i" L
同时Block是Page的上级单位,一个Block中有很多个Page: N C% l0 P7 {7 R% r4 i( \
4 E1 J+ V! p- o+ ?8 o4 D; f/ r
一般来讲,足量的消费级有缓SSD中,DRAM缓存的主要作用是存储FTL闪存映射表,其与闪存颗粒的容量比例为1:1000,FTL映射表在SSD中就像一本书的目录一样,储存着数据从逻辑地址到物理地址的映射关系。 9 y, a4 B. ~- X2 h( X # A4 A3 e* c, N/ o9 u1 z% `; |当主机发来读命令时,SSD能根据需要读取的逻辑数据块查找FTL映射表,获取这些逻辑数据在闪存空间所在的位置,后端便能从闪存上把对应数据读到SSD内部缓存空间,然后前端负责把这些数据返回给主机。 0 `, \2 }6 s2 ^4 Y1 j5 S& M0 W) D7 O, h/ v; r+ h9 n
由于DRAM缓存的读写性能和低延迟表现要远远优于闪存颗粒,所以有缓SSD会充分利用这个特性,在SSD通电时将保存在SSD预留空间中的FTL映射表写入DRAM颗粒中。! `# r0 C( H* Y: U6 e' S' D) T$ p
" M7 s( K# M+ Z I
咱们想要读写闪存颗粒中的数据时,可以通过DRAM缓存中保存的FTL快速找到相应位置,从而提高一块固态硬盘的随机读写速度、降低查找数据保存位置时的延迟。清注意,这个机制对于随机读写的加成较大,对顺序读写的性能影响很小很小。) `5 }& D: b6 R
2.DRAM缓存还可以在脏盘状态下提高读写性能- _0 C4 h3 ?4 C1 V k% F
在使用闪存颗粒作为存储介质的SSD中,如果我们要对一个已有数据的Page进行写入,那么必须先要把这个Page所在的Block中的数据读出,暂时保存到一个空白的Block中,待第一个Block清空后再把所有数据写进去。% J! i9 ~4 X+ K) o, N: R
在我们眼里一个简单的对SSD的写入数据操作,一旦遇到脏盘情况下,就会分解成先读再擦后写(READ-ERASE-WRITE)三个步骤,并在过程中会造成写入放大问题。; c% T* j! |; X! O/ e: c0 p \
! w- ]7 J# X1 \4 }5 v% R3 g
显而易见的,这会增加闪存颗粒的写入量,消耗写入寿命,同时在写入过程中还会提高写入延迟、影响写入速度。4 S) t- a& D8 F
如果在这个写入过程中,SSD上还有我们在操作系统中已经删除、但是只做了标记但未实际进行擦除的数据的话,还需要经过一个更加复杂的垃圾回收+擦写操作,进一步影响SSD的写入量和性能。 1 F# P# d! V& p* V* ?而有缓SSD中的DRAM缓存由于速度、延迟等方面的性能明显要好于闪存颗粒,所以在向一个Block写入数据的过程中,如果Block中的Page中已有数据,那么可以使用DRAM作为中转站,先将Page中的数据转移到DRAM中,然后将Block整个擦成空白块后填入需要写入的新数据,最后将DRAM中转站里保存的原Page数据挪到其他Block里。2 S. g& A* Z1 v. a; B$ U5 g4 @
; ]( M( F. z4 S ]9 n5 K) Y
发现了吗?在这个过程中由于DRAM的参与,还减少了一部分对闪存颗粒的写入量,同时还加快了整个R-E-W的过程,减少了写入延迟。 7 m q) j1 v$ w, T) v8 Q3 b- ?' ~9 k5 q接下来让我们把问题进一步复杂化,当SLC Cache容量耗尽时,有一个需要将原本SLC Cache空间内的数据重写回TLC模式的过程,我们称之为SLC Cache释放,在这其中要面临大量擦写操作。而在固件的加持下,部分SSD的DRAM缓存也能在这个过程中起到缓解写入放大的作用。7 ^( P% `2 k8 H( W
这也即是说,独立DRAM缓存在SSD中其实起着万金油的作用,这也是各大存储厂商的消费级旗舰SSD以及更加昂贵的企业级SSD一般都会采用有缓方案的原因。 $ _9 T1 O1 e* f5 m1 T# Q+ M' K Q0 y$ G* |7 a
/ s `6 u! X; k) [! w7 S
三、有缓SSD、无缓SSD,用起来有啥区别? * S1 a7 Q, z: Z D. P& b" w& ?现在技术原理我们已经了解了,那么有缓SSD和无缓SSD在我们实际使用过程中,到底有啥不一样的体验呢?: N; b4 a9 Y3 b3 v
1.性能 ' o6 ^+ M, u. R5 H s& X& V/ C/ S有一个冷酷的事实是,有缓SSD与无缓SSD在中轻度使用场景中很难有可察觉的区别。 5 K* s* F; ~+ h像CrystalDiskMark这类测试软件,在进行测试前会先向SSD中写入一个测试文件,然后在这个测试文件的范围内进行一系列读写操作,这也意味着我们看到测速结果,都是基于刚刚写入SLC Cache中的状态。# [8 X" z2 P7 d8 Z, ]" K
前面我们已经讲过,由于SLC Cache对于FTL的精简效应等优势,在此范围内无论顺序还是随机读写都会有所加成。 / y, s& h' [ _. m8 _这也是有缓SSD与无缓SSD在CrystalDiskMark测试项目中,并不会拉开太大差距的主要原因。 : k) `. \; B& C! s L g: @/ u+ }2 V) B" Z/ ]( k
以宏碁掠夺者GM7000和GM7为例,其二者在CrystalDiskMark的测试结果就堪称相差无几,顺序读取速度均能达到Intel平台的7150MB/s上限附近,顺序写入速度也能达到6500MB/s左右,甚至GM7凭借优秀的固件和算法加成,在Q1T1 4K随机写入速度上还反超了GM7000一筹,达到了94MB/s。- l3 \* S3 {: d: ~
大家平时使用SSD时,最常用到的高负载场景应该就是大文件拷贝的场景吧,而在这种场景下,有缓SSD与无缓SSD其实也拉不开什么差距——大家都是消费级SSD,都针对低队列读写有专门优化,在速度方面其实相差无几。# k; P! q# }& F& O4 y) O# f5 ], H
7 W# a. M9 R$ D. E8 c6 ~1 G
而有些新手朋友在意的能持续写入多大容量不掉速的能力,其实更多的是与不同SSD之间的SLC Cache方案有关系,这基本上依赖于厂家对于SSD固件策略的调校。. i& Y8 t8 Z; H! x9 ~, ~
7 f7 n5 S" H, q/ A) x7 R在SSD容量足够大的前提下,成熟的SLC Cache策略给用户带来的不止是爆发式写入性能的提升,而且更加精简的FTL映射结构、更低的延迟和更高的混合读写性能,以及在SSD高占用状态下降低频繁R-E-W擦写造成的性能与寿命损耗问题都是重要关键。' j5 P( O$ M. m
以宏碁掠夺者GM7000 2TB为例,下图为RAW格式下全盘顺序读写测试(128KB,Q32T1)的曲线图。可以看到,GM7000在全盘范围内的顺序读取曲线都相当稳定,基本全程都能保持在6800MB/s左右。而写入曲线方面,GM7000的缓内写入速度能稳定在6400MB/s,并且SLC Cache为650GB左右,占据了全盘可用容量的1/3,明显是和SN850X类似的典型全盘模拟SLC方案。& S% H6 [+ u. C. P
在SLC Cache写满之后,随后而来的是大约150GB的TLC直写过程,速度能达到2000MB/s左右。那么在SLC Cache已经耗尽的情况下,是如何实现这一小段TLC直写的呢?从数据写入量上来推测,个人盲猜GM7000应该是将总容量7%左右的一级OP也拿出来提供写入了,与此同时主控还在进行SLC Cache释放的操作,最终实现了比一级OP略大的TLC直写阶段。. [& A/ R0 O9 T) G, O! W% O
0 g& p4 z. m. @* c在全盘写入的最后第三段,GM7000的主控要同时进行SLC Cache释放和新数据写入的操作,负载压力达到了最大化,所以写入速度进一步下降。在此过程中,前半程由于主控释放SLC Cache的Write Back操作非常积极,使得部分写入数据落入了空白块中,写入速度有短暂回升到TLC直写速度的波动,最后随着空白块耗尽,终于进入了稳定的Write Back+R-E-W低速区间,速度在750MB/s左右。& m* d" C7 d' _8 S; F. h. q8 X
- \% B0 \8 n; o接下来我们看看宏碁掠夺者GM7的表现,同为优秀的国产SSD,这款SSD采用了另一套不同的SLC Cache方案。: W- G' \# z0 T% W! Z5 b* e
7 g' A6 d3 z. z9 l1 U, Y; l/ l
宏碁掠夺者GM7与致态TiPlus7100类似,SLC缓存容量给的是国产SSD中比较少的,空盘状态下也只提供了10%左右的空闲容量进行SLC Cache模拟,而没有使用的半盘模拟方案。 ! u! Q1 T* X' W( W3 VSLC Cache容量并非越大越好,用于模拟SLC的容量越大,可提供的爆发式写入时间越长,但是也会使得垃圾回收阶段压力更大,进而导致全盘平均写入速度越慢。6 _: B: D9 W' z
宏碁掠夺者GM7的SLC Cache方案更像是综合了性能与体验之后的折中选择,整体主控调校方向更倾向于优化平均写入速度。 2 l1 B# O- m5 s: g, p) R* y5 u x说起来,200G的SLC Cache对于普通家用用户完全是足够用的了,再强行加大SLC Cache也不会带来什么体验上的提升,反而不如充分利用长江存储颗粒强悍的直写性能,给主控腾出手来,减少一段速度最慢的垃圾回收阶段浪费的时间。% P L& B0 x m# A