数码之家

 找回密码
 立即注册
搜索
查看: 8397|回复: 18

[其他] U盘、SD卡究竟有抹写均衡吗

[复制链接]
发表于 2021-8-21 17:53:34 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
以往,许多人意识中相较于SSD而言,U盘和SD存储卡缺少了动态均衡抹写(空闲时将擦写次数高的块上的热数据和擦写次数低的块上的冷数据做交换)的能力,仅仅具有静态均衡抹写(仅在写入时将数据写入擦写次数较少的块上)的能力。

然而,仔细想想不难发现,SSD主控能够实现静态
均衡抹写的先决条件是主控知道哪些块上存在有用的数据,而哪些块是闲置的。这依赖于主机向SSD/EMMC/UFS设备发送的TRIM指令。U盘和一般的SD卡不支持这样的指令,主控不知道哪些块是闲置的,并且一般可移动设备也不适合在后台交换冷区和热区的数据。

那么,这类低端固态存储其实并不支持抹写均衡?




发表于 2021-8-21 18:14:36 | 显示全部楼层
CZ880不支持TRIM
回复 支持 反对

使用道具 举报

发表于 2021-8-21 18:20:10 | 显示全部楼层
所有的Nand Flash都通过管理软件FTL(Flash Translation Layer)进行管理,FTL的功能就是地址映射管理、垃圾回收、磨损均衡和坏块管理。理论上静态平衡一定是有的,动态平衡可能需要稍微高级点的设备吧

打赏

参与人数 3家元 +30 收起 理由
animefans_xj + 10 謝謝分享
朱小芳 + 10 謝謝分享
fanallen + 10 精彩回帖

查看全部打赏

回复 支持 1 反对 0

使用道具 举报

发表于 2021-8-21 19:47:53 | 显示全部楼层
以前试过SD卡,数据是从头写到尾的,不管哪次开始写,或者之前有没有删除过,都是一路往下写。所以删除的东西很容易数据恢复出来。只有格式化后才会从头开始

打赏

参与人数 2家元 +20 收起 理由
animefans_xj + 10 謝謝分享
朱小芳 + 10 謝謝分享

查看全部打赏

回复 支持 1 反对 0

使用道具 举报

发表于 2021-8-21 23:06:49 | 显示全部楼层

TRIM指令是“擦除”命令,因为NAND闪存的特性是写入前要“擦除”,但是“擦除”命令很费时,你总不希望删一个文件跟拷贝一个文件一样慢吧,所以为了提高性能系统删除文件的时候不会立即“擦除”,但是也不能等写入前才擦除,这样写入就慢了,所以系统会在空闲时段“擦除”,也就是发送TRIM
回复 支持 反对

使用道具 举报

发表于 2021-8-21 23:11:13 | 显示全部楼层
我不是小连 发表于 2021-8-21 19:47
以前试过SD卡,数据是从头写到尾的,不管哪次开始写,或者之前有没有删除过,都是一路往下写。所以删除的东 ...

你所谓的从头写到尾是逻辑上还是实际上?逻辑上连续,实际上未必是连续的,因为闪存有个映射表,一般看不到实际上的区块,只能看到逻辑区块,打个比方某班有40个学生,每个学生有一个座位号,一个学号,学号是不变的就像实际区块,座位号就是经常变化的就是逻辑区块,座位号连续的学生学号不一定连续
回复 支持 反对

使用道具 举报

发表于 2021-8-22 00:00:15 来自手机浏览器 | 显示全部楼层
sd的均衡视控制芯片而定。
我有几片给相机用的slc就是不带均衡的,不过一般都是写满再擦或出发前擦,slc寿命又长,影响不大,也有带均衡的slc sd卡。
TF就是粗用,无所谓slc还是mlc

打赏

参与人数 1家元 +10 收起 理由
animefans_xj + 10

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2021-8-22 20:36:18 | 显示全部楼层
本帖最后由 kkklove 于 2021-8-22 20:38 编辑

写入均衡是主控的功能,跟颗粒没关系,颗粒都只是跟“磁带”类似的存储介质,所有的U盘主控都不具有写入均衡功能。比如你一个128G的U盘/TF卡,你的日常使用只是反复拷贝几十兆的文件,那么你反复擦写的永远是头部的几十兆,后面的一直没用过,当然前面容量的先挂。

打赏

参与人数 1家元 +10 收起 理由
animefans_xj + 10

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-23 09:07:22 | 显示全部楼层
tendycq 发表于 2021-8-21 18:20
所有的Nand Flash都通过管理软件FTL(Flash Translation Layer)进行管理,FTL的功能就是地址映射管理、垃圾 ...

然而问题是如果主控不知道哪些块是空闲的,那么如何来指引数据到写入比较少的块呢?毕竟你删掉了数据只是删了“目录”,主控并不知道这些块上的数据已经不用了,对主控来说,所有块的数据都是有用的。
回复 支持 反对

使用道具 举报

发表于 2021-8-23 09:13:53 | 显示全部楼层
目前生产的主控有肯定是有的。只不过比较弱而已。不会非常积极的进行回收
回复 支持 反对

