首页 > 编程语言 >FTL潜规则:调优,才是算法精华

FTL潜规则:调优,才是算法精华

时间:2023-06-08 12:55:04浏览次数:49  
标签:逻辑 映射 潜规则 Flash 物理地址 地址 调优 FTL

前言

在存储领域中有一个FTL的概念,这是一种Flash的内存管理算法,属于各个厂商的核心机密,每个厂商的处理方式不同,有的处理简单,有的处理复杂。

FTL,即Flash Translations layer,也就是闪存转换层,可以完成从逻辑地址到物理地址的转换,简称为映射。

 

为什么需要FTL

因为Flash的质量参差不齐,里面坏掉的区域是完成不能使用的。

Host发送命令下来,要求把一段数据存放在A地址中,此时A就是逻辑地址,而好死不死,Flash中的A地址刚好是坏块,那怎么办?

此时B地址是好的,FTL就将数据存放在B地址中,此时B丢置就是物理地址了,同时将A逻辑地址——B物理地址记录下来,这一段记录就是映射关系了。

下一次,当主机需要读取A逻辑地址的数据时,FTL就会将B物理地址的数据读取出来返回给主机。

FTL的位置

先了解几个名词

UCL

USB Control layer,USB控制层,主要用于解析从Host发送下来的USB命令

FTL

Flash Translation layer,Flash转换层,主要用于将逻辑地址转换成物理地址

FCL

Flash Control layer,Flash控制层,主要用于将经过映射处理后的地址解析成flash指令发送给Flash

UCL、FTL、FCL所处的位置

 

FTL遵循的规则

FTL这种内存管理算法,自然是遵循着着Flash特性,一切都是在Flash特性下才能运行起来的。

  • 写数据以page为最小单位
  • 写入的数据必须打乱存储才会稳定
  • 写满整个Block数据才会稳定
  • 擦除以Block为最小单位,一般不轻易做整块擦除

当然也有其他特性,但是Flash由于批次不同,制造工艺和厂商不同,出厂的flash也各有一些差异性的特性,这些,就实际问题实际分析。

FTL中各种调优

不同的厂商,FTl的方案各不相同,除了逻辑地址和物理地址的映射作用外,一个好的FTL还具备以下的调优:

映射颗粒度

逻辑地址和物理地址之间的映射方式有两种:块映射和页映射。

使用块映射,逻辑块映射到物理块,看起来挺好的,但是如果遇到操作page的情况,比如说要修改刚写满的某个Block中的某一个page,往往需要做整块擦除,大大降低了效率。

使用页映射,虽然弥补了上面的问题,但是每一页都做映射的话,页的数量一多,映射页多,要知道存储映射关系也是要消耗内存的。页映射需要消耗很大的空间。

所以市面上的做法大多数采用:块映射+页映射,简称混合映射,既可以满足存储需求,还能做到以page颗粒进行维护。

映射表存储

映射表是可以随时变化的,也是随时都要用到的,一般用的时候在RAM中使用,不用的时候就需要存储起来,一般都是用一些空闲块存储起来,这些空闲块不存数据,只放映射表。

merge处理

存储领域,少不了数据搬运这一块,一般来说,merge和GC是一起工作的。

GC回收

现在无论什么都会涉及一些垃圾回收,内存永远是一个好的算法需要考量的点。

垃圾回收需要选好时机,谁都不希望一个存储设备,会在没有能用的内存后才开始做GC回收,这就像开启了一段完全看不到进度的卡顿一样。

好的固件往往未雨绸缪,在不知不觉下做好了GC回收的工作。

寿命均衡

逻辑地址和物理地址的映射本身会对寿命均衡产生正面影响。

就刚才讲到的,映射表可以被随时修改,那么逻辑地址对应的物理地址也就被修改了,一些物理Block经常被擦写,往往会加速损坏。

我们可以通过修改逻辑块,让每次物理块不同而避免经常擦写相同的物理块,这本身就保证不会有物理块被经常擦写。

但是有一种情况它没有办法处理,即闲置的数据块,它们被写入后没有更改,就一直占据某些物理块,而这些物理块寿命还很长,而别的块却在飞速损耗中。

面对这种情况,我们只有在合适的时机帮它们换个位置了,如何选择这个时机很重要,而且这个merge搬运动作本身也会损耗寿命本身。

