KR101824295B1 - 솔리드 스테이트 장치 가상화를 포함하는 캐시 관리 - Google Patents
솔리드 스테이트 장치 가상화를 포함하는 캐시 관리 Download PDFInfo
- Publication number
- KR101824295B1 KR101824295B1 KR1020147006571A KR20147006571A KR101824295B1 KR 101824295 B1 KR101824295 B1 KR 101824295B1 KR 1020147006571 A KR1020147006571 A KR 1020147006571A KR 20147006571 A KR20147006571 A KR 20147006571A KR 101824295 B1 KR101824295 B1 KR 101824295B1
- Authority
- KR
- South Korea
- Prior art keywords
- cache memory
- volatile
- volatile cache
- storage
- write
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- 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/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
- 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
- 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/7201—Logical to physical mapping or translation of blocks or pages
-
- 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/7204—Capacity control, e.g. partitioning, end-of-life degradation
-
- 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/7207—Details relating to flash memory management management of metadata or control data
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
데이터 캐싱 방법은 하나 이상의 프로세서에 의해 실행하는 하나 이상의 스토리지 관리 프로그램을 저장하는 하나 이상의 프로세서, 비휘발성 제 2 스토리지 및 비휘발성 캐시 메모리를 구비하는 각각의 컴퓨터에 의해 수행된다. 상기 방법은 상기 비휘발성 캐시 메모리에서의 가용한 스토리지 크기를 식별하고, 상기 비휘발성 캐시 메모리에서의 관리 유닛의 크기를 식별하는 정보를 상기 비휘발성 캐시 메모리로부터 수신하는 단계를 포함한다. 상기 방법은 상기 비휘발성 캐시 메모리로의 기록 데이터에 대한 기록 요청을 식별하는 단계, 상기 식별된 기록 요청에 대한 상기 비휘발성 캐시 메모리로의 상기 기록 데이터를 상기 비휘발성 캐시 메모리의 어드레스 공간에서의 순차적으로 배열된 위치들로 순차적으로 기록하는 단계, 및 상기 비휘발성 캐시 메모리의 어드레스 공간에서의 각각의 위치로 상기 기록 데이터의 어드레스 또는 스토리지 오프셋을 맵핑하는 메타데이터를 메모리에 저장하는 단계를 포함한다.
Description
기술된 실시예는 일반적으로 스토리지 관리 및 솔리드 스테이트 디바이스 어드레스 공간 가상화를 위한 소프트웨어 툴에 관한 것이다.
솔리트 스테이트 스토리지 디바이스(SSD)에 대한 인기가 증가하고 있다. SSD는 데이터 저장을 위해 솔리트 스테이트 메모리를 채용한다. SSD는 종래의 하드 디스크 드라이브보다 현저하게 고속일 수 있다.
그러나, SSD는 디스크 드라이브에 비해 상대적으로 고가이다. 또한, SSD는 솔리드 스테이트 메모리의 반복적인 소거 및 기록에 연관된 신뢰성 문제를 가지고 있다. 예를 들면, 과도하게 사용된 영역의 너무 이른 고장을 방지하도록, 데이터가 다른 영역에 비해 현저하게 보다 자주 하나의 영역에 소거 및 기록되지 않는 것을 보장하기 위해 마모-라벨링(wear-labeling)이 SSD에 대해 사용될 필요성이 있다.
일부 실시예에서, 데이터 캐시 방법은 하나 이상의 프로세서에 의해 실행하기 위한 하나 이상의 스토리지 관리 프로그램을 저장하는 상기 하나 이상의 프로세서, 비휘발성 제 2 스토리지 및 비휘발성 캐시 메모리를 구비한 각각의 컴퓨터에 의해 수행된다. 상기 방법은 비휘발성 캐시 메모리에서 가용한 스토리지 크기를 식별하고, 및 상기 비휘발성 캐시 메모리에서 관리 유닛의 크기를 식별하는 정보를 상기 비휘발성 캐시 메모리 정보로부터 수신하는 단계를 포함한다. 상기 방법은 상기 비휘발성 캐시 메모리로의 데이터 기록을 위한 기록 요청을 식별하는 단계, 상기 비휘발성 캐시 메모리로의 상기 식별된 기록 요청을 위한 기록 데이터를 상기 비휘발성 캐시 메모리의 어드레스 공간에서의 순차적으로 배열된 위치들로 순차적으로 기록하는 단계, 및 상기 비휘발성 캐시 메모리의 상기 어드레스 공간에서의 각각의 위치로 상기 기록 데이터의 어드레스 또는 스토리지 오프셋을 맵핑하는 메타데이터를 메모리에 저장하는 단계를 더 포함한다.
일부 실시예에서, 컴퓨터 시스템은 하나 이상의 스토리지 관리 프로그램을 포함하는 하나 이상의 프로그램을 저장하는 메모리, 메모리에 저장된 상기 하나 이상의 프로그램에서의 명령어를 실행하기 위한 하나 이상의 프로세서, 비휘발성 제 2 스토리지에 대한 인터페이스, 및 비휘발성 캐시 메모리를 포함한다. 상기 비휘발성 캐시 메모리는 상기 컴퓨터 시스템의 상기 하나 이상의 프로세서에 의해 전송된 지시에 응답하는 컨트롤러를 포함한다. 상기 하나 이상의 스토리지 관리 프로그램은, 상기 하나 이상의 프로세서에 의해 실행될 때, 상기 컴퓨터 시스템으로 하여금 본문에 기술된 방법 중 임의의 것을 수행하도록 하는 명령어들을 포함한다.
일부 실시예에서, 하나 이상의 스토리지 관리 프로그램을 저장하는 비휘발성 컴퓨터 판독가능 스토리지 매체는, 상기 하나 이상의 프로세서, 비휘발성 제 2 스토리지 및 비휘발성 캐시 메모리를 포함하는 컴퓨터 시스템의 하나 이상의 프로세서에 의해 실행될 때, 상기 컴퓨터 시스템으로 하여금 본문에 기술된 방법 중 임의의 것을 수행하도록 하는 명령어들을 포함하고, 상기 비휘발성 캐시 메모리는 상기 컴퓨터 시스템의 상기 하나 이상의 프로세서에 의해 전송된 지시에 응답하는 컨트롤러를 포함한다.
도 1은 일부 실시예에 따라 배열된 컴퓨팅 시스템(200)의 개략도이다.
도 2는 일부 실시예에 따라 배열된 블록 레벨 필터 드라이버(300)의 개략도이다.
도 3은 일부 실시예에 따라 배열된 캐시 관리 드라이버의 개략도이다.
도 4는 일부 실시예에 따른 로그 구축 캐시 구성의 개략도이다.
도 5는 일부 실시예에 따라 저장된 맵핑 정보의 개략도이다.
도 6은 일부 실시예에 따른 SSD 구동 스토리지의 배열의 개략도이다.
도 7은 일부 실시예에 따른 순환 버퍼(circular buffer)의 개략도이다.
도 2는 일부 실시예에 따라 배열된 블록 레벨 필터 드라이버(300)의 개략도이다.
도 3은 일부 실시예에 따라 배열된 캐시 관리 드라이버의 개략도이다.
도 4는 일부 실시예에 따른 로그 구축 캐시 구성의 개략도이다.
도 5는 일부 실시예에 따라 저장된 맵핑 정보의 개략도이다.
도 6은 일부 실시예에 따른 SSD 구동 스토리지의 배열의 개략도이다.
도 7은 일부 실시예에 따른 순환 버퍼(circular buffer)의 개략도이다.
발명의 실시예에 대한 충분한 이해를 제공하기 위해 특정한 상세사항이 하기에서 설명된다. 그러나, 다양한 특정한 상세사항 없이 일부 실시예들이 실시될 수 있다는 것이 당업자에게는 명확할 것이다. 일부 예시에서, 공지된 소프트웨어 운영, 컴퓨팅 시스템 컴포넌트, 회로, 제어 신호, 및 타이밍 프로토콜들은 본 발명의 기술된 실시예를 불필요하게 불명료하게 하는 것을 방지하기 위해 상세하게 나타내지 않는다.
본문에 기술된 바와 같이, 일부 SSD는 메타데이터 관리 및 어드레스 재맵핑을 하는 컨트롤러를 포함한다. SSD에 의해 제공된 메타데이터 관리 기능은 때때로 본문에서 플래시 변환층(flash translation layer)라고 한다. 일부 실시예에서, 상기 플래시 변환층은 IO 요청에 의해 지정된 어드레스 또는 원(original) 오프셋에 대응하는 SSD 내에서의 메모리 위치에 액세스 하도록 수신된 IO 요청에서의 원 오프셋(때때로 어드레스라고 함)을 SSD 내부 오프셋으로 변환한다. 마모 라벨링, 연속한 기록 요구사항, 관리 유닛(SSD에서의 스토리지 유닛)을 소거하는 데에 필요한 시간, 및 손상된 관리 유닛을 사용하는 것을 방지하기 위한 필요성과 같은 다수의 팩터는 SSD에서의 내부 위치 또는 오프셋으로 수신된 지시에서의 어드레스(또는 오프셋)의 맵핑에 영향을 준다. SSD 상의 메타데이터 관리는 상기 디바이스 액세스 프로세스로의 오버헤드(overhead)를 도입하고, 일반적으로 주기적인 불용정보(garbage) 수집 및 또한 공간 오버프로비저닝(over-provisioning)이라고 하는 비할당(unallocated) 공간 예약을 필요로 한다.
일부 실시예에서, 상기 SSD에 의해 제공된 주소 재맵핑(내부 어드레스에 대한 외부 어드레스 맵핑)은, 대안으로 또는 주로, 마모-라벨링 제어를 위해 그리고 손상된 관리 유닛(MU)을 사용으로부터 배제하기 위해 단독으로 사용된다. 관리 유닛(소거가능 블록 또는 소거가능 유닛이라고도 함)이라는 용어는 극미하게 소거될 수 있는 SSD 어드레스 공간에서의 스토리지의 유닛을 가리킨다. 일부 실시예에서, SSD 변환 계층에 의한 어드레스 맵핑은 관리 유닛으로의 기록 연산의 수를 실질적으로 같게 유지하도록 사용된다(예를 들면.N의 팩터내에서, 예를 들면, N은 일반적으로 2와 8 사이의 수).
또한, 플래시 기반 SSD가 메모리 위치를 먼저 소거하지 않고서 특정한 메모리 위치의 재기록을 허용하지 않기 때문에 재맵핑이 또한 요구될 수 있다. 일부 SSD는 내부 버퍼로의 요청된 데이터를 포함하고, 상기 버퍼에서 데이터를 업데이트하고, 및 상기 버퍼로부터의 업데이트 콘텐츠를 소거된(예를 들면, 클린) 관리 유닛으로 기록하는 관리 유닛을 판독할 수 있다. 기타 SSD는 대신에 랜덤 데이터를 순차적으로 기록하고 따라서 메타데이터를 업데이트 함으로써 판독-변조-기록 연산을 방지할 수 있다. 데이터가 덮어쓰기될 때, SSD는 전형적으로 새로운 위치에 새로운 데이터를 기록하고, SSD의 메타데이터에 반영된 구 복사본을 무효화한다(invalidate). 그 결과, 데이터는 SSD에서 완전히 단편화할 수 있고, 요청된 데이터를 찾기 위해 어드레스 변환을 필요로 한다. 이러한 재맵핑 구현은 시간 소모적이고 일반적으로 불용정보 수집을 야기할 수 있다.
SSD는 일반적으로 성능 개선을 위해 관리 유닛을 오버프리저닝한다. 예를 들면, SSD는 충분한 수의 관리 유닛이 인입 기록 데이터 저장에 즉시 가용하다는 것을 보장하기 위한 다수의 소거된 관리 유닛을 유지관리할 수 있다. 따라서, SSD는 그것이 운영시스템에 노출하는 것 보다 예를 들면, 플래시 메모리와 같은 더 큰 스토리지를 가질 수 있다.
일부 실시예에서, SSD는 컴퓨터 시스템용 캐시 메모리로서 활용된다. 추가로, 일부 실시예에서, 컴퓨터 시스템의 하나 이상의 프로세서에 의해 실행되는, 스토리지 관리용 실행가능한 명령어들이, 메타데이터 관리 및 순차적 기록 변환에 대한 랜덤을 포함하는 SSD에 저장된 데이터를 관리하도록 제공된다. 일부 실시예에서, 컴퓨터 시스템은 SSD의 변환 층이 임의의 메모리 위치에 대한 기록을 SSD에서의 순차적 메모리 위치에 대한 기록으로 변환하는 어드레스 변환을 더이상 수행하지 않도록 SSD의 변환층에 대한 인터페이스(때때로, 본문에서 가상화 API라고 함)를 포함한다. 일부 실시예에서, 이는 SSD 변환 층의 복잡성을 감소시키고, 전체 시스템의 지연을 감소시키고, 및 SSD에서의 오버프로비저닝에 대한 요구를 제거 또는 감소시킨다.
플래시-기반 SSD를 포함하는 다수 유형의 SSD가 있다. 다양한 실시예에서, SSD는 SATA 또는 SAS 디바이스로서 구현된다. 하기에 선택적으로 기술된 SSD의 실시예에서 사용가능한 플래시 메모리는 PCI-플러그가능한 카드, NVMe(Non-Volatile Memory express) 또는 운영 시스템과 호환가능한 기타 형태에서의 플래시 메모리를 포함한다.
SSD를 이용하는 시스템의 실시예는 2011년 6월 3일 출원된, "스토리지 매체의 캐시 관리 및 가속화"라는 제하의, 미국 공동계류중 출원번호 제 13/153,117; 2010년 6월 4일 출원된 "스토리지 매체의 메모리 관리 및 가속화"라는 제하의 미국 가출원 제 61/351,740; 및 2011년 2월 22일 출원된 "부가적인 클러스터 구현을 포함하는 스토리지 매체의 스토리지 관리 및 가속화"라는 제하의 미국 가출원 61/445,225에 기술되며, 이들 전체는 참조에 의해 본문에 통합된다.
상술한 출원은 메타데이터 관리 및 랜덤을 순차적 메모리 요청으로 변환하는 것을 포함하는, 로컬 캐시로서 SSD를 이용하는 시스템 및 방법의 예시를 기술한다.
도 1은 데이터 저장을 위한 캐시로서 기능하는 솔리드 스테이트 디바이스(SSD(207))와 같은 스토리지를 포함하는 서버 시스템(205)(때때로, 이하 서버(205)라고 함)와 같은 컴퓨팅 디바이스를 가지는 컴퓨팅 시스템(200)의 개략적인 예이다. 일부 실시예에서, SSD(207)는 변환층(806)을 포함한다 변환층(806)은 선택적으로 SSD(207)내의 컨트롤러에서의 프로세서에 의해 실행되는 소프트웨어로 구현된다. SSD(207)는 스토리지 매체(215)용 캐시로서 기능하고, 이는 SAN(storage area network)(220) 상의 서버(205)로 커플링된다. 서버(205)는 하나 이상의 처리 유닛(206)과 컴퓨터 메모리(208)를 포함하고, 이는 기타 프로그램 또는 모듈(예를 들면, 운영 시스템 및/또는 애플리케이션(305), 도 3, 하나 이상의 표준 드라이버(310) 및 데이터(예를 들면, 선택적으로 캐시 맵(824)을 포함하는 캐시 메타데이터(822)와 같은) 뿐만이 아니라, 캐시 관리 드라이버(209)(또한 본문에서 스토리지 관리용 실행가능한 명령어라고 하는), 플래시 가상화 API(808)(또한 본문에서 가상화 API라고 함)를 저장하는 임의의 유형 또는 임의의 수의 컴퓨터 판독가능 매체로서 구현될 수 있다. 하나 이상의 처리 유닛(206)에 의해 실행될 때, 스토리지 관리(209)용 실행가능한 명령어는 스토리지 액세스 요청 및 SSD(207)와 스토리지 매체(215)의 활용의 실행을 관리한다. 예를 들면, 판독 및 기록 요청은 스토리지 매체(215)로 지향되거나 또는 적절하게 SSD(207)로 재지향된다. 일부 실시예에서, 스토리지 관리(209)용 실행가능한 명령어는, 기록 요청에서 어드레스의 오프셋이 순차적이지 않을때 조차도, SSD(207)로의 기록 요청을 순차적 기록 요청으로 변환하는 명령어들을 포함한다. 일부 실시예에서, 가상화 API(808)는 임의의 분산된 어드레스로의 기록을 SSD(207)에 대한 순차적 기록으로 스스로 변환시키는 책임으로부터 변환층(806)을 해제하도록 변환층(806)과 협력하여 동작한다.
일부 실시예에서, 서버(205-2)와 같은 하나 이상의 추가적인 서버(205-i)는 또한 SAN(storage area network)(220)을 통해 스토리지 매체(215)에 결합된다. 각각의 추가적인 서버(205-i)는 유사하게 SSD(207-i), 하나 이상의 처리 유닛(206-i), 및 캐시 관리 드라이버(209-i)(스토리지 관리용 실행가능한 명령어)를 포함하는 컴퓨터 메모리(208-i)를 포함한다. 시스템(200)의 다양한 실시예는 서버 클러스터가 될 수 있는 상이한 수의 이러한 서버(205)를 포함하고, 이들 서버 중 일부 또는 모두는 클러스터 노드가 될 수 있고, 스토리지 관리용 SSD 및 소프트웨어가 제공될 수 있다. 일부 실시예에서, 각각의 서버(205-i)의 각각의 SSD(207-i)는 스토리지 매체(215)용 로컬 캐시로서 기능한다. 일부 실시예에서, 각각의 SSD(207-i)는 변환층(808-i)을 포함한다.
실질적으로, 임의의 유형의 SSD가 임의의 유형의 플래시 드라이브를 포함하는(그러나 한정은 아닌) SSD(207)를 구현하기 위해 사용될 수 있다.
특정 서버 구성이 도 1에 도시되었지만, 기타 컴퓨터 시스템 서버 구성이 본문에 개시된 데이터 캐싱과 캐시 관리 방법을 구현하는 데에 사용될 수 있다는 것이 이해될 것이다.
또한, 컴퓨터 메모리(208) 상에 저장된 실행가능한 명령어(209)로서 도 1을 참조하여 기술되었지만, 본문에 기술된 스토리지 관리 기능은 일부 실시예에서 펌웨어, 또는 소프트웨어와 펌웨어의 조합으로 구현될 수 있다. 처리 유닛(들)(206)은 임의 유형의 단일 프로세서 또는 다중 프로세서의 배열로서 구현될 수 있다.
일부 실시예에서, 캐시 관리 드라이버(209)(스토리지 관리용 실행가능한 명령어)는 블록 레벨 필터 드라이버로서 구현된다. 다른 실시예에서, 캐시 관리 드라이버(209)는 파일 레벨 필터 드라이버 등으로서 구현된다. 블록 레벨 필터 드라이버(300)의 예시가 도 2에 도시되고, 여기서 스토리지 관리(209)용 실행가능한 명령어가 캐시 관리 드라이버로서 도시된다. 일부 실시예에서, 캐시 관리 드라이버(209)는 파일 시스템 또는 기타 애플리케이션(305)으로부터의 판독 및 기록 지시를 수신한다. 캐시 관리 드라이버(209)는 적어도 일부 기록 요청(예를 들면, 미리정해진 캐시 기준을 만족시키는 기록 요청)을 SSD(207)로 지향시키고, SSD(207)로부터의 판독 캐시 히트를 반환(return)한다. 판독 캐시 미스에 연관된 데이터는 SAN(220)을 통해 스토리지 디바이스(215)로부터 반환된다. 일부 실시예에서, 캐시 관리 드라이버(209)는 또한 SSD(207)로부터 스토리지 매체(215)로의 데이터의 플러시(flush)를 촉진시킨다. 일부 실시예에서, 캐시 관리 드라이버(209)는 스토리지 매체(215) 그리고 선택적으로 SSD(207)와의 통신을 위해 표준 드라이버(310)와 인터페이싱 한다. 그러나, 일부 실시예에서 캐시 관리 드라이버(209)는 SSD 액세스 지연을 감소시키는 직접적인 함수 호출에 의해 SSD와 인터페이싱한다. 캐시 관리 드라이버(209)를 파일 시스템 또는 애플리케이션(305)과 표준 드라이버(310) 위의 사이에 배치하는 것은 이롭게도 블록 레벨에서 그러나 스토리지 매체(215)를 더 큰 선택도를 가지고 가속화시키는 데에 사용되는 볼륨 매니저의 레벨 위에서의 판독 및 기록 지시의 조작을 허용할 수 있다. 즉, 일부 실시예에서, 캐시 관리 드라이버(209)는 디스크 레벨 대신 볼륨 레벨에서 동작한다.
일부 실시예에서, 캐시 관리 드라이버(209)는 캐시 관리 드라이버(209)와 SSD(207)의 변환층(808) 사이에 인터페이스를 제공하는 가상화 API(808)를 구현하는 독립적인 모듈을 포함하거나, 또는 상기 독립적인 모듈과 인터페이싱한다. SSD(207)는 마모-레벨링 제어 또는 어드레스 재맵핑을 위해 변환층(806)을 활용한다. 일부 실시예에서, 변환층(806)은 SSD(207)의 컨트롤러(820)에서 소프트웨어 드라이버 또는 펌웨어로서 구현된다. 예를 들면, SSD(207)는 하나 이상의 프로세서를 포함하고, 상술된 변환층(806)의 기능을 제공하기 위해 함께 동작하는 저장된 컴퓨터 실행가능 명령어를 포함할 수 있다. 그러나, 일부 실시예에서, SSD(207)는 그렇지 않으면 캐시 성능과 공간 활용을 개선하는 SSD(207)의 변환층(806)에 의해 수행되는 일부 기능을 대체하기 위해 가상화 API(808)와 인터페이싱한다. 특히, 캐시 관리 드라이버(209)는 어드레스 재맵핑의 실질적인 일부를 수행하기 위해 사용될 수 있다. 이는 캐시 성능을 개선시키고 SSD(207)에서의 오버프리저닝에 대한 요구를 제거 또는 감소시키며, 이는 SSD 공간 활용을 개선시킨다.
일부 실시예에서, SSD(207)는 변환층(806)의 일부 기능을 충분하게 하는 순환 버퍼로서 사용된다. 예를 들면, 캐시 관리 드라이버(209)가 이미 순환 버퍼로의 기록을 위해 SSD(207)로 순차적 기록만을 제시했기 때문에 랜덤 기록을 순차적 기록으로 터닝하기 위한 SSD(207)에서의 리소스-고밀도 프로시저에 대한 요구는 없다. 가상화 API(808)의 이용을 통한 변환층(806)의 기능을 캐시 관리 드라이버(209)로 대체하는 것은 특히 PCIe 또는 NVMe 플래시 디바이스와 같은 SSD 관리용 정교한 소프트웨어 드라이버를 가지는 SSD 디바이스에 효익이 있다.
따라서, 가상화 API(808)는 변환층(808)이 실질적으로 가상화 API(808)를 통해 캐시 관리 드라이버로부터 수신되거나 또는 그로 전송된 요청에 따른 어드레스 재맵핑의 최고의 리소스-고밀도 부분을 모두 그리고 대부분의 경우에 수행하지 않도록 변환층(806)에 대한 인터페이스를 제공하고 변환층(806)과 통신한다.
가상화 API(808)가 변환층(806)으로 하여금 랜덤 기록을 순차적 기록으로 변환시키는 어드레스 변환 기능을 제공하는 것을 중단시킬 수 있도록 하는, 일부 실시예에서, 변환층(806)은 여전히 마모-레벨링과 내부 플러시 인터리빙 기능을 가질 수 있다. 이는 변환층(806)이 사용으로부터 배제될 수 있는 손상된 관리 유닛의 추적을 유지할 수 있기 때문에 효익이 있을 수 있다. SSD(207)의 배제된 관리 유닛 추적은 SSD가 예를 들면 RAID0 또는 RAID5 아키텍처와 같은 내부 중복 아키텍처에 포함된다면 복잡하게 될 수 있다. 따라서, 변환층(806)을 통한 SSD(207)는 SSD(207)에서의 사용가능한 공간의 위치를 가지고 가상화 API(808)를 제공하고, 캐시 관리 드라이버(209)는 SSD(207) 상의 손상된 관리 유닛을 고려하거나 또는 SSD(207)를 포함하는 시스템에 제공된 특정한 중복 아키텍처를 보상할 것이 요구되지 않는다. 일부 실시예에서, 캐시 관리 드라이버(209)는 소거를 요구하는 가상 어드레스 공간에서의 영역들을 식별하도록 SSD(207)에 대한 TRIM 지시를 이용한다.
캐시 관리 드라이버(209)는 도 3에 도시된 바와 같이 임의의 수의 기능 블록을 이용하여 구현될 수 있다. 캐시 관리 드라이버(209)는 일반적으로 파일 시스템 또는 애플리케이션으로부터 하나 이상의 지시를 수신하고 플랫폼 운영 시스템과의 통신을 제공할 수 있는 지시 핸들러(405)를 포함한다. SSD 매니저(407)는 SSD(207) 내의 데이터 및 메타데이터 레이아웃을 제어할 수 있다. SSD(207)에 기록된 데이터는 이롭게도 하기에 더 상세히 기술되는 바와 같이 로그 구축 캐시 포맷으로 저장 및 관리될 수 있다. 맵퍼(410)는 원 요청된 스토리지 매체(215) 오프셋을 SSD(207)용 오프셋으로 맵핑할 수 있다. 게이트 제어 블록(412)은 일부 예시에서 하기에 더 상세히 기술되는 바와 같이 SSD(207)로 게이트 판독 및 기록하도록 제공될 수 있다. 게이트 제어 블록(412)은 이롭게도 하기에 더 상세히 기술되는 바와 같이 SSD(207)의 성능이 증가할 수 있도록 하는 주어진 시간 프레임 동안의 특정한 수의 판독 또는 기록 지시를 캐시 관리 드라이버(209)가 전송할 수 있도록 한다. 일부 예시에서, SSD(207)는 최적 수의 판독 또는 기록 요청에 연관될 수 있고, 게이트 제어 블록(412)은 연속적인 판독 또는 기록 요청의 수가 지정될 수 있도록 허용하여, SSD에 기록시 기록 병합(write coalescing)을 제공한다. 스냅퍼(414)는 SSD(207) 상에 저장된 메타데이터의 스냅샷을 생성하고 스냅샷을 SSD(207)로 기록하도록 제공될 수 있다. 스냅샷은 하기에 더 상세히 기술되는 바와 같이 충돌 복구에 유용할 수 있다. 하기에 더 상세히 기술되는 바와 같이, SSD(207)로부터의 데이터를 다른 스토리지 매체(215)로 플러쉬하도록 플러셔(flusher)(418)가 제공될 수 있다.
일부 실시예에서, 로컬 캐시 저장 디바이스(예를 들면, SSD(207))에 저장된 데이터는 로그 구축 캐시로서 저장된다. 즉, 로컬 캐시 스토리지 디바이스는 데이터 및 또한 메타데이터를 가진 로그로서 구축되면서, 순차적인 스트림으로 스토리지 디바이스로 기록되는 캐시로서 기능한다. 이러한 방식으로, 로컬 캐시 스토리지 매체(예를 들면, SSD(207))는 순환 버퍼로서 사용된다. 추가로, 일부 실시예에서, 순환 버퍼로서 SSD를 사용하는 것은 캐시 드라이버로 하여금 SSD 어드레스 공간의 특정 부분을 소거하는 것을 시작하도록 SSD에 지시하는 표준 TRIM 지시를 이용할 수 있도록 한다. 일부 실시예에서, 이들 개시된 실시예의 특징들은 SSD 공급자들로 하여금 SSD 공간의 오버프리저닝을 제거하고 액티브 SSD 공간의 크기를 증가시키도록 한다.
도 4는 일부 실시예에 따라 로그 구축된 캐시 구성의 개략도이다. 상술한 바와 같이 파일 시스템 또는 애플리케이션으로부터 판독 및 기록 요청을 수신하는 캐시 관리 드라이버(209)가 예시된다. SSD(207)는 데이터와, 오손(dirty) 영역(505), 미사용(unused) 영역(510), 및 클린(clean) 영역(515, 520)을 포함하는 로그 구축 캐시로서의 부속된 메타데이터를 저장한다. SSD(207)는 순환 버퍼로서 사용될 수 있기 때문에, 임의의 영역이 SSD(207) 엔드 경계 상으로 분할될 수 있다. 본 예시에서, 그것은 '순환하는(wrap around)' 연속한 영역으로서 간주될 수 있는 클린 영역(515, 520)이다. 오손 영역(505)에서의 데이터는 SSD(207)에 저장되지만 SSD(207)가 가속시킬 수 있는 스토리지 매체(215) 상에서 플러시되지 않는 데이터에 대응한다. 즉, 오손 영역(505)에서의 데이터는 아직 스토리지 매체(215)로 플러시되지 않았다. 오손 데이터 영역(505)은 플러시 포인터(507)에 의해 지정된 시작과 기록 포인터(509)에 의해 지정된 엔드를 구비한다. 동일한 영역이 판독 캐시로서 또한 사용될 수 있다. 캐시 드라이버는 모든 판독 요청의 이력을 관리할 수 있다. 그런다음 그것은 SSD에서 보다 빈번하게 판독 데이터를 인식 및 저장할 수 있다. 즉, 판독 요청의 이력이, 특정 데이터 영역이 임계 수 이상의 횟수를 판독하거나, 또는 특정 데이터 영역이 특정 주기로 판독된 것을 나타내면, 특정 데이터 영역은 SSD에 배치될 수 있다. 미사용 영역(510)은 새로운 데이터로 겹쳐쓰기될 수 있는 데이터를 나타낸다. 미사용 영역(510)의 시작은 기록 포인터(509)에 의해 묘사될 수 있다. 미사용 영역(510)의 엔드는 클린 포인터(512)에 의해 묘사될 수 있다. 클린 영역(515, 520)은 스토리지 매체(215)로 플러시된 유효 데이터를 포함한다. 클린 데이터는 판독 캐시로서 표시될 수 있고 판독 가속화를 위해 사용될 수 있다. 즉, 클린 영역(515, 520)에서의 데이터는 SSD(207) 및 스토리지 매체(215) 모두에 저장된다. 클린 영역의 시작은 클린 포인터(512)에 의해 묘사되고, 클린 영역의 엔드는 플러시 포인터(507)에 의해 묘사된다.
동작하는 동안, 인입 기록 요청은 기록 포인터(509)에 의해 지시된 SSD(207)의 위치로 기록되고, 기록 포인터는 다음 위치로 증분된다. 이러한 방식으로, SSD로의 기록은 기록 포인터에 의해 지시되는 바와 같이 연속하여 이루어질 수 있다. 이러한 방식으로, 비연속 기록 요청이 파일 시스템 또는 기타 애플리케이션에 의해 발급됨에도 불구하고 불구하고 연속한 기록이 관리될 수 있다.
SSD(207)로부터의 데이터는 플러시 포인터(507)에 의해 지시된 위치로부터 스토리지 매체(215)로 플러시되고, 플러시 포인터는 증분된다. 데이터는 다양한 플러시 전략 중 임의의 것에 따라 플러시 될 수 있다. 일부 실시예에서, 재정리, 병합, 및 기록 취소후 데이터가 플러시된다. 데이터는 스토리지 매체 가속시 자신의 위치의 엄격한 순서로 플러시될 수 있다. 추후에 그리고 플러시와 비동기로, 데이터는 클린 포인터(512)에 의해 지시된 위치에서 무효화(invalidate)되고, 증분된 클린 포인터는 미사용 영역에 인접하게 유지된다. 이러한 방식으로, 도 4에 도시된 영역은 시스템 동작동안 연속하여 증분될 수 있다. 오손 영역(505)과 미사용 영역(510)의 크기는, 인입 기록 요청을 만족시키기에 충분한 크기의 미사용 공간이 제공되고 오손 영역이 아직 스토리지 매체(215)로 플러시되지 않은 데이터 크기를 감소시키도록 충분히 크기조정되도록, 하나 이상의 시스템 파라미터로서 규정될 수 있다.
인입 판독 요청은 요청된 데이터가 오손 영역(505) 또는 클린 영역(515, 520) 중 어느 하나에서의 SSD(207)에 상주하는 지를 식별하도록 평가될 수 있다. 메타데이터의 사용은 하기에 더 상세히 기술되는 바와 같이 판독 요청의 해결을 도울 수 있다. 클린 영역(512, 520) 또는 오손 영역(505)에서의 위치로의 판독 요청은 데이터가 SSD의 이들 위치로부터 반환되도록 하고, 이는 스토리지 매체(215)로부터 데이터를 반환하는 것 보다 더 빠르다. 이러한 방식으로, 판독 요청은 캐시 관리 드라이버(209) 및 SSD(207)의 사용에 의해 가속화될 수 있다. 또한, 일부 실시예에서, 빈번하게 사용된 데이터는 SSD(207)에 유지될 수 있다. 즉, 일부 실시예에서, SSD(207)에 저장된 데이터에 연관된 메타데이터는 데이터가 판독된 횟수를 나타낼 수 있다. 빈번하게 요청된 데이터는 무효화(invalidation)에 후속하여서 조차도 SSD(207)에 유지될 수 있다. 빈번하게 요청된 데이터는 무효화될 수 있고, 기록 포인터(509)에 의해 지시된 위치로 이동될 수 있다. 이러한 방식으로, 빈번하게 요청된 데이터는 캐시에 유지되고, 개선된 판독 성능의 효익을 얻을 수 있지만, 연속한 기록 특징이 유지될 수 있다.
그 결과, 파일 시스템 또는 애플리케이션에 의해 캐시 관리 드라이버(209)로 발급된 불연속 위치로의 기록은 병합되어 SSD(207)로의 순차적 기록으로 변환될 수 있다. 상술한 로그 구축 캐시 동작의 순환 특성은 또한 이롭게도 SSD에서 마모 레벨링을 제공한다.
따라서, 로그 구축 캐시의 실시예가 상술되었다. 로그 구축 캐시 포맷을 활용함으로써, 캐시의 순환 특성에 기인하여, 랜덤 기록이 캐시 관리 드라이버에 의해 순차적 SSD 요청으로 변환되었음에 유의하라. 로그 구축 캐시에 저장된 데이터 구조의 예시가 도 4를 참조하여 기술된다. 로그 구축 캐시는 SSD(207)의 모두 또는 임의의 부분을 차지한다(take up). SSD는 또한 로그 구축 캐시에 대한 라벨(522)을 저장할 수 있다. 라벨(522)은 서명, 기계 ID, 및 버전을 포함하는(그러나 이에 한정되지 않음) 관리자 데이터를 포함할 수 있다. 라벨(522)은 또한 마지막 유효 데이터 스냅샷의 위치를 식별하는 구성 레코드를 포함할 수 있다. 스냅샷은 충돌 복구에 사용될 수 있고, 하기에 더 상세히 기술된다. 라벨(522)은 스토리지 매체(215)와 같은 캐시 관리 드라이버(209)에 의해 가속되는 데이터 볼륨에 관한 정보를 구비하는 볼륨 테이블을 더 포함할 수 있다. 그것은 또한 포인터 또는 최소의 최근 스냅샷을 포함할 수 있다.
오손 영역(505)에 저장된 데이터 레코드는 도 4에 더 상세히 도시되었다. 특히, 데이터 레코드(531-541)가 도시된다. 데이터에 연관된 데이터 레코드는 도 4에서 "D" 라벨로 지시된다. 하기에 더 상세히 기술되는 메타데이터 맵 페이지에 연관된 레코드는 도 4에서 "M" 라벨로 지시된다. 스냅샷에 연관된 레코드는 도 4에서 "Snap" 라벨로 지시된다. 각각의 레코드는 레코드와 함께, 일반적으로 레코드의 시작에 저장된 연관된 메타데이터를 구비한다. 예를 들면, 데이터 레코드(534)의 확대도가 데이터 부(534a) 및 메타데이터 부(534b)와 함께 도시된다. 메타데이터 부(534b)는 데이터를 식별하고 예를 들면 시스템 충돌에 후속하여 복구를 위해 사용될 수 있는 정보를 포함할 수 있다. 메타데이터 부(534b)는 볼륨 오프셋, 대응하는 데이터 길이, 및 대응하는 데이터의 볼륨 고유 ID를 포함하지만, 그에 한정되는 것은 아니다. 데이터 및 연관된 메타데이터는 단일 트랜잭션으로서 SSD에 기록될 수 있다.
도 4에 도시된 스냅샷(538, 539)과 같은 스냅샷은 이전의 스냅샷 이래로 기록된 각각의 데이터 레코드로부터의 메타데이터를 포함할 수 있다. 스냅샷은 임의의 다양한 횟수로 기록될 수 있다. 일부 예시에서, 스냅샷은 특정 횟수의 데이터 기록에 후속하여 기록될 수 있다. 일부 예시에서, 스냅샷은 일정한 크기의 경과 시간에 후속하여 기록될 수 있다. 기타 주기가 또한 사용될 수 있다(예를 들면, 시스템의 관대한 셧다운시 스냅샷을 기록한다). 스냅샷을 저장함으로써, 충돌후 복구 시간이 이롭게도 일부 실시예에서 단축될 수 있다. 즉, 스냅샷은 다수 데이터 레코드와 연관된 메타데이터를 구비할 수 있다. 일부 예시에서, 각각의 스냅샷은 하기에 더 상술되는 로컬 오프셋의 볼륨 오프셋으로의 맵핑을 보조하는 맵 트리 및, 마지막 스냅샷 이후에 변조된 페이지에 대응하는 임의의 오손 맵(dirty map) 페이지를 포함할 수 있다. 충돌 복구에 후속하여 스냅샷을 판독하는 것은 SSD(207) 상의 다수의 위치에서 다수의 데이터 레코드를 판독할 필요성을 제거 또는 감소시킬 수 있다. 대신에, 다수의 데이터 레코드는 스냅샷 판독에 기초하여 복구될 수 있고, 더 적은 개별 데이터 레코드(예를 들면, 스냅샷 생성에 후속하여 기록된 레코드)가 판독될 필요성이 있을 수 있다. 동작중, 마지막 유효 스냅샷이 마지막 스냅샷의 시간에 맵트리를 복구하기 위해 판독될 수 있다. 그런다음, 스냅샷 후에 기록된 데이터 레코드는 개별적으로 판독될 수 있고, 맵트리는 복구에 후속하여 정확한 맵트리를 가져오는 데이터 레코드에 따라 변조된다. 고속 복구에 추가하여, 스냅샷은 하기에 더 상술되는 클러스터 환경에서 메타데이터 공유기능을 할 수 있다.
도 4에서, 메타데이터 및 스냅샷이 또한 SSD(207)로의 데이터 레코드와 함께 연속한 방식으로 기록될 수 있다는 것에 유의하라. 이는 기록의 수와 단편화 레벨을 감소시킴으로써 기록 성능을 개선하도록 하고 일부 실시예에서 마모 레벨링에 대한 우려를 감소시킬 수 있다.
로그 구축 캐시는 매우 효율적으로 TRIM 지시의 사용을 허용한다. 캐시 드라이버는 TRIM 지시를 적절한 크기의 클린 데이터가 미사용(무효) 데이터로 터닝되었을 때 SSD로 전송할 수 있다. 이는 이롭게도, SSD 내부 메타데이터 관리를 간략화시키고 일부 실시예에서 마모 레벨링을 개선할 수 있다.
따라서, 이롭게도 로컬 캐시로서 기능하는 SSD에서 사용될 수 있는 로그 구축 캐시의 실시예가 상술되었다. 로그 구축 캐시는 이롭게도 연속한 기록 동작에 제공할 수 있고, 마모 레벨링의 돌발상황(incident)을 감소시킬 수 있다. 데이터가 로컬 어드레스를 이용하여 파일 시스템 또는 기타 애플리케이션에 의해 요청될 때, 그것은 SSD(207) 또는 스토리지 매체(215)에 위치될 수 있다. 실제 데이터 위치는 메타데이터를 참조하여 식별된다. 메타데이터 관리의 실시예가 보다 상세히 기술된다.
본문에 기술된 맵핑의 실시예는 일반적으로 원 스토리지 매체 오프셋(파일 시스템 또는 기타 애플리케이션에 의해 사용될 수 있는)과 로컬 캐시 또는 스토리지 매체에서의 실제 오프셋 사이의 오프셋 변환을 제공한다. 일반적으로 상술한 바와 같이, SSD가 로컬 캐시로서 활용될 때, 캐시 크기는 매우 클 수 있다(일부 예시에서 수백 기가바이트 이상). 크기는 일반적인(일반적으로 메모리에서) 캐시 크기보다 더 클 수 잇다. 따라서, 도 1의 컴퓨터 액세스가능한 매체(208) 상에서와 같이 시스템 메모리에서 모든 맵핑 정보를 유지하는 것은 실현가능하지도 또는 바람직하지도 않을 수 있다. 따라서, 일부 실시예는 맵핑 정보의 일부가 시스템 메모리에 저장되지만 맵핑 정보의 일부는 그 자체로 캐싱되는 멀티-레벨 맵핑 관리를 제공한다.
도 5는 일부 실시예에 따라 저장된 맵핑 정보의 개략도이다. 맵핑은 파일 시스템 또는 기타 애플리케이션으로부터의 수신된 스토리지 매체 오프셋을 도 1의 SSD(207)와 같은 로컬 캐시에 대한 오프셋으로 변환하는 방법을 기술할 수 있다. 상부 레벨의 맵핑 정보는 당업계에 일반적으로 공지된 바와 같이 안정된(balanced) 트리의 일부 형태(예를 들면, RB-트리)로서 구현될 수 있고, 여기서 모든 브랜치의 길이는 예측가능한 액세스 시간을 유지하기 위해 상대적으로 동일하다. 도 5에 도시된 바와 같이, 맵핑 트리는 검색을 위한 루트로서 사용될 수 있는 제 1 노드(601)를 포함할 수 있다. 트리의 각각의 노드는 메모리 또는 SSD에 위치되는 메타데이터 페이지(맵 페이지라고 하는)로 포인팅할 수 있다. 다음 노드(602, 603, 604)는 제 1 노드(601)에 의해 지정된 루트 다음의 스토리지 매체 어드레스 공간의 부분을 지정할 수 있다. 도 5의 예시에서, 노드(604)는 하나 이상의 대응하는 맵 페이지에 대한 포인터를 포함하는 최종 '립(leaf)' 노드이다. 맵 페이지는 특정 스토리지 매체 오프셋과 SSD 오프셋 사이의 최종 맵핑을 제공한다. 최종 노드(605, 606, 607, 및 608)는 또한 맵 페이지에 대한 포인터를 포함한다. 맵핑 트리는 일반적으로 도 1의 컴퓨터 액세스가능한 매체(208)와 같은 시스템 메모리(620)에 저장된다. 임의의 노드는, 시스템 메모리에 저장된 자기 자신인 맵 페이지를 포인팅하거나 또는 도 1의 SSD(207)에서와 같이, 다른 곳에(예를 들면, 스왑 아웃된(swapped-out) 페이지의 경우) 저장된 맵페이지에 대한 포인터를 포함할 수 있다. 이러한 방식으로, 모든 맵 페이지가 시스템 메모리(620)에 저장되는 것은 아니다. 도 5에 도시된 바와 같이, 노드(606)는 SSD(207)에서의 레코드(533)에 대한 포인터를 포함한다. 노드(604)는 SSD(207)에서의 레코드(540)에 대한 포인터를 포함한다. 그러나, 노드(607, 608, 및 609)는 시스템 메모리(620) 그 자체에서의 맵핑 정보에 대한 포인터를 포함한다. 일부 예시에서, 시스템 메모리(620) 자체에 저장된 맵 페이지는 또한 SSD(207)에 저장될 수 있다. 이러한 맵 페이지는 SSD(207)에서 영구적인 복사본을 가지지 않는 '오손' 맵 페이지와는 반대로 '클린'이라고 한다.
동작동안, 도 3의 맵퍼(410)와 같은 소프트웨어 프로세스는 파일 시스템 또는 기타 애플리케이션으로부터의 원 지시에 연관된 스토리지 매체 오프셋을 수신할 수 있다. 맵퍼(410)는 메모리 지시에 대한 SSD 오프셋을 판정하기 위해 시스템 메모리(620)에서의 맵핑 트리를 참고할 수 있다. 트리는 시스템 메모리 자체에 저장된(스왑 아웃된) 요청된 맵핑 정보로 포인팅하거나, 또는 SSD(207)에 저장된 맵 페이지 레코드로 포인팅할 수 있다. 맵 페이지는 메타데이터 캐시에 나타나지 않을 수 있고, 먼저 로딩될 수 있다. 메타데이터 캐시로의 맵페이지 판독은 더 오래 걸릴 수 있고, 따라서, 빈번하게 사용되는 맵 페이지는 이롭게도 시스템 메모리(620)에 저장될 수 있다. 일부 실시예에서, 맵퍼(410)는 어느 맵 페이지가 가장 자주 사용되는지 추적할 수 있고, 가장 또는 보다 자주 사용된 맵 페이지가 스왑 아웃되는 것을 방지할 수 있다. 상술된 로그 구축 캐시 구성에 따라, SSD(207)에 기록된 맵 페이지는 도 4의 기록 포인터(509)에 의해 지정된 연속한 위치로 기록될 수 있다.
따라서, 멀티레벨 맵핑의 실시예가 상술되었다. 시스템 메모리에서 일부 메타데이터 맵 페이지를 유지관리함으로써, 이들 캐싱된 맵 페이지를 참조하는 액세스 시간이 이롭게도 감소될 수 있다. SSD(207) 또는 기타 로컬 캐시 디바이스에 메타데이터 맵 페이지 중 다른 것을 저장함으로써, 메타데이터를 저장하는 시스템 메모리의 크기는 이롭게도 감소될 수 있다. 이러한 방식으로, SSD(207)에 저장된 대용량 데이터(일부 예시에서 수백 기가바이트)에 연관된 메타데이터가 효율적으로 관리될 수 있다.
도 6은 일부 실시예에 따른 SSD(900)에서의 스토리지 위치의 개략도이다. 상술된 바와 같이, 일부 실시예는 순환 버퍼로서 SSD 상의 스토리지 공간을 구성한다. 도 6에서, SSD(900)는 오손 영역(902), 미사용 영역(904), 및 클린 영역(906)을 포함할 수 있다. 오손 영역(902)은 버퍼의 순환 속성을 예시하기 위해 2개의 위치에서 도시된다. 기록 포인터는 오손 영역(902)과 미사용 영역(904) 사이의 위치를 묘사하고, 클린(TRIM) 포인터는 미사용 영역과 클린 영역 사이의 위치를 묘사하고, 플러시 포인터는 클린 영역과 오손 영역 사이의 위치를 묘사한다. 이들 포인터는 이동 영역을 추적하기 위해 SSD의 동작 동안 이동된다. 오손, 미사용, 및 클린 영역이 상술되었지만, 개관이 여기서 다시 제공된다. 오손 영역(902)을 호출(recall)하는 것은 판독 및 기록 캐시 데이터에 의해 공유될 수 있다. 오손 영역(902)에서의 기록 캐시 데이터는 기타 스토리지 매체로 플러시 되지 않고, SSD(900) 상에서만 플러시된다. 미사용 영역(904)은 새로운 데이터에 대해 예약되고, 클린 영역(906)은 다른 스토리지 매체로 이미 플러시된 유효 데이터를 포함한다.
미사용 영역(904)이 크기가 감소되면(새로운 기록에 기인하여), 캐시 관리 드라이버는 가상화 API를 통한 캐시 관리 드라이버로부터 SSD(900)로의 TRIM 지시를 전송하는 것을 포함하는 클린 영역(906)으로부터의 데이터를 무효화하기 시작하할 수 있다. 오손 영역(902)과 클린 영역(906)은 유효하게 판독될 수 있는 유효 플래시 공간을 나타내는 반면, 미사용 영역(904)은 캐시 소프트웨어에 의해 판독될 수 없는 무효(invalid) 플래시 공간을 나타낸다.
SSD(900)의 변환층은 어느 관리 유닛이 도시된 영역들을 형성하기 위해 사용되는지 관리하기 위해 사용될 수 있다. 예를 들면, 상술된 바와 같이, 새로운 데이터는 클린 포인터에 의해 지시된 위치로 기록하고 클린 포인터를 증분함으로써 미사용 영역(904)에서 순차적으로 캐시 관리 드라이버에 의해 기록될 수 있다. 캐시 관리 드라이버가 새로운 데이터를 기록하도록 지시를 제공할 때, 변환층(806)은 새로 소거된 관리 유닛을 할당하거나 또는 요청은 여전히 가용 공간을 가지는 현재-할당된 관리 유닛에 기록하는 것을 계속하게 할 수 있다. 변환층(806)은 따라서 새로운 관리 유닛 할당을 제어할 수 있다. 이러한 방식으로, 캐시 관리 드라이버(209)는 도 1의 SSD(207) 중 어느 관리 유닛이 유효하고 미사용 영역에서 사용에 가용한지를 판정할 필요가 없을 수 있다.
관리 유닛이 배드(예를 들면, 고장)가 되면, 변환층(806)은 가용 SSD 공간에 변화가 있음을 가상화 API(808)를 통해 캐시 관리 드라이버(209)에 통지할 수 있다. 고장난 관리 유닛, 또는 미리정해진 수의 고장난 관리 유닛의 표시에 응답하여, 캐시 관리 드라이버(209)는 미사용 영역(904)의 크기를 증가시킬 수 있다. 이는 예를 들면 미사용 영역(904)에서 사용가능한 공간이 크기가 관리 유닛이 고장일 때 조차 안정적인 상태를 유지할 수 있도록 한다.
도 7은 일부 실시예에 따른 순환 버퍼의 개략도이다. 캐시 버퍼(1005)는 상술된 바와 같이 오손, 미사용, 및 클린 영역으로 배열될 수 있다. 일부 실시예에서, SSD는 메타데이터용 또다른 순환 버퍼를 포함하고, 메타데이터 버퍼(1010)가 도 7에 도시된다. 메타데이터 버퍼(1010)는 캐시 관리 드라이버(209) 자체의 메타데이터를 저장할 수 있고, 이는 도 4 및 5를 참조하여 상술된 메타데이터와 상이하다. 예를 들면, 캐시 관리 드라이버(209)는 가속된 볼륨에 관한 정보를 업데이트하고, 부팅 시간에 요구될 수 있는 루트 메타데이터 포인터를 업데이트할 수 있다. 이러한 유형의 정보는 또한 순환 버퍼가 될 수 있는 메타데이터 버퍼(1010)에 저장될 수 있다.
일반적으로, 메타데이터 버퍼(1010)는 크기가 작을 수 있다(예를 들면, 일부 예시에서, 스토리지 공간을 할수 있는 적은 관리 유닛이 될 수 있는, 1-2MB). 메타데이터 버퍼(1010)는 또한 상술된 바와 같이 관리 유닛이 불용이 될 경우 미사용 영역의 크기가 성장할 수 있는 가용 크기가 될 수 있는 캐시 버퍼(1005)와는 반대로 고정된 크기가 될 수 있다. 메타데이터 버퍼(101)가 고정 크기를 가지기 때문에, 메타데이터 버퍼(1010)에 속하는 관리 유닛이 불용이 될 경우, 그것은 클린 및 비할당 관리 유닛으로부터 취해져야하는 또다른 유효 관리 유닛에 의해 대체될 수 있다. 따라서, 이는 클린 영역에서의 사용으로부터 관리 유닛을 제거하고, 캐시 버퍼(1005)의 클린 영역의 크기를 증가시키게 된다.
일부 실시예에서, 캐시 관리 드라이버(209)는 메타데이터 버퍼(101)에 저장하기 위해 SSD로 메타데이터를 전송하고, 순환 버퍼로서 메타데이터 버퍼를 사용하기 위해 메타데이터 버퍼(1010)에서의 지정된 관리 유닛을 소거하기 위한 지시를 포함하는 지시를 SSD로 전송한다. 일부 실시예에서, 소거되면, 메타데이터 버퍼(1010)에서 미리 사용된 관리 유닛은 변환층(806)에 의해 유지관리되는 가용한 관리 유닛의 공통 리스트로 삽입된다. 이러한 방식으로, 메타데이터 버퍼(1010)에서 사용되는 관리 유닛을 포함하는 모든 관리 유닛이 변환층(806)에 의해 관리되는 마모-레벨링에 포함될 수 있다.
도 1 및 2를 다시 참조하면, 가상화 API(808)의 일부 추가적인 상세사항이 기술된다. 일부 실시예에서, 가상화 API(808)에 의해 보조되는, 캐시 관리 드라이버와 변환층(806) 사이의 통신은 직접 기능 호출 인터페이스에 기초한다. 이러한 방식으로, 가상화 API(808)는 표준 IO 스택과 연관되는 오버헤드를 방지하는 것을 돕는다. 일부 실시예에서, 가상화 API(808)는 후속하는 함수 및 콜백의 일부 또는 모두를 포함한다. 특정 호출명의 사용은 예시일 뿐이며 한정을 의도하지 않는다.
FioQueryFlashInfo(). 상기 함수는 SSD 스토리지의 총 가용 크기, SSD 상의 관리 유닛의 크기, 및 비가용 관리 유닛의 최초 수를 반환한다. 이러한 정보를 이용하여, 캐시 관리 드라이버(209)는 캐시 버퍼(1005)(도 7)의 최초 크기를 설정하고, 캐시 버퍼(1005)의 오손, 미사용 및 클린 영역의 크기를 설정한다. 미사용 영역(510)(도 4) 또는 (904)(도 6)을 때때로 해제(free) 영역이라고 한다.
FioRegisterCallbacks(). 상기 함수는 SSD의 변환층으로부터 호출될 수 있는 콜백 함수에서의 포인터의 벡터를 정의할 수 있다.
FioSerMetadataBufferSize(). 상기 함수는 다수의 관리 유닛에 관하여 메타데이터 버퍼의 크기를 설정할 수 있다.
FioWrite(). 상기 함수는 기록 IO를 시작하고 예를 들면 메타데이터 또는 캐시 버퍼와 같은 버퍼 ID, 기록을 플레이싱하기 위한 버퍼에서의 오프셋, 기록될 데이터 길이, 메모리에서의 사용자 버퍼의 분산-집합(scatter-gather) 리스트, 및 쿠키를 포함할 수 있다.
FioRead(). 상기 함수는 판독 IO를 시작하고 예를 들면 메타데이터 또는 캐시 버퍼와 같은 버퍼 ID, 판독 위치를 위한 버퍼에서의 오프셋, 판독될 데이터 길이, 메모리에서의 사용자 버퍼의 분산-집합(scatter-gather) 리스트, 및 쿠키를 포함할 수 있다.
FioTrim(). 상기 함수는 SSD의 변환층으로 하여금 예를 들면 미사용 영역(904)에서 공간을 생성하기 위해 지정된 관리 유닛(예를 들면, 클린 포인터의 현재 위치에서 시작하는, 클린 영역(906)에서의 관리 유닛)을 소거하도록 강제한다. 일부 실시예에서, 함수는 예를 들면 메타데이터 또는 캐시 버퍼 ID와 같은 버퍼 ID, 소거될 위치에 대한 버퍼에서의 오프셋, 소거할 길이를 포함하고; 오프셋 및 길이 파라미터는 일반적으로 관리 유닛 경계로 정렬된다. 일부 실시예에서, 캐시 관리 드라이버는 관리 유닛의 크기를 획득하고 상기 API 함수를 통해 전송된 지시에서 사용될 오프셋 및 길이 파라미터를 판정하기 위해 FioQueryFlahInfo() 함수로 부터 반환된 정보를 활용한다.
FioQueryAvailableSpace(). 일부 실시예에서, 상기 함수는 배드 관리 유닛 제거후에 SSD에서의 가용한 공간의 크기를 반환한다.
FioCompletionCallback(). 일부 실시예에서, 상기 함수는 판독, 기록 또는 소거 연산 완료시 변환층(SSD에서)에 의해 호출된다. 일부 실시예에서, 상기 호출에 응답하여 변환층은 상태 및 쿠키를 수신한다. 일부 실시예에서, 상기 함수는 임의의 인터럽트된 문맥(context)으로 호출될 수 있다.
FioIncreaseFreeSizeCallback(). 일부 실시예에서, 상기 함수는 배드 관리 유닛이 발견되었을 때 변환층(SSD에서)에 의해 호출된다. 일부 실시예에서, 상기 함수는 비가용 관리 유닛의 총 크기를 캐시 관리 드라이버로 제공한다. 상기 함수는 임의의 문맥으로 호출될 수 있다. 일부 실시예에서, 상기 호출에 응답하여, 캐시 관리 드라이버는 캐시 버퍼의 미사용 영역(904)의 크기를 확장시킨다.
일부 실시예에서, 데이터 캐싱 방법이 하나 이상의 프로세서(206)(도 1), 하나 이상의 프로세서(206)에 의해 실행하는 하나 이상의 스토리지 관리 프로그램(예를 들면, 캐시 관리 드라이버(209))를 저장하는 메모리(208)(도 1), 컴퓨터 시스템의 하나 이상의 프로세서에 의해 전송되는 지시에 응답하는 컨트롤러(820)(도 2)를 포함하는 비휘발성 캐시 메모리(예를 들면, SSD(207)) 및 비휘발성 제 2 스토리지(215)를 가지는 각각의 컴퓨터 시스템(예를 들면, 도 1에 도시된 시스템(200)의 서버(205))에 의해 수행된다. 일부 실시예에서, 상기 방법은 비휘발성 캐시 메모리에서의 가용한 스토리지 크기를 식별하고 비휘발성 캐시 메모리에서의 관리 유닛의 크기를 식별하는 정보를 비휘발성 캐시 메모리로부터 수신하는 단계를 포함한다. 상기 제공된 예시에서, 상기 정보는 FioQueryFlashInfo() 함수를 이용하여 획득된다.
본 방법은 각각의 식별된 기록 요청이 어드레스 또는 스토리지 오프셋 및 기록 데이터를 포함하는, 비휘발성 캐시 메모리로의 기록 데이터에 대한 기록 요청을 식별하는 단계를 더 포함한다. 예를 들면, 일부 실시예에서, 비휘발성 캐시 메모리로의 데이터 기록을 위한 기록 요청을 식별하는 단계는 비휘발성 스토리지로의 기록 데이터에 대한 기록 요청을 수신하는 단계로서, 각각의 기록 요청이 어드레스 또는 스토리지 오프셋과 기록 데이터를 포함하는 단계, 및 캐싱 기준에 따라 수신된 기록 요청의 서브셋을 식별하는 단계를 포함한다.
상기 방법은 식별된 기록 요청에 대한 기록 데이터를 비휘발성 캐시 메모리로 순차적으로 기록하는 단계를 더 포함한다. 순차적으로 기록 데이터를 비휘발성 캐시 메모리에 기록하는 단계는, 기록 데이터가 기록 데이터의 어드레스 또는 오프셋에 대해 어떻게 랜덤하게 분산되는 지에 관해 고려하지 않고서, 비휘발성 캐시 메모리의 어드레스 공간에서의 순차적으로 배열된 위치에 기록하는 단계를 포함한다. 예를 들면, 일부 실시예에서, 기록 데이터의 어드레스 또는 오프셋은 컴퓨터 시스템에 의해 사용되는 제 2 스토리지(215)의 어드레스 또는 어드레스 공간에서의 오프셋이다.
상기 방법은 기록 데이터의 어드레스 또는 스토리지 오프셋을 비휘발성 캐시 메모리의 어드레스 공간에서의 각각의 위치로 맵핑하는 메타데이터를 컴퓨터 시스템에 저장하는 단계를 더 포함한다.
일부 실시예에서, 상기 방법은 컴퓨터 시스템에서 기록 포인터, 클린 포인터 및 플러시 포인터(예를 들면, 도 4 및 5 참조)를 관리하는 단계를 포함하고, 상기 포인터들은 비휘발성 캐시 메모리의 미사용, 클린 및 오손 영역의 경계에 대응한다. 포인터들은 비휘발성 캐시 메모리에서의 가용한 관리 유닛의 미리정의된 순서의 상이한 위치들을 식별한다. 포인터들을 관리하는 단계는 기록 데이터가 비휘발성 캐시 메모리로 순차적으로 기록될 때 기록 포인터를 전진시키는 단계를 포함한다.
일부 실시예에서, 비휘발성 캐시 메모리에서의 가용한 스토리지 크기를 식별하는 수신된 정보는 비휘발성 캐시 메모리의 어드레스 공간의 크기를 식별하는 정보 및 비휘발성 캐시 메모리에서의 비가용(예를 들면, 결함이 있는) 관리 유닛에 대응하는 어드레스 공간의 크기를 식별하는 정보를 포함한다. 일부 실시예에서, 비휘발성 캐시 메모리의 상기 어드레스 공간의 크기는 상기 방법의 고정된 쓰루풋 성능을 유지시킨다. 추가로, 일부 실시예에서, 기록, 클린 및 플러시 포인터를 관리하는 단계는 비휘발성 캐시 메모리에서의 비가용 관리 유닛에 대응하는 어드레스 공간의 크기보다 더 큰 크기로 미사용 영역을 유지관리하도록 상기 포인터들을 관리하는 단계를 포함한다.
일부 실시예에서, 기록, 클린 및 플러시 포인터를 관리하는 단계는 비휘발성 캐시 메모리의 오손 영역에서의 데이터를 상기 비휘발성 제 2 스토리지로 플러시하고, 상기 플러시 포인터를 전진시켜 클린 및 오손 영역의 공유된 경계를 이동시키는 지시를 비휘발성 캐시 메모리로 전송하는 단계를 포함한다.
일부 실시예에서, 기록, 클린 및 플러시 포인터를 관리하는 단계는 비휘발성 캐시 메모리의 클린 영역에서의 데이터를 무효화시키고, 상기 클린 포인터를 전진시켜 클린 및 미사용 영역의 공유된 경계를 이동시키는 지시를 비휘발성 캐시 메모리로 전송하는 단계를 포함한다. 일부 실시예에서, 클린 영역에서의 데이터를 무효화시키는 지시는 비휘발성 캐시 메모리에서의 대응하는 관리 유닛을 소거하는 지시이다.
일부 실시예에서, 비휘발성 캐시 메모리에서의 가용한 스토리지 크기를 식별하는 상술한 수신된 정보는 비휘발성 캐시 메모리의 어드레스 공간의 크기를 식별하는 정보를 포함한다.
일부 실시예에서, 비휘발성 캐시 메모리의 어드레스 공간은 비휘발성 캐시 메모리에서의 물리적 메모리로 비휘발성 캐시 메모리에 의해 맵핑된 연속한 가상 어드레스 공간이다. 일부 실시예에서, 비휘발성 캐시 메모리의 어드레스 공간은 가상 어드레스 공간이고, 식별된 기록 요청에서의 어드레스 또는 스토리지 오프셋은 비휘발성 제 2 스토리지의 어드레스 또는 어드레스 공간에서의 오프셋이다.
일부 실시예에서, 비휘발성 캐시 메모리는 솔리드 스테이트 스토리지(예를 들면, 하나 이상의 솔리트 스테이트 스토리지 디바이스를 이용하여 구현되는)이다. 일부 실시예에서, 비휘발성 캐시 메모리는 플래시 메모리이다. 일부 실시예에서, 비휘발성 제 2 스토리지는 하나 이상의 하드디스크 스토리지 디바이스를 이용하여 구현된다.
일부 실시예에서, 컴퓨터 시스템은 하나 이상의 스토리지 관리 프로그램을 포함하는 하나 이상의 프로그램을 저장하는 메모리, 메모리에 저장된 하나 이상의 프로그램에서의 명령어를 실행하는 하나 이상의 프로세서, 비휘발성 제 2 스토리지로의 인터페이스, 및 비휘발성 캐시 메모리를 포함한다. 비휘발성 캐시 메모리는 컴퓨터 시스템의 하나 이상의 프로세서에 의해 전송되는 지시에 응답하는 컨트롤러를 포함한다. 하나 이상의 스토리지 관리 프로그램은 하나 이상의 프로세서에 의해 실행될 때 컴퓨터 시스템으로 하여금 상술한 방법 중 임의의 방법을 수행하도록 하는 명령어를 포함한다.
일부 실시예에서, 하나 이상의 스토리지 관리 프로그램을 저장하는 비휘발성 컴퓨터 판독가능 스토리지 매체는, 하나 이상의 프로세서, 비휘발성 제 2 스토리지 및 비휘발성 캐시 메모리를 포함하는 컴퓨터 시스템의 하나 이상의 프로그램에 의해 실행될 때, 컴퓨터 시스템으로 하여금 상술한 방법 중 임의의 방법을 수행하도록 하는 명령어를 포함하고, 비휘발성 캐시 메모리는 컴퓨터 시스템의 하나 이상의 프로세서에 의해 전송된 지시에 응답하는 컨트롤러를 포함한다.
따라서, 상술한 일부 실시예는 플래시 디바이스와 같은 SSD의 간략화된 또는 감소된 기능의 변환층을 허용한다. 특히, 어드레스 변환에 대해, SSD의 변환층은 SSD로부터의 지시에서 수신된 가상 어드레스 또는 오프셋을 SSD에서의 관리 유닛으로 맵핑하는 것 만을 필요로하고, 마모-레벨링을 제외하고는 결함있는 관리 유닛을 이용하는 것을 방지하기 위해 스토리지 시스템 어드레스 또는 내부 어드레스 또는 오프셋에 대한 오프셋으로부터의 변환을 제어할 필요가 없다.
상기로부터, 본 발명의 특정한 실시예가 예시의 목적으로 본문에 기술되었지만, 다양한 변형이 본 발명의 취지와 범위를 벗어나지 않고서 이루어질 수 있다는 것이 이해될 것이다.
Claims (20)
- 하나 이상의 프로세서, 상기 하나 이상의 프로세서에 의해 실행되는 하나 이상의 스토리지 관리 프로그램을 저장하는 메모리, 비휘발성 캐시 메모리, 비휘발성 제 2 스토리지에 대한 인터페이스를 포함하는 컴퓨터 시스템에서 데이터를 캐싱하는 방법으로서,
데이터 기록을 위한 두 개 이상의 기록 요청을 식별하는 단계 - 상기 두 개 이상의 식별된 기록 요청들의 각각의 기록 요청은 기록 데이터 및 상기 비휘발성 제 2 스토리지의 스토리지 오프셋 또는 어드레스를 포함함 - ;
상기 두 개 이상의 식별된 기록 요청에 대해 기록 데이터를 상기 비휘발성 캐시 메모리 내의 순차적인 위치들에 순차적으로 기록하는 단계; 및
상기 두 개 이상의 식별된 기록 요청에 대응하는 기록 데이터에 대한 상기 비휘발성 제 2 스토리지의 스토리지 오프셋들 또는 어드레스들을 상기 비휘발성 캐시 메모리 내의 순차적인 위치들에 맵핑하는 메타데이터를 상기 컴퓨터 시스템의 메모리에 저장하는 단계
를 포함하고,
상기 컴퓨터 시스템의 메모리는 상기 비휘발성 제 2 스토리지와 상이하고 상기 비휘발성 캐시 메모리와 상이하며, 상기 비휘발성 제 2 스토리지는 상기 비휘발성 캐시 메모리와 상이하고,
상기 방법은,
상기 컴퓨터 시스템에서, 상기 비휘발성 캐시 메모리의 미사용 영역의 경계에 대응하는 기록 포인터, 상기 비휘발성 캐시 메모리의 클린(clean) 영역의 경계에 대응하는 클린 포인터, 및 상기 비휘발성 캐시 메모리의 클린 영역 및 오손(dirty) 영역의 경계에 대응하는 플러시 포인터를 유지하는 단계 - 상기 클린 영역은 상기 비휘발성 제 2 스토리지에 플러시되고 상기 컴퓨터 시스템에 의해 상기 비휘발성 캐시 메모리로부터 판독될 수 있는 데이터를 저장하고, 상기 오손 영역은 상기 비휘발성 제 2 스토리지에 플러시되지 않고 상기 컴퓨터 시스템에 의해 상기 비휘발성 캐시 메모리로부터 판독될 수 있는 데이터를 저장하며, 상기 기록 포인터, 클린 포인터 및 플러시 포인터는 상기 비휘발성 캐시 메모리 내의 상이한 위치들을 식별하고, 상기 기록 포인터를 유지하는 것은 기록 데이터가 순차적으로 상기 비휘발성 캐시 메모리에 기록되면서 상기 기록 포인터를 전진시키는 것을 포함함 -
를 더 포함하고,
상기 방법은,
상기 비휘발성 캐시 메모리의 가용한 스토리지 크기를 식별하는 정보, 및 상기 비휘발성 캐시 메모리의 어드레스 공간의 크기 및 상기 비휘발성 캐시 메모리에서의 비가용 관리 유닛들에 대응하는 상기 어드레스 공간의 크기를 식별하는 정보를 수신하는 단계
를 더 포함하고,
상기 비휘발성 캐시 메모리의 상기 어드레스 공간의 크기는 상기 방법의 실행 동안 고정되고,
상기 유지하는 단계는 상기 비휘발성 캐시 메모리 내의 비가용 관리 유닛들에 대응하는 상기 어드레스 공간의 크기보다 더 큰 크기로 상기 미사용 영역을 유지하도록 상기 포인터들을 유지하는 단계를 더 포함하는, 컴퓨터 시스템에서 데이터를 캐싱하는 방법. - 제1항에 있어서, 상기 비휘발성 캐시 메모리로의 데이터 기록을 위한 상기 기록 요청들을 식별하는 단계는:
비휘발성 스토리지로의 데이터 기록을 위한 기록 요청들을 수신하는 단계 - 각각의 기록 요청은 어드레스 또는 스토리지 오프셋과 기록 데이터를 포함함 - ; 및
캐싱 기준에 따라 수신된 기록 요청들의 서브셋을 식별하는 단계
를 포함하는, 컴퓨터 시스템에서 데이터를 캐싱하는 방법. - 제1항 또는 제2항에 있어서, 상기 순차적으로 기록하는 단계는, 상기 기록 데이터와 연관된 상기 비휘발성 제 2 스토리지 내의 스토리지 오프셋들 또는 어드레스들을 고려하지 않고, 상기 비휘발성 캐시 메모리 내의 순차적인 위치들을 식별하는 기록 지시들을 상기 비휘발성 캐시 메모리의 컨트롤러로 전송하는 단계를 포함하는, 컴퓨터 시스템에서 데이터를 캐싱하는 방법.
- 제1항 또는 제2항에 있어서, 상기 유지하는 단계는, 상기 비휘발성 캐시 메모리의 오손 영역 내의 데이터를 상기 비휘발성 제 2 스토리지로 플러시하고, 상기 플러시 포인터를 전진시켜 상기 클린 영역 및 오손 영역의 공유된 경계를 이동시키라는 지시를 상기 비휘발성 캐시 메모리로 전송하는 단계를 포함하는, 컴퓨터 시스템에서 데이터를 캐싱하는 방법.
- 제1항 또는 제2항에 있어서, 상기 유지하는 단계는, 상기 비휘발성 캐시 메모리의 클린 영역에서의 데이터를 무효화하고(invalidate), 상기 클린 포인터를 전진시켜 상기 클린 영역 및 미사용 영역의 공유된 경계를 이동시키라는 지시를 상기 비휘발성 캐시 메모리로 전송하는 단계를 포함하는, 컴퓨터 시스템에서 데이터를 캐싱하는 방법.
- 제5항에 있어서, 상기 클린 영역에서의 데이터를 무효화하라는 지시는 상기 비휘발성 캐시 메모리에서의 대응하는 관리 유닛들을 소거하라는 지시를 포함하는, 컴퓨터 시스템에서 데이터를 캐싱하는 방법.
- 제1항 또는 제2항에 있어서, 상기 비휘발성 캐시 메모리의 어드레스 공간은 상기 비휘발성 캐시 메모리에 의해 상기 비휘발성 캐시 메모리 내의 물리적 메모리에 맵핑되는 연속한 가상 어드레스 공간을 포함하는, 컴퓨터 시스템에서 데이터를 캐싱하는 방법.
- 제1항 또는 제2항에 있어서, 상기 비휘발성 캐시 메모리의 어드레스 공간은 가상 어드레스 공간을 포함하고, 상기 식별된 기록 요청들 내의 어드레스 또는 스토리지 오프셋은 상기 비휘발성 제 2 스토리지의 어드레스 공간에서의 어드레스들 또는 오프셋들을 포함하는, 컴퓨터 시스템에서 데이터를 캐싱하는 방법.
- 제1항 또는 제2항에 있어서, 상기 비휘발성 캐시 메모리는 솔리드 스테이트 스토리지를 포함하는, 컴퓨터 시스템에서 데이터를 캐싱하는 방법.
- 제1항 또는 제2항에 있어서, 상기 비휘발성 캐시 메모리는 플래시 메모리를 포함하는, 컴퓨터 시스템에서 데이터를 캐싱하는 방법.
- 제1항 또는 제2항에 있어서, 상기 비휘발성 제 2 스토리지는 하나 이상의 하드디스크 스토리지 디바이스를 포함하는, 컴퓨터 시스템에서 데이터를 캐싱하는 방법.
- 컴퓨터 시스템으로서,
하나 이상의 스토리지 관리 프로그램을 포함하는 하나 이상의 프로그램을 저장하는 메모리;
메모리에 저장된 상기 하나 이상의 프로그램 내의 명령어들을 실행하는 하나 이상의 프로세서;
비휘발성 제 2 스토리지에 대한 인터페이스; 및
비휘발성 캐시 메모리
를 포함하고,
상기 비휘발성 캐시 메모리는 컴퓨터 시스템의 상기 하나 이상의 프로세서에 의해 전송되는 지시에 응답하는 컨트롤러를 포함하고,
상기 하나 이상의 스토리지 관리 프로그램은, 상기 하나 이상의 프로세서에 의해 실행될 때, 상기 컴퓨터 시스템으로 하여금:
데이터 기록을 위한 두 개 이상의 기록 요청을 식별하고 - 상기 두 개 이상의 식별된 기록 요청들의 각각의 기록 요청은 기록 데이터 및 상기 비휘발성 제 2 스토리지의 스토리지 오프셋 또는 어드레스를 포함함 - ;
상기 두 개 이상의 식별된 기록 요청에 대한 기록 데이터를 상기 비휘발성 캐시 메모리의 순차적인 위치들에 순차적으로 기록하고;
상기 두 개 이상의 식별된 기록 요청에 대응하는 기록 데이터에 대한 상기 비휘발성 제 2 스토리지의 스토리지 오프셋들 또는 어드레스들을 상기 비휘발성 캐시 메모리 내의 순차적인 위치들에 맵핑하는 메타데이터를 상기 컴퓨터 시스템의 메모리에 저장
하게 하는 명령어들을 포함하고,
상기 컴퓨터 시스템의 메모리는 상기 비휘발성 제 2 스토리지와 상이하고 상기 비휘발성 캐시 메모리와 상이하며, 상기 비휘발성 제 2 스토리지는 상기 비휘발성 캐시 메모리와 상이하고,
상기 하나 이상의 스토리지 관리 프로그램은, 상기 하나 이상의 프로세서에 의해 실행될 때, 상기 컴퓨터 시스템으로 하여금:
상기 컴퓨터 시스템에서, 상기 비휘발성 캐시 메모리의 미사용 영역의 경계에 대응하는 기록 포인터, 상기 비휘발성 캐시 메모리의 클린 영역의 경계에 대응하는 클린 포인터, 및 상기 비휘발성 캐시 메모리의 클린 영역 및 오손 영역의 경계에 대응하는 플러시 포인터를 유지하게 - 상기 클린 영역은 상기 비휘발성 제 2 스토리지에 플러시되고 상기 컴퓨터 시스템에 의해 상기 비휘발성 캐시 메모리로부터 판독될 수 있는 데이터를 저장하고, 상기 오손 영역은 상기 비휘발성 제 2 스토리지에 플러시되지 않고 상기 컴퓨터 시스템에 의해 상기 비휘발성 캐시 메모리로부터 판독될 수 있는 데이터를 저장하며, 상기 기록 포인터, 클린 포인터 및 플러시 포인터는 상기 비휘발성 캐시 메모리 내의 상이한 위치들을 식별하고, 상기 기록 포인터를 유지하는 것은 기록 데이터가 순차적으로 상기 비휘발성 캐시 메모리에 기록되면서 상기 기록 포인터를 전진시키는 것을 포함함 -
하는 명령어들을 더 포함하고,
상기 하나 이상의 스토리지 관리 프로그램은, 상기 하나 이상의 프로세서에 의해 실행될 때, 상기 컴퓨터 시스템으로 하여금:
상기 비휘발성 캐시 메모리의 가용한 스토리지 크기를 식별하는 정보, 및 상기 비휘발성 캐시 메모리의 어드레스 공간의 크기 및 상기 비휘발성 캐시 메모리에서의 비가용 관리 유닛들에 대응하는 상기 어드레스 공간의 크기를 식별하는 정보를 수신하게
하는 명령어들을 더 포함하고,
상기 비휘발성 캐시 메모리의 상기 어드레스 공간의 크기는 고정되고,
상기 유지하는 것은 상기 비휘발성 캐시 메모리 내의 비가용 관리 유닛들에 대응하는 상기 어드레스 공간의 크기보다 더 큰 크기로 상기 미사용 영역을 유지하도록 상기 포인터들을 유지하는 것을 더 포함하는, 컴퓨터 시스템. - 제12항에 있어서, 상기 비휘발성 캐시 메모리로의 데이터 기록을 위한 상기 기록 요청들을 식별하는 것은:
비휘발성 스토리지로의 데이터 기록을 위한 기록 요청들을 수신하는 것 - 각각의 기록 요청은 어드레스 또는 스토리지 오프셋과 기록 데이터를 포함함 - ; 및
캐싱 기준에 따라 수신된 기록 요청들의 서브셋을 식별하는 것
을 포함하는, 컴퓨터 시스템. - 제12항 또는 제13항에 있어서, 상기 순차적으로 기록하는 것은, 상기 기록 데이터와 연관된 상기 비휘발성 제 2 스토리지 내의 스토리지 오프셋들 또는 어드레스들을 고려하지 않고, 상기 비휘발성 캐시 메모리 내의 순차적인 위치들을 식별하는 기록 지시들을 상기 비휘발성 캐시 메모리의 컨트롤러로 전송하는 것을 포함하는, 컴퓨터 시스템.
- 명령어들을 포함하는 하나 이상의 스토리지 관리 프로그램을 저장하는 비휘발성 컴퓨터 판독가능 스토리지 매체로서,
상기 명령어들은, 컴퓨터 시스템 - 상기 컴퓨터 시스템은 하나 이상의 프로세서, 비휘발성 제 2 스토리지 및 비휘발성 캐시 메모리를 포함하고, 상기 비휘발성 캐시 메모리는 상기 컴퓨터 시스템의 상기 하나 이상의 프로세서에 의해 전송된 지시에 응답하는 컨트롤러를 포함함 - 의 상기 하나 이상의 프로세서에 의해 실행될 때, 상기 컴퓨터 시스템으로 하여금:
데이터 기록을 위한 두 개 이상의 기록 요청을 식별하고 - 상기 두 개 이상의 식별된 기록 요청의 각각의 기록 요청은 기록 데이터 및 상기 비휘발성 제 2 스토리지의 스토리지 오프셋 또는 어드레스를 포함함 - ;
상기 두 개 이상의 식별된 기록 요청에 대한 기록 데이터를 상기 비휘발성 캐시 메모리 내의 순차적인 위치들에 순차적으로 기록하고;
상기 두 개 이상의 식별된 기록 요청에 대응하는 기록 데이터에 대한 상기 비휘발성 제 2 스토리지의 스토리지 오프셋들 또는 어드레스들을 상기 비휘발성 캐시 메모리 내의 순차적인 위치들에 맵핑하는 메타데이터를 상기 컴퓨터 시스템의 메모리에 저장
하게 하는 명령어들을 포함하고,
상기 컴퓨터 시스템의 메모리는 상기 비휘발성 제 2 스토리지와 상이하고 상기 비휘발성 캐시 메모리와 상이하며, 상기 비휘발성 제 2 스토리지는 상기 비휘발성 캐시 메모리와 상이하고,
상기 하나 이상의 스토리지 관리 프로그램은, 상기 하나 이상의 프로세서에 의해 실행될 때, 상기 컴퓨터 시스템으로 하여금:
상기 컴퓨터 시스템에서, 상기 비휘발성 캐시 메모리의 미사용 영역의 경계에 대응하는 기록 포인터, 상기 비휘발성 캐시 메모리의 클린 영역의 경계에 대응하는 클린 포인터, 및 상기 비휘발성 캐시 메모리의 클린 영역 및 오손 영역의 경계에 대응하는 플러시 포인터를 유지하게 - 상기 클린 영역은 상기 비휘발성 제 2 스토리지에 플러시되고 상기 컴퓨터 시스템에 의해 상기 비휘발성 캐시 메모리로부터 판독될 수 있는 데이터를 저장하고, 상기 오손 영역은 상기 비휘발성 제 2 스토리지에 플러시되지 않고 상기 컴퓨터 시스템에 의해 상기 비휘발성 캐시 메모리로부터 판독될 수 있는 데이터를 저장하며, 상기 기록 포인터, 클린 포인터 및 플러시 포인터는 상기 비휘발성 캐시 메모리 내의 상이한 위치들을 식별하고, 상기 기록 포인터를 유지하는 것은 기록 데이터가 순차적으로 상기 비휘발성 캐시 메모리에 기록되면서 상기 기록 포인터를 전진시키는 것을 포함함 -
하는 명령어들을 더 포함하고,
상기 하나 이상의 스토리지 관리 프로그램은, 상기 하나 이상의 프로세서에 의해 실행될 때, 상기 컴퓨터 시스템으로 하여금:
상기 비휘발성 캐시 메모리의 가용한 스토리지 크기를 식별하는 정보, 및 상기 비휘발성 캐시 메모리의 어드레스 공간의 크기 및 상기 비휘발성 캐시 메모리에서의 비가용 관리 유닛에 대응하는 상기 어드레스 공간의 크기를 식별하는 정보를 수신하게
하는 명령어들을 더 포함하고,
상기 비휘발성 캐시 메모리의 상기 어드레스 공간의 크기는 고정되고,
상기 유지하는 것은 상기 비휘발성 캐시 메모리 내의 비가용 관리 유닛들에 대응하는 상기 어드레스 공간의 크기보다 더 큰 크기로 상기 미사용 영역을 유지하도록 상기 포인터들을 유지하는 것을 더 포함하는, 비휘발성 컴퓨터 판독가능 스토리지 매체. - 제15항에 있어서, 상기 비휘발성 캐시 메모리로의 데이터 기록을 위한 상기 기록 요청들을 식별하는 것은:
비휘발성 스토리지로의 데이터 기록을 위한 기록 요청들을 수신하는 것 - 각각의 기록 요청은 어드레스 또는 스토리지 오프셋과 기록 데이터를 포함함 - ; 및
캐싱 기준에 따라 수신된 기록 요청들의 서브셋을 식별하는 것
을 포함하는, 비휘발성 컴퓨터 판독가능 스토리지 매체. - 제15항 또는 제16항에 있어서, 상기 순차적으로 기록하는 것은, 상기 기록 데이터와 연관된 상기 비휘발성 제 2 스토리지 내의 스토리지 오프셋들 또는 어드레스들을 고려하지 않고, 상기 비휘발성 캐시 메모리 내의 순차적인 위치들을 식별하는 기록 지시들을 상기 비휘발성 캐시 메모리의 컨트롤러로 전송하는 것을 포함하는, 비휘발성 컴퓨터 판독가능 스토리지 매체.
- 삭제
- 삭제
- 삭제
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201161523155P | 2011-08-12 | 2011-08-12 | |
US61/523,155 | 2011-08-12 | ||
PCT/US2012/050424 WO2013025540A1 (en) | 2011-08-12 | 2012-08-10 | Cache management including solid state device virtualization |
US13/572,486 | 2012-08-10 | ||
US13/572,486 US9323659B2 (en) | 2011-08-12 | 2012-08-10 | Cache management including solid state device virtualization |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20140053309A KR20140053309A (ko) | 2014-05-07 |
KR101824295B1 true KR101824295B1 (ko) | 2018-01-31 |
Family
ID=47678264
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020147006571A KR101824295B1 (ko) | 2011-08-12 | 2012-08-10 | 솔리드 스테이트 장치 가상화를 포함하는 캐시 관리 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9323659B2 (ko) |
EP (1) | EP2742428B1 (ko) |
KR (1) | KR101824295B1 (ko) |
WO (1) | WO2013025540A1 (ko) |
Families Citing this family (228)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8489855B2 (en) * | 2010-05-07 | 2013-07-16 | Ocz Technology Group Inc. | NAND flash-based solid state drive and method of operation |
US12008266B2 (en) | 2010-09-15 | 2024-06-11 | Pure Storage, Inc. | Efficient read by reconstruction |
US11614893B2 (en) | 2010-09-15 | 2023-03-28 | Pure Storage, Inc. | Optimizing storage device access based on latency |
US8589640B2 (en) | 2011-10-14 | 2013-11-19 | Pure Storage, Inc. | Method for maintaining multiple fingerprint tables in a deduplicating storage system |
WO2013028854A1 (en) | 2011-08-24 | 2013-02-28 | Rambus Inc. | Methods and systems for mapping a peripheral function onto a legacy memory interface |
US9098209B2 (en) | 2011-08-24 | 2015-08-04 | Rambus Inc. | Communication via a memory interface |
US11048410B2 (en) | 2011-08-24 | 2021-06-29 | Rambus Inc. | Distributed procedure execution and file systems on a memory interface |
US9606929B2 (en) * | 2011-11-08 | 2017-03-28 | Lenovo Enterprise Solutions (Singapore) Pte. Ltd. | Simulated NVRAM |
CN103514110B (zh) * | 2012-06-20 | 2016-08-24 | 华为技术有限公司 | 非易失性存储设备的缓存管理方法及装置 |
US9852073B2 (en) | 2012-08-07 | 2017-12-26 | Dell Products L.P. | System and method for data redundancy within a cache |
US9311240B2 (en) | 2012-08-07 | 2016-04-12 | Dell Products L.P. | Location and relocation of data within a cache |
US9495301B2 (en) * | 2012-08-07 | 2016-11-15 | Dell Products L.P. | System and method for utilizing non-volatile memory in a cache |
US9367480B2 (en) | 2012-08-07 | 2016-06-14 | Dell Products L.P. | System and method for updating data in a cache |
US9549037B2 (en) | 2012-08-07 | 2017-01-17 | Dell Products L.P. | System and method for maintaining solvency within a cache |
US9003223B2 (en) * | 2012-09-27 | 2015-04-07 | International Business Machines Corporation | Physical memory fault mitigation in a computing environment |
US9311014B2 (en) * | 2012-11-29 | 2016-04-12 | Infinidat Ltd. | Storage system and methods of mapping addresses of snapshot families |
US20140258628A1 (en) * | 2013-03-11 | 2014-09-11 | Lsi Corporation | System, method and computer-readable medium for managing a cache store to achieve improved cache ramp-up across system reboots |
US9514007B2 (en) | 2013-03-15 | 2016-12-06 | Amazon Technologies, Inc. | Database system with database engine and separate distributed storage service |
US10180951B2 (en) * | 2013-03-15 | 2019-01-15 | Amazon Technologies, Inc. | Place snapshots |
US9501501B2 (en) | 2013-03-15 | 2016-11-22 | Amazon Technologies, Inc. | Log record management |
US9672237B2 (en) | 2013-03-15 | 2017-06-06 | Amazon Technologies, Inc. | System-wide checkpoint avoidance for distributed database systems |
US11030055B2 (en) | 2013-03-15 | 2021-06-08 | Amazon Technologies, Inc. | Fast crash recovery for distributed database systems |
US10747746B2 (en) | 2013-04-30 | 2020-08-18 | Amazon Technologies, Inc. | Efficient read replicas |
US9760596B2 (en) | 2013-05-13 | 2017-09-12 | Amazon Technologies, Inc. | Transaction ordering |
US9208032B1 (en) | 2013-05-15 | 2015-12-08 | Amazon Technologies, Inc. | Managing contingency capacity of pooled resources in multiple availability zones |
US10303564B1 (en) | 2013-05-23 | 2019-05-28 | Amazon Technologies, Inc. | Reduced transaction I/O for log-structured storage systems |
US9047189B1 (en) | 2013-05-28 | 2015-06-02 | Amazon Technologies, Inc. | Self-describing data blocks of a minimum atomic write size for a data store |
CN103543955A (zh) * | 2013-08-05 | 2014-01-29 | 记忆科技(深圳)有限公司 | 利用固态硬盘作为设备读缓存的方法、系统及固态硬盘 |
US9460008B1 (en) | 2013-09-20 | 2016-10-04 | Amazon Technologies, Inc. | Efficient garbage collection for a log-structured data store |
US10216949B1 (en) | 2013-09-20 | 2019-02-26 | Amazon Technologies, Inc. | Dynamic quorum membership changes |
US10223184B1 (en) | 2013-09-25 | 2019-03-05 | Amazon Technologies, Inc. | Individual write quorums for a log-structured distributed storage system |
US9699017B1 (en) | 2013-09-25 | 2017-07-04 | Amazon Technologies, Inc. | Dynamic utilization of bandwidth for a quorum-based distributed storage system |
US9880933B1 (en) | 2013-11-20 | 2018-01-30 | Amazon Technologies, Inc. | Distributed in-memory buffer cache system using buffer cache nodes |
US9223843B1 (en) | 2013-12-02 | 2015-12-29 | Amazon Technologies, Inc. | Optimized log storage for asynchronous log updates |
US11132328B2 (en) | 2013-12-20 | 2021-09-28 | Rambus, Inc. | High level instructions with lower-level assembly code style primitives within a memory appliance for accessing memory |
US10452306B1 (en) * | 2013-12-31 | 2019-10-22 | EMC IP Holding Company LLC | Method and apparatus for asymmetric raid |
US10055352B2 (en) * | 2014-03-11 | 2018-08-21 | Amazon Technologies, Inc. | Page cache write logging at block-based storage |
US9600203B2 (en) | 2014-03-11 | 2017-03-21 | Amazon Technologies, Inc. | Reducing data volume durability state for block-based storage |
US20150317176A1 (en) * | 2014-05-02 | 2015-11-05 | Cavium, Inc. | Systems and methods for enabling value added services for extensible storage devices over a network via nvme controller |
US9294567B2 (en) | 2014-05-02 | 2016-03-22 | Cavium, Inc. | Systems and methods for enabling access to extensible storage devices over a network as local storage via NVME controller |
US9430268B2 (en) | 2014-05-02 | 2016-08-30 | Cavium, Inc. | Systems and methods for supporting migration of virtual machines accessing remote storage devices over network via NVMe controllers |
US9529773B2 (en) | 2014-05-02 | 2016-12-27 | Cavium, Inc. | Systems and methods for enabling access to extensible remote storage over a network as local storage via a logical storage controller |
US10339079B2 (en) * | 2014-06-02 | 2019-07-02 | Western Digital Technologies, Inc. | System and method of interleaving data retrieved from first and second buffers |
KR101507093B1 (ko) | 2014-06-03 | 2015-03-30 | 중원대학교 산학협력단 | 정전에서 지속 가능한 읽기 및 쓰기 캐시 장치 및 방법 |
US9367243B1 (en) | 2014-06-04 | 2016-06-14 | Pure Storage, Inc. | Scalable non-uniform storage sizes |
US11652884B2 (en) | 2014-06-04 | 2023-05-16 | Pure Storage, Inc. | Customized hash algorithms |
US8850108B1 (en) | 2014-06-04 | 2014-09-30 | Pure Storage, Inc. | Storage cluster |
US11960371B2 (en) | 2014-06-04 | 2024-04-16 | Pure Storage, Inc. | Message persistence in a zoned system |
US9836234B2 (en) | 2014-06-04 | 2017-12-05 | Pure Storage, Inc. | Storage cluster |
US9218244B1 (en) | 2014-06-04 | 2015-12-22 | Pure Storage, Inc. | Rebuilding data across storage nodes |
US10574754B1 (en) | 2014-06-04 | 2020-02-25 | Pure Storage, Inc. | Multi-chassis array with multi-level load balancing |
US9213485B1 (en) | 2014-06-04 | 2015-12-15 | Pure Storage, Inc. | Storage system architecture |
US11399063B2 (en) | 2014-06-04 | 2022-07-26 | Pure Storage, Inc. | Network authentication for a storage system |
US9003144B1 (en) | 2014-06-04 | 2015-04-07 | Pure Storage, Inc. | Mechanism for persisting messages in a storage system |
US11068363B1 (en) | 2014-06-04 | 2021-07-20 | Pure Storage, Inc. | Proactively rebuilding data in a storage cluster |
US10114757B2 (en) | 2014-07-02 | 2018-10-30 | Pure Storage, Inc. | Nonrepeating identifiers in an address space of a non-volatile solid-state storage |
US9021297B1 (en) | 2014-07-02 | 2015-04-28 | Pure Storage, Inc. | Redundant, fault-tolerant, distributed remote procedure call cache in a storage system |
US9836245B2 (en) | 2014-07-02 | 2017-12-05 | Pure Storage, Inc. | Non-volatile RAM and flash memory in a non-volatile solid-state storage |
US8868825B1 (en) | 2014-07-02 | 2014-10-21 | Pure Storage, Inc. | Nonrepeating identifiers in an address space of a non-volatile solid-state storage |
US11886308B2 (en) | 2014-07-02 | 2024-01-30 | Pure Storage, Inc. | Dual class of service for unified file and object messaging |
US11604598B2 (en) | 2014-07-02 | 2023-03-14 | Pure Storage, Inc. | Storage cluster with zoned drives |
US9811677B2 (en) | 2014-07-03 | 2017-11-07 | Pure Storage, Inc. | Secure data replication in a storage grid |
US10853311B1 (en) | 2014-07-03 | 2020-12-01 | Pure Storage, Inc. | Administration through files in a storage system |
US9747229B1 (en) | 2014-07-03 | 2017-08-29 | Pure Storage, Inc. | Self-describing data format for DMA in a non-volatile solid-state storage |
US8874836B1 (en) * | 2014-07-03 | 2014-10-28 | Pure Storage, Inc. | Scheduling policy for queues in a non-volatile solid-state storage |
US9082512B1 (en) | 2014-08-07 | 2015-07-14 | Pure Storage, Inc. | Die-level monitoring in a storage cluster |
US9483346B2 (en) | 2014-08-07 | 2016-11-01 | Pure Storage, Inc. | Data rebuild on feedback from a queue in a non-volatile solid-state storage |
US9495255B2 (en) | 2014-08-07 | 2016-11-15 | Pure Storage, Inc. | Error recovery in a storage cluster |
US9558069B2 (en) | 2014-08-07 | 2017-01-31 | Pure Storage, Inc. | Failure mapping in a storage array |
US9766972B2 (en) | 2014-08-07 | 2017-09-19 | Pure Storage, Inc. | Masking defective bits in a storage array |
US10983859B2 (en) | 2014-08-07 | 2021-04-20 | Pure Storage, Inc. | Adjustable error correction based on memory health in a storage unit |
US10079711B1 (en) | 2014-08-20 | 2018-09-18 | Pure Storage, Inc. | Virtual file server with preserved MAC address |
US20160077942A1 (en) * | 2014-09-12 | 2016-03-17 | Celestica Technology Consultancy (Shanghai) Co., Ltd. | Storage system and test method for testing pci express interface |
US9921750B2 (en) | 2014-11-20 | 2018-03-20 | Samsung Electronics Co., Ltd. | Solid state drive (SSD) memory cache occupancy prediction |
KR102398213B1 (ko) * | 2015-03-09 | 2022-05-17 | 삼성전자주식회사 | 저장 장치, 그것을 포함하는 호스트 시스템, 및 그것의 맵 테이블 업데이트 방법 |
US9948615B1 (en) | 2015-03-16 | 2018-04-17 | Pure Storage, Inc. | Increased storage unit encryption based on loss of trust |
US11294893B2 (en) | 2015-03-20 | 2022-04-05 | Pure Storage, Inc. | Aggregation of queries |
US9940234B2 (en) | 2015-03-26 | 2018-04-10 | Pure Storage, Inc. | Aggressive data deduplication using lazy garbage collection |
US10082985B2 (en) | 2015-03-27 | 2018-09-25 | Pure Storage, Inc. | Data striping across storage nodes that are assigned to multiple logical arrays |
US10178169B2 (en) | 2015-04-09 | 2019-01-08 | Pure Storage, Inc. | Point to point based backend communication layer for storage processing |
US9672125B2 (en) | 2015-04-10 | 2017-06-06 | Pure Storage, Inc. | Ability to partition an array into two or more logical arrays with independently running software |
WO2016174729A1 (ja) * | 2015-04-28 | 2016-11-03 | 株式会社日立製作所 | ストレージ装置 |
US10007446B2 (en) * | 2015-05-05 | 2018-06-26 | Macronix International Co., Ltd. | Method, apparatus, and storage medium for writing data into persistent storage device |
US10140149B1 (en) | 2015-05-19 | 2018-11-27 | Pure Storage, Inc. | Transactional commits with hardware assists in remote memory |
US9817576B2 (en) | 2015-05-27 | 2017-11-14 | Pure Storage, Inc. | Parallel update to NVRAM |
JP6398102B2 (ja) * | 2015-05-29 | 2018-10-03 | 東芝メモリ株式会社 | メモリシステム |
US10846275B2 (en) | 2015-06-26 | 2020-11-24 | Pure Storage, Inc. | Key management in a storage device |
US10983732B2 (en) | 2015-07-13 | 2021-04-20 | Pure Storage, Inc. | Method and system for accessing a file |
US11232079B2 (en) | 2015-07-16 | 2022-01-25 | Pure Storage, Inc. | Efficient distribution of large directories |
US10108355B2 (en) | 2015-09-01 | 2018-10-23 | Pure Storage, Inc. | Erase block state detection |
US11269884B2 (en) | 2015-09-04 | 2022-03-08 | Pure Storage, Inc. | Dynamically resizable structures for approximate membership queries |
US11341136B2 (en) | 2015-09-04 | 2022-05-24 | Pure Storage, Inc. | Dynamically resizable structures for approximate membership queries |
KR102435863B1 (ko) * | 2015-09-16 | 2022-08-25 | 삼성전자주식회사 | 스토리지 장치 및 그것을 포함하는 서버 시스템의 매칭 키 검색 방법 |
US9768953B2 (en) | 2015-09-30 | 2017-09-19 | Pure Storage, Inc. | Resharing of a split secret |
US10853266B2 (en) | 2015-09-30 | 2020-12-01 | Pure Storage, Inc. | Hardware assisted data lookup methods |
US10762069B2 (en) | 2015-09-30 | 2020-09-01 | Pure Storage, Inc. | Mechanism for a system where data and metadata are located closely together |
US9843453B2 (en) | 2015-10-23 | 2017-12-12 | Pure Storage, Inc. | Authorizing I/O commands with I/O tokens |
US10209899B2 (en) | 2015-11-06 | 2019-02-19 | Microsoft Technology Licensing, Llc | Storage virtualization offload |
US10007457B2 (en) | 2015-12-22 | 2018-06-26 | Pure Storage, Inc. | Distributed transactions with token-associated execution |
US10261690B1 (en) | 2016-05-03 | 2019-04-16 | Pure Storage, Inc. | Systems and methods for operating a storage system |
CN107463509B (zh) * | 2016-06-05 | 2020-12-15 | 华为技术有限公司 | 缓存管理方法、缓存控制器以及计算机系统 |
US10430081B2 (en) * | 2016-06-28 | 2019-10-01 | Netapp, Inc. | Methods for minimizing fragmentation in SSD within a storage system and devices thereof |
US11861188B2 (en) | 2016-07-19 | 2024-01-02 | Pure Storage, Inc. | System having modular accelerators |
US11449232B1 (en) | 2016-07-22 | 2022-09-20 | Pure Storage, Inc. | Optimal scheduling of flash operations |
US9672905B1 (en) | 2016-07-22 | 2017-06-06 | Pure Storage, Inc. | Optimize data protection layouts based on distributed flash wear leveling |
US10768819B2 (en) | 2016-07-22 | 2020-09-08 | Pure Storage, Inc. | Hardware support for non-disruptive upgrades |
US11080155B2 (en) | 2016-07-24 | 2021-08-03 | Pure Storage, Inc. | Identifying error types among flash memory |
US10216420B1 (en) | 2016-07-24 | 2019-02-26 | Pure Storage, Inc. | Calibration of flash channels in SSD |
US11604690B2 (en) | 2016-07-24 | 2023-03-14 | Pure Storage, Inc. | Online failure span determination |
US11797212B2 (en) | 2016-07-26 | 2023-10-24 | Pure Storage, Inc. | Data migration for zoned drives |
US11734169B2 (en) | 2016-07-26 | 2023-08-22 | Pure Storage, Inc. | Optimizing spool and memory space management |
US11886334B2 (en) | 2016-07-26 | 2024-01-30 | Pure Storage, Inc. | Optimizing spool and memory space management |
US10203903B2 (en) | 2016-07-26 | 2019-02-12 | Pure Storage, Inc. | Geometry based, space aware shelf/writegroup evacuation |
US10366004B2 (en) | 2016-07-26 | 2019-07-30 | Pure Storage, Inc. | Storage system with elective garbage collection to reduce flash contention |
KR102667430B1 (ko) | 2016-08-04 | 2024-05-23 | 삼성전자주식회사 | 호스트 메모리를 이용하는 데이터 저장 장치 및 그것의 동작 방법 |
US11422719B2 (en) | 2016-09-15 | 2022-08-23 | Pure Storage, Inc. | Distributed file deletion and truncation |
US12039165B2 (en) | 2016-10-04 | 2024-07-16 | Pure Storage, Inc. | Utilizing allocation shares to improve parallelism in a zoned drive storage system |
US10545861B2 (en) | 2016-10-04 | 2020-01-28 | Pure Storage, Inc. | Distributed integrated high-speed solid-state non-volatile random-access memory |
US9747039B1 (en) | 2016-10-04 | 2017-08-29 | Pure Storage, Inc. | Reservations over multiple paths on NVMe over fabrics |
US10756816B1 (en) | 2016-10-04 | 2020-08-25 | Pure Storage, Inc. | Optimized fibre channel and non-volatile memory express access |
US10481798B2 (en) | 2016-10-28 | 2019-11-19 | Pure Storage, Inc. | Efficient flash management for multiple controllers |
WO2018102968A1 (zh) | 2016-12-05 | 2018-06-14 | 华为技术有限公司 | NVMe over Fabric架构中数据读写命令的控制方法、设备和系统 |
EP3352086B1 (en) * | 2016-12-05 | 2020-11-11 | Huawei Technologies Co., Ltd. | Control method, device and system for data reading-writing command in nvme over fabric architecture |
US11550481B2 (en) | 2016-12-19 | 2023-01-10 | Pure Storage, Inc. | Efficiently writing data in a zoned drive storage system |
US11307998B2 (en) | 2017-01-09 | 2022-04-19 | Pure Storage, Inc. | Storage efficiency of encrypted host system data |
US9747158B1 (en) | 2017-01-13 | 2017-08-29 | Pure Storage, Inc. | Intelligent refresh of 3D NAND |
US11955187B2 (en) | 2017-01-13 | 2024-04-09 | Pure Storage, Inc. | Refresh of differing capacity NAND |
US10979223B2 (en) | 2017-01-31 | 2021-04-13 | Pure Storage, Inc. | Separate encryption for a solid-state drive |
US10528488B1 (en) | 2017-03-30 | 2020-01-07 | Pure Storage, Inc. | Efficient name coding |
CN108664213B (zh) * | 2017-03-31 | 2024-01-19 | 北京忆恒创源科技股份有限公司 | 基于分布式缓存的原子写命令处理方法与固态存储设备 |
US10223271B2 (en) * | 2017-03-31 | 2019-03-05 | Intel Corporation | Apparatus, computer program product, and method to perform cache operations in a solid state drive |
US11016667B1 (en) | 2017-04-05 | 2021-05-25 | Pure Storage, Inc. | Efficient mapping for LUNs in storage memory with holes in address space |
US10516645B1 (en) | 2017-04-27 | 2019-12-24 | Pure Storage, Inc. | Address resolution broadcasting in a networked device |
US10141050B1 (en) | 2017-04-27 | 2018-11-27 | Pure Storage, Inc. | Page writes for triple level cell flash memory |
US10944671B2 (en) | 2017-04-27 | 2021-03-09 | Pure Storage, Inc. | Efficient data forwarding in a networked device |
US9905294B1 (en) | 2017-05-03 | 2018-02-27 | Seagate Technology Llc | Writing logically offset pages of data to N-level memory cells coupled to a common word line |
KR102259256B1 (ko) | 2017-05-16 | 2021-06-02 | 에스케이하이닉스 주식회사 | 데이터 저장 장치 및 그것의 동작 방법 |
KR101968474B1 (ko) * | 2017-06-02 | 2019-04-15 | 주식회사 애포샤 | 플래시 캐시에서 트랜잭션 지원 방법 및 장치 |
US11467913B1 (en) | 2017-06-07 | 2022-10-11 | Pure Storage, Inc. | Snapshots with crash consistency in a storage system |
US11782625B2 (en) | 2017-06-11 | 2023-10-10 | Pure Storage, Inc. | Heterogeneity supportive resiliency groups |
US11138103B1 (en) | 2017-06-11 | 2021-10-05 | Pure Storage, Inc. | Resiliency groups |
US11947814B2 (en) | 2017-06-11 | 2024-04-02 | Pure Storage, Inc. | Optimizing resiliency group formation stability |
US10339073B2 (en) * | 2017-06-29 | 2019-07-02 | Keysight Technologies, Inc. | Systems and methods for reducing write latency |
US10425473B1 (en) | 2017-07-03 | 2019-09-24 | Pure Storage, Inc. | Stateful connection reset in a storage cluster with a stateless load balancer |
US10402266B1 (en) | 2017-07-31 | 2019-09-03 | Pure Storage, Inc. | Redundant array of independent disks in a direct-mapped flash storage system |
CN107515827B (zh) * | 2017-08-21 | 2021-07-27 | 湖南国科微电子股份有限公司 | Pcie ssd自定义日志的存储方法、装置及ssd |
US10831935B2 (en) | 2017-08-31 | 2020-11-10 | Pure Storage, Inc. | Encryption management with host-side data reduction |
US10877827B2 (en) | 2017-09-15 | 2020-12-29 | Pure Storage, Inc. | Read voltage optimization |
US10210926B1 (en) | 2017-09-15 | 2019-02-19 | Pure Storage, Inc. | Tracking of optimum read voltage thresholds in nand flash devices |
US11354058B2 (en) | 2018-09-06 | 2022-06-07 | Pure Storage, Inc. | Local relocation of data stored at a storage device of a storage system |
US11024390B1 (en) | 2017-10-31 | 2021-06-01 | Pure Storage, Inc. | Overlapping RAID groups |
US10545687B1 (en) | 2017-10-31 | 2020-01-28 | Pure Storage, Inc. | Data rebuild when changing erase block sizes during drive replacement |
US12067274B2 (en) | 2018-09-06 | 2024-08-20 | Pure Storage, Inc. | Writing segments and erase blocks based on ordering |
US10515701B1 (en) | 2017-10-31 | 2019-12-24 | Pure Storage, Inc. | Overlapping raid groups |
US11520514B2 (en) | 2018-09-06 | 2022-12-06 | Pure Storage, Inc. | Optimized relocation of data based on data characteristics |
US12032848B2 (en) | 2021-06-21 | 2024-07-09 | Pure Storage, Inc. | Intelligent block allocation in a heterogeneous storage system |
US10884919B2 (en) | 2017-10-31 | 2021-01-05 | Pure Storage, Inc. | Memory management in a storage system |
US10496330B1 (en) | 2017-10-31 | 2019-12-03 | Pure Storage, Inc. | Using flash storage devices with different sized erase blocks |
US10860475B1 (en) | 2017-11-17 | 2020-12-08 | Pure Storage, Inc. | Hybrid flash translation layer |
US10990566B1 (en) | 2017-11-20 | 2021-04-27 | Pure Storage, Inc. | Persistent file locks in a storage system |
US11914571B1 (en) | 2017-11-22 | 2024-02-27 | Amazon Technologies, Inc. | Optimistic concurrency for a multi-writer database |
CN108182119B (zh) * | 2017-11-28 | 2022-11-08 | 腾讯科技(深圳)有限公司 | 读写分离控制方法和装置、存储介质及电子装置 |
US10719265B1 (en) | 2017-12-08 | 2020-07-21 | Pure Storage, Inc. | Centralized, quorum-aware handling of device reservation requests in a storage system |
US10929053B2 (en) | 2017-12-08 | 2021-02-23 | Pure Storage, Inc. | Safe destructive actions on drives |
US10929031B2 (en) | 2017-12-21 | 2021-02-23 | Pure Storage, Inc. | Maximizing data reduction in a partially encrypted volume |
US10976948B1 (en) | 2018-01-31 | 2021-04-13 | Pure Storage, Inc. | Cluster expansion mechanism |
US10467527B1 (en) | 2018-01-31 | 2019-11-05 | Pure Storage, Inc. | Method and apparatus for artificial intelligence acceleration |
US10733053B1 (en) | 2018-01-31 | 2020-08-04 | Pure Storage, Inc. | Disaster recovery for high-bandwidth distributed archives |
TWI714830B (zh) * | 2018-02-13 | 2021-01-01 | 緯穎科技服務股份有限公司 | 目錄資料的管理方法與記憶體裝置 |
US11036596B1 (en) | 2018-02-18 | 2021-06-15 | Pure Storage, Inc. | System for delaying acknowledgements on open NAND locations until durability has been confirmed |
US11494109B1 (en) | 2018-02-22 | 2022-11-08 | Pure Storage, Inc. | Erase block trimming for heterogenous flash memory storage devices |
US11995336B2 (en) | 2018-04-25 | 2024-05-28 | Pure Storage, Inc. | Bucket views |
US12001688B2 (en) | 2019-04-29 | 2024-06-04 | Pure Storage, Inc. | Utilizing data views to optimize secure data access in a storage system |
US10931450B1 (en) | 2018-04-27 | 2021-02-23 | Pure Storage, Inc. | Distributed, lock-free 2-phase commit of secret shares using multiple stateless controllers |
US11385792B2 (en) | 2018-04-27 | 2022-07-12 | Pure Storage, Inc. | High availability controller pair transitioning |
US12079494B2 (en) | 2018-04-27 | 2024-09-03 | Pure Storage, Inc. | Optimizing storage system upgrades to preserve resources |
US10853146B1 (en) | 2018-04-27 | 2020-12-01 | Pure Storage, Inc. | Efficient data forwarding in a networked device |
US11436023B2 (en) | 2018-05-31 | 2022-09-06 | Pure Storage, Inc. | Mechanism for updating host file system and flash translation layer based on underlying NAND technology |
US11438279B2 (en) | 2018-07-23 | 2022-09-06 | Pure Storage, Inc. | Non-disruptive conversion of a clustered service from single-chassis to multi-chassis |
US11868309B2 (en) | 2018-09-06 | 2024-01-09 | Pure Storage, Inc. | Queue management for data relocation |
US11500570B2 (en) | 2018-09-06 | 2022-11-15 | Pure Storage, Inc. | Efficient relocation of data utilizing different programming modes |
US10817430B2 (en) | 2018-10-02 | 2020-10-27 | Micron Technology, Inc. | Access unit and management segment memory operations |
US10454498B1 (en) | 2018-10-18 | 2019-10-22 | Pure Storage, Inc. | Fully pipelined hardware engine design for fast and efficient inline lossless data compression |
US10976947B2 (en) | 2018-10-26 | 2021-04-13 | Pure Storage, Inc. | Dynamically selecting segment heights in a heterogeneous RAID group |
CN111124255B (zh) * | 2018-10-31 | 2023-09-08 | 伊姆西Ip控股有限责任公司 | 数据存储方法、电子设备和计算机程序产品 |
US11308203B2 (en) * | 2019-01-11 | 2022-04-19 | Microsoft Technology Licensing, Llc | Side-channel protection |
US11334254B2 (en) | 2019-03-29 | 2022-05-17 | Pure Storage, Inc. | Reliability based flash page sizing |
US11775189B2 (en) | 2019-04-03 | 2023-10-03 | Pure Storage, Inc. | Segment level heterogeneity |
US12087382B2 (en) | 2019-04-11 | 2024-09-10 | Pure Storage, Inc. | Adaptive threshold for bad flash memory blocks |
US11099986B2 (en) | 2019-04-12 | 2021-08-24 | Pure Storage, Inc. | Efficient transfer of memory contents |
US11487665B2 (en) | 2019-06-05 | 2022-11-01 | Pure Storage, Inc. | Tiered caching of data in a storage system |
US11714572B2 (en) | 2019-06-19 | 2023-08-01 | Pure Storage, Inc. | Optimized data resiliency in a modular storage system |
US11281394B2 (en) | 2019-06-24 | 2022-03-22 | Pure Storage, Inc. | Replication across partitioning schemes in a distributed storage system |
US11036594B1 (en) | 2019-07-25 | 2021-06-15 | Jetstream Software Inc. | Disaster recovery systems and methods with low recovery point objectives |
US11029855B1 (en) * | 2019-10-01 | 2021-06-08 | Datacore Software Corporation | Containerized storage stream microservice |
US10929288B1 (en) * | 2019-10-08 | 2021-02-23 | International Business Machines Corporation | Protecting against data loss during garbage collection |
US11893126B2 (en) | 2019-10-14 | 2024-02-06 | Pure Storage, Inc. | Data deletion for a multi-tenant environment |
US11704192B2 (en) | 2019-12-12 | 2023-07-18 | Pure Storage, Inc. | Budgeting open blocks based on power loss protection |
US11416144B2 (en) | 2019-12-12 | 2022-08-16 | Pure Storage, Inc. | Dynamic use of segment or zone power loss protection in a flash device |
US12001684B2 (en) | 2019-12-12 | 2024-06-04 | Pure Storage, Inc. | Optimizing dynamic power loss protection adjustment in a storage system |
US11847331B2 (en) | 2019-12-12 | 2023-12-19 | Pure Storage, Inc. | Budgeting open blocks of a storage unit based on power loss prevention |
US11074202B1 (en) * | 2020-02-26 | 2021-07-27 | Red Hat, Inc. | Efficient management of bus bandwidth for multiple drivers |
US11188432B2 (en) | 2020-02-28 | 2021-11-30 | Pure Storage, Inc. | Data resiliency by partially deallocating data blocks of a storage device |
US11341163B1 (en) | 2020-03-30 | 2022-05-24 | Amazon Technologies, Inc. | Multi-level replication filtering for a distributed database |
US11507297B2 (en) | 2020-04-15 | 2022-11-22 | Pure Storage, Inc. | Efficient management of optimal read levels for flash storage systems |
US11256587B2 (en) | 2020-04-17 | 2022-02-22 | Pure Storage, Inc. | Intelligent access to a storage device |
US11474986B2 (en) | 2020-04-24 | 2022-10-18 | Pure Storage, Inc. | Utilizing machine learning to streamline telemetry processing of storage media |
US12056365B2 (en) | 2020-04-24 | 2024-08-06 | Pure Storage, Inc. | Resiliency for a storage system |
US11416338B2 (en) | 2020-04-24 | 2022-08-16 | Pure Storage, Inc. | Resiliency scheme to enhance storage performance |
CN111596865B (zh) * | 2020-05-22 | 2023-07-14 | 浙江大华技术股份有限公司 | 一种存储处理方法及装置 |
US11768763B2 (en) | 2020-07-08 | 2023-09-26 | Pure Storage, Inc. | Flash secure erase |
US11513974B2 (en) | 2020-09-08 | 2022-11-29 | Pure Storage, Inc. | Using nonce to control erasure of data blocks of a multi-controller storage system |
US11681448B2 (en) | 2020-09-08 | 2023-06-20 | Pure Storage, Inc. | Multiple device IDs in a multi-fabric module storage system |
US11262918B1 (en) | 2020-09-30 | 2022-03-01 | Amazon Technologies, Inc. | Data storage system with uneven drive wear reduction |
US11487455B2 (en) | 2020-12-17 | 2022-11-01 | Pure Storage, Inc. | Dynamic block allocation to optimize storage system performance |
US11614880B2 (en) | 2020-12-31 | 2023-03-28 | Pure Storage, Inc. | Storage system with selectable write paths |
US12067282B2 (en) | 2020-12-31 | 2024-08-20 | Pure Storage, Inc. | Write path selection |
US12093545B2 (en) | 2020-12-31 | 2024-09-17 | Pure Storage, Inc. | Storage system with selectable write modes |
US11847324B2 (en) | 2020-12-31 | 2023-12-19 | Pure Storage, Inc. | Optimizing resiliency groups for data regions of a storage system |
US12061814B2 (en) | 2021-01-25 | 2024-08-13 | Pure Storage, Inc. | Using data similarity to select segments for garbage collection |
US11496595B2 (en) * | 2021-02-02 | 2022-11-08 | Dell Products L.P. | Proxy management controller system |
US11630593B2 (en) | 2021-03-12 | 2023-04-18 | Pure Storage, Inc. | Inline flash memory qualification in a storage system |
US12099742B2 (en) | 2021-03-15 | 2024-09-24 | Pure Storage, Inc. | Utilizing programming page size granularity to optimize data segment storage in a storage system |
US11507597B2 (en) | 2021-03-31 | 2022-11-22 | Pure Storage, Inc. | Data replication to meet a recovery point objective |
US11832410B2 (en) | 2021-09-14 | 2023-11-28 | Pure Storage, Inc. | Mechanical energy absorbing bracket apparatus |
US12105669B2 (en) * | 2021-10-22 | 2024-10-01 | EMC IP Holding Company, LLC | Systems and methods for utilizing write-cache for significant reduction in RPO for asynchronous replication |
CN114063921B (zh) * | 2021-11-12 | 2023-06-27 | 福建师范大学 | 一种基于强化学习的固态硬盘映射记录缓存管理方法 |
US11994723B2 (en) | 2021-12-30 | 2024-05-28 | Pure Storage, Inc. | Ribbon cable alignment apparatus |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6014724A (en) | 1995-10-27 | 2000-01-11 | Scm Microsystems (U.S.) Inc. | Flash translation layer block indication map revision system and method |
US20080162795A1 (en) | 2006-12-28 | 2008-07-03 | Genesys Logic, Inc. | Hard disk cache device and method |
US7577783B2 (en) | 2005-05-04 | 2009-08-18 | Apacer Technology Inc. | Portable data storage device and method of dynamic memory management therefor |
Family Cites Families (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5809527A (en) | 1993-12-23 | 1998-09-15 | Unisys Corporation | Outboard file cache system |
JP3197815B2 (ja) * | 1996-04-15 | 2001-08-13 | インターナショナル・ビジネス・マシーンズ・コーポレ−ション | 半導体メモリ装置及びその制御方法 |
US5832515A (en) | 1996-09-12 | 1998-11-03 | Veritas Software | Log device layered transparently within a filesystem paradigm |
US6427163B1 (en) | 1998-07-10 | 2002-07-30 | International Business Machines Corporation | Highly scalable and highly available cluster system management scheme |
US6209058B1 (en) | 1999-01-27 | 2001-03-27 | Quantum Corp. | Cache management for data transfer control from target disk areas |
US6535949B1 (en) | 1999-04-19 | 2003-03-18 | Research In Motion Limited | Portable electronic device having a log-structured file system in flash memory |
US6553401B1 (en) | 1999-07-09 | 2003-04-22 | Ncr Corporation | System for implementing a high volume availability server cluster including both sharing volume of a mass storage on a local site and mirroring a shared volume on a remote site |
US6609177B1 (en) | 1999-11-12 | 2003-08-19 | Maxtor Corporation | Method and apparatus for extending cache history |
US6490651B1 (en) | 2000-03-14 | 2002-12-03 | Maxtor Corporation | Host-based virtual disk drive for improving the performance of a hard disk drive's input/output |
US6865650B1 (en) | 2000-09-29 | 2005-03-08 | Emc Corporation | System and method for hierarchical data storage |
US7249118B2 (en) | 2002-05-17 | 2007-07-24 | Aleri, Inc. | Database system and methods |
US7644239B2 (en) * | 2004-05-03 | 2010-01-05 | Microsoft Corporation | Non-volatile memory cache performance improvement |
US8452929B2 (en) | 2005-04-21 | 2013-05-28 | Violin Memory Inc. | Method and system for storage of data in non-volatile media |
US20070033356A1 (en) * | 2005-08-03 | 2007-02-08 | Boris Erlikhman | System for Enabling Secure and Automatic Data Backup and Instant Recovery |
KR100755702B1 (ko) | 2005-12-27 | 2007-09-05 | 삼성전자주식회사 | 비휘발성 메모리가 캐쉬로 사용되는 저장 장치 및 그 동작방법 |
US7549021B2 (en) * | 2006-02-22 | 2009-06-16 | Seagate Technology Llc | Enhanced data integrity using parallel volatile and non-volatile transfer buffers |
US20090210631A1 (en) | 2006-09-22 | 2009-08-20 | Bea Systems, Inc. | Mobile application cache system |
EP2069939B1 (en) | 2006-09-28 | 2013-01-02 | SanDisk Technologies Inc. | End of life recovery and resizing of memory cards |
US8706968B2 (en) * | 2007-12-06 | 2014-04-22 | Fusion-Io, Inc. | Apparatus, system, and method for redundant write caching |
US8719501B2 (en) | 2009-09-08 | 2014-05-06 | Fusion-Io | Apparatus, system, and method for caching data on a solid-state storage device |
US20080147974A1 (en) | 2006-12-18 | 2008-06-19 | Yahoo! Inc. | Multi-level caching system |
KR100823171B1 (ko) * | 2007-02-01 | 2008-04-18 | 삼성전자주식회사 | 파티션된 플래시 변환 계층을 갖는 컴퓨터 시스템 및플래시 변환 계층의 파티션 방법 |
US8024525B2 (en) | 2007-07-25 | 2011-09-20 | Digi-Data Corporation | Storage control unit with memory cache protection via recorded log |
US7725646B2 (en) * | 2007-08-02 | 2010-05-25 | Alcatel Lucent | Method of using a flash memory for a circular buffer |
US7984259B1 (en) | 2007-12-17 | 2011-07-19 | Netapp, Inc. | Reducing load imbalance in a storage system |
US8275815B2 (en) | 2008-08-25 | 2012-09-25 | International Business Machines Corporation | Transactional processing for clustered file systems |
US8914567B2 (en) | 2008-09-15 | 2014-12-16 | Vmware, Inc. | Storage management system for virtual machines |
US8762661B2 (en) * | 2008-09-18 | 2014-06-24 | Seagate Technology Llc | System and method of managing metadata |
US8700840B2 (en) | 2009-01-05 | 2014-04-15 | SanDisk Technologies, Inc. | Nonvolatile memory with write cache having flush/eviction methods |
US8244960B2 (en) | 2009-01-05 | 2012-08-14 | Sandisk Technologies Inc. | Non-volatile memory and method with write cache partition management methods |
US8312204B2 (en) * | 2009-01-23 | 2012-11-13 | Seagate Technology Llc | System and method for wear leveling in a data storage device |
US8762642B2 (en) | 2009-01-30 | 2014-06-24 | Twinstrata Inc | System and method for secure and reliable multi-cloud data replication |
US20100205367A1 (en) * | 2009-02-09 | 2010-08-12 | Ehrlich Richard M | Method And System For Maintaining Cache Data Integrity With Flush-Cache Commands |
US8566531B2 (en) | 2009-08-21 | 2013-10-22 | Google Inc. | System and method of selectively caching information based on the interarrival time of requests for the same information |
US8468294B2 (en) | 2009-12-18 | 2013-06-18 | Sandisk Technologies Inc. | Non-volatile memory with multi-gear control using on-chip folding of data |
US20110153912A1 (en) | 2009-12-18 | 2011-06-23 | Sergey Anatolievich Gorobets | Maintaining Updates of Multi-Level Non-Volatile Memory in Binary Non-Volatile Memory |
WO2011090500A1 (en) | 2010-01-19 | 2011-07-28 | Rether Networks Inc. | Random write optimization techniques for flash disks |
US8621145B1 (en) | 2010-01-29 | 2013-12-31 | Netapp, Inc. | Concurrent content management and wear optimization for a non-volatile solid-state cache |
US20110191522A1 (en) | 2010-02-02 | 2011-08-04 | Condict Michael N | Managing Metadata and Page Replacement in a Persistent Cache in Flash Memory |
US20120066760A1 (en) | 2010-09-10 | 2012-03-15 | International Business Machines Corporation | Access control in a virtual system |
-
2012
- 2012-08-10 KR KR1020147006571A patent/KR101824295B1/ko active IP Right Grant
- 2012-08-10 EP EP12756283.3A patent/EP2742428B1/en active Active
- 2012-08-10 WO PCT/US2012/050424 patent/WO2013025540A1/en active Application Filing
- 2012-08-10 US US13/572,486 patent/US9323659B2/en not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6014724A (en) | 1995-10-27 | 2000-01-11 | Scm Microsystems (U.S.) Inc. | Flash translation layer block indication map revision system and method |
US7577783B2 (en) | 2005-05-04 | 2009-08-18 | Apacer Technology Inc. | Portable data storage device and method of dynamic memory management therefor |
US20080162795A1 (en) | 2006-12-28 | 2008-07-03 | Genesys Logic, Inc. | Hard disk cache device and method |
Also Published As
Publication number | Publication date |
---|---|
KR20140053309A (ko) | 2014-05-07 |
EP2742428B1 (en) | 2016-01-06 |
US9323659B2 (en) | 2016-04-26 |
US20130042056A1 (en) | 2013-02-14 |
WO2013025540A1 (en) | 2013-02-21 |
EP2742428A1 (en) | 2014-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101824295B1 (ko) | 솔리드 스테이트 장치 가상화를 포함하는 캐시 관리 | |
US11960729B2 (en) | Method of increasing flash endurance by improved metadata management | |
US10445000B2 (en) | Device controller and method for performing a plurality of write transactions atomically within a nonvolatile data storage device | |
US20170024140A1 (en) | Storage system and method for metadata management in non-volatile memory | |
US9678863B2 (en) | Hybrid checkpointed memory | |
US9430161B2 (en) | Storage control device and control method | |
JP6870246B2 (ja) | ストレージ装置、及びストレージ制御装置 | |
US8918581B2 (en) | Enhancing the lifetime and performance of flash-based storage | |
JP5571691B2 (ja) | 記憶装置におけるマッピングアドレステーブルの維持 | |
US8280858B2 (en) | Storage pool scrubbing with concurrent snapshots | |
WO2018194772A1 (en) | Persistent memory for key-value storage | |
US20110320733A1 (en) | Cache management and acceleration of storage media | |
US9009396B2 (en) | Physically addressed solid state disk employing magnetic random access memory (MRAM) | |
US9910798B2 (en) | Storage controller cache memory operations that forego region locking | |
US9778860B2 (en) | Re-TRIM of free space within VHDX | |
US20130080687A1 (en) | Solid state disk employing flash and magnetic random access memory (mram) | |
KR20120090965A (ko) | 고체-상태 저장 디바이스 상에서 데이터를 캐싱하는 장치, 시스템, 및 방법 | |
US8862819B2 (en) | Log structure array | |
US10459803B2 (en) | Method for management tables recovery | |
JP4561168B2 (ja) | データ処理システムおよび方法並びにその処理プログラム | |
EP4372540A1 (en) | Techniques for zoned namespace (zns) storage using multiple zones | |
CN115993930A (zh) | 用于有序访问块修改存储器中的数据的系统、方法和装置 | |
US20140047161A1 (en) | System Employing MRAM and Physically Addressed Solid State Disk |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |