依JEDEC eMMC 5.1及经验辛苦整理,付费内容,禁止转载。
所在专栏 《元带你学: eMMC协议详解》
内容摘要
全文 1800 字, 主要内容
1、后台操作/前台操作区别?
2、如何进行手动后台操作?
3、自动后台启动和停止方法?
4. 进入自动后台操作时间阈值
emmc内部需要执行一些维护操作。当host不对emmc下命令的时候,emmc内部可能依旧会进行部分操作,比如垃圾回收/数据搬运等,这些就称之为后台操作。
对于一些关键的操作(例如读写),为了减少延迟时间,emmc最好在不需要服务host时候进行这些后台操作。
在spec中强制规定了后台操作,也就是不允许又emmc不支持后台操作。BKOPS_SUPPORT (EXT_CSD byte [502]) 的Bit 0 应该被置位。
按照是否服务于host分类:
(1)前台操作(Foreground operations):需要服务于host,例如读写等。
(2)后台操作(Background operations):emmc内部自己执行一些操作,不需要服务于host。<
在正常情况下,主机对eMMC设备的操作通常为读写操作(被称为前台操作),但是,在进行读写操作时,会在eMMC设备上产生一定的读写碎片,就需要eMMC设备进行碎片回收,这便是设备内部进行的各种维护操作(被称为后台操作)。后台操作有助于减少读写等时间紧迫性操作的延迟(进行后台操作时,设备处于忙碌状态)。所以,为了提高设备读写性能,最好在设备没有进行读写操作时进行后台操作。后台操作可以手动启动或自动启动。
为了使设备知道主机何时不进行读写操作,并可以执行后台操作,主机应将任何值写入BKOPS_START(EXT_CSD字节[164])以手动启动后台操作。 在处理完后台操作之前,设备将一直保持忙碌状态。
由于前台操作的优先级高于后台操作,因此主机可以使用高优先级中断机制来中断正在进行的后台操作。 为了使设备知道主机是会定期启动后台操作,主机应置位BKOPS_EN(EXT_CSD字节[163])的位0(MANUAL_EN),以指示其将要定期写入BKOPS_START。 然后,该设备可能会将某些维护操作延迟到主机写入BKOPS_START时。
设备以BKOPS_STATUS的位[1:0](EXT_CSD字节[246])报告其后台操作状态,该状态可以为以下四个可能的级别之一:
0x0:不需要任何操作,
0x1:非紧急,
0x2:性能受到影响,
0x3:紧急。
主机应定期检查状态,并根据需要启动后台操作,以便设备有足够的时间进行维护操作,以帮助减少前台操作期间的等待时间。 如果状态为级别3(“严重”),则由于维护操作无法再延迟,某些操作可能会超出其原始超时。 主机应给设备足够的时间进行后台操作,以避免一开始就达到此级别。
为了使主机能够快速检测到更高的级别,只要级别为2或3,就将EXCEPTION_EVENTS_STATUS中的URGENT_BKOPS位置1。这会自动在设备状态中设置EXCEPTION_BIT。 这使主机可以检测每个R1类型响应的紧急级别。 主机仍应定期从BKOPS_STATUS字节中读取完整状态,并根据需要启动后台操作。
对于本规范,后台操作功能是必需的。 BKOPS_SUPPORT的位0(EXT_CSD字节[502])应置1。
要使设备能够在设备空闲时间内执行后台操作的主机,应通过将BKOPS_EN字段[EXT_CSD字节163]中的AUTO_EN设置为1b来向设备发送信号。 设置此位后,只要设备认为合适,设备就可以启动或停止后台操作,而无需通知主机。
当AUTO_EN位置1时,主机应保持设备电源处于活动状态。 主机可以根据其功率限制或其他考虑,随时设置或清除该位。
设备一般是判断主机长时间没有操作, 进入空闲状态, 如果Device 有垃圾回收等任务要做, 设备自动进入AUTO 后台操作。
一些闪存存储器系统具有自动后台操作功能。通常,这样的存储器系统的控制器使用预定的时间阈值编程,并且如果存储器比预时间间阈值更长地处于空闲(例如,由于主机不活动),控制器将存储器系统置于后台操作模式,以降低存储器系统消耗的电流和功率。
如果设备有后台任务做,控制器通常执行各种任务,诸如将来自易失性存储器的用户数据和管理数据保存到非易失性存储器,垃圾回收等。
退出有两种场景
后台任务完成
如果后台任务完成, 而且 host 也没有任务, 一般会进到自动休眠模式,关闭(poweroff)硬件部件。
新命令HPI
当控制器感测到来自主机的新命令时,控制器通常进行各种任务以从后台任务退出,诸如停止当前的后台, 将它挂起, 去响应主机的新命令。
所以进入自动进入后台操作的时间阈值设置也和有门道。
这就是本来猜测 host 空闲了, 但猜错了。 这样频繁启动后台操作和挂起后台操作是非常低效的,要额外多一些开销, 而且主机命令不能立马响应, 这样Host 读写速度也受到影响,这就得不偿失了。
一方面要经验, 另一方面需要研究比较多的平台行为来定这个值比较合适。
[1] https://blog.csdn.net/swanghn/article/details/113195600
[2] 用于自适应自动休眠和后台操作的存储器系统及方法与流程
免责声明:
本文根据公开信息整理,旨在介绍更多的存储知识,所载文章仅为作者观点,不构成投资或商用建议。本文仅用于学习交流, 不允许商用。若有疑问或有侵权行为请联系作者处理。