winapi - SSD 上的逻辑块大小
问题描述
我目前正在为在 Win10(用 C++ 编写)上运行的 SSD(CFast 卡)进行自定义测试/基准测试。部分工作是读取和解释 SSD 报告的 SMART 属性。我现在感兴趣的一个叫做“Total Host LBAswritten”,即主机系统写入的LBA数量。我缺少的信息是“一个 LBA 引用的内存大小是多少,以字节为单位?”。我已经完成了一些关于 SSD 内部工作原理的功课,但我在这里有点困惑,希望有人能对此有所了解,我显然遗漏了一些东西:
- SSD 中的 FTL(闪存转换层)执行 LBA 到物理地址映射以及其他操作(磨损均衡、垃圾收集等)。
- SSD 中可单独读写的最小内存单元是页。就我而言,据说该页面的大小为 16KiB。由此我会天真地得出结论,LBA 大小将与页面大小相同,即 16KiB(或其整数倍)。
- 另一方面,我希望 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% 正确的,希望它是可以理解的......
解决方案
推荐阅读
- database - 如何在sql plus中的单个查询中输入多条记录
- javascript - 是否有 HTML onUnclick 处理程序?
- python - 当我们设计一个返回 json 字符串的 API 服务时,我们应该使用 ensure_ascii=False 还是 ensure_ascii=True?
- c# - 如何获取所有属性的列表,包括类文件中嵌套对象中的属性
- laravel - Laravel 连接具有中间关系的表
- python-3.x - 如何创建具有相同键值的嵌套字典
- aws-lambda - AWS lambda 内联编辑器不保存更改
- apache - 清漆 HTC 状态 -1 Magento 2 Apache
- linux-kernel - 使用 bcc/bpf 的最大 uprobe 数
- c# - 许多相对较大的对象的 C# 垃圾回收