以上这些策略也是各个FTL算法的精华了。

我收集了一些linux的资料、算法小抄和计算机基础的资料,仅供个人学习使用,欢迎大家一起学习探讨。

linux保姆级教程完整版文档资料

 

标签:逻辑,映射,潜规则,Flash,物理地址,地址,调优,FTL
From: https://www.cnblogs.com/wuyue525/p/17465878.html

相关文章

  • 使用Optuna进行PyTorch模型的超参数调优
    前言 Optuna是一个开源的超参数优化框架,Optuna与框架无关,可以在任何机器学习或深度学习框架中使用它。本文将以表格数据为例,使用Optuna对PyTorch模型进行超参数调优。本文转载自DeepHubIMBA仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术总......
  • RocketMQ 脚本调优
    #!/bin/sh##ExecuteOnlyOnce#echo'vm.overcommit_memory=1'>>/etc/sysctl.confecho'vm.min_free_kbytes=5000000'>>/etc/sysctl.confecho'vm.drop_caches=1'>>/etc/sysctl.confecho'vm.zone_re......
  • Hibernate性能调优,优化
    Hibernate优化_Hibernate性能优化_Hibernate优化方案(上):[url]http://xiexiejiao.cn/hibernate/hibernate-performance-optimization-a.html[/url]Hibernate优化_Hibernate性能优化_Hibernate优化方案(下):[url]http://xiexiejiao.cn/hibernate/hibernate-performance-optimizati......
  • MySQL及调优
    存储引擎MySQL中存在多种存储引擎,比如:InnoDB:1.支持事务;2.支持外键;3.同时支持行级别的锁和表级别的锁。适用场景:经常更新的表,存在并发读写或者有事务处理的业务场景。MyISAM:1.支持表级别的锁(插入更新操作会锁表);2.不支持事务;3.拥有较高的插入和查询速度。适用场景:只读类的数据......
  • 超参数调优——google Vizier采用迁移学习的思想,主要是从之前调参的经验中学习,为新算
    Google使用一套超参数调优算法来烘焙更美味的饼干“超参数调优”和“烘焙饼干”这两件事情,乍一听感觉风马牛不相及,但细想一下,似乎又有一定的相似之处——“黑盒优化”。结构复杂的深度学习模型某种程度上就是一个黑盒,为实现更好的优化目标,我们不断进行“超参数调优”来优化这个黑盒......
  • C和C++的性能调优工具
    以下是C和C++的性能调优工具,包含工具介绍和链接:Valgrind:一款非常流行的内存调试和性能分析工具,可以检测内存泄漏、死锁等问题,并提供CPU性能分析工具。它可以跟踪程序中的所有内存分配和释放操作,并在程序执行时给出详细的报告。Valgrind是一个开源工具,支持Linux和MacOS等操......
  • 性能测试监控指标及分析调优 | 京东云技术团队
    一、哪些因素会成为系统的瓶颈?1、CPU,如果存在大量的计算,他们会长时间不间断的占用CPU资源,导致其他资源无法争夺到CPU而响应缓慢,从而带来系统性能问题,例如频繁的FullGC,以及多线程造成的上下文频繁的切换,都会导致CPU繁忙,一般情况下CPU使用率<75%比较合适。2、内存,Java内存一般是通过j......
  • hive学习基础与调优
    一、Hive基础知识Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能(hive的HQL语法设计实际模仿Mysql的语法)。其本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据的存储,说白了hive可以理解为一个将SQL转换为MapRedu......
  • 性能调优学习
    性能调优攻略测试:两个关键指标:吞吐量,延迟测试之后,定位性能瓶颈查看操作系统负载​看看操作系统的CPU利用率,看看内存使用率,看看操作系统的IO,还有网络的IO,网络链接数,等等​比如linux系统:top命令如果cpu利用率不高,但是两个关键指标上不去了,说明可能IO耗时......
  • HTML5应用性能调优工具WAPA – 使用篇
    utm_campaign=CSDN&utm_source=intel.csdn.net&utm_medium=Link&utm_content=others-WAPAHTML5应用性能调优工具WAPA–使用篇DaweiCheng程大伟... 于 星期四,27/02/2014-18:42 提交本篇文章将介绍怎样来使用WAPA进行分析。WAPA提供了两种使用方式,一种是图形化的web使......