KR102307382B1 - Variable-size flash translation layer - Google Patents

Variable-size flash translation layer Download PDF

Info

Publication number
KR102307382B1
KR102307382B1 KR1020140105900A KR20140105900A KR102307382B1 KR 102307382 B1 KR102307382 B1 KR 102307382B1 KR 1020140105900 A KR1020140105900 A KR 1020140105900A KR 20140105900 A KR20140105900 A KR 20140105900A KR 102307382 B1 KR102307382 B1 KR 102307382B1
Authority
KR
South Korea
Prior art keywords
read
data
page
variable size
compressed data
Prior art date
Application number
KR1020140105900A
Other languages
Korean (ko)
Other versions
KR20150020137A (en
Inventor
얼 티 코헨
Original Assignee
엘에스아이 코포레이션
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Priority claimed from US14/055,336 external-priority patent/US9495288B2/en
Application filed by 엘에스아이 코포레이션 filed Critical 엘에스아이 코포레이션
Publication of KR20150020137A publication Critical patent/KR20150020137A/en
Application granted granted Critical
Publication of KR102307382B1 publication Critical patent/KR102307382B1/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • G06F11/108Parity data distribution in semiconductor storages, e.g. in SSD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/401Compressed data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7208Multiple device management, e.g. distributing data over multiple flash devices

Abstract

가변 크기 플래시 변환 계층을 사용하는 방법이 개시된다. 단계 (A)는 비휘발성 메모리로부터 논리 블록 어드레스에 상응하는 데이터를 판독하라는 판독 요청을 수신한다. 단계 (B)는 (i) 비휘발성 메모리의 특정 페이지의 물리 어드레스, (ii) 이전에 저장된 압축된 데이터에 대한 특정 페이지 내의 오프셋 및 (iii) 압축된 데이터의 길이를 획득하기 위해 맵의 특정 엔트리를 판독한다. 특정 엔트리는 논리 블록 어드레스와 연관된다. 단계 (C)는 오프셋 및 길이를 (i) 특정 페이지 내의 소정의 판독 유닛의 어드레스 및 (ii) 판독될 판독 유닛의 개수로 변환한다. 단계 (D)는 특정 페이지로부터 최대 소정의 판독 유닛으로부터 시작되는 판독 유닛의 개수를 판독한다. 오프셋 및 길이 단위는 판독 유닛보다 작다.A method using a variable size flash translation layer is disclosed. Step (A) receives a read request to read data corresponding to a logical block address from the non-volatile memory. Step (B) is a specific entry in the map to obtain (i) the physical address of a specific page of non-volatile memory, (ii) an offset within a specific page to previously stored compressed data, and (iii) the length of the compressed data. read the A specific entry is associated with a logical block address. Step (C) converts the offset and length into (i) the address of a given read unit in a particular page and (ii) the number of read units to be read. Step (D) reads the number of read units starting from at most a predetermined read unit from a particular page. Offset and length units are smaller than read units.

Description

가변 크기 플래시 변환 계층{VARIABLE-SIZE FLASH TRANSLATION LAYER}Variable Size Flash Transformation Layer {VARIABLE-SIZE FLASH TRANSLATION LAYER}

본 출원은 2013년 10월 9일자로 출원된 미국 가출원 제61/888,681호, 2013년 8월 16일자로 출원된 미국 가출원 제61/866,672호, 및 2013년 1월 22일자로 출원된 미국 가출원 제61/755,169호에 관한 것이며, 그 각각은 이로써 전체적으로 참조로서 통합된다.This application is a U.S. Provisional Application No. 61/888,681, filed on October 9, 2013, U.S. Provisional Application No. 61/866,672, filed on August 16, 2013, and U.S. Provisional Application No., filed on January 22, 2013 61/755,169, each of which is hereby incorporated by reference in its entirety.

본 출원은 2011년 3월 21일자로 출원된 미국 출원 제13/053,175호에 관한 것이며, 이는 2010년 3월 22일자로 출원된 미국 가출원 제61/316,373호에 관한 것이고, 그 각각은 이로써 전체적으로 참조로서 통합된다.This application relates to U.S. Provisional Application No. 13/053,175, filed March 21, 2011, and to U.S. Provisional Application No. 61/316,373, filed March 22, 2010, each of which is hereby incorporated by reference in its entirety is integrated as

본 출원은 또한 2012년 10월 4일의 국제 출원일을 갖는 국제 출원 제PCT/US2 012/058583호에 관한 것이며, 이는 2011년 10월 5일자로 출원된 미국 가출원 제61/543,707호의 이익을 주장하고, 그 각각은 이로써 전체적으로 참조로서 통합된다.This application also relates to International Application No. PCT/US2 012/058583, having an international filing date of October 4, 2012, which claims the benefit of U.S. Provisional Application No. 61/543,707, filed October 5, 2011, and , each of which is hereby incorporated by reference in its entirety.

본 발명의 분야Field of the Invention

본 발명은 일반적으로 컴퓨팅 호스트 및 입력/출력 장치 기술에 관한 것으로서, 특히 가변 크기 플래시 변환 계층을 구현하는 방법 및/또는 장치에 관한 것이다.
FIELD OF THE INVENTION The present invention relates generally to computing host and input/output device technology, and more particularly to methods and/or apparatus for implementing a variable size flash translation layer.

종래의 고체 상태 드라이브는 고정된 정수개의 호스트 논리 블록을 비휘발성 메모리의 각각의 페이지에 저장한다. 저장 효율 문제는 비휘발성 메모리의 각각의 페이지의 사용자 데이터 크기 또는 사용 가능 크기가 고정되지 않을 때 발생한다. 고체 상태 드라이브 내의 가변 크기 플래시 변환 계층에 대한 아키텍처는 하드웨어 집중적이다. 페이지 헤더는 사용자 데이터가 고체 상태 드라이브의 페이지 내의 다수의 판독 유닛 중에 저장되는 경우를 식별하기 위해 사용되고, 데이터를 추출하는 것은 우선 페이지 헤더를 판독하고 파싱하는 것을 수반한다.
A conventional solid state drive stores a fixed integer number of host logical blocks in each page of non-volatile memory. The storage efficiency problem occurs when the user data size or usable size of each page of the non-volatile memory is not fixed. The architecture for the variable size flash translation layer within the solid state drive is hardware intensive. The page header is used to identify when user data is stored among multiple read units within a page of a solid state drive, and extracting the data involves first reading and parsing the page header.

본 발명은 가변 크기 플래시 변환 계층을 사용하는 방법에 관한 것이다. 단계 (A)는 비휘발성 메모리로부터 논리 블록 어드레스에 대응하는 데이터를 판독하라는 판독 요청을 수신한다. 단계 (B)는 (i) 비휘발성 메모리의 특정 페이지의 물리 어드레스, (ii) 이전에 저장된 압축된 데이터에 대한 특정 페이지의 오프셋 및 (iii) 압축된 데이터의 길이를 획득하기 위해 맵의 특정 엔트리를 판독한다. 특정 엔트리는 논리 블록 어드레스와 연관된다. 단계 (C)는 오프셋 및 길이를 (i) 특정 페이지의 소정의 판독 유닛의 어드레스 및 (ii) 판독될 판독 유닛의 개수로 변환한다. 단계 (D)는 소정의 판독 유닛으로부터 시작하여 최대한으로 판독 유닛의 개수를 특정 페이지로부터 판독한다. 오프셋 및 길이 단위(granularity)는 판독 유닛보다 작다.The present invention relates to a method of using a variable size flash translation layer. Step (A) receives a read request to read data corresponding to a logical block address from the non-volatile memory. Step (B) is a specific entry in the map to obtain (i) the physical address of a specific page of non-volatile memory, (ii) the offset of the specific page relative to previously stored compressed data, and (iii) the length of the compressed data. read the A specific entry is associated with a logical block address. Step (C) converts the offset and length into (i) the address of a given read unit of a particular page and (ii) the number of read units to be read. Step (D) reads the maximum number of read units from a specific page, starting with a predetermined read unit. Offset and granularity are smaller than read units.

본 발명의 실시예는 이하의 상세한 설명 및 첨부 청구범위 및 도면으로부터 명백할 것이다.
도 1은 논리 블록 어드레스를 플래시 페이지 내의 고정 크기 영역에 매핑하는 일 실시예의 선택된 상세의 예시이다.
도 2는 논리 블록 어드레스를 플래시 페이지에 선택적으로 걸치는 가변 크기 영역에 매핑하는 일 실시예의 선택된 상세의 예시이다.
도 3은 정수의 판독 유닛을 포함하는 플래시 페이지의 일 실시예의 예시이다.
도 4는 논리 블록 어드레스를 하나 이상의 판독 유닛에 걸치는 가변 크기 영역에 매핑하는 일 실시예의 선택된 상세의 예시이다.
도 5는 헤더 및 데이터를 포함하는 판독 유닛의 일 실시예에 대한 선택된 상세의 예시이다.
도 6은 헤더 및 데이터를 포함하는 플래시 페이지의 일 실시예에 대한 선택된 상세의 예시이다.
도 7은 본 발명의 일 실시예에 따른 헤더 및 데이터를 포함하는 플래시 페이지의 일 실시예에 대한 선택된 상세의 예시이다.
도 8은 다양한 타입의 헤더의 일 실시예에 대한 선택된 상세의 예시이다.
도 9는 맵 엔트리의 일 실시예에 대한 선택된 상세의 예시이다.
도 10은 다양하게 압축된 맵 엔트리의 일 실시예에 대한 선택된 상세의 예시이다.
도 11은 비휘발성 메모리를 판독하는 흐름도이다.
도 12는 고체 상태 드라이브 컨트롤러의 일 실시예에 대한 선택된 상세의 예시이다.
Embodiments of the present invention will be apparent from the following detailed description and appended claims and drawings.
1 is an illustration of selected details of one embodiment of mapping logical block addresses to fixed size regions within a flash page.
2 is an illustration of selected details of one embodiment of mapping logical block addresses to variable size regions that selectively span a flash page.
3 is an illustration of one embodiment of a flash page comprising an integer number of read units.
4 is an illustration of selected details of one embodiment of mapping logical block addresses to variable size regions spanning one or more read units.
5 is an illustration of selected details of one embodiment of a read unit comprising a header and data;
6 is an illustration of selected details of one embodiment of a flash page including a header and data.
7 is an illustration of selected details of one embodiment of a flash page including a header and data in accordance with an embodiment of the present invention.
8 is an illustration of selected details for one embodiment of various types of headers.
9 is an illustration of selected details for one embodiment of a map entry.
10 is an illustration of selected details of one embodiment of various compressed map entries.
11 is a flowchart of reading a non-volatile memory.
12 is an illustration of selected details for one embodiment of a solid state drive controller.

본 발명의 실시예는 (i) 광범위한 데이터 크기를 지원하고/하거나, (ii) 타일링(tiling) 프로세스로 헤더를 생성하고/하거나, (iii) 언타일링(un-tiling) 프로세스로 헤더를 파싱하고/하거나, (iv) 각각의 페이지의 시작에 모든 헤더를 배치하고/하거나, (v) 각각의 페이지의 헤더 뒤에 모든 데이터를 배치하고/하거나, (vi) 판독 유닛 경계에 할당되지 않은 오프셋 및 헤더를 사용하고/하거나 (vii) 하나 이상의 집적 회로 및/또는 연관된 펌웨어로 구현될 수 있는 가변 크기 플래시 변환 계층을 제공하는 것을 포함한다.Embodiments of the present invention (i) support a wide range of data sizes, (ii) generate headers with a tiling process, and/or (iii) parse headers with an un-tiling process; and/or (iv) placing all headers at the beginning of each page, (v) placing all data after the header of each page, and/or (vi) unassigned offsets and headers on read unit boundaries. and/or (vii) providing a variable size flash translation layer that may be implemented in one or more integrated circuits and/or associated firmware.

본 발명은 다수의 방법, 예를 들어 프로세스, 제조 물품, 장치, 시스템, 물질의 구성, 및 컴퓨터 판독 가능 저장 매체(예를 들어, 디스크와 같은 광 및/또는 자기 대용량 저장 장치의 매체, 플래시 스토리지와 같은 비휘발성 스토리지를 갖는 집적 회로)와 같은 컴퓨터 판독 가능 매체, 또는 프로그램 명령어가 광 또는 전자 통신 링크를 통해 송신되는 컴퓨터 네트워크로 구현될 수 있다. 상세한 설명은 위에서 확인된 필드에서 사용의 비용, 수익성, 효율, 및 유용성의 개선을 가능하게 하는 본 발명의 하나 이상의 실시예의 설명을 제공한다. 상세한 설명은 상세한 설명의 나머지의 이해를 용이하게 하는 서론을 포함한다. 서론은 본 명세서에 설명된 개념에 따른 시스템, 방법, 제조 물품, 및 컴퓨터 판독 가능 매체 중 하나 이상에 대한 예시적 실시예를 포함한다. 더 상세히 논의되는 바와 같이, 본 발명은 특허받은 청구 범위 내의 모든 가능한 수정 및 변화를 포괄한다.The present invention is directed to a number of methods, including processes, articles of manufacture, devices, systems, compositions of matter, and computer readable storage media (eg, media in optical and/or magnetic mass storage devices such as disks, flash storage). may be implemented in a computer readable medium such as an integrated circuit having non-volatile storage such as The detailed description provides a description of one or more embodiments of the invention that enable improvements in cost, profitability, efficiency, and utility of use in the fields identified above. The Detailed Description includes an introduction that facilitates understanding of the remainder of the Detailed Description. The Introduction includes illustrative embodiments of one or more of the systems, methods, articles of manufacture, and computer readable media in accordance with the concepts described herein. As will be discussed in greater detail, the present invention embraces all possible modifications and variations within the scope of the appended claims.

FTL(예를 들어, Flash translation layer)은 논리 블록 어드레스 공간(입력/출력 동작을 입력/출력 장치에 수행하는 호스트에 의해 사용되는 것과 같은)의 LBA(예를 들어, logical block address)를 NAND 플래시 비휘발성 메모리와 같은 비휘발성 메모리(예를 들어, NVM)의 물리 위치에 매핑한다. 매핑은 매핑 유닛으로 칭해지는 하나 이상의 논리 블록의 정렬된 유닛 상에서 동작되며, 그 결과 각각의 매핑 유닛은 매핑 유닛의 데이터가 저장되는 대응하는 물리 위치를 갖는다(매핑 유닛이 결코 기록되지 않았거나 트리밍되면 NULL 물리 위치의 가능성을 포함함). 예를 들어, 4 KB(예를 들어, kilobyte) 매핑 유닛의 경우, 8개의 인접한(및 전형적으로 8개의 섹터 정렬된) SATA(예를 들어, Serial Advanced Technology Attachment) 512 바이트 섹터는 단일 유닛으로 매핑된다. 일반적으로, 맵과 같은 변환 테이블은 각각의 변환을 매핑 유닛과 연관된 논리 블록 어드레스로부터 비휘발성 메모리 및/또는 다른 제어 정보 내의 물리 어드레스로 저장하기 위해 매핑 유닛 당 엔트리를 갖는다.The FTL (e.g. Flash translation layer) converts the LBA (e.g., the logical block address) of the logical block address space (such as used by the host performing input/output operations to input/output devices) to NAND Flash. It maps to a physical location in a non-volatile memory (eg, NVM), such as a non-volatile memory. Mapping operates on ordered units of one or more logical blocks, called mapping units, such that each mapping unit has a corresponding physical location where the mapping unit's data is stored (if a mapping unit has never been written or trimmed) including the possibility of a NULL physical position). For example, for a 4 KB (eg kilobyte) mapping unit, 8 contiguous (and typically 8 sector aligned) SATA (eg Serial Advanced Technology Attachment) 512 byte sectors are mapped into a single unit. do. In general, a translation table, such as a map, has an entry per mapping unit to store each translation from a logical block address associated with the mapping unit to a physical address in non-volatile memory and/or other control information.

NAND 플래시와 같은 비휘발성 메모리는 플래시 페이지로 칭해지는 기록 가능(또는 프로그램 가능) 유닛을 제공한다. 플래시 페이지는 사용자(비에러 정정 코드) 데이터 바이트의 수 및 메타데이터 및 ECC(예를 들어, error correction coding)에 대한 여유 공간의 양을 포함하고, 일반적으로 비휘발성 메모리의 최소 기록 가능 유닛이다. 전형적 플래시 페이지 크기는 사용자 데이터의 8KB 또는 16KB 또는 32KB 인 반면, 전형적 매핑 유닛 크기는 4KB 또는 8KB이다. (용어 "사용자" 데이터가 플래시 페이지에 대해 사용되지만, 일부 플래시 페이지는 맵 데이터 및/또는 체크포인트 데이터와 같은 "시스템" 데이터를 저장한다. 사용자 데이터는 일반적으로 플래시 페이지의 비-ECC 부분을 지칭하도록 의도된다.) 플래시 페이지는 블록 전형적으로 블록 당 128, 256, 또는 512 플래시 페이지로 조직된다. 블록은 소거될 수 있는 최소 크기 유닛이고, 플래시 페이지는 페이지가 (재)기록될 수 있기 전에 소거된다.Non-volatile memory, such as NAND flash, provides a writable (or programmable) unit called a flash page. A flash page contains the number of bytes of user (non-error correction code) data and the amount of free space for metadata and ECC (eg, error correction coding), and is typically the smallest writable unit of non-volatile memory. Typical flash page sizes are 8 KB or 16 KB or 32 KB of user data, whereas typical mapping unit sizes are 4 KB or 8 KB. (Although the term "user" data is used for flash pages, some flash pages store "system" data, such as map data and/or checkpoint data. User data generally refers to the non-ECC portion of a flash page. Flash pages are organized into blocks typically 128, 256, or 512 flash pages per block. A block is the smallest size unit that can be erased, and a flash page is erased before a page can be (re)written.

도 1을 참조하면, 논리 블록 어드레스를 플래시 페이지의 고정 크기 영역에 매핑하는 일 실시예의 선택된 상세의 예시가 도시된다. 종래의 플래시 변환 계층은 플래시 페이지(예를 들어, 플래시 페이지(100))의 다수의 사용자 데이터 바이트의 2의 거듭제곱(및/또는 섹터 크기의 배수)인 것을 가정하고, 플래시 페이지를 정수의 매핑 유닛(도 1에 데이터로 각각 도시된)으로 분할한다. 예를 들어, 플래시 페이지 당 16KB의 사용자 데이터 및 4KB 매핑 유닛의 경우, 각각의 플래시 페이지는 4개의 매핑 유닛을 포함하고, 플래시 변환 계층은 각각의 매핑 유닛의 어드레스(예를 들어, LBA[M:U](110))를 각각의 플래시 페이지에 매핑하고 4개의 매핑 유닛 중 하나를 각각의 플래시 페이지에 매핑한다. 즉, 각각의 맵 엔트리는 이하와 같은 각각의 필드를 포함한다:1 , an illustration of selected details of one embodiment of mapping a logical block address to a fixed size region of a flash page is shown. A conventional flash translation layer assumes that the number of user data bytes of a flash page (eg, flash page 100) is a power of two (and/or a multiple of the sector size), and maps the flash page to an integer Divide into units (each shown as data in FIG. 1). For example, for 16 KB of user data and 4 KB mapping unit per flash page, each flash page contains 4 mapping units, and the flash translation layer has the address of each mapping unit (eg, LBA[M: U] 110) to each flash page and maps one of the four mapping units to each flash page. That is, each map entry contains each field as follows:

flash_page_address [n-1:0], flash_page_address가 비휘발성 메모리의 고유 플래시 페이지를 지칭하는 mapping_unit_within_flash_page [k-1:0] - mapping_unit_within_flash_page는 각각의 플래시 페이지의 2k 매핑 유닛 크기 부분(k는 전체 비휘발성 메모리에 대해 고정임) 중 하나를 지칭함 -. 서브페이지 어드레스(104)는 flash_page_address 및 mapping_unit_within_flash_page의 조합이다. 섹터 기반 어드레싱에 대해, 논리 블록 어드레스의 저차 비트(예를 들어, LBA [U-1:0](111))는 매핑 유닛 내에 다수의 섹터(예를 들어, 서브페이지(113) 내의 섹터(들))와 같은 서브 부분을 지정한다.mapping_unit_within_flash_page [k-1:0] where flash_page_address [n-1:0], flash_page_address refers to a unique flash page in non-volatile memory - mapping_unit_within_flash_page is the 2 k mapping unit size portion of each flash page, where k is the total non-volatile memory is fixed for ) refers to one of -. The subpage address 104 is a combination of flash_page_address and mapping_unit_within_flash_page. For sector-based addressing, the lower-order bits of the logical block address (eg, LBA [U-1:0] 111 ) are mapped to multiple sectors within a mapping unit (eg, sector(s) within subpage 113 ). ))) and specify a sub-part.

