ssd是啥意思 ssd化学药剂( 三 )


  • Wear Off:
什么是Wear off?就是逻辑门充放电次数过多 , $SiO_2$绝缘层的绝缘能力遭到损耗 , 逐渐不再绝缘 , 无法保证有充足的电荷 , 也就是Cell已经物理损坏了 。
更糟糕的是 , 损坏的Cell会拖累整个Page , 因为最小的寻址单位是Page 。 这个Page的逻辑地址会被重定向到其他的Page上
MLC因为器件复杂 , 可擦写的寿命小于10000次 , 而SLC则十倍于MLC , 小于100000次 。
ssd是啥意思 ssd化学药剂

文章插图


如何解决?
之前我们提到SSD在写上有会极大的写惩罚 , 而且会加速Wear off , 有什么好的解决方案?
  • 方法一:拆东墙补西墙重定向写
  • 如果同一个Cell被高频擦写 , 那么它被损坏的几率当然增大 。 如果一个Page之前都被写过了 , 我们不如把所有针对这个Page的写请求重定向到Free Space上.
  • 这样的好处在于对Free Space的写是不需要提前擦除的 , 减少了擦除次数 。 不过这些被写过的Page也不能浪费了 , 我们可以把他们标为"Garbage" , 等待比较多的时候 , 再批量回收 。
  • 这样做的目的是将写操作平衡到所有可能的Block中 , 降低单位时间内的每个Block擦写次数 。 问题是 , Free Space会越来越少 , 重定向写的几率也会越来越少 , 最后降为0.
  • 而且因为有重定向 , SSD内部很定需要维护一个地址映射表 , 需要SSD的CPU能维护一定比较复杂的程序 , 称为wear Leveling(损耗平衡算法)
  • 方法二:定期清垃圾
  • 前面我们说过SSD自己是不知道哪些空间是Free Space , 但是文件系统知道 , 可以在操作系统里面运行一种Wiper , 可以不断扫描 , 然后把空闲空间通知给SSD , 由SSD来执行擦除工作 。
  • 不过这种清除工作只能定期执行
  • 方法三:持续清除体内垃圾
  • 有没有办法可以让文件系统在删除之后实时通知SSD 。
  • 可以使用ATA指令里面一个功能——TRIM , 现在已经集成在很多SSD的Firmware中了 。
  • 方法四:IO 优化
  • 之前的方法主要着力点在Free Space 。 我们也可以采用另一种思路 , 对IO进行优化 。
  • 比如Delay write 。 现在有两个针对同一个地址的写IO , 在Write1还没写到硬盘之前 , Write 2就到了 , 控制器直接用Write 2来覆盖Write 1  , 这个操作是在内存里面的 , 省去了Write 1 写入硬盘的过程 。 这种机制为“写命中”的一种情况 。
  • 问题就是数据可能不一致 。 比如有如下IO:Write 1 , Read 2 , Write 3  , 此时如果用Write 3取代Write 1 , 那么Read 2 读出了Write 3 的内容 , 实际上Read 2应该读Write 1的内容 , 所以数据不一致 。
  • 另外还可以使用Combine Write , 对机械硬盘来说 , 如果控制器一段时间内收到多个写IO , 而这些写IO的地址在逻辑上是连续的 , 可以将小写IO合并为大IO , 一次性写入 , 节约了SCSI指令周期 。
  • 对SSD来说 , 逻辑地址和物理地址存在一个映射关系 , 我们读数据的时候是根据这个映射关系来的 , 所以可以任何地址的小IO整合为大IO , 直接写到Free的Block中 。
  • 因为SSD需要对数据进行合并以及优化 , 所以SSD对收到的写数据一般采用Write Back模式 , 即收到主机控制器的数据立即返回成功 , 然后异步处理 。 这样就存在一个风险 , 如果掉电了 , 数据就会丢失 , 所以SSD是需要掉电保护机制的 , 一般使用一个超级电容来维持掉电之后的脏数据刷盘 。


    特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。