使用道具 举报

发表于 2021-8-23 09:23:27 | 显示全部楼层
这个问题我们以前探讨过:https://www.mydigit.cn/thread-244931-1-1.html
回复 支持 反对

使用道具 举报

发表于 2021-8-23 09:26:35 | 显示全部楼层
animefans_xj 发表于 2021-8-23 09:07
然而问题是如果主控不知道哪些块是空闲的,那么如何来指引数据到写入比较少的块呢?毕竟你删掉了数据只是 ...

nand最小一个区块128kb,那么一个1T的磁盘只有1024*1024*1024/128个区块,如果每个区块用一个2byte记录使用次数,可以记录6.5w次,slc都足够了,需要1024*1024*8*2字节,即16MB,如果是16G的tf卡,只需要256KB容量。当然这个表格还可以压缩,实际需要的小很多,一般是用sram开机的时候从闪存的某个位置读取,使用过程中不断保存防止掉电丢失
回复 支持 反对

使用道具 举报

发表于 2021-8-23 09:33:24 | 显示全部楼层
animefans_xj 发表于 2021-8-23 09:07
然而问题是如果主控不知道哪些块是空闲的,那么如何来指引数据到写入比较少的块呢?毕竟你删掉了数据只是 ...

再说一下动态平衡。
刚才解释了FTL是怎么记录闪存区块使用次数的,静态平衡就是在空闲块中找写入次数最少的,动态平衡就是系统闲置时,会在有文件的区块中找写入次数最少的,和空闲区块中写入次数最多的,如果两个次数差距达到一定程度(由厂商设置),就会自动把最少的区块内容搬运到次数最多的区块中。
所以实际上功能的实现还是比较傻瓜、简单的,所以只有最早一两年的闪存不带有这些功能,近几年的闪存可以放心用。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-23 09:34:36 | 显示全部楼层
本帖最后由 animefans_xj 于 2021-8-23 09:51 编辑
tendycq 发表于 2021-8-23 09:26
nand最小一个区块128kb,那么一个1T的磁盘只有1024*1024*1024/128个区块,如果每个区块用一个2byte记录使 ...

我假设的情况是: 一片256G (238G)的SD卡内写入了220G的固定数据(冷数据),之后在剩余空间内循环写入&删除10G数据,如果无法实现任何的写入均衡措施的话,由于大多数文件系统未对闪存做优化,写入地址采用就近原则,那么在U盘或是SD卡上这10G数据是否就长期耗损固定的区块寿命


至于FTL、均衡擦写这块通常是由主控或软件完成的而不是闪存自身 (目前大量应用的闪存为2种,一种自管理的如emmc,一种纯闪存Raw NAND Flash,本贴讨论为后者)

软件控制的FTL及均衡擦写亦不在讨论之列 (软件控制的Raw与非闪存管理诸如 JFFS、UBIFS 等为闪存类存储装置设计的文件系统)

回复 支持 反对

使用道具 举报

发表于 2021-8-23 09:58:01 | 显示全部楼层
animefans_xj 发表于 2021-8-23 09:34
我假设的情况是: 一片256G (238G)的SD卡内写入了220G的固定数据(冷数据),之后在剩余空间内循环写入&删除 ...

你这个问题我刚才解释了。
如果是不停写入,那确实会损坏闪存。
如果是写写停停,给主控静态平衡的空闲时段,就不会。
当然最早期的闪存设备可能不具有此功能
回复 支持 反对

使用道具 举报

发表于 2021-8-23 13:26:20 | 显示全部楼层
启用TRIM的SSD,按照只有10GB的空间反复使用,会出现10GB区域擦写较多,被主控和擦写较少的10GB区域调换,调换的过程会额外向擦写较多的区域写入原较少擦写区域的10GB文件,原本较少擦写的10GB区域文件删除,FTL更新。意思就是这样,这也是写入放大。

而不支持TRIM的SSD(包括但不限于U盘、TF卡),在只剩10GB可写区域时,写入的文件经过FTL会被存放在物理地址中的某个位置,不过无论经过多少次写入,都只会写在10GB的物理地址中。至于是否就近,虚拟和物理之间的映射根据什么规律对应,就不知道了
回复 支持 反对

使用道具 举报

发表于 2021-8-23 13:41:43 | 显示全部楼层
animefans_xj 发表于 2021-8-23 09:34
我假设的情况是: 一片256G (238G)的SD卡内写入了220G的固定数据(冷数据),之后在剩余空间内循环写入&删除 ...

我觉得均衡负载在SD卡不存在,只具备被动GC、OP、FTL。新数据经过FTL会被映射到物理地址,但写入物理地址是否是就近就不知道了

打赏

参与人数 1家元 +20 收起 理由
animefans_xj + 20

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2024-9-21 10:51:42 | 显示全部楼层
据说有简单的静态的
回复 支持 反对

使用道具 举报

发表于 2024-9-21 11:36:05 来自手机浏览器 | 显示全部楼层
这个还真不清楚
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-9 19:47 , Processed in 0.140400 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表