도 2를 참조하면, 논리 블록 어드레스를 플래시 페이지에 선택적으로 걸치는 가변 크기 영역에 매핑하는 일 실시예의 선택된 상세의 예시가 도시된다. VFTL(예를 들어, variable-size flash translation layer)은 매핑 유닛의 어드레스(예를 들어, LBA [M:U](110))를 하나 이상의 플래시 페이지의 가변 크기 영역에 개념적으로 매핑한다(예를 들어, 매핑 유닛의 데이터가 플래시에 저장되기 전에 압축되기 때문에, 및/또는 다른 예에서, 매핑 유닛이 호스트에 의해 객체 스토어에 대해서와 같이 가변 크기 피스로 기록되기 때문에). 그러나, 각각의 맵 엔트리에 완전한 바이트 어드레스(204) 및 바이트 데이터 길이(206)를 제공하는 것은 종래의 플래시 변환 계층과 비교될 때 맵 엔트리를 크게 한다.2 , an illustration of selected details of one embodiment of mapping a logical block address to a variable size region that selectively spans a flash page is shown. A VFTL (e.g., variable-size flash translation layer) conceptually maps (e.g., an address of a mapping unit (e.g., LBA [M:U] 110)) to a variable-size region of one or more flash pages (e.g., Because the data in the mapping unit is compressed before being stored in flash, and/or because, in another example, the mapping unit is written by the host in variable size pieces, such as to an object store). However, providing each map entry with a complete byte address 204 and byte data length 206 makes the map entry larger when compared to a conventional flash translation layer.

가변 크기 플래시 변환 계층은 일부 SSD(예를 들어, solid-state disk)에 사용된다. 고체 상태 디스크 시스템은 일반적으로 랜덤 액세스 성능 제약이 전체 시스템 설계에서 구동 인자인 하이 엔드 클라이언트 및/또는 엔터프라이즈 응용을 위해 설계되었다. 로우 엔드 및/또는 이동 환경을 위한 가변 크기 플래시 변환 계층을 구성하기 위해, 변화는 구동 인자로서 순차 성능을 구성하기 위해 구현될 수 있다. 본 발명의 실시예는 순차 판독 성능이 지배적인 제약인 덜 비싸고 더 효율적인 로우 엔드 및 이동 비휘발성 메모리 시스템을 가능하게 하기 위해 사용자 데이터 및 VFTL 메타데이터를 조직하는 하나 이상의 방법을 제공한다.A variable size flash translation layer is used in some SSDs (eg solid-state disks). Solid state disk systems are typically designed for high-end client and/or enterprise applications where random access performance constraints are a driving factor in the overall system design. To configure a variable size flash conversion layer for low-end and/or mobile environments, variations can be implemented to configure sequential performance as a driving factor. Embodiments of the present invention provide one or more methods of organizing user data and VFTL metadata to enable less expensive and more efficient low-end and removable non-volatile memory systems where sequential read performance is a dominant constraint.

도 3을 참조하면, 정수의 판독 유닛을 포함하는 플래시 페이지의 일 실시예의 예시가 도시된다. 일부 실시예에서, 가변 크기 플래시 변환 계층은 또한 "판독 유닛" 어드레스로 칭해지는 Epage(예를 들어, ECC page) 어드레스에 매핑함으로써 매핑 유닛의 어드레스로부터 물리 어드레스까지 매핑을 수행한다. Epage(또는 판독 유닛)은 비휘발성 메모리로부터 판독되고 비휘발성 메모리의 콘텐츠를 보호하기 위해 사용되는 에러 정정 코드에 의해 정정될 수 있는 최소 양의 데이터이다. 즉, 각각의 판독 유닛은 데이터의 양 및 그 데이터를 보호하는 상응하는 ECC 체크 바이트를 포함한다. 일부 실시예에서, 플래시 페이지(플래시 페이지(100)와 같은), 또는 다른 실시예에서, 기록의 목적을 위한 유닛으로 취급되는 플래시 페이지의 그룹은 도 3에 예시된 바와 같이 정수의 판독 유닛으로 분할된다.3 , an illustration of one embodiment of a flash page comprising an integer number of read units is shown. In some embodiments, the variable size flash translation layer performs mapping from the address of the mapping unit to the physical address by mapping to an Epage (eg, ECC page) address, also referred to as a “read unit” address. An Epage (or read unit) is the smallest amount of data that can be read from a non-volatile memory and corrected by an error correction code used to protect the contents of the non-volatile memory. That is, each read unit contains an amount of data and a corresponding ECC check byte protecting that data. In some embodiments, a flash page (such as flash page 100), or in other embodiments a group of flash pages treated as a unit for the purpose of writing, is divided into an integer number of read units as illustrated in FIG. do.

다양한 실시예에서, 플래시 페이지 당 판독 유닛의 수는 변화되도록 허용된다. 예를 들어, 비휘발성 메모리의 일부 부분은 다른 것(에러 정정 코딩을 위해 플래시 페이지에서 더 많은 바이트를 사용하는)보다 더 강한 에러 정정 코드를 사용하고, 판독 유닛 당 더 적은 판독 유닛 및/또는 더 적게 사용 가능한 데이터를 갖는다. 다른 예에서, 플래시 페이지 당 판독 유닛의 수는 비휘발성 메모리가 사용됨에 따라 변화되어, 프로그램/삭제 사이클은 비휘발성 메모리를 약화시키는 경향이 있으므로, 비휘발성 메모리가 더 사용(마모)됨에 따라 더 강한 에러 정정 코드를 초래한다.In various embodiments, the number of read units per flash page is allowed to vary. For example, some portions of non-volatile memory use stronger error-correcting codes than others (which use more bytes in flash pages for error-correcting coding), fewer read units per read unit and/or more There is less data available. In another example, the number of read units per flash page changes as the non-volatile memory is used, so that program/erase cycles tend to weaken the non-volatile memory and thus become stronger as the non-volatile memory becomes more used (wearable). This results in an error correction code.

다양한 실시예에 따르면, 사용되는 에러 정정 코드는 RS(예를 들어, Reed-Solomon) 코드; BCH(예를 들어, Bose Chaudhuri Hocquenghem) 코드; 터보 코드; LDPC(예를 들어, low-density parity-check) 코드; 극성 코드; 비이진 코드; RAID(예를 들어, redundant array of inexpensive/independent disk) 코드; 소거 코드; 임의의 다른 에러 정정 코드; 구성, 연결, 및 인터리빙을 포함하는 상술한 것의 임의의 조합 중 하나 이상이다. 전형적 코드워드 크기는 512 바이트(플러스 ECC 바이트)에서 2176 바이트(플러스 ECC 바이트)까지의 범위이다. 전형적인 ECC 바이트의 수는 단지 몇 바이트에서 수백 바이트까지의 범위이다.According to various embodiments, the error correction code used may include an RS (eg, Reed-Solomon) code; BCH (eg, Bose Chaudhuri Hocquenghem) codes; turbo code; LDPC (eg, low-density parity-check) codes; polarity code; non-binary code; RAID (eg redundant array of inexpensive/independent disk) codes; erasure code; any other error correction code; one or more of any combination of the foregoing including configuration, connection, and interleaving. Typical codeword sizes range from 512 bytes (plus ECC bytes) to 2176 bytes (plus ECC bytes). A typical number of ECC bytes ranges from just a few bytes to hundreds of bytes.

도 4를 참조하면, 논리 블록 어드레스를 하나 이상의 판독 유닛에 걸치는 가변 크기 영역에 매핑하는 일 실시예의 선택된 상세의 예시가 도시된다. 일부 실시예에서, VFTL 매핑은 가변 크기(예를 들어, 압축된) 매핑 유닛의 어드레스(예를 들어, LBA[M:U](110))를 판독 유닛 어드레스(404) 및 스팬(판독 유닛의 개수)(406)으로서 맵의 각각의 엔트리으로 표현되는 판독 유닛의 개수에 매핑한다. 맵 엔트리 중 하나에 의해 참조되는 판독 유닛은 하나 이상의(논리적으로 및/또는 물리적으로) 순차 플래시 페이지, 예를 들어 옵션으로 및/또는 선택적으로 플래시 페이지 경계를 가로지르는 판독 유닛의 개수이다. 맵의 엔트리만으로는 일반적으로 연관된 데이터를 위치시키기에 충분하지 않고(엔트리가 판독 유닛만을 참조하고, 판독 유닛 내의 데이터의 위치를 참조하지 않으므로), 참조된 판독 유닛 내의 추가 정보(헤더와 같은)는 연관된 데이터를 정확히 위치시키기 위해 사용된다.4 , an illustration of selected details of one embodiment of mapping a logical block address to a variable size region spanning one or more read units is shown. In some embodiments, VFTL mapping is a variable size (eg, compressed) mapping unit's address (eg, LBA[M:U] 110 ) to read unit address 404 and span (eg, read unit's address). number) 406 to the number of read units represented by each entry in the map. The read unit referenced by one of the map entries is the number of read units that traverse one or more (logically and/or physically) sequential flash pages, eg, optionally and/or optionally flash page boundaries. Entries in the map alone are generally not sufficient to locate the associated data (since the entry only refers to the read unit, not the location of the data within the read unit), and additional information (such as headers) within the referenced read unit is not sufficient to locate the associated data. It is used to accurately position the data.

일부 실시예에서, 데이터는 비휘발성 메모리의 다수의 다이를 가로질러 스트라이핑되는 방식으로 플래시 페이지에 기록된다. 다수의 다이를 가로질러 기록 데이터를 스트라이핑하는 것은 플래시 페이지를 스트라이프 당 한 번 주어진 다이로 단지 기록함으로써 더 큰 기록 대역폭을 가능하게 한다. 다수의 다이를 가로지르는 블록의 스트라이프는 추가 실시예 및/또는 사용 시나리오에서 RAID와 같은 리던던시가 예를 들어 하나의 리던던시 다이를 사용하여 리던던시 블록상에 추가되기 때문에 리던던시 블록으로 칭해진다. 다양한 실시예에서, 비휘발성 메모리의 일부 블록은 결함이 있어 기록 시에 스킵되며, 그 결과 스트라이핑은 때때로 다이 중 하나가 스킵되는 (나쁜 블록의 플래시 페이지 내로의 기록보다는 오히려) 구멍을 갖는다. 그러한 실시예에서, "순차" 플래시 페이지는 플래시 페이지가 기록되는 순서에 의해 결정되는 로직 순서에 순차적이다.In some embodiments, data is written to a flash page in a manner that is striped across multiple dies of non-volatile memory. Striping write data across multiple dies enables greater write bandwidth by only writing flash pages to a given die once per stripe. A stripe of blocks across multiple dies is referred to as a redundancy block because in further embodiments and/or usage scenarios redundancy such as RAID is added onto the redundancy block using, for example, one redundancy die. In various embodiments, some blocks of non-volatile memory are defective and are skipped upon write, so that the striping sometimes has a hole through which one of the dies is skipped (rather than writing a bad block into a flash page). In such an embodiment, "sequential" flash pages are sequential in a logical order determined by the order in which the flash pages are written.

도 5를 참조하면, 헤더 및 데이터를 포함하는 판독 유닛의 일 실시예에 대한 선택된 상세의 예시가 도시된다. 다양한 실시예에서, 도 4에 예시된 매핑은 판독 유닛 내에 가변 크기 데이터를 위치시키는 기준을 발생시킨다. 도 5에 예시된 바와 같이, 각각의 판독 유닛(예를 들어, 판독 유닛(500 및 510))은 하나의 헤더(501)를 갖고, 헤더는 전형적으로 가변 크기 데이터가 하나 이상의 판독 유닛으로 "타일링"(예를 들어, 폐기된 공간 없이 조밀하게 패킹)되므로 하드웨어에 의해 기록된다. 헤더는 전형적으로 비휘발성 메모리가 판독될 때 가변 크기 데이터를 추출하기 위해 다른 하드웨어에 의해 해석된다. 가변 크기 데이터는 매칭 논리 블록 어드레스를 갖는 헤더 중 하나에서 각각의 오프셋 및 길이에 의해 위치되고, 데이터는 옵션으로 및/또는 선택적으로 판독 유닛("데이터, 시작" 및 "데이터, 계속"에 의해 예시되는 가변 크기 데이터에 의해 예시된 것과 같은)에 걸친다.5 , an illustration of selected details of one embodiment of a read unit comprising a header and data is shown. In various embodiments, the mapping illustrated in FIG. 4 generates criteria for locating variable size data within the read unit. As illustrated in FIG. 5 , each read unit (eg, read units 500 and 510 ) has one header 501 , which typically includes variable size data “tiling” into one or more read units. "(ie, densely packed with no wasted space), so it is written by the hardware. The header is typically interpreted by other hardware to extract variable size data when the non-volatile memory is read. Variable size data is located by respective offsets and lengths in one of the headers with matching logical block addresses, the data optionally and/or optionally illustrated by read units ("data, start" and "data, continue") as exemplified by the variable size data being

다양한 실시예에서, 헤더는 또한 재이용(예를 들어, 가비지 컬렉션)의 일부로서 사용된다 - 헤더에 논리 블록 어드레스(또는 등가적으로, 매핑 유닛 어드레스)를 포함하는 것은 판독 유닛에서 가변 크기 데이터를 찾는 것을 가능하게 하고, 가변 크기 데이터가 내부에서 여전히 유효하거나 중복 기재되었다면(맵에서 논리 블록 어드레스를 룩업하고 맵이 여전히 특정 판독 유닛의 물리 어드레스를 참조하거나, 핀독 유닛 중 다른 판독 유닛을 참조하도록 갱신되었는지를 판단함으로써) 판독 유닛 중 특정 판독 유닛이 판독될 때를 결정하는 방식을 제공한다.In various embodiments, the header is also used as part of reuse (eg, garbage collection) - including a logical block address (or equivalently, a mapping unit address) in the header means finding variable size data in a read unit. If the variable size data is still valid or overwritten inside (look up the logical block address in the map and the map is updated to still refer to the physical address of a particular read unit, or to refer to another one of the pindog units) ) provides a way to determine when a particular one of the read units is to be read.

일부 실시예에서, 논리 블록 어드레스에 기초하여 판독 유닛으로부터 데이터를 추출하는 전용 하드웨어는 랜덤 판독을 위해 고효율로 동작하도록 구현된다. 전용 하드웨어는 주어진 논리 블록 어드레스를 갖는 헤더 중 하나를 발견하기 위해 하나 이상의 판독 유닛에서 헤더를 파싱하며, 그 다음에 연관된 가변 크기 데이터를 추출하기 위해 각각의 길이 및 오프셋을 사용한다. 그러나, 하드웨어 기반 해결법은 (실리콘 면적 및 전력에서) 비용이 많이 든다. 순차 성능이 랜덤보다 더 중요한 로우 엔드 및/또는 이동 환경에 대해, 변화는 실리콘 면적을 감소시키고, 전력을 절약하고, 높은 순차 처리율을 달성하기 위해 가변 크기 플래시 변환 계층에 구현된다.In some embodiments, dedicated hardware that extracts data from the read unit based on logical block addresses is implemented to operate with high efficiency for random reads. Dedicated hardware parses the header in one or more read units to find one of the headers with a given logical block address, and then uses the respective length and offset to extract the associated variable size data. However, hardware-based solutions are expensive (in silicon area and power). For low-end and/or mobile environments where sequential performance is more important than random, the change is implemented in a variable size flash translation layer to reduce silicon area, save power, and achieve high sequential throughput.

