Winapi SSD上的逻辑块大小

Winapi SSD上的逻辑块大小,winapi,solid-state-drive,Winapi,Solid State Drive,我目前正在为运行在Win10(用C++编写)上的SSD(CFast卡)定制测试/基准测试。部分工作是阅读和解释S.M.A.R.T。SSD报告的属性。我现在感兴趣的是“写入的主机LBA总数”,即主机系统写入的LBA数量。我缺少的信息是“LBA引用的内存大小是多少,以字节为单位?”。 我已经做了一些关于SSD内部工作原理的家庭作业,但我在这里有点困惑,希望有人能对此有所了解,我显然遗漏了一些东西: SSD中的FTL(闪存转换层)执行LBA到物理地址的映射,以及其他操作(磨损均衡、垃圾收集等) SSD

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

  • SSD中的FTL(闪存转换层)执行LBA到物理地址的映射,以及其他操作(磨损均衡、垃圾收集等)
  • SSD中可单独读/写的最小内存单元是页。在我的例子中,页面的大小据说是16KiB。由此我天真地得出结论,LBA大小将与页面大小相同,即16KiB(或其整数倍)
  • 另一方面,我希望LBA的“扇区”大小由WinAPI的
    GetDiskFreeSpace()
    报告,它报告512B(其中“SectorsPerCluster”=8)
  • 那么,我的想法哪里错了?我可以用什么来计算LBA的实际大小(或者如何得到它的值)?如果LBA大小为512B(或8*512=4KB),LBA将引用我的flash页面的1/32(1/4),这似乎效率低下。我知道需要模拟较旧的存储,但如果允许它编写单个LBA,SSD会做什么?它是否缓存整个页面,重写LBA对应的1/32部分,将其写入空块并更新LBA物理地址表


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

    在我的情况下,页面的大小据说是16KiB。由此我天真地得出结论,LBA大小将与页面大小相同。。。我同意。这对我来说当然有道理。它是否缓存整个页面,重写LBA对应的1/32部分,将其写入空块并更新LBA物理地址表?我认为它必须做,是的,它还能做什么?这只是一个完全令人困惑的链接,我甚至不知道为什么要发布它,但实际上似乎没有任何像样的信息:@PaulSanders谢谢你的链接,我之前看过它,它确实没有什么帮助。我还发现了这个演示:在第7页,提到了子页FTL(以及可变大小的FTL)。对我来说,逻辑块的大小比物理块的小是不自然的(尽管我知道16k逻辑块会导致高写放大)。最后,如果SSD能够以字节为单位报告主机写入总量,那就更有意义了……对不起,你比我领先了很多,但我认为逻辑块总是全部写入。