闪存系统性能优化方向?NAND Cache Read(闪存缓冲读) 原理与实战?
创始人
2025-05-29 18:00:16

Hello 大家好, 我是元存储~

目录

前言

1. 提升效果

2. Cache Read 是什么?

3. Cache Read 的闪存基础 

4. Cache Read 原理

5. Cache Read 命令和时序

5.1 READ PAGE CACHE SEQUENTIAL (31h)

5.2 READ PAGE CACHE RANDOM (00h-31h)

6. Cache Read 用处

参考


前言

NAND Flash凭借其高性能、以及低成本等特性大受欢迎,是最为广泛的非易失存储介质。为了满足业务性能要求,人们想了许多方法来提升基于NAND Flash的系统性能, 本节我们带大家探索一下其中从Cache Read 是如何提升性能, 提升大不大?


1. 提升效果

话不多说, 先看提升效果。Cache Read 相对于简单的 Page Read ,吞吐率从 27.3MB/s 提升到 36.5MB/s, 提升了 33%.

觉得还蛮给力的就继续往下探索吧?


2. Cache Read 是什么?

 在onfi接口标准(在http://www.onfi.org/~/media/onfi/specs/onfi_4_0-gold.pdf?la=en可获得)中定义了“readcache”系列命令,包括“readcachesequential”与“readcacherandom”。toggle接口标准中定义了类似的“sequentialcacheread”与“randomcacheread”命令。

而page register起到缓冲的作用,在读多个page时,当cache传输一个page数据时,page register提前把下一个page的数据准备好。[3]

存储控制器向nand闪存芯片发出的“cacheread”命令,指示nand芯片从页寄存器读出一个数据页的同时,在相同的lun(logicunit,逻辑单元)上从闪存单元阵列中读出另一页数据。

主流的nand闪存芯片都支持“cacheread”的命令。

这里的Cache Read 是从nand 芯片中的闪存颗粒阵列里,读到NAND 芯片中的 Cache Register. 而不是指的电脑或者 SSD 带的Cache。那个属于Cache 缓存, 不再此讨论。

3. Cache Read 的闪存基础 

NAND 里每个Plane 自带有Cache Reister 和 Page Buffer, 每个的大小都是一个page(页) 的大小, 常见是 16KB(Main Area) + 2KB(Spare Area)。这为Cache Read 提供了可能。

4. Cache Read 原理

在当前页从缓存寄存器输出时,将block内的下一页数据读取到数据寄存器中(注意这里有数据寄存器,数据寄存器和缓存寄存器不是一个东西)。

5. Cache Read 命令和时序

5.1 READ PAGE CACHE SEQUENTIAL (31h)


        READ PAGE CACHE SEQUENTIAL (31h):在当前页从缓存寄存器输出时,将block内的下一页数据读取到数据寄存器中。此命令当裸片(LUN)准备就绪(RDY=1,ARDY=1)时,该命令可以被接受。在读取页面缓存(31h,00h-31h)操作(RDY=1和ARDY=0)期间,该命令也可以被接受。

        将31h写入命令寄存器,发出此命令后,R/B#变为低电平,裸片(LUN)在tRCBSY时间内处于繁忙状态(RDY=0,ARDY=0)。tRCBSY之后,R/B#变为高,裸片(LUN)忙于缓存操作(RDY=1,ARDY=0),这表明缓存寄存器可用,并且指定的页正在从NAND闪存阵列复制到数据寄存器。此时,数据可以从缓存寄存器的列地址0开始输出。随机数据读取(05h-E0h)命令可以用于更改从缓存寄存器输出的数据的列地址。

        READ PAGE CACHE SEQUENTIAL(31h)命令可用于跨越block边界。如果在当前block的最后一页读入数据寄存器之后发出读取页缓存序列(31h)命令,则读取的下一页将是下一个逻辑block中的page。如果是跨die读取,则此命令无法实现,应使用READ PAGE CACHE LAST(3Fh)命令。PAGE CACHE SEQUENTIAL 要求要读的下一个page 是连续的[2]

        如下为顺序读缓存页时序图:

5.2 READ PAGE CACHE RANDOM (00h-31h)


        READ PAGE CACHE RANDOM (00h-31h):此命令将指定的块中的页读入数据寄存器,同时从缓存寄存器输出前一页。当die(LUN)准备就绪(RDY=1,ARDY=1)时,该命令被接受。在读取页面缓存(31h,00h-31h)操作(RDY=1和ARDY=0)期间,它也可以被(LUN)接受。

        要发出此命令,需将00h写入命令寄存器,然后将n个地址周期写入地址寄存器,最后将31h写入指令寄存器。指定地址中的列地址将被忽略。裸片(LUN)地址必须与先前的READ PAGE(00h-30h)命令或先前的READPAGE CACHE RANDOM(00h-31h)命令(如果适用)匹配。

        发出此命令后,R/B#变为低电平,在tRCBSY时间段内,die(LUN)处于繁忙状态(RDY=0,ARDY=0)。tRCBSY之后,R/B#变为高,die(LUN)忙于缓存操作(RDY=1,ARDY=0),这表明缓存寄存器可用,并且指定的页正在从NAND闪存阵列复制到数据寄存器。此时,数据可以从缓存寄存器的列地址0开始输出。随机数据读取(05h-E0h)命令可以用于更改从缓存寄存器输出的数据的列地址。[2]

        如下为随机读缓存页时序图:

6. Cache Read 用处

Sequential Cache Read 可用于对闪存芯片进行顺序读过程中, 可显著提高顺序读的速度。如果是随机读, 一般用Cache Read 增加了复杂度, 效果还不大。Random Cache Read 有点鸡肋,使用较少。

参考

[1] 实现快速读取的方法及介质接口控制器与流程, 

     https://www.xjishu.com/zhuanli/55/201710499881.html

[2] 【FLASH存储器系列十二】Nand Flash芯片使用指导之二-CSDN博客

[3]  04_nand基本操作_Chockong的博客-CSDN博客

相关内容

热门资讯

Opentss代码测试 这是个多方门限签名库,使用rust实现。 代码包含两个功能,秘密共享密钥...
【id:14】【20分】C. ... 题目描述 编写一个函数比较两个字符串,参数是两个字符指针(要求显式定义...
无需公网IP,远程连接SQL ... 文章目录1.前言2.本地安装和设置SQL Server2.1 SQL Server下载2.2 SQL...
WuThreat身份安全云-T... 漏洞名称:CairoSVG 文件服务器端请求伪造 漏洞级别:严重 漏洞编号:CVE-2023-275...
Postgresql源码(10... 1 子事务控制语句分析 1.1 执行savepoint 执行函数: 【立即执行】→De...
python@日期和时间@da... 文章目录python datetimerelativedeltademo`timedelta...
数据库--进阶版-11--SQ... 1.插入数据 ·insert优化: 例如要插入下面这些 insert into tb_...
C语言—文件操作 为什么使用文件使用文件可以直接将数据存放到电脑硬盘上,做到数据的持久化什么是文件硬盘上...
【Zabbix_6.x 第三章... 文章目录👹 关于作者Zabbix 系列文章目录第三章 监控任意主机一、解决第二章登录...
python爬虫可以爬什么 Python爬虫可以爬取的东西有很多,Python爬虫怎么学?简单的分析...
组态王与200SMART之间无... 在实际的工业场合应用中,人机界面跟PLC配套使用是比较常见的现场“CP组合”ÿ...
KaiwuDB 荣获第三届 I... 3月17日,由中国某部电子化标准研究院、苏州金融科技协会、中国计算机用户协会指导&#x...
上海人工智能企业CIMCAI智... 上海人工智能企业CIMCAI智能港口自动化港口数字化码头智慧港航,成熟终端智慧港航人工...
红米note10 pro机型解... 前言。操作解除锁类案例只限于自己的机型, 因手机号长期不用或者忘记密码导致账号锁出现的...
9、Cascaded Diff... 简介 主页:https://cascaded-diffusion.github.io/...
异核通信框架(1)——SMP和... 0.前言         我是菜鸡,很久没有发表文章了。老样子,今天推荐...
Leetcode.2048 下... 题目链接 Leetcode.2048 下一个更大的数值平衡数 Rating : 17...
GBASE南大通用第二届校园大... 第二届校园大使在本周正式集结完毕啦! 全国一共有27所高校近50余名学生报名参加。 各...
Blender Apps?20... 2023 年对 Blender 来说将会是很有趣的一年,除了努力保持核心功能稳定和不断...
Python数据结构与算法(p... 学习材料清华大学博士讲解Python数据结构与算法 B站:https://www.bi...
Docker安装使用Nacos Docker安装使用Nacos1 参考2 Nacos版本2.1 访问地址3 Docker部署Naco...
Spring Boot 接口统... 需求 需求如题,想给一个 spring boot 项目的所有请求路径添加统一前缀&#x...
Boeing MQ-28 Gh... Boeing MQ-28 Ghost Bat作为五代机忠诚僚机的开山之作,今天我们来一...
线性动态规划问题 文章目录1. 三角形中最小路径之和2. 最长递增子序列3. 最长公共子序列 1. 三角形中最小路径之...
携手共赢!菊风荣获三基同创“2... 近年来智能手表市场发展势头迅猛,为满足用户多样化的应用场景,对于音视频能...
CentOS8提高篇3:Cen... 1. 准备工作(需要配置epel, rpmfusion源); 配置e...
计算机组成原理(7)--哈工大 程序中断方式中断的概念I/O中断的产生CPU和打印机部分并行工作程序中断方式的接口电路配置中断请求触...
Amazon S3 客户端:T... TntDrive 是适用于 Windows 的新 Amazon S3 客户端。使用 TntDrive...
java8 jdk1.8在wi... 一、软件下载 1、从网盘获取 java8安装包 2、或者从官网获取(需要提前注册ora...
【 Deep-Shallow ... A Deep-Shallow Fusion Network with Multi-Detail Ex...