nand flash basics
nand flash basics
nand flash page size, block size
page是NAND Flash上最小的读/写单位(一个page上的单元共享一根字符线Word line),块是最小的擦除单位(。不同厂牌不同型号颗粒有不同的page和block大小。
4KB的页尺寸,256KB的块尺寸。图中4096字节用于存储数据,另外128字节用来做管理和ECC用。
from: https://zhuanlan.zhihu.com/p/423739433
nand flash写之前要先erase
nand flash不支持就地更新(in place update),需要先erase再写,
因为写不能使bit从0变为1,只能从1变为0,erase就是将bit转为1
nand flash顺序、随机读写性能特点
NAND型闪存的特点是读性能和顺序写性能较高,但随机写性能相对较低。闪存随机写性能差的原因,主要由闪存的物理特性导致,即NAND型闪存无法执行就地更新操作,必须先擦除,再写。对于大多数应用而言,随机写的IO频繁度要远高于顺序写,这将导致频繁的垃圾回收操作,影响读写性能
ERASE/TRIM/DISCARD/SANITIZE的区别
总体上来说,ERASE/TRIM/DISCARD三者很相似,SANTIZE差异比较大。总体区别如下表格所示
|
擦除命令 |
|
|||
|
Erase |
Trim |
Discard |
Sanitize |
|
argument |
0x00000000 |
0x00000001 |
0x00000011 |
N/A |
|
unit |
Erase group |
Write block |
Write block |
N/A |
|
Operation |
moving the mapped host address range to the unmappedhost address range |
moving the mapped host address range to the unmappedhost address range |
moving the mapped host address range to the unmappedhost address range |
Removedfrom unmapped user address space
|
|
Read the region applied |
All 0 or 1 (depending on memory tech.) |
All 0 or 1 (depending on memory tech.) |
Don’t care (Some or all of the original data) |
N/A |
|
Interrupt |
N/A |
重置Device(使CMD0,CMD15,或使用eMMC的硬件重置)或电源故障将终止任何挂起和运行中的Trim命令,这样将会导致在这样操作中的数据处在一个未知的状态。 |
重置Device(使CMD0,CMD15,或使用eMMC的硬件重置)或电源故障将终止任何挂起和运行中的Discard命令,这样将会导致在这样操作中的数据处在一个未知的状态。 |
当Sanitize操作完成了之后,在未映射的host地址空间内将不会有数据存在。当Sanitize操作被HPI或Powerfailure中断后,未映射的host地址空间状态将无法得到保护,Host必须写入extendedCSD[165]SANITIZE_START来重新初始化Sanitize操作并允许Sanitize操作来确保未映射的host地址空间里的数据已被清除。
|
from: https://www.likecs.com/show-203366921.html
擦除组(EraseGroup)
Erase翻译过来是抹去、擦除的意思。eMMC中可擦除的单位称为“擦除组”,擦除组是用写入块(writeblocks,Device的基本可写单位)来测量的。擦除组的大小是一个设备特殊参数,当ERASE_GROUP_DEF(ecsd[175])设置为不可用的时候,擦除组的大小在CSD中定义;当ERASE_GROUP_DEF设置为可用的时候,擦除组的大小在EXT_CSD中定义。
当ERASE_GROUP_DEF(EXT_CSD[175])=0时
size of erasableunit = (ERASE_GRP_SIZE[46:42] + 1) * (ERASE_GRP_MULT[41:37] + 1)
size of writeprotect = (WP_GRP_SIZE [36:32] +1) * erasableunit
当ERASE_GROUP_DEF(EXT_CSD[175])=1时
size of erasableunit = 512Kbyte × HC_ERASE_GRP_SIZE(ecsd[224])
size of writeprotect = 512KB * HC_ERASE_GRP_SIZE *HC_WP_GRP_SIZE
from: https://www.likecs.com/show-203366921.html
write block size
512 bytes
SLC缓存
Afterburner™ 是至誉科技开发的性能增强技术,利用 SLC 缓存来提高连序读写速度。与战斗机中使用的afterburner技术不同,至誉科技的 Afterburner™ 技术可在关键时刻提供短暂的额外性能。
Afterburner™ 的原理是将存储装置的一部分 3D TLC 闪存记忆体配置为 SLC 缓存,使 3D TLC 闪存能够模仿 SLC 的性能优势——尤其是写入性能的部分。Afterburner™ 会在不影响性能的情况下自动将写入 SLC 缓存的数据移至 3D TLC 闪存区内。
不同于喷射机的是,至誉科技的 Afterburner™ 技术完全自动化。不需要人为调整,就能带给您优异的存储性能。
from: https://exadrive.com.cn/afterburner-tech/
eMMC 分区管理
https://linux.codingbelief.com/zh/storage/flash_memory/emmc/emmc_partitions.html#user-data-area
https://blog.csdn.net/weixin_44773006/article/details/105125490
nand flash OP
https://www.techtarget.com/searchstorage/definition/overprovisioning-SSD-overprovisioning
https://www.seagate.com/cn/zh/tech-insights/ssd-over-provisioning-benefits-master-ti/
pSLC
https://zhuanlan.zhihu.com/p/258640200
emmc trim, discard, background command
trim,discard命令是将nand block invalidate,这样在garbage collection时将会跳过这些invalid page,不再将他们copy到另外的位置,所以可以减少GC的工作量,这可以提高random write performance,同时因为减少了数据copy,从而对nand flash的寿命是有益的。
trim、discard命令中的地址需要对齐到the boundary of multiple pages size,否则在后续的GC过程中可能会存在某些page是valid的需要copy到另外的地方造成overhead。
background command是host在没有IO request给到device的情况下在将emmc power off(比如手机没有在使用进入睡眠模式)前,host给device发送此command,device收到command后会执行pending activity,比如garbage collection,wear leveling。通过这样方式,host在给device发送write request时,可以降低此时触发进入GC的几率,因为此时FTL已有足够的free page来完成此write request,这样同样可以提高random write performance。
reference: https://cosmoss-jigu.github.io/pages/pubs/trim-kim-gcce14.pdf
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
2021-11-05 ARM kernel panic misc
2020-11-05 How The Kernel Manages Your Memory