일부 실시예에서, SRO-VFTL(예를 들어, sequential-read-optimized variable-size flash translation layer)은 데이터 내의 헤더에 대한 임의의 갭 없이 데이터를 플래시 페이지(또는, 일부 실시예에서, 기록의 목적을 위한 유닛으로서 취급되는 플래시 페이지의 그룹)로 타일링한다 - 모든 헤더는 플래시 페이지의 일 부분으로 그룹화된다. 추가 실시예에서, 헤더는 (일부 가변 크기 플래시 변환 계층에서와 같이) 데이터에 액세스하기 위해 동적으로 사용되지 않는 것이 아니라, 재이용 및 복구에만 사용된다. 그 대신에, 맵의 엔트리는 플래시 페이지의 가변 크기(예를 들어, 압축된) 데이터를 발견하기 위해 사용되는 완전한 정보를 포함한다. 헤더 및 데이터를 플래시 페이지의 상이한 부분으로 분리하는 것은 헤더만을 포함하는 판독 유닛, 헤더 및 데이터(그러나 플래시 페이터 당 단지 하나의 그러한 판독 유닛)의 혼합을 포함하는 판독 유닛, 및 데이터만을 포함하는 판독 유닛을 초래한다.In some embodiments, the SRO-VFTL (eg, sequential-read-optimized variable-size flash translation layer) flashes the data without any gaps to the header in the data (or, in some embodiments, for the purpose of writing) (groups of flash pages treated as units for In a further embodiment, the header is not used dynamically to access data (as in some variable size flash translation layers), but is only used for reuse and recovery. Instead, the entries in the map contain complete information used to discover variable size (eg, compressed) data of flash pages. Separating the header and data into different parts of a flash page includes a read unit containing only the header, a read unit containing a mixture of header and data (but only one such read unit per flash pager), and a read unit containing only data causes

저비용으로 순차 판독 처리량을 위해 구성되지만, 순차 판독 최적화 가변 크기 플래시 변환 계층은 초(예를 들어, IOP) 당 랜덤 판독 입력/출력 동작, 초 당 랜덤 기록 입력/출력 동작, 및 순차 기록 처리량과 같은 다른 메트릭스상에서 비교적 잘 수행될 수 있다. 그러나, 하드웨어의 제거는 제어 프로세서에 큰 부담을 주는 각각의 판독 유닛에서 헤더에 의한 VFTL 스타일 데이터 타일링과 같은 기능을 원조한다.Although configured for sequential read throughput at low cost, the sequential read optimized variable size flash transformation layer provides It can perform relatively well on other metrics. However, the removal of hardware aids functions such as VFTL style data tiling by header in each read unit which places a heavy burden on the control processor.

도 6을 참조하면, SRO-VFTL 플래시 페이지의 제 1 실시예의 예시가 도시된다. 도 7을 참조하면, SRO-VFTL 플래시 페이지의 제 2 실시예의 예시가 본 발명의 일 실시예에 따라 도시된다. 도 6 및 도 7의 실시예 사이의 차이는 이전 플래시 페이지(640)로부터의 연속 데이터가 헤더 이전에 있는지 이후에 있는지의 여부이다. 플래시 페이지 내의 데이터의 다양한 실시예 및 배열이 고려된다.6 , an illustration of a first embodiment of an SRO-VFTL flash page is shown. Referring to Figure 7, an illustration of a second embodiment of an SRO-VFTL flash page is shown in accordance with an embodiment of the present invention. The difference between the embodiments of Figures 6 and 7 is whether the continuation data from the previous flash page 640 is before or after the header. Various embodiments and arrangements of data within a flash page are contemplated.

다양한 실시예에 따르면, 플래시 페이지는 이하 중 하나 이상을 포함한다:According to various embodiments, the flash page includes one or more of the following:

- 마스터 헤더(610), 옵션으로 및/또는 선택적으로 리던던시 블록 헤더(620)(예를 들어, 리던던시 블록 내의 각각의 블록의 제 1 페이지에 추가된 헤더), 및 제로 이상의 부가 패킹 헤더(630)를 포함하는 헤더. 모든 플래시 페이지는 적어도 데이터(헤더와 연관된)가 플래시 페이지에서 시작되는 이하의 헤더 및 포인터의 수의 카운트를 갖는다. 일부 실시예에서, 헤더는 바이트 정렬될 수 있지만, 각각 6 바이트(예를 들어, B)만이다. 헤더는 데이터 헤더, 에포크 헤더 및 패딩을 포함할 수 있지만, 이에 제한되지 않는다. 데이터 헤더는 매핑 유닛 어드레스 및 길이를 이용한다. 오프셋은 모든 데이터가 연속적으로 패킹되기 때문에 암시적이다.- a master header 610, optionally and/or optionally a redundancy block header 620 (e.g., a header added to the first page of each block within the redundancy block), and zero or more additional packing headers 630 header containing . Every flash page has at least a count of the number of headers and pointers below where the data (associated with the header) begins in the flash page. In some embodiments, headers may be byte aligned, but only 6 bytes each (eg, B). The header may include, but is not limited to, a data header, an epoch header, and padding. The data header uses the mapping unit address and length. The offset is implicit because all data is packed contiguously.

- 옵션으로 및/또는 선택적으로 이전 플래시 페이지로부터의 연속 데이터(매핑 유닛의 가변 크기 데이터의 일부)(640).- optionally and/or optionally continuous data from a previous flash page (part of the variable size data of the mapping unit) 640 .

- 플래시 페이지를 채우는 하나 이상의 매핑 유닛(650)의 패킹된(예를 들어, 옵션으로 및/또는 선택적으로 압축된) 데이터, 그 마지막은 옵션으로 및/또는 선택적으로 후속 플래시 페이지에서 계속된다.- packed (eg optionally and/or optionally compressed) data of one or more mapping units 650 filling the flash page, optionally and/or optionally continuing in a subsequent flash page.

- 플래시 페이지의 마지막에서의 선택적 패딩(650에 포함되는). 다양한 실시예에서, 데이터가 바이트 패킹되지만(예를 들어, 구멍이 없음), 높게 압축되면(예를 들어, 매우 많은 헤더) 플래시 페이지의 마지막에서 패딩되는 것이 가능하다. 패딩은 예를 들어 (i) 플래시 페이지에 추가된 데이터의 마지막 가변 크기 피스가 헤더의 크기보다 더 적은 미사용 바이트로 남겨져서(새로운 헤더가 데이터의 다른 가변 크기 피스를 시작하도록 추가될 수 없으면) 그리고 (ii) 옵션으로 및/또는 선택적으로, 플래시 페이지 당 지정된 수의 헤더가 초과되어(플래시 페이지에 저장되는 지정된 수의 매핑 유닛이 지정된 수의 헤더에 의해 제한되고 매핑 유닛의 데이터의 크기에 의해 제한되지 않으면) 사용된다.- optional padding at the end of the flash page (included in 650). In various embodiments, it is possible that the data is byte packed (eg, no holes), but is padded at the end of the flash page if highly compressed (eg, very many headers). Padding may occur for example (i) because the last variable-size piece of data added to the flash page is left with fewer unused bytes than the size of the header (unless a new header can be added to begin another variable-size piece of data) and (ii) optionally and/or optionally, the specified number of headers per flash page is exceeded (the specified number of mapping units stored in the flash page is limited by the specified number of headers and limited by the size of the data in the mapping unit) otherwise) is used.

일부 실시예에서, 순차 판독 최적화 가변 크기 플래시 변환 계층에 의한 복구 및/또는 재이용(예를 들어, 가비지 컬렉션)은 유리하게 플래시 페이지 각각의 헤더 부분만을 판독하고/하거나 에러 정정하고/하거나 검사할 수 있고, 비순차 판독 최적화 가변 크기 플래시 변환 계층에서와 같이 모든 판독 유닛을 그렇게 할 수 있는 것은 아니다. 재이용이 플래시 페이지의 데이터가 재기록될 수 있다고 판단하면, 그 데이터는 또한 판독될 수 있고 또한 에러 정정될 수 있다. 일부 실시예에서, 전체 플래시 페이지는 재이용을 위해 판독되지만, 헤더 부분만은 플래시 페이지 내의 일부 데이터가 재이용되어야 한다는 판단이 이루어질 때까지 에러 정정된다.In some embodiments, recovery and/or reuse (eg, garbage collection) by the sequential read optimization variable size flash translation layer may advantageously read, error correct, and/or inspect only the header portion of each flash page. However, not all read units are capable of doing so, as in out-of-order read optimization variable size flash translation layers. If reuse determines that the data in the flash page can be rewritten, that data can also be read and error corrected. In some embodiments, the entire flash page is read for reuse, but only the header portion is error corrected until a determination is made that some data in the flash page should be reused.

다양한 실시예에서, 플래시 페이지 당 헤더의 개수는 모든 헤더가 비휘발성 메모리로부터 판독된 것을 보장하기 위해 판독될 수 있는 플래시 페이지 당 판독 유닛의 개수를 억제하기 위해 제한된다. 도 6의 실시예에서, 최대 수의 헤더를 포함하기에 충분한 개수의 판독 유닛만이 판독된다. 도 7의 실시예에서, 추가적인 개수의 판독 유닛이 이전 플래시 페이지(예를 들어, 연속 데이터(640))로부터 완료되는 최대 크기의 데이터를 처리하기 위해 판독된다. 그러나, 도 7의 실시예는 데이터의 완성에서 바이트 수가 연관된 맵 엔트리의 각각의 오프셋 및 길이, 및 이전 플래시 페이지 내의 사용자(비에러 정정 코드) 데이터의 바이트의 수에 기초하여 결정되므로, 일정 개수의 판독 유닛이 연관된 맵 엔트리으로부터 결정될 이전 플래시 페이지로부터의 데이터의 완성에 액세스할 수 있게 한다. 게다가, 데이터의 완성 전의 헤더만이 옵션 리던던시 블록 헤더(각각의 블록 내의 제 1 페이지와 같은 공지된 플래시 페이지에만 존재하는) 및 마스터 헤더(각각의 플래시 페이지에 항상 존재하는)이다. 도 6의 실시예에서, 비휘발성 메모리에 2회 액세스해야 하지 않으면서 데이터의 완성을 판독하기 위해, 최대 수의 헤더가 존재하는(또는 전체 플래시 페이지가 판독되는) 것으로 가정된다.In various embodiments, the number of headers per flash page is limited to constrain the number of read units per flash page that can be read to ensure that all headers are read from non-volatile memory. In the embodiment of Figure 6, only a sufficient number of read units are read to contain the maximum number of headers. In the embodiment of FIG. 7 , an additional number of read units are read to process the maximum size of data completed from the previous flash page (eg, contiguous data 640 ). However, since the embodiment of Figure 7 is determined based on the number of bytes of user (non-error correcting code) data in the previous flash page, and the offset and length of each of the associated map entries, the number of bytes at the completion of the data is determined based on the number of bytes. Allows the read unit to access the completion of data from the previous flash page to be determined from the associated map entry. In addition, only headers before completion of data are optional redundancy block headers (which only exist in known flash pages, such as the first page in each block) and master headers (which are always present in each flash page). In the embodiment of Figure 6, it is assumed that there is a maximum number of headers (or the entire flash page is read) in order to read the completion of the data without having to access the non-volatile memory twice.

일부 실시예에서, 순차 판독 최적화 가변 크기 플래시 변환 계층은 복수의 맵 엔트리를 갖는 단일 레벨 맵을 사용한다. 다른 실시예에서, 순차 판독 최적화 가변 크기 플래시 변환 계층은 제 2 레벨 맵(예를 들어, SLM) 페이지를 가리키는 제 1 레벨 맵(예를 들어, FLM)을 갖는 2 레벨 맵(two level map)과 같은 멀티 레벨 맵을 사용하고, 제 2 레벨 맵 페이지 각각은 복수의 리프 레벨 맵 엔트리를 포함한다. 추가 실시예에서, 멀티 레벨 맵은 3개의 레벨과 같이 2개보다 많은 레벨을 갖는다. 일부 실시예 및/또는 사용 시나리오에서, 멀티 레벨 맵의 사용은 맵의 관련(예를 들어, 사용 시의) 부분만이 로컬(예를 들어, 온 칩) 메모리에 저장(예를 들어, 캐시)될 수 있게 하여, 맵을 유지하는 비용을 감소시킨다. 예를 들어, 전형적 사용 패턴이 임의의 시점에 활성인 1 기가바이트(예를 들어, GB)의 논리 블록 어드레스 공간을 갖는다면, 이때 논리 블록 어드레스 공간의 활성 1GB 부분에 액세스하기에 충분한 맵의 부분만이 비휘발성 메모리에 저장되는 것과 대조적으로 빠른 접근을 위해 로컬 저장된다. 논리 블록 어드레스 공간의 활성 부분의 외부 참조는 비휘발성 메모리로부터 멀티 레벨 맵의 하나 이상의 레벨의 요청된 부분을 인출하여, 옵션으로 및/또는 선택적으로 맵의 다른 로컬 저장된 부분을 대체한다.In some embodiments, the sequential read optimized variable size flash transform layer uses a single level map with multiple map entries. In another embodiment, the sequential read optimized variable size flash translation layer is a first level map (eg, SLM) pointing to a second level map (eg, SLM) page. FLM) using a multi-level map, such as a two level map, each of the second level map pages including a plurality of leaf level map entries. In a further embodiment, the multi-level map has more than two levels, such as three levels. In some embodiments and/or usage scenarios, the use of a multi-level map allows only the relevant (eg, in use) portion of the map to be stored in local (eg, on-chip) memory (eg, cache). to reduce the cost of maintaining the map. For example, if a typical usage pattern has a logical block address space of 1 gigabyte (eg, GB) active at any point in time, then the portion of the map sufficient to access the active 1 GB portion of the logical block address space. only stored locally for quick access as opposed to being stored in non-volatile memory. External references of the active portion of the logical block address space fetch requested portions of one or more levels of the multi-level map from non-volatile memory, optionally and/or optionally replacing other locally stored portions of the map.

리프 레벨 맵 엔트리 각각은 복수의 매핑 유닛 중 하나에 대한 어드레스와 연관된다(상응한다). 논리 블록 어드레스는 논리 블록 어드레스의 제로 이상의 LSB(예를 들어, least-significant bit)를 제거하고/하거나 정렬의 목적을 위해 논리 블록 어드레스에 상수를 추가함으로써와 같이, 매핑 유닛 어드레스로 변환되고, 매핑 유닛 어드레스는 맵의 상응하는 엔트리를 결정하기 위해 맵에서 룩업된다.Each leaf level map entry is associated with (corresponding to) an address for one of a plurality of mapping units. A logical block address is translated into a mapping unit address, such as by removing zero or more LSBs (eg, least-significant bits) of the logical block address and/or adding a constant to the logical block address for purposes of alignment; The unit address is looked up in the map to determine the corresponding entry in the map.

도 8을 참조하면, 다양한 타입의 헤더에 대한 일 실시예의 상세의 예시가 도시된다. 도 8의 예에서, 헤더는 6 바이트 각각에 맞게 포맷되었다. 다양한 실시예에 따르면, 다양한 타입의 헤더는 이하 중 하나이다: 동일한 크기의 전체; 옵션으로 및/또는 선택적으로 상이한 크기; 헤더의 크기를 지정하는 각각의 필드의 각각의 포함; 상이한 플래시 페이지의 크기 변화; 및 상술한 것의 임의의 조합.Referring to FIG. 8 , an illustration of details of one embodiment for various types of headers is shown. In the example of Figure 8, the header is formatted for each of 6 bytes. According to various embodiments, the various types of headers are one of the following: a whole of the same size; optionally and/or optionally different sizes; each inclusion of each field specifying the size of the header; change in size of different flash pages; and any combination of the foregoing.

다양한 실시예에 따르면, 플래시 페이지 내의 헤더는 이하 중 하나 이상을 포함한다:According to various embodiments, the header in the flash page includes one or more of the following:

- 가변 크기 데이터 부분과 연관된 정보를 표시하는 데이터 헤더(810). 일부 실시예에서, 데이터 헤더와 연관된 데이터는 데이터 헤더가 나타남에 따라 동일한 플래시 페이지에서 시작된다. 추가 실시예 및/또는 사용 시나리오에서, 플래시 페이지만이 데이터 헤더에 대한 나머지 공간을 가지면, 연관된 데이터의 모두는 후속 플래시 페이지에서 시작된다.- a data header 810 indicating information associated with the variable size data portion. In some embodiments, the data associated with the data header begins in the same flash page as the data header appears. In further embodiments and/or usage scenarios, if only a flash page has the remaining space for a data header, then all of the associated data starts in a subsequent flash page.

- SLM(예를 들어, second-level map) 헤더(820)와 같은 맵 헤더. 제 2 레벨 맵 헤더는 (제 2 레벨 맵 재이용 및/또는 복구에 대해서와 같이) 어느 제 2 레벨 맵 페이지가 저장되고 있는지를 표시하는 FLMI(예를 들어, first-level map index)를 포함한다.- A map header, such as an SLM (eg second-level map) header 820 . The second level map header contains a FLMI (eg, first-level map index) that indicates which second level map pages are being stored (such as for second level map reuse and/or recovery).

로그/체크포인트 헤더(820). 로그/체크포인트 헤더는 재이용, 복구, 에러 처리, 디버깅, 또는 다른 특수 조건에 사용되는 데이터를 표시한다.Log/Checkpoint Header (820). The log/checkpoint header marks data used for reuse, recovery, error handling, debugging, or other special conditions.

에포크 헤더(830)는 데이터를 상응하는 맵/체크포인트 정보와 연관시키는 복구의 일부로 사용된다. 전형적으로, 플래시 페이지 당 적어도 하나의 에포크 헤더가 있다.The epoch header 830 is used as part of the recovery to associate the data with the corresponding map/checkpoint information. Typically, there is at least one epoch header per flash page.

- 마스터 헤더(870)는 플래시 페이지에 헤더의 개수에 관한 정보를 제공하기 위해 플래시 페이지 당 한 번 그리고 비헤더 데이터가 플래시 페이지 내에서 시작되는 경우 사용된다. 다양한 기법이 도 6 및 도 7의 실시예에 예시된 것과 같이 비헤더 데이터의 시작을 결정한다.- The master header 870 is used once per flash page to provide information about the number of headers in the flash page and when non-header data starts within the flash page. Various techniques determine the beginning of non-header data, as illustrated in the embodiments of FIGS. 6 and 7 .

- 리던던시 블록 헤더(880)는 리던던시 블록 내의 각각의 블록에서의 제 1 플래시 페이지와 같은 특정 플래시 페이지에 사용된다.- The redundancy block header 880 is used for a specific flash page, such as the first flash page in each block within the redundancy block.

- 패딩 헤더, 더 큰 길이를 지원하는 체크포인트 헤더 등과 같은 다른 타입의 헤더(840).- Other types of headers 840, such as padding headers, checkpoint headers supporting larger lengths, and the like.

