















본원은 2013년 10월 21일 출원된 미국 가출원 제61/893,383호, 2013년 10월 9일 출원된 미국 가출원 제61/888,681호, 2013년 9월 3일 출원된 미국 가출원 제61/873,357호, 2013년 8월 16일 출원된 미국 가출원 제61/866,672호, 및 2013년 1월 22일 출원된 미국 가출원 제61/755,169호에 관한 것이며, 이들 각각은 그들 전체 내용이 참조로서 본 명세서에 포함된다.This application is a continuation-in-part of U.S. Provisional Application No. 61 / 893,383, filed October 21, 2013, U.S. Provisional Application No. 61 / 888,681, filed October 9, 2013, U.S. Provisional Application No. 61 / 873,357, filed September 3, U.S. Provisional Application No. 61 / 866,672, filed August 16, 2013, and U.S. Provisional Application No. 61 / 755,169, filed January 22, 2013, each of which is incorporated herein by reference in its entirety .
본원은 2010년 3월 22일 출원된 미국 가출원 제61/316,373호와 관련된, 2011년 3월 21일에 출원된 미국 출원번호 제13/053,175호에 관한 것이며, 이들 각각은 그들 전체 내용이 참조로서 본 명세서에 포함된다.This application is related to U.S. Serial No. 13 / 053,175, filed on March 21, 2011, which is related to U.S. Provisional Application No. 61 / 316,373, filed March 22, 2010, each of which is incorporated herein by reference in its entirety Are included herein.
또한, 본원은 2011년 10월 5일 출원된 미국 가출원 제61/543,707호에 대한 우선권을 주장하는, 2012년 10월 4일에 국제출원된 국제출원번호 PCT/US2012/058583호에 관한 것이며, 이들 각각은 그들 전체 내용이 참조로서 본 명세서에 포함된다.This application is also related to International Application No. PCT / US2012 / 058583, filed October 4, 2012, which claims priority to U.S. Provisional Application No. 61 / 543,707, filed October 5, 2011, Each of which is incorporated herein by reference in its entirety.
본원은 2011년 9월 6일 출원된 미국 가출원 제61/531,551호 및 2011년 8월 9일 출원된 미국 가출원 제61/521,739에 대한 우선권을 주장하는, 2012년 8월 8일에 국제출원된 국제출원번호 PCT/US2012/049905호와 관련된, 2013년 7월 10일 출원된 미국 출원번호 제13/936,010호에 관한 것이며, 이들 각각은 그들 전체 내용이 참조로서 본 명세서에 포함된다.This application claims priority to U.S. Provisional Application No. 61 / 531,551, filed September 6, 2011, and U.S. Provisional Application No. 61 / 521,739, filed on August 9, 2011, No. 13 / 936,010, filed July 10, 2013, which is related to Application No. PCT / US2012 / 049905, each of which is incorporated herein by reference in its entirety.
본 발명은 일반적으로 컴퓨팅 호스트 및 입/출력 디바이스 기술에 관한 것이며, 보다 구체적으로는, 호스트와 컨트롤러 간에 파티셔닝된 변환 계층을 제공하는 방법 및/또는 장치에 관한 것이다.
The present invention relates generally to computing hosts and input / output device technologies, and more particularly to a method and / or apparatus for providing a partitioned translation layer between a host and a controller.
종래의 솔리드-스테이트 드라이브(solid-state drive; SSD)는 비휘발성 메모리의 각 페이지에 일정한, 정수 개의 호스트 논리 블록들을 저장한다. 비휘발성 메모리의 각 페이지에 대한 사용자 데이터 사이즈 또는 사용가능한 사이즈가 일정하지 않은 경우, 저장 효율 문제들이 발생하게 된다. 솔리드-스테이트 드라이브들 내의 가변 사이즈 플래시 변환 계층용 아키텍처들은 하드웨어 집중적이다. 페이지 헤더(page header)들은 솔리드-스테이트 드라이브의 페이지들 내에 존재하는 복수의 판독 유닛들 중에서 사용자 데이터가 저장되는 장소를 식별하는데 사용되며, 데이터의 추출은 먼저 이 페이지 헤더들을 판독 및 파싱하는 것을 포함한다.
A conventional solid-state drive (SSD) stores an integer number of host logical blocks in each page of non-volatile memory. If the user data size or usable size for each page of non-volatile memory is not constant, storage efficiency problems will occur. The architectures for the variable size flash translation layer in solid-state drives are hardware-intensive. The page headers are used to identify where the user data is stored among the plurality of read units present in the pages of the solid-state drive, and the extraction of data includes first reading and parsing these page headers do.
본 발명은 파티셔닝된 플래시 변환 계층을 사용하는 방법에 관한 것이다. 단계 (A)는, 호스트로부터의 장치에서, 제 1 기록 데이터를 가진 기록 커맨드를 수신한다. 단계 (B)는 상기 장치에서 제 1 기록 데이터를 압축함으로써 제 2 기록 데이터를 생성한다. 일반적으로, 제 2 기록 데이터는 가변 사이즈를 갖는다. 단계 (C)는 비휘발성 메모리의 물리적 위치에서 제 2 기록 데이터를 저장한다. 물리적 위치는 다음의 기록되지 않은 위치이다. 단계 (D)는, 기록 커맨드에 대한 응답으로, 장치에서 호스트로, 물리적 위치의 표시를 반환한다.
The present invention relates to a method of using a partitioned flash translation layer. Step (A) receives, from the host, a write command having the first write data. Step (B) generates second recording data by compressing the first recording data in the apparatus. Generally, the second recording data has a variable size. Step (C) stores the second record data at the physical location of the non-volatile memory. The physical location is the next unrecorded location. Step (D) returns an indication of the physical location from the device to the host, in response to the write command.
본 발명의 실시예들은 다음의 상세한 설명 및 첨부된 청구항들과 도면들로부터 명백하게 될 것이다.
도 1은 비휘발성 메모리 페이지 내의 고정-사이즈 영역들에 논리 블록 어드레스를 맵핑하는 일 실시예의 선택된 상세 도면이다.
도 2는 선택적으로 비휘발성 메모리 페이지들을 스패닝하는 가변-사이즈 영역에 논리 블록 어드레스를 맵핑하는 일 실시예의 선택된 상세 도면이다.
도 3은 정수 개의 판독 유닛들을 포함하는 비휘발성 메모리 페이지에 대한 일 실시예의 도면이다.
도 4는 하나 이상의 판독 유닛들을 스패닝하는 가변-사이즈 영역에 논리 블록 어드레스를 맵핑하는 일 실시예의 선택된 상세 도면이다.
도 5는 헤더들 및 데이터를 포함하는 판독 유닛에 대한 일 실시예의 선택된 상세 도면이다.
도 6은 헤더들 및 데이터를 포함하는 비휘발성 메모리 페이지에 대한 일 실시예의 선택된 상세 도면이다.
도 7은 헤더들 및 데이터를 포함하는 비휘발성 메모리 페이지에 대한 다른 실시예의 선택된 상세 도면이다.
도 8은 각종 타입의 헤더들에 대한 일 실시예의 선택된 상세 도면이다.
도 9는 맵 엔트리에 대한 일 실시예의 선택된 상세 도면이다.
도 10은 각종 압축된 맵 엔트리들에 대한 일 실시예의 선택된 상세 도면이다.
도 11a는 솔리드-스테이트 드라이브 컨트롤러에 대한 일 실시예의 선택된 상세 도면이다.
도 11b는 데이터 경로 세그먼트에 대한 일 실시예의 선택된 상세 도면이다.
도 11c는 본 발명의 일 실시예에 따른 시스템에 대한 각종 실시예들의 선택된 상세 도면이다.
도 12는 비휘발성 메모리에 데이터를 기록하는 흐름도이다.
도 13은 비휘발성 메모리로부터 데이터를 판독하는 흐름도이다.
도 14는 비휘발성 메모리에서 데이터를 리사이클링하는 흐름도이다.Embodiments of the invention will become apparent from the following detailed description and the appended claims and drawings.
Figure 1 is a selected detail of one embodiment of mapping a logical block address to fixed-size regions within a non-volatile memory page.
FIG. 2 is a selected detail of one embodiment of mapping a logical block address to a variable-size area that optionally spans non-volatile memory pages.
3 is a diagram of an embodiment of a non-volatile memory page including an integer number of read units.
4 is a selected detail of one embodiment of mapping a logical block address to a variable-size area spanning one or more read units.
5 is a selected detailed view of one embodiment of a reading unit that includes headers and data.
6 is a selected detailed view of one embodiment of a non-volatile memory page containing headers and data.
Figure 7 is a selected detail of another embodiment of a non-volatile memory page that includes headers and data.
Figure 8 is a selected detail of one embodiment of various types of headers.
Figure 9 is a selected detail view of an embodiment of a map entry.
10 is a selected detailed view of one embodiment of various compressed map entries.
11A is a selected detail view of an embodiment of a solid-state drive controller.
11B is a selected detail view of an embodiment of a data path segment.
11C is a selected detail of various embodiments of a system according to an embodiment of the present invention.
12 is a flowchart for recording data in a nonvolatile memory.
13 is a flowchart for reading data from a non-volatile memory.
14 is a flow chart for recycling data in a non-volatile memory.
본 발명의 실시예들은 (i) 광범위한 데이터 사이즈들을 지원할 수 있고, (ii) 비-블록 기반 데이터로 동작할 수 있고, (iii) 데이터 기록에 대한 응답으로 호스트에게 핸들(handle)을 반환할 수 있고, (iv) 그 핸들을 이용하여 데이터를 판독할 수 있고/있거나, (v) 하나 이상의 집적 회로들 및/또는 관련 펌웨어 구현될 수 있는, 호스트와 컨트롤러 간에 파티셔닝된 변환 계층을 제공하는 것을 포함한다.Embodiments of the present invention may be used to (i) support a wide range of data sizes, (ii) operate with non-block based data, and (iii) return a handle to the host in response to the data write. (Iv) read and / or read data using its handle, or (v) provide a partitioned translation layer between a host and a controller, which may be implemented on one or more integrated circuits and / or associated firmware do.
호스트는 입/출력 디바이스(예를 들면, 솔리드-스테이트 드라이브(예컨대, SSD) 컨트롤러)에 커플링되고, 입/출력 디바이스는 비휘발성 메모리(예컨대, NVM)에 커플링되고/되거나 이를 포함한다. 호스트의 예들로는 컴퓨팅 호스트, 서버, 개인용 컴퓨터, 랩탑 컴퓨터, 노트북 컴퓨터, 워크스테이션 컴퓨터, PDA(personal digital assistant), 스마트폰, 셀룰러 핸드셋, 미디어 플레이어 or 레코더, 입/출력 컨트롤러, RAID(redundant array of inexpensive/independent disks)-온-칩(예컨대, ROC) 컨트롤러, 및 프로세서 또는 컴퓨터를 포함하는 임의의 다른 디바이스들을 포함한다. 호스트는 입/출력 디바이스를 통해 비휘발성 메모리에 액세스하기 위한(예컨대, 판독 또는 기입을 위한) 요청들을 발생시키며, 이 요청들은 호스트의 조합에 의해(예컨대, 적어도 부분적으로는 호스트에서 실행되는 소프트웨어에 의해) 그리고 입/출력 디바이스에 의해(예컨대, 적어도 부분적으로는 입/출력 디바이스에서 실행되는 펌웨어에 의해) 수행된다.The host is coupled to an input / output device (e.g., a solid-state drive (e.g., SSD) controller) and the input / output device is coupled to and / or included in a non-volatile memory (e.g., NVM). Examples of the host include a computing host, a server, a personal computer, a laptop computer, a laptop computer, a workstation computer, a personal digital assistant (PDA), a smart phone, a cellular handset, a media player or recorder, inexpensive / independent disks-on-chip (e.g., ROC) controller, and any other device including a processor or computer. A host generates requests (e.g., for reading or writing) to access a non-volatile memory through an input / output device, which requests are made by a combination of hosts (e.g., at least partially in software running on the host And by the input / output device (e.g., by firmware running at least partially on the input / output device).
몇몇 실시예들에서, 플래시 변환 계층들(예컨대, FTL들)은 (예컨대, 입/출력 디바이스에 대한 입/출력 동작들을 수행하기 위해 호스트에 의해 사용되는) 논리 블록 어드레스 공간 내의 논리 블록 어드레스들(예컨대, LBA들)을, NAND 플래시 비휘발성 메모리와 같은 비휘발성 메모리 내의 물리적 위치들(예컨대, 물리적 어드레스 공간 내의 물리적 저장 어드레스들)로 맵핑(변환)할 수 있다. 각종 실시예들에 따르면, 논리 블록 어드레스 공간 내의 논리 블록 어드레스의 맵핑은 1-레벨 맵; 2-레벨 맵; 멀티-레벨 맵; 다이렉트 맵; 연관 맵; 해시 테이블; B-트리; 트라이(trie); 맵의 일부분의 캐시; 및 논리 블록 어드레스들을 비휘발성 메모리 내의 물리적 위치들에 연관시키는 임의의 다른 수단 중의 하나 이상을 통한 것이다. 다른 실시예들에서, 맵은 예컨대, 하나의 엔트리가 논리 블록 어드레스 공간 내의 각 논리 블록 어드레스에 대한 것인, 복수의 엔트리들을 포함한다.In some embodiments, flash translation layers (e.g., FTLs) may be used to provide logical block addresses (e. G., FTLs) within a logical block address space (e. G., Used by a host to perform input / output operations on input / (E.g., LBAs) to physical locations (e.g., physical storage addresses within a physical address space) in a non-volatile memory such as a NAND flash non-volatile memory. According to various embodiments, the mapping of the logical block address within the logical block address space is performed by a one-level map; Two-level map; Multi-level map; Direct Map; Association map; Hash table; B-tree; Trie; Cache of a portion of the map; And any other means of associating the logical block addresses with the physical locations in the non-volatile memory. In other embodiments, the map includes a plurality of entries, e.g., one entry is for each logical block address in the logical block address space.
다른 실시예들에서, 플래시 변환 계층들은 각각의 데이터에 대한 라벨들 또는 그 밖의 고유의 식별자들을, 비휘발성 메모리 내의 물리적 위치들로 맵핑한다. 예를 들어, 라벨은 각각의 데이터에 대한 해시(예컨대, SHA-256 또는 SHA-512 해시), 또는 각각의 데이터로서 또는 그에 저장된 각각의 객체에 대한 객체 식별자, 또는 각각의 데이터에 대한 파일 시스템 식별자(예컨대, 아이노드)(각각의 데이터가 파일 시스템 객체인 경우)일 수 있다. 각종 실시예들에 따르면, 각각의 데이터의 라벨들 또는 다른 고유 식별자들의 맵핑은, 1-레벨 맵; 2-레벨 맵; 멀티-레벨 맵; 다이렉트 맵; 연관 맵; 해시 테이블; B-트리; 트라이; 맵의 일부분의 캐시; 및 이 라벨들 또는 다른 고유 식별자들을 비휘발성 메모리의 물리적 위치들 내에 연관시키는 임의의 다른 수단 중의 하나 이상을 통한 것이다. 다른 실시예들에서, 맵은 예컨대, 하나의 엔트리가 각각의 현존 라벨 또는 다른 고유 식별자에 대한 것인, 복수의 엔트리들을 포함한다. 또 다른 실시예들에서, 맵은 크기가 동적이며, 현존 라벨들 또는 다른 고유 식별자들이 증가하거나 감소함에 따라, 커지거나 작아진다. 일 예에서는, 현존 라벨들 또는 다른 고유 식별자들의 수가 증가하거나 감소함에 따라, 맵 사이즈는 선형적으로 커지거나 작아진다. 다른 예에서, 현존 라벨들 또는 다른 고유 식별자들의 수가 각각의 임계값보다 많이 증가하거나 감소함에 따라, 단계적-방식으로(개별 양으로) 커지거나 작아진다.In other embodiments, the flash translation layers map the labels or other unique identifiers for each piece of data to physical locations in the non-volatile memory. For example, the label may be a hash for each data (e.g., SHA-256 or SHA-512 hash), or an object identifier for each object stored as or as each data, or a file system identifier (E.g., an inode) (if each piece of data is a filesystem object). According to various embodiments, the mapping of the labels or other unique identifiers of each data may be performed using a one-level map; Two-level map; Multi-level map; Direct Map; Association map; Hash table; B-tree; try; Cache of a portion of the map; And any other means of associating these labels or other unique identifiers within the physical locations of the non-volatile memory. In other embodiments, the map includes a plurality of entries, e.g., one entry is for each existing label or other unique identifier. In yet other embodiments, the map is dynamic in size and increases or decreases as existing labels or other unique identifiers increase or decrease. In one example, as the number of existing labels or other unique identifiers increases or decreases, the map size linearly increases or decreases. In another example, the number of existing labels or other unique identifiers is increased or decreased (in a discrete amount) in a step-by-step manner as the number of individual thresholds increases or decreases.
각종 실시예들에서, 멀티-레벨 맵은 고유 식별자들을 제공하고/하거나 고유 식별자들의 범위를 제한하는데 사용된다. 예를 들어, 제 1 연관 맵에서 라벨을 조회하여 그 라벨보다 길이가 짧은 고유 식별자를 생성한다. 이어서, 제 2 맵에서 고유 식별자를 조회하여, 비휘발성 메모리 내의 물리적 위치를 생성한다. 다른 실시예들에서, 제 2 맵은 예컨대, 하나의 맵이 비휘발성 메모리의 복수의 물리적으로 분리된 부분들(예컨대, 상이한 솔리드-스테이트 디스크들에 존재하는) 및/또는 기능적으로 상이한 부분들(예컨대, 상이한 타입들)의 각각에 대한 것인, 복수의 맵들이다.In various embodiments, the multi-level map is used to provide unique identifiers and / or to limit the range of unique identifiers. For example, a label is searched in the first association map, and a unique identifier having a shorter length than the label is generated. Then, a unique identifier is inquired in the second map, and a physical location in the nonvolatile memory is generated. In other embodiments, the second map may include, for example, a map that includes a plurality of physically separate portions of non-volatile memory (e.g., residing in different solid-state disks) and / or functionally different portions For example, different types). ≪ / RTI >
복수의 라벨들(또는 핸들들 또는 논리 블록 어드레스들 또는 식별자들 또는 그 밖의 유사한 용어들)의 각각은 일반적으로 각각의 데이터 객체(또는 섹터 또는 블록 또는 아이템 또는 그 밖의 유사한 용어들)에 대응하고, 플래시 변환 계층은 그 라벨들 각각을 대응하는 데이터 객체의 비휘발성 메모리 내 물리적 위치와 연관시킨다. 라벨과 대응하는 데이터 객체의 비휘발성 메모리 내 물리적 위치의 연관은 그 연관이 수행되는 방식과 관계없이, 맵을 통해 이루어지는 것으로 알려져 있다. 본 명세서의 각종 예들이 논리 블록 어드레스들의 맵핑을 사용하고 또한 다른 예들이 객체 라벨들이나 객체 식별자들의 맵핑을 사용하지만, 다수의 유사한 데이터 라벨링 기술들이 관련 맵핑 기술들과 함께 본원의 교시의 사상 내에서 사용될 수 있다.Each of a plurality of labels (or handles or logical block addresses or identifiers or other similar terms) generally corresponds to each data object (or sector or block or item or other similar terms) The flash translation layer associates each of its labels with the physical location in the non-volatile memory of the corresponding data object. It is known that the association of the label with the physical location of the corresponding data object in the non-volatile memory is made through the map, regardless of the manner in which the association is performed. While various examples herein use mapping of logical block addresses and also other examples use object labels or mapping of object identifiers, a number of similar data labeling techniques, along with associated mapping techniques, may be used within the teachings of the present teachings .
본 명세서에서 사용되는 용어 "맵핑 유닛(mapping unit)"은 플래시 변환 계층에 의해 맵핑되어 있는 데이터 객체들의 사이즈를 지칭한다. 몇몇 실시예들에서, 맵핑 유닛은 고정 사이즈이며, 다른 실시예들에서, 데이터 객체들은 가변 사이즈이다(따라서 이 맵핑 유닛들은 고정 사이즈가 아니다).As used herein, the term "mapping unit" refers to the size of data objects that are mapped by the flash translation layer. In some embodiments, the mapping unit is of fixed size, and in other embodiments, the data objects are of variable size (thus, these mapping units are not of fixed size).
몇몇 실시예들에서, 맵핑은 하나 이상의 논리 섹터들 또는 블록들의 정렬된 유닛들 상에서 동작한다. 각 맵핑 유닛은 하나 이상의 논리 섹터들 또는 블록들의 정렬된 유닛이다. 각각의 맵핑 유닛은 그 맵핑 유닛의 데이터가 저장되는(맵핑 유닛이 기록되지 않았거나 트리밍(trimming)된 경우의 NULL 물리적 위치 가능성을 포함) 대응하는 물리적 위치를 갖는다. 예를 들어, 4 킬로바이트(예컨대, KB) 맵핑 유닛들에 있어서, 8개의 인접한(및 통상적으로 8개-섹터가 정렬된) SATA(Serial Advanced Technology Attachment) 512 바이트 섹터들이 단일 유닛으로서 맵핑된다. 일반적으로, 논리 블록 어드레스들에 대한 맵은, 맵핑 유닛과 연관된 논리 블록 어드레스로부터 비휘발성 메모리 내의 물리적 어드레스로의 각각의 변환 및/또는 제어 정보를 저장하기 위하여, 맵핑 유닛마다 하나의 엔트리를 갖는다.In some embodiments, the mapping operates on aligned units of one or more logical sectors or blocks. Each mapping unit is an aligned unit of one or more logical sectors or blocks. Each mapping unit has a corresponding physical location in which the data of the mapping unit is stored (including the NULL physical location possibility when the mapping unit is not recorded or trimming). For example, for 4 kilobyte (e.g., KB) mapping units, eight adjacent (and typically eight-sector aligned) SATA (Serial Advanced Technology Attachment) 512 byte sectors are mapped as a single unit. Generally, a map for logical block addresses has one entry per mapping unit, to store each translation and / or control information from a logical block address associated with the mapping unit to a physical address in the non-volatile memory.
각종 실시예들에서, 맵핑되어 있는 데이터 객체들의 사이즈(각 맵핑 유닛의 사이즈) 및/또는 비휘발성 메모리에 저장되는 데이터 객체들의 사이즈는 달라진다. 일 예에서, 맵 내의 각 엔트리들은 각각의 데이터 객체의 사이즈를 저장한다. 이 예에 대해 계속하면, 키/값 저장에서, 키에 따라 저장된 맵의 엔트리에 액세스하기 위하여 라벨이 사용되며, 이 값은 각각의 데이터 객체로서, 키들의 상이한 객체들 간에서 사이즈가 달라진다. 다른 예에서, 맵 내의 각각의 엔트리들은 저장된 데이터 객체를 검색하기 위하여 판독할 비휘발성 메모리에 대한 양의 표시를 저장한다. 다른 예의 변형에서, 맵의 엔트리에 의해 명시된 양의 비휘발성 메모리는, 상기 맵의 엔트리에 의해 명시된 양의 비휘발성 메모리 내의 하나 이상의 저장되어 있는 데이터 객체들 또는 그 일부들 중에서 각각의 저장되어 있는 데이터 객체의 위치를 탐색하는 헤더(header)들을 포함한다. 다른 예의 다른 변형에서, 각각의 데이터 객체를 검색하기 위하여 판독할 상기 양의 비휘발성 메모리는, 비휘발성 메모리의 페이지 내의 각각의 저장되어 있는 데이터 객체에 대한 정확한 사이즈 및 위치를 명시하지만, 비휘발성 메모리 오류 정정과는 관계가 없다. 추가적인 연산들이 사용되어 각각의 저장되어 있는 데이터 객체 및 비휘발성 메모리로부터 데이터 판독에 대한 오류 정정을 수행하는데 충분한 다른 정보를 검색하기 위하여 판독할 더 큰 양의 비휘발성 메모리를 결정한다.In various embodiments, the size of the mapped data objects (the size of each mapping unit) and / or the size of the data objects stored in the non-volatile memory are different. In one example, each entry in the map stores the size of each data object. Continuing with this example, in key / value storage, a label is used to access an entry of the saved map according to the key, which is the size of each data object, among different objects of the keys. In another example, each entry in the map stores a positive indication of the non-volatile memory to read to retrieve the stored data object. In a variation on another example, the amount of non-volatile memory specified by an entry in the map may be determined based on the stored data of each of the one or more stored data objects or portions thereof in the amount of non-volatile memory specified by the entry in the map And includes headers that search for the location of the object. In another variation of the other example, the positive non-volatile memory to read to retrieve each data object specifies the exact size and location for each stored data object in the page of non-volatile memory, It has nothing to do with error correction. Additional operations are used to determine a larger amount of nonvolatile memory to read to retrieve each stored data object and other information sufficient to perform error correction for reading data from the nonvolatile memory.
각종 실시예들에 따르면, 비휘발성 메모리는 셀당 1 비트(예컨대, 단일-레벨 셀), 2 비트(예컨대, 멀티-레벨 셀), 3 비트(예컨대, 트리플-레벨 셀), 또는 그 이상의 비트를 저장하며, 평면형(2-차원) 또는 3-차원형(예컨대, 3D)인 NAND 플래시; NOR 플래시; 임의의 다른 타입의 플래시 메모리 또는 전기적 소거가능 메모리; PCM(phase change memory); MRAM(magnetic random access memory); 레이스트랙 메모리; ReRAM(resistive random access memory); 배터리 구동형(battery-backed) SRAM(static random access memory) 또는 DRAM(dynamic random access memory); 임의의 자기 또는 광 저장 매체; 또는 임의의 다른 비휘발성 메모리 중의 하나 이상이다.According to various embodiments, a non-volatile memory may store one bit per cell (e.g., a single-level cell), two bits (e.g., a multi-level cell), three bits NAND flash, which is planar (two-dimensional) or three-dimensional (e.g., 3D); NOR Flash; Any other type of flash memory or electrically erasable memory; Phase change memory (PCM); Magnetic random access memory (MRAM); Race track memory; Resistive random access memory (ReRAM); Battery-backed static random access memory (SRAM) or dynamic random access memory (DRAM); Any magnetic or optical storage medium; Or any other non-volatile memory.
몇몇 실시예들에서, 비휘발성 메모리는, 예를 들어 상이한 입/출력 디바이스들에서(예컨대, 상이한 솔리드-스테이트 디스크들에서) 물리적으로 분리되는 것에 의해, 또는 상이한 물리적 위치들이나 액세스 메커니즘들을 갖는 것(예컨대, 비휘발성 메모리의 일부분이 NAND 플래시이고, 제 2 부분이 상 변화 메모리)에 의해, 하나 이상의 그룹들로 구성된다. 이 실시예들의 일부에서는, 맵은, 각 엔트리가 해당 입/출력 디바이스의 입/출력 디바이스 식별자(예컨대, ID) 및 물리적 위치를 명시하는 글로벌 맵(global map)이다. 다른 실시예들에서, 맵은 복수의 부분들, 예를 들어 입/출력 디바이스마다 하나의 부분으로 파티셔닝되며, 각각의 라벨의 기능 및/또는 상위-레벨 맵은 입/출력 디바이스들 중의 선택된 것을 결정한다.In some embodiments, the non-volatile memory may be physically separated, e.g., in different I / O devices (e.g., in different solid-state disks), or with different physical locations or access mechanisms For example, a portion of non-volatile memory is a NAND flash, and a second portion is a phase change memory). In some of these embodiments, the map is a global map in which each entry specifies an input / output device identifier (e.g., ID) and physical location of the corresponding input / output device. In other embodiments, the map is partitioned into a plurality of portions, e.g., one portion per input / output device, and the function and / or top-level map of each label determines the selected one of the input / output devices do.
NAND 플래시와 같은 일부 비휘발성 메모리들은 비휘발성 메모리 페이지로 호칭되는 기록가능한(또는 프로그램가능한) 유닛(또는 예를 들어 NAND 플래시를 지칭하는 경우에는 플래시 페이지)를 제공한다. 일반적으로, 비휘발성 메모리 페이지는 비휘발성 메모리의 최소 기록가능한 유닛이다. 몇몇 실시예들 및/또는 사용 시나리오들에서, 비휘발성 메모리 페이지는 다량의 사용자(비-오류 정정 코드) 데이터 바이트들 및 메타-데이터와 오류 정정 코딩(예컨대, ECC)을 위한 스페어 공간의 양을 포함한다. 통상적인 NAND 플래시 페이지 사이즈는 8 KB 또는 16 KB 또는 32 KB의 사용자 데이터인 반면, 논리 블록 어드레스들을 위한 통상적인 맵핑 유닛 사이즈는 4 KB 또는 8 KB이다. (용어 "사용자" 데이터는 비휘발성 메모리 페이지에 대해 사용되며, 일부 비휘발성 메모리 페이지들은 맵 데이터 및/또는 체크포인트 데이터와 같은 "시스템" 데이터를 저장한다. 사용자 데이터는 일반적으로 비휘발성 메모리 페이지의 비-오류 정정 코딩 부분들을 지칭하는 것으로 의도된다.) NAND 플래시 페이지들은 블록들로 구성되며, 통상적으로는 블록당 128, 256, 또는 512 플래시 페이지들이다. 블록은 소거가능한 최소-사이즈 유닛이며, NAND 플래시 페이지는 그 페이지가 (재)기록될 수 있기 이전에 소거된다.Some non-volatile memories, such as NAND flash, provide a writable (or programmable) unit called a non-volatile memory page (or a flash page if referring to, for example, NAND flash). Typically, the non-volatile memory page is the least writable unit of the non-volatile memory. In some embodiments and / or usage scenarios, the non-volatile memory page may be configured to store a large amount of user (non-error correcting code) data bytes and meta data and the amount of spare space for error correction coding (e.g., ECC) . A typical NAND flash page size is 8 KB or 16 KB or 32 KB of user data, while a typical mapping unit size for logical block addresses is 4 KB or 8 KB. (The term "user" data is used for non-volatile memory pages, and some non-volatile memory pages store "system" data such as map data and / or checkpoint data. NAND flash pages are made up of blocks, typically 128, 256, or 512 flash pages per block. The block is an erasable minimum-size unit, and the NAND flash page is erased before the page can be (re) written.
NAND 플래시와 같은 일부 비휘발성 메모리들은 복수의 플레인(plane)들 및/또는 뱅크(bank)들을 구비하며, 2개 이상의 플레인들 각각으로부터 동시에 페이지 및/또는 블록에 액세스하는 "멀티-플레인(multi-plane)" 동작들을 허용한다. 멀티-플레인 프로그래밍의 사용은 기록 대역폭을 유리하게 증가시키며, 기록의 기본 유닛이 단일의, 1-플레인 페이지가 아닌 멀티-플레인 페이지가 되게 한다. 본 명세서에서 사용되는 용어 비휘발성 메모리 페이지(또는 비휘발성 메모리 블록)는 비휘발성 메모리가 사용되는 방식에 따라, 단일 비휘발성 메모리 페이지(또는 블록) 또는 멀티-플레인 비휘발성 메모리 페이지(또는 블록)을 나타낸다.Some non-volatile memories, such as NAND flash, have a plurality of planes and / or banks and are referred to as "multi-planes ", which access pages and / or blocks simultaneously from each of two or more planes. plane "operations. The use of multi-plane programming advantageously increases the recording bandwidth, making the basic unit of recording a multi-plane page rather than a single, one-plane page. The term non-volatile memory page (or non-volatile memory block) as used herein refers to a single non-volatile memory page (or block) or a multi-plane non-volatile memory page (or block), depending on the manner in which the non- .
본 명세서에서는 용어 "플래시" 변환 계층(예컨대, FTL)이 사용되지만, 논리적 어드레스와 물리적 어드레스 간의 변환 계층의 개념은 복수 타입의 비휘발성 메모리에 적용될 수 있다. 일 예에서, 소정 타입의 비휘발성 메모리, 예컨대 NAND 플래시는 재기록되기 이전에 큰 유닛들로 소거된다. 다른 예에서, 몇몇 타입의 비휘발성 메모리는 웨어링(wearing) 처리되어, 웨어-레벨링(wear-leveling)(비휘발성 메모리의 보다 많이 마모된 부분들에서 덜 마모된 부분들로 데이터를 이동시킴)을 발생시킨다. 또 다른 예에서, 새로운 형태의 하드 디스크 자기 기록, 예컨대 싱글드 자기 기록(shingled magnetic recording)은 이전에 기록된 데이터를 갱신 기록하는 능력을 갖지 않으며, 훨씬 더 큰 양의 다른 데이터를 소거하지 않는다. 각종 실시예들에서, 코어스-그레인형(coarse-grained)이거나 유한 내구성을 갖는 비휘발성 메모리가 (플래시) 변환 계층으로부터 혜택을 받을 수 있다.Although the term "flash" translation layer (e.g., FTL) is used herein, the concept of a translation layer between a logical address and a physical address can be applied to multiple types of non-volatile memory. In one example, certain types of non-volatile memory, such as a NAND flash, are erased into larger units before being rewritten. In another example, some types of non-volatile memory may be worn-in and subjected to wear-leveling (moving data from less worn portions of the non-volatile memory to less worn portions) . In another example, a new type of hard disk magnetic recording, such as shingled magnetic recording, does not have the ability to update and record previously recorded data and does not erase much larger amounts of other data. In various embodiments, non-volatile memory with coarse-grained or finite durability may benefit from a (flash) translation layer.
도 1을 참조하면, 비휘발성 메모리 페이지 내의 고정-사이즈 영역들에 논리 블록 어드레스를 맵핑하는 일 실시예의 선택된 상세 도면이 도시되어 있다. 몇몇 전통적 플래시 변환 계층들은 비휘발성 메모리 페이지(예컨대, 비휘발성 메모리 페이지(100)) 내의 사용자 데이터 바이트들의 수는 2의 거듭제곱(및/또는 섹터 사이즈의 배수)이며, 비휘발성 메모리 페이지를 정수 개의 맵핑 유닛들(도 1에 그 각각의 데이터가 도시됨)로 나눈 것으로 가정한다. 예를 들어, 비휘발성 메모리 페이지당 16 KB의 사용자 데이터 및 4 KB 맵핑 유닛들을 가진 경우에 있어서, 각각의 비휘발성 메모리 페이지는 4개의 맵핑 유닛을 포함하고, 플래시 변환 계층은 각 맵핑 유닛의 어드레스(예컨대, LBA[M:U](110))를 각각의 비휘발성 메모리 페이지에 맵핑하며, 이 4개의 맵핑 유닛 중의 하나는 각각의 비휘발성 메모리 페이지 내에 존재한다. 즉, 각 맵 엔트리는 다음과 같은 각각의 필드들을 포함한다:Referring to FIG. 1, there is shown selected detailed views of one embodiment for mapping logical block addresses to fixed-size regions within a non-volatile memory page. Some conventional flash translation layers are those where the number of user data bytes in a non-volatile memory page (e.g., non-volatile memory page 100) is a power of two (and / or a multiple of the sector size) Is assumed to be divided by the mapping units (each of which is shown in Fig. 1). For example, in the case of 16 KB of user data and 4 KB mapping units per non-volatile memory page, each non-volatile memory page includes 4 mapping units, and the flash translation layer stores the address of each mapping unit For example, LBA [M: U] 110) to each non-volatile memory page, one of which is in each non-volatile memory page. That is, each map entry contains the following fields:
nonvolatile_memory_page_address[n-1:0], mapping_unit_within_nonvolatile_memory_page[k-1:0]nonvolatile_memory_page_address [n-1: 0], mapping_unit_within_nonvolatile_memory_page [k-1: 0]
여기서, nonvolatile_memory_page_address는 비휘발성 메모리 내의 고유의 비휘발성 메모리 페이지를 지칭하고, mapping_unit_within_nonvolatile_memory_page는 각 비휘발성 메모리 페이지의 2k 맵핑-유닛-사이즈 부분들 중의 하나를 지칭한다(k는 전체 비휘발성 메모리에 대해 고정되어 있음). 서브-페이지 어드레스(104)는 nonvolatile_memory_page_address과 mapping_unit_within_nonvolatile_memory_page의 조합이다. 섹터-기반(예컨대, 맵핑 유닛보다 정교한 입도(granularity)) 어드레싱에 있어서, 논리 블록 어드레스(예컨대, LBA[U-1:0](111))의 하위(lower-order) 비트들은, 서브-부분, 예를 들어 맵핑 유닛 내의 섹터들(예컨대, 서브-페이지(113) 내의 섹터(들))의 개수를 명시한다.Where nonvolatile_memory_page_address refers to a unique nonvolatile memory page in the nonvolatile memory and mapping_unit_within_nonvolatile_memory_page refers to one of the 2k mapping-unit-size portions of each nonvolatile memory page, where k is fixed for the entire nonvolatile memory has exist). The sub-page address 104 is a combination of nonvolatile_memory_page_address and mapping_unit_within_nonvolatile_memory_page. The lower-order bits of a logical block address (e.g., LBA [U-1: 0] 111), for sector-based (e.g., granularity than the mapping unit) For example, the number of sectors (e.g., sector (s) in sub-page 113) in the mapping unit.
도 2를 참조하면, 선택적으로 비휘발성 메모리 페이지들을 스패닝하는 가변-사이즈 영역에 논리 블록 어드레스를 맵핑하는 일 실시예의 선택된 상세 도면이 도시되어 있다. 가변-사이즈 플래시 변환 계층(예컨대, VFTL)들은 하나 이상의 비휘발성 메모리 페이지들의 가변-사이즈 영역에 대하여 맵핑 유닛(예컨대, LBA[M:U](110)) 중의 하나의 어드레스(또는 라벨)을 개념적 맵핑한다(예를 들어, 맵핑 유닛은 비휘발성 메모리에 저장되기 이전에 압축되기 때문, 및/또는, 다른 예에서, 맵핑 유닛들은 호스트에 의해서 예컨대 객체 저장소(object store)용의 가변-사이즈 조각들로 기록되기 때문임). 그러나, 각 맵 엔트리에 완전한 바이트 어드레스(204) 및 바이트 데이터 길이(206)를 제공하는 것은, 전통적 플래시 변환 계층들과 비교할 때 맵 엔트리들을 커지게 만든다.Referring to FIG. 2, there is shown a selected detail view of one embodiment for mapping a logical block address to a variable-size area that optionally spans non-volatile memory pages. The variable-size flash translation layer (e.g., VFTLs) may associate the address (or label) of one of the mapping units (e.g., LBA [M: U] 110) with respect to the variable-size area of one or more non- (E.g., because the mapping unit is compressed before being stored in the non-volatile memory and / or, in another example, the mapping units may be modified by the host, for example, As shown in FIG. Providing a complete byte address 204 and a byte data length 206 to each map entry, however, makes the map entries larger as compared to traditional flash translation layers.
도 3을 참조하면, 정수 개의 판독 유닛들을 포함하는 비휘발성 메모리 페이지에 대한 일 실시예의 도면이 도시되어 있다. 몇몇 실시예들에서, 가변-사이즈 플래시 변환 계층들은, E페이지(예컨대, 오류 정정 코딩 페이지) 어드레스("판독 유닛" 어드레스로도 불림)에 대한 맵핑에 의해서 맵핑 유닛들의 어드레스들(또는 라벨들)에서 물리적 어드레스들로의 맵핑을 수행한다. E페이지(또는 판독 유닛)는 비휘발성 메모리로부터 판독될 수 있고 또한 비휘발성 메모리의 콘텐츠들을 보호하는데 사용되는 오류 정정 코드에 의해 정정될 수 있는 최소 데이터의 양이다. 즉, 각 판독 유닛은 데이터 및 해당 데이터를 보호하는 대응하는 오류 정정 코딩 체크 바이트들의 양을 포함한다. 몇몇 실시예들에서, 비휘발성 메모리 페이지(예컨대, 비휘발성 메모리 페이지(100)), 또는 다른 실시예들에서, 기록을 위해 하나의 유닛으로 처리되는 비휘발성 메모리 페이지들의 그룹은, 도 3에 도시된 바와 같이, 정수 개의 판독 유닛들로 분할된다.Referring to FIG. 3, a diagram of an embodiment of a non-volatile memory page including an integer number of read units is shown. In some embodiments, the variable-size flash translation layers may include addresses (or labels) of mapping units by mapping to an E page (e.g., error correction coding page) address (also referred to as a " Lt; / RTI > to physical addresses. The E page (or reading unit) is the amount of minimum data that can be read from the non-volatile memory and can be corrected by the error correcting code used to protect the contents of the non-volatile memory. That is, each reading unit contains the data and the amount of corresponding error correction coding check bytes protecting that data. In some embodiments, in a non-volatile memory page (e.g., non-volatile memory page 100), or other embodiments, the group of non-volatile memory pages that are processed as a unit for writing, And is divided into an integer number of read units, as shown.
NAND 플래시와 같은 몇몇 타입의 비휘발성 메모리에 있어서, 비휘발성 메모리에 저장되는 데이터는 사용자 데이터 바이트들과 오류 정정 코드 바이트들(오류 정정 정보)의 혼합이며, 비휘발성 메모리에 액세스하는 상위-레벨 컨트롤러는 비휘발성 메모리의 어느 바이트들 및 얼마나 많은 바이트들이 사용자 데이터를 위해 사용될지 및 어느 바이트들 및 얼마나 많은 바이트들이 오류 정정 코딩을 위해 사용될지를 결정한다. 각종 실시예들에서, 비휘발성 메모리 페이지당 판독 유닛들의 수는 달라질 수 있다. 예를 들어, 비휘발성 메모리의 일부 부분들은 다른 것보다 강한 오류 정정 코드들을 사용(오류 정정 코딩 정보를 위하여 비휘발성 메모리 페이지에 더 많은 바이트들을 사용)하며, 더 적은 판독 유닛들 및/또는 판독 유닛당 더 적게 사용될 수 있는 데이터를 갖는다. 다른 예에서, 프로그램/소거 사이클들은 비휘발성 메모리를 약하게 만들기 때문에, 비휘발성 메모리 페이지당 판독 유닛들이 수는 비휘발성 메모리가 사용됨에 따라 달라질 수 있으며, 이로 인해 비휘발성 메모리가 더 사용(마모)됨에 따라 더 강한 오류 정정 코드들을 야기한다.In some types of non-volatile memory, such as NAND flash, the data stored in the non-volatile memory is a mixture of user data bytes and error correcting code bytes (error correction information) Determines which bytes of non-volatile memory and how many bytes will be used for user data and which bytes and how many bytes are to be used for error correcting coding. In various embodiments, the number of read units per non-volatile memory page may vary. For example, some portions of the non-volatile memory use stronger error correction codes (use more bytes for non-volatile memory pages for error correction coding information) and fewer read units and / Data that can be used less. In another example, the number of read units per non-volatile memory page may vary as non-volatile memory is used because the program / erase cycles weaken the non-volatile memory, which causes the non-volatile memory to become more usable Resulting in stronger error correcting codes.
각종 실시예들에 따르면, 사용되는 오류 정정 코드는 RS(Reed-Solomon) 코드; BCH(Bose Chaudhuri Hocquenghem) 코드; 터보 코드; 경판정(hard-decision) 및/또는 연판정(soft-decision) LDPC(low-density parity-check) 코드; 폴라 코드; 비이진(non-binary) 코드; RAID(redundant array of inexpensive/independent disks) 코드; 소거 코드; 임의의 다른 오류 정정 코드; 구성들, 연결들, 및 인터리빙을 포함하는 전술의 것들의 임의의 조합 중의 하나 이상의 것이다. 통상적인 코드워드 사이즈들의 범위는 512 바이트(플러스 오류 정정 코딩 바이트들)로부터 2176 바이트(플러스 오류 정정 코딩 바이트들)까지가 된다. 통상적인 오류 정정 코딩 바이트들의 수의 범위는 단지 몇 바이트로부터 수백 바이트까지가 된다. 몇몇 멀티-레벨 셀 NAND 플래시 디바이스들에서, 오류 정정 기준들은 1 KB의 사용자 데이터당 40비트이다. 몇몇 멀티-레벨 셀 NAND 플래시 디바이스들에서, 코드 레이트(판독 유닛에서의 전체 바이트에 대한 사용자 바이트의 비율)는 통상적으로 94% 미만이다. 예를 들어, MLC NAND 플래시 디바이스는 17664 바이트 사이즈의 플래시 페이지들을 가지며, 이 중의 16384 바이트는 맵핑된 데이터를 명목상 저장하는데 사용되고, 1280 바이트는 메타-데이터 및 오류 정정 코딩 바이트들을 명목상 저장하는데 사용되는 "스페어(spare)" 바이트이다. MLC NAND 플래시 디바이스용으로 권고되는 오류 정정 코딩 크기는 1 킬로바이트당 40비트의 정정이며, 이것은 1 킬로바이트의 맵핑된 데이터 바이트당 70바이트의 스페어 바이트를 사용한다.According to various embodiments, the error correction code used is an RS (Reed-Solomon) code; Bose (Bose Chaudhuri Hocquenghem) code; Turbo code; Hard-decision and / or soft-decision LDPC (low-density parity-check) codes; Polar code; Non-binary code; Redundant array of inexpensive / independent disks (RAID) code; An erase code; Any other error correcting code; One or more of any combination of the foregoing, including configurations, connections, and interleaving. The range of typical codeword sizes ranges from 512 bytes (plus error correction coding bytes) to 2176 bytes (plus error correction coding bytes). The range of the number of conventional error correction coding bytes is only a few bytes to several hundred bytes. In some multi-level cell NAND flash devices, the error correction criteria are 40 bits per kilobyte of user data. In some multi-level cell NAND flash devices, the code rate (the ratio of user bytes to total bytes in the read unit) is typically less than 94%. For example, an MLC NAND flash device has flash pages of 17664 bytes in size, of which 16384 bytes are used for nominally storing the mapped data, 1280 bytes are used for naming metadata and error correction coding bytes, Quot; spare "bytes. The recommended error correction coding size for MLC NAND flash devices is a correction of 40 bits per kilobyte, which uses 70 bytes of spare bytes per kilobyte of mapped data bytes.
도 4를 참조하면, 하나 이상의 판독 유닛들을 스패닝하는 가변-사이즈 영역으로 논리 블록 어드레스를 맵핑한 일 실시예의 선택된 상세 도면이 도시되어 있다. 몇몇 실시예들에서, VFTL 맵핑은 가변-사이즈(예컨대, 압축된) 맵핑 유닛의 어드레스(또는 라벨)(예컨대, LBA[M:U](110))을, 다수의 판독 유닛들로 맵핑시키며, 이 맵의 각 엔트리에서는 판독 유닛들이 판독 유닛 어드레스(404) 및 스팬(span)(판독 유닛들의 수)(406)으로서 나타나 있다. 맵 엔트리들 중의 하나에 의해 참조되는 판독 유닛들은, 하나 이상의 (논리적 및/또는 물리적) 순차적 비휘발성 메모리 페이지들, 예를 들어, 비휘발성 메모리 페이지 바운더리에 임의적 및/또는 선택적으로 걸쳐있는 다수의 판독 유닛들이다. 판독 유닛들 내에 데이터를 패킹(packing)하는 각종 실시예들에서는, 일반적으로 맵의 엔트리 단독만으로는 연관된 데이터의 위치를 탐색하는데 충분하지 않으며(왜냐하면, 엔트리는 판독 유닛들만을 표시하며, 판독 유닛들 내의 데이터를 위치를 표시하는 것은 아니기 때문임), 참조되는 판독 유닛들 내의 다른 정보(예컨대, 헤더들)를 사용하여, 그 연관된 데이터의 위치를 정확하게 탐색하게 된다.Referring to FIG. 4, there is shown a selected detailed view of an embodiment mapping a logical block address to a variable-size area that spans one or more read units. In some embodiments, the VFTL mapping maps the address (or label) (e.g., LBA [M: U] 110) of a variable-sized (e.g., compressed) mapping unit to a plurality of read units, In each entry of this map, the read units are shown as a read unit address 404 and a span (number of read units) 406. The read units referenced by one of the map entries may be associated with one or more (logical and / or physical) sequential nonvolatile memory pages, e.g., multiple reads that arbitrarily and / or selectively span the nonvolatile memory page boundary Units. In various embodiments of packing data within the read units, the entry alone of the map is generally not sufficient to search for the location of the associated data (because the entry represents only the read units, (E.g., because the data is not indicative of location), other information in the referenced reading units (e.g., headers) is used to accurately locate the associated data.
몇몇 실시예들에서, 데이터는, 비휘발성 메모리의 복수의 다이(die)들에 걸쳐 스트라이핑(Striping)되는 방식으로, 비휘발성 메모리 페이지들에 기록된다. 복수의 다이들에 걸쳐 기록 데이터를 스트라이핑하는 것은, 유리하게도, 비휘발성 메모리 페이지를 스트라이프당 한번씩 소정 다이에 기록하는 것만으로 더 큰 기록 대역폭을 가능하게 한다. 복수의 다이들에 걸친 블록들의 스트라이프는, 다른 실시예들 및/또는 사용 시나리오들에서, RAID-유사 리던던시가 예를 들어 하나의 리던던트 다이(redundant die)를 사용하여 리던던시 블록 단위로 부가되기 때문에, 리던던시 블록으로 지칭된다. 각종 실시예들에서, 비휘발성 메모리의 몇몇 블록들은 기록시에 결함이 존재하여 스킵(skip)되며, 이에 따라 스트라이핑은 때때로, 그 다이 중의 하나가 스킵되는 "홀(holes)"을 갖는다. 이러한 실시예들에서, "순차적" 비휘발성 메모리 페이지들은 비휘발성 메모리 페이지가 기록되는 순서에 의해 결정되는 논리 순서로 순차적이다.In some embodiments, data is written to non-volatile memory pages in a manner that is striped across a plurality of dies of the non-volatile memory. Striping write data across a plurality of dies advantageously enables a larger write bandwidth by simply writing non-volatile memory pages to a given die once per stripe. The stripes of blocks across the plurality of dies can be used in other embodiments and / or in use scenarios, since RAID-like redundancy is added in redundancy block units using, for example, one redundant die, Referred to as a redundancy block. In various embodiments, some blocks of the non-volatile memory are skipped due to the presence of defects at the time of writing, and thus the striping sometimes has "holes" where one of the die is skipped. In these embodiments, the "sequential" nonvolatile memory pages are sequential in logical order, which is determined by the order in which the nonvolatile memory pages are written.
도 5를 참조하면, 헤더들 및 데이터를 포함하는 판독 유닛에 대한 일 실시예의 선택된 상세 도면이 도시되어 있다. 각종 실시예들에서, 도 4에 도시된 맵핑은 판독 유닛들 내의 가변-사이즈 데이터의 위치를 탐색하는 기준을 발생시킨다. 도 5에 도시된 바와 같이, 각 판독 유닛(예컨대, 판독 유닛들(500 및 510))은 0개 이상의 헤더들(501)의 세트를 가지며, 통상적으로 헤더들은, 가변-사이즈 데이터가 하나 이상의 판독 유닛들로 "타일링(tiled)"됨(예컨대, 낭비되는 공간 없이 조밀하게 패킹됨)에 따라 하드웨어에 의해 기록된다. 통상적으로, 헤더들은 비휘발성 메모리가 판독될 시에, 다른 하드웨어에 의해 해석되어서 가변-사이즈 데이터를 추출한다. 가변-사이즈 데이터는 매칭 논리 블록 어드레스(또는 라벨)를 가진 헤더들 중의 하나에서 각각의 오프셋들 및 길이로 위치되며, 데이터는 판독 유닛들(예컨대, "DATA, START" 및 "DATA, CONTINUE"로 예시된 가변-사이즈 데이터)을 임의적으로 및/또는 선택적으로 스패닝한다.Referring to FIG. 5, there is shown selected detailed views of an embodiment of a read unit that includes headers and data. In various embodiments, the mapping shown in Figure 4 generates a criterion for locating the variable-size data in the read units. As shown in Figure 5, each read unit (e.g., read
각종 실시예들에서, 또한 헤더들은 판독 유닛 내의 논리 블록 어드레스(또는 동등하게는, 맵핑 유닛 어드레스나 라벨)를 포함하는 리사이클링(예컨대, 가비지 컬렉션(garbage collection) 및/또는 웨어-레벨링(wear-leveling))의 일부로서 사용되며, 이들 모두는 판독 유닛 내의 가변-사이즈 데이터를 탐색을 가능하게 하고, 가변-사이즈 데이터가 계속 유효하거나 갱신 기록된 경우에는, 판독 유닛들 중의 특정의 것이 판독될 시점을 결정하는 방식을 제공한다(맵에서 논리 블록 어드레스 또는 라벨을 조회하고, 그 맵이 특정 판독 유닛의 물리적 어드레스를 계속 참조하고 있는지 또는 판독 유닛들 중의 다른 것을 참조하도록 업데이트되었는지를 결정하는 것에 의해). 따라서, 헤더들은, 판독 유닛들의 물리적 위치와 조합된 헤더들이, 맵 내의 것과 유사하되 물리적 위치로부터 논리 블록 어드레스(또는 라벨)로 연관되어 있는 정보를 갖는다는 점에서 "리버스 맵(reverse map)"을 형성한다고 한다.In various embodiments, the headers may also be recycled (e.g., garbage collection and / or wear-leveling), including logical block addresses (or equivalently, mapping unit addresses or labels) ), All of which enable the search of the variable-size data in the reading unit, and when the variable-size data is continuously valid or updated, the point in time when the specific one of the reading units is read (By querying the logical block address or label in the map and determining whether the map continues to reference the physical address of a particular read unit or whether it has been updated to refer to another of the read units). Thus, the headers are referred to as a " reverse map "in that the headers combined with the physical locations of the read units have information that is similar to that in the map but is associated with the logical block address (or label) .
몇몇 실시예들에서, 논리 블록 어드레스들(또는 라벨들)에 기초하여 판독 유닛들로부터 데이터를 추출하는 전용 하드웨어가 실행되어 랜덤 판독을 위한 고효율로 동작한다. 전용 하드웨어는 하나 이상의 판독 유닛들 내에 있는 헤더들을 파싱하여 소정의 논리 블록 어드레스(또는 라벨)를 가진 헤더들 중의 하나를 탐색하며, 이어서 그 각각의 길이 및 오프셋을 사용하여 연관된 가변-사이즈 데이터를 추출한다. 그러나, 하드웨어-기반 솔루션은 (실리콘 면적 및 전력)에 비용이 많이 든다. 순차적 성능이 랜덤 성능보다 더욱 중요한 로우-엔드 및/또는 모바일 환경에서는, 실리콘 면적을 줄여, 전력을 절약하고, 높은 순차적 스루풋 레이트(throughput rate)들을 달성하기 위해 가변-사이즈 플래시 변환 계층에 대한 변경들이 실행된다.In some embodiments, dedicated hardware is implemented that extracts data from the read units based on logical block addresses (or labels) and operates with high efficiency for random reading. Dedicated hardware parses headers in one or more read units to search for one of the headers with a given logical block address (or label), and then uses the respective length and offset to extract the associated variable-size data do. However, hardware-based solutions (silicon area and power) are costly. In a low-end and / or mobile environment where sequential performance is more important than random performance, changes to the variable-size flash translation layer to reduce silicon area, save power, and achieve high sequential throughput rates .
몇몇 실시예들에서, 순차적-판독-최적화된 가변-사이즈 플래시 변환 계층(예컨대, SRO-VFTL)은 데이터 내의 헤더들에 대한 임의의 갭(gap)들 없이 비휘발성 메모리 페이지들(또는, 몇몇 실시예들에서는, 기록 목적으로 하나의 유닛으로 취급되는 비휘발성 메모리 페이지들의 그룹)로, (밀집 패킹된) 데이터를 타일링한다 - 모든 헤더들은 비휘발성 메모리 페이지의 한 부분으로 그룹화됨. 다른 실시예들에서, 헤더들은 데이터에 액세스하기 위해 동적으로 사용되지 않으며, 리사이클링 및 복구를 위해(예컨대, 예상치 못한 전력 손실로부터의)서만 사용된다. 대신에, 맵의 엔트리들은 비휘발성 메모리 페이지들 내의 가변-사이즈 (예컨대, 압축된) 데이터를 탐색하는데 사용되는 완전한 정보를 포함한다. 헤더들 및 데이터를 비휘발성 메모리 페이지의 상이한 부분들로 분리시키는 것으로 인해, 헤더들만 포함하는 판독 유닛들, 헤더들 및 데이터의 혼합(그러나, 도 6에서와 같이, 비휘발성 메모리 페이지당 단 하나의 판독 유닛)을 포함하는 판독 유닛들, 및 데이터만을 포함하는 판독 유닛들이 발생된다.In some embodiments, the sequential-read-optimized variable-size flash translation layer (e.g., SRO-VFTL) may include non-volatile memory pages (or some implementations) without any gaps for headers in the data (In the example, a group of non-volatile memory pages that are treated as one unit for recording purposes) - all headers are grouped as part of a non-volatile memory page. In other embodiments, the headers are not used dynamically to access the data and are only used for recycling and recovery (e.g., from unexpected power loss). Instead, entries in the map contain complete information used to search for variable-sized (e.g., compressed) data in non-volatile memory pages. By separating the headers and data into different parts of the non-volatile memory page, a mixture of read units, headers and data, including only headers (however, only one Reading units), and reading units containing only data are generated.
저비용의 순차적 판독 스루풋으로 구성되었지만, 순차적-판독-최적화된-가변-사이즈 플래시 변환 계층은 초당 랜덤 판독 입/출력 동작들(예컨대, IOP들), 초당 랜덤 기록 입/출력 동작들, 및 순차적 기록 스루풋과 같은 다른 메트릭스에 대하여 비교적 잘 수행할 수 있다. 그러나, 각 판독 유닛의 헤더들과의 VFTL-스타일 데이터 타일링과 같은 기능들에 대한 하드웨어 보조들을 제거하는 것은, 제어 프로세서에게 더 큰 부담을 지우게 된다. 다르게는, 몇몇 실시예들에서, 순차적-판독-최적화된-가변-사이즈 플래시 변환 계층은 데이터 타일링, 데이터 추출, 또는 그 밖의 동작들에 대한 하드웨어 보조들을 사용한다.The flash-to-serial conversion read-write operations are performed at a rate of one or more times per second. The sequential-read-optimized-variable- It can perform relatively well for other metrics such as throughput. However, eliminating hardware aids for functions such as VTLL-style data tiling with the headers of each read unit places a greater burden on the control processor. Alternatively, in some embodiments, the sequential-read-optimized-variable-size flash translation layer uses hardware aids for data tiling, data extraction, or other operations.
도 6을 참조하면, SRO-VFTL 비휘발성 메모리 페이지에 대한 일 실시예의 도면이 도시되어 있다. 도 7을 참조하면, SRO-VFTL 비휘발성 메모리 페이지에 대한 다른 실시예의 도면이 도시되어 있다. 도 6과 도 7의 실시예들 간의 차이점은 이전의 비휘발성 메모리 페이지(640)로부터의 연속 데이터가 헤더들의 앞에 있는지 뒤에 있는지의 여부이다. 비휘발성 메모리 페이지 내의 데이터에 대한 다양한 실시예들 및 구성들이 고려된다.Referring to FIG. 6, a diagram of an embodiment of a SRO-VFTL non-volatile memory page is shown. Referring to FIG. 7, a diagram of another embodiment of an SRO-VFTL non-volatile memory page is shown. The difference between the embodiments of FIGS. 6 and 7 is whether continuous data from the previous
각종 실시예들에 따르면, 비휘발성 메모리 페이지는 다음 중의 하나 이상을 포함한다:According to various embodiments, the non-volatile memory page includes one or more of the following:
- 마스터 헤더(610), 임의적 및/또는 선택적으로는 리던던시 블록 헤더(620)(예컨대, 리던던시 블록에서 각 블록의 첫번째 페이지에 부가된 헤더), 및 0개 이상의 추가적인 패킹된 헤더들(630)을 포함하는, 헤더들. 각 비휘발성 메모리 페이지는 (헤더들과 연관된) 데이터가, 적어도 일 카운트 개수의 다음의 헤더들 및 비휘발성 메모리 페이지에서 시작하는 위치에 대한 포인터를 갖는다. 몇몇 실시예들에서, 헤더들은 바이트-정렬될 수 있으며, 각기 6 바이트(예컨대, B)만일 수 있다. 헤더들은 데이터 헤더들, 에포크(epoch) 헤더들 및 패딩(padding)을 포함할 수 있으며, 이에 한정되지 않는다. 데이터 헤더들은 맵핑 유닛 어드레스 및 길이를 이용한다. 모든 데이터는 연속적으로 패킹되기 때문에, 오프셋이 나타난다.- a
- 임의적 및/또는 선택적으로는, 이전의 비휘발성 메모리 페이지(맵핑 유닛의 가변-사이즈 데이터의 일부)(640)로부터의 연속 데이터.- optionally and / or alternatively, contiguous data from a previous non-volatile memory page (part of the variable-size data of the mapping unit) 640.
- 비휘발성 메모리 페이지에 채워지는 하나 이상의 맵핑 유닛들(650)의 패킹된(예컨대, 임의적 및/또는 선택적으로는 압축된) 데이터, 임의적 및/또는 선택적으로는 이것의 마지막이 후속의 비휘발성 메모리 페이지에서 계속된다.Packed (e.g., arbitrary and / or optionally compressed) data of one or
- (650에 포함된) 비휘발성 메모리 페이지의 끝 부분에서의 임의적 패딩.- random padding at the end of non-volatile memory pages (included in 650).
각종 실시예들에서, 고도로 압축되어 있는 경우(예컨대, 매우 많은 헤더들), 데이터는, 비휘발성 메모리 페이지의 끝 부분에서 패딩되는 것이 가능하더라도, 바이트-패킹된다(예컨대, 홀이 없음). 패딩은, 예를 들어, (i) 비휘발성 메모리 페이지에 부가되는 마지막 가변-사이즈 데이터 조각에 헤더의 사이즈보다 적게 사용된 바이트가 남아 있는 경우(이에 따라 새로운 헤더가, 다른 가변-사이즈 데이터 조각을 시작시키기 위해 부가될 수 없는 경우) 및 (ii) 임의적 및/또는 선택적으로는, 명시된 개수의 비휘발성 메모리 페이지당 헤더들이 초과된 경우(이에 따라 비휘발성 메모리 페이지들에 저장되는 맵핑 유닛들의 수가, 맵핑 유닛들의 데이터 사이즈가 아닌, 명시된 개수의 헤더들로 제한되는 경우)에 사용된다.In various embodiments, where highly compressed (e.g., very many headers), the data is byte-packed (e. G., No holes), although it is possible to be padded at the end of non-volatile memory pages. The padding may, for example, include: (i) if there is less than the size of the header used in the last variable-size data fragment being added to the non-volatile memory page (thereby causing the new header to be replaced by another variable- (Ii) optionally and / or alternatively, if the number of headers per a specified number of non-volatile memory pages is exceeded (thus the number of mapping units stored in non- Is limited to a specified number of headers rather than the data size of the mapping units).
몇몇 실시예들에서, 순차적-판독-최적화된-가변-사이즈 플래시 변환 계층을 이용한 복구 및/또는 리사이클링(예컨대, 가비지 컬렉션)은, 유리하게도 비-순차적-판독-최적화된-가변-사이즈 플래시 변환 계층에서와 같은 모든 판독 유닛이 아닌, 각각의 비휘발성 메모리 페이지들의 헤더 부분만을 판독 및/또는 오류 정정 및/또는 검사할 수 있다. 비휘발성 메모리 페이지의 데이터가 재기록될 수 있는 것으로 리사이클링이 결정한 경우, 해당 데이터가 또한 판독될 수 있으며, 오류 정정될 수도 있다. 몇몇 실시예들에서는, 리사이클링을 위해 전체 비휘발성 메모리 페이지가 판독되지만, 비휘발성 메모리 페이지 내의 일부 데이터가 리사이클링되어야 하는 것으로 결정될 때까지는 헤더 부분만이 오류 정정된다.In some embodiments, recovery and / or recycling (e.g., garbage collection) using a sequential-read-optimized-variable-size flash translation layer may advantageously be performed using a non-sequential-read- It is possible to read and / or error correct and / or check only the header portion of each non-volatile memory pages, rather than all read units as in the hierarchy. If the recycling determines that the data in the non-volatile memory page can be rewritten, the data may also be read and error corrected. In some embodiments, the entire non-volatile memory page is read for recycling, but only the header portion is error corrected until some data in the non-volatile memory page is determined to be recycled.
각종 실시예들에서, 비휘발성 메모리 페이지당 헤더들의 수는 모든 헤더들이 비휘발성 메모리로부터 판독되는 것을 보장하도록 판독될 수 있는 확실한 비휘발성 메모리 페이지당 판독 유닛들의 수로 제한된다. 도 6의 실시예에서는, 최대 개수의 헤더들을 포함하기에 충분한 개수의 판독 유닛들만이 판독된다. 도 7의 실시예에서는, 추가 개수의 판독 유닛들이 판독되어 이전의 비휘발성 메모리 페이지(예컨대, 연속 데이터(640))로부터 완료된 가장 큰 데이터 사이즈를 처리한다. 그러나, 도 7의 실시예는 연관된 맵 엔트리에 대한 각각의 오프셋과 길이, 및 이전의 비휘발성 메모리 페이지에서의 사용자(비-오류 정정 코드) 데이터의 바이트들의 수에 기초하여 완료된 데이터의 바이트들의 수가 결정가능함에 따라, 다수의 판독 유닛들이 연관된 맵 엔트리로부터 결정되는 이전의 비휘발성 메모리 페이지(예컨대, 연속 데이터(640))로부터 완료된 데이터에 액세스하는 것을 가능하게 한다. 또한, 완료된 데이터 이전의 헤더들만이 임의적 리던던시 블록 헤더(각 블록의 첫 번째 페이지와 같은, 명시된 비휘발성 메모리 페이지들에만 존재함) 및 마스터 헤더(각 비휘발성 메모리 페이지에 항시 존재함)이다. 도 6의 실시예에서, 비휘발성 메모리에 두 번 액세스할 필요없이 완료된 데이터를 판독하기 위해, 최대 개수의 헤더들이 존재하는 것으로(또는 전체 비휘발성 메모리 페이지가 판독되는 것으로) 가정된다.In various embodiments, the number of headers per non-volatile memory page is limited to the number of reliable nonvolatile memory pages per page that can be read to ensure that all headers are read from non-volatile memory. In the embodiment of FIG. 6, only a sufficient number of read units are read to contain the maximum number of headers. In the FIG. 7 embodiment, an additional number of read units are read and processed from the previous non-volatile memory page (e. G., Contiguous data 640) to the largest completed data size. However, the embodiment of FIG. 7 is based on the number of bytes of completed data based on the respective offset and length for the associated map entry and the number of bytes of user (non-error correcting code) data in the previous non-volatile memory page As it is determinable, it enables multiple read units to access the completed data from a previous non-volatile memory page (e.g., contiguous data 640) determined from the associated map entry. Also, only the headers before the completed data are arbitrary redundancy block headers (present in the specified nonvolatile memory pages, such as the first page of each block) and master headers (always present in each nonvolatile memory page). In the embodiment of FIG. 6, it is assumed that a maximum number of headers are present (or the entire non-volatile memory page is read) to read the completed data without having to access the non-volatile memory twice.
몇몇 실시예들에서, 순차적-판독-최적화된-가변-사이즈 플래시 변환 계층은 복수의 맵 엔트리들을 가진 단일-레벨 맵을 사용한다. 다른 실시예들에서, 순차적-판독-최적화된-가변-사이즈 플래시 변환 계층은 제2-레벨 맵(예컨대, SLM) 페이지들을 가리키는 제1-레벨 맵(예컨대, FLM)을 구비한 2-레벨 맵과 같은 멀티-레벨 맵을 사용하며, 여기서 각각의 제2-레벨 맵 페이지들은 복수의 리프(leaf)-레벨 맵 엔트리들을 포함한다. 다른 실시예들에서, 멀티-레벨 맵은 2개보다 많은 레벨들, 예컨대 3개의 레벨들을 갖는다. 몇몇 실시예들 및/또는 사용 시나리오들에서, 멀티-레벨 맵의 사용은 맵 중의 관련 부분(예컨대, 사용에)만이 로컬 메모리(예컨대, 솔리드-스테이트 드라이브 컨트롤러의 온-칩 SRAM, 또는 호스트의 로컬 DRAM)에 저장되는 것(예컨대, 캐싱되는 것)을 가능하게 하며, 이에 따라 맵의 유지 비용을 감소시킨다. 예를 들어, 일반적 사용 패턴들이 어느 한 시점에서 1 기가바이트(예컨대, GB)의 논리 블록 어드레스 공간 활성 상태를 갖는 경우, 그 활성 상태인 1 GB 부분의 논리 블록 어드레스 공간에 액세스하는데 충분한 맵의 부분만이, 비휘발성 메모리에 저장되는 것에 대한 고속 액세스를 위해 로컬로 저장된다. 논리 블록 어드레스 공간 중의 활성 상태인 부분 이외의 참조들은, 비휘발성 메모리로부터 하나 이상 레벨의 멀티-레벨 맵의 요청된 부분들을 페칭하며, 임의적 및/또는 선택적으로는 그 맵의 다른 로컬-저장된 부분들을 대체한다.In some embodiments, the sequential-read-optimized-variable-size flash translation layer uses a single-level map with a plurality of map entries. In other embodiments, the sequential-read-optimized-variable-size flash translation layer includes a two-level map (e.g., FLM) with a first-level map (e.g., FLM) Level map, wherein each second-level map page includes a plurality of leaf-level map entries. In other embodiments, the multi-level map has more than two levels, e.g., three levels. In some embodiments and / or use scenarios, the use of a multi-level map may be such that only relevant portions of the map (e.g., for use) are local memory (e.g., on-chip SRAM of a solid- (E. G., Cached) in the DRAM, thereby reducing the cost of maintaining the map. For example, if the common usage patterns have a logical block address space active of one gigabyte (e.g., GB) at any one time, then a portion of the map sufficient to access the logical block address space of the active 1 GB portion Are stored locally for fast access to being stored in non-volatile memory. References other than the active portion of the logical block address space may fetch the requested portions of the one or more levels of the multi-level map from the non-volatile memory and optionally and / or optionally other local- Replace.
각각의 리프-레벨 맵 엔트리들은 복수의 맵핑 유닛들 중의 하나의 어드레스(또는 라벨)과 연관된다(대응한다). 일 예에서, 논리 블록 어드레스는 예컨대, 논리 블록 어드레스 중의 0개 이상의 최하위 비트(least-significant bit)(예컨대, LSB)를 제거하고/하거나 정렬 목적으로 논리 블록 어드레스에 상수를 부가하는 것에 의해 맵핑 유닛 어드레스로 변환되며, 이 맵핑 유닛 어드레스이 맵 내에서 조회됨으로써 대응하는 맵의 엔트리를 결정하게 된다. 다른 예에서는, 해시 테이블(또는 다른 연관 데이터 구조)에서 라벨이 조회됨으로써 맵핑 유닛 어드레스로서 사용되는 고유 식별자를 결정하게 된다.Each leaf-level map entry is associated with (corresponding to) the address (or label) of one of the plurality of mapping units. In one example, the logical block address may be determined, for example, by removing zero or more least significant bits (e.g., LSBs) of the logical block address and / or by adding a constant to the logical block address for alignment purposes Address, and this mapping unit address is inquired in the map to determine an entry of the corresponding map. In another example, a label is looked up in a hash table (or other associated data structure) to determine the unique identifier to be used as the mapping unit address.
도 8을 참조하면, 각종 타입의 헤더들에 대한 일 실시예의 상세 도면이 도시되어 있다. 도 8의 예에서, 헤더들은 각기 6 바이트로 피팅(fiting)되도록 포맷되어 있다. 각종 실시예들에 따르면, 각종 타입의 헤더들은 다음들 중의 하나 이상의 헤더이다: 모두 동일한 사이즈를 가짐; 임의적 및/또는 선택적으로는 상이한 사이즈를 가짐; 각각의 헤더들은 헤더의 사이즈를 명시한 각각의 필드를 포함함; 상이한 비휘발성 메모리 페이지들에서는 사이즈가 달라짐; 및 전술한 것들의 임의의 조합.Referring to Figure 8, a detailed view of one embodiment of various types of headers is shown. In the example of FIG. 8, the headers are formatted to fit into 6 bytes each. According to various embodiments, headers of various types are one or more of the following: all of the same size; Optionally and / or alternatively of different sizes; Each header including a respective field specifying a size of a header; The size varies in different nonvolatile memory pages; And any combination of the foregoing.
각종 실시예들에 따르면, 비휘발성 메모리 페이지의 헤더들은 다음 중의 하나 이상을 포함한다:According to various embodiments, the headers of the non-volatile memory page include one or more of the following:
- 가변-사이즈 데이터 부분과 연관된 정보를 표시하는 데이터 헤더들(810). 데이터 헤더와 연관된 데이터는 데이터 헤더가 나나타나는 것과 동일한 비휘발성 메모리 페이지에서 시작된다. 다른 실시예들 및/또는 사용 시나리오들에서, 비휘발성 메모리 페이지가 데이터 헤더용의 잔존 공간만을 가진 경우에는, 모든 연관된 데이터가 후속의 비휘발성 메모리 페이지에서 시작된다.Data headers 810 that display information associated with the variable-size data portion. The data associated with the data header begins with the same nonvolatile memory page as the data header appears. In other embodiments and / or use scenarios, if the non-volatile memory page has only the remaining space for the data header, then all associated data is initiated in the subsequent non-volatile memory page.
- 맵 헤더들, 예를 들어 제2-레벨 맵(예컨대, SLM) 헤더들(820). 제2-레벨 맵 헤더들은 어떤 제2-레벨 맵 페이지가 저장되어 있는지를 나타내는(예컨대, 제2-레벨 맵 리사이클링 및/또는 복구를 위한) 제1-레벨 맵 인덱스(예컨대, FLMI)를 포함한다.Map headers, e.g., second-level map (e.g., SLM) headers 820; The second-level map headers include a first-level map index (e.g., FLMI) indicating which second-level map page is stored (e.g., for second-level map recycling and / or recovery) .
- 로그/체크포인트 헤더들(820). 로그/체크포인트 헤더들은 리사이클링, 복구, 오류 처리, 디버깅, 또는 그 밖의 특수한 상황들을 위해 사용되는 데이터를 나타낸다.Log / checkpoint headers 820. Log / checkpoint headers represent data used for recycling, recovery, error handling, debugging, or other special situations.
- 데이터를 대응하는 맵/체크포인트 정보와 연관시키는 복구의 부분으로서 사용되는, 에포크 헤더들(830). 통상적으로는, 비휘발성 메모리 페이지당 적어도 하나의 에포크 헤더가 존재한다.Epoch headers 830, which are used as part of recovery to associate data with corresponding map / checkpoint information. Typically, there is at least one epoch header per non-volatile memory page.
- 비휘발성 메모리 페이지에 있는 헤더들의 개수 및 비-헤더 데이터가 비휘발성 메모리 페이지 내에서 시작되는 위치에 관한 정보를 제공하도록 비휘발성 메모리 페이지당 한번 사용되는 마스터 헤더들(870). 도 6 및 도 7의 실시예들에서 도시된 바와 같은, 각종 기술들이 비-헤더 데이터의 시작을 결정한다.- Master headers 870 that are used once per non-volatile memory page to provide information about the number of headers in the non-volatile memory page and where the non-header data begins within the non-volatile memory page. Various techniques, as shown in the embodiments of Figures 6 and 7, determine the beginning of the non-header data.
- 소정의 비휘발성 메모리 페이지들, 예를 들어 리던던시 블록의 각 블록에 있는 첫 번째 비휘발성 메모리 페이지에서 사용되는 리던던시 블록 헤더들(880).Redundant block headers 880 used in the first non-volatile memory page in each non-volatile memory pages, e.g., each block of the redundancy block.
- 그 밖의 타입의 헤더들 (840), 예를 들어, 패딩 헤더들, 더 큰 길이를 지원하는 체크포인트 헤더들 등.Other types of headers 840, e.g., padding headers, checkpoint headers supporting a larger length, and so on.
몇몇 실시예들에서, 일부 헤더들은 헤더에 대한 복수의 하위타입들을 제공하는 TYPE 필드를 포함한다. 각종 실시예들에서, 일부 헤더들은 헤더와 연관된 데이터의 길이를 포함하는 LEN(길이) 필드를 포함한다. 각종 실시예들에서, LEN 필드 이외에, 또는 그에 부가하여, 일부 헤더들은 헤더와 연관된 데이터의 끝 부분에 대한 오프셋(비휘발성 메모리 페이지 내의)을 포함하는 OFFSET(오프셋) 필드(미도시)를 포함한다. (몇몇 실시예들에서, 가변-사이즈 데이터 조각들 중의 마지막 조각이 비휘발성 메모리 페이지를 스패닝하는 경우, OFFSET은 후속의 비휘발성 메모리 페이지 내의 오프셋 또는 후속의 비휘발성 메모리 페이지 내의 바이트들의 수이다.) 낭비되는 공간 없이 패킹된 가변-사이즈 데이터 조각들을 이용하여, 비휘발성 메모리 페이지 내의 각 가변-사이즈 데이터 조각들의 시작 위치 및 끝 위치가, 비휘발성 메모리 페이지 내의 첫 번째 가변-사이즈 데이터 조각들의 시작 위치(예컨대, 도 7에서와 같이 헤더들의 직후의), 및 LEN 또는 OFFSET 필드들에 의해 나타낼 수 있기 때문에, 일반적으로 LEN 필드 또는 OFFSET 필드 중의 하나 만이 실행된다.In some embodiments, some headers include a TYPE field that provides a plurality of subtypes for the header. In various embodiments, some headers include a LEN (length) field that includes the length of the data associated with the header. In various embodiments, in addition to or in addition to the LEN field, some headers include an OFFSET field (not shown) that contains an offset (in a non-volatile memory page) for the end of the data associated with the header . (In some embodiments, if the last piece of variable-size data pieces spans a non-volatile memory page, OFFSET is the offset in the subsequent non-volatile memory page or the number of bytes in the subsequent non-volatile memory page.) Size data pieces that are packed without wasted space, the starting and ending positions of each variable-size data piece in the non-volatile memory page are aligned with the starting position of the first variable-size data pieces in the non-volatile memory page (E.g., immediately after the headers as in FIG. 7), and LEN or OFFSET fields, generally only one of the LEN field or the OFFSET field is executed.
도 9를 참조하면, 맵 엔트리(900)에 대한 일 실시예의 선택된 상세 도면이 도시되어 있다. 각종 실시예들에 따르면, 맵 엔트리들은 다음 중의 하나 이상을 포함한다:Referring to FIG. 9, a selected detailed view of an embodiment of a
- 물리적 비휘발성 메모리 페이지 어드레스,- physical non-volatile memory page address,
- 가변-사이즈 데이터 아이템에 대한 비휘발성 메모리 페이지 내의 오프셋(예컨대, OFFSET),- Offset in the non-volatile memory page (e.g., OFFSET) for the variable-size data item,
- 가변-사이즈 데이터 아이템(예컨대, LEN_M128)의 길이, 및The length of the variable-size data item (e.g., LEN_M 128), and
- 그 밖의 제어 정보.- Other control information.
몇몇 실시예들에서, 길이는 예를 들어, 0의 값이 명시된 최소 길이에 대응하게 되도록 오프셋되는 것에 의해 인코딩된다. 예를 들어, 최소 길이가 128 바이트인 경우, LEN_M128 값 0은 128 바이트를 나타낸다. 다른 실시예들에서, 명시된 최소 길이 미만으로 압축되는 데이터는 적어도 명시된 최소 길이 사이즈까지 패딩된다.In some embodiments, the length is encoded by being offset, for example, such that a value of zero corresponds to the specified minimum length. For example, if the minimum length is 128 bytes, a LEN_M128 value of 0 represents 128 bytes. In other embodiments, data compressed below the specified minimum length is padded to at least the specified minimum length size.
각종 실시예들에서, SRO-VFTL 맵 엔트리들은 풀(full) 오프셋 및 대응하는 데이터의 바이트 길이를 저장하기 때문에, SRO-VFTL 맵 엔트리들은 VFTL 맵 엔트리들보다 크다. 이에 따라, 비휘발성 메모리에 저장시에 맵 엔트리들의 사이즈를 감소시키는 것은 유리할 수 있다. 통상적인 사용에 있어서, 흔히 데이터는 적어도 일부 입도(granularity) 및/또는 하나보다 많은 평균 개수의 순차적 맵핑 유닛들로, 순차적으로 판독 및 기록된다. 또한, 기록의 순차적 성질을 이용하는 맵 엔트리 압축 포맷은 높은 맵 압축율을 구현 및 생성함에 있어서 상대적으로 저가이다. 맵 엔트리들의 압축은, 비휘발성 메모리 페이지 바운더리가 크로스(crossing)될 때까지 동일한 비휘발성 페이지들로 들어가는 순차적-기록된 데이터에 의해 또한 도움을 받는다.In various embodiments, the SRO-VFTL map entries are larger than the VFTL map entries because the SRO-VFTL map entries store the full offset and the byte length of the corresponding data. Accordingly, it may be advantageous to reduce the size of the map entries upon storage in non-volatile memory. In normal use, often the data is sequentially read and written with at least some granularity and / or an average number of sequential mapping units of more than one. In addition, the map entry compression format that utilizes the sequential nature of recording is relatively inexpensive in implementing and creating a high map compression ratio. Compression of the map entries is also assisted by sequential-written data entering the same non-volatile pages until the non-volatile memory page boundary is crossed.
도 10을 참조하면, 각종 압축된 맵 엔트리들에 대한 일 실시예의 선택된 상세 도면이 도시되어 있다. 각종 맵 엔트리들은 압축되지 않은 부분(1010), 이전의 맵 엔트리와 동일한 비휘발성 메모리 페이지 어드레스를 갖는 부분(1020), 이전의 맵 엔트리와 동일한 비휘발성 메모리 페이지 어드레스를 가지면서 이전의 데이터가 끝난 오프셋에서 시작하는 부분(1030), 및 이전의 맵 엔트리와 동일한 비휘발성 메모리 페이지 어드레스를 가지면서 이전의 데이터가 끝난 오프셋에서 시작하며 또한 이전의 맵 엔트리와 동일한 길이를 갖는 부분(1040)을 포함한다.Referring to FIG. 10, there is shown selected detailed views of one embodiment of various compressed map entries. The various map entries include an uncompressed portion 1010, a portion 1020 having the same non-volatile memory page address as the previous map entry, a non-volatile memory page address identical to the previous map entry, And a portion 1040 having a same nonvolatile memory page address as the previous map entry and starting at the offset from the previous data and having the same length as the previous map entry.
멀티-레벨 맵을 갖는 몇몇 실시예들에서, 캐시(cache)는 하위-레벨(예를 들면, 리프-레벨) 맵 페이지들로 유지된다. 캐싱된 맵 페이지들 압축되지 않은 형태이며, 프로세서(예를 들면, 솔리드-스테이트 드라이브 컨트롤러의 호스트 또는 제어 프로세서)에 의한 신속한 액세스를 제공한다. 맵 페이지들이 캐시로 이동하는 경우(예를 들면, 비휘발성 메모리 또는 DRAM(dynamic random access memory)으로부터), 맵 페이지들은 압축되지 않는다. 맵 페이지들이 캐시로부터 플러싱(flushing)되는 경우(예를 들면, 수정으로 인해), 맵 페이지들은 저장소(예를 들면, 비휘발성 메모리)에 압축된다. 동적 랜덤 액세스 메모리에 맵 페이지들의 일부 또는 전부를 저장하는 것에 의해 레이턴시를 감소시키는데 DRAM이 사용되는 각종 실시예들에 따르면, 동적 랜덤 액세스 메모리 내의 맵 페이지들은 다음 중의 하나 이상으로 저장된다: 압축된 형태; 압축되지 않은 형태; 선택적으로 압축되거나 압축되지 않은 형태; 및 동적 랜덤 액세스 메모리 내의 맵 페이지들의 (가변-사이즈) 압축 버젼들에 액세스하는데 사용되는 인디렉션 테이블(indirection table)을 구비한 형태.In some embodiments with multi-level maps, the cache is maintained as low-level (e.g., leaf-level) map pages. Cached map pages are in an uncompressed form and provide rapid access by a processor (e.g., a host or control processor of a solid-state drive controller). When the map pages are moved to a cache (e.g., from non-volatile memory or dynamic random access memory (DRAM)), the map pages are not compressed. When map pages are flushed from the cache (e.g., due to modification), the map pages are compressed into a repository (e.g., non-volatile memory). According to various embodiments in which the 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: ; Uncompressed form; Optionally compressed or uncompressed form; And an indirection table used to access (variable-size) compressed versions of map pages in the dynamic random access memory.
몇몇 실시예들에서, 호스트 기록 커맨드의 호스트 기록 데이터는, 그 호스트 기록 데이터가 솔리드-스테이트 드라이브 컨트롤러에 도달하여 로컬(예를 들면, 온-칩) 메모리에 FIFO(first-in-first-out)-유사 방식으로 저장됨에 따라, 임의적 및/또는 선택적으로 압축된다. 예를 들어, 몇몇 실시예들에서, 호스트 기록 데이터는 펌웨어 데이터 구조들, 플래시 통계, 맵의 일부들(예를 들면, 하나 이상의 맵 페이지들을 담당하는 캐시), 리사이클링 판독 데이터를 포함하는 비휘발성 메모리로부터의 판독 데이터, 비휘발성 메모리에 기록될 데이터의 헤더들, 소프트웨어 코드, 펌웨어 코드, 및 그 밖의 사용들과 함께, 통합 버퍼(예컨대, 도 11a의 UBUF)에 저장된다. 각종 실시예들에서, 하나 이상의 전용 메모리들이 각종 솔리드-스테이트 드라이브의 로컬 저장 기준들을 위해 사용된다.In some embodiments, the host write data of the host write command is stored in a first-in-first-out (FIFO) memory in the local (e.g., on- As it is stored in a similar manner, it is compressed arbitrarily and / or selectively. For example, in some embodiments, the host write data may include firmware data structures, flash statistics, portions of the map (e.g., cache for one or more map pages), non-volatile memory (E.g., UBUF in FIG. 11A), along with read data from the nonvolatile memory, headers of data to be written to the nonvolatile memory, software code, firmware code, and other uses. In various embodiments, one or more dedicated memories are used for local storage criteria of various solid-state drives.
몇몇 실시예들에서, 호스트 기록 커맨드의 호스트 기록 데이터는 솔리드-스테이트 드라이브 컨트롤러로 전송되기 이전에 호스트에서 임의적 및/또는 선택적으로 압축된다. 예를 들어, 데이터베이스 레코드들이 입/출력 디바이스로 기록되기 이전에 호스트 데이터베이스에 의해 압축된다.In some embodiments, the host write data of the host write command is arbitrarily and / or optionally compressed at the host prior to being sent to the solid-state drive controller. For example, database records are compressed by the host database before being written to the input / output device.
각종 실시예들에서, 호스트로부터 도달한 각 데이터의 맵핑 유닛에 있어서, 솔리드-스테이트 드라이브의 제어 프로세서(예컨대, 도 11a의 CPU(central 프로세싱 유닛))에는 다음 중의 하나 이상이 통지된다: 각각의 맵핑 유닛 어드레스, 이 각각의 맵핑 유닛 어드레스와 연관된 데이터가 저장되는 각각의 로컬 메모리 어드레스, 및/또는 가변-사이즈 (예컨대, 압축된) 호스트 데이터의 각 맵핑-유닛에 대한 각각의 길이. 제어 프로세서는 비휘발성 메모리 페이지들의 기록 순서, 및 비휘발성 메모리 페이지들 각각에서 사용가능한 비-오류 정정 코딩 바이트의 전체 개수를 결정할 수 있다. 비휘발성 메모리 페이지들 중의 소정의 비휘발성 메모리 페이지에서 사용가능한 비-오류 정정 코딩 바이트의 전체 개수에 따라, 제어 프로세서는 그 소정의 비휘발성 메모리 페이지에 배치된 헤더들의 양 및 데이터의 양을 결정할 수 있다. 예를 들어, 제어 프로세서는 그 소정의 비휘발성 메모리 페이지에 대한 헤더들을 축적하며(또한 지금까지 사용된 헤더들의 바이트의 개수를 추적), 그 소정의 비휘발성 메모리 페이지가 완전히 채워질 때까지 한번에 하나씩 맵핑 유닛들 및 헤더들의 가변-사이즈 데이터를 그 소정의 비휘발성 메모리 페이지에 부가한다. 그 소정의 비휘발성 메모리 페이지가 완전히 채워진 경우, 그 소정의 비휘발성 메모리 페이지에 부가된 맵핑 유닛들 중의 마지막 유닛의 마지막 부분은 그 소정의 비휘발성 메모리 페이지에 정합되지 않을 수도 있고, 비휘발성 메모리 페이지들 중의 후속의 것(예컨대, 연속 데이터(640))의 데이터 완료 부분으로서 사용되며, 이에 따라 새로운 헤더들 및 데이터를 위한 후속의 비휘발성 메모리 페이지에서 사용가능한 비-오류 정정 코딩 바이트의 전체 개수를 감소시키게 된다.In various embodiments, in a mapping unit of each data arriving from a host, a control processor of the solid-state drive (e.g., CPU (central processing unit) in Figure 11A) is notified of one or more of the following: A unit address, a respective local memory address at which data associated with each of the mapping unit addresses is stored, and / or a respective length for each mapping unit of variable-size (e.g., compressed) host data. The control processor may determine the recording order of the non-volatile memory pages and the total number of non-error correcting coding bytes available in each of the non-volatile memory pages. Depending on the total number of non-errata correction coding bytes available in a given non-volatile memory page of the non-volatile memory pages, the control processor may determine the amount of headers and amount of data disposed in the given non-volatile memory page have. For example, the control processor accumulates headers for the given non-volatile memory page (and also tracks the number of bytes in the headers used so far), and maps them one at a time until the given non-volatile memory page is fully populated Size data of the units and headers to the predetermined non-volatile memory page. If the predetermined non-volatile memory page is completely filled, the last portion of the last of the mapping units added to the predetermined non-volatile memory page may not be matched to the predetermined non-volatile memory page, (E. G., Contiguous data 640) in the subsequent non-volatile memory page for new headers and data, thereby increasing the total number of non-error correcting coding bytes available in subsequent non-volatile memory pages .
몇몇 실시예들에서, 특정 시점에서, 0개 이상의 비휘발성 메모리 페이지들은 호스트 기록 데이터로 채워질 수 있으며, 0개 이상의 비휘발성 메모리 페이지들은 리사이클링된 데이터로 채워질 수 있다. 예를 들어, 적어도 2개의 밴드(band)들(예컨대, FIFO-유사한 일련의 리던던시 블록들)이 각기 채워지되, 하나의 밴드는 "핫(hot)" 데이터(예컨대, 호스트로부터 갓 나온)로 채워지고, 다른 밴드는 "콜드(cold)" 데이터(예컨대, 리사이클링된)로 채워질 수 있으며, 0개 이상의 비휘발성 메모리 페이지들 가치의 공간이 버퍼로부터 각 밴드로 할당된다. 이 예에 대해 계속 설명하면, 각종 실시예들에서, 호스트 기록 데이터는 임의적 및/또는 선택적으로 핫 밴드 또는 콜드 밴드로 향할 수 있으며, 리사이클링된 데이터는 임의적 및/또는 선택적으로 핫 밴드 또는 콜드 밴드로 향할 수 있다.In some embodiments, at a particular point in time, zero or more non-volatile memory pages may be populated with host write data, and zero or more non-volatile memory pages may be filled with recycled data. For example, at least two bands (e.g., a FIFO-like series of redundancy blocks) are each filled, one band is filled with "hot" data (eg, fresh from the host) Other bands may be filled with "cold" data (e.g., recycled), and the space of zero or more nonvolatile memory pages values is allocated to each band from the buffer. Continuing with this example, in various embodiments, the host write data may be directed arbitrarily and / or alternatively to a hot band or a cold band, and the recycled data may be randomly and / or alternatively switched to a hot band or a cold band You can head.
몇몇 실시예들에서, 제어 프로세서는 일련의 각각의 맵핑 유닛 어드레스들, 로컬 메모리 어드레스들 및 각각의 길이들을 다음 중의 하나 이상으로 변환할 수 있다: 비휘발성 메모리 페이지의 헤더 부분으로서 비휘발성 메모리 페이지에 기록될 일련의 헤더들; 비휘발성 메모리 페이지의 사용자 데이터 부분으로서 비휘발성 메모리 페이지에 기록될 로컬 메모리의 순차적 부분의 첫 번째 시작 어드레스 및 첫 번째 길이로서, 상기 비휘발성 메모리 페이지의 사용자 데이터 부분은 적어도 하나의 맵핑 유닛의 적어도 일부분을 포함함; 후속의 비휘발성 메모리 페이지의 사용자 데이터 완료 부분으로서 후속의 비휘발성 메모리 페이지에 기록될 로컬 메모리의 순차적 부분의 두 번째 시작 주소 및 두 번째 길이로서, 상기 사용자 데이터 완료 부분은 하나의 맵핑 유닛의 데이터의 부분 또는 비어 있는(empty) 부분을 포함함; 비휘발성 메모리 페이지에 기록될 0개 이상의 패딩 바이트의 개수, 여기서 상기 패딩 바이트는 예를 들어, 사용자 데이터 완료 부분이 비어있고 비휘발성 메모리 페이지가 채워져 있지 않은 경우에 사용됨. 유리하게는, 제어 프로세서는 재포맷(reformatting)에 의해 일련의 각각의 맵핑 유닛 어드레스들, 각각의 로컬 메모리 어드레스들 및 각각의 길이들을 일련의 헤더들로 간단히 변환하고, 작은 개수의 DMA(direct memory access) 커맨드들을 생성하여 비휘발성 메모리 페이지를 포함하는 부분들(이전의 비휘발성 메모리 페이지의 일련의 헤더들, 완료 부분, 사용자 데이터 부분, 및 임의의 패딩 바이트들)을 비휘발성 메모리로 전송할 수 있다.In some embodiments, the control processor may convert a series of respective mapping unit addresses, local memory addresses, and respective lengths into one or more of the following: a non-volatile memory page as a header portion of a non-volatile memory page A series of headers to be recorded; A first start address and a first length of a sequential portion of a local memory to be written to a non-volatile memory page as a user data portion of the non-volatile memory page, wherein the user data portion of the non-volatile memory page comprises at least a portion / RTI > A second start address and a second length of a sequential portion of a local memory to be written to a subsequent nonvolatile memory page as a user data completion portion of a subsequent nonvolatile memory page, Contains a portion or an empty portion; The number of zero or more padding bytes to be written to the non-volatile memory page, where the padding byte is used, for example, if the user data completion portion is empty and the non-volatile memory page is not filled. Advantageously, the control processor simply reformats each of the mapping unit addresses, each of the local memory addresses and their respective lengths into a series of headers by reformatting, and uses a small number of direct memory access commands to transfer portions of the nonvolatile memory page (a series of headers, a complete portion, a user data portion, and any padding bytes of a previous nonvolatile memory page) to non-volatile memory .
각종 실시예들에서는, 호스트 기록 데이터의 압축이 임의적 및/또는 선택적으로 가능하게 된다. 일 예에서, 호스트 기록 커맨드의 정보는 선택적으로 압축가능하다. 다른 예에서는, 호스트 기록 커맨드의 논리 블록 어드레스(또는 라벨)의 기능으로서 압축이 선택적으로 가능하게 된다. 또 다른 예에서, 호스트 기록 데이터의 압축이 호스트 기록 데이터의 사이즈를 감소시키지 않는 경우, 압축은 선택적으로 사용 불가능하게 된다. 압축이 사용 가능하지 않은 경우, 호스트 기록 데이터는 압축되지 않은 상태로 저장된다. 각종 실시예들에 따르면, 맵의 엔트리들은 다음 중의 하나 이상에 의해 해당 데이터가 압축되어 있는지 또는 압축되어 있지 않은지를 나타낸다: 맵의 각 엔트리에서의 각각의 비트; 및/또는 각 맵 엔트리에 저장되어 있는 길이의 값. 예를 들어, 맵핑 유닛들이 4 KB인 경우, 맵 엔트리의 4 KB 길이는 맵 엔트리의 연관된 데이터가 압축되어 있지 않다는 것을 나타내고, 4 KB 미만의 길이는 연관된 데이터가 압축되어 있다는 것을 나타낸다. 몇몇 실시예들 및/또는 사용 시나리오들에서, 저장되어 있는 임의적 및/또는 선택적으로는 압축되어 있는 호스트 기록 데이터의 버전과 연관된 헤더는, 그 저장된 호스트 기록 데이터가 압축되어 있는지의 여부를 명시한다.In various embodiments, compression of the host recording data is optionally and / or selectively enabled. In one example, the information of the host write command is selectively compressible. In another example, compression is selectively enabled as a function of the logical block address (or label) of the host write command. In another example, if compression of the host recording data does not reduce the size of the host recording data, compression is selectively disabled. If compression is not enabled, the host write data is stored uncompressed. According to various embodiments, entries in the map indicate whether the corresponding data is compressed or uncompressed by one or more of the following: each bit in each entry in the map; And / or a value of the length stored in each map entry. For example, if the mapping units are 4 KB, the 4 KB length of the map entry indicates that the associated data of the map entry is not compressed, and a length of less than 4 KB indicates that the associated data is compressed. In some embodiments and / or usage scenarios, the header associated with the version of the stored arbitrary and / or optionally compressed host write data specifies whether the stored host write data is compressed.
몇몇 실시예들에서는, 리사이클링될 리던던시 블록을 선택하고, 비휘발성 메모리 페이지들이 기록된 순서로 리던던시 블록의 비휘발성 메모리 페이지들을 판독하고, 비휘발성 메모리 페이지들의 헤더들을 포함하는 판독 유닛들만을 처리하고, 맵 내의 데이터 헤더인 각 헤더의 논리 블록 어드레스(또는 동등하게는, 맵핑 유닛 어드레스 또는 라벨)를 조회하여 데이터가 여전히 유효한지의 여부를 확인하고, 또한 데이터가 여전히 유효한 경우에는 적절한 새로운 헤더들 및 DMA 커맨드들을 구성하여 새로운 비휘발성 메모리 페이지의 일부로서 리사이클링될 데이터를 모으는 것에 의해, 데이터가 리사이클링된다. 그 후에, 이 새로운 비휘발성 메모리 페이지는 비휘발성 메모리에 기록된다.In some embodiments, the redundant blocks to be recycled are selected, the non-volatile memory pages are read in non-volatile memory pages of the redundancy block in the order in which they are written, only the reading units containing the headers of non-volatile memory pages, (Or equivalently, the mapping unit address or label) of the header of the data in the map to determine whether the data is still valid, and if appropriate, the new headers and DMA The data is recycled by constructing commands to collect data to be recycled as part of the new non-volatile memory page. Thereafter, this new nonvolatile memory page is written to the nonvolatile memory.
도 11a를 참조하면, 솔리드-스테이트 드라이브 컨트롤러(1100)에 대한 일 실시예의 선택된 상세 도면이 도시되어 있다. 몇몇 실시예들에서, 솔리드-스테이트 드라이브 컨트롤러(1100)는 예를 들어, 호스트와 협력하여 플래시 변환 계층을 실행시키는 것에 의해, 하나 이상의 플래시 변환 계층들 또는 그 일부들을 실행시킬 수 있다. 각종 실시예들에서, 컨트롤러(1100)는 하나 이상의 집적 회로들로서 구현될 수 있다.Referring to FIG. 11A, a selected detailed view of an embodiment of a solid-
도 11a에 도시된 바와 같이, 솔리드-스테이트 드라이브 컨트롤러(1100)의 SerDes(serializer-deserializer)와 같은 입/출력 수신기는 외부 인터페이스(1111)를 통해 호스트와 커플링된다. 호스트 인터페이스(예컨대, HIF)는, SerDes를 통해, 판독 및 기록 커맨드들과 같은 커맨드들을 수신하고, 기록 데이터를 수신하며, 판독 데이터를 송신한다. 커맨드들은 공유 메모리(예컨대, OpRAM)를 통해 중앙 처리 장치로 전송된다. 중앙 처리 장치는 커맨드들을 해석하고, 공유 메모리를 통해 솔리드-스테이트 드라이브 컨트롤러의 다른 부분들을 제어한다. 예를 들어, 중앙 처리 장치는 공유 메모리를 통하여 호스트 데이터 경로 수신 세그먼트(예컨대, HDRx) 또는 플래시 데이터 경로 송신 세그먼트(예컨대, FDTx)와 같은 각종 데이터 경로 송수신 유닛들에게 DMA 커맨드들을 전달하고 그들로부터의 응답들을 수신한다.11A, an input / output receiver, such as a serializer-deserializer (SerDes) of the solid-
호스트 인터페이스로부터의 기록 데이터는 호스트 데이터 경로 수신 세그먼트(예컨대, HDRx)를 통하여 통합 버퍼(예컨대, UBUF)로 전송된다. 각종 실시예들에서, 호스트 데이터 경로 수신 세그먼트는 호스트 기록 데이터를 임의적 및/또는 선택적으로 압축 및/또는 암호화하는 로직을 포함한다. 그 후에, 임의적 및/또는 선택적으로 압축 및/또는 암호화된 호스트 기록 데이터는, 플래시 데이터 경로 송신 세그먼트 및 일반 플래시 인터페이스(예컨대, GAFI)를 통해, 통합 버퍼로부터 비휘발성 메모리로 전송된다. 각종 실시예들에서, 플래시 데이터 경로 송신 세그먼트는 암호화 및/또는 스크램블링 및/또는 오류 정정 인코딩을 수행하는 로직을 포함한다. 호스트 판독 커맨드들에 대한 응답으로, 일반 플래시 인터페이스를 통해 데이터가 비휘발성 메모리로부터 판독되어서, 플래시 데이터 경로 수신 세그먼트(예컨대, FDRx)를 통해 통합 버퍼로 전송된다. 각종 실시예들에서, 플래시 데이터 경로 수신 세그먼트는 오류 정정 디코딩 및/또는 복호화 및/또는 디-스크램블링을 포함한다. 다른 실시예들에서는, 별개의 오류 정정 디코더(예컨대, LDPC 코드들을 구현하는 LDPC-D)가 플래시 데이터 경로 수신 세그먼트에 의해서 통합 버퍼에 저장되어 있는 "로우(raw)" 데이터에 대하여 동작할 수 있다. 그 후에, 통합 버퍼 내의 디코딩된 판독 데이터는 호스트 데이터 경로 송신 세그먼트(예컨대, HDTx)를 통하여 호스트 인터페이스로 전송된다. 각종 실시예들에서, 호스트 데이터 경로 송신 세그먼트는 디코딩된 판독 데이터를 임의적 및/또는 선택적 복호화 및/또는 압축 해제하는 로직을 포함한다. 몇몇 실시예들에서는, RAID-유사한 연판정(soft-decision) 처리 유닛(예컨대, RASP)이 인에이블되어, RAID-유사 리던던시를 생성하여 비휘발성 메모리에 저장되어 있는 호스트 기록 데이터 및/또는 시스템 데이터를 추가로 보호하고/하거나 LDPC-D과 사용을 위한 연판정 처리 동작들을 수행한다.The write data from the host interface is transferred to the unified buffer (e.g., UBUF) via the host data path receive segment (e.g., HDRx). In various embodiments, the host data path receive segment includes logic to arbitrarily and / or selectively compress and / or encrypt host write data. Thereafter, the arbitrary and / or optionally compressed and / or encrypted host write data is transferred from the integrated buffer to the nonvolatile memory via the flash data path transmit segment and the generic flash interface (e.g., GAFI). In various embodiments, the flash data path transmission segment includes logic to perform encryption and / or scrambling and / or error correction encoding. In response to host read commands, data is read from the non-volatile memory via the generic flash interface and transferred to the aggregate buffer via the flash data path receive segment (e.g., FDRx). In various embodiments, the flash data path receive segment includes error correction decoding and / or decoding and / or descrambling. In other embodiments, a separate error correction decoder (e.g., LDPC-D implementing LDPC codes) may operate on "raw" data stored in the aggregate buffer by the flash data path receive segment . Thereafter, the decoded read data in the unified buffer is transferred to the host interface via the host data path transmit segment (e.g., HDTx). In various embodiments, the host data path transmission segment includes logic to arbitrarily and / or selectively decode and / or decompress the decoded read data. In some embodiments, a RAID-like soft-decision processing unit (e.g., RASP) is enabled to generate RAID-like redundancy and to generate host write data and / or system data And / or performs soft decision processing operations for use with LDPC-D.
각종 실시예들에 따르면, 솔리드-스테이트 드라이브 컨트롤러는 하나 이상의 플래시 변환 계층들을 실행하지 않거나 그것들의 일부, 전부, 또는 부분들을 실행시킬 수 있다. 일 예에서, 플래시 변환 계층의 상위-레벨 맵핑 부분이 호스트에서 수행되며, 플래시 변환 계층의 하위-레벨 맵핑 부분은 솔리드-스테이트 드라이브 컨트롤러에서 수행된다. 다른 예에서, 솔리드-스테이트 드라이브 컨트롤러는 판독 유닛 어드레스들 및 스팬들과 같은 추상적 물리 유닛 어드레스들을 호스트와 송수신하며, 호스트는 이 추상적 물리 유닛 어드레스들에 대하여 논리 블록 어드레스들(또는 라벨들)을 맵핑한다. 솔리드-스테이트 드라이브 컨트롤러는 헤더에 저장되어 있는 논리 블록 어드레스(또는 라벨)와 같은 특정 데이터의 식별자를 통해, 추상적 물리 유닛 어드레스들과 연관된 특정 데이터의 위치를 탐색할 수 있다. 또 다른 예에서, 논리 블록 어드레스(또는 라벨)의 호스트에서의 맵핑은, 비휘발성 메모리 페이지 어드레스, 비휘발성 메모리 페이지 내의 오프셋, 및 바이트 길이를 생성한다. 솔리드-스테이트 드라이브 컨트롤러는 비휘발성 메모리에 액세스하여 하나 이상의 비휘발성 메모리 페이지들 내의 특정 데이터를 탐색할 판독 유닛들의 개수를 결정할 수 있다. 유리하게는, 이 예들의 하나 이상에서는, 솔리드-스테이트 드라이브 컨트롤러에 의해 오류 정정 코딩의 세부사항들(예컨대, 비휘발성 메모리 페이지당 사용자 데이터 바이트들의 개수 또는 판독 유닛들의 사이즈)가 유지되며, 이에 따라 호스트에 대한 오버헤드(overhead)를 감소시킨다.According to various embodiments, the solid-state drive controller may not execute one or more flash translation layers, or may execute some, all, or portions thereof. In one example, the high-level mapping portion of the flash translation layer is performed at the host and the low-level mapping portion of the flash translation layer is performed at the solid-state drive controller. In another example, the solid-state drive controller sends and receives abstract physical unit addresses, such as read unit addresses and spans, to and from the host, which maps logical block addresses (or labels) to these abstract physical unit addresses do. The solid-state drive controller can search for the location of specific data associated with abstract physical unit addresses, through identifiers of specific data, such as logical block addresses (or labels), stored in the headers. In another example, the mapping of the logical block address (or label) at the host generates a non-volatile memory page address, an offset in the non-volatile memory page, and a byte length. The solid-state drive controller may access non-volatile memory to determine the number of read units to search for specific data in one or more non-volatile memory pages. Advantageously, in one or more of these examples, details of the error correction coding (e.g., the number of user data bytes per non-volatile memory page or the size of the read units) are maintained by the solid-state drive controller, Thereby reducing the overhead for the host.
도 11b를 참조하면, 데이터 경로 세그먼트에 대한 일 실시예의 선택된 상세 도면이 도시되어 있다. 데이터 경로 세그먼트(1190)는, 도 11a의 호스트 데이터 경로 수신 세그먼트 또는 플래시 데이터 경로 송신 세그먼트를 예시하는 것일 수 있다. 데이터 경로 세그먼트(1190)는, 판독 시퀀서(read sequencer)(1130), 기록 시퀀서(write sequencer)(1140), 및 0개 이상의 데이터 경로 유닛들(예컨대, DPU들)을 포함한다. 도 11b는 2개의 데이터 경로 유닛들(1150-1 및 1150-2)을 가진 예를 도시한다.Referring to FIG. 11B, a selected detailed view of an embodiment of a data path segment is shown. The data path segment 1190 may be one that illustrates the host data path receive segment or the flash data path transmit segment of FIG. 11A. The data path segment 1190 includes a
판독 시퀀서(1130)는 OpRAM(도 11a 참조)에 커플링되어 판독/액세스될 데이터를 명시하는 제어 정보를 수신한다. 예를 들어, 이 정보는 통합 버퍼 내의 주소 및/또는 길이이거나 호스트 인터페이스 또는 일반 플래시 인터페이스에 대한 커맨드일 수 있으며, 그 데이터와 혼합될 커맨드들을 명시할 수 있다. 또한, 판독 시퀀서(1130)는 판독기(1110)에 커플링되어 예를 들어 UBUF, 호스트 인터페이스, 또는 일반 플래시 인터페이스로부터의 데이터를 판독/액세스한다. 판독 시퀀서(1130)는 OpRAM로부터 수신되는 요청들에 따라, 인터리빙된 스트림의 판독 데이터 및 커맨드들을, 0개 이상의 데이터 경로 유닛들(1150-1 및 1150-2) 및 기록 시퀀서(1140)로 전송할 수 있다.The
기록 시퀀서(1140)는 판독 시퀀서(1130)로부터 송신되는 인터리빙된 스트림의 데이터 및 커맨드들을 수신할 수 있다. 기록 시퀀서(1140)는 기록기(1120)에 커플링되어 UBUF, 호스트 인터페이스, 또는 일반 플래시 인터페이스와 같은 데이터를 기록할 수 있다. 이 데이터는 기록 시퀀서(1140)에 의해 수신되는 데이터 스트림 내의 커맨드들에 따라(예를 들면, 어드레스 및/또는 길이를 명시한 커맨드들에 의해) 기록된다. 또한, 기록 시퀀서(1140)는 OpRAM(도 11a 참조)에 커플링되어, 수신된 커맨드들에 따라서, 기록된 데이터에 관한 상태 정보를 전송한다. 예를 들어, 상태 정보는 데이터 스트림의 명시된 부분(예컨대, 하나의 4 KB 맵핑 유닛)의 기록 완료를 나타내도록 OpRAM에 기록된다.The
데이터 경로 유닛들(1150-1 및 1150-2)은 판독 시퀀서(1130)와 기록 시퀀서(1140)를 순회하면서 데이터를 변형시킬 수 있다. 데이터 스트림 내의 판독 시퀀서(1130)에 의해 생성된 커맨드들은 데이터 경로 유닛들(1150-1 및 1150-2) 또는 기록 시퀀서(1140) 중의 하나에 의해 수신되도록 임의적 및/또는 선택적으로 타겟팅(targeting)된다. 데이터 경로 유닛들(1150-1 및 1150-2)의 예들은 다음을 포함한다:The data path units 1150-1 and 1150-2 can transform the data while traversing the
- 암호화를 위해 사용될 설트(salt)(초기화 벡터)를 포함하는 커맨드를 수신하며, 그 설트에 따라 다음의 데이터를 암호화하는 암호화 유닛. 다른 실시예들에서, 이 커맨드는 암호화 키의 스펙(specification)을 또한 포함한다.- a cryptographic unit which receives a command containing a salt (initialization vector) to be used for encryption, and encrypts the next data according to the cull. In other embodiments, the command also includes a specification of an encryption key.
- 복호화를 위해 사용될 설트(초기화 벡터)를 포함하는 커맨드를 수신하며, 그 설트에 따라 다음의 데이터를 복호화하는 복호화 유닛. 다른 실시예들에서, 이 커맨드는 복호화 키의 스펙을 또한 포함한다.- a decoding unit which receives a command containing a syll (initialization vector) to be used for decoding, and decodes the next data according to the syllable. In other embodiments, this command also includes the specification of the decryption key.
- 압축 유닛(예컨대, 맵핑 유닛) 바운더리의 시작을 나타내는 커맨드를 수신하여, 다음의 데이터를 압축하는 압축 유닛. 각종 실시예들에서, 이 커맨드는 하나의 유닛으로 압축될 데이터의 양, 압축 타입, 압축을 위한 최대 런-타임, 및 그 밖의 압축 제어 사항들 중의 하나 이상을 또한 포함한다.A compression unit (e. G., A mapping unit) for receiving a command indicating the beginning of a boundary and compressing the next data. In various embodiments, the command also includes one or more of the amount of data to be compressed into one unit, the compression type, the maximum run-time for compression, and other compression controls.
- 압축 유닛 바운더리의 시작을 나타내는 커맨드를 수신하여, 다음의 데이터를 압축 해제하는 압축 해제 유닛. 각종 실시예들에서, 이 커맨드는 하나의 유닛으로 압축 해제될 데이터의 양, 예상되는 압축 해제될 데이터의 사이즈, 압축 해제 타입, 압축 해제를 위한 최대 런-타임, 및 그 밖의 압축 해제 제어 사항들 중의 하나 이상을 또한 포함한다.- a decompression unit which receives a command indicating the beginning of the compression unit boundary and decompresses the next data. In various embodiments, this command may be used to determine the amount of data to be decompressed into one unit, the size of the data to be decompressed, the decompression type, the maximum runtime for decompression, and other decompression controls ≪ / RTI >
- 사이클릭 리던던시 체크 값을 계산하는데 사용될 설트(초기화 벡터)를 포함하는 커맨드를 수신하며, 그 설트에 따라 다음의 데이터에 대한 사이클릭 리던던시 체크 값을 계산하는 사이클릭 리던던시 체크 유닛(cyclic redundancy check)(예컨대, CRC). 다른 실시예들에서, 이 커맨드는 임의적 및/또는 선택적으로 사이클릭 리던던시 체크 유닛이 이전에 계산된 사이클릭 리던던시 체크 값을, 사이클릭 리던던시 체크 값으로 커버되어 있는 이전에 수신된 데이터에 첨부하는 것을 가능하게 한다.A cyclic redundancy check unit for receiving a command including a syllable (initialization vector) to be used for calculating a cyclic redundancy check value, and calculating a cyclic redundancy check value for the next data according to the syllable, (E.g., CRC). In other embodiments, the command may arbitrarily and / or selectively cause the cyclic redundancy check unit to append the previously calculated cyclic redundancy check value to the previously received data that is covered by the cyclic redundancy check value .
- 코드 레이트를 포함하는 커맨드를 수신하여, 해당 코드 레이트의 오류 정정 코드에 따라 다음의 데이터를 인코딩 및 디코딩하는 오류 정정 인코딩 및/또는 디코딩 유닛. 다른 실시예들에서, 이 커맨드는 임의적 및/또는 선택적으로 연판정 처리 정보, 사용할 최대 반복 횟수, 및 그 밖의 인코더 및/또는 디코더 제어 정보와 같은 추가 제어 사항들을 포함한다.An error correction encoding and / or decoding unit for receiving a command including a code rate and encoding and decoding the next data according to the error correction code of the code rate. In other embodiments, the command may optionally and / or optionally include additional control such as soft decision processing information, the maximum number of iterations to use, and other encoder and / or decoder control information.
예시적 동작에 있어서, 호스트로부터 기록 커맨드를 수신한 것에 대한 응답으로, 호스트 데이터 경로 수신 세그먼트의 판독 시퀀스에 대한 커맨드 리스트가 중앙 처리 장치에 의해 구축되며, 이 커맨드 리스트에 따라, 호스트 데이터 경로 수신 세그먼트는 호스트 인터페이스를 통해서 호스트에서 통합 버퍼로 기록 커맨드의 기록 데이터를 송신할 수 있다. 호스트 데이터 경로 수신 세그먼트 내의 데이터 경로 유닛은 (압축된) 기록 데이터가 통합 버퍼에 기록되기 이전에 기록 데이터를 압축할 수 있다. 복수의 (압축된) 맵핑 유닛들이 낭비되는 공간없이 통합 버퍼 내에서 타이트하게 패킹될 수 있다. 중앙 처리 장치에게는, OpRAM에 기록된 상태 정보에 의해서(호스트 데이터 경로 수신 세그먼트의 기록 시퀀서를 통해), (압축된) 맵핑 유닛들 각각의 위치 및 사이즈가 통지된다. 중앙 처리 장치는 이 상태 정보에 따라 헤더들을 구성할 수 있으며, 또한 하나의 비휘발성 메모리 페이지를 채울 헤더들 및 (압축된) 맵핑 유닛들의 양을 결정할 수 있다. 또한, 중앙 처리 장치는 플래시 데이터 경로 송신 세그먼트의 판독 시퀀스에 대한 커맨드 리스트를 구축하여 헤더들 및 데이터의 비휘발성 메모리 페이지를 비휘발성 메모리로 송신할 수 있다. 플래시 데이터 경로 송신 세그먼트 내의 데이터 경로 유닛은, 비휘발성 메모리에 송신되어 복수의 판독 유닛들 각각에 대하여 오류 정정 코딩 보호를 위한 추가 바이트들을 부가하는 헤더들 및 데이터를 인코딩할 수 있다. 플래시 데이터 경로 송신 세그먼트의 기록 시퀀서로부터 NVM 페이지 기록이 완료되었다는 상태를 수신시에, (압축된) 맵핑 유닛들에 의해서 통합 버퍼에 사용될 공간은 복구(재사용)될 수 있다.In an exemplary operation, in response to receiving a write command from a host, a command list for a read sequence of a host data path receive segment is constructed by the central processing unit, and in accordance with the command list, Can transmit the write data of the write command from the host to the integrated buffer through the host interface. The data path unit in the host data path receive segment may compress the write data before the (compressed) write data is written to the unified buffer. Multiple (compressed) mapping units can be tightly packed in an integrated buffer without wasted space. The central processing unit is informed of the location and size of each (compressed) mapping unit by status information recorded in the OpRAM (via the write sequencer of the host data path receive segment). The central processing unit can configure the headers according to this status information, and can also determine the amount of headers and (compressed) mapping units to fill one non-volatile memory page. The central processing unit may also build a list of commands for the read sequence of the flash data path send segment to send non-volatile memory pages of headers and data to non-volatile memory. The data path unit in the flash data path transmit segment may encode headers and data that are sent to the non-volatile memory and that add additional bytes for error correction coding protection to each of the plurality of read units. Upon receiving a status that the NVM page writing has been completed from the write sequencer of the flash data path send segment, the space used for the unified buffer by the (compressed) mapping units may be recovered (reused).
다른 예시적 동작에서, 호스트로부터 판독 커맨드를 수신한 것에 대한 응답으로, 플래시 데이터 경로 수신 세그먼트의 판독 시퀀스에 대한 커맨드 리스트가 중앙 처리 장치에 의해 구성되며, 커맨드 리스트에 따라, 플래시 데이터 경로 수신 세그먼트가 일반 플래시 인터페이스를 통하여 비휘발성 메모리에서 통합 버퍼로 판독되는 하나 이상의 판독 유닛들을 수신할 수 있다. 몇몇 실시예들에서, 플래시 데이터 경로 수신 세그먼트 내의 데이터 경로 유닛은, 각 판독 유닛과의 오류 정정 코딩 보호를 위한 추가 바이트들을 사용하여 비휘발성 메모리로 전송되는 데이터를 디코딩할 수 있다. 다른 실시예들에서, 오류 정정은 별도의 데이터 경로 세그먼트(예컨대, 도 11a의 LDPC-D)를 통해 일어난다. 중앙 처리 장치에게는, 플래시 데이터 경로 수신 세그먼트의 기록 시퀀서로부터의 상태 수신에 의하여, 통합 버퍼에의 (정정된) 데이터 수신이 통지되며, 또는 다른 실시예에서는 LDPC-D 데이터 경로 세그먼트의 기록 시퀀서로부터의 상태 수신에 의하여, 통합 버퍼에의 (정정된) 데이터 수신이 통지된다. 또한, 중앙 처리 장치는 호스트 데이터 경로 송신 세그먼트에 대한 커맨드 리스트를 구축하여 호스트 인터페이스를 통해 통합 버퍼에서 호스트로 정정된 데이터의 적어도 일부분을 송신할 수 있다. 호스트 데이터 경로 송신 세그먼트 내의 데이터 경로 유닛은 호스트로 송신하기 이전에 정정된 데이터를 압축 해제할 수 있다. 호스트 데이터 경로 송신 세그먼트의 기록 시퀀서로부터, 정정된 데이터가 성공적으로 송신되었다는 상태의 수신시에, 그 정정 데이터에 의해 통합 버퍼에서 사용되는 공간은 복구(재사용)가능하다.In another exemplary operation, in response to receiving a read command from the host, a command list for the read sequence of the flash data path receive segment is configured by the central processing unit, and according to the command list, the flash data path receive segment One or more read units that are read from the non-volatile memory to the integrated buffer via the generic flash interface. In some embodiments, the data path unit in the flash data path receive segment may decode data that is transferred to the non-volatile memory using additional bytes for error correction coding protection with each read unit. In other embodiments, error correction occurs via a separate data path segment (e.g., LDPC-D in FIG. 11A). The central processing unit is informed of the (corrected) data reception to the unified buffer by receiving status from the write sequencer of the flash data path receive segment, or in other embodiments, from the write sequencer of the LDPC-D data path segment. Receiving (corrected) data to the unified buffer is signaled by status reception. The central processing unit may also construct a command list for the host data path send segment to transmit at least a portion of the corrected data from the aggregation buffer to the host via the host interface. The data path unit in the host data path send segment may decompress the corrected data prior to transmission to the host. From the write sequencer of the host data path send segment, upon receipt of a status that the corrected data was successfully transmitted, the space used by the correction data in the aggregate buffer is recoverable (reusable).
도 11c를 참조하면, 본 발명의 실시예에 따른 시스템의 각종 실시예들에 대해 선택된 상세 도면이 도시되어 있다. 일반적으로 이 실시예들은 도 11a의 솔리드-스테이트 드라이브 컨트롤러(1100)에 대한 하나 이상의 예들을 포함한다. 일반적으로, 몇몇의 솔리드-스테이트 드라이브들(1101a-1101n)은 각기 디바이스 인터페이스들(1190a-1190n)을 통해 비휘발성 메모리들(1199a-1199n)에 커플링되는 솔리드-스테이트 드라이브 컨트롤러들(1100a-1100n)을 포함한다. 본 도면은 다음의 실시예들에 대한 각종 클래스들을 도시한다: 호스트(1102)에 다이렉트로 커플링되는 단일의 솔리드-스테이트 드라이브, 각각의 외부 인터페이스들(1111a-1111n)을 통해 호스트(1102)에 그 각각이 다이렉트로 커플링되는 복수의 솔리드-스테이트 드라이브들, 및 각종 인터커넥션 요소들을 통해 호스트(1102)에 다이렉트로 커플링되는 하나 이상의 솔리드-스테이트 드라이브들.Referring to FIG. 11C, selected detail views are shown for various embodiments of a system according to an embodiment of the present invention. These embodiments generally include one or more examples of the solid-
호스트에 다이렉트로 커플링되는 단일의 솔리드-스테이트 드라이브의 예시적 실시예로서, 일 예인 솔리드-스테이트 드라이브(1101a)는 외부 인터페이스(1111a)를 통해 호스트(1102)에 다이렉트로 커플링된다(예컨대, 스위치/패브릭/중간 컨트롤러(1103)가 생략되거나, 우회되거나, 통과된다). 각각의 외부 인터페이스들을 통해 그 각각이 호스트에 다이렉트로 커플링되는 복수의 솔리드-스테이트 드라이브들의 예시적 실시예로서, 각각의 복수 예들인 솔리드-스테이트 드라이브들(1101a-1101n)은 각각의 예인 외부 인터페이스들(1111a-1111n)을 통해 각기 호스트(1102)에 다이렉트로 커플링된다(예컨대, 스위치/패브릭/중간 컨트롤러(1103)가 생략되거나, 바이패스되거나, 패스 스루된다). 각종 인터커넥션 요소들을 통해 호스트에 간접적으로 커플링되는 하나 이상의 솔리드-스테이트 드라이브들의 예시적 실시예로서, 각각의 하나 이상의 예들인 솔리드-스테이트 드라이브(1101)는 각기 호스트(1102)에 간접적으로 커플링된다. 각각의 간접 커플링은 각각의 예인 스위치/패브릭/중간 컨트롤러(1103)에 커플링된 외부 인터페이스들(1111a-1111n) 및 호스트(1102)에 커플링된 중간 인터페이스(1104)를 통해 이루어진다.As an example embodiment of a single solid-state drive that is directly coupled to a host, a solid-
또한, 스위치/패브릭/중간 컨트롤러(1103)를 포함하는 몇몇 실시예들은, 메모리 인터페이스(1180)를 통해 커플링되며, 솔리드-스테이트 드라이브들(1101a-1101n) 및/또는 호스트(102)에 의해 액세스 가능한 카드 메모리(1112C)를 포함한다. 각종 실시예들에서, 하나 이상의 솔리드-스테이트 드라이브들(1101a-1101n), 스위치/패브릭/중간 컨트롤러(1103), 및/또는 카드 메모리(1112C)는 물리적 식별 가능 모듈, 카드, 또는 플로그 가능 요소(예컨대, 입/출력 카드(1116))에 포함되어 있다. 몇몇 실시예들에서, 솔리드-스테이트 드라이브(1101a-1101n)(또는 그 변형들)은 호스트(1102)로서 동작하는 이니시에이터(initiator)에 커플링된 SAS(serial attached SCSI) 드라이브 또는 SATA(Serial Advanced Technology Attachment) 드라이브에 대응한다.Some embodiments, including switch / fabric /
호스트(1102)는 OS(operating system)(1105), 드라이버(1107), 애플리케이션(1109), 및 멀티-디바이스 관리 소프트웨어(1114)의 각종 조합들과 같은 호스트 소프트웨어(1115)의 각종 요소들을 실행할 수 있다. 점선 화살표(1107D)는 호스트 소프트웨어와 입/출력 디바이스 간의 양방향 통신을 나타낸다(예컨대, 드라이버(1107)를 통한 솔리드-스테이트 드라이브들(1101a-1101n)의 하나 이상의 인스턴스들과 하나 이상의 오퍼레이팅 시스템(1105)과의 데이터 송/수신 및 드라이버(1107)를 통하거나, (예컨대, PCIe) VF(virtual function)로서 다이렉트로 애플리케이션(1109)과 데이터 송/수신).
몇몇 실시예들 및/또는 사용 시나리오들에서, 호스트 소프트웨어(1115)는 솔리드-스테이트 드라이브들(1101a-1101n)에 사용되는 플래시 변환 계층의 일부, 전부, 또는 부분들을 포함한다. 일 예에서, 각종 실시예들에서, 드라이버(1107)는 솔리드-스테이트 드라이브들(1101a-1101n)에 사용되는 플래시 변환 계층들의 적어도 일부분을 실행시킨다. 다른 예에서, 각종 실시예들에서, 멀티-디바이스 관리 소프트웨어(1114)는 솔리드-스테이트 드라이브들(1101a-1101n)에 사용되는 플래시 변환 계층들의 적어도 일부분을 실행시킨다.In some embodiments and / or usage scenarios, the
오퍼레이팅 시스템(1105)은 솔리드-스테이트 드라이브들(1101a-1101n)과 인터페이싱하는 드라이버들(드라이버(1107)에 의해 개념적으로 도시됨)을 포함하고/하거나 그것들과 함께 동작할 수 있다. 윈도우즈의 다양한 버전들(예를 들어, 95, 98, ME, NT, XP, 2000, 서버, 비스타 및 7과 8), 리눅스의 다양한 버전들(예를 들어, 레드 햇(Red Hat), 데비앙(Debian) 및 우분투(Ubuntu)), 및 MacOS의 다양한 버전들(예를 들어, 8, 9 및 X)이 오퍼레이팅 시스템(1105)의 예들이다. 각종 실시예들에서, 드라이버들은 SATA, AHCI(advanced host controller interface) 또는 NVM 익스프레스와 같은 표준 인터페이스 및/또는 프로토콜로 동작가능한 (때때로 "압축된(shrink-wrapped)" 또는 "사전 설치된(pre-installed)"으로 지칭되는) 표준 및/또는 일반 드라이버들이거나, 임의적으로 커스터마이징되고/되거나 솔리드-스테이트 드라이브들(1101a-1101n)에 특정한 커맨드들 및/또는 플래시 변환 계층의 사용을 가능하게 하는 특정 벤더(vendor)이다. 일부 드라이브들 및/또는 드라이버들은 커스터마이징된 애플리케이션이 심지어 일반 드라이버로 솔리드-스테이트 드라이브들(1101a-1101n)에 특정한 커맨드들 및/또는 플래시 변환 계층들을 이용하게 할 수 있는, 솔리드-스테이트 드라이브들(1101a-1101n)에 다이렉트로 커맨드들을 전달하기 위해, 최적화된 NAND 액세스(때때로 ONA로 지칭됨) 또는 다이렉트 NAND 액세스(때때로 DNA로 지칭됨) 기술들을 통해 애플리케이션(1109)과 같은 애플리케이션-레벨 프로그램들을 인에이블시키는 패스-쓰루(pass-through) 모드들을 갖는다. ONA 기술들은 다음 중의 하나 이상을 포함한다: 비-표준 수정자들(힌트들)의 이용; 벤더-고유 커맨드들의 이용; 압축성에 따른 실제 비휘발성 메모리 사용과 같은 비-표준 통계의 전달; 판독 유닛 어드레스들 및 스팬들을 전달하는 것 또는 비휘발성 메모리 페이지 어드레스들, 오프셋들, 및 바이트 길이들을 전달하는 것과 같은 플래시 변환 계층-특정 프로토콜들의 이용; 및 그 밖의 기술들. DNA 기술들은 다음 중의 하나 이상을 포함한다: 비휘발성 메모리에 대한 비맵핑된 판독, 기록 및/또는 소거 액세스를 제공하는 비표준 커맨드들 또는 벤더-고유 커맨드들의 이용; 예를 들면 데이터의 포맷팅을 바이패싱함으로써(이를 하지 않는다면 입/출력 디바이스가 데이터의 포맷팅을 행할 것임), 비휘발성 메모리에 대한 더욱 직접적인 액세스를 제공하는 비표준 또는 벤더-고유 커맨드들의 이용; 및 그 밖의 기술들. 드라이버의 예들은 ONA 또는 DNA 지원이 없는 드라이버, ONA-가능한 드라이버, DNA-가능한 드라이버 및 ONA/DNA-가능한 드라이버이다. 드라이버의 추가적인 예들은 벤더-제공형(vendor-provided), 벤더-발전형(vendor-developed), 및/또는 벤더-강화형(vendor-enhanced) 드라이버, 및 클라이언트-제공형(client-provided), 클라이언트-발전형(client-developed) 및/또는 클라이언트-강화형(client-enhanced) 드라이버이다.The
애플리케이션-레벨 프로그램들의 예들은 ONA 또는 DNA 지원이 없는 애플리케이션, ONA-가능한 애플리케이션, DNA-가능한 애플리케이션 및 ONA/DNA-가능한 애플리케이션이다. 점선 화살표(1109D)는 애플리케이션과 애플리케이션용 입/출력 디바이스 간의 양방향 통신(예컨대, 드라이버를 통한 바이패스 또는 VF(virtual function)를 통한 바이패스)을 나타낸다(예컨대, ONA-가능한 애플리케이션 및 ONA-가능한 드라이버는 예를 들면 중재자(intermediary)로서 오퍼레이팅 시스템를 이용하는 애플리케이션이 없이, 솔리드-스테이트 드라이브와 통신한다). 점선 화살표(1109V)는 애플리케이션과 애플리케이션용 입/출력 디바이스 간의 양방향 통신들(예컨대, VF(virtual function)를 통한 바이패스)을 나타낸다(예컨대, DNA-가능한 애플리케이션 및 DNA-가능한 드라이버는 예를 들면 중재자로서 오퍼레이팅 시스템 또는 드라이버를 이용하는 애플리케이션이 없이, 솔리드-스테이트 드라이브와 통신한다).Examples of application-level programs are applications without ONA or DNA support, ONA-enabled applications, DNA-enabled applications and ONA / DNA-enabled applications. Dashed
몇몇 실시예들에서, 비휘발성 메모리들(1199a-1199n)의 하나 이상의 부분들은 펌웨어 스토리지(예컨대, 펌웨어(1106a-1106n))에 이용된다. 펌웨어 스토리지는 하나 이상의 펌웨어 이미지들(또는 그 일부들)을 포함한다. 펌웨어 이미지는 (예컨대, 솔리드-스테이트 드라이브 컨트롤러들(1100a-1100n)의 중앙 처리 장치에 의해) 실행되는, 펌웨어의 하나 이상의 이미지들을 갖는다. 다른 예의 경우, 펌웨어 이미지는 예를 들어, 펌웨어 실행 동안 중앙 처리 장치에 의해 참조되는, 상수들, 파라미터 값들 및 비휘발성 메모리 디바이스 정보 중의 하나 이상의 이미지들을 갖는다. 펌웨어의 이미지들은 예를 들어, 현재의 펌웨어 이미지 및 0개 이상의 이전의 (펌웨어 업데이트들에 관한) 펌웨어 이미지들에 대응한다. 각종 실시예들에서, 펌웨어는 일반, 표준, ONA 및/또는 DNA 동작 모드들, 그리고 하나 이상의 플래시 변환 계층들과의 동작을 제공한다. 몇몇 실시예들에서, 펌웨어 동작 모드들 중 하나 이상이 인에이블된다(예컨대, 임의적으로 드라이버에 의해 전달되고/되거나 제공되는 키들 또는 각종 소프트웨어 기술들을 통해 하나 이상의 애플리케이션 프로그램 인터페이스들(예컨대, API들)이 "록킹 해제(unlocked)"된다). 다른 실시예들에서, 펌웨어 이미지들 중의 상이한 것들이 동작 모드들 중의 상이한 것들에 사용되고/되거나 플래시 변환 계층들 중의 상이한 것들에 사용된다.In some embodiments, one or more portions of the
몇몇 실시예들에서, 호스트(1102)는 맵을 실행시키는 별개의 하드웨어 리소스로서 맵(1108)을 포함한다. 다른 실시예들에서, 맵은 맵(1108) 및/또는 호스트 메모리(1112H)를 통해 및/또는 솔리드-스테이트 드라이브 컨트롤러(1100)의 맵(1141)을 통해 및/또는 카드 메모리(1112C)를 통해 부분적으로 또는 전체적으로 실행된다. 맵(1108), 호스트 메모리(1112H), 솔리드-스테이트 드라이브 컨트롤러(1100)의 맵(1141), 및 카드 메모리(1112C)의 예들은, 예컨대 DRAM, SRAM, 및/또는 플래시 또는 그 밖의 비휘발성 메모리 디바이스들과 같은 하나 이상의 휘발성 및/또는 비휘발성 메모리 소자들이다. 호스트 메모리의 다른 예들은 시스템 메모리, 호스트 메인 메모리, 호스트 캐시 메모리, 호스트-액세스가능 메모리, 및 입/출력 디바이스-액세스가능 메모리이다. 몇몇 실시예들 및/또는 사용 시나리오들에서(예를 들면, 입/출력 카드(1116)를 구비하며 (맵의 적어도 일부를 위한) 스토리지로서 도 11c의 임의적 카드 메모리(1112C)를 사용하는 몇몇 실시예들)는, 하나 이상의 입/출력 디바이스들 및/또는 호스트(1102)가 카드 메모리(1112C) 내의 맵에 액세스한다.In some embodiments, the
각종 실시예들에서, 호스트(1102) 및/또는 솔리드-스테이트 드라이브(1101)의 하나 이상의 인스턴스들은 맵(1108), 호스트 메모리(1112H), 카드 메모리(1112C) 및/또는 맵(1141)에 액세스하여, 비휘발성 메모리(1199a-1199n)의 하나 이상의 인스턴스들에 대한 요소들과 같은 입/출력 디바이스 비휘발성 메모리의 하나 이상의 부분들을 타겟팅하는 비휘발성 메모리 위치들(예컨대, 블록 및/또는 페이지 어드레스 및/또는 판독 유닛 어드레스들)로 논리 블록 어드레스들(또는 라벨 등의 다른 명시자들)을 변환하는데 사용될 수 있는 맵핑 정보의 전부 또는 임의의 부분들을 저장 및 검색할 수 있다. 개념적으로, 단일의 맵이 존재할 수 있으며, 각종 실시예들에 따르면 맵의 제어 및/또는 스토리지 및/또는 사용이 하나 이상의 호스트들(1102) 및/또는 솔리드-스테이트 드라이브 컨트롤러들(1100a-1100n)에 의해 제공된다.One or more instances of
스위치/패브릭/중간 컨트롤러(1103)가 없는(lacking) 몇몇 실시예들에서, 솔리드-스테이트 드라이브들(1101a-1101n)은 외부 인터페이스들(1111a-1111n)을 통해 다이렉트로 호스트(1102)에 커플링된다. 각종 실시예들에서, 솔리드-스테이트 드라이브 컨트롤러들(1100a-1100n)은 RAID 컨트롤러 또는 입/출력 컨트롤러와 같은, 다른 컨트롤러들의 하나 이상의 중간 레벨들을 통해 호스트(1102)에 커플링된다. 몇몇 실시예들에서, 솔리드-스테이트 드라이브들(1101a-1101n)(또는 그 변형들)은 SAS 드라이브 또는 SATA 드라이브에 대응하며, 스위치/패브릭/중간 컨트롤러(1103)는 결과적으로(in turn) 이니시에이터에 커플링되는 확장자(expander)에 대응하거나, 다르게는 스위치/패브릭/중간 컨트롤러(1103)는 확장자를 통해 이니시에이터에 간접적으로 커플링되는 브리지에 대응한다. 몇몇 실시예들에서, 스위치/패브릭/중간 컨트롤러(1103)는 하나 이상의 PCIe 스위치들 및/또는 패브릭들을 포함한다.In some embodiments lacking switch / fabric /
컴퓨팅 호스트(예를 들어, 컴퓨터, 워크스테이션 컴퓨터, 서버 컴퓨터, 스토리지 서버, 개인용 컴퓨터, 랩탑 컴퓨터, 노트북 컴퓨터, 넷북 컴퓨터, 및/또는 태블릿 컴퓨터)로서 호스트(1102)를 갖는 실시예들 중 일부와 같은 다양한 실시예들에서, 컴퓨팅 호스트는 임의적으로 하나 이상의 로컬 및/또는 원격 서버들(예컨대, 임의적 서버들(1118))과 (예컨대, 임의적 입/출력 및 스토리지 디바이스들/리소스들(1117) 및 임의적 LAN/WAN(local area network/wide area network)(1119)을 통해) 통신할 수 있다. 통신은 예를 들어, 솔리드-스테이트 드라이브 요소들 중 임의의 하나 이상의 것의 로컬 및/또는 원격 액세스, 관리, 및/또는 사용을 가능하게 한다. 몇몇 실시예들에서, 통신은 전적으로 또는 부분적으로 이더넷을 통해 이루어진다. 몇몇 실시예들에서, 통신은 전적으로 또는 부분적으로 파이버 채널을 통해 이루어진다. 각종 실시예들에서, LAN/WAN(1119)은 서버 팜(farm)에서의 네트워크, 서버 팜들을 커플링하는 네트워크, 메트로-영역 네트워크 및 인터넷 중 임의의 하나 이상의 것과 같은, 하나 이상의 LAN(local area network)들 및/또는 WAN(wide area network)들을 나타낸다.Some of the embodiments having the
각종 실시예들에서, 솔리드-스테이트 드라이브 컨트롤러 및/또는 하나 이상의 비휘발성 메모리들과 결합하는 컴퓨팅-호스트 비휘발성 메모리 컨트롤러는, 비휘발성 스토리지 컴포넌트, 예컨대 USB(universal serial bus) 스토리지 컴포넌트, UFS(universal flash storage) 스토리지 컴포넌트, CF(compact flash) 스토리지 컴포넌트, MMC(multimedia card) 스토리지 컴포넌트, SD(secure digital) 스토리지 컴포넌트, 메모리 스틱 스토리지 컴포넌트, 및 xD-화상 카드 스토리지 컴포넌트로서 구현된다.In various embodiments, a computing-host non-volatile memory controller in combination with a solid-state drive controller and / or one or more non-volatile memories may include a non-volatile storage component such as a universal serial bus (USB) storage component, flash storage storage component, CF (compact flash) storage component, MMC (multimedia card) storage component, SD (secure digital) storage component, memory stick storage component, and xD-video card storage component.
각종 실시예들에서, 솔리드-스테이트 드라이브 컨트롤러(또는 컴퓨팅-호스트 비휘발성 메모리 컨트롤러)의 전부 또는 임의의 부분들, 또는 그 기능들은 컨트롤러가 커플링되는 호스트(예를 들어, 도 11c의 호스트(1102))에 구현된다. 각종 실시예들에서, 솔리드-스테이트 드라이브 컨트롤러(또는 컴퓨팅-호스트 비휘발성 메모리 컨트롤러)의 전부 또는 임의의 부분들, 또는 그 기능들이 하드웨어(예를 들어, 로직 회로), 소프트웨어 및/또는 펌웨어(예를 들어, 드라이버 소프트웨어 또는 솔리드-스테이트 드라이브 제어 펌웨어), 또는 이들의 임의의 조합을 통해 구현된다.In various embodiments, all or any portion of a solid-state drive controller (or computing-host nonvolatile memory controller), or functions thereof, may be implemented by a host (e.g., host 1102 ). In various embodiments, all or any portion of a solid-state drive controller (or computing-host nonvolatile memory controller), or any combination thereof, may be implemented in hardware (e.g., logic circuitry), software and / For example, driver software or solid-state drive control firmware), or any combination thereof.
도 12를 참조하면, 비휘발성 메모리에 데이터를 기록하는 흐름도(1200)가 도시되어 있다. 이 프로세스는 단계 1202에서 개시되며, 단계 1206에서 복수의 라벨들(또는 객체 식별자들이나 논리 블록 어드레스들과 같은 그 밖의 고유 식별자들) 중의 특정 라벨과 연관된 데이터를 비휘발성 메모리에 기록(저장)하는 결정이 이루어진다. 예를 들어, 이 결정은 애플리케이션 프로그램, 오퍼레이팅 시스템, 하이퍼바이저, 또는 임의의 다른 소프트웨어 또는 펌웨어 모듈 중의 하나 이상의 것에 의해 이루어진다. 몇몇 실시예들에서, 기록 데이터는 가변-사이즈이다(예컨대, 가능하게는 각 기록 동작에 따라 달라질 수 있다). 다른 실시예들에서, 기록 데이터는 다수의 고정-사이즈 유닛들, 예를 들면 다수의 SATA 섹터들이다.Referring to FIG. 12, a flowchart 1200 of writing data to a non-volatile memory is shown. The process begins at
단계 1210에서, 기록 커맨드 및 연관된 (가능하게는 가변-사이즈) 기록 데이터가 수신된다. 일 예에서, 애플리케이션은 시스템 호출을 사용하여 드라이버에게 기록 커맨드 및 기록 데이터(예를 들면, 데이터에 대한 포인터(pointer)를 통해)를 전송한다. 다른 예에서, 호스트는 솔리드-스테이트 드라이브 컨트롤러로 하여금 연관된 기록 데이터를 검색하게 하는 정보와 함께 기록 커맨드를 솔리드-스테이트 드라이브 컨트롤러에게 전송한다. 예를 들어, 기록 커맨드는 SATA NCQ(native command queue) 태그를 포함하며, 이 NCQ 태그는 연관된 기록 데이터를 페치하는데 사용된다.At
단계 1214에서, (가능하게는 가변-사이즈를 갖는) 기록 데이터는 임의적 및/또는 선택적으로 압축되거나 다르게는 사이즈가 감소된다. 연관된 기록 데이터가 이미 가변-사이즈를 가진 경우라도, 가능하게는 압축이 연관된 기록 데이터를 더욱 사이즈 감소시킬 수 있다. 몇몇 실시예들에서, (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터는 임의적 및/또는 선택적으로 암호화된다.In
단계 1218에서, 데이터 기록용 비휘발성 메모리의 다음의 미기록되어 있는 물리적 위치(물리적 어드레스 공간에서)가 결정된다. 일 예에서, 상기 결정된 다음의 미기록되어 있는 물리적 위치는 이전에-기록된, 가변-사이즈 데이터에 바로 인접해 있다(비휘발성 메모리의 공간 낭비없이). 다른 예에서, 상기 결정된 다음의 미기록되어 있는 물리적 위치는 이전에-기록된 가변-사이즈 데이터와 동일한 판독 유닛에서 시작된다. 몇몇 실시예들에서, 상기 결정된 다음의 미기록되어 있는 물리적 위치는 기록 커맨드에 명시되어 있는 밴드에 따라 결정된다.In
단계 1222에서, (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터는 상기 결정된 다음의 미기록되어 있는 물리적 위치에서 비휘발성 메모리에 저장된다. 몇몇 실시예들에서, 하드웨어 유닛은 (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터를 비휘발성 메모리 페이지의 이미지(예컨대, 비휘발성 메모리 페이지로 기록될 버퍼의 일부분)로 타일링한다.In
단계 1226에서, 기록 데이터의 식별자를 포함하는 헤더는 (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터의 적어도 일부분과 동일한 비휘발성 메모리 페이지에 저장된다. 예를 들어, 헤더는 도 6에서와 같은 (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터의 적어도 일부분과 동일한 비휘발성 메모리 페이지에 저장되고/되거나 헤더는 도 5에서와 같은 (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터의 적어도 일부분과 동일한 판독 유닛에 저장된다. 각종 실시예들에 따르면, 식별자 다음 중의 하나 이상의 것이다: 기록 데이터의 특정 라벨과 동일한 것; 기록 데이터의 특정 라벨의 기능; 테이블을 통해 기록 데이터의 특정 라벨과 연관된 식별자; 비휘발성 메모리에 저장된 모든 데이터 중의 고유 식별자; 및 전술한 것의 임의의 조합.At
각종 실시예들에 따르면, (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터 및/또는 헤더의 저장은, 단계들 1222 및/또는 1226에서 발생하며/하거나 (예를 들면, 복수의 기록 동작들로부터의) 헤더들 및 데이터의 비휘발성 메모리 페이지가 축적될 때까지 연기된다. 몇몇 실시예들에서, 오류 정정 인코딩은 비휘발성 메모리에 저장하는 것의 일부로서 수행된다. 다른 실시예들에서, 오류 정정 인코딩은 각 판독 유닛의 사용자 부분에 다수의 오류 정정 코딩 바이트를 첨부함으로써 비휘발성 메모리에 저장되는 판독 유닛들을 형성한다. 또 다른 실시예들에서는, 스크램블링이 오류 정정 인코딩의 이전에 수행된다.According to various embodiments, storage of (possibly variable-sized, possibly compressed) write data and / or headers may occur in
단계 1230에서, 상기 결정된 다음의 미기록되어 있는 물리적 위치의 표시가 반환된다. 일 예에서, 상기 결정된 다음의 미기록되어 있는 물리적 위치의 표시는 (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터를 저장하는데 사용되는 판독 유닛들 중의 첫 번째 판독 유닛의 어드레스와 같은, 판독 유닛 어드레스를 포함한다. 이 예에 대해 계속하면, 몇몇 실시예들에서, 상기 결정된 다음의 미기록되어 있는 물리적 위치의 표시는, (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터에 의해 스패닝되는 다수의 판독 유닛들, 예를 들어 (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터의 전부 및 그 미만의 것을 검색하기 위해 판독해야 하는 다수의 판독 유닛들을 더 포함한다. 다수의 판독 유닛들 중의 하나 이상의 판독 유닛은, 라벨들 중의 다른 것들과 연관된 데이터를 임의적 및/또는 선택적으로 포함하며, 그 다수의 판독 유닛들 각각은 (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터 중의 적어도 일부를 포함한다. 다른 예에서, 상기 결정된 다음의 미기록되어 있는 물리적 위치의 표시는, (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터의 적어도 일부분을 저장하는데 사용되는 비휘발성 메모리 페이지의 어드레스 및/또는 비휘발성 메모리 페이지에서의 오프셋을 포함한다. 다른 예에 대해 계속하면, 몇몇 실시예들에서, 상기 결정된 다음의 미기록되어 있는 물리적 위치의 표시는, (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터의 바이트들의 길이를 더 포함한다. 이 다른 예에 대해 더 계속하면, 또 다른 실시예들에서, (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터는 하나보다 많은 비휘발성 메모리 페이지를 스패닝한다(예컨대, 첫 번째 비휘발성 메모리 페이지에서 시작되어 하나 이상의 후속의 비휘발성 메모리 페이지들까지 계속됨). 예를 들어, 첫 번째 비휘발성 메모리 페이지의 오프셋 및 그 이후에 있는 사용자 데이터의 잔존 양이 (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터의 바이트 길이보다 작은 경우, (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터는 하나보다 많은 비휘발성 메모리 페이지를 스패닝한다.In
단계 1234에서, 맵은 특정 라벨을 상기 결정된 다음의 미기록되어 있는 물리적 위치의 표시와 연관시키는 것으로 유지된다. 예를 들어, 맵을 유지하는 것은, 특정 라벨과 연관된 데이터가 후속 판독 동작에 의해 검색되는 것을 가능하게 한다.At
단계 1238에서, 기록 커맨드에 따른 통계가 유지된다. 예를 들어, 특정 라벨과 연관된 데이터를 기록하는 것은, 데이터가 기록된 리던던시 블록 내의 소정 양의 공간을 사용하며, 임의적 및/또는 선택적으로는 특정 라벨과 연관된 이전 버전의 데이터가 저장된 리던던시 블록 내의 소정 양의 공간을 비우게 된다. 통계는 각 리던던시 블록에서 사용되는 공간의 양(또는 동등하게는 몇몇 실시예들에서, 자유 공간의 양)을 추적한다. 이 프로세스는 단계 1290에서 종료된다.In
몇몇 실시예들에서, 록킹(locks)(예컨대, 세마포어(semaphore)들)이 사용되어 프로세스 1200의 적어도 일부분 동안 맵의 적어도 일부분에의 액세스를 방지한다. 예를 들어, 몇몇 실시예들에서, 특정 라벨과 연관된 맵의 엔트리는 단계들 1210 내지 1234에서 록킹됨으로써, 그것이 업데이트되고 있는 동안의 엔트리에 대한 다른 액세스를 방지한다.In some embodiments, locks (e.g., semaphores) are used to prevent access to at least a portion of the map during at least a portion of process 1200. For example, in some embodiments, an entry of a map associated with a particular label is locked in
도 13을 참조하면, 비휘발성 메모리로부터 데이터를 판독하는 흐름도(1300)가 도시되어 있다. 이 프로세스는 단계 1302에서 개시되며, 단계 1306에서는 비휘발성 메모리로부터 복수의 라벨들(또는 객체 식별자들이나 논리 블록 어드레스들과 같은 다른 고유 식별자들) 중의 특정의 것과 연관된 데이터를 판독(검색)하는 결정이 이루어진다. 예를 들어, 이 결정은 애플리케이션 프로그램, 오퍼레이팅 시스템, 하이퍼바이저, 또는 임의의 다른 소프트웨어 또는 펌웨어 모듈 중의 하나 이상의 것에 의해 이루어진다. 몇몇 실시예들에서, 데이터는 가변-사이즈이다(예컨대, 가능하게는 각 판독 동작에 따라 달라질 수 있음). 다른 실시예들에서, 데이터는 다수의 SATA 섹터들과 같은, 다수의 고정-사이즈 유닛들이다.Referring to FIG. 13, a
단계 1310에서는, 라벨과 연관된 저장 버전(stored version)의 데이터인, 비휘발성 메모리 내의 물리적 위치에 대한 표시를 결정하기 위해, 특정 라벨이 조회된다. 각종 실시예들에 따르면, 맵 조회는 판독 동작을 발생시키는 소프트웨어 모듈에 의해서, 또는 판독 동작을 발생시키는 소프트웨어 모듈에 의해 작동되는 다른 소프트웨어 모듈에 의해서 수행된다. 예를 들어, 애플리케이션이 판독 동작을 발생시키고, 호스트의 드라이버 계층 또는 솔리드-스테이트 드라이브 컨트롤러의 펌웨어 계층이 맵 조회를 수행한다.At
단계 1314에서, 비휘발성 메모리 내의 물리적 위치에 대한 표시를 가진 판독 커맨드가 수신된다. 일 예에서, 호스트의 드라이버 계층이 맵 조회를 수행한 이후에, 드라이버 계층은 판독 커맨드 및 비휘발성 메모리 내의 물리적 위치에 대한 표시를 솔리드-스테이트 드라이브 컨트롤러로 전송한다. 다른 예에서, 솔리드-스테이트 드라이브 컨트롤러의 제 1 프로세서가 맵 조회를 수행한 이후에, 제 1 프로세서는 판독 커맨드 및 비휘발성 메모리 내의 물리적 위치에 대한 표시를, 비휘발성 메모리에 대한 액세스를 제어하는 솔리드-스테이트 드라이브 컨트롤러의 제 2 프로세서로 전송한다.At
단계 1318에서, 비휘발성 메모리 내의 물리적 위치에 대한 표시는, 특정 라벨과 연관된 저장 버전의 데이터를 포함하는, 판독 유닛들의 위치 및 개수를 결정하는데 사용된다. 일 예에서, 이 물리적 위치에 대한 표시는 특정 라벨과 연관된 저장 버전의 데이터를 저장하는데 사용되는 하나 이상의 판독 유닛들 중의 첫 번째 판독 유닛의 어드레스와 같은 판독 유닛 어드레스를 포함한다. 이 예에 대해 계속하면, 몇몇 실시예들에서, 이 물리적 위치에 대한 표시는 하나 이상의 판독 유닛들의 개수, 예를 들어, 특정 라벨과 연관된 저장 버전의 데이터의 모두 및 일부를 검색하기 위해 판독되어야 하는 판독 유닛들의 개수를 더 포함한다. (하나 이상의 판독 유닛들 중의 하나 이상의 것은 라벨들 중의 다른 것들과 연관된 데이터를 임의적 및/또는 선택적으로 포함하며, 하나 이상의 판독 유닛들 각각은 특정 라벨과 연관된 저장 버전의 데이터 중의 적어도 일부를 포함한다.) 다른 예에서, 이 물리적 위치에 대한 표시는, 특정 라벨과 연관된 저장 버전의 데이터 중의 적어도 일부분을 저장하는데 사용되는 비휘발성 메모리 페이지의 어드레스 및/또는 비휘발성 메모리 페이지에서의 오프셋을 포함한다. 다른 예에 대해 계속하면, 몇몇 실시예들에서, 이 물리적 위치에 대한 표시는 특정 라벨과 연관된 저장 버전의 데이터의 바이트 길이를 더 포함한다. 이 다른 예에 대해 더 계속하면, 또 다른 실시예들에서, 특정 라벨과 연관된 저장 버전의 데이터는 하나보다 많은 비휘발성 메모리 페이지를 스패닝한다(예컨대, 첫 번째 비휘발성 메모리 페이지에서 시작되어 하나 이상의 후속의 비휘발성 메모리 페이지들까지 계속됨). 예를 들어, 첫 번째 비휘발성 메모리 페이지에서의 오프셋 및 그 이후의 사용자 데이터의 잔존 양이, 특정 라벨과 연관된 저장 버전의 데이터의 바이트 길이보다 작은 경우, 특정 라벨과 연관된 저장 버전의 데이터는 하나보다 많은 비휘발성 메모리 페이지를 스패닝한다. 이 다른 예에 대해 더 계속하면, 첫 번째 비휘발성 메모리 페이지 내의 판독 유닛들의 개수 및/또는 사이즈에 따라, 그리고 특정 라벨과 연관된 저장 버전의 데이터의 바이트 길이 및 오프셋에 따라, 첫 번째 비휘발성 메모리 페이지 내의 하나 이상의 판독 유닛들 중의 첫 번째 판독 유닛 및 첫 번째 비휘발성 메모리 페이지 내의 판독 유닛들의 개수가 결정된다. 특정 라벨과 연관된 저장 버전의 데이터가 하나보다 많은 비휘발성 메모리 페이지를 스패닝하는 경우, 유사한 절차가 비휘발성 메모리 페이지들의 하나 이상의 후속의 비휘발성 메모리 페이지들에 사용되어, 특정 라벨과 연관된 저장 버전의 데이터의 적어도 일부분을 포함하는 후속의 비휘발성 메모리 페이지들 내의 추가 판독 유닛들을 결정한다.At
단계 1322에서, 상기 결정된 판독 유닛들이 비휘발성 메모리로부터 판독된다. 몇몇 실시예들에서, 오류 정정 디코딩이 이 판독 유닛들에 대해 수행됨으로써 저장시에 발생하는 임의의 오류들을 정정하고/하거나 비휘발성 메모리로 또는 그로부터 송신한다. 다른 실시예들에서, 디-스크램블링이 오류 정정 디코딩 이후에 수행된다. 상기 결정된 판독 유닛들의 오류 정정 인코딩으로 인해, 비휘발성 메모리로부터 판독되는 것으로 결정된 바이트들의 수는, 판독 유닛들 내의 사용자 데이터 및 판독 유닛들 각각에서의 오류 정정 코딩 바이트를 포함한다. 몇몇 실시예들에서, 판독 유닛들 각각에서의 오류 정정 코딩 바이트들의 수는 예를 들면, 비휘발성 메모리의 마모로 인해 솔리드-스테이트 드라이브 컨트롤러 하에서 동적으로 달라진다. 각종 실시예들 및/또는 사용 시나리오들에서, 상기 결정된 판독 유닛들에서의 사용자 데이터의 바이트들의 총 수는, 예를 들어 상기 결정된 판독 유닛들의 적어도 하나의 것이 라벨들 중의 다른 것과 연관된 데이터의 일부분을 포함하는 경우, 특정 라벨과 연관된 저장 버전의 데이터의 바이트 길이를 초과한다.In
단계 1326에서, 특정 라벨과 연관된 저장 버전의 데이터가 상기 결정된 판독 유닛들로부터 추출된다. 몇몇 실시예들에서, 이 추출은 판독 커맨드가 제공되는 식별자에 따라 행해진다. 각종 실시예들에 따르면, 식별자는 다음 중의 하나 이상의 것이다: 데이터의 특정 라벨과 동일한 것; 데이터의 특정 라벨의 기능; 테이블을 통해 데이터의 특정 라벨과 연관된 식별자; 비휘발성 메모리에 저장된 모든 데이터 중의 고유 식별자; 및 전술한 것의 임의의 조합. 일 예에서, 판독 유닛들은 도 5에 도시된 바와 같은 하나 이상의 헤더들을 포함하며, 식별자는 헤더들 중의 매칭되는 것을 결정하는데 사용되며, 그 후에 이것은 상기 결정된 판독 유닛들에서 특정 라벨과 연관된 저장 버전의 데이터를 탐색하는데 사용된다. 다른 예에서, 이 물리적 위치에 대한 표시는 상기 결정된 판독 유닛들 내의 특정 라벨과 연관된 저장 버전의 데이터의 위치를 명시하는 정보를 포함한다. 각종 실시예들에 따르면, 특정 라벨과 연관된 저장 버전의 데이터는 가변-사이즈이다. 예를 들어, 특정 라벨과 연관된 데이터는 저장되기 이전에 압축되었으며, 및/또는 특정 라벨과 연관된 데이터는 그 자체가 가변-사이즈를 가지고 있다.At
단계 1330에서, 특정 라벨과 연관된 저장 버전의 데이터는 임의적 및/또는 선택적으로 복호화되며, 및/또는 임의적 및/또는 선택적으로 압축 해제되어 특정 라벨과 연관된 데이터를 생성한다.At
단계 1334에서는, 특정 라벨과 연관된 데이터가 판독 동작에 대한 응답으로 반환된다.In
단계 1338에서, 판독 커맨드에 따라 통계가 유지된다. 일 예에서, 판독 커맨드는 소정 개수의 비휘발성 메모리 블록들에 액세스하여 상기 결정된 판독 유닛들을 검색하고, 통계는 비휘발성 메모리 블록당 판독 방해 이벤트들의 수를 카운팅하는 것으로 유지된다. 다른 예에서, 판독 커맨드는 소정 개수의 비휘발성 메모리 블록들에 액세스하여 상기 결정된 판독 유닛들을 검색하고, 상기 결정된 판독 유닛들의 오류 정정이 상기 결정된 판독 유닛들 각각에서 각 개수의 오류들을 정정하고, 통계는 비휘발성 메모리 블록들 각각의 임의의 판독 유닛들에서 정정되는 최대 개수의 오류들로 유지된다. 이 프로세스는 단계 1390에서 종료된다.In
통상적으로, 복수의 비휘발성 메모리 페이지들을 스패닝하지 않는 단일 맵핑 유닛의 데이터를 판독하기 위해서는, 맵핑 유닛의 저장 버전의 데이터를 획득하기 위해 비휘발성 메모리 페이지에서 액세스할 판독 유닛들의 개수는 비휘발성 메모리 페이지 내의 판독 유닛들의 전부보다 작다. 또한, 맵핑 유닛의 저장 버전의 데이터는 가변-사이즈이기 때문에, 제 1 논리 블록 어드레스(또는 라벨)를 참조하는 제 1 판독 커맨드를 위해 비휘발성 메모리 페이지에서 액세스할 판독 유닛들의 개수는, 제 2 논리 블록 어드레스(또는 라벨)을 참조하는 제 2 판독 커맨드를 위해 비휘발성 메모리 페이지에서 액세스할 판독 유닛들의 개수와 상이하며, 제 2 논리 블록 어드레스는 제 1 논리 블록 어드레스와 상이하다. 몇몇 실시예들에서는, 비휘발성 메모리 페이지에서 액세스할 판독 유닛들의 개수만이 비휘발성 메모리 페이지로부터 판독된다. 즉, 맵핑 유닛의 저장 버전의 데이터의 일부분을 포함하는 판독 유닛들의 것들만이 비휘발성 메모리로부터 판독됨으로써, 맵핑 유닛의 저장된 버전의 데이터에 액세스하고 이를 검색한다.Typically, in order to read the data of a single mapping unit that does not span multiple non-volatile memory pages, the number of read units to access in the non-volatile memory page to obtain the stored version of the mapping unit's data is determined by the number of non- Lt; / RTI > Also, since the data in the stored version of the mapping unit is variable-size, the number of read units to be accessed in the non-volatile memory page for the first read command referencing the first logical block address (or label) Is different from the number of read units to be accessed in the non-volatile memory page for a second read command that references the block address (or label), and the second logical block address is different from the first logical block address. In some embodiments, only the number of read units to be accessed in the non-volatile memory page is read from the non-volatile memory page. That is, only those of the read units containing a portion of the stored version of the mapping unit are read from the non-volatile memory, thereby accessing and retrieving the stored version of the data of the mapping unit.
도 14를 참조하면, 비휘발성 메모리에서 데이터를 리사이클링하는 흐름도가 도시되어 있다. 이 프로세스는 단계 1402에서 개시되며, 단계 1406에서는 리사이클링될 비휘발성 메모리의 영역에 대한 결정이 이루어진다. 각종 실시예들 및/또는 사용 시나리오들에 따르면, 영역은 다음 중의 하나 이상의 것이다: 리던던시 블록; 하나 이상의 비휘발성 메모리 블록들; 비어 있으며/있거나 사용된 공간 통계가 유지되는 비휘발성 메모리의 부분; 웨어-레벨링 통계가 유지되는 비휘발성 메모리의 부분; 및 전술한 것들의 임의의 조합. 각종 실시예들 및/또는 사용 시나리오들에 따르면, 리사이클링은 다음 중의 하나 이상으로 수행된다: 비휘발성 메모리 내의 가비지 컬렉션(총 자유 공간); 비휘발성 메모리의 웨어-레벨링(비휘발성 메모리의 블록들을 각각의 프로그램/소거 카운트에서 상대적으로 동일하게 유지하기 위해); 및 프로그램 장애, 과도한 판독 방해 및/또는 과도한 에러 레이트들과 관련된 오류들 및/또는 예외들을 처리. 다른 실시예들에서, 리사이클링은 전반적으로 수행되며, 예를 들면 호스트에 의해서, 복수의 솔리드-스테이트 드라이브들에 걸쳐 수행된다.Referring to Fig. 14, a flow chart for recycling data in a non-volatile memory is shown. The process begins at
단계 1410에서, 하나 이상의 비휘발성 메모리 페이지들이 비휘발성 메모리의 영역으로부터 판독된다. 몇몇 실시예들에서, 비휘발성 메모리 페이지들은 전체적으로 오류 정정된다. 비휘발성 메모리 페이지들 내의 모든 판독 유닛들은 오류 정정된다. 다른 실시예들에서는, (도 6에 도시된 바와 같이) 헤더들을 포함하는 것으로 결정된 비휘발성 메모리 페이지들의 부분만이 먼저 오류 정정되며, 비휘발성 메모리 페이지들의 다른 부분들은, 그 비휘발성 메모리 페이지들이 리사이클링될 필요가 있는 데이터를 포함하는 것으로 결정된 경우(예컨대, 단계 1426)에 필요에 따라 오류 정정된다.In
단계 1414에서는, 헤더들이 비휘발성 메모리 페이지들로부터 추출된다. 일 예에서, 도 5에 도시된 실시예에서, 헤더들은 비휘발성 메모리 페이지들 각각의 각 판독 유닛으로부터 추출된다. 다른 예에서, 도 6에 도시된 실시예에서, 헤더들은 비휘발성 메모리 페이지들 각각의 일부분, 예를 들어 비휘발성 메모리 페이지들 각각의 첫 번째 하나 이상의 판독 유닛들로부터 추출된다.At
단계 1418에서, 비휘발성 메모리 페이지들로부터 추출된 헤더들이 파싱되어 비휘발성 메모리 페이지들 내의 (예컨대, 개시)와 연관된 데이터의 식별자들을 결정한다.At
단계 1422에서는, 맵 내에서 식별자들이 조회됨으로써 식별자들과 연관된 데이터의 비휘발성 메모리 내의 물리적 위치들에 대한 각각의 표시들을 결정한다. 몇몇 실시예들에서, 식별자들은 비휘발성 메모리가 기록될 시에 사용된 데이터의 각각의 라벨들과 동일하다. 다른 실시예들에서, 식별자들은 다른 정보, 예를 들면 솔리드-스테이트 드라이브 식별자와 조합되어 맵 내에서 조회되는 라벨들을 형성한다. 또 다른 실시예들에서, 맵은 식별자들을 라벨들과 연관시키는 것으로 유지되며/되거나 식별자들을 그 식별자들과 연관된 데이터의 비휘발성 메모리 내의 물리적 위치들에 대한 표시들과 연관시키는 것으로 유지된다.In
단계 1426에서, (리사이클링되고 있는 비휘발성 메모리 페이지들에서) 계속 현재 진행되고 있는 식별자들과 연관된 임의의 데이터가 비휘발성 메모리 내의 새로운 물리적 위치로 기록된다. 예를 들어, 식별자들과 연관된 데이터의 비휘발성 메모리 내의 물리적 위치들에 대한 각각의 표시들이 각각의 판독 유닛 어드레스들로 변환되며, 각각의 판독 유닛 어드레스들이 리사이클링되고 있는 비휘발성 메모리 페이지들 내에 있는 경우에는, 리사이클링되고 있는 비휘발성 메모리 페이지들이 식별자들과 연관된 가장 최신 버전의 데이터를 포함한다. 각종 실시예들에서, 계속 현재 진행되고 있는 식별자들과 연관된 데이터를 비휘발성 메모리 내의 새로운 물리적 위치로 기록하는 것은, 프로세스 1200의 단계 1218 내지 단계 1230과 유사하게 수행된다. 각종 실시예들에서, 계속 현재 진행되고 있는 데이터가 압축 및 암호화되는 경우, 이 계속 현재 진행되고 있는 데이터는 압축 및 암호화된 형태에서 "그대로(as is)" 재기록된다. 몇몇 실시예들에서, 이 계속 현재 진행되고 있는 데이터는 리사이클링되고 있는 비휘발성 메모리 페이지로부터 솔리드-스테이트 드라이브 컨트롤러 내의 새로운 비휘발성 메모리 페이지로 이동된다(그리고, 이 계속 현재 진행되고 있는 데이터는 호스트로 전송되지 않음으로써, 이 계속 현재 진행되고 있는 데이터를 리사이클링 하도록 한다). 다른 실시예들에서, 리사이클링은 이 계속 현재 진행되고 있는 데이터를 호스트로 전송하고, 프로세스 1200과 유사하게 그것을 재기록하는 것을 포함한다. 다른 실시예들에서, 리사이클링은 복수의 솔리드-스테이트 드라이브들에 걸쳐 전반적으로 수행되며, 솔리드-스테이트 드라이브들 중의 하나의 것에 이전에 저장된 계속 현재 진행되고 있는 데이터가 리사이클링 목적으로 솔리드-스테이트 드라이브들 중의 다른 것으로 재기록된다.In
단계 1430에서는, 리사이클링된 임의의 데이터의 새로운 물리적 위치의 표시를 반영하도록 맵이 업데이트된다.In
단계 1434에서, 그 영역 내에 처리될 더 많은 비휘발성 메모리 페이지들이 계속 존재하는지의 여부에 대한 결정이 이루어진다. 만일 그러한 경우, 프로세스는 단계 1410으로 진행하여 계속해서 다른 비휘발성 메모리 페이지들을 리사이클링한다.At
단계 1438에서, 리사이클링 프로세스 동안의 비휘발성 메모리의 판독 및 기록에 따라 통계가 유지된다. 일 예에서, 비휘발성 메모리를 판독하는 것은, 소정 개수의 비휘발성 메모리 블록들에 액세스하여 비휘발성 메모리 페이지들을 검색하는 것이며, 통계는 비휘발성 메모리 블록당 판독 방해 이벤트들의 수를 카운팅하는 것으로 유지된다. 다른 예에서, 비휘발성 메모리를 판독하는 것은 소정 개수의 비휘발성 메모리 블록들에 액세스하여 비휘발성 메모리 페이지들을 검색하는 것이고, 비휘발성 메모리 페이지들의 오류 정정은 오류 정정 디코딩된 비휘발성 메모리 페이지들의 판독 유닛들 각각에서의 각각의 개수의 오류들을 정정하는 것이며, 통계는 비휘발성 메모리 블록들 각각의 임의의 판독 유닛에서 정정된 오류들의 최대 개수로 유지된다. 또 다른 예에서, 비휘발성 메모리를 기록하는 것에 의해 데이터를 리사이클링하는 것은, 리사이클링된 데이터가 기록된 리던던시 블록 내의 소정 양의 공간을 사용하는 것이고, 임의적 및/또는 선택적으로는 리사이클링되고 있는 리던던시 블록 내의 소정 양의 공간을 비우는 것이다. 통계는 각 리던던시 블록 내의 사용 공간의 양(또는 동등하게는 몇몇 실시예들에서, 자유 공간의 양)을 추적한다. 몇몇 실시예들에서, 리사이클링되고 있는 영역 내의 사용 공간의 양이 0이 되는 경우, 그 영역에는 현재 진행되고 있는(아직 갱신 기록되지 않은) 데이터만이 리사이클링되며, 프로세스 1400은 리사이클링되고 있는 영역 내의 비휘발성 메모리 페이지들 모두를 판독하기 이전에 완료될 수 있다. 이 프로세스는 단계 1490에서 종료된다.At
몇몇 실시예들에서, 록킹들(예컨대, 세마포어(semaphore)들)이 사용되어 프로세스 1400의 적어도 일부분 동안 맵의 적어도 일부분에의 액세스를 방지한다. 예를 들어, 몇몇 실시예들에서, 현재 진행되고 있는 데이터를 가진 식별자들 중의 하나와 연관된 맵의 엔트리는 단계들 1422 내지 1430에서 록킹됨으로써, 그것이 업데이트되고 있는 동안의 엔트리에 대한 다른 액세스를 방지한다.In some embodiments, lockings (e.g., semaphores) are used to prevent access to at least a portion of the map during at least a portion of the
각종 실시예들에 따르면, 호스트는 리사이클링될 비휘발성 메모리의 영역들을 선택하고; 솔리드-스테이트 드라이브 컨트롤러는 리사이클링될 비휘발성 메모리의 영역들을 선택하고; 호스트는 제 1 이유로 리사이클링될 비휘발성 메모리의 영역들을 선택하며 솔리드-스테이트 드라이브 컨트롤러는 이와 다른 제 2 이유로 리사이클링될 비휘발성 메모리의 영역들을 선택하고; 또한 전술한 것들의 임의의 조합이 있을 수 있다. 일 예에서, 리사이클링될 비휘발성 메모리의 영역들의 모든 선택들은 호스트에서 수행된다. 다른 예에서, 호스트는 가비지 컬렉션을 위해 리사이클링될 비휘발성 메모리의 영역들을 선택하고, 솔리드-스테이트 드라이브 컨트롤러는 웨어-레벨링을 위해 리사이클링될 비휘발성 메모리의 영역들을 선택한다. 또 다른 예에서, 호스트는 가비지 컬렉션 및 웨어-레벨링을 위해 리사이클링될 비휘발성 메모리의 영역들을 선택하고, 솔리드-스테이트 드라이브 컨트롤러는 예외적 상황들 및/또는 프로그램 장애들, 과도한 오류 정정 코딩 오류들과 같은 오류들 또는 판독 방해 이벤트들 때문에 리사이클링될 비휘발성 메모리의 영역들을 선택한다. 다른 실시예들에서, 솔리드-스테이트 드라이브 컨트롤러는 프로그램/소거 카운트들 및/또는 사용 공간 통계와 같은 비휘발성 메모리의 하나 이상의 통계를 호스트에게 전달할 수 있다. 예를 들어, 통계는 솔리드-스테이트 드라이브 컨트롤러의 논리 블록 어드레스 공간의 예약된 부분을 통해, 또는 통계를 판독 및/또는 기록하는 특수 커맨드들에 의해서 SMART 로그들과 같은 로그들로서 전달된다. 몇몇 실시예들 및/또는 사용 시나리오들에서, 통계를 호스트에게 전달함으로 인해 호스트는 리사이클링될 비휘발성 메모리의 영역들을 선택하는 것이 가능하게 되며, 솔리드-스테이트 드라이브 컨트롤러는 호스트로부터의 통계를 유지하는 것을 오프로드(offload) 할 수 있게 된다.According to various embodiments, the host selects areas of non-volatile memory to be recycled; The solid-state drive controller selects areas of non-volatile memory to be recycled; The host selects the areas of the non-volatile memory to be recycled for the first reason and the solid-state drive controller selects the areas of the non-volatile memory to be recycled for a different second reason; There may also be any combination of the foregoing. In one example, all selections of areas of the non-volatile memory to be recycled are performed at the host. In another example, the host selects areas of non-volatile memory to be recycled for garbage collection, and the solid-state drive controller selects areas of non-volatile memory to be recycled for ware-leveling. In another example, the host selects areas of non-volatile memory to be recycled for garbage collection and ware-leveling, and the solid-state drive controller selects the areas of the non-volatile memory to be recycled for exceptional situations and / or program failures, excessive error correction coding errors Selects areas of non-volatile memory to be recycled due to errors or read disturb events. In other embodiments, the solid-state drive controller may communicate one or more statistics of non-volatile memory, such as program / erase counts and / or usage spatial statistics, to the host. For example, the statistics are transmitted as logs, such as SMART logs, via a reserved portion of the logical block address space of the solid-state drive controller, or by special commands to read and / or write statistics. In some embodiments and / or usage scenarios, by passing statistics to the host, it becomes possible for the host to select areas of non-volatile memory to be recycled, and the solid-state drive controller maintains statistics from the host So that it can be offloaded.
몇몇 실시예들에서, 솔리드-스테이트 드라이브 컨트롤러는 호스트와 독립적으로 비휘발성 메모리의 적어도 일부분을 리사이클링할 수 있으며, 업데이트된 물리적 위치들을 호스트에게 전달할 수 있다. 예를 들어, 예외적 상황들 및/또는 프로그램 장애들, 과도한 오류 정정 코딩 오류들, 또는 판독 방해 이벤트들과 같은 오류들에 대한 응답으로, 솔리드-스테이트 드라이브 컨트롤러는 리사이클링되어야 하는 비휘발성 메모리의 영역을 결정한다. 솔리드-스테이트 드라이브 컨트롤러는 비휘발성 메모리의 영역 내에 있는 헤더들을 판독하여, 비휘발성 메모리의 영역 내에 계속 현재 진행되고 있는 데이터를, 비휘발성 메모리의 상이한 부분 내의 각각의 새로운 물리적 위치들로 재위치 시킨다. 각종 실시예들에 따르면, 하나 이상의 구현들에서, 솔리드-스테이트 드라이브는 맵을 유지하고 계속 현재 진행되고 있는 데이터의 각각의 새로운 물리적 위치들을 반영하도록 맵을 업데이트시킬 수 있고; 솔리드-스테이트 드라이브 컨트롤러는 솔리드-스테이트 드라이브 컨트롤러에 의해 재위치된 데이터에 대한 별개의 부분 맵을 유지하고, 상기 별개의 부분 맵은 비휘발성 메모리의 영역 내의 계속 현재 진행되고 있는 데이터의 물리적 위치들의 표시들을 각각의 새로운 물리적 위치들과 연관시킨 것이며; 솔리드-스테이트 드라이브 컨트롤러는 헤더들로부터의 정보, 예를 들면 계속 현재 진행되고 있는 데이터의 각각의 식별자들과 함께 각각의 새로운 물리적 위치들을 호스트에게 전달하고, 상기 호스트는 맵을 업데이트하며; 전술한 것들의 임의의 조합을 포함한다. 유리하게는, 계속 현재 진행되고 있는 데이터는, 비휘발성 메모리의 영역이 소거될 때까지, 비휘발성 메모리의 영역 및 각각의 새로운 물리적 위치들 모두에서 액세스할 수 있다. 다른 실시예들에서, 비휘발성 메모리의 영역은, 각각의 새로운 물리적 위치들로 맵이 업데이트되는 이후 까지 소거되지 않는다. 예를 들어, 솔리드-스테이트 드라이브 컨트롤러에게는, 호스트에 의해, 맵이 업데이트되었으며, 그 후에만 솔리드-스테이트 드라이브 컨트롤러가 비휘발성 메모리의 영역을 소거할 수 있다는 것이 통지된다.In some embodiments, the solid-state drive controller may recycle at least a portion of the non-volatile memory independently of the host, and may communicate updated physical locations to the host. For example, in response to errors, such as exceptional situations and / or program failures, excessive error correction coding errors, or read disturb events, the solid-state drive controller may determine the area of nonvolatile memory that must be recycled . The solid-state drive controller reads the headers in the area of the non-volatile memory and relocates the data currently in progress in the area of the non-volatile memory to each new physical location in the different part of the non-volatile memory. According to various embodiments, in one or more implementations, the solid-state drive may maintain a map and update the map to reflect each new physical location of data currently in progress; The solid-state drive controller maintains a separate partial map for the data relocated by the solid-state drive controller, and the separate partial map represents an indication of the physical locations of the data that are still in progress in the area of the non-volatile memory With each new physical location; The solid-state drive controller delivers each new physical location to the host along with respective identifiers of information from the headers, e.g., the current ongoing data, and the host updates the map; And any combination of the foregoing. Advantageously, the ongoing data is accessible in both the area of the non-volatile memory and in each new physical location until the area of the non-volatile memory is erased. In other embodiments, the area of the non-volatile memory is not erased until after the map is updated to each new physical location. For example, the solid-state drive controller is notified that the map has been updated by the host, and only then the solid-state drive controller can erase the area of the non-volatile memory.
각종 실시예들에서, 호스트는 예를 들면, 판독될 다수의 비휘발성 메모리 페이지들, 또는 호스트로 전송될 다수의 추출 헤더들을 요청하는 것에 의해, 리사이클링을 위해 비휘발성 메모리로부터 비휘발성 메모리 페이지들의 판독을 제어한다(단계 1410). 각종 실시예들에 따르면, 호스트는 적어도 몇몇의 헤더 파싱을 수행하며(단계 1418) 및/또는 솔리드-스테이트 드라이브 컨트롤러는 예를 들면, 추출된 헤더들을 사전-처리 및/또는 재포맷팅 및/또는 필터링하는 것에 의해 적어도 몇몇의 헤더 파싱을 수행한다. 다른 실시예들에서, 호스트는 맵 조회를 수행하며(단계 1422) 또한 어떤 데이터가 재기록이 필요한지의 여부를 결정한다. 재기록(단계 1426)은 호스트의 제어하에, 예를 들면, 호스트가 임의의 계속 현재 진행되고 있는 데이터에 대한 "재기록" 커맨드를 전송하는 것에 의해, 솔리드-스테이트 드라이브 컨트롤러에 의해서 수행된다. 재기록 커맨드는 기록 데이터를 구비한다는 것을 제외하고는 기록 커맨드과 유사하며, 재기록 커맨드는 판독 커맨드가 될 비휘발성 메모리 내의 물리적 위치(데이터가 리사이클링되고 있는 위치)에 대한 표시를 포함한다. 기록 커맨드과 유사하게, 재기록 커맨드는 재기록되는 데이터의 새로운 물리적 위치의 표시를 반환하며, 호스트는 단계 1430을 수행하여 맵을 업데이트한다. 호스트가 프로세스 1400의 많은 부분을 수행하는 관련 실시예들에서, 재기록 커맨드는 계속 현재 진행되고 있는 데이터에 대한 솔리드-스테이트 드라이브 컨트롤러 내의 버퍼 위치를 포함한다.In various embodiments, a host may read non-volatile memory pages from non-volatile memory for recycling, for example, by requesting a number of non-volatile memory pages to be read, or a number of extraction headers to be sent to the host (Step 1410). According to various embodiments, the host performs at least some header parsing (step 1418) and / or the solid-state drive controller may, for example, pre-process and / or reformat and / To perform at least some header parsing. In other embodiments, the host performs a map lookup (step 1422) and also determines which data is required to be rewritten. The rewriting (step 1426) is performed by the solid-state drive controller under control of the host, for example, by the host sending a "rewrite" The rewrite command is similar to the write command except that it has write data, and the rewrite command includes an indication to the physical location (the location where the data is being recycled) in the non-volatile memory to be the read command. Similar to the write command, the rewrite command returns an indication of the new physical location of the data being rewritten, and the host performs
몇몇 실시예들에서, 비표준 및/또는 벤더-고유 커맨드들이 호스트와 솔리드-스테이트 드라이브 컨트롤러 간의 통신 프로토콜의 일부로서 사용된다. 각종 실시예들에 따르면, 통신 프로토콜은 다음 중의 하나 이상의 것이다: SATA, SCSI(small computer system interface), SAS, PCIe(peripheral component interconnect express), NVM 익스플레스(비휘발성 메모리), SOP(SCSI Over PCIe), 모바일 익스플레스, USB, UFS, eMMC(embedded multimedia card), 이더넷, 파이버 채널, 또는 2개의 전자 디바이스들 간의 통신에 적절한 임의의 다른 프로토콜. 일 예에서, 호스트와 솔리드-스테이트 드라이브 컨트롤러 간의 물리적 위치에 대한 표시의 전달은 벤더-고유 버전의 표준 판독 및 기록 커맨드들과 같은, 벤더-고유 커맨드들을 사용한다. 다른 예에서, 리사이클링을 위해 추출된 헤더들은 로그 페이지들(예컨대, SMART 로그 페이지들)로 솔리드-스테이트 드라이브 컨트롤러로부터 호스트로 전달된다. 또 다른 예에서, 추출된 헤더들은 판독 데이터와 유사하게 취급되지만, 벤더-고유의 "판독 추출된 헤더들(read extracted headers)" 커맨드으로 판독된다.In some embodiments, non-standard and / or vendor-specific commands are used as part of the communication protocol between the host and the solid-state drive controller. According to various embodiments, the communication protocol is one or more of the following: SATA, small computer system interface (SCSI), SAS, peripheral component interconnect express (PCIe), NVM expres- sion (nonvolatile memory) PCIe), MobileExpress, USB, UFS, embedded multimedia card (eMMC), Ethernet, Fiber Channel, or any other protocol suitable for communication between two electronic devices. In one example, the delivery of an indication of the physical location between the host and the solid-state drive controller uses vendor-specific commands, such as the vendor-specific version of the standard read and write commands. In another example, the headers extracted for recycling are passed from the solid-state drive controller to the host as log pages (e.g., SMART log pages). In another example, the extracted headers are handled similarly to read data, but are read with vendor-specific "read extracted headers" commands.
각종 실시예들에 따르면, 프로세스 1200 및/또는 프로세스 1300 및/또는 프로세스 1400의 단계들 중의 임의의 것은 다음 중의 하나 이상에 의해 수행된다: 호스트가 솔리드-스테이트 드라이브 컨트롤러에 커플링됨; 솔리드-스테이트 드라이브 컨트롤러가 호스트에 커플링됨; 및 전술한 것들의 임의의 조합. 일 예에서, 맵 조회 및 맵 유지관리는 호스트에서 수행된다. 다른 예에서, 판독 유닛들의 개수의 결정은 호스트 및 솔리드-스테이트 드라이브 컨트롤러 중의 어느 하나 또는 양쪽 모두에서 수행된다. 또 다른 예에서, 기록 데이터를 비휘발성 메모리 페이지들로 타일링하는 것(예컨대, 단계 1222)은 솔리드-스테이트 드라이브 컨트롤러에서 수행된다. 일 예에서, 기록 데이터는 호스트의 제어하에서 솔리드-스테이트 드라이브 컨트롤러의 버퍼 내의 비휘발성 메모리 페이지 이미지들로 타일링된다. 다른 예에서, 판독 유닛들로부터 데이터를 추출하는 것(예컨대, 단계 1326)은 솔리드-스테이트 드라이브 컨트롤러에서 수행된다. 또 다른 예에서, 압축(예컨대, 단계 1214) 및 압축 해제(예컨대, 단계 1330)는 솔리드-스테이트 드라이브 컨트롤러에서 수행된다. 일 예에서, 통계는 솔리드-스테이트 드라이브 컨트롤러에서 유지된다(예컨대, 단계 1238 또는 단계 1338). 다른 예에서, 리사이클링할 비휘발성 메모리의 영역들을 결정하는 것(예컨대, 단계 1406)은 호스트에서 수행된다. 또 다른 예에서, 리사이클링된 계속 현재 진행되고 있는 데이터를 이전의 위치에서 새로운 위치로 이전하는 것은(예컨대, 단계 1426) 솔리드-스테이트 드라이브 컨트롤러에서 수행된다.According to various embodiments, any of the steps of process 1200 and / or
몇몇 실시예들에서, 호스트 및/또는 솔리드-스테이트 드라이브 컨트롤러는 비휘발성 메모리의 복수의 영역들 각각을 명시된 특성들 및/또는 특징들과 연관시키는 테이블을 유지한다. 일 예에서, 테이블은 비휘발성 메모리의 영역들 각각을 복수의 코드 레이트들(오류 정정 코드 강도들) 중의 특정한 것과 연관시키며, 이에 따라 영역들의 각각에서 저장되는 데이터의 양이 영역들 각각의 "건강성(health)"에 따라 달라질 수 있게 한다. 더 건강한 영역들은 더 높은(더 약한) 코드 레이트를 사용하며 또한 더 많은 사용자 데이터를 저장할 수 있고, 더 약한 영역들은 더 낮은(더 강한) 코드 레이트를 사용하며 또한 더 적은 사용자 데이터를 저장할 수 있다(그러나, 더 많은 오류들을 정정할 수 있다). 다른 예에서, 테이블은 결함이 있거나 장애가 있어서 사용되지 않아야 하는 영역들의 것들을 나타낸다. 예를 들어, NAND와 플래시에 있어서, NAND 플래시의 복수의 블록들 중의 일부는 NAND 플래시가 신규한 것인 경우에도 결함이 있을 수 있으며, 가능하게는 블록들 중의 다른 것들은 NAND 플래시의 수명 동안에 고장이 날 수도 있다. 테이블은 복수의 NAND 플래시 디바이스들에 걸쳐 순차적으로 데이터를 기록할 경우(예컨대, 스트리핑), 건너뛰어야 하는 블록들을 나타낸다.In some embodiments, the host and / or solid-state drive controller maintains a table that associates each of the plurality of areas of non-volatile memory with the specified characteristics and / or features. In one example, the table associates each of the regions of non-volatile memory with a particular one of a plurality of code rates (error correction code intensities), such that the amount of data stored in each of the regions is & Health ". The healthier areas use a higher (weaker) code rate and can also store more user data, the weaker areas use a lower (stronger) code rate and can also store less user data However, more errors can be corrected). In another example, the table represents those of the areas that should be unused because of defects or failures. For example, in NAND and flash, some of the plurality of blocks of the NAND flash may be defective even if the NAND flash is novel, and possibly others of the blocks may fail during the life of the NAND flash You can fly. The table shows the blocks that must be skipped when writing data sequentially (e.g., striping) across a plurality of NAND flash devices.
몇몇 실시예들에서, 맵의 상위-레벨 부분은 호스트에서 유지되며, 맵의 하위-레벨 부분은 솔리드-스테이트 드라이브 컨트롤러에서 유지된다. 맵의 상위-레벨 부분은 라벨들(또는 논리 블록 어드레스들)을 비휘발성 메모리 내의 물리적 위치들에 대한 각각의 표시들과 연관시킨다. 그 후에, 비휘발성 메모리 내의 물리적 위치들에 대한 표시들은, 맵의 하위-레벨 부분을 사용하여 솔리드-스테이트 드라이브 컨트롤러에 의해 더 해석되어 판독 및/또는 기록될 비휘발성 메모리의 물리적 부분들을 결정하도록 한다. 호스트의 관점에서, 물리적 위치들에 대한 표시들은, 솔리드-스테이트 드라이브 컨트롤러가 물리적 위치들에 대한 표시들 중의 하나를 기록시에 특정 데이터 객체에 할당하고, 솔리드-스테이트 드라이브 컨트롤러는 대응하는 물리적 위치에 대한 표시가 다시 주어졌을 때 특정 데이터 객체를 반환할 수 있다는 점에서, 오페이크 핸들(opaque handle)들의 역할을 한다. 환언하면, 비휘발성 메모리 내의 사용자 데이터 구성의 특성에 대한 지식은 호스트로부터 숨겨져 있다. 유리하게는, 솔리드-스테이트 드라이브 컨트롤러는 예를 들면, 코드 레이트들을 선택하고, 양호하지 못한 블록들 또는 그 밖의 호스트에 의해 사용되지 못하는 비휘발성 메모리의 부분들을 선택하는 등의, 비휘발성 메모리의 적어도 일부 관리를 수행할 수 있다.In some embodiments, the high-level portion of the map is maintained at the host and the low-level portion of the map is maintained at the solid-state drive controller. The high-level portion of the map associates labels (or logical block addresses) with respective indications of physical locations in non-volatile memory. Thereafter, indications for physical locations in the non-volatile memory cause the solid-state drive controller to further analyze the physical portions of the non-volatile memory to be read and / or written using the lower-level portion of the map . In terms of the host, the indications for the physical locations are that the solid-state drive controller assigns one of the indications for physical locations to a particular data object at the time of writing, and the solid- It acts as an opaque handle in that it can return a specific data object when it is given again. In other words, knowledge of the nature of the user data organization in the non-volatile memory is hidden from the host. Advantageously, the solid-state drive controller is capable of selecting at least one of non-volatile memory, such as, for example, selecting code rates and selecting portions of non-volatile memory that are not used by bad blocks or other hosts Some management can be done.
일 예에서, 비휘발성 메모리의 복수의 블록들 중의 특정 블록이 먼저 사용되는 경우, 솔리드-스테이트 드라이브 컨트롤러는 그 특정 블록의 복수의 페이지들 각각을 복수의(예컨대, 8개의) 각각의 판독 유닛들로 분할하고, 그 특정 블록의 오류 정정을 위해 복수의 코드 레이트들 중의 특정 코드 레이트를 사용한다. 그 후에, 특정 블록이 더 마모된 이후에 재사용되는 경우, 솔리드-스테이트 드라이브 컨트롤러는 특정 블록의 복수의 페이지들 각각을 복수의(예컨대, 7개의) 각각의 판독 유닛들로 분할하고, 그 특정 블록의 오류 정정을 위해 코드 레이트들 중의 더 강한 코드 레이트를 사용한다. 양쪽 모두의 경우, 호스트가 특정 블록에 저장되는 데이터를 기록하는 경우, 특정 블록 내의 물리적 위치에 대한 표시는, 특정 블록의 페이지들이 분할되는 판독 유닛들의 개수에 독립적이다.In one example, when a particular block of the plurality of blocks of the non-volatile memory is used first, the solid-state drive controller sends each of the plurality of pages of the particular block to a plurality (e.g., eight) And uses a specific code rate among a plurality of code rates for error correction of the specific block. Thereafter, when a particular block is reused after more wear, the solid-state drive controller divides each of the plurality of pages of a particular block into a plurality of (e.g., seven) respective read units, Lt; RTI ID = 0.0 > code rate. ≪ / RTI > In both cases, when the host records data stored in a particular block, the indication of the physical location within that particular block is independent of the number of read units into which the pages of the particular block are divided.
다른 예에서, 가변-사이즈 데이터가 비휘발성 메모리의 복수의 블록들 중의 복수의 블록들을 스패닝하는 경우, 호스트에 의해 사용되는 물리적 위치들에 대한 표시들은, 비휘발성 메모리의 특정 블록이 사용되고 있는지 또는 양호하지 못한 것으로 표시되어 사용되지 못하는지의 여부에 대한 지식에 독립적이다. 이 다른 예에 대해 계속 설명하면, 비휘발성 메모리의 복수의 다이 중의 특정 블록인 블록 7이 양호하지 못하여 사용되지 못하는 것으로 가정한다. 이 다이 중의 이전의 블록인 블록 6 내의 데이터가 후속 블록으로 스패닝하는 경우, 솔리드-스테이트 드라이브 컨트롤러는 그 특정 다이의 블록 6을 사용한다. 이전의 다이의 블록 7 내의 데이터가 후속의 블록으로 스패닝하는 경우, 솔리드-스테이트 드라이브 컨트롤러는 특정 다이의 블록 7을 건너 뛰고서 다이의 다음 블록인 블록 7 내의 데이터에서 계속 행한다. 호스트는 어떤 블록들로 데이터가 스패닝하는 지에 대한 지식을 갖고 있지 않다.In another example, when the variable-size data spans a plurality of blocks of the plurality of blocks of the non-volatile memory, indications of physical locations used by the host may indicate whether a particular block of non-volatile memory is being used, It is independent of knowledge of whether or not it is marked as not being used. To continue with this other example, it is assumed that block 7, which is a specific block among a plurality of dies of the non-volatile memory, is not good and is not used. If the data in block 6, which is the previous block of this die, spans into subsequent blocks, the solid-state drive controller uses block 6 of that particular die. If the data in block 7 of the previous die spans into a subsequent block, the solid-state drive controller skips block 7 of the particular die and continues on to the data in block 7, which is the next block of the die. The host does not have knowledge of which blocks the data spans.
각종 실시예들에 따르면, 판독 스크럽(read scrub) 및 리사이클링과 같은 백그라운드 동작들이 호스트, 솔리드-스테이트 드라이브 컨트롤러, 및 그들의 임의의 조합 중의 하나 이상에 의해 수행된다.According to various embodiments, background operations such as read scrub and recycling are performed by one or more of a host, a solid-state drive controller, and any combination thereof.
각종 실시예들에 따르면, 솔리드-스테이트 드라이브 컨트롤러의 호스트의 및/또는 프로세서의 동작들은, 하나 이상의 중앙 처리 장치들 중의 임의의 것, 하나 이상의 하드웨어 유닛들, 및/또는 전술한 것들의 임의의 조합에 의해 수행된다.According to various embodiments, operations of the host and / or processor of the solid-state drive controller may be performed using any of one or more central processing units, one or more hardware units, and / or any combination of the foregoing Lt; / RTI >
각종 실시예들에 따르면, 호스트 및/또는 솔리드-스테이트 드라이브 컨트롤러는 다음 중의 하나 이상을 사용할 수 있다: 전통적 플래시 변환 계층; 가변-사이즈 플래시 변환 계층; 순차적 판독 최적화된 가변-사이즈 플래시 변환 계층; 비휘발성 메모리의 상이한 물리적 부분들 내의 임의의 다른 타입의 플래시 변환 계층, 비휘발성 메모리에 대한 다이렉트 액세스, 전술한 것들의 임의의 조합; 솔리드-스테이트 드라이브 컨트롤러의 논리적 어드레스 공간의 상이한 논리적 부분들에서 전술한 것들의 임의의 조합; 비휘발성 메모리에 대한 로우(raw) 물리적 액세스; 및 전술한 것들의 임의의 조합.According to various embodiments, the host and / or solid-state drive controller may use one or more of the following: a traditional flash translation layer; A variable-size flash conversion layer; A sequential read-optimized variable-size flash translation layer; Any other type of flash translation layer within different physical portions of non-volatile memory, direct access to non-volatile memory, any combination of the foregoing; Any combination of the foregoing in different logical portions of the logical address space of the solid-state drive controller; Raw physical access to non-volatile memory; And any combination of the foregoing.
각종 실시예들에 따르면, 호스트 기록 데이터는 비휘발성 메모리에 기록되기 이전에 임의적 및/또는 선택적으로 암호화되며, 비휘발성 메모리로부터 판독된 이후에 임의적 및/또는 선택적으로 복호화된다. 다른 실시예들에서, 호스트 기록 데이터의 임의적 및/또는 선택적 압축 이후에 암호화가 일어나며, 호스트에게 반환할 판독 데이터의 임의적 및/또는 선택적 압축 해제 이전에 복호화가 일어난다.According to various embodiments, the host write data is optionally and / or selectively encrypted prior to being written to the non-volatile memory, and is optionally and / or selectively decrypted after being read from the non-volatile memory. In other embodiments, encryption occurs after arbitrary and / or selective compression of the host write data and decryption occurs before arbitrary and / or selective decompression of read data to be returned to the host.
본 명세서에서 몇몇 예시적 실시예들은 솔리드-스테이트 드라이브들 및 솔리드-스테이트 드라이브 컨트롤러들을 사용하였지만, 전술한 기술들은 다른 입/출력 디바이스들 및/또는 하드 디스크 드라이브들과 같은 데이터 저장 디바이스들에 일반적으로 적용될 수 있다. 이러한 입/출력 디바이스들에서 사용되는 비휘발성 메모리는, 각종 실시예들에서, "솔리드-스테이트" 비휘발성 메모리 이외에, 예를 들면 하드 디스크 드라이브들의 자기 플래터(예컨대, 싱글드 자기 기록(shingled magnetic recording)을 사용하는 하드 디스크 드라이브들)이다.Although some exemplary embodiments herein use solid-state drives and solid-state drive controllers, the techniques described above are generally applicable to other input / output devices and / or data storage devices such as hard disk drives Can be applied. The non-volatile memory used in such input / output devices may, in various embodiments, be used in addition to "solid-state" nonvolatile memory such as magnetic platters of hard disk drives (e.g., shingled magnetic recording )). ≪ / RTI >
몇몇 실시예들에서, 멀티-노드 저장 디바이스 또는 그 부분(들), 예를 들어 프로세서(예컨대, CPU), 입/출력 컨트롤러(예컨대, RAID-온-칩 다이)와의 연동을 위해 인에이블되는 입/출력 디바이스의 비휘발성 메모리 컨트롤러 또는 솔리드-스테이트 디스크 또는 하드 디스크 드라이브에 의해 수행되는 동작들의 전부 또는 일부의 각종 조합 그리고 프로세서, 마이크로프로세서, 시스템-온-칩, 응용 주문형 집적 회로, 하드웨어 액셀러레이터(accelerator) 또는 전술한 동작들의 전부 또는 일부를 제공하는 다른 회로의 부분들의 각종 조합이, 컴퓨터 시스템에 의한 프로세싱과 호환가능한 사양에 의해 특정된다. 그 사양은 하드웨어 디스크립션(description) 언어, 회로 디스크립션들, 네트리스트(netlist) 디스크립션들, 마스크 디스크립션들 또는 레이아웃 디스크립션들과 같은 다양한 디스크립션들에 따른다. 예시적인 디스크립션들은, 베릴로그(Verilog), VHDL(very high speed integrated circuit hardware description language), SPICE(simulation program with integrated circuit emphasis), PSpice와 같은 SPICE 변형들, IBIS(input/output buffer information specification), LEF(library exchange format), DEF(design exchange format), GDS-II(graphic database system-II), OASIS(open artwork system interchange 표준) 또는 다른 디스크립션들을 포함한다. 다양한 실시예들에서, 프로세싱은 하나 이상의 집적 회로들의 포함을 위해 적합한 로직 및/또는 회로를 생성하고, 검증하거나 특정하기 위해 해석(interpretation), 컴필레이션, 시뮬레이션 및 합성의 임의의 조합을 포함한다. 각종 실시예들에 따른 각각의 집적 회로는 다양한 기술들에 따라 설계가능 및/또는 제조가능하다. 기술들은 (필드 또는 마스크 프로그램가능한 게이트 어레이 집적 회로와 같은) 프로그램가능 기술, (전적 또는 부분적 셀-기반 집적 회로와 같은) 세미-커스텀(semi-custom) 기술 및 (실질적으로 특화되는 집적 회로와 같은) 풀-커스텀(full-custom) 기술 및 이들의 임의의 조합 또는 집적 회로들의 설계 및/또는 제조와 호환가능한 임의의 다른 기술을 포함한다.In some embodiments, an input enabled for interoperation with a multi-node storage device or portion (s) thereof, e.g., a processor (e.g., CPU), input / output controller (e.g., RAID- A variety of combinations of all or a portion of operations performed by a non-volatile memory controller or a solid-state disk or a hard disk drive of a processor, a microprocessor, a system-on-chip, an application- specific integrated circuit, a hardware accelerator ) Or various combinations of portions of other circuitry that provide all or part of the above-described operations are specified by a specification compatible with processing by a computer system. The specification follows various descriptions, such as a hardware description language, circuit descriptions, netlist descriptions, mask descriptions, or layout descriptions. Exemplary descriptions include SPICE variants such as Verilog, very high speed integrated circuit hardware description language (VHDL), simulation program with integrated circuit emphasis (SPICE), PSpice, input / output buffer information specification (IBIS) Library exchange format (LEF), design exchange format (DEF), graphic database system-II (GDS-II), open artwork system interchange standard (OASIS), or other descriptions. In various embodiments, processing includes any combination of interpretation, compilation, simulation, and synthesis to generate, verify, or specify suitable logic and / or circuitry for inclusion of one or more integrated circuits. Each integrated circuit according to various embodiments may be designed and / or manufactured in accordance with various techniques. Techniques may be implemented using programmable techniques (such as field or mask programmable gate array integrated circuits), semi-custom techniques (such as fully or partially cell-based integrated circuits), and / ) Full-custom techniques and any combination thereof or any other technology compatible with the design and / or manufacture of integrated circuits.
도 1 내지 도 14의 도면에 의해 수행되는 기능들은, 본 상세한 설명의 교시에 따라 프로그래밍되는 종래의 범용 프로세서, 디지털 컴퓨터, 마이크로프로세서, 마이크로컨트롤러, 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 diagrams of Figures 1 to 14 may be implemented using a conventional general purpose processor, a digital computer, a microprocessor, a microcontroller, a reduced instruction set computer (RISC) processor, a complex instruction set computer) 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 / Which will be apparent to those skilled in the relevant art (s). Suitable software, firmware, coding, routines, instructions, opcodes, microcode, and / or program modules may be readily prepared by skilled programmers based on the teachings of the present invention, Will be apparent to those skilled in the art. Generally, software is executed from one medium or several media by one or more machine implementation processors.
또한, 본 발명은 본 명세서에서 기술된 바와 같은 ASIC(application specific integrated circuit)들, 플랫폼 ASIC들, FPGA(field programmable gate arrays)들, PLD(programmable logic device)들, CPLD(complex programmable logic device)들, SOG(sea-of-gate)들, RFIC(radio frequency integrated circuit)들, ASSP(application specific standard product)들, 하나 이상의 단일 집적 회로들, 플립-칩 모듈들 및/또는 멀티-칩 모듈들로 배열되는 하나 이상의 칩들 또는 다이의 마련에 의해서, 또는 종래의 컴포넌트 회로들의 적절한 네트워크를 상호연결하는 것에 의해 구현될 수 있으며, 이것의 수정들은 본 기술분야(들)에서의 당업자에게 용이하게 명백할 것이다.In addition, the present invention may be implemented in a processor, such as application specific integrated circuits (ASICs), platform ASICs, field programmable gate arrays (FPGAs), programmable logic devices (PLDs), complex programmable logic devices , Sea-of-gates (SOG), radio frequency integrated circuits (RFIC), application specific standard products (ASSPs), one or more single integrated circuits, flip-chip modules and / By arranging one or more chips or dies to be arranged, or by interconnecting 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)들, UVPROM(ultra-violet erasable programmable ROM)들, 플래시 메모리, 자기 카드들, 광학 카드들, 및/또는 전자적 인스트럭션들을 저장하는데 적절한 임의의 타입의 매체를 포함할 수 있으며, 이에 한정되지 않는다.Accordingly, the present invention may include a storage medium or media including instructions that may be used to program a machine to perform one or more processes or methods in accordance with the present invention, and / or a computer product that may be a transmission medium or media . Executing the instructions contained in the computer product by the machine, along with the circuitry of the circuitry of the peripheral circuitry, may include one or more files on the storage medium representing the physical object or substance, such as acoustic and / or visual depiction, and / The input data can be converted into the above output signals. The storage medium may be any type of disk and circuitry including, but not limited to, floppy disks, hard drives, magnetic disks, optical disks, CD-ROMs, DVDs and magneto-optical disks, flash memory, magnetic cards, optical cards, and / or electronic instructions (EPROMs), electrically erasable programmable ROMs (EEPROMs) But is not limited to, any type of media suitable for such media.
본 발명의 구성요소들은 하나 이상의 디바이스들, 유닛들, 컴포넌트들, 시스템들, 머신들 및/또는 장치들의 일부 또는 전부를 형성할 수 있다. 이 디바이스들은 서버들, 워크스테이션들, 스토리지 어레이 컨트롤러들, 스토리지 시스템들, 개인용 컴퓨터들, 랩탑 컴퓨터, 노트북 컴퓨터들, 팜 컴퓨터들, PDA(personal digital assistant)들, 휴대용 전자 디바이스들, 배터리 전원공급형 디바이스들, 셋-탑 박스들, 인코더들, 디코더들, 트랜스코더들, 컴프레서들, 디컴프레서들, 프리-프로세서들, 포스트-프로세서들, 송신기들, 수신기들, 송수신기들, 암호 회로들, 휴대 전화들, 디지털 카메라들, 포지셔닝 및/또는 네비게이션 시스템들, 의료 기기, 헤드 업 디스플레이들, 무선 디바이스들, 오디오 녹음 디바이스, 오디오 저장 디바이스 및/또는 오디오 재생 디바이스, 비디오 녹화 디바이스, 비디오 저장 디바이스 및/또는 비디오 재생 디바이스, 게임 플랫폼들, 주변장치들 및/또는 멀티-칩 모듈들을 포함할 수 있으며, 이에 한정되지 않는다. 관련 기술분야(들)의 당업자는 본 발명의 구성요소들이 특정 애플리케이션의 기준을 충족하는 다른 타입의 디바이스들에서 구현될 수도 있음을 이해할 것이다.The components of the invention may form part or all of one or more devices, units, components, systems, machines and / or devices. These devices may include servers, workstations, storage array controllers, storage systems, personal computers, laptop computers, notebook computers, palm computers, personal digital assistants, portable electronic devices, Transceivers, transceivers, cipher circuits, transmitters, receivers, transmitters, receivers, transmitters, transceivers, Mobile phones, digital cameras, positioning and / or navigation systems, medical devices, head-up displays, wireless devices, audio recording devices, audio and / or audio reproduction devices, video recording devices, / RTI > and / or video playback devices, game platforms, peripherals and / or multi-chip modules But is not limited thereto. Those skilled in the relevant art (s) will appreciate that the components of the present invention may be implemented in other types of devices that meet the criteria of a particular application.
용어 "할 수 있다" 및 용어 "일반적으로"가 용어 "이다"와 함께 사용되는 경우, 이 동사는 그 설명이 예시적인 것을 의도함을 전달하기 위한 것이고, 본 명세서에 제시된 특정 예들 및 본 명세서에 기초하여 도출될 수 있는 다른 예들 모두를 포괄하기에 충분히 넓은 것으로 여겨져야 한다. 본 명세서에서 사용되는 용어 "할 수 있다" 및 용어 "일반적으로"는 반드시 바람직한 사항을 나타내는 것으로 해석되어서는 아니 되며 가능하게는 대응하는 구성요소를 생략 가능함을 나타낼 수 있다.Where the term "can" and the term "generally" are used in conjunction with the word " is ", the verb is intended to convey that the description is intended to be illustrative and not limitative of the specific examples presented herein Should be considered broad enough to encompass all of the other examples that can be derived on the basis of. As used herein, the term " may "and the term " generally" are not necessarily to be construed as indicating preferred features, and may indicate that possible corresponding components may be omitted.
본 발명은 그것의 실시예들을 참조하여 구체적으로 도시 및 기술되었지만, 본 발명의 범위로부터 벗어나지 않는 범위 내에서 형태 및 세부사항의 다양한 변형들이 이루어질 수 있음을 당업자는 이해할 것이다.While the 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 details may be made therein without departing from the scope of the invention.
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US201361866672P | 2013-08-16 | 2013-08-16 | |
| US61/866,672 | 2013-08-16 | ||
| US201361873357P | 2013-09-03 | 2013-09-03 | |
| US61/873,357 | 2013-09-03 | ||
| US201361888681P | 2013-10-09 | 2013-10-09 | |
| US61/888,681 | 2013-10-09 | ||
| US201361893383P | 2013-10-21 | 2013-10-21 | |
| US61/893,383 | 2013-10-21 | ||
| US14/060,799US9329991B2 (en) | 2013-01-22 | 2013-10-23 | Translation layer partitioned between host and controller |
| US14/060,799 | 2013-10-23 |
| Publication Number | Publication Date |
|---|---|
| KR20150020136Atrue KR20150020136A (en) | 2015-02-25 |
| KR102328612B1 KR102328612B1 (en) | 2021-11-17 |
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| KR1020140105759AActiveKR102328612B1 (en) | 2013-08-16 | 2014-08-14 | Translation layer partitioned between host and controller |
| Country | Link |
|---|---|
| JP (1) | JP6443794B2 (en) |
| KR (1) | KR102328612B1 (en) |
| CN (1) | CN104679446B (en) |
| DE (1) | DE102014111670A1 (en) |
| GB (1) | GB2519211A (en) |
| TW (1) | TWI637262B (en) |
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN107861752A (en)* | 2017-11-29 | 2018-03-30 | 英业达科技有限公司 | Server system |
| WO2019125961A1 (en)* | 2017-12-20 | 2019-06-27 | Micron Technology, Inc. | Utilizing write stream attributes in storage write commands |
| KR102267477B1 (en)* | 2020-02-20 | 2021-06-22 | 삼성전자주식회사 | Storage device and operating method of the same |
| CN114077547A (en)* | 2020-08-17 | 2022-02-22 | 西部数据技术公司 | Hardware compression for host management with partitioned namespaces |
| US11803325B2 (en) | 2018-03-27 | 2023-10-31 | Micron Technology, Inc. | Specifying media type in write commands |
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2016139749A1 (en)* | 2015-03-03 | 2016-09-09 | 株式会社日立製作所 | Computer system and storage control method |
| CN106101096B (en)* | 2016-06-10 | 2022-06-28 | 北京数盾信息科技有限公司 | High-speed encryption module based on interface bus separation |
| US10236909B2 (en)* | 2017-03-31 | 2019-03-19 | Sandisk Technologies Llc | Bit-order modification for different memory areas of a storage device |
| US10534718B2 (en)* | 2017-07-31 | 2020-01-14 | Micron Technology, Inc. | Variable-size table for address translation |
| US10354732B2 (en)* | 2017-08-30 | 2019-07-16 | Micron Technology, Inc. | NAND temperature data management |
| JP6785204B2 (en) | 2017-09-21 | 2020-11-18 | キオクシア株式会社 | Memory system and control method |
| JP6785205B2 (en)* | 2017-09-21 | 2020-11-18 | キオクシア株式会社 | Memory system and control method |
| FR3072476A1 (en)* | 2017-10-13 | 2019-04-19 | Proton World International N.V. | MEMORY LOGIC UNIT FOR FLASH MEMORY |
| JP6982468B2 (en)* | 2017-10-27 | 2021-12-17 | キオクシア株式会社 | Memory system and control method |
| CN108319429B (en)* | 2018-01-10 | 2021-02-19 | 北京思特奇信息技术股份有限公司 | Method for accelerating file reading and computer equipment |
| JP6960877B2 (en) | 2018-03-22 | 2021-11-05 | キオクシア株式会社 | Memory system |
| CN109471596B (en)* | 2018-10-31 | 2022-03-18 | 北京小米移动软件有限公司 | Data writing method, device, equipment and storage medium |
| US11048413B2 (en)* | 2019-06-12 | 2021-06-29 | Samsung Electronics Co., Ltd. | Method for reducing read ports and accelerating decompression in memory systems |
| US11188459B2 (en)* | 2019-12-23 | 2021-11-30 | Micron Technology, Inc. | Data block switching at a memory sub-system |
| GB2603459B (en)* | 2021-01-22 | 2023-05-10 | Advanced Risc Mach Ltd | Data processing systems |
| CN113419678B (en)* | 2021-06-18 | 2024-09-06 | 上海盈方微电子有限公司 | Storage management method for embedded system |
| US12388655B2 (en) | 2023-07-28 | 2025-08-12 | Arm Limited | Data processing systems |
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20090222596A1 (en)* | 2007-12-06 | 2009-09-03 | David Flynn | Apparatus, system, and method for coordinating storage requests in a multi-processor/multi-thread environment |
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| GB9113469D0 (en)* | 1991-06-21 | 1991-08-07 | Anamartic Ltd | Data storage management systems |
| US5943692A (en)* | 1997-04-30 | 1999-08-24 | International Business Machines Corporation | Mobile client computer system with flash memory management utilizing a virtual address map and variable length data |
| JP3766188B2 (en)* | 1997-08-22 | 2006-04-12 | 沖電気工業株式会社 | Logical format conversion method and data storage medium |
| JP2000076117A (en)* | 1998-08-31 | 2000-03-14 | Kano Densan Hongkong Yugenkoshi | Electronic device, control method therefor and storage medium |
| JP2001101071A (en)* | 1999-09-29 | 2001-04-13 | Victor Co Of Japan Ltd | Data storage device using flash type memory and data managing method for the same memory |
| KR100706242B1 (en)* | 2005-02-07 | 2007-04-11 | 삼성전자주식회사 | How to configure the memory system and its run unit address mapping table |
| TW200832440A (en)* | 2007-01-25 | 2008-08-01 | Genesys Logic Inc | Flash memory translation layer system |
| JP5257444B2 (en)* | 2008-03-05 | 2013-08-07 | 日本電気株式会社 | Meta server and file management system |
| US7933303B2 (en) | 2009-06-17 | 2011-04-26 | Sumitomo Electric Industries, Ltd. | Group-III nitride semiconductor laser device, and method for fabricating group-III nitride semiconductor laser device |
| US9058047B2 (en) | 2010-08-26 | 2015-06-16 | Semiconductor Energy Laboratory Co., Ltd. | Semiconductor device |
| WO2012099937A2 (en)* | 2011-01-18 | 2012-07-26 | Lsi Corporation | Higher-level redundancy information computation |
| KR101636785B1 (en)* | 2010-12-01 | 2016-07-06 | 엘에스아이 코포레이션 | Dynamic higher-level redundancy mode management with independent silicon elements |
| US8880839B2 (en)* | 2011-04-14 | 2014-11-04 | International Business Machines Corporation | Writing adjacent tracks to a stride, based on a comparison of a destaging of tracks to a defragmentation of the stride |
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20090222596A1 (en)* | 2007-12-06 | 2009-09-03 | David Flynn | Apparatus, system, and method for coordinating storage requests in a multi-processor/multi-thread environment |
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN107861752A (en)* | 2017-11-29 | 2018-03-30 | 英业达科技有限公司 | Server system |
| US11393510B2 (en) | 2017-12-20 | 2022-07-19 | Micron Technology, Inc. | Encoding data attributes by data stream identifiers |
| WO2019125961A1 (en)* | 2017-12-20 | 2019-06-27 | Micron Technology, Inc. | Utilizing write stream attributes in storage write commands |
| US10878859B2 (en) | 2017-12-20 | 2020-12-29 | Micron Technology, Inc. | Utilizing write stream attributes in storage write commands |
| US11574664B2 (en) | 2017-12-20 | 2023-02-07 | Micron Technology, Inc. | Parsing stream identifiers to determine data stream attributes |
| US11803325B2 (en) | 2018-03-27 | 2023-10-31 | Micron Technology, Inc. | Specifying media type in write commands |
| US12405749B2 (en) | 2018-03-27 | 2025-09-02 | Micron Technology, Inc. | Specifying media type in write commands |
| US11544006B2 (en) | 2020-02-20 | 2023-01-03 | Samsung Electronics Co., Ltd. | Storage device and operating method thereof |
| KR102267477B1 (en)* | 2020-02-20 | 2021-06-22 | 삼성전자주식회사 | Storage device and operating method of the same |
| US11842082B2 (en) | 2020-02-20 | 2023-12-12 | Samsung Electronics Co., Ltd. | Storage device including a plurality of zones having separate compression ratios and operating method thereof |
| US12141480B2 (en) | 2020-02-20 | 2024-11-12 | Samsung Electronics Co., Ltd. | Storage device and operating method thereof including a plurality of zones and operating method thereof |
| KR20220022092A (en)* | 2020-08-17 | 2022-02-24 | 웨스턴 디지털 테크놀로지스, 인코포레이티드 | Host-managed hardware compression with zoned namespaces |
| CN114077547A (en)* | 2020-08-17 | 2022-02-22 | 西部数据技术公司 | Hardware compression for host management with partitioned namespaces |
| CN114077547B (en)* | 2020-08-17 | 2025-06-10 | 闪迪技术公司 | Host-managed hardware compression with partitioned namespaces |
| Publication number | Publication date |
|---|---|
| JP2015036982A (en) | 2015-02-23 |
| JP6443794B2 (en) | 2018-12-26 |
| TW201518944A (en) | 2015-05-16 |
| TWI637262B (en) | 2018-10-01 |
| KR102328612B1 (en) | 2021-11-17 |
| CN104679446A (en) | 2015-06-03 |
| DE102014111670A1 (en) | 2015-02-19 |
| GB201414515D0 (en) | 2014-10-01 |
| GB2519211A (en) | 2015-04-15 |
| CN104679446B (en) | 2017-10-03 |
| Publication | Publication Date | Title |
|---|---|---|
| KR102328612B1 (en) | Translation layer partitioned between host and controller | |
| US9329991B2 (en) | Translation layer partitioned between host and controller | |
| US10346312B2 (en) | Variable-size flash translation layer | |
| US11449252B2 (en) | Method of writing and reading data in an NVM using Lpage identification headers | |
| US11042437B2 (en) | Metadata hardening and parity accumulation for log-structured arrays | |
| KR102307382B1 (en) | Variable-size flash translation layer | |
| KR102155191B1 (en) | Management of and region selection for writes to non-volatile memory | |
| KR101522848B1 (en) | Self-journaling and hierarchical consistency for non-volatile storage | |
| KR101912596B1 (en) | Non-volatile memory program failure recovery via redundant arrays | |
| US9122587B2 (en) | Self recovery in a solid state drive | |
| US9448738B2 (en) | Compression and formatting of data for data storage systems | |
| US10528424B2 (en) | Selectively de-straddling data pages in non-volatile memory | |
| HK1217235A1 (en) | Multiple stream compression and formatting of data for data storage systems | |
| GB2519629A (en) | Variable-size flash translation layer | |
| TW201913353A (en) | Data storing method, memory control circuit unit and memory storage device |
| Date | Code | Title | Description |
|---|---|---|---|
| PA0109 | Patent application | Patent event code:PA01091R01D Comment text:Patent Application Patent event date:20140814 | |
| PG1501 | Laying open of application | ||
| A201 | Request for examination | ||
| PA0201 | Request for examination | Patent event code:PA02012R01D Patent event date:20190710 Comment text:Request for Examination of Application Patent event code:PA02011R01I Patent event date:20140814 Comment text:Patent Application | |
| E902 | Notification of reason for refusal | ||
| PE0902 | Notice of grounds for rejection | Comment text:Notification of reason for refusal Patent event date:20210331 Patent event code:PE09021S01D | |
| E701 | Decision to grant or registration of patent right | ||
| PE0701 | Decision of registration | Patent event code:PE07011S01D Comment text:Decision to Grant Registration Patent event date:20211029 | |
| GRNT | Written decision to grant | ||
| PR0701 | Registration of establishment | Comment text:Registration of Establishment Patent event date:20211115 Patent event code:PR07011E01D | |
| PR1002 | Payment of registration fee | Payment date:20211115 End annual number:3 Start annual number:1 | |
| PG1601 | Publication of registration |