固态硬盘选择有缓存的,还是没有缓存的,他们之间的区别是?
这个问题注定会有分歧,特别是一些自媒体在吹嘘无缓盘多么多么优秀。
有缓 和 无缓,指的是 SSD 上面是否集成了 DRAM,也就是和电脑内存一样的内存颗粒。
DRAM 的主要用途包括:
1,存放运行中的固件
2,存放完整的映射表
3,读写路径的缓存
SSD 因为 NAND 工作原理特性,即不支持覆盖写入,加之最小读单元和最小擦除单元不匹配,导致逻辑地址和物理地址并不能做到严格对应,
如,需要写到 LBA1 的数据,原本 LBA1 对应 PBA1,但 PBA1 不支持覆盖写,需要先将包含 PBA1 的整个 Block 都擦除,再进行写入。此时如果粗暴不加思考擦除,那么,所有该 Block 中的有效数据就要都先读出来,再写回去,会导致大量的无效开销。所以正确做法是找到 可以直接写的 PBA X,把 LBA1 的数据写入,并通过映射表,记录 LBA1 与 PBA X 的对应关系,同时断开 LBA1 与 PBA1 的连接。
管理这张映射表,做到高效,是 SSD 品牌的核心技术,谁效率高,谁 NB。这个就不展开了。
DRAM 存放这个映射表,数据需要读取或者写入,主控去查这张表,找到对应的 PBA,并读取或写入里面的数据。
那么,你觉得控制器从盘内的 DRAM 读这张表速度快,还是通过 PCIe 去电脑的 DRAM 里面读取,更快?
另外,由于 映射表常见体积为 1000:1,即 1TB 的 SSD 需要 1GB 的映射表,2TB 需要 2GB。但对于只有8GB、16GB的电脑来说,划分 1GB、2GB 出去,也是极大的开销,加上一些集显的电脑,本身还要留很多内存用于显存。因此无缓盘使用 HMB 技术,也不过是使用 64MB 的系统内存。而64MB,也只能对应 64GB 的数据,距离动辄 1TB、2TB 的 SSD 来说,实在太小了。
因此,64MB 放什么?放大致目录,以及常用文件的映射表等等。可以让 SSD 主控知道去哪里找真正需要的映射表就可以了。这里又是厂商的机密技术了,没法展开,我也不知道。
结果就是
在 3DMARK、PCMARK 这种测试工具下,因为需要先写测试数据,再读,只要保证这些测试数据的映射关系在这64MB里面就好了。
CDM也是差不多的路子。
顺序写顺序读?那也是可以优化的,毕竟读了 LBA1 就要读 LBA2,可以提前找,提前准备。
结果呢?就是到了随机读取环节,LBA地址随机,不按套路出牌,在真正的随机负载下,性能稀烂。
你说的这些,影响我打游戏吗?影响我看电影吗?
答案是,不太影响。毕竟大部分日常使用,不涉及真正的大规模的随机读。偶有随机,也基本在体感上可以下意识忽略,或很难感知。
所以
说了这么多,选有缓还是选无缓,可能答案很清楚了。
有缓肯定更好,但确实很多时候不是必需的。
如果你搞本地AI,涉及 KV Cache、RAG 检索这种,可能会有比较强的随机读取的需求,建议选有缓,或干脆企业级。