首页 > 解决方案 > SSD 上的逻辑块大小

问题描述

我目前正在为在 Win10(用 C++ 编写)上运行的 SSD(CFast 卡)进行自定义测试/基准测试。部分工作是读取和解释 SSD 报告的 SMART 属性。我现在感兴趣的一个叫做“Total Host LBAswritten”,即主机系统写入的LBA数量。我缺少的信息是“一个 LBA 引用的内存大小是多少,以字节为单位?”。我已经完成了一些关于 SSD 内部工作原理的功课,但我在这里有点困惑,希望有人能对此有所了解,我显然遗漏了一些东西:

  1. SSD 中的 FTL(闪存转换层)执行 LBA 到物理地址映射以及其他操作(磨损均衡、垃圾收集等)。
  2. SSD 中可单独读写的最小内存单元是页。就我而言,据说该页面的大小为 16KiB。由此我会天真地得出结论,LBA 大小将与页面大小相同,即 16KiB(或其整数倍)。
  3. 另一方面,我希望 LBA 将具有GetDiskFreeSpace()WinAPI 报告的“扇区”大小,报告为 512B(“SectorsPerCluster”= 8)。

那么,我在哪里想错了,我可以计算的真正 LBA 大小是多少(或者我怎样才能获得它的价值)?如果 LBA 大小为 512B(或 8*512 = 4KiB),则 LBA 将引用我的闪存页面的 1/32 (1/4),这似乎效率低下。我知道需要模拟旧存储,但如果允许写入单个 LBA,那么 SSD 会做什么?它是否缓存整个页面,重写LBA对应的1/32部分,将其写入空块并更新LBA-物理地址表?

编辑:很抱歉使用“LBA 大小”,我知道它在语义上不是 100% 正确的,希望它是可以理解的......

标签: winapisolid-state-drive

解决方案


推荐阅读