일부 실시예에서, 일부 헤더는 다수의 서브타입의 헤더를 제공하는 타입 필드를 포함한다. 다양한 실시예에서, 일부 헤더는 헤더와 연관된 데이터의 길이를 포함하는 LEN(length) 필드를 포함한다. 다른 실시예에서, LEN 필드보다는 오히려, 일부 헤더는 헤더와 연관된 데이터의 마지막에 오프셋(플래시 페이지 내의)을 포함하는 OFFSET(offset) 필드(도시되지 않은)를 포함한다. (데이터의 가변 크기 피스 중 마지막 피스가 플래시 페이지에 걸치면, OFFSET는 후속 플래시 페이지 내의 오프셋 또는 후속 플래시 페이지 내의 다수의 바이트이다.) LEN 필드 또는 오프셋 필드 중 단 하나는 일반적으로 데이터의 가변 크기 피스가 폐기되지 않은 공간으로 패킹된 상태에서, 플래시 페이지 내의 데이터의 가변 크기 피스 각각의 시작 위치 및 종료 위치가 플래시 페이지(예를 들어, 도 7에서와 같이 헤드 직후의) 내의 데이터의 제 1 가변 크기 피스의 시작 위치, 및 LEN 또는 OFFSET 필드의 리스트에 의해 암시되므로 구현된다.In some embodiments, some headers include a type field that provides headers of multiple subtypes. In various embodiments, some headers include a length (LEN) field that contains the length of data associated with the header. In another embodiment, rather than a LEN field, some headers include an OFFSET(offset) field (not shown) that includes an offset (in a flash page) at the end of data associated with the header. (If the last piece of variable size piece of data spans a flash page, OFFSET is either an offset in a subsequent flash page or multiple bytes in a subsequent flash page.) Only one of the LEN or offset fields is usually a variable size piece of data. With the non-discarded space packed, the start and end positions of each of the variable size pieces of data in the flash page are the first variable size piece of data in the flash page (eg, immediately after the head as in FIG. 7 ). is implemented as implied by the starting position of , and the list of LEN or OFFSET fields.

도 9를 참조하면, 맵 엔트리(900)의 일 실시예에 대한 선택된 상세의 예시가 도시된다. 다양한 실시예에 따르면, 맵 엔트리는 이하 중 하나 이상을 포함할 수 있다:Referring to FIG. 9 , an illustration of selected details for one embodiment of a map entry 900 is shown. According to various embodiments, a map entry may include one or more of the following:

- 물리 플래시 페이지 어드레스,- physical flash page address,

- 가변 크기 데이터 아이템에 대한 플래시 페이지의 오프셋,- the offset of the flash page for variable size data items;

- 가변 크기 데이터 아이템의 길이, 및- the length of the variable size data item, and

- 다른 제어 정보.- Other control information.

일부 실시예에서, 길이는 예를 들어 제로의 값이 지정된 최소 길이에 상응하도록 오프셋됨으로써 인코딩된다. 추가 실시예에서, 지정된 최소 길이보다 더 적게 압축되는 데이터는 적어도 크기에 있어서 지정된 최소 길이이도록 패딩된다.In some embodiments, the length is encoded, for example, by offsetting a value of zero to correspond to a specified minimum length. In a further embodiment, data that is compressed to be less than the specified minimum length is padded to be at least the specified minimum length in size.

다양한 실시예에서, SRO-VFTL 맵 엔트리는 SRO-VFTL 맵 엔트리가 대응하는 데이터의 전체 오프셋 및 바이트 길이를 저장하기 때문에 VFTL 맵 엔트리보다 더 크다. 비휘발성 메모리에 저장될 때 맵 엔트리의 크기를 감소시키는 것은 유리할 수 있다. 전형적인 사용에서, 데이터는 종종 적어도 1보다 더 큰 일부 단위 및/또는 연속 매핑 유닛의 평균 수에 의해 순차적으로 판독 및 기록되고, 기록의 순차적 특징을 이용하는 맵 엔트리 압축 포맷은 높은 맵 압축율을 구현하고 생성하는 데 비교적 저렴하다. 맵 엔트리의 압축은 플래시 페이지의 경계가 교차될 때까지 동일한 플래시 페이지로 가는 순차적 기록 데이터에 의해 더 원조된다.In various embodiments, the SRO-VFTL map entry is larger than the VFTL map entry because the SRO-VFTL map entry stores the full offset and byte length of the corresponding data. It may be advantageous to reduce the size of a map entry when stored in non-volatile memory. In typical use, data is read and written sequentially, often by some unit greater than one and/or an average number of consecutive mapping units, and a map entry compression format that takes advantage of the sequential nature of writing implements and produces high map compression ratios. relatively cheap to do The compression of map entries is further aided by sequential write data going to the same flash page until the boundary of the flash page is crossed.

도 10을 참조하면, 다양하게 압축된 맵 엔트리의 일 실시예에 대한 선택된 상세의 예시가 도시된다. 다양한 맵 엔트리는 비압축(1010), 이전 맵 엔트리과 동일한 플래시 페이지 어드레스를 갖는 것(1020), 이전 맵 엔트리과 동일한 플래시 페이지 어드레스를 갖고 이전 데이터가 종료되는 오프셋에서 시작하는 것(1030), 및 이전 맵 엔트리과 동일한 플래시 페이지 어드레스를 갖고, 이전 데이터가 종료되는 오프셋에서 시작하고, 이전 맵 엔트리과 동일한 길이를 갖는 것(1040)을 포함한다.Referring to FIG. 10 , an illustration of selected details of one embodiment of various compressed map entries is shown. The various map entries are uncompressed 1010, have the same flash page address as the previous map entry (1020), have the same flash page address as the previous map entry and start at an offset where the previous data ends (1030), and the previous map having the same flash page address as the entry, starting at the offset where the previous data ends, and having the same length as the previous map entry (1040).

멀티 레벨 맵을 갖는 일부 실시예에서, 캐시는 하위 레벨(리프 레벨과 같은) 맵 페이지로 유지된다. 캐시된 맵 페이지는 비압축 형태이어서, 프로세서에 의해 빠른 액세스를 제공한다. 맵 페이지가 (예컨대 비휘발성 메모리 또는 DRAM(예를 들어, dynamic random access memory)으로부터) 캐시로 이동될 때, 맵 페이지가 압축되지 않는다. 맵 페이지가 (수정되는 것으로 인한 것과 같이) 캐시로부터 플러시될 때, 맵 페이지는 스토리지(비휘발성 메모리에서와 같이)에 대해 압축된다. DRAM이 동적 랜덤 액세스 메모리에 맵 페이지의 일부 또는 전부를 저장함으로써 레이턴시를 감소시키기 위해 사용되는 다양한 실시예에 따르면, 동적 랜덤 액세스 메모리 내의 맵 페이지는 이하 중 하나 이상으로 저장된다: 압축된 형태; 비압축된 형태; 선택적으로 압축되거나 비압축된 형태; 및 동적 랜덤 액세스 메모리 내의 맵 페이지의 압축된 버전에 액세스하기 사용되는 인디렉션 테이블(indirection table).In some embodiments with multi-level maps, the cache is maintained with lower-level (such as leaf-level) map pages. Cached map pages are in uncompressed form, providing fast access by the processor. When a map page is moved to a cache (eg, from non-volatile memory or DRAM (eg, dynamic random access memory)), the map page is not compressed. When a map page is flushed from the cache (as due to being modified), the map page is compressed for storage (as in non-volatile memory). According to various embodiments in which DRAM is used to reduce latency by storing some or all of the map pages in the dynamic random access memory, the map pages in the dynamic random access memory are stored in one or more of the following: compressed form; uncompressed form; optionally in compressed or uncompressed form; and an indirection table used to access compressed versions of map pages in dynamic random access memory.

일부 실시예에서, 호스트 기록 명령의 호스트 기록 데이터는 호스트 기록 데이터가 도착함에 따라 옵션으로 또는 선택적으로 압축되고, 로컬(온 칩과 같은) 메모리에 FIFO(예를 들어, first-in-first-out)와 같은 방식으로 저장된다. 예를 들어, 일부 실시예에서, 호스트 기록 데이터는 펌웨어 데이터 구조, 플래시 통계, 하나 이상의 페이지 맵을 유지하는 캐시와 같은 맵의 부분, 재이용 판독 데이터를 포함하는 비휘발성 메모리로부터의 판독 데이터, 비휘발성 메모리에 기록될 데이터의 헤더, 펌웨어 코드, 및 다른 사용과 함께, UBUF(예를 들어, 도 12의 unified buffer)에 저장된다. 다른 실시예에서, 하나 이상의 전용 메모리는 고체 상태 드라이브의 다양한 로컬 스토리지 기준에 사용된다.In some embodiments, the host write data of the host write command is optionally or optionally compressed as the host write data arrives and is stored in a FIFO (eg, first-in-first-out) local (such as on-chip) memory. ) is stored in the same way. For example, in some embodiments, host write data may include firmware data structures, flash statistics, portions of a map, such as a cache, that maintain one or more page maps, read data from non-volatile memory including reuse read data, non-volatile It is stored in the UBUF (eg, the unified buffer of FIG. 12 ), along with headers, firmware codes, and other uses of data to be written to memory. In other embodiments, one or more dedicated memories are used for various local storage criteria of the solid state drive.

호스트로부터 도착하는 데이터의 각각의 매핑 유닛의 경우, 고체 상태 드라이브의 제어 프로세서(예를 들어, 도 12의 CPU(central processing unit))는 이하 중 하나 이상을 통지받는다: 각각의 매핑 유닛 어드레스, 각각의 로컬 메모리 어드레스, 및/또는 호스트 데이터의 가변 크기(예를 들어, 압축된)에 대한 각각의 매핑 유닛의 각각의 길이. 제어 프로세서는 플래시 페이지의 기록의 순서, 및 플래시 페이지 각각에 이용 가능한 비-ECC 바이트의 전체 수를 결정하도록 인에이블된다. 플래시 페이지 중 주어진 하나에 이용 가능한 비-ECC 바이트의 전체 수에 따르면, 제어 프로세서는 헤더의 양 및 주어진 플래시 페이지에 배치된 데이터의 양을 결정하도록 인에이블된다. 예를 들어, 제어 프로세서는 주어진 플래시 페이지에 대한 헤더를 축적하고(지금까지 사용된 헤더의 바이트의 수를 추적하고), 주어진 플래시 페이지가 가득찰 때까지 매핑 유닛 및 헤더의 가변 크기 데이터를 주어진 플래시 페이지에 차례로 추가한다. 주어진 플래시 페이지가 가득찰 때, 주어진 플래시 페이지에 추가되는 매핑 유닛 중 최종 매핑 유닛에 대한 데이터의 마지막 부분은 주어진 플래시 페이지에 맞지 않을 가능성이 있고, 플래시 페이지 중 후속 페이지의 데이터 완성 부분으로서 사용되어, 새로운 헤더 및 데이터에 대한 후속 플래시 페이지에 이용 가능한 비-ECC 바이트의 전체 수를 감소시킨다.For each mapping unit of data arriving from the host, the control processor of the solid-state drive (eg, the central processing unit (CPU) of FIG. 12 ) is informed of one or more of the following: each mapping unit address, each , and/or the respective length of each mapping unit to a variable size (eg, compressed) of host data. The control processor is enabled to determine the order of writing of the flash pages, and the total number of non-ECC bytes available for each flash page. According to the total number of non-ECC bytes available in a given one of the flash pages, the control processor is enabled to determine the amount of header and the amount of data placed in the given flash page. For example, the control processor accumulates a header for a given flash page (tracking the number of bytes in the header used so far), and writes variable size data in the mapping unit and header to the given flash until the given flash page is full. Add them to the page in turn. When a given flash page is full, the last part of the data for the last mapping unit of the mapping units added to the given flash page is likely not to fit in the given flash page, and is used as the data completion part of subsequent pages of the flash page; Reduces the total number of non-ECC bytes available for subsequent flash pages for new headers and data.

특정 시점에, 하나 이상의 플래시 페이지는 호스트 기록 데이터로 채워지도록 인에이블되고, 하나 이상의 플래시 페이지는 재이용된 데이터로 채워지도록 인에이블된다. 예를 들어, 적어도 2개의 밴드(예를 들어, FIFO와 같은 시리즈의 리던던시 블록)가 채워질 수 있으며, 한 밴드는 "핫" 데이터(예를 들어, 호스트로부터 프레시된)를 갖고 다른 밴드는 "쿨" 데이터(예를 들어, 재이용된)를 갖는다. 예를 계속하면, 다양한 실시예에서, 호스트 기록 데이터는 핫 또는 쿨 밴드 중 하나로 지향되도록 인에이블되고, 재이용된 데이터는 핫 또는 쿨 밴드 중 하나로 지향되도록 인에이블된다.At a particular point in time, one or more flash pages are enabled to be filled with host write data, and one or more flash pages are enabled to be filled with reused data. For example, at least two bands (eg, a redundancy block in a series such as FIFO) may be populated, one band having "hot" data (eg, fresh from the host) and the other band being "cool" "Has data (eg, reused). Continuing the example, in various embodiments, host write data is enabled to be directed to one of the hot or cool bands, and reused data is enabled to be directed to either the hot or cool band.

제어 프로세서는 일련의 각각의 매핑 유닛 어드레스, 로컬 메모리 어드레스 및 길이를 이하 중 하나 이상으로 변환하도록 인에이블된다: 플래시 페이지의 헤더 부분으로서 플래시 페이지에 기록될 일련의 헤드; 플래시 페이지의 사용자 데이터로서 플래시 페이지에 기록될 로컬 메모리의 순차 부분의 제 1 시작 어드레스 및 제 1 길이, 적어도 하나의 매핑 유닛의 데이터의 적어도 일부를 포함하는 플래시 페이지의 사용자 데이터 부분; 후속 플래시 페이지의 사용자 데이터 완성 부분으로서 후속 플래시 페이지에 기록될 로컬 메모리의 순차 부분의 제 2 시작 어드레스 및 제 2 길이, 하나의 매핑 유닛 또는 비어 있는 데이터의 부분을 포함하는 사용자 데이터 완성 부분; 플래시 페이지에 기록될 제로 이상의 패딩 바이트의 수 - 패딩 바이트는 예를 들어 사용자 데이터 완성 부분이 비어 있거나 플래시 페이지가 채워져 있지 않으면 사용됨 - . 유리하게는, 제어 프로세서는 일련의 각각의 매핑 유닛 어드레스, 로컬 메모리 어드레스 및 길이를 재포맷에 의해 일련의 헤더로 간단히 변환시키고, 플래시 페이지(일련의 헤더, 이전 플래시 페이지의 완성 부분, 사용자 데이터 부분, 및 임의의 패딩 바이트)를 포함하는 부분을 비휘발성 메모리에 전송하는 소수의 DMA(예를 들어, direct memory access) 명령을 생성하도록 인에이블된다.The control processor is enabled to translate a series of respective mapping unit addresses, local memory addresses and lengths into one or more of the following: a series of heads to be written to the flash pages as header portions of the flash pages; a user data portion of the flash page comprising at least a portion of data of at least one mapping unit, a first starting address and a first length of a sequential portion of a local memory to be written to the flash page as user data of the flash page; a user data completion portion comprising a second starting address and a second length of a sequential portion of a local memory to be written to a subsequent flash page as a user data completion portion of a subsequent flash page, one mapping unit or a portion of empty data; The number of zero or more padding bytes to be written to the flash page - the padding bytes are used, for example if the user data completion part is empty or the flash page is not filled - . Advantageously, the control processor simply converts the series of respective mapping unit addresses, local memory addresses and lengths into a series of headers by reformatting, and the flash pages (series headers, the complete part of the previous flash page, the user data part) , and any padding bytes) are enabled to generate a small number of DMA (eg, direct memory access) commands that transfer the portion to non-volatile memory.

다양한 실시예에서, 호스트 기록 데이터의 압축은 옵션으로 및/또는 선택적으로 인에이블된다. 제 1 예에서, 호스트 기록 명령의 정보는 선택적으로 압축을 인에블한다. 제 2 예에서, 압축은 호스트 기록 명령의 논리 블록 어드레스의 함수로서 선택적으로 인에이블된다. 제 3 예에서, 압축은 호스트 기록 데이터의 압축이 호스트 기록 데이터의 크기를 감소시키지 않았다면 선택적으로 디스에이블된다. 압축이 인에이블되지 않으면, 호스트 기록 데이터는 비압축으로 저장된다. 다양한 실시예에 따르면, 맵의 엔트리는 상응하는 데이터가 이하 중 하나 이상에 의해 압축되거나 압축되지 않는지를 표시한다: 맵의 각각의 엔트리 내의 각각의 비트; 및/또는 각각의 맵 엔트리에 저장된 길이의 값. 예를 들어, 맵 엔트리 내의 4KB의 길이는 맵 엔트리의 연관된 데이터가 압축되지 않은 것을 표시하는 반면, 4KB 미만의 길이는 연관된 데이터가 압축된 것을 표시한다.In various embodiments, compression of host write data is optionally and/or selectively enabled. In a first example, the information in the host write command selectively enables compression. In a second example, compression is selectively enabled as a function of the logical block address of the host write command. In a third example, compression is selectively disabled if compression of the host write data has not reduced the size of the host write data. If compression is not enabled, the host write data is stored uncompressed. According to various embodiments, an entry in the map indicates whether the corresponding data is compressed or uncompressed by one or more of the following: each bit in each entry of the map; and/or the value of the length stored in each map entry. For example, a length of 4 KB in a map entry indicates that the associated data of the map entry is uncompressed, whereas a length of less than 4 KB indicates that the associated data is compressed.

일부 실시예에서, 데이터는 재이용될 리던던시 블록을 선택하고, 플래시 페이지기 기록된 순서로 리던던시 블록의 플래시 페이지를 판독하고, 플래시 페이지의 헤더를 포함하는 판독 유닛만을 처리하고, 데이터가 여전히 유효한지, 및 데이터가 새로운 플래시 페이지의 부분으로서 재이용될 데이터를 모으는 적절한 새로운 헤더 및 DMA 명령을 여전히 유효하게 구성하는지를 인식하기 위해 맵 내의 데이터인 각각의 헤더의 논리 블록 어드레스(또는 등가 매핑 유닛 어드레스)를 룩업함으로써 재이용된다. 그 다음, 새로운 플래시 페이지는 비휘발성 메모리에 기록된다In some embodiments, the data selects a redundancy block to be reused, reads the flash pages of the redundancy block in the order in which the flash pages were written, processes only the read unit containing the header of the flash page, and whether the data is still valid; and by looking up the logical block address (or equivalent mapping unit address) of each header that is the data in the map to see if the data still validly constitutes an appropriate new header and DMA instruction that gathers the data to be reused as part of a new flash page. is reused Then, a new flash page is written to non-volatile memory.

