CN108255741A - 一种固态硬盘原子写入的方法及固态硬盘 - Google Patents
一种固态硬盘原子写入的方法及固态硬盘 Download PDFInfo
- Publication number
- CN108255741A CN108255741A CN201711370831.8A CN201711370831A CN108255741A CN 108255741 A CN108255741 A CN 108255741A CN 201711370831 A CN201711370831 A CN 201711370831A CN 108255741 A CN108255741 A CN 108255741A
- Authority
- CN
- China
- Prior art keywords
- write
- data
- order
- cmd
- atomic
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明公开了一种固态硬盘原子写入的方法及固态硬盘,其特征在于增加原子写管理数据,所述原子写管理数据至少包括原子命令编号CMD_NO、命令包含的页面数CMD_SIZE和该笔数据在命令中的偏移CMD_Offset;对于非原子写命令的命令包含的页面数固定设置为0;对于非原子写命令的命令的偏移固定设置为0:增加命令解析模块用于识别主机写命令是否为原子写命令,命令解析模块根据主机写命令的数据的长度和起始地址是否满足条件来判别是否为原子写命令,将该笔数据更新到NAND FLASH的物理空间时,同时将该笔数据对应原子写管理数据也写入Meta中。在支持NVMe原子写入的同时,降低了DWB引入的写放大以及性能的下降。
Description
技术领域
本发明涉及固态硬盘控制技术,特别涉及一种固态硬盘原子写入的方法及固态硬盘。
背景技术
SSD(固态硬盘)已经被广泛应用于各种场合,由于NAND的特性,在异常掉电时会导致数据的损坏。某些应用程序,如文件系统或者数据库,对于数据的完整性需求比较高,如果数据生效的顺序得不到保障,会导致数据一致性、可靠性发生问题。进一步地,在NVMe时代,对于原子写入提出了进一步的要求。对于给定上限大小的命令,硬盘需要保证要么全部写入,要么全部丢弃,而不能出现部分生效的情形。
图1是典型的NAND组成示意图:通道DIE,可独立并发操作的单元;块Block,可独立擦除的单元,其内各个物理位置的数据写入后在下一次写之前必须要将整个Block擦除;Page,读写单元,同一物理块内的Page必需按顺序编程:0->1->2->3…。
图2是异常掉电后引起的数据不一致问题示意,以一个SSD内部有四个独立DIE组成的情形为例。当系统正在进行主机数据读写时,如果发生异常掉电,因为各个DIE上的负载不一样,比如部分DIE上的读命令比较多等,会导致掉电时刻各个DIE上写入的Page地址不一样。当系统重新上电时,此时对于系统中最后写入的物理块中的Page状态各不一样。如图2中所示,需要原子写入的CMDX/Y的部分数据是正确的数据,部分是错误的,此时不加约束的话,则会导致命令内部分数据有效,部分无效,违背了对于原子写入的要求。
图3传统原子写入系统示意图,为了支持原子写入的解决方案。在该方案中,为了对抗掉电时的不可控性,需要引入双写缓存Double Write Buffer,应用程序需要原子写入数据时,需要遵循如下步骤:
-S0:先将数据写入到Double Write Buffer;
-S1:完成Double Write Buffer写入;
-S2:正式更新用户数据;
此处,在更新用户数据前,先写入Double Write Buffer,主要是保障在用户数据写入时有一份完整的拷贝。如果掉电发生在S1完成前,则上电后通过校验可知DoubleWrite Buffer数据不完整,维持用户数据不变即可;如果掉电发生在S2中,则上电后可通过Double Write Buffer中的数据继续完成用户数据更新。此方案中确实可以实现原子写入,但是由于数据需要写入2次,在SSD应用场景中会导致写放大比较高,而且也会显著地降低SSD的性能。
发明内容
针对以上缺陷,本发明目的是如何降低主机端冗余写操作,保证数据的原子写入和数据完整性。
为了解决以上问题本发明提出了一种固态硬盘原子写入的方法,其特征在于增加原子写管理数据,所述原子写管理数据至少包括原子命令编号CMD_NO、命令包含的页面数CMD_SIZE和该笔数据在命令中的偏移CMD_Offset;对于非原子写命令的命令包含的页面数固定设置为0;对于非原子写命令的命令的偏移固定设置为0:增加命令解析模块用于识别主机写命令是否为原子写命令,命令解析模块根据主机写命令的数据的长度和起始地址是否满足条件来判别是否为原子写命令,将该笔数据更新到NAND FLASH的物理空间时,同时将该笔数据对应原子写管理数据也写入Meta中。
所述固态硬盘原子写入的方法,其特征在于命令解析模块将起始地址和长度与物理页对齐的命令判定为原子写入命令,对于非对齐的判定为非原子写入命令。
所述的固态硬盘原子写入的方法,其特征在于固态硬盘在初始上电时扫描找到最早数据未成功写入的位置,并扫描未成功写入的位置的前一个写入的位置,读取该页数据的Meta数据,并取出CMD_NO、CMD_SIZE和CMD_Offset,当CMD_Offset!=CMD_SIZE-1且CMD_SIZE〉0时根据写入顺序往回退CMD_Offset格物理页数据,并从该位置起依次读取各个物理页状态;对于不符合条件的则从最早数据未成功写入的位置起依次读取各个物理页状态;在扫描过程中,根据原子写命令的要求,只有在其数据全部正确时才更新映射表;而对于非原子写,只要单页数据正确则进行更新映射表。
一种固态硬盘,其特征在于增加原子写管理数据,所述原子写管理数据至少包括原子命令编号CMD_NO、命令包含的页面数CMD_SIZE和该笔数据在命令中的偏移CMD_Offset;对于非原子写命令的命令包含的页面数固定设置为0;对于非原子写命令的命令的偏移固定设置为0:增加命令解析模块用于识别主机写命令是否为原子写命令,命令解析模块根据主机写命令的数据的长度和起始地址是否满足条件来判别是否为原子写命令,将该笔数据更新到NAND FLASH的物理空间时,同时将该笔数据对应原子写管理数据也写入Meta中。
所述固态硬盘,其特征在于命令解析模块将起始地址和长度与物理页对齐的命令判定为原子写入命令,对于非对齐的判定为非原子写入命令。
所述的固态硬盘,其特征在于固态硬盘在初始上电时扫描找到最早数据未成功写入的位置,并扫描未成功写入的位置的前一个写入的位置,读取该页数据的Meta数据,并取出CMD_NO、CMD_SIZE和CMD_Offset,当CMD_Offset!=CMD_SIZE-1且CMD_SIZE〉0时根据写入顺序往回退CMD_Offset格物理页数据,并从该位置起依次读取各个物理页状态;对于不符合条件的则从最早数据未成功写入的位置起依次读取各个物理页状态;在扫描过程中,根据原子写命令的要求,只有在其数据全部正确时才更新映射表;而对于非原子写,只要单页数据正确则进行更新映射表。
本发明的有益效果是:通过引入该方案,在支持NVMe原子写入的同时,降低了DWB引入的写放大以及性能的下降。
附图说明
图1是典型的NAND组成示意图;
图2是异常掉电后引起的数据不一致问题示意;
图3传统原子写入系统示意图;
图4是增加原子写管理表的缓存数据图
图5是原子写入过程示意图;
图6是异常掉电导致的原子写数据生效的处理机制示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图4是增加原子写管理表的缓存数据图,增加原子写管理表Meta管理,除传统的系统管理数据Others System Fields外,至少新增如下的字段:原子命令编号CMD_NO:该笔数据所对应的命令索引,该索引在运行时刻遇到原子写入时递增;命令包含的页面数CMD_SIZE:该命令所包含的页面数,对于非原子写,固定为0;该笔数据在命令中的偏移CMD_Offset:该笔数据在命令中的偏移,对于非原子写,固定为0;对于原子写,取值为0~CMD_SIZE–1。
图5是原子写入过程示意图:
第一步:主机提交写命令;
第二步:主机提交写数据完成数据传输到SSD后,SSD报告主机写入完成。
第三步:SSD接口Internal进行数据实际写入操作,为达到原子写的目的,需要引入如下的改进:
1)增加了命令解析模块ATOM CMD Filter:负责对命令进行解析,识别是否为原子写命令;根据NVMe Spec(NVMe协议标准)需求,可以定义特定约束条件:大小/起始地址,满足条件的写命令才可以处理为原子写。为简化说明,本发明中以仅支持起始、长度均与物理page对齐的命令为原子写入进行说明。
2)SSD内部维护一个计数器:g_atom_cmd_no,对于每一笔写命令递增;
3)对于原子写入命令,在MetaFormat时(以命令Size为M为例),对于每一笔Page数据,依次标识其CMD_Offset为0/1/2….M-1;
4)对于非原子写入命令,为简化起见且便于识别,标识其CMD_Size/CMD_Offset均为0。
图6是异常掉电导致的原子写数据生效的处理机制示意图;以4个DIE为例,BlockA/B/C/D为各个DIE下掉电前正在写入的物理块,其中数据写入按照图示的Z字形写入,依次进行如下的数据扫描:
1)S0:上电后扫描找出最后一组物理块中”最早”数据未成功写入的位置,记为POS_1;
2)S1:扫描写入顺序上的前一个页面(POS_2),获取其CMD_NO_x,CMD_SIZE_x,CMD_Offset_x;
3)S2:如果CMD_Offset_x!=CMD_Size_x–1且CMD_SIZE_x>0,则根据写入顺序往前回退(CMD_Offset_x)个物理页(记为POS_3),且记录POS_START=POS_3;否则记录POS_START=POS_1;
4)S3:从POS_START到最后一笔非空数据位置(记为POS_END),逐步扫描物理页,遵循如下规则:如果该笔数据Meta信息符合(CMD_SIZE=0),则只要数据正确就恢复其映射,以便后续主机访问;如果该笔数据Meta信息符合(CMD_SIZE>0),则只有在CMD_Offset0/1/..CMD_SIZE-1对应的数据均正确的情形下才恢复映射;否则直接丢弃(例如,部分数据为uecc,部分为空等)。
以上所揭露的仅为本发明一种实施例而已,当然不能以此来限定本之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本发明权利要求所作的等同变化,仍属于本发明所涵盖的范围。
Claims (6)
1.一种固态硬盘原子写入的方法,其特征在于增加原子写管理数据,所述原子写管理数据至少包括原子命令编号CMD_NO、命令包含的页面数CMD_SIZE和该笔数据在命令中的偏移CMD_Offset;对于非原子写命令的命令包含的页面数固定设置为0;对于非原子写命令的命令的偏移固定设置为0:增加命令解析模块用于识别主机写命令是否为原子写命令,命令解析模块根据主机写命令的数据的长度和起始地址是否满足条件来判别是否为原子写命令,将该笔数据更新到NAND FLASH的物理空间时,同时将该笔数据对应原子写管理数据也写入Meta中。
2.根据权利要求1所述固态硬盘原子写入的方法,其特征在于命令解析模块将起始地址和长度与物理页对齐的命令判定为原子写入命令,对于非对齐的判定为非原子写入命令。
3.根据权要求1或2所述的固态硬盘原子写入的方法,其特征在于固态硬盘在初始上电时扫描找到最早数据未成功写入的位置,并扫描未成功写入的位置的前一个写入的位置,读取该页数据的Meta数据,并取出CMD_NO、CMD_SIZE和CMD_Offset,当CMD_Offset!=CMD_SIZE-1且CMD_SIZE〉0时根据写入顺序往回退CMD_Offset格物理页数据,并从该位置起依次读取各个物理页状态;对于不符合条件的则从最早数据未成功写入的位置起依次读取各个物理页状态;在扫描过程中,根据原子写命令的要求,只有在其数据全部正确时才更新映射表;而对于非原子写,只要单页数据正确则进行更新映射表。
4.一种固态硬盘,其特征在于增加原子写管理数据,所述原子写管理数据至少包括原子命令编号CMD_NO、命令包含的页面数CMD_SIZE和该笔数据在命令中的偏移CMD_Offset;对于非原子写命令的命令包含的页面数固定设置为0;对于非原子写命令的命令的偏移固定设置为0:增加命令解析模块用于识别主机写命令是否为原子写命令,命令解析模块根据主机写命令的数据的长度和起始地址是否满足条件来判别是否为原子写命令,将该比数据更新到NAND FLASH的物理空间时,同时将该比数据对应原子写管理数据也写入Meta中。
5.根据权利要求4所述固态硬盘,其特征在于命令解析模块将起始地址和长度与物理页对齐的命令判定为原子写入命令,对于非对齐的判定为非原子写入命令。
6.根据权要求4或5所述的固态硬盘,其特征在于固态硬盘在初始上电时扫描找到最早数据未成功写入的位置,并扫描未成功写入的位置的前一个写入的位置,读取该页数据的Meta数据,并取出CMD_NO、CMD_SIZE和CMD_Offset,当CMD_Offset!=CMD_SIZE-1且CMD_SIZE〉0时根据写入顺序往回退CMD_Offset格物理页数据,并从该位置起依次读取各个物理页状态;对于不符合条件的则从最早数据未成功写入的位置起依次读取各个物理页状态;在扫描过程中,根据原子写命令的要求,只有在其数据全部正确时才更新映射表;而对于非原子写,只要单页数据正确则进行更新映射表。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711370831.8A CN108255741A (zh) | 2017-12-19 | 2017-12-19 | 一种固态硬盘原子写入的方法及固态硬盘 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711370831.8A CN108255741A (zh) | 2017-12-19 | 2017-12-19 | 一种固态硬盘原子写入的方法及固态硬盘 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108255741A true CN108255741A (zh) | 2018-07-06 |
Family
ID=62723458
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711370831.8A Pending CN108255741A (zh) | 2017-12-19 | 2017-12-19 | 一种固态硬盘原子写入的方法及固态硬盘 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108255741A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110308933A (zh) * | 2019-04-25 | 2019-10-08 | 龙芯中科(合肥)技术有限公司 | 访问指令确定方法、装置及存储介质 |
CN110888823A (zh) * | 2019-11-26 | 2020-03-17 | 深圳忆联信息系统有限公司 | 页扫描效率的提升方法、装置及计算机设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102598019A (zh) * | 2009-09-09 | 2012-07-18 | 弗森-艾奥公司 | 用于分配存储的设备、系统和方法 |
CN103942114A (zh) * | 2013-01-22 | 2014-07-23 | Lsi公司 | Nvm地址、跨度及长度映射/转换的存储地址空间 |
US20140281145A1 (en) * | 2013-03-15 | 2014-09-18 | Western Digital Technologies, Inc. | Atomic write command support in a solid state drive |
CN104881418A (zh) * | 2014-02-28 | 2015-09-02 | 阿里巴巴集团控股有限公司 | 用于MySQL的快速回收回滚空间的方法和装置 |
-
2017
- 2017-12-19 CN CN201711370831.8A patent/CN108255741A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102598019A (zh) * | 2009-09-09 | 2012-07-18 | 弗森-艾奥公司 | 用于分配存储的设备、系统和方法 |
CN103942114A (zh) * | 2013-01-22 | 2014-07-23 | Lsi公司 | Nvm地址、跨度及长度映射/转换的存储地址空间 |
US20140281145A1 (en) * | 2013-03-15 | 2014-09-18 | Western Digital Technologies, Inc. | Atomic write command support in a solid state drive |
CN104881418A (zh) * | 2014-02-28 | 2015-09-02 | 阿里巴巴集团控股有限公司 | 用于MySQL的快速回收回滚空间的方法和装置 |
Non-Patent Citations (1)
Title |
---|
大话存储: "【冬瓜哥论文】原子写,什么鬼?!", 《HTTPS://WWW.A-SITE.CN/M/ARTICLE/301307.HTML》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110308933A (zh) * | 2019-04-25 | 2019-10-08 | 龙芯中科(合肥)技术有限公司 | 访问指令确定方法、装置及存储介质 |
CN110308933B (zh) * | 2019-04-25 | 2021-06-01 | 龙芯中科(合肥)技术有限公司 | 访问指令确定方法、装置及存储介质 |
CN110888823A (zh) * | 2019-11-26 | 2020-03-17 | 深圳忆联信息系统有限公司 | 页扫描效率的提升方法、装置及计算机设备 |
CN110888823B (zh) * | 2019-11-26 | 2022-01-21 | 深圳忆联信息系统有限公司 | 页扫描效率的提升方法、装置及计算机设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI506430B (zh) | 映射資訊記錄方法、記憶體控制器與記憶體儲存裝置 | |
US8244963B2 (en) | Method for giving read commands and reading data, and controller and storage system using the same | |
TWI401691B (zh) | 具快閃記憶體測試功能的控制器及其儲存系統與測試方法 | |
EP2483782B1 (en) | Power interrupt management | |
TWI467372B (zh) | 指令執行方法、記憶體控制器與記憶體儲存裝置 | |
US8386699B2 (en) | Method for giving program commands to flash memory for writing data according to a sequence, and controller and storage system using the same | |
US8996791B2 (en) | Flash memory device, memory control device, memory control method, and storage system | |
US9176865B2 (en) | Data writing method, memory controller, and memory storage device | |
US20050204187A1 (en) | System and method for managing blocks in flash memory | |
TWI569139B (zh) | 有效資料合併方法、記憶體控制器與記憶體儲存裝置 | |
US8266371B2 (en) | Non-volatile storage device, host device, non-volatile storage system, data recording method, and program | |
KR20130018482A (ko) | 메모리 디바이스 | |
TWI421869B (zh) | 用於快閃記憶體的資料寫入方法及其控制器與儲存系統 | |
TW201523618A (zh) | 資料抹除方法、記憶體控制電路單元及記憶體儲存裝置 | |
US20140129763A1 (en) | Data writing method, memory controller, and memory storage apparatus | |
TWI421870B (zh) | 用於快閃記憶體的資料寫入方法及其控制器與儲存系統 | |
CN111399750B (zh) | 闪存数据写入方法及计算机可读取存储介质 | |
CN108628543B (zh) | 垃圾回收方法以及使用该方法的装置 | |
CN108549588A (zh) | 一种消除tlc闪存多片编程失败的方法 | |
CN108255741A (zh) | 一种固态硬盘原子写入的方法及固态硬盘 | |
CN116257460B (zh) | 基于固态硬盘的Trim命令处理方法及固态硬盘 | |
TWI448892B (zh) | 資料搬移方法、記憶體控制器與記憶體儲存裝置 | |
CN103019969A (zh) | 闪存储存装置及其不良储存区域的判定方法 | |
TWI629590B (zh) | 記憶體管理方法、記憶體控制電路單元及記憶體儲存裝置 | |
US8762685B2 (en) | Data writing method, memory controller and memory storage apparatus |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180706 |