KR20170023734A - 플래시 메모리 플러싱을 개선하는 방법 및 시스템 - Google Patents
플래시 메모리 플러싱을 개선하는 방법 및 시스템 Download PDFInfo
- Publication number
- KR20170023734A KR20170023734A KR1020160107925A KR20160107925A KR20170023734A KR 20170023734 A KR20170023734 A KR 20170023734A KR 1020160107925 A KR1020160107925 A KR 1020160107925A KR 20160107925 A KR20160107925 A KR 20160107925A KR 20170023734 A KR20170023734 A KR 20170023734A
- Authority
- KR
- South Korea
- Prior art keywords
- pointer
- dirty
- request
- flash memory
- area
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C16/00—Erasable programmable read-only memories
- G11C16/02—Erasable programmable read-only memories electrically programmable
- G11C16/06—Auxiliary circuits, e.g. for writing into memory
- G11C16/10—Programming or data input circuits
- G11C16/14—Circuits for erasing electrically, e.g. erase voltage switching circuits
- G11C16/16—Circuits for erasing electrically, e.g. erase voltage switching circuits for erasing blocks, e.g. arrays, words, groups
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0868—Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0871—Allocation or management of cache space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/12—Replacement control
- G06F12/121—Replacement control using replacement algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2237—Vectors, bitmaps or matrices
-
- G06F17/30324—
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0616—Improving the reliability of storage systems in relation to life time, e.g. increasing Mean Time Between Failures [MTBF]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0688—Non-volatile semiconductor memory arrays
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C16/00—Erasable programmable read-only memories
- G11C16/02—Erasable programmable read-only memories electrically programmable
- G11C16/06—Auxiliary circuits, e.g. for writing into memory
- G11C16/10—Programming or data input circuits
- G11C16/102—External programming circuits, e.g. EPROM programmers; In-circuit programming or reprogramming; EPROM emulators
- G11C16/105—Circuits or methods for updating contents of nonvolatile memory, especially with 'security' features to ensure reliable replacement, i.e. preventing that old data is lost before new data is reliably written
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0804—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1041—Resource optimization
- G06F2212/1044—Space efficiency improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/22—Employing cache memory using specific memory technology
- G06F2212/222—Non-volatile memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7205—Cleaning, compaction, garbage collection, erase control
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Computer Security & Cryptography (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Memory System (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
플래시 메모리 플러싱을 향상시키기 위한 기술들이 개시된다. 몇몇 실시예들에서, 이 기술들은, 플래시 메모리에 기록할 것에 대한 요청을 수신하고, 요청과 연관된 데이터를 플래시 메모리에 기록하는 단계, 기록 요청에 대한 기록 영역에 대응하는 영역 비트맵에 대한 포인터를 식별하고, 요청에 대응하는 영역 비트맵의 비트를 더티로서 마킹하는 단계, 및 포인터 관리 컴포넌트를 사용하여 더티 블록 카운트를 포함하도록 영역 비트맵에 대해 포인터를 업데이트하는 단계를 포함하는 플래시 메모리 플러싱을 향상시키기 위한 방법으로서 실현될 수 있다.
Description
고체 상태 디바이스(SSD)로부터 통상적인 저장 디바이스(예를 들어, 하드 드라이브)로 기록될 때 최상의 가능한 성능을 획득하기 위해, 기록은 그것의 논리 블록 어드레스(LBA)에 따라 순차적으로 배열될 수 있다. 어드레스의 연속 실행이 기록 동작 동안 더 길수록 성능이 더 좋아질 수 있다. 그러나, SSD로부터 통상적인 스토리지로의 기록을 필요로 하는 어드레스의 실행의 길이는 SSD 스토리지의 어느 부분이 통상적인 스토리지(예를 들어, 더티 블록)에 아직 수용되지 않았던 수정을 갖는지에 의존할 수 있다. 스토리지로의 기록(예를 들어, 플러싱)을 필요로 하는 블록을 효율적인 방식으로 식별하기 위해 SSD(예를 들어, 플래시 메모리를 포함함)에서 그러한 더티 블록을 추적하는 것은 어려운 일이다.
플래시 메모리 플러싱을 개선하는 기술이 개시된다. 일부 구현예에서, 기술은 플래시 메모리 플러싱을 개선하는 방법으로서 실현될 수 있으며, 방법은 플래시 메모리에 기록하라는 요청을 수신하는 단계, 요청과 연관되는 데이터를 플래시 메모리에 기록하는 단계, 요청을 위한 기록 영역에 대응하는 영역 비트맵에 대한 포인터를 식별하는 단계, 요청에 대응하는 영역 비트맵의 비트를 더티로 마킹하는 단계, 및 더티 블록 카운트를 포함하기 위해 영역 비트맵에, 포인터 관리 구성요소를 사용하여, 포인터를 갱신하는 단계를 포함한다.
이러한 구현예의 부가 양태에 따르면, 더티 블록 카운트를 포함하기 위해 영역 비트맵에 포인터를 갱신하는 단계는 더티 블록 카운트를 포함하기 위해 포인터의 하나 이상의 고차 비트를 갱신하는 단계를 포함할 수 있다.
이러한 구현예의 추가 양태에 따르면, 포인터는 48 유효 하위 비트 및 16 고차 비트를 갖는 포인트를 포함할 수 있고 더티 블록 카운트는 16 고차 비트에 저장된다.
이러한 구현예의 다른 양태에 따르면, 요청에 대응하는 영역 비트맵의 비트를 더티로 마킹하는 단계는 포인터의 마지막 유효 비트의 값을 포함하기 위해 포인터의 고차 비트를 갱신하는 단계, 및 영역 비트맵을 식별하기 위해 갱신된 포인터를 사용하는 단계를 포함할 수 있다.
이러한 구현예의 부가 양태에 따르면, 포인터는 포인터의 어레이 중 하나를 포함할 수 있고 포인터의 어레이는 포인터 각각 내의 더티 블록 카운트에 의해 배열된다.
이러한 구현예의 추가 양태에 따르면, 기술은 포인터의 배열된 어레이를 사용하여 플래시 메모리의 복수의 영역의 가장 더티한 영역을 식별하는 단계, 및 가장 더티한 영역의 하나 이상의 블록을 통상적인 스토리지에 기록하는 단계를 포함할 수 있다.
이러한 구현예의 다른 양태에 따르면, 하나 이상의 블록을 통상적인 스토리지에 기록하는 단계는 하나 이상의 인자의 검출에 의해 트리거될 수 있다.
이러한 구현예의 부가 양태에 따르면, 하나 이상의 인자는 획득되는 더티 블록의 지정된 임계값, CPU 이용의 레벨, 네트워크 이용의 레벨, 컨벤션 스토리지 입력/출력의 레벨, 캐시로부터의 하나 이상의 블록의 에이징 아웃, 및 사용자 지정된 선호도 중 적어도 하나를 포함할 수 있다.
이러한 구현예의 추가 양태에 따르면, 가장 더티한 영역의 하나 이상의 블록을 통상적인 스토리지에 기록하는 단계는 통상적인 스토리지에 기록되는 데이터와 연관되는 논리 블록 어드레스를 식별하기 위해 영역 비트맵의 베이스 어드레스 및 영역 비트맵의 비트와 연관되는 오프셋을 사용하는 단계를 포함할 수 있다.
이러한 구현예의 부가 양태에 따르면, 기술은 제1 영역과 연관되는 하나 이상의 블록을 기록한 후에, 제2 가장 더티한 영역과 연관되는 포인터의 어레이에서 제2 포인터를 식별하는 단계를 포함할 수 있다.
이러한 구현예의 추가 양태에 따르면, 제1 포인터와 연관되는 하나 이상의 블록이 통상적인 스토리지에 기록될 때, 제2 포인터의 오프셋은 어레이의 시작 시점이 된다.
다른 구현예에서, 기술은 컴퓨터 상에 실행가능한 일련의 명령어를 포함하는 비일시적 컴퓨터 프로그램 제품으로 실현될 수 있다. 비일시적 컴퓨터 프로그램 제품은 플래시 메모리 플러싱을 개선하는 프로세스를 수행할 수 있다. 컴퓨터 프로그램은 플래시 메모리에 기록하라는 요청을 수신하는 단계, 요청과 연관되는 데이터를 플래시 메모리에 기록하는 단계, 요청을 위한 기록 영역에 대응하는 영역 비트맵에 대한 포인터를 식별하는 단계, 요청에 대응하는 영역 비트맵의 비트를 더티로 마킹하는 단계, 및 더티 블록 카운트를 포함하기 위해 영역 비트맵에 포인터를 갱신하는 단계를 구현할 수 있다.
또 다른 구현예에서, 기술은 플래시 메모리 플러싱을 개선하는 시스템으로 실현될 수 있다. 시스템은 저장 매체 디바이스 및 저장 매체 디바이스와 연관되는 PCIe 기반 디바이스 컨트롤러를 포함할 수 있다. PCIe 기반 디바이스 컨트롤러는 플래시 메모리에 기록하라는 요청을 수신하고, 요청을 플래시 메모리에 기록하고, 요청을 위한 기록 영역에 대응하는 영역 비트맵에 대한 포인터를 식별하고, 요청에 대응하는 영역 비트맵의 비트를 더티로 마킹하고, 더티 블록 카운트를 포함하기 위해 영역 비트맵에 포인터를 갱신하도록 구성될 수 있다.
이러한 구현예의 부가 양태에 따르면, 더티 블록 카운트를 포함하기 위해 영역 비트맵에 포인터를 갱신하는 단계는 더티 블록 카운트를 포함하기 위해 포인터의 하나 이상의 고차 비트를 갱신하는 단계를 포함할 수 있다.
이러한 구현예의 추가 양태에 따르면, 포인터는 48 유효 하위 비트 및 16 고차 비트를 갖는 포인터를 포함할 수 있고 더티 블록 카운트는 16 고차 비트에 저장된다.
이러한 구현예의 다른 양태에 따르면, 요청에 대응하는 영역 비트맵의 비트를 더티로 마킹하는 단계는 포인터의 마지막 유효 비트의 값을 포함하기 위해 포인터의 고차 비트를 갱신하는 단계, 및 영역 비트맵을 식별하기 위해 갱신된 포인터를 사용하는 단계를 포함할 수 있다.
이러한 구현예의 부가 양태에 따르면, 포인터는 포인터의 어레이 중 하나를 포함할 수 있고 포인터의 어레이는 포인터 각각 내의 더티 블록 카운트에 의해 배열된다.
이러한 구현예의 추가 양태에 따르면, PCIe 기반 디바이스 컨트롤러는 또한 포인터의 배열된 어레이를 사용하여 플래시 메모리의 복수의 영역의 가장 더티한 영역을 식별하고, 가장 더티한 영역의 하나 이상의 블록을 통상적인 스토리지에 기록하도록 구성될 수 있다.
이러한 구현예의 다른 양태에 따르면, 하나 이상의 블록을 통상적인 스토리지에 기록하는 단계는 하나 이상의 인자의 검출에 의해 트리거될 수 있다.
이러한 구현예의 부가 양태에 따르면, 하나 이상의 인자는 획득되는 더티 블록의 지정된 임계값, CPU 이용의 레벨, 네트워크 이용의 레벨, 컨벤션 스토리지 입력/출력의 레벨, 캐시로부터의 하나 이상의 블록의 에이징 아웃, 및 사용자 지정된 선호도 중 적어도 하나를 포함할 수 있다.
본 개시는 이제 첨부 도면에 도시된 바와 같이 그것의 예시적 구현예를 참조하여 더 상세히 설명될 것이다. 본 개시는 예시적 구현예를 참조하여 아래에 설명되지만, 본 개시는 이제 제한되지 않는다는 점이 이해되어야 한다. 본원에서 교시에 접근할 수 있는 당업자는, 부가적인 구현예, 수정, 및 실시예뿐만 아니라 본원에 설명되는 바와 같이 본 개시의 범위 내에 있고, 본 개시가 상당히 유용할 수 있는 다른 사용 분야를 인식할 것이다.
본 개시의 더 완전한 이해를 용이하게 하기 위해, 동일한 요소가 동일한 번호로 참조되는 첨부 도면이 이제 참조된다. 이러한 도면은 본 개시를 제한하는 것으로 해석되어야 하는 것이 아니라, 단지 예시를 위한 것이다.
도 1은 본 개시의 일 구현예에 따라, 호스트 디바이스와 통신하는 복수의 PCIe 디바이스를 도시하는 블록도이다.
도 2a는 본 개시의 일 구현예에 따라, 플래시 메모리 플러싱을 개선하는 모듈을 도시하는 블록도이다.
도 2b는 본 개시의 일 구현예에 따라, 기록되는 블록을 저장하기 위해 비트맵을 사용하는 방법을 예시하는 흐름도를 도시한다.
도 2c는 본 개시의 일 구현예에 따라, 우선 가장 더티한 영역을 다시 기록하는 방법을 예시하는 흐름도를 도시한다.
도 2d는 본 개시의 일 구현예에 따라, 영역을 분류하는 방법을 예시하는 흐름도를 도시한다.
도 3은 본 개시의 일 구현예에 따라, 플래시 메모리 플러싱을 개선하는 방법을 예시하는 흐름도를 도시한다.
도 4는 본 개시의 일 구현예에 따라, 플래시 메모리 플러싱을 개선하는 방법을 예시하는 흐름도를 도시한다.
도 1은 본 개시의 일 구현예에 따라, 호스트 디바이스와 통신하는 복수의 PCIe 디바이스를 도시하는 블록도이다.
도 2a는 본 개시의 일 구현예에 따라, 플래시 메모리 플러싱을 개선하는 모듈을 도시하는 블록도이다.
도 2b는 본 개시의 일 구현예에 따라, 기록되는 블록을 저장하기 위해 비트맵을 사용하는 방법을 예시하는 흐름도를 도시한다.
도 2c는 본 개시의 일 구현예에 따라, 우선 가장 더티한 영역을 다시 기록하는 방법을 예시하는 흐름도를 도시한다.
도 2d는 본 개시의 일 구현예에 따라, 영역을 분류하는 방법을 예시하는 흐름도를 도시한다.
도 3은 본 개시의 일 구현예에 따라, 플래시 메모리 플러싱을 개선하는 방법을 예시하는 흐름도를 도시한다.
도 4는 본 개시의 일 구현예에 따라, 플래시 메모리 플러싱을 개선하는 방법을 예시하는 흐름도를 도시한다.
본 개시는 SSD(예를 들어, 플래시 메모리를 포함함)로부터 통상적인 스토리지(예를 들어, 디스크, 테이프 등)로의 수정된 데이터의 플러싱을 개선하는 기술에 관한 것이다. 일부 구현예에 따르면, 랜덤 순서로 기록된 한 세트의 데이터가 제시될 때, 기록은 우선 랜덤 액세스 친화 고체 상태 스토리지로 저장된다. 이러한 기록이 논리 블록 어드레스의 연속 실행의 개선된 가능성에 의해 순차 방식으로 통상적인 스토리지에 다시 기록되는 것을 허용하는 데이터 구조, 알고리즘, 및/또는 회로(예를 들어, (마이크로)프로세서, 로직 게이트, 스위치, 주문형 집적 회로(ASIC), 프로그램가능 로직 컨트롤러(예를 들어, FPGA), 및 내장 마이크로컨트롤러)가 제공될 수 있다.
이제 도면을 참조하면, 도 1은 본 개시의 일 구현예에 따라, 호스트 디바이스와 통신하는 PCIe 디바이스를 도시하는 블록도이다. 도 1은 다수의 컴퓨팅 기술, 예컨대 호스트 시스템(102), 호스트 CPU(104), 및 PCI 익스프레스 루트 컴플렉스(106)를 포함한다. 스위치(108)는 복수의 타겟(예를 들어, PCIe 디바이스, 예컨대 NVMe 기반 타겟), 예컨대 타겟(110, 116 및 122)을 PCI 익스프레스 루트 컴플렉스(106)를 통해 호스트 시스템(102)에 통신 결합할 수 있다.
타겟(110)은 컨트롤러(112)(예를 들어, NVMe 컨트롤러) 및 비휘발성 스토리지(114)를 포함할 수 있다. 타겟(116)은 컨트롤러(118)(예를 들어, NVMe 컨트롤러) 및 비휘발성 스토리지(120)를 포함할 수 있다. 타겟(122)은 컨트롤러(124)(예를 들어, NVMe 컨트롤러) 및 비휘발성 스토리지(126)를 포함할 수 있다.
메모리 기반 자원은 메모리 인터페이스(예를 들어, 더블 데이터 레이트 타입 3 동기식 동적 랜덤 액세스 메모리(DDR3 SDRAM))를 통해 호스트 시스템(102)에 액세스 가능할 수 있다. 메모리는 고체 상태 메모리(예를 들어, 플래시 메모리, 또는 고체 상태 디바이스(SSD)), 광 메모리, 및 자기 메모리와 같지만 이에 제한되지 않는 임의의 적절한 형태를 취할 수 있다.
일부 구현예에 따르면, PCIe와 다른 인터페이스 표준이. 시리얼 고급 기술 부착(SATA), 고급 기술 부착(ATA), 소형 컴퓨터 시스템 인터페이스(SCSI), PCI-extended(PCI-X), 파이버 채널, 시리얼 부착 SCSI(SAS), 보안 디지털(SD), 내장 멀티미디어 카드(EMMC), 및 유니버셜 플래시 스토리지(UFS)와 같지만 이에 제한되지 않는 하나 이상의 부분을 위해 사용될 수 있다.
호스트 시스템(102)은 기업 서버, 데이터베이스 호스트, 워크스테이션, 개인용 컴퓨터, 이동 전화, 게임 디바이스, 개인 휴대 정보 단말기(PDA), 이메일/텍스트 메시징 디바이스, 디지털 카메라, 디지털 매체(예를 들어, MP3) 플레이어, GPS 내비게이션 디바이스, 및 TV 시스템과 같지만 이에 제한되지 않는 임의의 적절한 형태를 취할 수 있다.
호스트 시스템(102) 및 타겟 디바이스는 도면을 간략화하기 위해 도 1에 도시되지 않은 부가 구성요소를 포함할 수 있다. 또한, 일부 구현예에서, 도시된 구성요소의 모두가 존재하는 것은 아니다. 게다가, 다양한 컨트롤러, 블록, 및 인터페이스는 임의의 적절한 방식으로 구현될 수 있다. 예를 들어, 컨트롤러는 예를 들어 마이크로프로세서 또는 프로세서 및 (마이크로)프로세서에 의해 실행가능한 컴퓨터 판독가능 프로그램 코드(예를 들어, 소프트웨어 또는 펌웨어)를 저장하는 컴퓨터 판독가능 매체, 로직 게이트, 스위치, 주문형 집적 회로(ASIC), 프로그램가능 로직 컨트롤러(예를 들어, FPGA), 및 내장 마이크로컨트롤러 중 하나 이상의 형태를 취할 수 있다.
도 2a는 본 개시의 일 구현예에 따라, 플래시 메모리 플러싱을 개선하는 모듈을 도시한다. 구성요소는 하드웨어(예를 들어, 전용 회로), 펌웨어, 소프트웨어, 또는 전술한 것의 조합일 수 있다.
아래의 설명은 시스템의 네트워크 요소, 컴퓨터, 및/또는 구성요소 및 하나 이상의 구성요소를 포함할 수 있는 백업 및 복원을 위한 방법을 설명한다. 본원에 사용되는 바와 같이, 용어 "구성요소"는 컴퓨팅 소프트웨어, 펌웨어, 하드웨어, 및/또는 그것의 다양한 조합을 언급하는 것으로 이해될 수 있다. 그러나, 구성요소는 하드웨어, 펌웨어 상에 구현되거나, 프로세서 판독가능 기록가능 저장 매체(즉, 구성요소는 소프트웨어 자체는 아님) 상에 기록되지 않는 소프트웨어로 해석되지 않아야 한다. 구성요소는 예시적인 점이 주목된다. 구성요소는 다양한 애플리케이션을 지원하기 위해 결합되고, 통합되고, 분리되고, 및/또는 복사될 수 있다. 또한, 특정 구성요소에서 수행되는 것으로 본원에 설명되는 기능은 특정 구성요소에서 수행되는 기능 대신에 또는 기능에 더하여 하나 이상의 다른 구성요소에서 및/또는 하나 이상의 다른 디바이스에 의해 수행될 수 있다. 게다가, 구성요소는 서로에 로컬이거나 원격인 다수의 디바이스 및/또는 다른 구성요소에 걸쳐 구현될 수 있다. 부가적으로, 구성요소는 한 디바이스로부터 이동되고 다른 디바이스에 추가될 수 있고, 및/또는 디바이스 둘 다에 포함될 수 있다. 일부 구현예에서, 하나 이상의 구성요소는 SSD 컨트롤러, 호스트 시스템, 및/또는 SSD 최적화 소프트웨어의 일부로 구현될 수 있다. 도 2a에 예시된 바와 같이, SSD 플러시 개선 구성요소(210)는 기록 감시 구성요소(212), 더티 영역 식별 구성요소(214), 어레이 관리 구성요소(216), 및 에러 로깅 및 리포팅 구성요소(218)를 포함할 수 있다.
기록 감시 구성요소(212)는 통상적인 스토리지(예를 들어, 더티 메모리)에 아직 기록되지 않았던 SSD(예를 들어, 플래시 메모리)에 기록되는 데이터를 추적할 수 있다. 스토리지의 각각의 블록 또는 다른 유닛을 조사하여 그것을 보조 스토리지(예를 들어, 디스크)와 비교해서 변화된 블록을 식별하는 것은 자원 집약적이고 및/또는 시간 소모적일 수 있다. 일부 구현예에서, SSD 스토리지의 일부가 수정될 때, 기록 감시 구성요소(212)는 하나 이상의 데이터 구조 및/또는 회로를 사용하여 기록을 추적할 수 있다. 예를 들어, 일부 구현예에서, 기록 감시 구성요소(212)는 각각의 영역에 대해 기록되는 블록을 저장하기 위해 비트맵을 사용할 수 있다. 종래의 보조 저장 디바이스는 고정 크기 영역으로 분할될 수 있다. 예를 들어, 각각의 영역은 32,768개의 블록을 포함할 수 있으며, 각각의 블록은 4 킬로바이트 크기일 수 있다.
도 2b는 기록되는 블록을 저장하기 위해 비트맵을 사용하는 예시적 방법(220)을 예시하는 흐름도를 도시한다. 일부 구현예에 따르면, 시스템이 시작될 때, 어레이 관리 구성요소(216)는 포인터의 어레이를 할당할 수 있고(222), 하나는 각각의 영역을 위한 것이며, 어레이를 NULL 값으로 초기화할 수 있다(224). 영역이 우선 기록될 때, 메모리의 4 킬로바이트 페이지가 할당될 수 있고(226) 그러한 영역에 대한 포인터는 새롭게 할당된 메모리 페이지에 대한 지점에 갱신될 수 있다(228).
일 예에서, 4 킬로바이트 메모리 페이지는 메모리의 32,768개의 개별 비트를 포함한다. 이러한 메모리는 비트맵으로 사용될 수 있다. 블록이 일시적 랜덤 액세스 스토리지에 초기에 기록될 때, 그것의 논리 블록 어드레스는 적절한 영역을 결정하기 위해 우선 마스킹되고 시프팅될 수 있다(230). 그 다음에, 할당 후에, 포인터는 영역에 대해 비트맵을 위치시키도록 기록 감시 구성요소(212)에 의해 이용될 수 있다(232). 예를 들어, SSD 저장 위치가 할당되면, 그것은 SSD 스토리지 내의 어떤 비트가 통상적인 스토리지에 아직 기록되지 않았던 표시를 저장하는 비트맵, 해시맵 또는 다른 데이터 구조의 위치를 표시하는 포인터, 값, 또는 참조와 연관될 수 있다. 그 다음, 일시적 랜덤 액세스 스토리지에 기록되는 블록에 대한 논리 블록 어드레스의 저차 비트(예를 들어, 유효 하위 비트)는 대응 비트를 위치시키기 위해 비트맵으로 오프셋으로서 사용될 수 있다. 일부 구현예에서, 이것은 블록을 "더티"로 마킹하기 위해(예를 들어, 장래의 기록을 다시 통상적인 스토리지에 필요로 함) 검색을 필요로 하지 않고 일정 시간 동작만을 필요로 할 수 있다(즉, 동작을 완료하는데 걸리는 시간은 입력의 크기에 독립적일 수 있음).
더티 영역 식별 구성요소(214)는 SSD의 더티 부분을 통상적인 스토리지에 플러싱할 때 및/또는 어느 부분이 어느 순서로 플러싱되어야 하는지를 판단할 수 있다. 일부 구현예에서, 통상적인 스토리지에 기록의 긴 순차 실행을 갖는 것이 바람직할 수 있다. 이것을 달성하기 위해, 통상적인 스토리지에 기록은 SSD의 하나 이상의 영역이 충분히 더티이면(예를 들어, 상당한 수의 순차 더티 블록을 포함하면) 수행될 수 있다. 하나 이상의 영역이 충분히 더티일 때의 판단은 하나 이상의 인자에 의존할 수 있고 (예를 들어, 영역에 상당한 더티 블록의 수, 퍼센티지 또는 다른 표시기로) 구성 가능할 수 있다. 영역이 플러싱을 위해 충분히 더티일 가능성을 개선하기 위해, 더티 영역 식별 구성요소(214)는 우선 기록하기 위해 가장 더티한 영역을 식별할 수 있다.
도 2c는 본 개시의 일 구현예에 따라, 우선 가장 더티한 영역을 다시 기록하는 예시적 방법(234)을 예시하는 흐름도를 도시한다. 데이터를 다시 통상적인 스토리지에 기록할 시간인 경우, 영역의 세트가 분류되고(236) 가장 더티(기록을 필요로 하는 데이터와 가장 파퓰레이트됨) 영역이 더티 영역 식별 구성요소(214)에 의해 선택된다(238). 일부 구현예에 따르면, 어레이 관리 구성요소(216)는 영역을 분류할 수 있다.
그러한 영역에 대한 포인터는 대응 비트맵에 액세스하기 위해 따르게 될 수 있다(240). 그 다음, 비트맵은 전방으로 가로지르게 될 수 있다(242). 영역의 베이스 논리 블록 어드레스는 기록을 다시 필요로 하는 논리 블록 어드레스를 형성하기 위해 맵 내의 각각의 비트의 오프셋과 조합될 수 있다(244).
영역을 분류하는 것은 가장 더티한 영역을 식별하기 위해 각각의 비트맵 내에 설정되는 비트를 모두 카운팅하는 것을 통상적으로 필요로 할 수 있다. 이것은 설정되는 세트의 수를 결정하기 위해 비트맵의 큰 CPU 집약 스캔을 사용할 수 있음에 따라 금지될 수 있다. 일부 구현예에서, 기록 감시 구성요소(212)는 영역 내의 더티 스토리지의 일부의 카운트(예를 들어, 4 킬로바이트 비트맵 블록 내에 설정되는 다수의 비트)를 표시하기 위해 영역의 더티 비트맵에 대한 포인터 내에 공간을 사용할 수 있다. 예를 들어, x86_64 아키텍처에서, 64 비트 포인터에서 48 비트만이 중요할 수 있다. 고차 비트는 48 저차 비트, 예를 들어 유효 하위 비트로부터 부호 확장될 수 있다. 이것은 비트가 상단 16 비트에 대해 동일할 수 있고, 손실되면, 이러한 값이 비트 47로부터 획득될 수 있는 것을 의미한다. 일부 구현예에서, 기록 감시 구성요소(212)는 포인터의 어레이 내의 고차 16 비트의 포인터 내에 비트맵 블록에 설정되는 비트의 카운트를 저장할 수 있다. 어레이 관리 구성요소(216)는 제1 포인터가 가장 더티이도록 어레이를 분류하기 위해 어레이의 각각의 포인터 또는 포인터의 다른 데이터 구조(또는 다른 참조 구조)에서 비트 카운트를 사용할 수 있다.
도 2d는 본 개시의 일 구현예에 따라, 영역을 분류하는 예시적 방법(246)을 예시하는 흐름도를 도시한다. 어레이 관리 구성요소(216)는 4 바이트 오프셋의 콤팩트하게 분류된 어레이를 영역 당 하나의 포인터를 포함하는 주요 포인터 어레이로 유지할 수 있다(248). 일부 기록을 다시 통상적인 스토리지에 수행할 시간인 경우, 어레이는 비트맵 블록에 대한 포인터를 전혀 따르는 것 없이 분류될 수 있다(250). 이것은 다시 기록하기 위해 가장 더티한 영역을 발견하는 오버헤드를 실질적으로 감소시킬 수 있다.
더티 비트 카운트를 저장하기 위해 수정되었던 포인터를 따르도록, 포인터는 복원될 수 있다(252). 일부 구현예에서, 포인터는 마지막 유효 비트를 고차 비트로 부호 확장함으로써(예를 들어, 비트 47에서 비트 48 내지 63까지의 값을 카피함으로써) 복원될 수 있다. 비트맵에 설정되는 비트의 카운트가 조정될 때(254), 새로운 카운트는 고차 비트로 저장될 수 있다(256).
일부 구현예에서, 더티 영역 식별 구성요소(214)는 복수의 영역을 정렬할 수 있고 하나 이상의 부가 인자는 영역에서 상당한 더티 블록의 수, 퍼센티지 또는 다른 표시기에 더하여 평가될 수 있다. 예를 들어, SSD 영역 내의 데이터의 에이지가 고려될 수 있다. 다른 인자는 알고리즘 예컨대 어느 영역이 기록되어야 하는지를 판단하는 후입선출(LIFO), 선입선출(FIFO) 또는 다른 기술을 포함할 수 있다. 예를 들어, 제1 영역이 제2 영역보다 더티이지만, 제1 영역이 상당한 입력/출력(I/O) 트래픽을 여전히 수신하고 있으면, 제2 영역은 일부 구현예에서 우선 기록될 수 있다.
어레이 관리 구성요소(216)는 더티 SSD 영역을 표시하는 비트맵에 대한 참조를 포함하는 어레이 또는 다른 데이터 구조를 유지할 수 있다. 특정 분류 알고리즘은 어레이가 이미 실질적으로 분류되었을 때 더 잘 수행될 수 있다. 상기 설명된 하나 이상의 구현예는 한 세트의 영역을 분류하고, 가장 더티한 영역을 취하고, 그것을 완전히 소거하며, 어레이의 나머지를 분류된 상태로 남길 수 있다. 이것은 더티 영역 식별 구성요소가 다음의 가장 더티한 영역(심지어 동일하게 더티일 수 있음)으로 이동하는 것을 허용할 수 있기 때문에 더티 영역을 통상적인 스토리지에 플러싱하는 데 상당한 효과가 있을 수 있다. 그러나, 최초에 하나의 잘못 분류된 블록을 갖는 실질적으로 분류된 어레이는 비정상 작용을 나타낼 수 있고 어레이의 끝에서 새로운 적절한 위치로 이동하기 위해 많은 CPU 동작을 필요로 할 수 있다.
이것을 처리하기 위해, 어레이 관리 구성요소(216)는 분류된 어레이를 시작 및 끝이 이동가능한 원형 어레이로 취급할 수 있다. 초기에, 어레이의 분류된 시작은 오프셋 0에 있을 수 있고, 끝은 어레이를 포함하는 메모리의 블록의 마지막 요소일 수 있다. 최고 정렬 영역이 소거되면, 최고 정렬 영역은 오프셋 0에 여전히 존재할 수 있지만, 그것은 부정확하게 분류될 수 있다. 어레이를 통상적으로 재분류하고 데이터를 이동시키는 대신에, 어레이 관리 구성요소(216)는 전체 원형 어레이가 하나씩 시프트되도록 분류된 시작 및 끝 오프셋을 조정할 수 있다. 분류된 시작 오프셋은 1이 될 수 있고, 어레이의 0번째 요소는 이제 어레이의 마지막 요소일 수 있다. 이러한 방식으로, 0 더티 블록으로 감소되었던 영역은 어레이를 다른 방법으로 분류하게 하는 일정 시간 동작에서 어레이의 끝에서의 적절한 위치로 재분류된다.
에러 로깅 및 리포팅 구성요소(218)는 기록 요청의 감시와 연관되는 에러 및 로그 에러, 더티 영역의 식별, 및/또는 더티 영역(예를 들어, 포인터의 어레이)을 추적하는 데이터 구조의 관리를 트랩할 수 있다. 일부 구현예에서, 에러 로깅 및 리포팅 구성요소(218)는 에러의 통지를 제공할 수 있다.
도 3은 본 개시의 일 구현예에 따라, 플래시 메모리 플러싱을 개선하는 방법을 예시하는 흐름도를 도시한다. 그러나, 프로세스(300)는 단지 예시적이다. 프로세스(300)는 예를 들어 단계가 추가, 변화, 제거, 또는 재배열되게 함으로써 변경될 수 있다. 단계 302에서, 프로세스는 시작될 수 있다.
단계 304에서, 플래시 메모리 기록 요청이 수신될 수 있다. 단계 306에서, 기록 요청은 플래시 메모리 영역에 기록될 수 있다. SSD의 복수의 영역에 대해, 포인터의 어레이는 할당될 수 있고, 하나는 각각의 영역을 위한 것이며, 각각의 어레이는 NULL 값으로 초기화될 수 있다.
단계 308에서, 영역이 우선 기록될 때 메모리의 페이지가 할당될 수 있고 그러한 영역에 대한 포인터는 새롭게 할당된 메모리 페이지에 대한 포인트로 갱신될 수 있다.
단계 310에서, 포인터가 이전에 할당되었고 포인터의 고차 비트가 더티 블록의 카운트를 저장하기 위해 다시 기록되었다면, 고차 비트는 복원될 수 있다. 예를 들어, x86_64 아키텍처에서, 64 비트 포인터에서 48 비트만이 중요할 수 있다. 고차 비트는 48 저차 비트, 예를 들어 유효 하위 비트로부터 부호 확장될 수 있다. 이것은 비트가 상단 16 비트에 대해 동일할 수 있고, 손실되면 이러한 값이 비트 47로부터 획득될 수 있는 것을 의미한다.
단계 312에서, 할당 후에, 포인터는 영역에 대한 비트맵을 발견하기 위해 이용될 수 있다. 그 다음, 일시적 랜덤 액세스 스토리지에 기록되는 블록에 대한 논리 블록 어드레스의 저차 비트는 대응 비트를 위치시키기 위해 비트맵으로 오프셋으로서 사용될 수 있다. 일부 구현예에서, 이것은 블록을 "더티"로 마킹하기 위해 검색을 필요로 하지 않고 일정 시간 동작만을 필요로 할 수 있다(예를 들어, 장래의 기록을 다시 통상적인 스토리지에 필요로 하지 않음).
단계 314에서, 영역의 더티 비트맵에 대한 포인터 내의 공간은 영역 내의 더티 스토리지의 일부의 카운트(예를 들어, 4 킬로바이트 비트맵 블록 내에 설정되는 다수의 비트)를 표시하기 위해 사용될 수 있다. 예를 들어, x86_64 아키텍처에서, 64 비트 포인터에서 48 비트만이 중요할 수 있다. 고차 비트는 48 저차 비트, 예를 들어 유효 하위 비트로부터 부호 확장될 수 있다. 이것은 비트가 상단 16 비트에 대해 동일할 수 있고, 손실되면 이러한 값이 비트 47로부터 획득될 수 있는 것을 의미한다. 일부 구현예에서, 비트맵 블록에 설정되는 비트의 카운트는 포인터의 어레이 내의 고차 16 비트의 포인터에 저장될 수 있다.
단계 316에서, 방법(300)은 종료될 수 있다.
도 4는 본 개시의 일 구현예에 따라, 플래시 메모리 플러싱을 개선하는 방법을 예시하는 흐름도를 도시한다.
그러나, 프로세스(400)는 단지 예시적이다. 프로세스(400)는 예를 들어 단계가 추가, 변화, 제거, 또는 재배열되게 함으로써 변경될 수 있다. 단계 402에서, 프로세스는 시작될 수 있다.
단계 404에서, 더티 영역 비트맵에 대한 포인터의 어레이가 분류될 수 있다. 어레이의 각각의 포인터 또는 포인터의 다른 데이터 구조(또는 다른 참조 구조) 내의 비트 카운트는 제1 포인터가 가장 더티이도록 어레이를 분류하기 위해 사용될 수 있다.
단계 406에서, 플러싱 임계값에 도달되었는지가 판단될 수 있다. 하나 이상의 인자는 더티 SSD 스토리지가 통상적인 스토리지에 플러싱되어야 하는지를 판단하기 위해 평가될 수 있다. 예를 들어, 인자는 획득되는 더티 블록의 지정된 임계값, CPU 이용의 레벨, 네트워크 이용의 레벨, 컨벤션 스토리지 입력/출력의 레벨, 캐시로부터의 하나 이상의 블록의 에이징 아웃, 및 사용자 지정된 선호도 중 하나 이상을 포함할 수 있다. 플러싱이 수행되어야 하는 것으로 결정되면, 방법은 단계 408에서 계속될 수 있다. 플러싱이 수행되지 않아야 하는 것으로 결정되면, 방법은 단계 414에서 종료될 수 있다.
단계 408에서, 가장 더티한 영역이 식별될 수 있다. 일부 구현예에서, 영역의 더티 비트맵에 대한 포인터 내의 공간은 영역 내의 더티 스토리지의 일부의 카운트(예를 들어, 4 킬로바이트 비트맵 블록 내에 설정되는 다수의 비트)를 표시할 수 있다. 예를 들어, x86_64 아키텍처에서, 64 비트 포인터에서 48 비트만이 중요할 수 있다. 고차 비트는 48 저차 비트, 예를 들어 유효 하위 비트로부터 부호 확장될 수 있다. 이것은 비트가 상단 16 비트에 대해 동일할 수 있고, 손실되면 이러한 값이 비트 47로부터 획득될 수 있는 것을 의미한다. 더티 영역에 대한 포인터의 어레이는 제1 포인터가 가장 더티이도록 어레이를 분류하기 위해 어레이의 각각의 포인터 또는 포인터의 다른 데이터 구조(또는 다른 참조 구조)에서 비트 카운트를 사용할 수 있다.
단계 410에서, 가장 더티한 영역과 연관되는 더티 블록은 통상적인 스토리지(예를 들어, 디스크, 테이프 등)에 기록될 수 있다. 일부 구현예에서, 더티 블록은 더티 비트에 대응하는 더티 블록을 위해 논리 블록 어드레스를 제공하기 위해 더티 영역 비트맵의 베이스 논리 블록 어드레스 및 특정 더티 비트에 대응하는 오프셋을 사용하여 더티 블록 비트맵으로부터 식별될 수 있다.
단계 410에서, 다른 비트맵 포인터가 더티 영역 비트맵에 대한 포인터의 어레이에 존재하는지가 판단될 수 있다. 다른 포인터가 존재하지 않으면(예를 들어, 플러싱 임계값을 충족시키거나 초과하는 모든 더티 비트맵이 디스크에 플러싱되고 어레이에 분류되었다면), 방법(400)은 단계 414에서 종료될 수 있다. 더티 영역에 대한 다른 비트맵 포인터가 존재하면, 방법(400)은 단계 412에서 계속될 수 있다.
단계 412에서, 다음의 가장 더티 비트맵에 대응하는 포인터는 어레이의 시작으로 마킹될 수 있다. 초기에, 어레이의 분류된 시작은 오프셋 0에 있을 수 있고, 끝은 어레이를 포함하는 메모리의 블록의 마지막 요소일 수 있다. 최고 정렬 영역이 소거되면(예를 들어, 단계 408 후에), 영역 포인터는 오프셋 0에 여전히 존재할 수 있지만, 그것은 부정확하게 분류될 수 있다. 어레이를 통상적으로 재분류하고 데이터를 이동시키는 대신에, 방법(400)은 전체 원형 어레이가 하나씩 시프트되도록 분류된 시작 및 끝 오프셋을 조정할 수 있다. 분류된 시작 오프셋은 1이 될 수 있고, 어레이의 0번째 요소는 이제 어레이의 마지막 요소일 수 있다. 이러한 방식으로, 0 더티 블록으로 감소되었던 영역은 어레이를 다른 방법으로 분류하게 하는 일정 시간 동작에서 어레이의 끝에서의 적절한 위치로 재분류될 수 있다. 어레이 시작 요소가 조정된 후에, 방법(400)은 단계 406으로 복귀될 수 있다.
단계 414에서, 방법(400)은 종료될 수 있다.
다른 구현예는 본 발명의 범위 및 사상 내에 있다. 예를 들어, 상기 설명된 기능성은 소프트웨어, 하드웨어, 펌웨어, 하드와이어링, 또는 이러한 것의 임의의 조합을 사용하여 구현될 수 있다. 명령어에 따라 동작하는 하나 이상의 컴퓨터 프로세서는 상기 설명된 바와 같이 본 개시에 따라 플래시 메모리 플러싱을 개선하는 것과 연관되는 기능을 구현할 수 있다. 그와 같은 경우이면, 그러한 명령어는 하나 이상의 비일시적 프로세서 판독가능 저장 매체(예를 들어, 자기 디스크 또는 다른 저장 매체) 상에 저장될 수 있는 것은 본 개시의 범위 내에 있다. 부가적으로, 기능을 구현하는 모듈은 또한 기능의 일부가 상이한 물리 위치에 구현되도록 분배되는 것을 포함하는 다양한 위치에 물리적으로 위치될 수 있다.
본 개시는 범위에 있어서 본원에 설명되는 특정 구현예에 의해 제한되지 않는다. 실제로, 본 개시의 다른 다양한 구현예 및 본 개시에 대한 수정은 본원에 설명되는 것에 더하여, 전술한 설명 및 첨부 도면으로부터 당업자에게 분명할 것이다. 따라서, 그러한 다른 구현예 및 수정은 본 개시의 범위 내에 있도록 의도된다. 게다가, 본 개시가 특정 목적을 위해 특정 환경 내의 특정 구현예의 맥락에서 본원에 설명되었지만, 당업자는 그것의 유용성이 이에 제한되지 않는 점 및 본 개시가 임의의 수의 목적을 위해 임의의 수의 환경에 유익하게 구현될 수 있는 점을 인식할 것이다. 따라서, 아래에 진술되는 청구항은 본원에 설명되는 바와 같이 본 개시의 전체 범위 및 사상을 고려하여 해석되어야 한다.
Claims (20)
- 플래시 메모리 플러싱을 개선하는 방법으로서,
플래시 메모리에 기록하라는 요청을 수신하는 단계;
상기 요청과 연관되는 데이터를 상기 플래시 메모리에 기록하는 단계;
상기 요청을 위한 기록 영역에 대응하는 영역 비트맵에 대한 포인터를 식별하는 단계;
상기 요청에 대응하는 영역 비트맵의 비트를 더티로 마킹하는 단계; 및
더티 블록 카운트를 포함하기 위해 상기 영역 비트맵에, 포인터 관리 구성요소를 사용하여, 상기 포인터를 갱신하는 단계를 포함하는 방법. - 제1항에 있어서, 더티 블록 카운트를 포함하기 위해 상기 영역 비트맵에 상기 포인터를 갱신하는 단계는 상기 더티 블록 카운트를 포함하기 위해 상기 포인터의 하나 이상의 고차 비트를 갱신하는 단계를 포함하는 방법.
- 제2항에 있어서, 상기 포인터는 48 유효 하위 비트 및 16 고차 비트를 갖는 포인터를 포함하고 상기 더티 블록 카운트는 상기 16 고차 비트에 저장되는 방법.
- 제2항에 있어서, 상기 요청에 대응하는 영역 비트맵의 비트를 더티로 마킹하는 단계는 상기 포인터의 마지막 유효 비트의 값을 포함하기 위해 상기 포인터의 고차 비트를 갱신하는 단계, 및 상기 영역 비트맵을 식별하기 위해 상기 갱신된 포인터를 사용하는 단계를 포함하는 방법.
- 제1항에 있어서, 상기 포인터는 포인터의 어레이 중 하나를 포함하고 상기 포인터의 어레이는 상기 포인터 각각 내의 더티 블록 카운트에 의해 배열되는 방법.
- 제5항에 있어서,
상기 포인터의 배열된 어레이를 사용하여 상기 플래시 메모리의 복수의 영역의 가장 더티한 영역을 식별하는 단계; 및
상기 가장 더티한 영역의 하나 이상의 블록을 통상적인 스토리지에 기록하는 단계를 더 포함하는 방법. - 제6항에 있어서, 하나 이상의 블록을 통상적인 스토리지에 기록하는 단계는 하나 이상의 인자의 검출에 의해 트리거되는 방법.
- 제7항에 있어서, 상기 하나 이상의 인자는 획득되는 더티 블록의 지정된 임계값, CPU 이용의 레벨, 네트워크 이용의 레벨, 컨벤션 스토리지 입력/출력의 레벨, 캐시로부터의 하나 이상의 블록의 에이징 아웃, 및 사용자 지정된 선호도 중 적어도 하나를 포함하는 방법.
- 제6항에 있어서, 상기 가장 더티한 영역의 하나 이상의 블록을 통상적인 스토리지에 기록하는 단계는 통상적인 스토리지에 기록되는 데이터와 연관되는 논리 블록 어드레스를 식별하기 위해 영역 비트맵의 베이스 어드레스 및 상기 영역 비트맵의 비트와 연관되는 오프셋을 사용하는 단계를 포함하는 방법.
- 제6항에 있어서, 제1 영역과 연관되는 하나 이상의 블록을 기록한 후에, 제2 가장 더티한 영역과 연관되는 포인터의 어레이에서 제2 포인터를 식별하는 단계를 더 포함하는 방법.
- 제10항에 있어서, 제1 포인터와 연관되는 하나 이상의 블록이 통상적인 스토리지에 기록될 때, 상기 제2 포인터의 오프셋은 상기 어레이의 시작 지점이 되는 방법.
- 컴퓨터 상에 실행가능한 일련의 명령어로 구성되는 컴퓨터 프로그램 제품으로서, 상기 컴퓨터 프로그램 제품은 플래시 메모리 플러싱을 개선하는 프로세스를 수행하며; 컴퓨터 프로그램은,
플래시 메모리에 기록하라는 요청을 수신하는 단계;
상기 요청과 연관되는 데이터를 상기 플래시 메모리에 기록하는 단계;
상기 요청을 위한 기록 영역에 대응하는 영역 비트맵에 대한 포인터를 식별하는 단계;
상기 요청에 대응하는 영역 비트맵의 비트를 더티로 마킹하는 단계; 및
더티 블록 카운트를 포함하기 위해 상기 영역 비트맵에 상기 포인터를 갱신하는 단계를 구현하는 컴퓨터 프로그램 제품. - 플래시 메모리 플러싱을 개선하는 시스템으로서,
저장 매체 디바이스;
상기 저장 매체 디바이스와 연관되는 PCIe 기반 디바이스 컨트롤러를 포함하며, 상기 PCIe 기반 디바이스 컨트롤러는,
플래시 메모리에 기록하라는 요청을 수신하고;
상기 요청과 연관되는 데이터를 상기 플래시 메모리에 기록하고;
상기 요청을 위한 기록 영역에 대응하는 영역 비트맵에 대한 포인터를 식별하고;
상기 요청에 대응하는 영역 비트맵의 비트를 더티로 마킹하고;
더티 블록 카운트를 포함하기 위해 상기 영역 비트맵에 상기 포인터를 갱신하도록 구성되는 시스템. - 제13항에 있어서, 더티 블록 카운트를 포함하기 위해 상기 영역 비트맵에 상기 포인터를 갱신하는 단계는 상기 더티 블록 카운트를 포함하기 위해 상기 포인터의 하나 이상의 고차 비트를 갱신하는 단계를 포함하는 시스템.
- 제14항에 있어서, 상기 포인터는 48 유효 하위 비트 및 16 고차 비트를 갖는 포인터를 포함하고 상기 더티 블록 카운트는 상기 16 고차 비트에 저장되는 시스템.
- 제14항에 있어서, 상기 요청에 대응하는 영역 비트맵의 비트를 더티로 마킹하는 단계는 상기 포인터의 마지막 유효 비트의 값을 포함하기 위해 상기 포인터의 고차 비트를 갱신하는 단계, 및 상기 영역 비트맵을 식별하기 위해 상기 갱신된 포인터를 사용하는 단계를 포함하는 시스템.
- 제13항에 있어서, 상기 포인터는 포인터의 어레이 중 하나를 포함하고 상기 포인터의 어레이는 상기 포인터 각각 내의 더티 블록 카운트에 의해 배열되는 시스템.
- 제17항에 있어서, 상기 PCIe 기반 디바이스 컨트롤러는 또한,
상기 포인터의 배열된 어레이를 사용하여 상기 플래시 메모리의 복수의 영역의 가장 더티한 영역을 식별하고;
상기 가장 더티한 영역의 하나 이상의 블록을 통상적인 스토리지에 기록하도록 구성되는 시스템. - 제18항에 있어서, 하나 이상의 블록을 통상적인 스토리지에 기록하는 단계는 하나 이상의 인자의 검출에 의해 트리거되는 시스템.
- 제19항에 있어서, 상기 하나 이상의 인자는 획득되는 더티 블록의 지정된 임계값, CPU 이용의 레벨, 네트워크 이용의 레벨, 컨벤션 스토리지 입력/출력의 레벨, 캐시로부터의 하나 이상의 블록의 에이징 아웃, 및 사용자 지정된 선호도 중 적어도 하나를 포함하는 시스템.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/833,817 US10209891B2 (en) | 2015-08-24 | 2015-08-24 | Methods and systems for improving flash memory flushing |
US14/833,817 | 2015-08-24 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20170023734A true KR20170023734A (ko) | 2017-03-06 |
KR101933766B1 KR101933766B1 (ko) | 2018-12-28 |
Family
ID=57045461
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020160107925A KR101933766B1 (ko) | 2015-08-24 | 2016-08-24 | 플래시 메모리 플러싱을 개선하는 방법 및 시스템 |
Country Status (6)
Country | Link |
---|---|
US (1) | US10209891B2 (ko) |
JP (1) | JP2017084338A (ko) |
KR (1) | KR101933766B1 (ko) |
CN (1) | CN106486167B (ko) |
DE (1) | DE102016010276A1 (ko) |
GB (1) | GB2543391B (ko) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10698614B2 (en) | 2017-12-20 | 2020-06-30 | SK Hynix Inc. | Memory system and operating method thereof |
US10942675B2 (en) | 2018-01-19 | 2021-03-09 | SK Hynix Inc. | Memory system and operating method thereof |
KR20210109417A (ko) * | 2020-02-27 | 2021-09-06 | 웨스턴 디지털 테크놀로지스, 인코포레이티드 | 선호된 사용자 데이터에 대한 개선된 기입 성능을 갖는 데이터 저장소 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20170058482A (ko) * | 2015-11-18 | 2017-05-29 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 메모리 시스템의 동작 방법 |
CN109002399B (zh) * | 2018-07-09 | 2021-05-18 | 北京智芯微电子科技有限公司 | 嵌入式设备事件记录的方法 |
CN110147298B (zh) * | 2019-05-23 | 2020-02-18 | 北京天华星航科技有限公司 | 虚拟磁带库备份系统、设备 |
CN112749134B (zh) * | 2019-10-30 | 2024-05-17 | 伊姆西Ip控股有限责任公司 | 用于位图转换的方法、设备和计算机可读存储介质 |
CN111459405B (zh) * | 2020-03-05 | 2024-07-09 | 平安科技(深圳)有限公司 | 磁盘性能优化方法、装置、设备及计算机可读存储介质 |
CN111597076B (zh) * | 2020-05-12 | 2024-04-16 | 第四范式(北京)技术有限公司 | 操作数据的方法和装置以及管理持久化跳表的方法和装置 |
Family Cites Families (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5341339A (en) | 1992-10-30 | 1994-08-23 | Intel Corporation | Method for wear leveling in a flash EEPROM memory |
TW288120B (en) * | 1994-04-18 | 1996-10-11 | Macronix Int Co Ltd | Solid-state disk sector link processing method and pointer structure |
JP2916421B2 (ja) * | 1996-09-09 | 1999-07-05 | 株式会社東芝 | キャッシュフラッシュ装置およびデータ処理方法 |
US6275912B1 (en) * | 1998-06-30 | 2001-08-14 | Microsoft Corporation | Method and system for storing data items to a storage device |
US6629198B2 (en) | 2000-12-08 | 2003-09-30 | Sun Microsystems, Inc. | Data storage system and method employing a write-ahead hash log |
JP3723960B2 (ja) * | 2001-11-19 | 2005-12-07 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 外部記憶装置、外部記憶装置制御方法、プログラム及び記録媒体 |
US20030163633A1 (en) * | 2002-02-27 | 2003-08-28 | Aasheim Jered Donald | System and method for achieving uniform wear levels in a flash memory device |
US20040131055A1 (en) * | 2003-01-06 | 2004-07-08 | Juan-Carlos Calderon | Memory management free pointer pool |
US7380059B2 (en) * | 2003-05-16 | 2008-05-27 | Pillar Data Systems, Inc. | Methods and systems of cache memory management and snapshot operations |
US7039661B1 (en) * | 2003-12-29 | 2006-05-02 | Veritas Operating Corporation | Coordinated dirty block tracking |
US7231497B2 (en) * | 2004-06-15 | 2007-06-12 | Intel Corporation | Merging write-back and write-through cache policies |
JP5076411B2 (ja) | 2005-11-30 | 2012-11-21 | ソニー株式会社 | 記憶装置、コンピュータシステム |
US7624129B2 (en) * | 2006-06-30 | 2009-11-24 | Microsoft Corporation | Dual logging of changes to a user preference in a computer device |
US8903888B1 (en) * | 2006-10-27 | 2014-12-02 | Hewlett-Packard Development Company, L.P. | Retrieving data of a virtual machine based on demand to migrate the virtual machine between physical machines |
US8074014B2 (en) * | 2008-03-31 | 2011-12-06 | Microsoft Corporation | Storage systems using write off-loading |
US8443166B2 (en) * | 2009-03-06 | 2013-05-14 | Vmware, Inc. | Method for tracking changes in virtual disks |
US8793440B2 (en) * | 2010-06-17 | 2014-07-29 | Microsoft Corporation | Error detection for files |
JP5609436B2 (ja) | 2010-08-30 | 2014-10-22 | セイコーエプソン株式会社 | 印刷装置におけるデータ記憶処理装置、印刷装置及びデータ記憶処理方法 |
US10817502B2 (en) * | 2010-12-13 | 2020-10-27 | Sandisk Technologies Llc | Persistent memory management |
WO2012106362A2 (en) * | 2011-01-31 | 2012-08-09 | Fusion-Io, Inc. | Apparatus, system, and method for managing eviction of data |
US9141527B2 (en) * | 2011-02-25 | 2015-09-22 | Intelligent Intellectual Property Holdings 2 Llc | Managing cache pools |
US8806112B2 (en) * | 2011-07-14 | 2014-08-12 | Lsi Corporation | Meta data handling within a flash media controller |
KR101996641B1 (ko) * | 2012-02-06 | 2019-07-04 | 삼성전자주식회사 | 메모리 오버레이 장치 및 방법 |
US8838936B1 (en) * | 2013-11-27 | 2014-09-16 | NXGN Data, Inc. | System and method for efficient flash translation layer |
-
2015
- 2015-08-24 US US14/833,817 patent/US10209891B2/en active Active
-
2016
- 2016-08-24 KR KR1020160107925A patent/KR101933766B1/ko active IP Right Grant
- 2016-08-24 CN CN201610720989.2A patent/CN106486167B/zh active Active
- 2016-08-24 DE DE102016010276.4A patent/DE102016010276A1/de not_active Withdrawn
- 2016-08-24 GB GB1614433.9A patent/GB2543391B/en active Active
- 2016-08-24 JP JP2016164115A patent/JP2017084338A/ja active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10698614B2 (en) | 2017-12-20 | 2020-06-30 | SK Hynix Inc. | Memory system and operating method thereof |
US10942675B2 (en) | 2018-01-19 | 2021-03-09 | SK Hynix Inc. | Memory system and operating method thereof |
KR20210109417A (ko) * | 2020-02-27 | 2021-09-06 | 웨스턴 디지털 테크놀로지스, 인코포레이티드 | 선호된 사용자 데이터에 대한 개선된 기입 성능을 갖는 데이터 저장소 |
Also Published As
Publication number | Publication date |
---|---|
US20170060433A1 (en) | 2017-03-02 |
US10209891B2 (en) | 2019-02-19 |
DE102016010276A1 (de) | 2017-03-02 |
CN106486167A (zh) | 2017-03-08 |
CN106486167B (zh) | 2019-11-15 |
GB201614433D0 (en) | 2016-10-05 |
JP2017084338A (ja) | 2017-05-18 |
GB2543391B (en) | 2019-03-27 |
KR101933766B1 (ko) | 2018-12-28 |
GB2543391A (en) | 2017-04-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101933766B1 (ko) | 플래시 메모리 플러싱을 개선하는 방법 및 시스템 | |
US10649910B2 (en) | Persistent memory for key-value storage | |
US11226747B2 (en) | System and method for copy on write on an SSD | |
US9519575B2 (en) | Conditional iteration for a non-volatile device | |
KR101870521B1 (ko) | 스토리지 저널링을 개선하는 방법 및 시스템 | |
US20140344539A1 (en) | Managing data in a storage system | |
KR20190043998A (ko) | Ssd 내 핫 데이터 및 스트림을 식별하기 위한 시스템 및 방법 | |
CN108255414B (zh) | 固态硬盘访问方法及装置 | |
US11144508B2 (en) | Region-integrated data deduplication implementing a multi-lifetime duplicate finder | |
US11989423B2 (en) | Techniques for zoned namespace (ZNS) storage using multiple zones | |
US20170017405A1 (en) | Systems and methods for improving flash-oriented file system garbage collection | |
US10732840B2 (en) | Efficient space accounting mechanisms for tracking unshared pages between a snapshot volume and its parent volume | |
US9977599B2 (en) | Data deduplication with support for both thick and thin provisioning of storage objects | |
KR101676175B1 (ko) | 전원 손실 이후 데이터 손실을 방지하기 위한 메모리 저장 장치 및 방법 | |
US11803469B2 (en) | Storing data in a log-structured format in a two-tier storage system | |
US9703497B2 (en) | Storage system and storage control method | |
CN109002265B (zh) | 一种数据处理的方法以及相关装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
AMND | Amendment | ||
E902 | Notification of reason for refusal | ||
AMND | Amendment | ||
E902 | Notification of reason for refusal | ||
E601 | Decision to refuse application | ||
AMND | Amendment | ||
X701 | Decision to grant (after re-examination) |