도 11을 참조하면, 비휘발성 메모리를 판독하는 흐름도(1100)의 예시가 도시된다. 비순차 판독 최적 가변 크기 플래시 변환 계층과 대조적으로, 판독 유닛 내의(또는 플래시 페이지 내의) 헤더는 판독 데이터를 추출하기 위해 사용되지 않는다. 비순차 판독 최적화 가변 크기 플래시 변환 계층 및 순차 판독 최적화 가변 크기 플래시 변환 계층 둘 다는 유리하게는 가변 크기 데이터에 액세스하도록 인에이블되고, 원하는 판독 데이터를 포함하는 판독 유닛에만 액세스하도록 인에이블된다.Referring to FIG. 11 , an example of a flowchart 1100 for reading a non-volatile memory is shown. In contrast to the out-of-order read optimal variable size flash translation layer, the header within the read unit (or within the flash page) is not used to extract read data. Both the out-of-order read optimized variable size flash translation layer and the out-of-order read optimized variable size flash translation layer are advantageously enabled to access variable size data and enabled to access only the read unit containing the desired read data.

일부 실시예에서, 논리 블록 어드레스를 포함하는 호스트로부터 판독 명령을 수신하는 것에 대응하여(단계 1110), 제어 프로세서 및/또는 다양한 하드웨어 유닛은 이하 중 하나 이상을 수행할 수 있다:In some embodiments, in response to receiving a read command from the host comprising the logical block address (step 1110), the control processor and/or the various hardware units may perform one or more of the following:

- 논리 블록 어드레스를 매핑 유닛 어드레스로 변환하는 단계(단계 1114);- converting the logical block address into a mapping unit address (step 1114);

- 맵 엔트리 중 연관된 하나를 결정하기 위해 복수의 맵 엔트리를 포함하는 맵에서 매핑 유닛 어드레스를 룩업하는 단계(단계 1118)와;- looking up the mapping unit address in a map comprising a plurality of map entries to determine an associated one of the map entries (step 1118);

- 연관된 맵 엔트리의 각각의 플래시 페이지 어드레스를 추출하고(단계 1122) 연관된 플래시 페이지가 플래시 페이지 캐시에 있거나, 비휘발성 메모리로부터 판독되는지를 판단하는 단계(단계 1130)와;- extracting each flash page address of the associated map entry (step 1122) and determining whether the associated flash page is in the flash page cache or read from non-volatile memory (step 1130);

- 연관된 맵 엔트리으로부터 각각의 오프셋 및 길이를 추출하고, 각각의 오프셋 및 길이에 따라 이하를 결정하는 단계(단계 1126)와:- extracting each offset and length from the associated map entry, and according to each offset and length determining (step 1126):

- a. 연관된 플래시 페이지에서 액세스하는 복수의 판독 유닛의 수,- a. the number of multiple read units accessed in the associated flash page;

- b. 판독 유닛 오프셋 및 액세스된 판독 유닛의 플래시 페이지의 전체 판독 유닛 길이, 및- b. the read unit offset and the total read unit length of the flash page of the read unit accessed, and

- c. 액세스된 판독 유닛의 디코딩된 버전으로부터 매핑 유닛 어드레스와 연관된 데이터를 추출하고 처리하는(예를 들어, 압축 해제함으로써) DMA 명령;- c. a DMA instruction for extracting and processing (eg, decompressing) data associated with a mapping unit address from a decoded version of an accessed read unit;

- 연관된 플래시 페이지가 플래시 페이지 캐시에 있지 않다고 판단하는 것에 대응하여, 비휘발성 메모리로부터 연관된 플래시 페이지의 액세스된 판독 유닛을 판독하고(단계 1134), 데이터를 생성하기 위해 액세스된 판독 유닛상에서 에러 정정 디코딩을 수행하는 단계(단계 1138)와;- in response to determining that the associated flash page is not in the flash page cache, read an accessed read unit of the associated flash page from the non-volatile memory (step 1134), and decode an error correction on the accessed read unit to generate data performing (step 1138);

- 연관된 맵 엔트리의 각각의 오프셋 및 길이에 따라 정정된 데이터에서 연관된 데이터를 추출하고, 추출된 데이터를 압축 해제하는 단계(단계 1142)와;- extracting the associated data from the corrected data according to the respective offset and length of the associated map entry, and decompressing the extracted data (step 1142);

- 판독 명령에 응하여 압축 해제된 데이터를 호스트에 제공하는 단계(단계 1146).- providing the decompressed data to the host in response to the read command (step 1146).

전형적으로 랜덤 판독을 위해, 연관된 데이터를 판독하기 위해 연관된 플래시 페이지에서 액세스하는 판독 유닛의 개수는 연관된 플래시 페이지에서의 판독 유닛 모두보다 적다. 게다가, 연관된 데이터가 가변 크기 조정됨에 따라, 제 1 논리 블록 어드레스를 참조하는 제 1 판독 명령에 대한 연관된 플래시 페이지에서 액세스하는 판독 유닛의 개수는 제 2 논리 블록 어드레스를 참조하는 제 2 판독 명령에 대한 연관된 플래시 페이지에서 액세스하는 판독 유닛의 개수와 상이하며, 제 2 논리 블록 어드레스는 제 1 논리 블록 어드레스와 상이하다. 일부 실시예에서, 오로지 연관된 플래시 페이지에서 액세스하는 판독 유닛의 개수는 연관된 플래시 페이지로부터 판독된다. 즉, 연관된 데이터의 일부를 포함하는 판독 유닛의 것만이 연관된 데이터를 액세스하기 위해 판독된다.Typically for random reads, the number of read units that access in an associated flash page to read associated data is less than all of the read units in the associated flash page. In addition, as the associated data is scaled variable, the number of read units accessing in the associated flash page for a first read instruction referencing a first logical block address increases with respect to a second read instruction referencing a second logical block address. different from the number of read units accessed in the associated flash page, and the second logical block address is different from the first logical block address. In some embodiments, only the number of read units accessing in the associated flash page is read from the associated flash page. That is, only those of the reading unit containing a portion of the associated data are read to access the associated data.

일부 실시예 및/또는 사용 시나리오에서, 판독 유닛 중 특정 판독 유닛은 제 1 논리 블록 어드레스와 연관된 데이터 중 적어도 일부, 및 제 2 상이한 논리 블록 어드레스와 연관된 데이터 중 적어도 일부를 포함한다.In some embodiments and/or usage scenarios, a particular one of the read units includes at least some of the data associated with a first logical block address and at least some of the data associated with a second different logical block address.

도 12를 참조하면, 고체 상태 드라이브 컨트롤러(1200)의 일 실시예에 대한 선택된 상세의 예시가 도시된다. 일부 실시예에서, 고체 상태 드라이브 컨트롤러(1200)는 순차 판독 최적화 가변 크기 플래시 변환 계층을 구현하도록 인에이블된다. 다양한 실시예에서, 컨트롤러(1200)는 하나 이상의 집적 회로로 구현될 수 있다.Referring to FIG. 12 , an illustration of selected details for one embodiment of a solid state drive controller 1200 is shown. In some embodiments, the solid state drive controller 1200 is enabled to implement a sequential read optimized variable size flash translation layer. In various embodiments, the controller 1200 may be implemented with one or more integrated circuits.

도 12에 예시된 바와 같이, SerDes(예를 들어, serialization-deserialization)와 같은 HIF(예를 들어, host interface)는 입력/출력 수신기를 통해, 판독 및 기록 명령과 같은 명령을 수신하고, 기록 데이터를 수신하고, 판독 데이터를 송신한다. 명령은 공유 메모리(예를 들어, OpRAM)를 통해 CPU로 송신된다. CPU는 명령을 해석하고 공유 메모리를 통해 SSD 컨트롤러의 다른 부분을 제어한다. 예를 들어, CPU는 공유 메모리를 통해 호스트 수신 데이터경로(예를 들어, HDRx) 또는 플래시 송신 데이터경로(예를 들어, FDTx)와 같은 다양한 데이터경로 송신 및 수신 유닛으로 DMA 명령을 통신하고 이것으로부터 응답을 수신한다.12 , a HIF (eg host interface) such as SerDes (eg serialization-deserialization) receives commands, such as read and write commands, through an input/output receiver, and write data , and transmits read data. Instructions are sent to the CPU via shared memory (eg OpRAM). The CPU interprets the commands and controls other parts of the SSD controller via shared memory. For example, the CPU communicates DMA commands to and from various datapath transmit and receive units, such as a host receive datapath (e.g. HDRx) or flash transmit datapath (e.g. FDTx), via shared memory. receive a response

호스트 인터페이스로부터의 기록 데이터는 호스트 수신 데이터경로(예를 들어, HDRx)를 통해 UBUF(예를 들어, unified buffer)로 전송된다. 다양한 실시예에서, 호스트 수신 데이터경로는 호스트 기록 데이터를 옵션으로 및/또는 선택적으로 압축하고/하거나 암호화하는 로직을 포함한다. 옵션으로 및/또는 선택적으로 압축되고/되거나 암호화된 호스트 기록 데이터는 그 다음 통합 버퍼로부터 플래시 송신 데이터경로(예를 들어, FDTx)를 통해 비휘발성 메모리 및 GAFI(예를 들어, generic flash interface)로 송신된다. 다양한 실시예에서, 플래시 송신 데이터경로는 암호화 및/또는 스크램블링 및/또는 에러 정정 인코딩을 수행하는 로직을 포함한다. 호스트 판독 명령에 응하여, 데이터는 GAFI(예를 들어, generic flash interface)를 통해 비휘발성 메모리로부터 판독되고 플래시 수신 데이터경로(예를 들어, FDRx)를 통해 통합 버퍼로 송신된다. 다양한 실시예에서, 플래시 수신 데이터경로는 에러 정정 디코딩 및/또는 복호화 및/또는 디스크램블링을 통합한다. 다른 실시예에서, 별개의 에러 정정 디코더(예를 들어, LDPC 코드를 구현하는 LDPC-D)는 플래시 수신 데이터경로에 의해 통합 버퍼 내에 저장되는 "원시" 데이터상에서 동작하도록 인에이블된다. 통합 버퍼에서 디코딩된 판독 데이터는 그 다음 호스트 송신 데이터경로(예를 들어, HDTx)를 통해 호스트 인터페이스로 송신된다. 다양한 실시예에서, 호스트 송신 데이터경로는 디코딩된 판독 데이터를 옵션으로 및/또는 선택적으로 암호화하고/하거나 압축 해제하는 로직을 포함한다. 일부 실시예에서, RAID-식 및 RASP(예를 들어, soft-decision processing unit)는 비휘발성 메모리 내에 저장되는 호스트 기록 데이터 및/또는 시스템 데이터를 부가적으로 보호하고/하거나 LDPC-D와의 사용을 위해 연 판정 처리 동작을 수행하기 위해 RAID과 같은 리던던시를 생성하도록 인에이블된다.Record data from the host interface is transferred to the UBUF (eg unified buffer) via the host receive data path (eg HDRx). In various embodiments, the host receive datapath includes logic to optionally and/or selectively compress and/or encrypt the host write data. Optionally and/or optionally compressed and/or encrypted host write data is then transferred from the integrated buffer via a flash transmit datapath (eg FDTx) to non-volatile memory and GAFI (eg generic flash interface). is sent In various embodiments, the flash transmit datapath includes logic to perform encryption and/or scrambling and/or error correction encoding. In response to a host read command, data is read from the non-volatile memory via GAFI (eg, generic flash interface) and sent to the integrated buffer via a flash receive datapath (eg, FDRx). In various embodiments, the flash receive datapath incorporates error correction decoding and/or decoding and/or descrambling. In another embodiment, a separate error correction decoder (eg, LDPC-D implementing the LDPC code) is enabled to operate on “raw” data stored in the unified buffer by the flash receive datapath. The decoded read data from the integrated buffer is then sent to the host interface via a host transmit datapath (eg, HDTx). In various embodiments, the host transmit datapath includes logic to optionally and/or selectively encrypt and/or decompress the decoded read data. In some embodiments, RAID-like and RASP (eg, soft-decision processing units) provide additional protection for host write data and/or system data stored in non-volatile memory and/or use with LDPC-D. It is enabled to create redundancy, such as RAID, to perform soft decision processing operations for the purpose.

다양한 실시예에 따르면, 제어 프로세서의 임의의 동작은 하나 이상의 CPU 중 임의의 것, 하나 이상의 하드웨어 유닛, 및/또는 전술한 것 중 임의의 조합에 의해 수행된다. 예를 들어, 기록을 위해, 일련의 각각의 매핑 유닛 어드레스, 로컬 메모리 어드레스 및 길이의 일련의 헤더로의 변환은 일련의 각각의 매핑 유닛 어드레스, 로컬 메모리 어드레스 및 길이를 일련의 헤더의 포맷과 동일하고/하거나 유사한 포맷으로 하드웨어 공급함으로써 원조된다.According to various embodiments, any operation of the control processor is performed by any of one or more CPUs, one or more hardware units, and/or any combination of the foregoing. For example, for writing, the conversion of a series of each mapping unit address, local memory address and length to a header series of each mapping unit address, local memory address and length equals the format of the series header. and/or supported by hardware provisioning in a similar format.

다양한 실시예에 따르면, 비휘발성 메모리에 결합된 고체 상태 드라이브 컨트롤러는 이하 중 하나 이상을 사용하도록 인에이블된다: 통상의 플래시 변환 계층; 가변 크기 플래시 변환 계층; 순차 판독 최적화 가변 크기 플래시 변환 계층; 비휘발성 메모리의 상이한 물리적 부분에서의 전술한 것 중 임의의 조합; SSD 컨트롤러의 논리적 어드레스 공간의 상이한 논리적 부분에서의 전술한 것 중 임의의 조합; 비휘발성 메모리에의 원시 물리적 액세스; 및 SSD 컨트롤러에 결합되는 호스트의 제어 하에서의 전술한 것 중 임의의 조합.According to various embodiments, a solid state drive controller coupled to non-volatile memory is enabled to use one or more of the following: a conventional flash translation layer; variable size flash conversion layer; sequential read optimization variable size flash translation layer; any combination of the foregoing in different physical portions of non-volatile memory; any combination of the foregoing in different logical portions of the logical address space of the SSD controller; raw physical access to non-volatile memory; and any combination of the preceding under the control of a host coupled to the SSD controller.

다양한 실시예에 따르면, 호스트 기록 데이터는 비휘발성 메모리에 기록되기 전에 임의로 암호화되고, 비휘발성 메모리로부터 판독된 후에 복호화된다. 추가 실시예에서, 암호화는 호스트 기록 데이터의 압축 후에 발생하고, 복호화는 호스트로 리턴하기 위해 판독되는 데이터의 압축 해제 전에 발생한다.According to various embodiments, the host write data is optionally encrypted before being written to the non-volatile memory and decrypted after being read from the non-volatile memory. In a further embodiment, encryption occurs after compression of the host write data, and decryption occurs before decompression of the data being read back to the host.

예시적 실시예가 고체 상태 드라이브를 사용했지만, 본 명세서에서 설명된 기술은 다른 입력/출력 장치 및/또는 하드 디스크 드라이브와 같은 데이터 저장 장치에 일반적으로 적용 가능하다.Although exemplary embodiments used solid state drives, the techniques described herein are generally applicable to other input/output devices and/or data storage devices such as hard disk drives.

이하는 적어도 일부 명확하게 열거된 예시적 조합(예를 들어, EC)을 포함하여 본 명세서에서 설명되는 개념에 따른 다양한 실시예 타입의 부가 설명을 제공하는 예시적 실시예의 수집이고; 예는 상호 배타적이거나, 완전하거나, 제한적인 것으로 의미되지 않고; 본 발명은 이러한 예시적 실시예에 제한되지 않고 오히려 공표된 청구항 및 그것의 균등물의 범위 내에서 모든 가능한 수정 및 변화를 망라한다.The following is a collection of example embodiments that provides an additional description of various embodiment types consistent with the concepts described herein, including at least some explicitly enumerated example combinations (eg, ECs); Examples are not meant to be mutually exclusive, exhaustive, or limiting; The present invention is not limited to these exemplary embodiments, but rather covers all possible modifications and variations within the scope of the published claims and their equivalents.

방법(EC1)은 입력/출력 장치에서 그리고 입력/출력 장치 인터페이스로의 호스트를 통해, 판독 요청의 논리 블록 어드레스에 대응하는 데이터를 입력/출력 장치의 비휘발성 메모리로부터 판독하라는 판독 요청을 수신하는 단계와, 판독 요청을 수신하는 것에 대응하여, 비휘발성 메모리의 복수의 페이지 중 특정 페이지의 물리 어드레스, 논리 블록 어드레스에 대응하는 데이터를 기록하는 것에 대한 응답하으로 이전에 저장된 압축된 데이터에 대한 특정 페이지의 오프셋, 및 압축된 데이터의 바이트의 길이를 획득하기 위해 맵의 다수의 엔트리 중 특정 맵 엔트리 - 상기 특정 맵 엔트리는 판독 요청의 논리 블록 어드레스와 연관됨 - 를 판독하는 단계와, 압축된 데이터에 대한 특정 페이지의 오프셋 및 압축된 데이터의 바이트의 길이를 특정 페이지의 복수의 판독 유닛 중 제 1 판독 유닛의 어드레스 및 특정 페이지로부터 판독될 판독 유닛의 개수로 변환하는 단계와, 특정 페이지로부터 판독 유닛의 개수만을 판독하는 단계와, 정정된 데이터를 획득하기 위해 특정 페이지로부터 판독되는 판독 유닛 각각에 에러 정정 디코딩을 수행하는 단계와, 압축된 데이터에 대한 특정 페이지의 오프셋 및 압축된 데이터의 바이트의 길이에 따라 정정된 데이터로부터 압축된 데이터를 추출하는 단계와, 리턴 데이터를 생성하기 위해 압축된 데이터를 압축 해제하는 단계와, 리턴 데이터를 호스트에 리턴하는 단계를 포함한다.Method EC1 includes receiving, at the input/output device and via a host to the input/output device interface, a read request to read data corresponding to a logical block address of the read request from a non-volatile memory of the input/output device and, in response to receiving the read request, a particular page of previously stored compressed data in response to writing data corresponding to a physical address and a logical block address of the particular page of the plurality of pages of the non-volatile memory. reading a specific map entry of a plurality of entries of a map, the specific map entry being associated with a logical block address of a read request, to obtain an offset of converting the offset of the particular page and the length of bytes of compressed data into the address of a first read unit of a plurality of read units of the particular page and the number of read units to be read from the particular page; The steps of reading only the number, and performing error correction decoding on each of the reading units read from the specific page to obtain corrected data, and the offset of the specific page with respect to the compressed data and the length of the bytes of the compressed data extracting compressed data from the corrected data, decompressing the compressed data to generate return data, and returning the return data to a host.

