数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2257|回复: 3

[Other] 固态硬盘SSD读写变慢的根源在哪里?

[复制链接]
发表于 2022-12-2 10:14:23 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在剖析读写延迟的来源之前,我们还是先来回顾一下固态硬盘的架构。从下图可以清晰的了解到,固态硬盘主要由主控,DRAM缓存以及NAND闪存构成。主控负责的任务主要是Wear Leveling, Garbage Collection(垃圾回收), Bad Block Management(坏块管理), ECC纠错等. 同时,在主控中,与主机对接的是Host interface,Host与固态硬盘的之间的通信协议可以是PCIe,SAS或者SATA等,和NAND闪存对接的是NAND controller.



了解了固态硬盘的结构之后,我们需要再认识一下主机和固态硬盘数据通信的逻辑关系。从主机的角度来看,对固态硬盘进行的操作均是逻辑上的读写内容。而从NAND闪存的角度讲,主机要求的逻辑上的读写,实际到NAND闪存后,变成了物理上的读,写,擦除等执行操作。



我们知道,固态硬盘的好坏以及用户体验集中归因于带宽,IOPS,延迟,一致性等。其中,固态硬盘的延迟,大部分原因在于NAND闪存的读写延迟造成的。
垃圾回收是固态硬盘延长寿命,减少读写次数的手段。在垃圾回收过程中,会增加数据的搬迁,擦除等操作,所以垃圾回收也会带来一定程度的写入延迟。不过,这个写入延迟并不是直接的,而是由DRAM等造成的间接延迟。



从上图,我们可以看到,在4KB随机写, 队列深度QD=1的情况下,有些固态硬盘的写入延迟超过了200ms。虽然这200ms并不能让我们有深刻的感觉,但对于高性能系统而言,这个200ms是灾难性的。
如果说,写入延迟是垃圾回收间接造成的,那么读取延迟则是垃圾回收带来的直接恶果。因为,在垃圾回收启动之后,固态硬盘的主控将需要做垃圾回收的区块中的数据搬迁到spare区域,然后在数据搬迁完成后再擦除整个区块的内容。这个过程影响了固态硬盘的读取速度。这也是当我们的固态硬盘在写入一段时间之后,性能会变慢的原因,因为内部启动了垃圾回收的步骤。



从上图,可以看到,在4KB随机写, 队列深度QD=1的情况下,有些固态硬盘的读取延迟超过了35ms。
如果对NAND闪存先发了一个read block1 page2的命令,之后接着再发个erase Block0的命令,这个时候,读取延迟会因为后面的erase操作增大了延迟了,此时延迟的大小基本等于NAND读取时间tR加上块擦除时间tErase.



同样,如果对NAND闪存先发了一个read block2 page3的命令,之后接着再发个program Block0 page1的命令,这个时候,读取延迟会因为后面的program操作增大了延迟了,此时延迟的大小基本等于NAND读取时间tR加上后面program的时间tPROG.


发表于 2022-12-2 10:47:08 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2022-12-2 13:44:54 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2022-12-2 18:57:38 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2022-12-2 19:16:17 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|数码之家-技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2026-7-7 18:00 , Processed in 0.124800 second(s), 8 queries , Gzip On, Redis On.

Powered by Discuz!

© MyDigit.Net Since 2006

快速回复 返回顶部 返回列表