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


文章插图


SSD控制器芯片负责向所有的NAND Flash芯片执行读写任务 , 同样也就通过指令的方式来运作 , 因为地址信息和数据信息都在这8位的总线上传送 , 加上总线位宽太窄 , 所以一个简单的寻址都需要多个时钟周期才能仅完成 。
我们知道芯片容量越大 , 地址就会越长 , 寻址时间也就会越长 , 对小块随机IO , Flash会随着容量的增加而变得越来越低效 。

ssd是啥意思 ssd化学药剂

文章插图


读写数据流程
下面来看一下读写操作都需要做哪些工作?
如何读数据
当需要读某个Page时 , Flash控制器将这个Page的字线组电势置为0 , 可以将电势值解码成1或者0 , 放到SSD的RAM Buffer中 。
从上述过程就可以看出SSD的最小IO单位为1个Page
ssd是啥意思 ssd化学药剂

文章插图


如何写数据
Flash芯片要求在修改一个Cell中的位之前 , 必须擦除这个Cell 。 其实这个擦除动作就是将一个Block一下全放电 。 也就是每次擦除只能一下擦除整个Block , 将所有的Cell全置1 。
这就是SSD的一个非常致命的缺点 , 它不能单独擦除某个Page或者Cell
擦除完毕以后 , SSD会以Page为单位进行写入 。
ssd是啥意思 ssd化学药剂

文章插图


SSD的问题SSD天然的缺陷
Flash芯片在写入数据的时候有很多效率低下的地方 , 这是Flash芯片的通病
  • 擦除前需要将整个Block清掉(Erase before overwrite)
  • 上面我们讲到过如果要写入数据 , 必须先Erase整个Block , 而不只是把一个Page或者Cell给清掉 。 相比于机械磁盘 , 多了擦除的这个步骤 。
特别是如果仅仅需要更改某个Page的内容 , 却需要擦除整个Block , 性能浪费很严重 。 我们可以看看修改只修改某个Page的过程 , 
  • 在擦除之前 , 先将Block的数据读入RAM中 , 
  • 然后擦除整个Block , 
  • 再更新RAM中的对应Page , 写回Flash芯片中
这也是SSD的缓存通常比较大的原因 。
这就叫做写扩大 , 我们姑且称之为写惩罚
这个时候我们会问 ,  为什么如果只需要修改一个Cell , 却需要把Block放电?
因为Cell之间是存在干扰的 , 如果有的在充电 , 有的在放电 , 则会产生不可控的干扰问题 。 所以不如直接将所有的先放电 。
那 为什么需要一次擦一个Block , 而不是一个Page?
这是管理粒度的问题 , 粒度越小 , 管理开销越大 , 所以一次擦一个Block是一种比较折中的方案 。
不过幸好 , 向Free Space写入数据时 , 因为里面没有被写过 , 所以不需要擦除 , 当然没有写惩罚 。
但是另一个问题又来了 , SSD如何知道哪些是Free Space?
我们知道只有文件系统才知道硬盘上哪些数据是有用的 , 它会使用元数据来进行记录 , 即使是删除一份数据也只是修改了元数据 , 而不是把数据真正的删除掉 。
这样看来 , SSD其实是不知道硬盘上哪些地方是所谓的Free Space , 它只会把数据往从来没修过的地方写 , 所以Free Space会越来越少 。


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