방법(EC2)은 입력/출력 장치에서 그리고 입력/출력 장치 인터페이스로의 호스트를 통해, 판독 요청의 논리 블록 어드레스에 대응하는 데이터를 입력/출력 장치의 비휘발성 메모리로부터 판독하라는 판독 요청을 수신하는 단계와, 판독 요청을 수신하는 것에 대응하여, 비휘발성 메모리의 복수의 페이지 중 특정 페이지의 물리 어드레스, 논리 블록 어드레스에 대응하는 데이터를 기록하는 것에 대한 응답으로 이전에 저장된 압축된 데이터에 대한 특정 페이지 내의 오프셋, 및 압축된 데이터의 바이트의 길이를 획득하기 위해 맵의 다수의 엔트리 중 특정 맵 엔트리 -상기 특정 맵 엔트리는 판독 요청의 논리 블록 어드레스와 연관됨 -를 판독하는 단계와, 압축된 데이터에 대한 특정 페이지의 오프셋 및 압축된 데이터의 바이트의 길이를 특정 페이지 내의 복수의 판독 유닛 중 제 1 판독 유닛의 어드레스 및 특정 페이지로부터 판독될 판독 유닛의 개수로 변환하는 단계와, 특정 페이지로부터 적어도 특정 페이지 내의 모든 판독 유닛보다 적은 판독 유닛의 개수를 판독하는 단계와, 정정된 데이터를 획득하기 위해 특정 페이지로부터 판독되는 판독 유닛 각각에 에러 정정 디코딩을 수행하는 단계와, 압축된 데이터에 대한 특정 페이지의 오프셋 및 압축된 데이터의 바이트의 길이에 따라 정정된 데이터로부터 압축된 데이터를 추출하는 단계와, 리턴 데이터를 생성하기 위해 압축된 데이터를 압축 해제하는 단계와, 리턴 데이터를 호스트에 리턴하는 단계를 포함한다.Method EC2 includes receiving, at the input/output device and via a host to the input/output device interface, a read request to read data corresponding to a logical block address of the read request from a non-volatile memory of the input/output device and, in response to receiving the read request, within the specified page for previously stored compressed data in response to writing data corresponding to the physical address and the logical block address of the specific page of the plurality of pages of the non-volatile memory. reading a specific map entry of a plurality of entries of a map, the specific map entry being associated with a logical block address of a read request, to obtain an offset and a length in bytes of the compressed data; converting the offset of the specific page and the length of bytes of compressed data into the address of a first read unit of a plurality of read units within the specific page and the number of read units to be read from the specific page; reading a number of read units less than all read units; extracting the compressed data from the corrected data according to the length of bytes of the compressed data; decompressing the compressed data to generate return data; and returning the return data to a host.

EC1 또는 EC2에 있어서, 판독될 판독 유닛의 개수는 특정 페이지의 판독 유닛의 모두보다 더 적은 방법(EC3).Method EC1 or EC2, wherein the number of read units to be read is less than all of the read units of a particular page (EC3).

EC1 또는 EC2에 있어서, 압축된 데이터에 대한 특정 페이지의 오프셋 및 특정 페이지의 사용자 데이터의 양과 결합되는 압축된 데이터의 바이트 길이에 따라 압축된 데이터의 적어도 일부가 비휘발성 메모리의 페이지의 후속 페이지의 하나 이상의 판독 유닛에 있는 것을 결정하는 단계를 더 포함하는 방법(EC4).EC1 or EC2, wherein at least a portion of the compressed data is one of a subsequent page of a page of non-volatile memory according to the byte length of the compressed data combined with the offset of the particular page relative to the compressed data and the amount of user data of the particular page. The method (EC4) further comprising determining what is in the above reading unit.

EC4에 있어서, 제 2 처리 노드상의 전체 리던던트 데이터의 갱신에 대응하여, 제 2 처리 노드의 각각의 로컬 리던던시 계산 유닛은 제 2 처리 노드의 각각의 디스트 중 적어도 일부상에 저장하는 전체 리던던트 데이터의 갱신의 데이터에 따라 제 2 리던던트 데이터를 계산하도록 인에이블되는 방법(EC5).The EC4, wherein in response to an update of the total redundant data on the second processing node, each local redundancy calculation unit of the second processing node stores on at least some of the respective disks of the second processing node an update of the total redundant data. A method enabled to compute the second redundant data according to the data of EC5.

EC1 또는 EC2에 있어서, 비휘발성 메모리의 페이지 중 제 1 페이지는 판독 유닛의 제 1 개수를 포함하고, 비휘발성 메모리의 페이지 중 제 2 페이지는 판독 유닛의 제 2 개수를 포함하고, 판독 유닛의 제 1 개수는 판독 유닛의 제 2 개수와 상이한 방법(EC6).EC1 or EC2, wherein a first page of the pages of the non-volatile memory comprises a first number of read units, a second page of the pages of the non-volatile memory comprises a second number of read units, and the second page of the read units comprises a second number of read units. Method (EC6) where one number is different from the second number of read units.

EC1 또는 EC2에 있어서, 비휘발성 메모리의 페이지 중 제 1 페이지는 사용자 데이터의 제 1 양을 포함하며, 비휘발성 메모리의 페이지 중 제 2 페이지는 사용자 데이터의 제 2 양을 포함하고, 사용자 데이터의 제 1 개수는 사용자 데이터의 제 2 양과 상이한 방법(EC7).The method of EC1 or EC2, wherein a first page of the pages of the non-volatile memory includes a first amount of user data, a second page of the pages of the non-volatile memory includes a second amount of user data, and 1 number is different from the second amount of user data (EC7).

EC1 또는 EC2에 있어서, 입력/출력 장치에서 그리고 입력/출력 장치 인터페이스로의 호스트를 통해, 논리 블록 어드레스에 대응하는 데이터를 기록하라는 기록 요청을 수신하는 단계와, 기록 요청을 수신하는 것에 대한 응답으로, 논리 블록 어드레스에 대응하는 데이터보다 더 작은 압축된 기록 데이터를 형성하기 위해 논리 블록 어드레스에 대응하는 데이터를 압축하는 단계와, 특정 페이지에 적어도 압축된 기록 데이터의 제 1 부분을 기록하는 단계와, 특정 엔트리에, 특정 페이지의 물리 어드레스, 압축된 기록 데이터에 대한 특정 페이지의 오프셋, 및 압축된 기록 데이터의 바이트의 길이를 저장하는 단계를 더 포함하는 방법(EC8).EC1 or EC2, comprising: receiving, at the input/output device and via a host to the input/output device interface, a write request to write data corresponding to a logical block address; in response to receiving the write request; , compressing the data corresponding to the logical block address to form compressed write data smaller than the data corresponding to the logical block address, and writing at least a first portion of the compressed write data to a specific page; The method (EC8) further comprising storing in the specific entry the physical address of the specific page, the offset of the specific page relative to the compressed write data, and the length in bytes of the compressed write data.

EC8에 있어서, 데이터를 기록하는 요청을 수신하는 것에 대한 응답으로, 특정 페이지에 헤더를 기록하는 단계 - 헤더는 요청의 논리 블록 어드레스 및 압축된 데이터의 바이트의 길이를 포함함 - 를 더 포함하는 방법(EC9).The method of EC8, further comprising: in response to receiving a request to write data, writing a header to a specific page, the header comprising a logical block address of the request and a length in bytes of compressed data (EC9).

EC1 또는 EC2에 있어서, 논리 블록 어드레스는 복수의 논리 블록 어드레스 중 제 1 어드레스이고, 해당 개수의 판독 유닛 중 적어도 하나의 판독 유닛은 논리 블록 어드레스 중 상이한 어드레스에 대응하는 데이터를 적어도 일부를 포함하는 방법(EC10).The method of EC1 or EC2, wherein the logical block address is a first address of a plurality of logical block addresses, and at least one read unit of the number of read units includes at least a portion of data corresponding to a different address of the logical block addresses. (EC10).

EC1 또는 EC2에 있어서, 해당 개수의 판독 유닛 중 적어도 하나의 판독 유닛은 압축된 데이터의 일부에 더하여 하나 이상의 헤더를 포함하는 방법(EC11).The method (EC11) according to EC1 or EC2, wherein at least one read unit of the number of read units comprises one or more headers in addition to a portion of the compressed data.

방법(EC12)은 입력/출력 장치에서 그리고 입력/출력 장치 인터페이스로의 호스트를 통해, 판독 요청의 논리 블록 어드레스에 대응하는 데이터를 입력/출력 장치의 비휘발성 메모리로부터 판독하라는 판독 요청을 수신하는 단계와, 판독 요청을 수신하는 것에 대응하여, 비휘발성 메모리의 복수의 페이지 중 특정 페이지의 물리 어드레스, 논리 블록 어드레스에 상응하는 데이터를 기록하는 것에 대한 응답으로 이전에 저장된 가변 크기 데이터에 대한 특정 페이지의 오프셋, 및 가변 크기 데이터의 바이트의 길이를 획득하기 위해 맵의 다수의 엔트리 중 특정 맵 엔트리 - 상기 특정 맵 엔트리는 판독 요청의 논리 블록 어드레스와 연관됨 -를 판독하는 단계와, 가변 크기 데이터에 대한 특정 페이지의 오프셋 및 가변 크기 데이터의 바이트의 길이를 특정 페이지의 복수의 판독 유닛 중 제 1 판독 유닛의 어드레스 및 특정 페이지로부터 판독될 판독 유닛의 개수로 변환하는 단계와, 특정 페이지로부터 판독 유닛의 개수만을 판독하는 단계와, 정정된 데이터를 획득하기 위해 특정 페이지로부터 판독되는 판독 유닛 각각에 에러 정정 디코딩을 수행하는 단계와, 가변 크기 데이터에 대한 특정 페이지의 오프셋 및 가변 크기 데이터의 바이트의 길이에 따라 정정된 데이터로부터 가변 크기 데이터를 추출하는 단계와, 추출된 데이터를 호스트에 리턴하는 단계를 포함한다.The method EC12 includes receiving, at the input/output device and via a host to the input/output device interface, a read request to read data corresponding to a logical block address of the read request from a non-volatile memory of the input/output device. and, in response to receiving the read request, of a specific page of previously stored variable size data in response to writing data corresponding to a physical address and a logical block address of the specific page among the plurality of pages of the non-volatile memory. reading a specific map entry of a plurality of entries of a map, the specific map entry being associated with a logical block address of a read request, to obtain an offset and a length in bytes of the variable size data; converting the offset of the specific page and the length of bytes of variable size data into the address of a first read unit among a plurality of read units of the specific page and the number of read units to be read from the specific page; and performing error correction decoding on each of the reading units read from the specific page to obtain corrected data, according to the offset of the specific page for the variable size data and the length of the bytes of the variable size data. extracting variable size data from the corrected data; and returning the extracted data to a host.

EC1 또는 EC22에 있어서, 입력/출력 장치에서 그리고 입력/출력 장치 인터페이스로의 호스트를 통해, 논리 블록 어드레스에 대응하는 가변 크기 어드레스 및 가변 크기 데이터의 크기를 기록하라는 기록 요청을 수신하는 단계와, 기록 요청을 수신하는 것에 대한 응답으로, 특정 페이지에 적어도 가변 크기 데이터의 제 1 부분을 기록하는 단계와, 특정 엔트리에, 특정 페이지의 물리 어드레스, 가변 크기 데이터에 대한 특정 페이지의 오프셋, 및 가변 크기 데이터의 크기에 따른 가변 크기 데이터의 바이트의 길이를 저장하는 단계를 더 포함하는 방법(EC13).EC1 or EC22, comprising the steps of: receiving, at an input/output device and via a host to an input/output device interface, a write request to write a variable size address corresponding to a logical block address and a size of variable size data; in response to receiving the request, writing at least a first portion of the variable-size data to the particular page, and in the particular entry, the physical address of the particular page, the offset of the particular page to the variable-size data, and the variable-size data The method (EC13) further comprising the step of storing the length of the bytes of variable size data according to the size of .

