ssd 损耗平衡算法
来源:互联网 发布:淘宝首页广告位价格 编辑:程序博客网 时间:2024/04/28 15:23
ssd摆脱了机械寻道的怨念,大幅度的提高了IOPS,但是由于它的材料的物理特性和机制,又带来了2个新的问题,1是大量的写惩罚(可擦除的最小扇区尺寸过大),2就是cell(存储位单位的晶体管)在频繁的充电放电过程中氧化失效。因此采用平衡消耗算法,每次写操作都重定向到一个新的cell区域,使其所有的cell均摊写操作,从而延长整体cell的寿命。(说白了就是大家均摊伤害,要死一起死)
下面是详细描述
1 一块ssd在没写过之前,会进行erace操作(全盘cell放电),这时候全盘的page(一个page由多个cell组成,多个page又组成一个block)都处于free状态。
2 这时候有写操作进来了,写操作2种,一种是create区域(create file or append file),还有一种是update区域(update file),目前盘未写过,只有是create区域,ssd会从free区域里取出适合大小的pages来存储数据,倘若以后是update区域,ssd会先把要覆写的那些pages标记为garbage状态,然后再从free区域里取出pages(优先用新block里的page)来存储新数据,然后再把逻辑地址重新定向到新的page
3反复的写操作,会使得garbage page 越来越多,从而组成一个个完整的 garbage block,garbage block到达一定比例的时候,ssd会对这些block做erace操作,使其变成新的free block,简单的说就是合并回收操作
很明显的看的出free block回收的速度是赶不上free block消耗的速度,其实过不了很久,free block就耗尽了,到时候没有free block可用,只能分配那些被用过的block里的剩余page,而对于此类block的部分page写操作,目前ssd只能先读出该block原有的有效数据,然后整个block做erace清零,然后再进行充电操作,把新老数据写进去。 看这个描述就知道是个恶心的过程。
有2点解释下
为什么修改一个block里的部分数据,要先对里面cells整体进行erace操作,然后再根据具体数据去进行部分充电?
是因为电流的干扰
好比现在5个cell 里面的数据是10101 现在改为01010(1充电 0放电),那么5个cell之间互相充电放电,电流会相互干扰,影响电势,所以干脆全部放电,清零,然后再把要1的位充电即可。
为什么回收要以block作为最小回收对象,而不是page?
这个充电放电的最小单元有关,ssd的最小单元就是block,不以page作为最小充电对象是因为制作工艺的问题,ssd的page个数和block不是一个数量级的,page去充电 电路和导线太复杂,还做不了那么细。
- ssd 损耗平衡算法
- 对比嵌入式文件系统损耗平衡算法
- 对比嵌入式文件系统损耗平衡算法
- 对比嵌入式文件系统损耗平衡算法
- SSD 之WL磨损平衡
- SSD 之WL磨损平衡
- SSD算法 模板 匹配
- SSD 算法detection_evaluate_layer解读
- SSD算法训练
- SSD算法详解default box
- SSD算法的MXNet实现
- SSD算法的改进版之R-SSD
- 平衡树构造算法
- 平衡树 算法摘记
- 算法-平衡二叉树
- 【算法】平衡数
- 【算法题】平衡数
- 损耗标准
- POJ 3252 Round Number
- 你知道吗?红酒可以美容养颜的!
- Android牟利之道(五)--界面嵌入多盟广告
- VMWARE 网络桥接方式下,指定网络连接
- oracle net manager
- ssd 损耗平衡算法
- POJ 2503 Babelfish
- FreeNAS 7 和 8 的版本比较
- POJ 3274 Gold Balanced Lineup
- extjs AjaxRowExpander
- POJ 2151 Check the difficulty of problems
- Git详解之三 Git分支
- iAd激活
- POJ 3349 Snowflake Snow Snowflakes