일부 실시예에서, 멀티 노드 저장 장치 또는 그것의 부분(들), 예를 들어 프로세서(CPU와 같은)와의 연동을 위해 인에이블되는 입력/출력 장치의 하드 디스크 드라이브 또는 고체 상태 디스크 컨트롤러, 입력/출력 컨트롤러(RAID 온 칩 다이와 같은), 및 프로세서, 마이크로프로세서, 시스템 온 칩, 응용 주문형 집적 회로, 하드웨어 가속도계, 또는 동작의 전부 또는 일부를 제공하는 다른 회로의 일부에 의해 수행되는 동작의 전부 또는 일부의 다양한 조합은 컴퓨터 시스템에 의한 처리와 호환 가능한 사양에 의해 지정된다. 사양은 하드웨어 기술 언어, 회로 기술, 넷리스트 기술, 마스크 기술, 또는 레이아웃 기술과 같은 다양한 기술에 따른다. 예시적 기술은 베릴로그, VHDL, SPICE, PSpice와 같은 SPICE 변형, IBIS, LEF, DEF, GDS-II, OASIS, 또는 다른 기술을 포함하지만, 이에 제한되지 않는다. 다양한 실시예에서, 처리는 하나 이상의 집적 회로상의 포함에 적절한 로직 및/또는 회로를 생성하거나, 검증하거나, 지정하기 위해 해석, 컴파일, 시뮬레이션, 및 합성의 임의의 조합을 포함한다. 다양한 실시예에 따른 각각의 집적 회로는 다양한 기술에 따라 설계 가능하고/하거나 제조 가능하다. 기술은 프로그램 가능 기술(필드 또는 마스크 프로그램 가능 게이트 어레이 집적 회로와 같은), 세미 커스텀(semi-custom) 기술(전체적 또는 부분적 셀 기반 집적 회로와 같은), 및 풀 커스텀(full-custom) 기술(실질적으로 전문화되는 집적 회로와 같은), 그것의 임의의 조합, 또는 집적 회로의 설계 및/또는 제조와 호환 가능한 임의의 다른 기술을 포함한다.In some embodiments, a hard disk drive or solid state disk controller, input/output of a multi-node storage device or part(s) thereof, eg, an input/output device enabled for interworking with a processor (such as a CPU) all or part of the operations performed by the controller (such as a RAID on chip die) and parts of the processor, microprocessor, system on chip, application specific integrated circuit, hardware accelerometer, or other circuitry that provides all or part of the operation. Various combinations are specified by specifications compatible with processing by the computer system. The specification conforms to various technologies such as hardware description language, circuit description, netlist description, mask technology, or layout technology. Exemplary techniques include, but are not limited to, Verilog, VHDL, SPICE, SPICE variants such as PSpice, IBIS, LEF, DEF, GDS-II, OASIS, or other techniques. In various embodiments, processing includes any combination of interpretation, compilation, simulation, and synthesis to create, verify, or specify logic and/or circuitry suitable for inclusion on one or more integrated circuits. Each integrated circuit according to various embodiments is designable and/or manufacturable according to various technologies. Technologies include programmable technologies (such as field or mask programmable gate array integrated circuits), semi-custom technologies (such as fully or partially cell-based integrated circuits), and full-custom technologies (such as substantive (such as specialized integrated circuits), any combination thereof, or any other technology compatible with the design and/or manufacture of integrated circuits.

일부 실시예에서, 명령어 세트를 저장한 컴퓨터 판독 가능 매체에 의해 설명되는 바와 같은 동작의 전부 또는 일부의 다양한 조합은 하나 이상의 프로그램 명령어의 실행 및/또는 해석에 의해, 하나 이상의 소스 및/또는 스크립트 언어 스테이트먼트의 해석 및/또는 컴파일에 의해, 또는 프로그래밍 및/또는 스크립팅 언어 스테이트먼트로 표현되는 정보를 컴파일하고/하거나, 변환하고/하거나, 해석함으로써 생성되는 이진 명령어의 실행에 의해 수행된다. 스테이트먼트는 임의의 표준 프로그래밍 또는 스크립팅 언어(C, C++, 포트란, 파스칼, 에이다, 자바, VBscript, 및 셸과 같은)와 호환 가능하다. 프로그램 명령어, 언어 스테이트먼트, 또는 이진 명령어 중 하나 이상은 하나 이상의 컴퓨터 판독 가능 저장 매체 요소상에 선택적으로 저장된다. 다양한 실시예에서, 프로그램 명령어의 일부, 전부, 또는 다양한 부분은 하나 이상의 기능, 루틴, 서브루틴, 인라인 루틴, 절차, 매크로, 또는 그것의 부분으로 실현된다.In some embodiments, various combinations of all or some of the operations as described by a computer readable medium having stored thereon a set of instructions may be effected by execution and/or interpretation of one or more program instructions in one or more source and/or script languages. It is performed by interpretation and/or compilation of statements, or by execution of binary instructions generated by compiling, transforming, and/or interpreting information expressed in programming and/or scripting language statements. Statements are compatible with any standard programming or scripting language (such as C, C++, Fortran, Pascal, Ada, Java, VBscript, and Shell). One or more of program instructions, language statements, or binary instructions are optionally stored on one or more computer-readable storage media elements. In various embodiments, some, all, or various portions of program instructions are implemented as one or more functions, routines, subroutines, inline routines, procedures, macros, or portions thereof.

특정 선택은 본문 및 도면을 준비할 시에 편의상 설명에만 이루어졌고, 반대 표시가 있지 않으면, 선택은 설명된 실시예의 구조 또는 동작에 관한 부가 정보를 전달하는 그 자체로 해석되지 않아야 한다. 선택의 예는 도면 번호에 사용되는 지정의 특정 조직 또는 할당 및 실시예의 특징 및 요소를 식별하고 참조하기 위해 사용되는 요소 식별자(예를 들어, 콜아웃(callout) 또는 수치 지시자)의 특정 조직 또는 할당을 포함하지만, 이에 제한되지 않는다.Certain choices have been made for convenience only in the preparation of the text and drawings, and unless indicated to the contrary, the choices should not be construed as conveying additional information pertaining to the structure or operation of the described embodiments. Examples of selection are specific organizations or assignments of designations used in reference numbers and specific organizations or assignments of element identifiers (eg, callouts or numerical indicators) used to identify and reference features and elements of embodiments. including, but not limited to.

단어 "포함한다" 또는 "포함하는"은 개방형 범위의 논리 세트를 설명하는 관념으로 해석되도록 구체적으로 의도되고 단어 "내에"가 명시적으로 이어지지 않으면 물리적 봉쇄를 전달하도록 의미되지 않는다.The word "comprises" or "comprising" is specifically intended to be interpreted as an idea describing a logical set of open scope and is not meant to convey a physical containment unless the word "in" is explicitly followed.

전술한 실시예가 설명 및 이해의 명료성을 위해 다소 상세하게 설명되었지만, 본 발명은 제공된 상세에 제한되지 않는다. 본 발명의 많은 실시예가 있다. 개시된 실시예는 예시적이고 제한되지 않는다.Although the foregoing embodiments have been described in some detail for purposes of clarity of explanation and understanding, the invention is not limited to the details provided. There are many embodiments of the present invention. The disclosed embodiments are illustrative and not restrictive.

구성, 배열, 및 사용의 많은 변화는 설명에 따라 가능하고, 공표된 특허의 청구범위 내에 있다. 예를 들어, 사용된 기술의 상호연결 및 기능 단위 비트 폭, 클록 속도, 및 타입은 각각의 구성요소 블록에서 다양한 실시예에 따라 가변적이다. 인터커넥트 및 로직에 주어진 명칭은 단지 예시적이고, 설명된 개념을 제한하는 것으로 해석되지 않아야 한다. 순서도 및 흐름도 프로세스, 동작, 및 기능 요소의 순서 및 배열은 다양한 실시예에 따라 가변적이다. 또한, 특별히 반대로 명시되지 않으면, 지정된 값 범위, 사용된 최대 및 최소 값, 또는 다른 특정 사양(입력/출력 장치 기술 타입, 및 레지스터 및 버퍼에서의 엔트리 또는 단계의 수와 같은)은 단지 설명된 실시예의 것이며, 구현 기술에서 개선 및 변경을 추적하도록 기대되고, 제한으로 해석되지 않아야 한다.Many variations in construction, arrangement, and use are possible in accordance with the description and are within the scope of the claims of the published patents. For example, the interconnection and functional unit bit widths, clock rates, and types of technology used are variable for various embodiments in each component block. Names given to interconnects and logic are illustrative only and should not be construed as limiting the concepts described. Flowcharts and Flowcharts The order and arrangement of process, operation, and functional elements vary according to various embodiments. Further, unless specifically stated to the contrary, the ranges of values specified, the maximum and minimum values used, or other specific specifications (such as input/output device description types, and the number of entries or steps in registers and buffers) are merely illustrative of implementations. It is intended as an example, and is expected to track improvements and changes in implementation techniques, and should not be construed as limitations.

본 기술에 공지된 기능적 등가 기술은 다양한 구성요소, 서브시스템, 동작, 기능, 루틴, 서브루틴, 인라인 루틴, 절차, 매크로, 또는 그것의 부분을 구현하도록 설명된 것 대신에 이용 가능하다. 실시예의 많은 기능 양태는 더 빠른 처리(소프트웨어로 하드웨어 내의 이전 기능의 이동을 용이하게 하는) 및 고집적도(하드웨어로 소프트웨어 내의 이전 기능의 이동을 용이하게 하는)의 실시예 의존 설계 제약 및 기술 경향의 목적(function)으로서, 하드웨어(예를 들어, 일반적으로 전용 회로) 또는 소프트웨어로(예를 들어, 프로그램된 컨트롤러 또는 프로세서의 어떤 방식을 통해) 선택적으로 실현 가능하다. 다양한 실시예의 특정 변화는 분할, 상이한 폼 팩터(form factor) 및 구성의 차이; 상이한 운영 체제 및 다른 시스템 소프트웨어의 사용; 상이한 인터페이스 표준, 네트워크 프로토콜, 또는 통신 링크의 사용; 상이한 코딩 타입의 사용; 및 특정 응용의 고유 공학 및 사업 제약에 따라 본 명세서에 설명된 개념을 구현할 때 예상되는 다른 변화를 포함하지만, 이에 제한되지 않는다.Functionally equivalent techniques known in the art can be used instead of those described to implement the various components, subsystems, operations, functions, routines, subroutines, inline routines, procedures, macros, or portions thereof. Many functional aspects of an embodiment are dependent on embodiment-dependent design constraints and technology trends of faster processing (facilitating movement of older functions in hardware to software) and higher density (facilitating movement of older functions in software into hardware). As a function, it is selectively feasible in hardware (eg, generally dedicated circuitry) or in software (eg, via some way of a programmed controller or processor). Specific variations of the various embodiments include partitioning, different form factors and differences in configuration; use of different operating systems and other system software; the use of different interface standards, network protocols, or communication links; use of different coding types; and other variations expected in implementing the concepts described herein depending on the inherent engineering and business constraints of a particular application.

실시예는 설명된 실시예의 많은 양태의 최소 구현을 넘어 상세하게 그리고 환경적 상황으로 잘 설명되었다. 당업자는 일부 실시예가 나머지 요소 중에서 기본 협력을 변경하지 않으면서 개시된 구성요소 또는 특징을 생략한다는 것을 인식할 것이다. 개시된 많은 상세는 설명된 실시예의 다양한 양태를 구현하도록 이용되지 않는다. 나머지 요소가 종래 기술과 구별할 수 있을 정도까지, 생략되는 구성요소 및 특징은 본 명세서에 설명된 개념에 제한되지 않는다.The embodiments have been well described in detail and in environmental contexts beyond the minimal implementation of many aspects of the described embodiments. Those skilled in the art will recognize that some embodiments omit disclosed components or features without changing the underlying collaboration among the remaining elements. Many of the details disclosed are not used to implement various aspects of the described embodiments. To the extent that the remaining elements are distinguishable from the prior art, omitted components and features are not limited to the concepts described herein.

설계의 모든 그러한 변화는 설명된 실시예에 의해 전달되는 교시를 통한 비현실적인 변경이다. 본 명세서에 설명된 실시예는 다른 컴퓨팅 및 네트워킹 응용에 광범위하게 적용 가능하고, 설명된 실시예의 특정 응용 및 산업에 제한되지 않는다. 따라서, 본 발명은 특허의 청구범위 내에 망라되는 모든 가능한 수정 및 변화를 포함하는 것으로 해석되어야 한다.All such changes in design are impractical changes through the teachings conveyed by the described embodiments. Embodiments described herein are broadly applicable to other computing and networking applications, and are not limited to particular applications and industries of the described embodiments. Accordingly, the present invention should be construed to cover all possible modifications and variations that fall within the scope of the claims of the patent.

도 1-도 12의 도면에 의해 수행되는 기능은 관련 기술(들)에 숙련된 자에게 분명한 바와 같이 종래의 일반 목적 프로세서, 디지털 컴퓨터, 마이크로프로세서, 마이크로컨트롤러, RISC(reduced instruction set computer) 프로세서, CISC(complex instruction set computer) 프로세서, SIMD(single instruction multiple data) 프로세서, 신호 프로세서, CPU(central processing unit), ALU(arithmetic logic unit), VDSP(video digital signal processor) 및/또는 본 명세서의 교시에 따라 프로그램된 유사한 컴퓨터 기계 중 하나 이상을 사용하여 구현될 수 있다. 적절한 소프트웨어, 펌웨어, 코딩, 루틴, 명령어, 옵코드, 마이크로코드, 및/또는 프로그램 모듈은 또한 관련 기술(들)에 숙련된 자에게 분명한 바와 같이, 본 명세서의 교시에 기초하여 숙련된 프로그래머에 의해 즉시 용이하게 준비될 수 있다. 소프트웨어는 일반적으로 기계 구현의 프로세서 중 하나 이상에 의해 매체 또는 수개의 매체들로부터 실행된다.The functions performed by the drawings of Figures 1 to 12 include conventional general purpose processors, digital computers, microprocessors, microcontrollers, reduced instruction set computer (RISC) processors, as will be apparent to those skilled in the relevant art(s); A complex instruction set computer (CISC) processor, a single instruction multiple data (SIMD) processor, a signal processor, a central processing unit (CPU), an arithmetic logic unit (ALU), a video digital signal processor (VDSP) and/or according to the teachings herein. may be implemented using one or more of similar computer machines programmed accordingly. Appropriate software, firmware, coding, routines, instructions, opcodes, microcode, and/or program modules may also be installed by skilled programmers based on the teachings herein, as will be apparent to those skilled in the relevant art(s). It can be readily prepared immediately. Software is generally executed from a medium or several media by one or more of a machine-implemented processor.

본 발명은 또한, 본 명세서에 설명된 바와 같이, 플립 칩 모듈 및/또는 멀티 칩 모듈로 배열된 ASIC(application specific integrated circuit), 플랫폼 ASIC, FPGA(field programmable gate array), PLD(programmable logic device), CPLD(complex programmable logic device), SOG(sea-of-gate), RFIC(radio frequency integrated circuit), ASSP(application specific standard product), 하나 이상의 모놀리식 집적 회로, 하나 이상의 칩 또는 다이의 준비에 의해 또는 종래의 구성요소 회로의 적절한 망을 연결함으로써 구현될 수 있으며, 그 수정은 당업자(들)에게 매우 명백할 것이다.The present invention also relates to an application specific integrated circuit (ASIC), a platform ASIC, a field programmable gate array (FPGA), a programmable logic device (PLD) arranged as a flip chip module and/or a multi-chip module, as described herein. , complex programmable logic device (CPLD), sea-of-gate (SOG), radio frequency integrated circuit (RFIC), application specific standard product (ASSP), one or more monolithic integrated circuits, one or more chips or dies in the preparation of or by connecting an appropriate network of conventional component circuits, modifications of which will be readily apparent to those skilled in the art(s).

따라서, 본 발명은 또한 본 발명에 따른 하나 이상의 프로세스 또는 방법을 수행하기 위해 기계를 프로그램하는 데 사용될 수 있는 명령어를 포함하는 저장 매체 또는 매체들 및/또는 송신 매체 또는 매체들일 수 있는 컴퓨터 제품을 포함할 수 있다. 주변 회로의 동작과 함께, 기계에 의해 컴퓨터 제품에 포함된 명령어의 실행은 입력 데이터를 저장 매체상의 하나 이상의 파일 및/또는 오디오 및/또는 시각적 묘사와 같은 물리적 객체 또는 실체를 나타내는 하나 이상의 출력 신호로 변환할 수 있다. 저장 매체는 플로피 디스크, 하드 드라이브, 자기 디스크, 광 디스크, CD-ROM, DVD 및 자기 광 디스크를 포함하는 임의의 타입의 디스크 및 ROM(read-only memory), RAM(random access memory), EPROM(erasable programmable ROM), EEPROM(electrically erasable programmable ROM), WPROM(ultra-violet erasable programmable ROM), 플래시 메모리와 같은 회로, 자기 카드, 광학 카드, 및/또는 전자 명령어를 저장하는 데 적절한 임의의 타입의 매체를 포함할 수 있지만, 이에 제한되지 않는다.Accordingly, the present invention also includes a computer product, which may be a storage medium or media and/or a transmission medium or media comprising instructions that may be used to program a machine to perform one or more processes or methods according to the present invention. can do. Execution of instructions embodied in a computer product by a machine, in conjunction with operation of peripheral circuitry, converts input data into one or more files on a storage medium and/or one or more output signals representing physical objects or entities, such as audio and/or visual representations. can be converted The storage medium includes any type of disk including floppy disks, hard drives, magnetic disks, optical disks, CD-ROMs, DVDs and magneto-optical disks and read-only memory (ROM), random access memory (RAM), EPROM ( circuits such as erasable programmable ROM), electrically erasable programmable ROM (EEPROM), ultra-violet erasable programmable ROM (WPROM), flash memory, magnetic cards, optical cards, and/or any type of medium suitable for storing electronic instructions. may include, but is not limited to.

본 발명의 요소는 하나 이상의 장치, 유닛, 구성요소, 시스템, 기계 및/또는 장치의 일부 또는 전부를 형성할 수 있다. 장치는 서버, 워크스테이션, 저장 어레이 컨트롤러, 저장 시스템, 개인용 컴퓨터, 랩톱 컴퓨터, 노트북 컴퓨터, 팜 컴퓨터, 개인 휴대 정보 단말기, 휴대용 전자 장치, 배터리 전력 공급 장치, 셋톱 박스, 인코더, 디코더, 트랜스코더, 압축기, 압축해제기, 전처리기, 후처리기, 송신기, 수신기, 송수신기, 암호 회로, 휴대 전화, 디지털 카메라, 위치 결정 및/또는 내비게이션 시스템, 의료 기구, 헤드업 디스플레이, 무선 장치, 오디오 레코딩, 오디오 저장 및/또는 오디오 재생 장치, 비디오 레코딩, 비디오 저장 및/또는 비디오 재생 장치, 게임 플랫폼, 주변 장치 및/또는 멀티 칩 모듈을 포함할 수 있지만, 이제 제한되지 않는다. 관련 기술(들)에 숙련된 자는 본 발명의 요소가 특정 응용의 기준을 충족시키기 위해 다른 타입의 장치로 구현될 수 있는 것을 이해할 것이다.Elements of the invention may form part or all of one or more devices, units, components, systems, machines and/or devices. Devices include servers, workstations, storage array controllers, storage systems, personal computers, laptop computers, notebook computers, palm computers, personal digital assistants, portable electronic devices, battery power supplies, set-top boxes, encoders, decoders, transcoders, Compressors, decompressors, preprocessors, postprocessors, transmitters, receivers, transceivers, cryptographic circuits, cell phones, digital cameras, positioning and/or navigation systems, medical devices, heads-up displays, wireless devices, audio recordings, audio storage and/or audio playback devices, video recording, video storage and/or video playback devices, gaming platforms, peripherals and/or multi-chip modules. Those skilled in the relevant art(s) will appreciate that elements of the present invention may be embodied in other types of devices to meet the criteria of a particular application.

"있다(is(are))" 및 동사와 함께 본 명세서에 사용될 때 용어 "할 수 있다(may)" 및 "일반적으로(generally)"는 설명이 예시적이라는 의도를 전달하도록 의미되고 본 개시에 기초하여 유도될 수 있는 대안 예뿐만 아니라 본 개시에 제시된 구체적 예 둘 다를 포괄할 만큼 충분히 넓은 것으로 생각된다. 본 명세서에 사용되는 바와 같은 용어 "할 수 있다(may)" 및 "일반적으로(generally)"는 반드시 상응하는 요소를 생략하는 것의 바람직함 또는 가능성을 의미하도록 해석되어야 하는 것은 아니다.The terms “may” and “generally” when used herein in conjunction with “is(are)” and the verb are meant to convey the intent that the description is exemplary and are intended to be used in the present disclosure. It is intended to be broad enough to encompass both the specific examples presented in this disclosure as well as alternative examples that may be derived on the basis thereof. The terms "may" and "generally" as used herein are not necessarily to be construed to mean the desirability or possibility of omitting the corresponding element.

본 발명이 그 실시예를 참조하여 특별히 도시되고 설명되었지만, 형태 및 상세의 다양한 변경이 본 발명의 범위로부터 벗어나지 않으면서 이루어질 수 있다는 점은 당업자에 의해 이해될 것이다.Although the present invention has been particularly shown and described with reference to embodiments thereof, it will be understood by those skilled in the art that various changes in form and detail may be made therein without departing from the scope of the invention.

Claims (20)

가변 크기 플래시 변환 계층을 사용하는 방법으로서,
(A) 장치에서 호스트로부터, 논리 블록 어드레스에 대응하는 특정 데이터를 상기 장치의 비휘발성 메모리로부터 판독하라는 판독 요청을 수신하는 단계;
(B) (i) 상기 비휘발성 메모리의 복수의 페이지들 중 특정 페이지의 물리 어드레스, (ii) 상기 논리 블록 어드레스에 대응하는 압축된 데이터를 기록하는 것에 대한 응답으로 이전에 저장된 압축된 데이터에 대한 상기 특정 페이지의 오프셋, 및 (iii) 상기 압축된 데이터의 길이를 획득하기 위해, 맵에서 복수의 엔트리들 중 특정 엔트리를 판독하는 단계 ― 상기 특정 엔트리는 상기 논리 블록 어드레스와 연관됨 ―;
(C) 상기 오프셋 및 상기 길이를 (i) 상기 특정 페이지의 복수의 판독 유닛들 중 소정의 판독 유닛의 어드레스, 및 (ii) 상기 특정 페이지로부터 판독될 상기 판독 유닛의 개수로 변환하는 단계; 및
(D) 상기 소정의 판독 유닛으로부터 시작하여 상기 판독 유닛의 개수를 상기 특정 페이지로부터 판독하는 단계
를 포함하며,
상기 오프셋 및 상기 길이의 단위(granularity)는 상기 판독 유닛들 중 하나의 판독 유닛의 크기보다 작은,
가변 크기 플래시 변환 계층을 사용하는 방법.
A method of using a variable size flash translation layer, comprising:
(A) receiving, in a device, from a host, a read request to read specific data corresponding to a logical block address from a non-volatile memory of the device;
(B) for previously stored compressed data in response to writing (i) a physical address of a specific page of the plurality of pages of the non-volatile memory, and (ii) the compressed data corresponding to the logical block address; reading a particular one of a plurality of entries in a map to obtain an offset of the particular page, and (iii) a length of the compressed data, the particular entry associated with the logical block address;
(C) converting the offset and the length into (i) an address of a read unit of a plurality of read units of the particular page, and (ii) the number of the read units to be read from the particular page; and
(D) starting from the predetermined reading unit and reading the number of the reading units from the specific page.
includes,
wherein the granularity of the offset and the length is less than the size of one of the read units;
How to use a variable size flash transform layer.
제 1 항에 있어서,
정정된 데이터를 생성하기 위해 상기 특정 페이지로부터 판독되는 상기 판독 유닛 각각에 대해 에러 정정 디코딩을 수행하는 단계; 및
(i) 상기 압축된 데이터에 대한 상기 특정 페이지의 상기 오프셋 및 (ii) 상기 압축된 데이터의 상기 길이 둘 다에 따라 상기 정정된 데이터로부터 상기 압축된 데이터를 추출하는 단계
를 더 포함하는,
가변 크기 플래시 변환 계층을 사용하는 방법.
The method of claim 1,
performing error correction decoding on each of the read units read from the specific page to generate corrected data; and
extracting the compressed data from the corrected data according to both (i) the offset of the particular page to the compressed data and (ii) the length of the compressed data.
further comprising,
How to use a variable size flash transform layer.
제 2 항에 있어서,
리턴 데이터(return data)를 생성하기 위해 상기 압축된 데이터를 압축 해제하는 단계; 및
상기 리턴 데이터를 상기 호스트에 전송하는 단계
를 더 포함하는,
가변 크기 플래시 변환 계층을 사용하는 방법.
3. The method of claim 2,
decompressing the compressed data to produce return data; and
transmitting the return data to the host
further comprising,
How to use a variable size flash transform layer.
제 1 항에 있어서,
판독될 상기 판독 유닛의 개수는 상기 특정 페이지의 상기 판독 유닛들 전부보다 적은,
가변 크기 플래시 변환 계층을 사용하는 방법.
The method of claim 1,
the number of read units to be read is less than all of the read units of the particular page;
How to use a variable size flash transform layer.
제 1 항에 있어서,
(i) 상기 압축된 데이터에 대한 상기 특정 페이지의 상기 오프셋 및 (ii) 상기 특정 페이지의 사용자 데이터의 양과 결합되는 상기 압축된 데이터의 길이 둘 다에 기초하여, 상기 압축된 데이터의 적어도 일부가 상기 비휘발성 메모리의 상기 페이지들 중 후속 페이지의 하나 이상의 후속 판독 유닛에 있다고 판단하는 단계를 더 포함하는,
가변 크기 플래시 변환 계층을 사용하는 방법.
The method of claim 1,
at least a portion of the compressed data is determined based on both (i) the offset of the particular page relative to the compressed data and (ii) the length of the compressed data combined with the amount of user data of the particular page. further comprising determining that it is in one or more subsequent read units of a subsequent one of said pages of non-volatile memory.
How to use a variable size flash transform layer.
제 5 항에 있어서,
상기 후속 페이지로부터 상기 하나 이상의 후속 판독 유닛을 판독하는 단계를 더 포함하는,
가변 크기 플래시 변환 계층을 사용하는 방법.
6. The method of claim 5,
reading the one or more subsequent read units from the subsequent page;
How to use a variable size flash transform layer.
제 1 항에 있어서,
(i) 상기 비휘발성 메모리의 상기 페이지들 중 제1 페이지는 상기 판독 유닛의 제1 개수를 포함하고, (ii) 상기 비휘발성 메모리의 상기 페이지들 중 제2 페이지는 상기 판독 유닛의 제2 개수를 포함하고, (iii) 상기 제1 개수는 상기 제2 개수와 상이한,
가변 크기 플래시 변환 계층을 사용하는 방법.
The method of claim 1,
(i) a first page of the pages of the non-volatile memory includes the first number of read units, and (ii) a second page of the pages of the non-volatile memory includes a second number of read units (iii) the first number is different from the second number;
How to use a variable size flash transform layer.
제 1 항에 있어서,
(i) 상기 비휘발성 메모리의 상기 페이지들 중 제1 페이지는 사용자 데이터의 제1 양을 포함하고, (ii) 상기 비휘발성 메모리의 상기 페이지들 중 제2 페이지는 상기 사용자 데이터의 제2 양을 포함하고 (iii) 상기 제1 양은 상기 제2 양과 상이한,
가변 크기 플래시 변환 계층을 사용하는 방법.
The method of claim 1,
(i) a first one of the pages of the non-volatile memory contains a first amount of user data, and (ii) a second one of the pages of the non-volatile memory contains a second amount of the user data. (iii) the first amount is different from the second amount;
How to use a variable size flash transform layer.
제 1 항에 있어서,
상기 특정 데이터를 상기 비휘발성 메모리에 기록하라는 기록 요청을 수신하는 단계;
상기 특정 데이터보다 작은 상기 압축된 데이터를 생성하기 위해 상기 특정 데이터를 압축하는 단계;
상기 특정 페이지에 상기 압축된 데이터의 적어도 일부를 기록하는 단계; 및
상기 특정 엔트리에 (i) 상기 특정 페이지의 상기 물리 어드레스, (ii) 상기 압축된 데이터에 대한 상기 특정 페이지의 상기 오프셋, 및 (iii) 상기 압축된 데이터의 상기 길이를 저장하는 단계
를 더 포함하는,
가변 크기 플래시 변환 계층을 사용하는 방법.
The method of claim 1,
receiving a write request to write the specific data to the non-volatile memory;
compressing the specific data to produce the compressed data that is smaller than the specific data;
writing at least a portion of the compressed data to the specific page; and
storing (i) the physical address of the particular page, (ii) the offset of the particular page relative to the compressed data, and (iii) the length of the compressed data in the particular entry;
further comprising,
How to use a variable size flash transform layer.
제 9 항에 있어서,
상기 기록 요청의 상기 논리 블록 어드레스 및 상기 길이의 적어도 일부를 포함하는 헤더를 상기 특정 페이지에 기록하는 단계를 더 포함하는,
가변 크기 플래시 변환 계층을 사용하는 방법.
10. The method of claim 9,
and writing a header including at least a portion of the logical block address and the length of the write request to the specific page.
How to use a variable size flash transform layer.
제 1 항에 있어서,
(i) 상기 논리 블록 어드레스는 복수의 논리 블록 어드레스들 중 하나이고, (ii) 상기 개수의 판독 유닛들 중 적어도 하나의 판독 유닛은, 상기 논리 블록 어드레스들 중 상이한 논리 블록 어드레스에 대응하는 적어도 일부 상이한 데이터를 포함하는,
가변 크기 플래시 변환 계층을 사용하는 방법.
The method of claim 1,
(i) the logical block address is one of a plurality of logical block addresses, and (ii) at least one read unit of the number of read units includes at least some of the logical block addresses corresponding to different logical block addresses. containing different data;
How to use a variable size flash transform layer.
제 1 항에 있어서,
상기 개수의 판독 유닛들 중 적어도 하나의 판독 유닛은 (i) 하나 이상의 헤더, 및 (ii) 상기 압축된 데이터의 일부를 포함하는,
가변 크기 플래시 변환 계층을 사용하는 방법.
The method of claim 1,
at least one read unit of the number of read units comprises (i) one or more headers, and (ii) a portion of the compressed data;
How to use a variable size flash transform layer.
가변 크기 플래시 변환 계층을 사용하는 장치로서,
비휘발성 메모리; 및
회로
를 포함하고,
상기 회로는,
(i) 논리 블록 어드레스에 대응하는 특정 데이터를 상기 비휘발성 메모리로부터 판독하라는 판독 요청을 호스트로부터 수신하고,
(ii) (a) 상기 비휘발성 메모리의 복수의 페이지 중 특정 페이지의 물리 어드레스, (b) 상기 논리 블록 어드레스에 대응하는 압축된 데이터를 기록하는 것에 대한 응답으로 이전에 저장된 압축된 데이터에 대한 상기 특정 페이지의 오프셋 및 (c) 상기 압축된 데이터의 길이를 획득하기 위해 맵에서 복수의 엔트리들 중 특정 엔트리를 판독하고 ― 상기 특정 엔트리는 상기 논리 블록 어드레스와 연관됨 ―,
(iii) 상기 오프셋 및 상기 길이를 (a) 상기 특정 페이지의 복수의 판독 유닛 중 소정의 판독 유닛의 어드레스 및 (b) 상기 특정 페이지로부터 판독될 상기 판독 유닛의 개수로 변환하고,
(iv) 상기 소정의 판독 유닛으로부터 시작하여 상기 판독 유닛의 개수를 상기 특정 페이지로부터 판독하도록 구성되며,
상기 오프셋 및 상기 길이의 단위는 상기 판독 유닛들 중 하나의 판독 유닛의 크기보다 작은,
가변 크기 플래시 변환 계층을 사용하는 장치.
A device using a variable size flash translation layer, comprising:
non-volatile memory; and
Circuit
including,
The circuit is
(i) receiving a read request from the host to read specific data corresponding to a logical block address from the non-volatile memory;
(ii) (a) a physical address of a particular page of the plurality of pages of the non-volatile memory; (b) the previously stored compressed data in response to writing the compressed data corresponding to the logical block address; reading a particular one of a plurality of entries in a map to obtain an offset of a particular page and (c) a length of the compressed data, the particular entry associated with the logical block address;
(iii) converting the offset and the length into (a) an address of a read unit among a plurality of read units of the particular page and (b) the number of the read units to be read from the particular page;
(iv) starting from the predetermined reading unit and reading the number of the reading units from the specific page;
the units of the offset and the length are smaller than the size of one of the read units;
Devices that use a variable size flash translation layer.
제 13 항에 있어서,
상기 회로는,
(i) 정정된 데이터를 생성하기 위해 상기 특정 페이지로부터 판독되는 상기 판독 유닛 각각에 대해 에러 정정 디코딩을 수행하고,
(ii) (a) 상기 압축된 데이터에 대한 상기 특정 페이지의 상기 오프셋 및 (b) 상기 압축된 데이터의 상기 길이 둘 다에 따라 상기 정정된 데이터로부터 상기 압축된 데이터를 추출하도록 추가로 구성되는,
가변 크기 플래시 변환 계층을 사용하는 장치.
14. The method of claim 13,
The circuit is
(i) perform error correction decoding for each of the read units read from the specific page to generate corrected data;
(ii) extracting the compressed data from the corrected data according to both (a) the offset of the particular page relative to the compressed data and (b) the length of the compressed data;
Devices that use a variable size flash translation layer.
제 14 항에 있어서,
상기 회로는,
(i) 리턴 데이터를 생성하기 위해 상기 압축된 데이터를 압축 해제하고,
(ii) 상기 리턴 데이터를 상기 호스트에 전송하도록 추가로 구성되는,
가변 크기 플래시 변환 계층을 사용하는 장치.
15. The method of claim 14,
The circuit is
(i) decompress the compressed data to produce return data;
(ii) further configured to send the return data to the host;
Devices that use a variable size flash translation layer.
제 13 항에 있어서,
판독될 상기 판독 유닛의 개수는 상기 특정 페이지의 상기 판독 유닛의 전부보다 더 적은,
가변 크기 플래시 변환 계층을 사용하는 장치.
14. The method of claim 13,
the number of read units to be read is less than all of the read units of the particular page;
Devices that use a variable size flash translation layer.
제 13 항에 있어서,
상기 회로는, (i) 상기 압축된 데이터에 대한 상기 특정 페이지의 상기 오프셋 및 (ii) 상기 특정 페이지의 사용자 데이터의 양과 결합되는 상기 압축된 데이터의 상기 길이 둘 다에 기초하여, 상기 압축된 데이터의 적어도 일부가 상기 비휘발성 메모리의 상기 페이지들 중 후속 페이지의 하나 이상의 후속 판독 유닛에 있다고 판단하도록 추가로 구성되는,
가변 크기 플래시 변환 계층을 사용하는 장치.
14. The method of claim 13,
The circuitry is configured to: based on both (i) the offset of the particular page relative to the compressed data and (ii) the length of the compressed data combined with an amount of user data of the particular page, the compressed data further configured to determine that at least a portion of is in one or more subsequent read units of a subsequent one of the pages of the non-volatile memory;
Devices that use a variable size flash translation layer.
제 17 항에 있어서,
상기 회로는, 상기 후속 페이지로부터 상기 하나 이상의 후속 판독 유닛을 판독하도록 추가로 구성되는,
가변 크기 플래시 변환 계층을 사용하는 장치.
18. The method of claim 17,
wherein the circuitry is further configured to read the one or more subsequent read units from the subsequent page;
Devices that use a variable size flash translation layer.
제 13 항에 있어서,
(i) 상기 비휘발성 메모리의 상기 페이지들 중 제1 페이지는 상기 판독 유닛의 제1 개수를 포함하고, (ii) 상기 비휘발성 메모리의 상기 페이지들 중 제2 페이지는 상기 판독 유닛의 제2 개수를 포함하고, (iii) 상기 제1 개수는 상기 제2 개수와 상이한,
가변 크기 플래시 변환 계층을 사용하는 장치.
14. The method of claim 13,
(i) a first page of the pages of the non-volatile memory includes the first number of read units, and (ii) a second page of the pages of the non-volatile memory includes a second number of read units (iii) the first number is different from the second number;
Devices that use a variable size flash translation layer.
제 13 항에 있어서,
상기 장치는 하나 이상의 집적 회로로 구현되는,
가변 크기 플래시 변환 계층을 사용하는 장치.
14. The method of claim 13,
wherein the device is implemented with one or more integrated circuits,
Devices that use a variable size flash translation layer.
KR1020140105900A 2013-08-16 2014-08-14 Variable-size flash translation layer KR102307382B1 (en)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US201361866672P 2013-08-16 2013-08-16
US61/866,672 2013-08-16
US201361888681P 2013-10-09 2013-10-09
US61/888,681 2013-10-09
US14/055,336 US9495288B2 (en) 2013-01-22 2013-10-16 Variable-size flash translation layer
US14/055,336 2013-10-16

Publications (2)

Publication Number Publication Date
KR20150020137A KR20150020137A (en) 2015-02-25
KR102307382B1 true KR102307382B1 (en) 2021-09-29

Family

ID=52430390

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140105900A KR102307382B1 (en) 2013-08-16 2014-08-14 Variable-size flash translation layer

Country Status (4)

Country Link
KR (1) KR102307382B1 (en)
CN (1) CN104375956B (en)
DE (1) DE102014111668A1 (en)
TW (1) TWI609263B (en)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112765006A (en) * 2015-07-21 2021-05-07 北京忆恒创源科技有限公司 Storage device log generation method and storage device thereof
US10359953B2 (en) * 2016-12-16 2019-07-23 Western Digital Technologies, Inc. Method and apparatus for offloading data processing to hybrid storage devices
US10452288B2 (en) 2017-01-19 2019-10-22 International Business Machines Corporation Identifying processor attributes based on detecting a guarded storage event
US10496292B2 (en) 2017-01-19 2019-12-03 International Business Machines Corporation Saving/restoring guarded storage controls in a virtualized environment
US10732858B2 (en) 2017-01-19 2020-08-04 International Business Machines Corporation Loading and storing controls regulating the operation of a guarded storage facility
US10725685B2 (en) * 2017-01-19 2020-07-28 International Business Machines Corporation Load logical and shift guarded instruction
US10579377B2 (en) 2017-01-19 2020-03-03 International Business Machines Corporation Guarded storage event handling during transactional execution
US10496311B2 (en) 2017-01-19 2019-12-03 International Business Machines Corporation Run-time instrumentation of guarded storage event processing
TWI633434B (en) * 2017-07-12 2018-08-21 宏碁股份有限公司 Method, system, and computer readable medium for managing solid state drive
CN108959491A (en) * 2018-06-25 2018-12-07 北斗地网(重庆)科技集团有限公司 A kind of visual display method of satellite data, device, equipment and storage medium
CN109471594B (en) * 2018-10-09 2020-07-10 华中科技大学 M L C flash memory read-write method
CN111724295A (en) * 2019-03-18 2020-09-29 芯原微电子(成都)有限公司 Cooperative access method and system for external memory and cooperative access architecture
CN112115067A (en) 2019-06-21 2020-12-22 慧荣科技股份有限公司 Flash memory physical resource set management device and method and computer readable storage medium
EP3994582A4 (en) * 2019-07-02 2023-01-18 Microsoft Technology Licensing, LLC Hardware-based memory compression
TWI754206B (en) 2020-01-10 2022-02-01 祥碩科技股份有限公司 Data storage system, data storage device and management method thereof
CN114327272A (en) * 2021-12-28 2022-04-12 深圳大普微电子科技有限公司 Data processing method, solid state disk controller and solid state disk
CN115629720B (en) * 2022-12-20 2023-07-28 鹏钛存储技术(南京)有限公司 Asymmetric striping method on storage device based on flash memory as medium

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110154158A1 (en) 2009-12-23 2011-06-23 Sandisk Corporation System and method of error correction of control data at a memory device

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6523104B2 (en) * 2001-07-13 2003-02-18 Mips Technologies, Inc. Mechanism for programmable modification of memory mapping granularity
US7469331B2 (en) * 2004-07-22 2008-12-23 International Business Machines Corporation Method and apparatus for supporting shared library text replication across a fork system call
KR20050107369A (en) * 2005-10-27 2005-11-11 서운식 An apparatus and a means to control storage device with executable in place
TW200823923A (en) * 2006-11-23 2008-06-01 Genesys Logic Inc Caching method for address translation layer of flash memory
US8949513B2 (en) * 2011-05-10 2015-02-03 Marvell World Trade Ltd. Data compression and compacting for memory devices
CN102567132B (en) * 2011-12-30 2014-12-03 记忆科技(深圳)有限公司 End-to-end chip data path protection device and method for the same

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110154158A1 (en) 2009-12-23 2011-06-23 Sandisk Corporation System and method of error correction of control data at a memory device

Also Published As

Publication number Publication date
DE102014111668A1 (en) 2015-02-19
TWI609263B (en) 2017-12-21
CN104375956A (en) 2015-02-25
KR20150020137A (en) 2015-02-25
TW201523249A (en) 2015-06-16
CN104375956B (en) 2017-11-14

Similar Documents

Publication Publication Date Title
KR102307382B1 (en) Variable-size flash translation layer
US10346312B2 (en) Variable-size flash translation layer
US11449252B2 (en) Method of writing and reading data in an NVM using Lpage identification headers
US9329991B2 (en) Translation layer partitioned between host and controller
KR102328612B1 (en) Translation layer partitioned between host and controller
JP6387231B2 (en) Management of nonvolatile memory writing and area selection
KR101564569B1 (en) Higher-level redundancy information computation
US20180143874A1 (en) Fractional redundant array of silicon independent elements
EP2646922A2 (en) Dynamic higher-level redundancy mode management with independent silicon elements
EP2880533A1 (en) Mixed granularity higher-level redundancy for non-volatile memory
WO2014144043A1 (en) Apparatus and method for generating descriptors to reaccess a non-volatile semiconductor memory of a storage drive due to an error
GB2519629A (en) Variable-size flash translation layer
WO2014028183A1 (en) Fractional redundant array of silicon independent elements

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant