KR102584018B1 - 압축된 데이터 백그라운드를 캐싱하는 장치, 시스템 및 방법 - Google Patents

압축된 데이터 백그라운드를 캐싱하는 장치, 시스템 및 방법 Download PDF

Info

Publication number
KR102584018B1
KR102584018B1 KR1020237008572A KR20237008572A KR102584018B1 KR 102584018 B1 KR102584018 B1 KR 102584018B1 KR 1020237008572 A KR1020237008572 A KR 1020237008572A KR 20237008572 A KR20237008572 A KR 20237008572A KR 102584018 B1 KR102584018 B1 KR 102584018B1
Authority
KR
South Korea
Prior art keywords
lba
data
cache
lba range
compressed data
Prior art date
Application number
KR1020237008572A
Other languages
English (en)
Other versions
KR20230039769A (ko
Inventor
산지브 엔. 트리카
라우얼 에스. 가르시아
Original Assignee
타호 리서치 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 타호 리서치 리미티드 filed Critical 타호 리서치 리미티드
Publication of KR20230039769A publication Critical patent/KR20230039769A/ko
Application granted granted Critical
Publication of KR102584018B1 publication Critical patent/KR102584018B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing 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/0871Allocation or management of cache space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0877Cache access modes
    • G06F12/0886Variable-length word access
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/22Employing cache memory using specific memory technology
    • G06F2212/222Non-volatile memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/401Compressed data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7203Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks

Abstract

이러한 데이터의 압축에 기초하여 효율적으로 데이터를 캐싱하는 기술 및 메커니즘. 본 개시내용의 기술은 캐시 메모리에 캐시 라인으로서 기입되기 전에 압축되는 데이터로 수행되는 동작을 지원하는 캐시 시스템, 방법 및 컴퓨터 판독 가능 매체를 포함한다. 일부 실시예들에서, 캐시 제어기는 캐시 라인으로서 저장될 압축된 데이터의 크기를 결정한다. 캐시 제어기는 압축된 데이터를 캐싱하기 위한 논리적 블록 주소(LBA) 범위를 식별하며, 이러한 식별은 압축된 데이터의 크기 및 캐시 메모리의 다수의 LBA 범위를 기술하는 참조 정보에 기초한다. 하나 이상의 이러한 LBA 범위는 각각 크기가 다르다. 다른 실시예들에서, 캐시 메모리의 LBA 범위는 각각의 압축된 캐시 라인을 동시에 저장하며, 여기서 LBA 범위는 각각 크기가 다르다.

Description

압축된 데이터 백그라운드를 캐싱하는 장치, 시스템 및 방법{APPARATUS, SYSTEM AND METHOD FOR CACHING COMPRESSED DATA BACKGROUND}
본 개시내용은 캐싱 기술에 관한 것이다. 특히, 본 개시내용은 데이터 압축을 채용하는 드라이브 캐싱 기술에 관한 것이다.
데스크탑 컴퓨터, 랩탑 컴퓨터, 스마트폰, 태블릿 등의 전자 디바이스는, 종종 하나 이상의 주변 저장 디바이스를 포함한다. 예를 들어, 데스크탑 컴퓨터는 데이터를 영구적으로 저장하도록 구성된 자기 기록 매체(디스크)를 포함하는 하드 디스크 드라이브(HDD)를 포함할 수 있다. 유용하긴 하지만, HDD의 입/출력(예를 들어, 기입/판독) 성능은 디바이스의 다른 컴포넌트들에 비해 비교적 느릴 수 있다. 따라서, HDD 및 다른 비교적 저속의 저장 디바이스들(예를 들어, 테이프 메모리)은 이들이 설치되는 전자 디바이스의 성능에 병목 현상을 야기할 수 있다. 성능 향상을 위한 많은 시도가 있었지만, HDD의 전기-기계적 성질은 성능이 향상될 수 있는 정도를 실질적으로 제한할 수 있다.
비교적 느린 주변 저장 디바이스에 의해 제기되는 병목 현상을 경감하는 한 가지 방식은, 캐시 디바이스(여기서는 "캐시"라고도 함)를 이용하는 것이다. 일반적으로, 캐시 디바이스는, 비교적 느린 저장 디바이스와 프로세서 등의 전자 디바이스의 다른 컴포넌트 사이에 논리적으로 존재하는 메모리 디바이스이다. 통상적으로, 캐시는 캐시 디바이스와 연관된 비교적 느린 저장 디바이스에 비해 비교적 빠른 메모리를 포함한다. 캐시 디바이스의 메모리는 주변 저장 디바이스를 위한 임시 저장 영역으로서 역할할 수 있다. 예를 들어, 자주 액세스되는("핫") 데이터는, 예를 들어 비교적 느린 저장 디바이스로부터 초기에 액세스된 후 캐시에 배치될 수 있다. 그 후 핫 데이터로의 후속 액세스는 비교적 느린 저장 디바이스 대신에 캐시에 대해 이루어질 수 있다. 캐시 제어기는 어느 데이터가 캐시 디바이스의 메모리에 저장되고 어느 데이터가 제거되는지를 결정하기 위해 하나 이상의 알고리즘 및/또는 정책을 적용할 수 있다. 캐시는 비교적 느린 저장 디바이스보다 빠르기 때문에, 시스템의 입/출력 성능이 향상될 수 있다.
캐시 디바이스는 비교적 느린 주변 저장 디바이스에 의해 도입된 성능 병목 현상을 완화할 수 있지만, 캐시 메모리는 종종 상당히 비싸다. 따라서, 캐시의 크기는 비용 및/또는 기타의 고려사항에 의해 제한될 수 있다. 결과적으로, 캐시에 저장될 수 있는 데이터의 양은 메모리의 크기에 따라 사실상 제한될 수 있다.
본 발명의 다양한 실시예들은 첨부 도면들에서 제한이 아니라 예로서 예시되어 있다:
도 1은 실시예에 따른 캐싱 시스템의 엘리먼트를 도시하는 상위 레벨 블록도이다.
도 2a는 각각의 실시예에 따라 캐시 시스템에서 다양하게 각각 교환되는 명령의 엘리먼트를 도시한다.
도 2b는 실시예에 따른 데이터 캐싱 동작을 결정하기 위해 액세스되는 참조 정보를 도시한다.
도 2c는 실시예에 따라 압축된 데이터에 대한 액세스를 제공하기 위한 데이터 캐시를 도시한다.
도 2d 및 도 2e는 각각의 실시예에 따른 데이터 캐싱 동작을 결정하기 위해 각각 액세스되는 다양한 참조 정보를 도시한다.
도 3은 실시예에 따라 캐시를 제어하기 위한 방법의 엘리먼트를 도시하는 흐름도이다.
도 4는 실시예에 따른 캐시 제어기에 데이터 압축 정보를 제공하기 위한 방법의 엘리먼트를 도시하는 흐름도이다.
도 5a 및 도 5b는 본 개시내용과 일치하는 캐싱 시스템을 포함하는 예시적인 전자 디바이스의 블록도이다.
본 명세서에 논의되는 실시예들은 캐시 메모리에 저장된 압축된 데이터에 대한 액세스를 향상시키는 기술 및/또는 메커니즘을 다양하게 제공한다. 일부 캐싱 아키텍처는 압축/압축 해제 기능을 활용하여 유효 캐시 용량을 높이는 한편, 적어도 일부의 데이터 액세스 시간에 대한 상대적인 향상을 제공하기 시작하고 있다. 일반적으로, 이러한 기능은 캐시에 기입된 데이터를 압축하는데(또는 캐시로부터 판독될 데이터를 압축 해제하는데) 필요한 추가 시간이, 상대적으로 느린 주변 저장 디바이스에 압축되지 않은 버전의 데이터를 기입하는(또는 압축되지 않은 버전의 데이터를 판독하는) 시간보다 짧은 경우에 유용하다.
종래의 디스크 캐싱 아키텍처는 캐시를 고정된 크기(예를 들어, 4KB 캐시 라인)의 캐시 라인으로 분할하는데, 이러한 캐시 라인은 솔리드 스테이트 드라이브(solid state drive; SSD)와 같은 캐시 디바이스의 논리적 블록 어드레싱(logical block addressing; LBA) 범위에 상주한다. 이러한 아키텍처에서, 캐시 자원은 캐시 라인 레벨의 세분단위(granularity), 예를 들어, 개별 캐시 라인의 미리 결정되고 고정된 크기의 단위로 할당된다. 불행하게도, 데이터 패턴은 다르게 압축된다. 캐시 라인에서 하나의 4KB 데이터는 8배(8x)로 압축될 수 있고, 다음 4KB는 전혀 압축되지 않을 수 있다(예를 들어, 1x).
예를 들어, 압축을 사용하는 종래의 SSD 캐싱은 LBA 범위를 각각 압축되지 않은 캐시 라인의 고정된 크기와 동일한 슬롯으로 분할하는 것을 다양하게 포함한다.
동작 중에, 이러한 슬롯은 필요에 따라 캐시 삽입, 제거 및 업데이트시 다양하게 덧붙여지고, 해제되고, 겹쳐서 기입되게 된다. 따라서, 이들 캐시 해결책은 논리적으로 증가된 캐시 용량의 적어도 일부로부터 완전히 이익을 얻지 못한다. 소정 실시예들은 캐시 라인의 크기가 고정된 상태에서, 캐시 제어 로직이 압축으로 인해 이용 가능한 적어도 일부 캐시 라인의 공간을 이용할 수 없다고 하는 깨달음의 결과이다. 그러한 실시예들에 의해 제공되는 이점들은 캐시 용량의 효과적인 증가 및 시간 경과에 따른 더 높은 캐시 히트율을 포함한다.
본 개시내용이 특정 애플리케이션들에 대한 예시적 실시예들을 참조하여 본원에서 설명되지만, 그러한 실시예들은 단지 예시적이고 첨부된 청구항들에 의해 정의되는 바와 같은 본 발명은 그것에 제한되지 않는다는 점이 이해되어야 한다. 사실상 예시의 목적을 위해, 본원에서 설명된 기술들은, 솔리드 스테이트 드라이브가 하드 디스크 드라이브 또는 테이프 메모리 등의 저장 디바이스를 위한 캐시 디바이스로서 이용되는 하나 이상의 사용 모델의 맥락에서 논의될 수 있다. 이러한 논의는 단지 예시적인 것이며, 본원에서 설명된 기술의 전부 또는 일부는 다른 맥락에서 이용될 수도 있다는 것을 이해해야 한다. 사실상 본원에서 설명된 기술들은 임의의 적절한 캐시 디바이스 및 저장 디바이스와 함께 이용될 수 있다. 본원에서 제공되는 교시들에 접근하는 관련 기술분야(들)의 통상의 기술자들은 본 개시내용의 범위 내의 부가 수정들, 애플리케이션들, 및 실시예들, 및 본 개시내용의 실시예들이 이용할 수 있는 부가 분야들을 인식할 것이다.
본원에서 설명된 기술들은 하나 이상의 전자 디바이스에서 구현될 수 있다. 본원에서 설명된 기술들을 이용할 수 있는 전자 디바이스들의 비제한적인 예로서는, 카메라, 셀 전화, 컴퓨터 단말기, 데스크탑 컴퓨터, 전자 판독기, 팩시밀리 머신, 키오스크, 넷북 컴퓨터, 노트북 컴퓨터, 인터넷 디바이스, 결제 단말기, 개인용 정보 단말기, 미디어 재생기 및/또는 레코더, 서버(예를 들어, 블레이드 서버, 랙 마운트 서버, 이들의 조합 등), 셋탑 박스, 스마트폰, 태블릿 개인용 컴퓨터, 울트라 모바일 개인용 컴퓨터, 유선 전화기, 이들의 조합 등의, 임의의 종류의 모바일 디바이스 및/또는 고정 디바이스가 포함된다. 그러한 디바이스들은 휴대용이거나 고정될 수 있다. 일부 실시예들에서, 본원에서 설명된 기술들은, 데스크탑 컴퓨터, 랩탑 컴퓨터, 스마트폰, 태블릿 컴퓨터, 넷북 컴퓨터, 노트북 컴퓨터, 개인 휴대 정보 단말기, 서버, 이들의 조합 등에서 채용될 수 있다. 더 일반적으로는, 본원에서 설명된 기술들은, 캐시 디바이스와 저장 디바이스 중 하나 또는 양쪽 모두가 결합 및/또는 설치될 수 있는 임의의 전자 디바이스에서 채용될 수 있다.
본원에서 "캐시 디바이스"라는 용어는 다른 메모리 디바이스(이하, "저장 디바이스"라고 함)의 캐시로서 사용되는 메모리 장치를 지칭하기 위해 사용된다. 본 개시내용은 솔리드 스테이트 드라이브가 캐시 디바이스로서 이용되는 실시예에 초점을 맞추고 있지만, 이러한 설명은 단지 예시적인 것이며, 용어 "캐시 디바이스"는 저장 디바이스용 캐시로서 이용될 수 있는 임의 타입의 메모리 디바이스를 포괄한다는 것을 이해해야 한다.
제한없이, 일부 실시예에서, 본원에서 설명된 캐시 디바이스는 솔리드 스테이트 드라이브, 동적 랜덤 액세스 메모리(DRAM), 하드 드라이브, 바이트 어드레스 가능 비휘발성 메모리, 이들의 조합 등의 형태이다. 일부 실시예들에서, 본원에서 설명된 캐싱 디바이스들은 연관된 저장 디바이스의 성능보다 높은 입/출력("I/O") 성능을 나타낸다. 따라서, 일부 실시예들에서, 본원에서 설명된 캐시 디바이스들은, 캐시 디바이스와 연관된 저장 디바이스의 메모리보다 빠른 메모리(본원에서는 "캐시 메모리"라고도 함)를 포함할 수 있다.
용어 "저장 디바이스"는 본원에서, 데이터를 영구적으로 저장하는데 이용될 수 있는 메모리 디바이스를 지칭하기 위해 사용된다. 캐시 디바이스의 비제한적인 예로서는, 하드 드라이브(예를 들어, 자기 기록 매체를 채용하는 드라이브), 솔리드 스테이트 드라이브, 테이프 메모리, 이들의 조합 등이 포함된다. 일부 실시예들에서, 본원에서 설명된 저장 디바이스는 연관된 캐시 디바이스의 I/O 성능보다 낮은 I/O 성능을 나타내는 하나 이상의 메모리 디바이스의 형태이다. 따라서, 일부 실시예들에서, 본원에서 설명된 저장 디바이스들은, 저장 디바이스와 연관된 캐시 디바이스의 메모리보다 느린 메모리(본원에서는 "저장 메모리"라고도 함)를 포함할 수 있다.
본원에서의 임의의 실시예에 사용되는 바와 같이, 용어 "모듈"은 본 개시내용에 따른 하나 이상의 동작들을 수행하도록 구성되는 소프트웨어, 펌웨어, 회로, 및/또는 그것의 조합들을 언급할 수 있다. 소프트웨어는 비일시적 컴퓨터 판독 가능 저장 매체에 기록되어 있는 소프트웨어 패키지, 코드, 명령어들, 명령어 세트 및/또는 데이터로서 구현될 수 있다. 펌웨어는 메모리 디바이스들에 하드 코딩되는(예를 들어, 비휘발성인) 코드, 명령어들 또는 명령어 세트들 및/또는 데이터로서 구현될 수 있다. "회로"는, 본원에서의 임의의 실시예에서 사용되는 바와 같이, 예를 들어 고정 배선 회로(hardwired circuitry), 하나 이상의 개별적인 명령어 처리 코어들을 포함하는 컴퓨터 프로세서들과 같은 프로그래머블 회로, 상태 머신 회로, 및/또는 프로그래머블 회로에 의해 실행되는 명령어들을 저장하는 소프트웨어 및/또는 펌웨어를 예를 들어 단독으로 또는 임의의 조합으로 포함할 수 있다. 모듈들은 이전에 정의된 바와 같이, 하나 이상의 전자 디바이스들의 일부를 형성하는 회로로 집합적으로 또는 개별적으로 구체화될 수 있다. 일부 실시예들에서, 본원에서 설명된 하나 이상의 모듈들은 본 개시내용과 일치하는 하나 이상의 기능들을 수행하기 위해 적어도 부분적으로 하드웨어로 구현되는 로직의 형태일 수 있다.
용어 "솔리드 스테이트 드라이브", "SSD", "SSD들"은, 본원에서는 데이터를 영구적으로 저장하기 위해 집적 회로 어셈블리(예를 들어, 비휘발성 랜덤 액세스 메모리(NVRAM) 어셈블리)가 이용되는 다양한 데이터 저장 디바이스들 중 임의의 것을 지칭하기 위해 상호교환 가능하게 사용된다. 어쨌든, SSD는 NAND 또는 NOR 메모리와 같은 비휘발성 메모리를 포함하는 것으로 이해될 수 있다.
용어 "하드 드라이브" 및 "HDD"는 본원에서는 데이터를 영구적으로 저장하기 위한 자기 기록 매체를 포함하는 데이터 저장 디바이스를 지칭하기 위해 상호교환 가능하게 사용된다. 용어 "하이브리드 하드 드라이브", "하이브리드 하드 드라이브" 및 "하이브리드 HDD"는, NVRAM 및 자기 기록 매체 등의 집적 회로 어셈블리들의 조합을 포함하는 데이터 저장 디바이스를 지칭한다. 하이브리드 HDD는, 소위 (별개의 SSD 및 HDD가, 예를 들어, 운영 체제 또는 기타의 제어 하드웨어/소프트웨어에 의해 하이브리드 볼륨으로 결합된) "듀얼-드라이브 하이브리드 시스템", 및 NAND 메모리 등의 비휘발성 메모리가 하드 드라이브 내에 통합되어 있는 "솔리드 스테이트 하이브리드 드라이브"를 포함한다.
배경에서 언급한 바와 같이, 캐시 디바이스는 비교적 느린 주변 저장 디바이스에 의해 도입될 수 있는 성능 병목 현상의 적어도 일부를 완화할 수 있다. 그러나, 비용 및/또는 기타의 고려사항들은 캐시 디바이스에 포함될 수 있는 메모리의 크기를 사실상 제한할 수 있다. 캐시 디바이스에 저장될 수 있는 데이터의 양은 캐시 메모리의 크기에 의해 제한되므로, 이것은 캐시 디바이스의 이용을 통해 달성될 수 있는 성능 개선에 관해 의미있는 제약을 부과할 수 있다.
상기 사항을 염두에 두면, 캐시 디바이스의 메모리에 저장되는 데이터를 압축하는 것은 캐시 시스템에 상당한 이점을 제공할 수 있다. 예를 들어, 데이터 압축은 내부 메모리의 양을 증가시킬 필요없이 더 많은 데이터가 캐시 디바이스에 저장되도록 할 수 있다. 그러나, 다양한 고려사항으로 인해, 많은 캐시 디바이스들에서 데이터 압축을 구현하는 것이 사실상 어렵다.
예를 들어, 많은 캐시 제어기는 수신된 데이터/상태(data/state)를 고정된 크기(예를 들어, 4KB(킬로바이트), 6KB, 8KB 등)의 캐시 라인들로 분할하도록 구성된다. 따라서, 예를 들어, 캐시 제어기는 64KB 상태가 캐시 메모리에 기록되어야 한다고 결정할 수 있다. 이것을 달성하기 위해, 제어기는 64KB 상태를 16개의 4KB 캐시 라인들로 분할할 수 있다. 그 다음, 제어기는 캐시 디바이스에 기입 명령을 전송하여, 캐시 메모리의 저장 블록에 각각의 4KB 캐시 라인을 기입할 수 있다. 4KB 캐시 라인에 포함된 상태는 압축되어 있지 않기 때문에, 제어기는 통상적으로 저장을 위해 4KB 블록의 캐시 메모리를 할당할 것이다.
앞서 언급된 바와 같이, 캐시 디바이스 내의 캐시 메모리의 용량은 각각의 캐시 라인에서 데이터를 압축함으로써 사실상 증가될 수 있다. 그러나, 각각의 캐시 라인 내의 데이터는, 예를 들어, 내부에 포함된 데이터 패턴들에서의 차이로 인해 상이하게 압축될 수 있다. 예를 들어, 제1 캐시 라인 내의 데이터 패턴은 2배 압축될 수 있고(즉, 압축된 데이터가 입력 데이터의 절반 크기임을 의미), 제2 캐시 라인 내의 데이터 패턴은 8배 압축될 수 있는(즉, 압축된 데이터가 입력 데이터의 1/8 크기임을 의미) 반면, 제3 캐시 라인 내의 데이터 패턴은 전혀 압축되지 않을 수 있다(즉, 압축된 데이터와 입력 데이터가 동일한 크기임을 의미). 이것을 염두에 두면, 압축을 채용하는 종래의 캐시 시스템에서, 캐시 제어기는, 압축된 데이터가 캐시 메모리에 기입되기 전에 캐시 라인 내의 압축된 데이터의 크기를 알지 못한다.
따라서, 이러한 시스템 내의 제어기는, 주어진 캐시 라인 내의 압축된 데이터의 크기가 전체 캐시 라인 크기(full cache line size)보다 작은 경우에도 일반적으로 캐시 메모리에 전체 캐시 라인 크기를 할당한다. 예를 들어, 4KB 캐시 라인 내의 데이터는 2KB로 압축될 수 있지만, 캐시 제어기는 압축된 데이터의 크기를 알지 못할 수 있다. 따라서, 제어기는 압축된 데이터의 크기가 단지 2KB이더라도, 캐시 라인에 데이터를 저장하기 위해 캐시 메모리에서 4KB 블록을 할당할 수 있다.
따라서, 압축을 채용하는 종래의 캐시 시스템은 일반적으로 압축에 의해 자유롭게 된 추가 공간을 직접 이용할 수 없다. 사실, 압축에 의해 이용가능한 이점을 이용하기 위해서, 이러한 시스템은 압축된 데이터가 기입된 후에 캐시 디바이스에 질의하여 캐시 메모리의 크기가 변경되었는지를 결정하고 및/또는 이용가능한 캐시 메모리의 양을 결정해야 한다.
상기 사항을 염두에 두면, 본 개시내용은 데이터 압축을 채용하는 캐싱 기술에 관한 것이다. 이하에서 상세히 설명되는 바와 같이, 본 개시내용의 기술은, 캐시 라인 내의 데이터가 캐시 메모리에 기입되기 전에 압축되는 캐시 시스템 및 방법을 포함한다. 압축을 채용하는 종래의 캐시 시스템과 달리, 본 개시내용의 기술은, 캐싱 제어기가, 압축된 데이터를 캐시 메모리에 기입하기 전에 캐시 라인 내의 데이터가 압축되는 정도를 이해할 수 있게 한다. 일부 실시예들에서, 본원에서 설명된 캐시 제어기는, 적어도 부분적으로, 압축된 데이터의 크기, 압축된 데이터(또는 그 대응하는 입력 데이터)에 기인하는 압축비, 또는 이들의 조합에 기초하여, 압축된 데이터가 캐시 메모리에 저장될 곳을 결정할 수 있다.
따라서, 본 개시내용의 한 양태는, 본원에서는 캐싱 시스템이라고도 하는, 데이터를 캐싱하기 위한 시스템에 관한 것이다. 명료성 및 이해의 용이성을 위해, 본원에서 설명된 캐싱 시스템은, 캐시 시스템이 이용 및/또는 설치될 수 있는 호스트 디바이스 및/또는 시스템과는 독립적으로 설명된다는 점에 유의한다. 캐시 시스템은, 하나 이상의 주변 저장 디바이스를 위한 캐시로서 이용되는 솔리드 스테이트 드라이브 또는 기타의 메모리 디바이스 등의, 상기 정의된 전자 디바이스 및/또는 그 컴포넌트의 형태일 수 있는, 임의의 적합한 호스트 디바이스 또는 시스템에서 이용되거나 및/또는 이들에 설치될 수 있다는 것을 이해해야 한다. 제한없이, 본원에서 설명된 캐시 시스템은, 특히, 데스크탑 컴퓨터, 랩탑 컴퓨터, 모바일 전화, 스마트폰, 태블릿 개인용 컴퓨터, 서버, 데이터 센터, 이들의 조합 등에 채용될 수 있는 하나 이상의 저장 디바이스를 캐싱하는데 적합하다. 더욱 일반적으로, 본원에서 설명된 캐시 시스템은, 비교적 느린 주변 저장 디바이스를 캐싱함으로써 혜택을 입을 수 있는 임의의 디바이스에서 구현될 수 있다.
이와 관련하여, 본 개시내용과 일치하는 예시적인 캐시 시스템의 블록도인 도 1을 참조한다. 도시된 바와 같이, 캐시 시스템(100)은 캐시 제어기 모듈(CCM)(101) 및 캐시 디바이스(102)를 포함한다.
CCM(101)은 도 1에서 캐시 디바이스(102)와는 별개인 것으로 도시되어 있다는 점에 유의한다. 이러한 예시는 단지 예시의 목적일 뿐이며, CCM(101)은 임의의 적절한 위치에 존재할 수 있다는 것을 이해해야 한다. 예를 들어 및 도 1에 도시된 바와 같이, 일부 실시예들에서, CCM(101)은 캐시 디바이스(102)와는 별개의 모듈의 형태이다. 이러한 실시예들에서, CCM(101)은 캐시 시스템(100)이 이용되는 전자 디바이스(예를 들어, 호스트 시스템, 미도시)에 설치되거나 또는 기타의 방식으로 존재할 수 있다. 이러한 경우, CCM(101)은 캐시 디바이스(102)와 유선 또는 무선으로 통신할 수 있다. 대안적으로, CCM(101)은 예를 들어, 도 5a 및 도 5b에 도시된 바와 같이, 캐시 디바이스(102)와 통합될 수도 있다. 예를 들어, CCM(101)은 캐시 디바이스(101)의 온-보드(on-board) 캐시 제어기의 형태일 수 있거나 이를 포함할 수 있다. 일부 실시예들에서, 캐시 시스템(100)은 솔리드 스테이트 디스크에 포함되며, CCM(101)은 SSD 제어기의 형태이거나 이를 포함한다.
어느 경우에나, CCM(101)은 캐시 디바이스(102) 내의, 더 구체적으로는, 캐시 디바이스(102)의 메모리(106) 내의 데이터/상태의 저장을 제어하도록 구성된 소프트웨어, 펌웨어, 하드웨어, 적어도 부분적으로 하드웨어로 구현된 로직, 또는 이들의 조합의 형태일 수 있다. 따라서, CCM(101)은 어느 데이터/상태가 캐시 디바이스(102)에 저장되어야 하는지 및/또는 캐시 디바이스(102)로부터 제거되어야 하는지를 결정하기 위해 하나 이상의 공지된 또는 미래의 캐싱 정책 및/또는 알고리즘을 구현할 수 있다. 이러한 기능에 대한 대안으로서 또는 이에 추가하여, CCM(101)은 또한, 데이터/상태가 캐시 디바이스(102)의 메모리(106)에 저장될 곳을 결정하도록 구성될 수 있다. 나중에 상세히 설명되는 바와 같이, CCM(101)은, 적어도 부분적으로, 압축된 데이터/상태의 크기, 압축된 데이터/상태에 기인하는 압축비, 또는 이들의 조합에 기초하여 메모리(106) 내의 블록들(즉, 논리적 블록 주소 또는 LBA)을 할당할 수 있다.
캐시 디바이스(102)는 비교적 느린 주변 저장 매체(미도시)를 캐싱하기에 적합한 임의의 데이터 저장 디바이스일 수 있다. 캐시 디바이스(102)로서 이용될 수 있는 적절한 데이터 저장 디바이스의 비제한적인 예로서는, 솔리드 스테이트 드라이브, 하드 드라이브 드라이브, 동적 랜덤 액세스 메모리(DRAM) 디바이스, 이들의 조합 등이 포함된다.
상술된 설명과 일치하여, 캐시 디바이스(102)는 일부 실시예에서, 데이터 저장 디바이스가 캐시로서 이용될 주변 저장 매체의 입/출력 성능보다 높은 입/출력(기입/판독) 성능을 나타내는 임의의 데이터 저장 디바이스일 수 있다. 제한없이, 일부 실시예들에서 캐시 디바이스(102)는 솔리드 스테이트 드라이브의 형태이다.
도 1에 도시된 바와 같이, 캐시 디바이스(102)는 데이터 압축 모듈(DCM)(103), 압축 압축해제 엔진(CODEC)(104), 전송 버퍼(버퍼)(105), 및 메모리(106)를 포함한다. DCM(103)은 일반적으로 CCM(101)과 통신하고 캐시 디바이스(102)로 하여금 본 개시내용과 일치하는 데이터 압축 동작을 수행하게 하도록 기능한다. DCM(103)의 동작에 관한 추가 상세한 설명은 나중에 제공될 것이다.
압축 압축해제 엔진 CODEC(104)은 일반적으로 CCM(101)으로부터 수신된 데이터를 압축하는 기능을 한다. 특히 그리고 후술되는 바와 같이, CODEC(104)은 CCM(101)(또는 더 구체적으로는 DCM(103))으로부터 캐시 라인 내의 데이터를 수신할 수 있다. 명료성을 위해, CODEC(104)에 의해 수신된 데이터는 입력 데이터라고 지칭된다. 본 개시내용은, CODEC이 단일의 캐시 라인으로부터의 입력 데이터에 관해 동작하는 실시예를 설명하지만, 이러한 설명은 예시의 목적을 위한 것이고, CODEC은 복수의 캐시 라인들로부터의 입력 데이터에 관해 동작하도록 구성될 수도 있다는 것을 이해해야 한다. 따라서, 예를 들어, CCM(101)은 데이터 풀(pool of data)을 복수의 캐시 라인으로 분할할 수 있고, 각각의 캐시 라인은 입력 데이터(예를 들어, 4KB, 8KB 등)를 포함한다. CCM(101)(또는 DCM(103))은 하나 이상의 캐시 라인으로부터의 입력 데이터를 압축을 위해 CODEC(104)에 전송할 수 있다. 그 구성에 따라, CODEC(104)은 한번에 입력 데이터 세트들 중 단 하나(즉, 하나의 캐시 라인으로부터의 입력 데이터)에 관해 동작하거나, 또는 복수의 입력 데이터 세트(즉, 복수의 캐시 라인으로부터의 입력 데이터)에 관해 동시에 동작할 수 있다.
그 다음, CODEC(104)은 압축된 출력을 생성하도록, 예를 들어, 하나 이상의 압축 알고리즘을 이용하여 입력 데이터에 관해 압축 동작을 수행할 수 있다. 이해할 수 있는 바와 같이, 압축된 출력의 크기는 입력 데이터의 크기와는 상이할 수 있다. 압축된 출력과 입력 데이터의 크기 사이의 상대적인 차이는 압축비로 표현될 수 있고, 압축비는, 일부 실시예에서는 입력 데이터의 크기를 압축된 출력의 크기로 나눔으로써 또는 그 반대로 결정될 수 있다. 따라서, 예를 들어, 입력 데이터의 크기가 4KB이고 압축된 출력의 크기가 2KB라면, 압축비는, 그 압축비가 계산되는 방식에 따라, 0.5 또는 2일 수 있다.
CODEC(104)에 의해 실행될 수 있는 압축 알고리즘의 비제한적인 예로서는, Lempel-Ziv(LZ) 알고리즘, Deflate 알고리즘, LZR 알고리즘, 및 이들의 조합이 포함된다. 물론, 이들 알고리즘은 단지 예시적인 것이며, 임의의 적절한 압축 알고리즘(및 특히 무손실 압축 알고리즘)이 이용될 수 있다.
제한없이, 일부 실시예들에서, CODEC(104)은 CCM(101)(또는 특히 DCM(103))으로부터 수신된 데이터/상태에 관해 Lempel-Ziv 알고리즘을 실행한다.
도 1은 CODEC(104)이 캐시 디바이스(102)에 통합되는 실시예를 나타낸다. 이 예시는 단지 예의 목적일 뿐이며, CODEC(104)은 캐시 디바이스(102)와 통합될 필요는 없다는 것을 이해해야 한다. 사실상, 본 개시내용은 CODEC(104)이 임의의 적절한 위치에 저장되거나 및/또는 구현되는 실시예를 구상하고 있다. 예를 들어, CODEC(104)은 비디오 카드 또는 다른 하드웨어 가속기 등의, 호스트 시스템의 다른 하드웨어에 의해 구현되는 하드웨어 코덱일 수 있다.
대안적으로 또는 추가로, CODEC은 예를 들어, 호스트 시스템의 프로세서에 의해 실행되는 소프트웨어 코덱일 수 있다.
CODEC(104)의 성질에 관계없이, CODEC(104)에 의해 생성된 압축된 출력은 버퍼(105)에 저장될 수 있다. 따라서, 버퍼(105)는 CODEC(105)의 압축된 출력을 저장하도록 구성될 수 있다. 특히, 버퍼(105)는 압축된 출력을 캐시 디바이스(102)의 메모리(106)에 기입하기 전에 CODEC(105)의 압축된 출력을 저장할 수 있다. 후술되는 바와 같이, 압축된 출력을 메모리(106)에 기입하는 것은, 예를 들어 CCM(101)으로부터의 데이터 기입 명령(예를 들어, 기입 명령)의 수신시에 컨디셔닝(condition)될 수 있다. 또한, 이후에 더 설명되는 바와 같이, (예를 들어, 압축된 출력이 버퍼(105)에 저장되어 있는 동안) 압축된 출력을 메모리(105)에 커밋(commit)하기 전에, 압축된 출력이 기입될 위치(예를 들어, 메모리(106)의 논리적 블록 주소)가 CCM(101)에 의해 결정될 수 있다. 따라서, 버퍼(105)는, 압축된 출력을 캐시 메모리(106)에 커밋하기 전에 CODEC(104)의 압축된 출력을 저장할 수 있는 전송 버퍼인 것으로 이해될 수 있다.
버퍼(105)는 압축된 출력을 저장하기에 적합한 임의의 메모리 구조일 수 있다. 버퍼(105)로서 이용될 수 있는 적절한 메모리 구조의 비제한적인 예로서는, 정적 랜덤 액세스 메모리(SRAM), 임베디드 다이나믹 랜덤 액세스 메모리, 이들의 조합 등이 포함된다. 제한없이, 일부 실시예들에서, 버퍼(105)의 크기는 CCM(101)으로부터 수신된 캐시 라인의 크기보다 크거나 같다.
따라서, 예를 들어 CCM(101)이 캐시 디바이스(102)에 4KB 캐시 라인을 전송하는 경우, 버퍼(105)의 크기는 일부 실시예에서 약 4KB 이상일 수 있다. 물론 이것은 단지 예의 목적을 위한 것이며, 버퍼(105)는 임의의 원하는 크기일 수 있다.
메모리(106)는 임의의 적절한 타입의 컴퓨터 판독 가능 메모리일 수 있다. 메모리(106)로서 사용될 수 있는 예시적인 메모리 타입은 상 변화 메모리(PCM), 바이트 어드레스 가능 3차원 교차점 메모리, 저항성 메모리, 나노와이어 메모리, 강유전성 트랜지스터 랜덤 액세스 메모리(FeTRAM) , NAND 또는 NOR 메모리와 같은 플래시 메모리, 멤리스터(memristor) 기술, 스핀 전달 토크(STT) -MRAM, 자기 드라이브 메모리, 광학 드라이브 메모리, 이들의 조합 등을 포함하는 자기저항 랜덤 액세스 메모리(MRAM) 메모리를 포함하지만, 이에 한정되지는 않는다. 추가적으로 또는 대안적으로, 메모리(106)는 기타의 타입 및/또는 나중에 개발된 타입의 컴퓨터 판독 가능 메모리를 포함할 수 있다.
제한없이, 일부 실시예들에서, 메모리(106)는 통상적으로, 캐시 디바이스(102)로서 이용되는 메모리 디바이스의 타입과 연관된 메모리의 타입이다. 따라서, 예를 들어, 캐시 디바이스(102)가 솔리드 스테이트 드라이브일 때, 메모리(106)는 비휘발성 메모리의 형태일 수 있다. 마찬가지로, 캐시 디바이스(102)가 하드 드라이브일 때, 메모리(106)는 자기 기록 매체의 형태일 수 있다. 제한없이, 일부 실시예들에서 캐시 디바이스(102)는 SSD의 형태이고, 메모리(106)는 비휘발성 메모리(예를 들어, NAND 메모리)의 형태이다.
어느 경우이든, 메모리(106)는 예를 들어, 캐시 디바이스(102)의 메모리 제어기 또는 다른 컴포넌트로 어드레싱될 수 있는 하나 이상의 논리적 블록에 데이터를 저장하도록 구성될 수 있다. 즉, 메모리(106)는 데이터/상태가 저장될 수 있는, 복수의 논리적 블록 주소(LBA)를 포함할 수 있거나 또는 이들에 배치될 수 있다. 데이터는 본 기술분야에서 일반적으로 이해되는 바와 같이 데이터 기입 명령에 응답하여 메모리(106)에 기입될 수 있다. 데이터 기입 명령은 그 명령과 관련된 데이터/상태가 기입되어야 하는 메모리(106) 내의 논리적 블록 주소를 명시하는 기입 명령의 형태일 수 있다.
예의 목적을 위해, 본 개시내용이 이제, 캐시 디바이스(102)가 SSD의 형태이고 메모리(106)가 비휘발성 메모리의 형태인 캐시 시스템(100)의 실시예의 동작을 설명하기 위해 진행될 것이다. 이하의 설명은 예의 목적을 위한 것이며, 이 예와 관련하여 설명된 동작들은 임의의 적절한 캐시 디바이스에서 채용될 수 있다는 점을 강조한다.
도 1을 더 참조하면, CCM(101)은 캐시 시스템(100)이 설치될 수 있는 호스트 시스템의 프로세서 또는 다른 컴포넌트 등의 데이터 소스로부터 데이터를 수신할 수 있다. 앞서 언급된 바와 같이, CCM(101)은 데이터의 전부 또는 일부가 메모리(106)에 기입되어야 하는지를 결정하기 위해 하나 이상의 캐싱 정책을 적용할 수 있다. CCM(101)이 데이터의 전부 또는 일부가 메모리(106)에 기입되어야 한다고 결정할 때, CCM(101)은 기입될 데이터를 크기가 고정되거나 가변적일 수 있는 하나 이상의 캐시 라인에 할당할 수 있다. 제한없이, 일부 실시예들에서, 캐시 라인은 고정된 크기, 예를 들어 4KB, 6KB, 8KB, 16KB, 32KB, 64KB 등을 갖는다.
CCM(101)은 또한, 캐시 라인 내의 데이터에 태그를 할당할 수 있다. 일반적으로, 태그는 특정 데이터 유닛, 이 경우에는 캐시 라인 중 하나에 할당된 데이터 유닛의 식별자로서 기능한다. 따라서, 태그는 태그와 연관되어 있는 캐시 라인 내의 데이터를 고유하게 식별하기에 적합한 임의의 포멧일 수 있다. 따라서, 예를 들어, CCM(101)은 제1 캐시 라인 내의 데이터에 제1 태그 "A"를, 제2 캐시 라인 내의 데이터에 제2 태그 "B"를 할당할 수 있다. 캐시 라인과 연관된 태그의 성질 및 포멧은, 캐시 라인 내의 데이터를 고유하게 식별할 수 있는 한, 제한되지 않는다. 따라서, 예를 들어, 태그는 32 비트, 64 비트, 128 비트, 또는 256 비트 시퀀스 번호, 캐시 라인 내의 데이터의 해시, 이들의 조합 등의 형태일 수 있다. 제한없이, 일부 실시예들에서 태그는 64 비트 시퀀스 번호의 형태이다.
그 다음, CCM(101)은 도 1의 지점 1에 나타낸 바와 같이, 캐시 라인 내의 데이터를 압축을 위해 캐시 디바이스(102)에 전송할 수 있다. 이와 관련하여, CCM(101)은 예를 들어, 하나 이상의 유선 또는 무선 신호로, 압축 명령을 캐시 디바이스(102)에 전송할 수 있다. 압축 명령은, SATA(serial advanced technology attachment) 표준 또는 NVMe(non-volatile memory express) 표준의 이전의, 현재의 또는 향후의 개발된 버전에서의 벤더 특수 명령 등의 임의의 적합한 포멧일 수 있다. NVMe 또는 비휘발성 메모리 호스트 제어기 인터페이스 사양(NVMHCI)은 PCIe 버스를 통해 연결된 SSD에 액세스하기 위한 사양이다.
예를 들어, 2014년 11월 3일에 비준되고 http://nvmexpress.org에서 다운로드할 수 있는 NVM Express 개정판 1.2 사양을 참조하라. 어느 경우이든, 압축 명령은, 태그의 사본, 압축을 위한 입력 데이터(즉, 캐시 라인 내의 데이터), 및 선택사항으로서 입력 데이터의 압축되지 않은 크기의 측정치를 명령 내에 포함할 수 있다. 이 개념이 도 2에 도시되어 있고, 여기서 압축 명령(201)은 태그, 입력 데이터, 및 선택사항으로서 입력 데이터의 압축되지 않은 크기의 측정치를 포함하는 단일 명령의 형태로 도시되어 있다. 물론, 압축 명령은, 명령 헤더 등의 그러나 이것으로 제한되지 않는, 원하는 다른 엘리먼트를 포함할 수 있다. 압축 명령은 또한, CODEC(104)으로 하여금 입력 데이터에 관해 압축 동작을 수행하게 하도록 구성될 수 있는 하나 이상의 압축 명령어를 포함하거나 이와 연관될 수 있다. 물론, 태그, 데이터 및 압축 명령어는 동일한 명령에 포함될 필요가 없으며, 원한다면 상이한 명령들에 포함될 수도 있다.
DCM(103)은 CCM(101)으로부터 직접 압축 명령을 수신할 수 있거나, 압축 명령은 캐시 디바이스(102)의 다른 컴포넌트들로부터 DCM(103)에 포워딩될 수 있다. 어쨌든, 압축 명령에 응답하여, DCM(103)은 캐시 제어기 모듈로부터 수신된 입력 데이터를 압축을 위해 CODEC(104)에 포워딩할 수 있다. 이에 응답하여, CODEC(104)은 예를 들어, 전술된 바와 같이, 하나 이상의 압축 알고리즘을 이용하여 입력 데이터에 관해 하나 이상의 압축 동작을 실행할 수 있다. 도 1의 지점 2에 나타낸 바와 같이, CODEC(104)은 결과의 압축된 출력을 전송 버퍼(105)에 저장할 수 있다. 그 다음, CODEC(104)은 압축 동작의 완료 및 압축된 출력의 위치(예를 들어, 버퍼(105)의 식별자, 버퍼(105) 내의 주소 범위 등)를 DCM(103)에 보고할 수 있다.
도 1의 지점 3에 도시된 바와 같이, DCM(103)은 리턴 메시지를 CCM(101)에 전달할 수 있다. 리턴 신호는, DCM(103)에 저장된 압축된 출력의 크기의 측정치 뿐만 아니라 입력 데이터에 할당된 태그를 포함할 수 있다. 이러한 개념은 도 2a에 도시되어 있으며, 여기서 리턴 메시지(202)는 태그 및 압축된 출력의 크기를 포함하는 것으로 도시되어 있다. 따라서, 일부 실시예들에서, DCM(103)은 버퍼(105)에 저장된 압축된 출력의 크기를 측정하거나 기타의 방식으로 결정할 수 있고, 리턴 명령에 결정된 크기를 포함할 수 있다. 대안적으로 또는 추가로, CODEC(104)은 예를 들어, 입력 데이터를 압축한 후에 압축된 데이터의 크기를 DCM(103)에 자동으로 전달하도록 구성될 수 있다.
본 개시내용은 DCM(101)이 CCM(101)에 압축된 크기 및 태그를 지정하는 리턴 메시지를 자동적으로 발행하는 실시예를 구상하고 있지만, 본 개시내용의 시스템은 이러한 방식으로 구성될 필요는 없다. 사실상, 일부 실시예들에서, DCM(103)은 CCM(101)으로부터 질의 메시지의 수신시에 리턴 메시지의 발행을 컨디셔닝할 수 있다. 예를 들어, CCM(101)으로부터의 입력 데이터가 CODEC(104)에 의해 압축되고 전송 버퍼(105)에 저장되면, DCM(103)은 CCM(101)으로부터 수신된 입력 데이터(예를 들어, 다양한 상이한 캐시 라인들)와 연관된 태그를, 태그와 연관된 압축된 출력의 크기뿐만 아니라 압축된 출력의 위치(예를 들어, 버퍼(105)에서)와 상관시키는 레코드(예를 들어, 테이블 또는 기타의 데이터 구조)를 유지할 수 있다. 그 다음, DCM(101)은 CCM(101)으로부터 질의 명령의 수신을 기다릴 수 있다. 예를 들어, 일부 실시예에서의 CCM(101)은 질의 명령을 DCM(103)에 전송할 수 있고, 여기서, 질의 명령은 질의 명령어 및 태그를 포함한다. 질의 명령에 응답하여, DCM(103)은 태그와 연관된 압축된 출력의 크기를 조회하고, 태그 및 압축된 출력의 크기를 포함하는 리턴 메시지를 전술된 바와 같이 CCM(101)에 전송할 수 있다.
어쨌든, 도 1의 지점 4에 도시된 바와 같이, CCM(101)은 캐시 디바이스(102)(또는 더 구체적으로는 DCM(103))로부터 리턴 메시지를 수신할 수 있다. 리턴 메시지의 수신에 응답하여, CCM(101)은 리턴 메시지를 분석하여 태그 및 압축된 데이터의 크기를 식별할 수 있다. 이러한 분석을 통해, CCM(101)은 태그와 연관된 입력 데이터가 CODEC(104)에 의해 압축된 정도를 결정할 수 있다. 다시 말하면, 리턴 메시지를 분석함으로써, CCM(101)은 버퍼(105)에 저장된 압축된 출력의 크기를 결정할 수 있다. (리턴 메시지 내의) 태그와 연관된 압축된 출력 및 태그는, (압축 명령에서) 입력 데이터와 연관되었기 때문에, 따라서 CCM(101)은, 압축된 출력의 크기 및/또는 CODEC(104)에 의해 입력 데이터가 압축된 정도(즉, 입력 데이터의 압축비)를 결정할 수 있다.
그 다음, CCM(101)은 압축된 출력이 메모리(106)에 저장될 곳을 결정할 수 있다. 이와 관련하여, CCM(101)은, 메모리(106) 내의 논리적 블록 주소(LBA) 뿐만 아니라, 이들 논리적 블록 주소의 현재 상태(예를 들어, 기입됨, 미기입됨 등)를 알 수 있다. 예를 들어, CCM(101)은 메모리(106) 내의 모든 LBA를 식별하는 LBA 테이블을 유지할 수 있다. 적어도 부분적으로, 압축된 출력의 크기 및/또는 입력 데이터에 기인하는 압축비에 기초하여, CCM(101)은 압축된 출력의 저장을 위해 메모리(106) 내에 하나 이상의 LBA를 할당할 수 있다.
도 1의 지점 5에 도시된 바와 같이, CCM(101)은 캐시 디바이스(102)에 기입 명령을 발행할 수 있다.
일반적으로, 기입 명령은, 캐시 디바이스(102)로 하여금 버퍼(105)에 저장된 압축된 출력을 메모리(106)의 하나 이상의 LBA에 기입하게 하도록 구성될 수 있다. 따라서, 기입 명령은, 압축된 출력(및 대응하는 입력 데이터) 뿐만 아니라 압축된 출력이 기입될 하나 이상의 LBA와 연관된 태그를 포함할 수 있다. 이 개념이 도 2a에 도시되어 있으며, 여기서, 기입 명령(203)은 태그와 연관된 압축된 출력이 기입될 메모리(106) 내의 하나 이상의 LBA 및 태그를 포함하는 단일 명령으로서 예시되어 있다.
원한다면, 기입/커밋 명령어(미도시)도 역시 명령에 포함되거나 CCM(101)에 의해 별도로 전송될 수 있다.
이제 도 1의 지점 6으로 돌아가면, DCM(103)은 CCM(101)으로부터 기입 명령을 수신하도록 구성될 수 있다. 기입 명령에 응답하여, DCM(103)은, 캐시 디바이스(102)로 하여금, 기입 명령에서 식별된 태그와 연관된 압축된 데이터를, 버퍼(105)로부터, 기입 명령에서 명시된 메모리(106)의 하나 이상의 논리적 블록 주소에 기입하게 할 수 있다. 버퍼(105)로부터 메모리(106)로의 압축된 데이터의 기입은, 임의의 이전에 알려진 또는 개발예정된 방식으로 이루어질 수 있으며, 따라서 여기서 논의되지 않는다.
명료성을 위해, 상기 논의는, CCM(101)이 버퍼(105)에 저장된 압축된 출력이 캐시 디바이스(102)의 메모리(106)에 기입되어야 한다고 결정하는 실시예에 초점을 맞추었다. 상기 논의는 단지 예의 목적을 위한 것일 뿐이며, 버퍼(105)에 저장된 압축된 출력은 항상 캐시 디바이스(102)의 메모리(106)에 기입될 필요는 없다는 것을 이해해야 한다. 사실상, 본 개시내용은, CCM(101)이, 리턴 메시지에 응답하여, 버퍼(105)에 저장된 압축된 출력이 메모리(106)에 기입되지 않아야 한다고 결정하는 실시예를 구상하고 있다.
예로서, 일부 실시예들에서, CCM(101)은, 앞서 논의된 바와 같이, 리턴 메시지를 분석하여, 버퍼(105)에 저장된 압축된 출력의 크기, 및/또는 입력 데이터에 기인하는 압축비를 결정할 수 있다. 이러한 실시예들에서, CCM(101)은 또한, 적어도 부분적으로, 압축비 및/또는 압축된 출력의 크기에 기초하여, 압축된 출력을 메모리(106)에 기입할지를 결정하도록 구성될 수 있다. 예를 들어, CCM(101)은 입력 데이터에 기인하는 압축비를 임계 압축비와 비교할 수 있고, 적어도 부분적으로, 입력 데이터에 기인하는 압축비가 임계 압축비를 초과하는지의 여부에 기초하여, 압축된 출력이 메모리(106)에 기입되어야 하는지의 여부를 결정할 수 있다. 대안적으로 또는 추가로, CCM(101)은 버퍼(105) 내의 압축된 출력의 크기를 임계 크기와 비교할 수 있고, 적어도 부분적으로, 압축된 출력의 크기가 임계 크기를 초과하는지의 여부에 기초하여, 압축된 출력이 메모리(106)에 기입되어야 하는지의 여부를 결정할 수 있다.
CCM(101)이 압축된 출력이 메모리(106)에 기입되지 않아야 한다고 결정하는 경우, CCM(101)은 캐시 디바이스(102)(또는 더 구체적으로는 DCM(103))에 폐기 명령을 발행할 수 있다. 폐기 명령은, 예를 들어, 폐기 명령어 및 태그를 포함할 수 있다. 폐기 명령에 응답하여, DCM(103)은 캐시 디바이스(102)로 하여금 태그와 연관된 압축된 출력을 버퍼(105)로부터 제거하게 할 수 있다.
전술된 바와 같이, 본 개시내용은, CCM(101)이 압축될 캐시 라인 데이터와 태그를 연관시키고, DCM(103)이 태그를 전송 버퍼(105)에 저장된 압축된 데이터와 연관시키며, CCM이 압축된 데이터를 메모리(106)에 기입하게 하는 태그를 포함하는 기입 명령을 발행하는 실시예를 구상하고 있다. 유용하지만, 이러한 실시예는 예의 목적을 위한 것이고, 본 개시내용은, 태그가 캐시 라인 내의 데이터를 식별하는데 이용되지 않는 실시예를 구상하고 있다는 것을 이해해야 한다. 예를 들어, 앞서 언급된 바와 같이, CCM(101)은 캐시 디바이스(102)에 압축 명령을 전송하도록 구성될 수 있다.
그러나, 전술된 실시예들과는 달리, 압축 명령은 압축을 위한 캐시 라인으로부터의 데이터/상태를 포함할 수 있지만, 태그를 포함하지 않을 수도 있다. 압축 명령에 응답하여, DCM(103)은 데이터/상태를 압축을 위해 CODEC(104)에 포워딩할 수 있고, 그 후, 압축된 출력은 전송 버퍼(105)에 저장될 수 있다. 그 다음, DCM(103)은 CCM(101)에 리턴 신호를 전송하여, 압축 동작의 완료와 압축된 출력이 저장된 전송 버퍼(105)의 위치/식별을 시그널링할 수 있다.
CCM이 압축된 출력이 메모리(106)에 기입되어야 한다고 결정할 때, CCM은 캐시 디바이스(102)에 판독 명령을 발행할 수 있다. 판독 명령은 전송 버퍼(105)를 목표로 하고, 캐시 디바이스(102)로 하여금 전송 버퍼(105)의 내용을 캐시 제어기(101)에 제공하게 한다. 그 다음, CCM(101)은 전송 버퍼(105)로부터 판독된 데이터의 크기 및/또는 압축비를 결정할 수 있고, 저장을 위해 메모리(106) 내에 논리적 블록 주소를 할당할 수 있다. 그 다음, CCM(101)은, 압축된 출력 및 메모리(106)의 할당된 LBA들을 포함하는, 기입 명령을 캐시 디바이스(102)에 발행할 수 있다. 기입 명령에 응답하여, 캐시 디바이스(102)는 기입 명령에서 명시된 할당된 LBA에 압축된 출력을 기입할 수 있다.
이해될 수 있는 바와 같이, 이러한 실시예들은, CCM(101)이 압축된 출력을 메모리(106)에 기입하기 전에 압축된 출력의 크기 및/또는 압축비를 결정할 수 있게 하면서 각각의 캐시 라인에 대한 태그를 생성 및 추적하는 것과 연관된 오버헤드를 피할 수 있게 하지만, 잠재적으로, 추가 데이터가 전송될 수 있기 전에 주어진 캐시 라인에 대해 압축이 완료될 때까지 기다려야 한다는 것을 댓가로 한다.
앞서 언급된 바와 같이, 본 개시내용의 캐시 시스템은, 예를 들어, 하나 이상의 캐시 디바이스 및/또는 전자 디바이스에 포함될 수 있고, 하나 이상의 저장 디바이스를 캐싱할 수 있다. 이 개념이, 본 개시내용과 일치하는 캐시 시스템을 포함하는 전자 디바이스의 블록도를 도시하는 도 5a에 도시되어 있다. 도시된 바와 같이, 전자 디바이스(500)는 디바이스 플랫폼(501), 프로세서 (502), 저장 디바이스(503), 캐시 디바이스(이 경우에는, SSD(504)), 입/출력 인터페이스/디바이스(505)(예를 들어, 키보드, 마우스, 무선 네트워크 인터페이스 등), 디스플레이(506) 및 하나 이상의 안테나(507)를 포함한다. SSD(504)는 캐시 시스템(100)을 포함하며, 그 추가 상세사항은 도 5b에 도시된다. SSD(504)로 압축된 캐시 라인에 액세스하는 것은 적어도 부분적으로 플랫폼(501)의 하나 이상의 다른 동작 -예를 들어, 디스플레이 (506)로 화상을 디스플레이하는 것, 하나 이상의 안테나(507)와의 무선 네트워크 통신, 및/또는 유사한 것을 포함함- 을 결정할 수 있다.
전자 디바이스(500)는 전술된 전자 디바이스 등의, 임의의 적합한 전자 디바이스일 수 있다. 따라서, 전자 디바이스(500)로서 이용될 수 있는 전자 디바이스들의 비제한적인 예로서는, 카메라, 셀 전화, 컴퓨터 단말기, 데스크탑 컴퓨터, 전자 판독기, 팩시밀리 머신, 키오스크, 넷북 컴퓨터, 노트북 컴퓨터, 인터넷 디바이스, 결제 단말기, 개인용 정보 단말기, 미디어 재생기 및/또는 레코더, 서버(예를 들어, 블레이드 서버, 랙 마운트 서버, 이들의 조합 등), 셋탑 박스, 스마트폰, 태블릿 개인용 컴퓨터, 울트라 모바일 개인용 컴퓨터, 유선 전화기, 이들의 조합 등의, 임의의 종류의 모바일 디바이스 및/또는 고정 디바이스가 포함된다. 그러한 디바이스들은 휴대용이거나 고정될 수 있다. 일부 실시예들에서, 본원에서 설명된 기술들은, 데스크탑 컴퓨터, 랩탑 컴퓨터, 스마트폰, 태블릿 컴퓨터, 넷북 컴퓨터, 노트북 컴퓨터, 개인 휴대 정보 단말기, 서버, 이들의 조합 등에서 채용될 수 있다.
디바이스 플랫폼은, 임의의 적합한 디바이스 플랫폼일 수 있고, 일부 실시예에서는 전자 디바이스(500)로서 이용되는 전자 디바이스의 타입과 상관된다. 따라서, 예를 들어 전자 디바이스(500)가 스마트폰, 노트북 컴퓨터, 데스크탑 컴퓨터, 서버 등인 예의 경우, 디바이스 플랫폼(501)은, 각각, 스마트폰 플랫폼, 노트북 컴퓨터 플랫폼, 데스크탑 컴퓨터 플랫폼, 서버 플랫폼의 형태일 수 있다. 물론, 이러한 디바이스 플랫폼들은 단지 예의 목적을 위한 것이며, 임의의 적합한 디바이스 플랫폼이 디바이스 플랫폼(501)으로서 이용될 수 있다.
프로세서(502)는 임의의 적합한 범용 프로세서 또는 주문형 집적 회로일 수 있고, 하나 또는 복수의 프로세서 코어 상에서 하나 또는 복수의 쓰레드(thread)를 실행할 수 있다. 제한없이, 일부 실시예들에서, 프로세서(502)는 INTEL® 사., ADVANCED MICRO DEVICES®, ARM®, NVIDIA®, APPLE® 및 SAMSUNG®으로부터 상업적으로 입수 가능한 범용 프로세서와 같은, 그러나 이에 한정되지 않는 범용 프로세서이다. 도 5a는 전자 디바이스(500)가 단일 프로세서(502)를 포함하는 것으로 도시하고 있지만, 다중 프로세서가 사용될 수 있다.
저장 디바이스(503)는, 앞서 언급된 저장 디바이스 등의 그러나 이것으로 제한되지 않는, 임의의 적합한 저장 디바이스일 수 있다. 제한없이, 일부 실시예들에서, 저장 디바이스(503)는, SSD, 하드 디스크 드라이브, 테이프 메모리, 이들의 조합 등의 형태이다. 일부 실시예들에서, 저장 디바이스(503)는, 전자 디바이스(500)에서 이용되는 캐시 디바이스, 이 경우 SSD(504)의 입력 출력 성능보다 느린 입력 출력 성능을 나타낼 수 있다.
이제, 도 5a의 SSD(504) 및 전자 디바이스(500)의 다른 컴포넌트들의 추가 상세사항을 제공하는 도 5b를 참조한다. 도 5b에 도시된 바와 같이, SSD(504)는 예를 들어, 인터페이스(505)를 통해, (디바이스 플랫폼(501)의) 버스(508)와 통신할 수 있다. 이와 관련하여, 임의의 적합한 버스가 버스(508)로서 이용될 수 있으며, 임의의 적합한 인터페이스가 인터페이스(505)로서 이용될 수 있다. 제한없이, 한 실시예에서 버스(508)는 SATA(serial advanced technology attachment) 버스이고, 인터페이스(505)는 SATA 인터페이스이다. 도 5b에 더 도시된 바와 같이, SSD(504)는 캐시 제어기 모듈(CCM)(101), 데이터 압축 모듈(DCM)(103), CODEC(104), 버퍼(105), 및 메모리(106)를 포함할 수 있다. 예시의 목적을 위해, CCM(101), DCM(103), 및 CODEC(104)은, SSD(504)의 별개의 엘리먼트들로서 도시되어 있지만, 이러한 구성이 필수적인 것은 아니라는 것을 이해해야 한다.
사실상, 일부 실시예들에서, 이러한 엘리먼트들 중 하나 또는 그 조합은, SSD(504)의 SSD 제어기(미도시)에 통합되거나 또는 기타의 방식으로 포함될 수 있다.
동작에 있어서, 버스(508)는 (예를 들어, 프로세서(502)로부터의) 데이터를 SSD(504)에 운반할 수 있다. SSD(504)는, 예를 들어, 인터페이스(505)를 통해, 데이터를 수신할 수 있다. 그 다음, 수신된 데이터는 CCM(101)에 전달될 수 있다. 그 때, CCM(101)은, 데이터의 전부 또는 일부가 메모리(106)에 기입되어야 하는지를 결정하기 위해 하나 이상의 캐시 정책을 적용할 수 있다. 만일 그렇다면, CCM(101)은 앞서 논의된 바와 같이 데이터를 하나 또는 복수의 캐시 라인들로 나눌 수 있고, (선택사항으로서 태그로 마킹된) 캐시 라인들 중 하나 이상을 압축을 위해 DCM(103)에 전송할 수 있다. 앞서 논의된 바와 같이, DCM(103)은 데이터(입력 데이터)를 압축을 위해 CODEC(104)에 전송할 수 있다. CODEC(104)은 버퍼(105)에 저장되는 출력을 생성하기 위해 입력 데이터를 압축할 수 있다.
그 다음, CCM(101)은 압축된 출력의 크기 및/또는 입력 데이터에 기인하는 압축비를 결정할 수 있고, 압축된 출력이 메모리(106)에 기입되는지를 결정하기 위해 하나 이상의 캐싱 정책을 적용할 수 있다. 앞서 논의된 바와 같이, 결정은, 적어도 부분적으로, 압축된 출력의 크기 및/또는 입력 데이터에 기인하는 압축비에 기초하여 예측될 수 있다. 압축된 출력이 메모리(106)에 기입 될 때, CCM(101)은 압축된 출력의 저장을 위해 메모리(106) 내의 적어도 하나의 논리적 블록 주소 범위를 할당할 수 있다. 그 다음, CCM(101)은 SSD(504)의 디스크 제어기(미도시)에 기입 명령을 전송할 수 있고, 여기서, 기입 명령은 제어기로 하여금 버퍼(105)에 저장된 압축된 출력을 CCM(101)에 의해 할당된 메모리(106)의 논리적 블록 주소 범위(들)에 기입하게 한다. 대안적으로서, CCM(101)이 SSD(504)의 디스크 제어기와 일체형이거나 또는 디스크 제어기의 형태인 경우, CCM(101)은 버퍼(105) 내의 압축된 출력이 메모리(106)의 할당된 논리적 블록 주소 범위(들)에 기입되도록 할 수 있다. 마찬가지로, 압축된 출력이 메모리(106)에 기입되지 않는 경우에, CCM(101)은 폐기 명령을 발행하여, 예를 들어 압축된 출력이 메모리(106)에 기입되기 전에 압축된 출력을 버퍼(105)로부터 제거되게 할 수 있다.
본 개시내용의 또 다른 양태는 데이터 캐싱 방법에 관한 것이다. 이와 관련하여, 본 개시내용에 일치하는 예시적인 데이터 캐싱 방법에 따른, 캐시 제어기 모듈(101)과 같은 예시적인 캐시 제어기 디바이스의 동작의 흐름도인 도 3을 참조한다. 도시된 바와 같이, 방법(300)은 제1 데이터를 포함하는 제1 압축 명령을 전송하는 단계(310)를 포함할 수 있다. 제1 압축 명령은 310에서 제1 압축 명령에 응답하여 제1 압축 데이터를 생성하기 위해 제1 데이터를 압축하는 압축 엔진을 포함하는 디바이스로 전송될 수 있다. 일 실시예에서, 방법(300)을 수행하는 캐시 제어기는, 예를 들어, 제1 데이터(및/또는 제1 압축 데이터)에 액세스하는데 사용될 수 있는 제1 태그와 제1 데이터를 연관시키는 정보를 저장한다. 예를 들어, 제1 태그는 제1 압축 명령에 포함될 수 있다.
방법(300)은 320에서, 제1 압축 데이터의 크기를 결정하는 단계를 더 포함할 수 있다. 예를 들어, 압축 엔진은 제1 압축 데이터를 포함하는 총 비트 수, 바이트, 블록 또는 다른 데이터 세트를 명시하는 정보를 캐시 제어기에 직접적으로 또는 간접적으로 전달할 수 있다. 대안적으로 또는 추가로, 이러한 정보는 제1 데이터에 대한 제1 압축 데이터의 압축비를 명시할 수 있다.
일 실시예에서, 방법(300)은 330에서, 캐시 디바이스의 메모리의 제1 논리적 블록 주소 (LBA) 범위를 식별하는 단계를 더 포함한다. 제1 LBA 범위는 320에서 결정된 바와 같은, 제1 압축 데이터의 크기 및 캐시 제어기에 포함되거나 기타의 방식으로 액세스 가능한 참조 정보에 기초하여 식별될 수 있다. 참조 정보는 캐시 디바이스의 메모리의 복수의 LBA 범위(본원에서는 슬롯이라고도 함)를 명시하는 하나 이상의 테이블,리스트, 트리 또는 다른 데이터 구조를 포함 할 수 있으며, 이러한 LBA 범위는 각각 현재 각각의 캐시 라인을 저장하고 있으며 및/또는 각각의 캐시 라인을 저장하기 위해 이용 가능하다. 이러한 참조 정보는 복수의 LBA 범위 각각에 대해, LBA 범위의 크기, 주변 저장 디바이스의 대응하는 논리적 기본 주소, LBA 범위의 사용의 최신성 및/또는 이와 유사한 것을 지속적으로 추적할 수 있다. 이러한 정보의 일부 또는 전부는 예를 들어, 슬롯 크기, 슬롯 사용의 최신성 또는 이와 유사한 것으로 순서화될 수 있다.
제한이 아닌 예시로서, 참조 정보는 현재 유효한 압축된 캐시 라인을 저장하지 않는 각각의 압축된 캐시 라인 및/또는 하나 이상의 LBA 범위를 각기 현재 저장하는 하나 이상의 LBA 범위를 식별할 수 있다. 예를 들어, 참조 정보는 유효 데이터를 현재 저장하고 있는 캐시 메모리의 임의의 LBA 범위 이외의 하나 이상의 LBA 범위를 식별하는 정보를 포함할 수 있으며, 여기서 참조 정보는 그러한 하나 이상의 LBA 범위 각각에 대해 LBA 범위의 각각의 크기를 추가로 식별한다. 복수의 LBA 범위는 330에서 식별하는 동안, 각각의 상이한 크기의 일부 LBA 범위를 포함할 수 있다.
일 실시예에서, 참조 정보는 복수의 LBA 범위 각각에 대해, 그 LBA 범위의 사용의 최신성(recency of use)을 명시한다. 330에서의 제1 LBA 범위의 식별은, 제1 LBA 범위의 사용의 최신성에 기초할 수 있는데, -예를 들어, 각각이 제1 LBA 범위와 동일한 크기를 갖는 하나 이상의 다른 LBA 범위의 사용의 최신성과 비교될 수 있다. 330에서 제1 LBA 범위를 식별하는 것은 캐시 메모리로부터 제거하는 압축된 데이터를 식별하는 것을 포함할 수 있는데, -예를 들어, 복수의 LBA 범위 중 하나 이상의 다른 LBA 범위에 비해 상대적으로 낮은 제1 LBA 범위의 히트 속도를 식별하는 것을 포함한다.
330에서 제1 LBA 범위를 식별하는 것은 -예를 들어, 제1 압축 데이터를 저장하는데 충분한 최소 섹터 수와 동일한 각각의 전체 섹터 수를 각각이 갖는 서브세트의 LBA 범위에 기초하여, 복수의 LBA 범위의 서브세트를 식별하는 것을 포함할 수 있다. 대안적으로 또는 추가로, 복수의 LBA 범위의 서브세트는 이용 가능한 LBA 범위 중에서, 제1 압축 데이터를 저장하는데 충분한 최소 섹터 수에 가장 가까운(그리고 이보다 적지 않은) LBA 범위의 전체 섹터 수를 각각 갖는 서브세트의 LBA 범위에 기초하여 식별될 수 있다. 제1 LBA 범위는 -예를 들어, 그러한 선택이 서브세트의 최장 미사용(least recently used) LBA 범위인 제1 LBA 범위에 기초하는 경우, 복수의 LBA 범위의 해당 서브세트 중에서만 선택될 수 있다.
330에서 제1 LBA를 식별하는 것은 참조 정보에 의해 현재 식별되는 복수의 LBA 범위 중 하나의 LBA 범위를 분할하는 것을 포함할 수 있다. LBA 범위는 예를 들어, 방법(300) 이후에 유효 데이터를 저장할 수 없는 제1 LBA 범위 및 일부 다른 LBA 범위로 분할될 수 있다. 그러한 실시예에서, LBA 범위의 분할은 -예를 들어, 제1 LBA 범위가 제1 압축 데이터를 저장하기 위한 적어도 최소 섹터 수를 갖도록, 제1 압축된 데이터의 크기에 기초할 수 있다.
방법(300)은 340에서, 제1 LBA 범위가 제1 압축 데이터에 할당되었음을 표시하기 위해 참조 정보를 업데이트하는 것을 더 포함할 수 있다. 340에서의 업데이트는 제1 LBA 범위를 식별하는 정보를 포함하도록 명시된 복수의 LBA 범위를 업데이트하는 것을 포함할 수 있다. 대안적으로 또는 추가로, 업데이트는 제1 LBA 범위의 사용의 최신성을 나타내는 값을 생성 또는 업데이트하는 것을 포함할 수 있다.
일 실시예에서, 방법(300)은 350에서, 제1 압축 데이터가 제1 LBA 범위에 기입될 것이라는 것을 시그널링하는 것을 포함한다. 예를 들어, 350에서의 시그널링은 캐시 제어기가 캐시 메모리를 직접적으로 또는 간접적으로 동작시키는 캐시 메모리 또는 다른 디바이스에 기입 명령, 커밋(commit) 명령 및/또는 다른 메시지를 발행하는 것을 포함할 수 있다. 이러한 메시지는 제1 LBA 범위의 식별자를 포함할 수 있고, 일부 실시예들에서는 제1 데이터(및 제1 압축 데이터)를 참조하는 인덱스 또는 다른 값으로 인식되는 태그를 포함할 수 있다. 본원에서 논의된 바와 같이, 압축 엔진 또는 캐시 제어기에 결합된 다른 컴포넌트는 제1 압축 데이터의 크기가 캐시 제어기에 전달된 후에, 그리고, 적어도 캐시 제어기 엔진이 컴포넌트에 대해 해당 컴포넌트가 제1 압축된 데이터를 기입할 특정 캐시 LBA 범위를 식별할 때까지 제1 압축 데이터를 일시적으로 저장할 수 있다. 대안적으로, 제1 압축 데이터는 버퍼에 일시적으로 저장될 수 있으며, 제1 압축 데이터의 크기에 기초하여 캐시 LBA 범위를 결정한 후에, 캐시 제어기는 버퍼로부터 제1 압축 데이터를 판독하여 이를 캐시 LBA 범위에 기입한다.
방법(300)은 다른 데이터의 캐싱을 지원하는, 도 3에 도시된 것들에 다양하게 선행 및/또는 후속하는 다른 동작들(미도시)을 포함할 수 있다. 한정이 아닌 예시로서, 동작들(310 내지 350)은 제1 데이터 이외의 제2 데이터에 대해 반복될 수 있다. 그러한 제2 데이터의 압축은 예를 들어, 제1 압축 데이터의 크기와 상이한 제2 압축 데이터를 초래할 수 있다. 캐시 제어기는 -예를 들어, 압축 엔진으로부터- 제2 압축 데이터의 크기를 식별하는 정보를 수신할 수 있고, 응답하여, 캐시 메모리의 제2 LBA 범위를 식별할 수 있다. 제2 LBA 범위는 -예를 들어, 제1 LBA 범위와 제2 LBA 범위가 상이한 크기인 경우에 제2 압축 데이터의 크기 및 제2 LBA 범위의 크기에 기초하여 식별될 수 있다. 제2 LBA 범위의 식별에 기초하여, 방법(300)은 제2 LBA 범위가 제2 압축 데이터에 할당되었음을 표시하기 위해 참조 정보를 추가로 업데이트할 수 있다. 제2 압축 데이터는 제2 LBA 범위에 기입될 수 있는데, -예를 들어, 제1 LBA 범위는 제1 압축 데이터를 저장하고, 제2 LBA 범위는 제2 압축 데이터를 저장한다.
도 2b,도 2d 및 도 2e는 일 실시예에 따라 압축된 데이터의 캐싱 및/또는 다른 액세싱을 결정하기 위해 액세스될 수 있는 참조 정보의 일부 예를 도시한다. 이러한 참조 정보는 상이한 크기의 각각의 LBA 범위로의 압축된 데이터의 캐싱을 결정하는데 참조하기 위해(캐시 제어기 모듈(101)과 같은) 캐시 제어기에 포함되거나 기타의 방식으로 액세스할 수 있다. 그러한 참조 정보의 특정 구조 및 내용은 일 실시예에 따른 시나리오의 단지 예시일뿐이고, 다른 실시예를 제한하지 않을 것이다.
도 2b에 도시된 바와 같이, 참조 정보는 주변 저장 장치에 대한 캐시의 각각의 LBA 범위에 대한 주변 저장 장치(이 예에서는, HDD)의 LBA의 대응을 정의하거나 기타 방식으로 명시하는 LBA 매핑(210)을 포함할 수 있다. LBA 매핑(210)에서, 캐시 LBA 범위는 압축된 데이터를 저장하고 있는(및/또는 일부 실시예들에서, 저장에 이용 가능한) LBA 범위의 각각의 제1 LBA(컬럼에서 "캐시 LBA") 및 LBA 범위의 총 섹터 수(컬럼에서 "압축된 크기")로 각각 표시된다. 도 2b-도 2e에 나타낸 예시적인 시나리오에서, 압축되지 않은 캐시 라인의 크기는 4KB(8 LBA, 각각의 LBA는 512 바이트임)이다.
도 2c는 LBA 매핑(210)에 도시된 예시적인 참조 정보에 의해 기술된 캐시 메모리(220)의 엘리먼트를 도시한다. 예시적인 캐시 메모리(220)는 LBA 매핑(210)에서 명시된 캐시 메모리(220)의 LBA 범위가 동시에 LBA 매핑(210)에서 명시된 각각의 HDD LBA 범위 Lx에 각각 대응하는 각각의 압축된 캐시 라인 데이터 DLx를 저장하는 백개의 LBA를 포함한다. 캐시 제어기는 다양하게 캐시 메모리(220)의 LBA 범위로부터 압축된 데이터를 제거하고, 캐시 메모리(220)의 LBA 범위의 압축된 데이터를 판독하고 및/또는 캐시 메모리(220)의 LBA 범위에 압축된 데이터를 기입하는 동작을 행하기 때문에, LBA 매핑(210) 및/또는 다른 그러한 참조 정보는 그러한 액세스를 반영하도록 업데이트될 수 있다. 이것은 더 많은 또는 더 적은 LBA 범위를 식별하기 위해 LBA 매핑(210)을 업데이트하는 것, 캐시 LBA 범위의 크기에 대한 변경 및/또는 HDD 범위 대한 캐시 LBA 범위의 대응관계의 변경을 포함할 수 있다.
참조 정보는 하나 이상의 LBA 범위 각각에 대해 LBA 범위의 각각의 사용의 최신성을 추가적으로 또는 대안적으로 표시할 수 있다. 그러한 최근 정보의 일례는 도 2d 의 예시적인 LRU(least recently used) 리스트(230)에 의해 표현된다. LRU 리스트(230)는 그들 각각의 크기에 따라 슬롯의 리스트(LBA 범위)를 정렬할 수 있고, 일부 실시예들에서는 동일한 크기의 슬롯 간의 상대적인 사용의 최신성에 따라 추가로 정렬할 수 있다. 일 실시예에서, 캐시 제어기는 캐싱될 압축된 데이터의 크기를 식별할 수 있고, 그 크기에 기초하여, 그 크기에 대응하는 LRU 리스트(230) 내의 리스트에 액세스할 수 있다. 선택된 리스트로부터, 바람직한 슬롯이 압축된 데이터를 캐싱하기 위한 슬롯으로서 선택될 수 있다. 사용의 최신성은 주어진 슬롯이 기입되고, 갱신된 것으로부터 판독되고 및/또는 기타의 방식으로 액세스된 이후의 지속 시간을 지칭할 수 있다.
일 실시예에서, 참조 정보는 압축된 데이터를 자유롭게 저장할 수 있는 하나 이상의 LBA 범위를 추가적으로 또는 대안적으로 명시할 수 있다. 그러한 참조 정보의 일례는 도 2e의 예시적인 빈 슬롯 리스트(240)에 의해 표현된다. 빈 슬롯 리스트(240)는 -예를 들어, 유효 데이터를 현재 저장하고 있지 않은 빈 슬롯의 리스트를 그들 각각의 크기에 따라 정렬할 수 있다. 일 실시예에서, 캐시 제어기는 캐싱될 압축된 데이터의 크기를 식별할 수 있고, 그 크기에 기초하여, 그 크기에 대응하는 빈 슬롯 리스트(240)에 나열된 슬롯을 결정할 수 있다. 그 크기의 빈 슬롯들로부터, 슬롯은 압축된 데이터를 캐싱하기 위한 슬롯으로서 선택될 수 있다.
SSD(또는 캐시로서 작용하는 다른 디바이스) 상의 깨끗한 캐시 라인을 제거하는 경우, 일 실시예에서, 캐시 라인은 단순히 트리밍된 것으로 마킹될 수 있으며, LBA 매핑(210) 및 LRU 리스트(230)는 제거된 캐시 라인에 대한 참조를 제거하도록 업데이트된다. 트리밍된 공간은 빈 슬롯 리스트(240)에 추가될 수 있다. 지저분한(dirty) 캐시 라인을 제거하는 경우, 압축된 데이터는 캐시로부터(판독-히트에서와 같이) 판독되고, HDD(또는 다른 주변 저장 장치)에 기입되며, 이어서 깨끗한 제거 처리가 이용될 수 있다. 판독 및 기입 미스시, 캐시 제어기는 -예를 들어 적어도 부분적으로 종래의 캐싱 결정 기준에 기초하여- 캐시에 데이터를 삽입할지를 결정할 수 있다. 데이터 삽입을 선택하면, 본원에서 논의된 삽입 처리가 이용될 수 있다. 판독-히트시, 대응하는 캐시 LBA 범위는 압축된 크기와 함께 LBA 매핑(210)에서 검색될 수 있고, 대응하는 판독 요청이 데이터에 대한 캐시에 발행될 수 있다. 그에 따라 LRU 리스트(230) 중 대응하는 하나가 업데이트될 수 있다. 기입-히트시, 캐시는 캐시의 데이터를 업데이트할 필요가 있을 수 있다. 새로운 데이터가 이전 데이터와 다르게 압축될 수 있기 때문에, 캐시는 항상 데이터를 같은 자리에 단순히 업데이트할 수 있는 것은 아니다. 따라서, 캐시는 예를 들어, 본원에서 논의된 바와 같이, 새로운 데이터를 압축하고 압축된 크기를 결정하도록 동작될 수 있다. 새로운 압축된 크기 및 이전의 압축된 크기가 (LBA 매핑(210)에서 룩업을 사용하여 결정된) 동일한 최소 섹터 수를 필요로 한다면, 데이터는 같은 자리에 업데이트될 수 있다. 그렇지 않으면, 캐시는 이전 데이터에 대해 제거 절차를 사용해야 하고, 새로운 압축된 데이터 크기에 기초한 새로운 삽입 절차가 뒤이어진다.
이제, 본 개시내용에 일치하는 예시적인 데이터 압축 방법(400)에 따른 데이터 압축 모듈의 예시적인 동작의 흐름도인 도 4를 참조한다. 방법(400)은 예를 들어, 캐시 디바이스(102)의 일부 또는 모든 특징을 갖는 로직을 사용하여 수행될 수 있다. 그러한 로직은 방법(300)을 수행하는 캐시 제어기를 사용하여 동작할 수 있다.
도시된 바와 같이, 방법(400)은 410에서, 제1 압축 데이터를 생성하기 위해 제1 데이터를 압축하는 것을 포함할 수 있으며, 제1 데이터는 캐시 제어기로부터 데이터 압축 모듈에 의해 수신된다. 일 실시예에서, 방법(400)은 420에서, 제1 압축 데이터의 크기를 표시하는 정보를 캐시 제어기에 전송하는 것을 포함한다. 420에서 전송된 정보는 410에서 수행된 압축에 기초하여 결정된 압축 인자 및/또는 제1 압축 데이터의 크기를 명시하는 값을 포함할 수 있다. 일 실시예에서, 캐시 제어기는 제1 압축 데이터의 크기 및 제1 LBA 범위의 크기에 기초하여 캐시 메모리의 제1 LBA 범위를 식별한다. 제1 LBA 범위는 예를 들어, 330에서 식별된 제1 LBA 범위일 수 있다. 방법(400)은 430에서, 캐시 제어기가 제1 압축 데이터의 크기를 표시하는 정보를 수신하는 것에 기초하여 제1 LBA 범위에 제1 압축 데이터를 기입하는 것을 더 포함할 수 있다. 예를 들어, 캐시 제어기는 방법(400)을 수행하는 디바이스에 제1 압축 데이터의 기입을 위한 목적지로서 제1 LBA를 식별할 수 있다.
방법(400)은 440에서, 제2 압축 데이터를 생성하기 위해 제2 데이터를 압축하는 것을 포함할 수 있으며, 제2 데이터는 캐시 제어기로부터 데이터 압축 모듈에 의해 수신된다. 일 실시예에서, 방법(400)은 450에서, 제2 압축 데이터의 크기를 표시하는 정보를 캐시 제어기에 전송하는 것을 포함한다. 450에서 전송된 정보는 440에서 수행된 압축에 기초하여 결정된 압축 인자 및/또는 제2 압축 데이터의 크기를 명시하는 값을 포함할 수 있다. 일 실시예에서, 캐시 제어기는 제2 압축 데이터의 크기 및 제2 LBA 범위의 크기에 기초하여 캐시 메모리의 제2 LBA 범위를 식별한다. 방법(400)은 460에서, 캐시 제어기가 제2 압축 데이터의 크기를 표시하는 정보를 수신하는 것에 기초하여 제2 LBA 범위에 제2 압축 데이터를 기입하는 것을 더 포함할 수 있다. 예를 들어, 캐시 제어기는 방법(400)을 수행하는 디바이스에 제1 압축 데이터의 기입을 위한 목적지로서 제2 LBA를 식별할 수 있다. 일 실시예에서, -예를 들어, 제1 LBA 및 제2 LBA가 각각 상이한 크기를 가지고 제1 압축 데이터 및 제2 압축 데이터가 각각 상이한 크기를 갖는 경우, 제1 LBA는 제1 압축 데이터를 저장하고, 제2 LBA는 제2 압축 데이터를 저장한다.
일 구현에서, 디바이스는 제1 데이터를 포함하는 제1 압축 명령을 압축 엔진에 전송하도록 구성된 회로를 포함하는 캐시 제어기 모듈을 포함하고, 제1 압축 명령에 응답하여, 압축 엔진은 제1 압축 데이터를 생성하기 위해 제1 데이터를 압축하고, 제1 압축 데이터의 크기를 결정하고, 캐시 디바이스의 메모리의 제1 논리적 블록 주소(LBA) 범위를 식별하고, 제1 LBA 범위는 메모리의 복수의 LBA 범위를 명시하는 참조 정보 및 제1 압축 데이터의 크기에 기초하여 식별되고, 복수의 LBA 범위는 서로 상이한 크기의 LBA 범위를 포함한다. 제1 LBA 범위의 식별에 기초하여, 캐시 제어기 모듈은 또한 제1 LBA 범위가 제1 압축 데이터에 할당된다는 것을 표시하기 위해 참조 정보를 업데이트하고, 제1 압축 데이터가 제1 LBA에 기입될 것이라는 것을 시그널링한다.
일 실시예에서, 캐시 제어기는 또한 제1 압축 명령에 기초하여 생성된 임의의 압축 데이터 이외의 제2 압축 데이터의 크기를 결정하고, 제2 압축 데이터의 크기는 제1 압축 데이터의 크기와 다르며, 캐시 디바이스의 메모리의 제2 LBA 범위를 식별하고, 제2 LBA 범위는 제2 압축 데이터의 크기 및 참조 정보에 기초하여 식별된다. 제2 LBA 범위의 식별에 기초하여, 캐시 제어기 모듈은 제2 LBA 범위가 제2 압축 데이터에 할당된다는 것을 표시하기 위해 참조 정보를 업데이트하고, 제2 압축 데이터가 제2 LBA 범위에 기입될 것이라는 것을 시그널링하고, 제1 LBA 범위는 제1 압축 데이터를 저장하고, 제2 LBA 범위는 제2 압축 데이터를 저장한다.
또 다른 실시예에서, 캐시 제어기 모듈은 또한 제1 데이터를 제1 태그와 연관시켜서 제1 압축 명령시 제1 태그를 전송하도록 구성된다. 또 다른 실시예에서, 제1 압축 데이터가 제1 LBA 범위에 기입될 것이라는 것을 시그널링하는 캐시 제어기 모듈은 태그 및 제1 LBA 범위를 포함하는 기입 명령을 캐시 디바이스에 발행하는 캐시 제어기 모듈을 포함한다. 또 다른 실시예에서, 제1 LBA 범위를 식별하는 캐시 제어기 모듈은 제2 압축 데이터를 식별하여 메모리로부터 제거하는 캐시 제어기 모듈을 포함한다. 또 다른 실시예에서, 캐시 디바이스 이외의 저장 디바이스는 제1 LBA 범위가 제1 압축 데이터를 저장하는 동안 제1 데이터의 버전을 저장하고, 복수의 LBA 범위 각각에 대해, 참조 정보는 LBA 범위의 크기, 및 LBA 범위에 대응하는 저장 디바이스의 각각의 상이한 논리적 기본 주소를 명시한다.
또 다른 실시예에서, 참조 정보는 유효 데이터를 현재 저장하고 있는 메모리의 임의의 LBA 범위 이외의 하나 이상의 LBA 범위를 식별하고, 참조 정보는 또한 하나 이상의 LBA 범위 각각에 대해 LBA 범위의 각각의 크기를 식별한다. 또 다른 실시예에서, 복수의 LBA 범위 각각에 대해, 참조 정보는 LBA 범위의 사용의 최신성을 명시하고, 캐시 제어기 모듈은 제1 LBA 범위의 사용의 최신성에 기초하여 제1 LBA 범위를 식별한다. 또 다른 실시예에서, 제1 LBA 범위를 식별하는 캐시 제어기 모듈은 제1 압축 데이터를 저장하기에 충분한 최소 섹터 수와 동일한 LBA 범위의 총 섹터 수를 각각 갖는 서브세트의 LBA 범위에 기초하여 복수의 LBA 범위의 서브세트를 식별하는 캐시 제어기 모듈, 및 해당 서브세트 중에서만 제1 LBA 범위를 선택하는 캐시 제어기 모듈을 포함한다. 또 다른 실시예에서, 캐시 제어기 모듈은 서브셋의 최장 미사용 LBA 범위인 제1 LBA 범위에 기초하여 서브세트 중에서만 제1 LBA 범위를 선택한다. 또 다른 실시예에서, 제1 LBA 범위를 식별하는 캐시 제어기 모듈은 제1 압축 데이터를 저장하기에 충분한 최소 섹터 수에 가장 가까운 LBA 범위의 총 섹터 수를 각각 갖는 서브세트의 LBA 범위에 기초하여 복수의 LBA 범위의 서브세트를 식별하는 캐시 제어기 모듈, 및 서브세트 중에서만 제1 LBA 범위를 선택하는 캐시 제어기 모듈을 포함한다.
또 다른 구현에서, 캐시 제어기에서의 방법은 제1 데이터를 포함하는 제1 압축 명령을 압축 엔진에 전송하는 단계 -제1 압축 명령에 응답하여, 압축 엔진은 제1 데이터를 압축하여 제1 압축 데이터를 생성함- , 제1 압축 데이터의 크기를 결정하는 단계, 캐시 디바이스의 메모리의 제1 논리적 블록 어드레스(LBA) 범위를 식별하는 단계 -제1 LBA 범위는 제1 압축 데이터의 크기 및 메모리의 복수의 LBA 범위를 명시하는 참조 정보에 기초하여 식별되고, 복수의 LBA 범위는 각각의 상이한 크기의 LBA 범위를 포함함- , 및 제1 LBA 범위의 식별에 기초하여, 제1 LBA 범위가 제1 압축 데이터에 할당되었음을 표시하기 위해 참조 정보를 업데이트하고, 제1 압축 데이터가 제1 LBA 범위에 기입될 것이라는 것을 시그널링하는 단계를 포함한다.
일 실시예에서, 본 방법은 제1 압축 명령에 기초하여 생성된 임의의 압축된 데이터 이외의 제2 압축 데이터의 크기를 결정하는 단계 -제2 압축 데이터의 크기는 제1 압축 데이터의 크기와 상이함- , 캐시 디바이스의 메모리의 제2 LBA 범위를 식별하는 단계 -제2 LBA 범위는 제2 압축 데이터의 크기 및 참조 정보에 기초하여 식별됨- , 제2 LBA 범위의 식별에 기초하여, 제2 LBA 범위가 제2 압축 데이터에 할당되었음을 표시하기 위해 참조 정보를 업데이트하고, 제2 압축 데이터가 제2 LBA 범위에 기입될 것이라는 것을 시그널링하는 단계를 더 포함하고, 제1 LBA 범위는 제1 압축 데이터를 저장하고, 제2 LBA 범위는 제2 압축 데이터를 저장한다.
또 다른 실시 예에서, 본 방법은 또한 제1 데이터를 제1 태그와 연관시켜서 제1 압축 명령에 제1 태그를 포함시키는 단계를 더 포함한다. 또 다른 실시예에서, 제1 압축 데이터가 제1 LBA 범위에 기입될 것이라는 것을 시그널링하는 단계는 태그 및 제1 LBA 범위를 포함하는 기입 명령을 발행하는 단계를 포함한다. 또 다른 실시예에서, 제1 LBA 범위를 식별하는 단계는 제2 압축 데이터를 식별하여 메모리로부터 제거시키는 단계를 포함한다. 또 다른 실시예에서, 캐시 디바이스 이외의 저장 디바이스는 제1 LBA 범위가 제1 압축 데이터를 저장하는 동안 제1 데이터의 버전을 저장하고, 복수의 LBA 범위 각각에 대해, 참조 정보는 LBA 범위의 크기 및 LBA 범위에 대응하는 저장 디바이스의 각각의 상이한 논리적 기본 주소를 명시한다.
또 다른 실시예에서, 참조 정보는 유효 데이터를 현재 저장하고 있는 메모리의 임의의 LBA 범위 이외의 하나 이상의 LBA 범위를 식별하고, 참조 정보는 또한 하나 이상의 LBA 범위 각각에 대해 LBA 범위의 각각의 크기를 식별한다. 또 다른 실시예에서, 복수의 LBA 범위 각각에 대해, 참조 정보는 LBA 범위의 사용의 최신성을 명시하고, 제1 LBA 범위를 식별하는 단계는 제1 LBA 범위의 사용의 최신성에 기초한다. 또 다른 실시예에서, 제1 LBA 범위를 식별하는 단계는 제1 압축 데이터를 저장하기에 충분한 최소 섹터 수와 동일한 LBA 범위의 총 섹터 수를 각각 갖는 서브세트의 LBA 범위에 기초하여 복수의 LBA 범위의 서브세트를 식별하는 단계, 및 서브세트 중에서만 제1 LBA 범위를 선택하는 단계를 포함한다. 또 다른 실시예에서, 서브세트 중에서만 제1 LBA 범위를 선택하는 단계는 서브셋의 최장 미사용 LBA 범위인 제1 LBA 범위에 기초한다. 또 다른 실시예에서, 제1 LBA 범위를 식별하는 단계는 제1 압축 데이터를 저장하기에 충분한 최소 섹터 수에 가장 가까운 LBA 범위의 총 섹터 수를 각각 갖는 서브세트의 LBA 범위에 기초하여 복수의 LBA 범위의 서브세트를 식별하는 단계, 및 서브세트 중에서만 제1 LBA 범위를 선택하는 단계를 포함한다.
또 다른 구현에서, 컴퓨터 판독 가능 저장 매체에는 하나 이상의 처리 유닛에 의해 실행될 때, 캐시 제어기로 하여금 방법을 수행하게 하는 명령어들이 저장되며, 상기 방법은, 제1 데이터를 포함하는 제1 압축 명령을 압축 엔진에 전송하는 단계 -제1 압축 명령에 응답하여, 압축 엔진은 상기 제1 데이터를 압축하여 제1 압축 데이터를 생성함- , 제1 압축 데이터의 크기를 결정하는 단계, 캐시 디바이스의 메모리의 제1 논리적 블록 어드레스(LBA) 범위를 식별하는 단계 -제1 LBA 범위는 상기 제1 압축 데이터의 크기 및 메모리의 복수의 LBA 범위를 명시하는 참조 정보에 기초하여 식별되고, 복수의 LBA 범위는 각각의 상이한 크기의 LBA 범위를 포함함- 를 포함한다.
본 방법은 제1 LBA 범위의 식별에 기초하여, 제1 LBA 범위가 제1 압축 데이터에 할당되었음을 표시하기 위해 참조 정보를 업데이트하고, 제1 압축 데이터가 제1 LBA 범위에 기입될 것이라는 것을 시그널링하는 단계를 더 포함한다.
일 실시예에서, 본 방법은 제1 압축 명령에 기초하여 생성된 임의의 압축 데이터 이외의 제2 압축 데이터의 크기를 결정하는 단계 -제2 압축 데이터의 크기는 제1 압축 데이터의 크기와 상이함- , 및 캐시 디바이스의 메모리의 제2 LBA 범위를 식별하는 단계 -제2 LBA 범위는 제2 압축 데이터의 크기 및 참조 정보에 기초하여 식별됨- 를 더 포함한다. 본 방법은 제2 LBA 범위의 식별에 기초하여, 제2 LBA 범위가 제2 압축 데이터에 할당된다는 것을 표시하기 위해 참조 정보를 업데이트하는 단계, 및 제2 압축 데이터가 제2 LBA 범위에 기입될 것이라는 것을 시그널링하는 단계를 더 포함하고, 제1 LBA 범위는 제1 압축 데이터를 저장하고, 제2 LBA 범위는 제2 압축 데이터를 저장한다.
또 다른 실시예에서, 본 방법은 제1 데이터를 제1 태그와 연관시켜서 제1 압축 명령시 제1 태그를 포함시키는 단계를 더 포함된다. 또 다른 실시예에서, 제1 압축 데이터가 제1 LBA 범위에 기입될 것이라는 것을 시그널링하는 단계는 태그 및 제1 LBA 범위를 포함하는 기입 명령을 발행하는 단계를 포함한다. 또 다른 실시예에서, 제1 LBA 범위를 식별하는 단계는 제2 압축 데이터를 식별하여 메모리로부터 제거시키는 단계를 포함한다. 또 다른 실시예에서, 캐시 디바이스 이외의 저장 디바이스는 제1 LBA 범위가 제1 압축 데이터를 저장하는 동안 제1 데이터의 버전을 저장하고, 복수의 LBA 범위 각각에 대해, 참조 정보는 LBA 범위의 크기 및 LBA 범위에 대응하는 저장 디바이스의 각각의 상이한 논리적 기본 주소를 명시한다.
또 다른 실시예에서, 참조 정보는 유효 데이터를 현재 저장하고 있는 메모리의 임의의 LBA 범위 이외의 하나 이상의 LBA 범위를 식별하고, 참조 정보는 또한 하나 이상의 LBA 범위 각각에 대해 LBA 범위의 각각의 크기를 식별한다. 또 다른 실시예에서, 복수의 LBA 범위 각각에 대해, 참조 정보는 LBA 범위의 사용의 최신성을 명시하고, 제1 LBA 범위를 식별하는 단계는 제1 LBA 범위의 사용의 최신성에 기초한다. 또 다른 실시예에서, 제1 LBA 범위를 식별하는 단계는 제1 압축 데이터를 저장하기에 충분한 최소 섹터 수와 동일한 LBA 범위의 총 섹터 수를 각각 갖는 서브세트의 LBA 범위에 기초하여 복수의 LBA 범위의 서브세트를 식별하는 단계, 및 서브세트 중에서만 제1 LBA 범위를 선택하는 단계를 포함한다. 또 다른 실시예에서, 서브세트 중에서만 제1 LBA 범위를 선택하는 단계는 서브셋의 최장 미사용 LBA 범위인 제1 LBA 범위에 기초한다. 또 다른 실시예에서, 제1 LBA 범위를 식별하는 단계는 제1 압축 데이터를 저장하기에 충분한 최소 섹터 수에 가장 가까운 LBA 범위의 총 섹터 수를 각각 갖는 서브세트의 LBA 범위에 기초하여 복수의 LBA 범위의 서브세트를 식별하는 단계, 및 서브세트 중에서만 제1 LBA 범위를 선택하는 단계를 포함한다.
또 다른 구현에서, 시스템은 메모리 및 압축을 포함하는 캐시 디바이스, 캐시 디바이스에 결합된 캐시 제어기를 포함하고, 캐시 제어기는, 제1 데이터를 포함하는 제1 압축 명령을 압축 엔진에 전송하고 -제1 압축 명령에 응답하여, 압축 엔진은 제1 데이터를 압축하여 제1 압축 데이터를 생성함- , 제1 압축 데이터의 크기를 결정하고, 캐시 디바이스의 메모리의 제1 논리적 블록 어드레스(LBA) 범위를 식별하도록 구성된 회로를 포함하고, 제1 LBA 범위는 제1 압축 데이터의 크기 및 메모리의 복수의 LBA 범위를 명시하는 참조 정보에 기초하여 식별되고, 복수의 LBA 범위는 각각의 상이한 크기의 LBA 범위를 포함한다. 제1 LBA 범위의 식별에 기초하여, 캐시 제어기는 또한 제1 LBA 범위가 제1 압축 데이터에 할당된다는 것을 표시하기 위해 참조 정보를 업데이트하고, 제1 압축 데이터가 제1 LBA에 기입될 것이라는 것을 시그널링한다.
일 실시예에서, 캐시 제어기는 제1 압축 명령에 기초하여 생성된 임의의 압축된 데이터 이외의 제2 압축 데이터의 크기를 결정하고 -제2 압축 데이터의 크기는 제1 압축 데이터의 크기와 상이함- , 캐시 디바이스의 메모리의 제2 LBA 범위를 식별하고 -제2 LBA 범위는 제2 압축 데이터의 크기 및 참조 정보에 기초하여 식별됨- , 제2 LBA 범위의 식별에 기초하여, 제2 LBA 범위가 제2 압축 데이터에 할당되었음을 표시하기 위해 참조 정보를 업데이트하고, 제2 압축 데이터가 제2 LBA 범위에 기입될 것이라는 것을 시그널링하기 위한 것이며, 제1 LBA 범위는 제1 압축 데이터를 저장하고, 제2 LBA 범위는 제2 압축 데이터를 저장한다.
또 다른 실시예에서, 캐시 제어기는 또한 제1 데이터를 제1 태그와 연관시켜서 제1 압축 명령시 제1 태그를 전송하도록 구성된다. 또 다른 실시예에서, 제1 압축 데이터가 제1 LBA 범위에 기입될 것이라는 것을 시그널링하는 캐시 제어기는 태그 및 제1 LBA 범위를 포함하는 기입 명령을 캐시 디바이스에 발행하는 캐시 제어기를 포함한다. 또 다른 실시예에서, 제1 LBA 범위를 식별하는 캐시 제어기는 제2 압축 데이터를 식별하여 메모리로부터 제거하는 캐시 제어기를 포함한다. 또 다른 실시예에서, 캐시 디바이스 이외의 저장 디바이스는 제1 LBA 범위가 제1 압축 데이터를 저장하는 동안 제1 데이터의 버전을 저장하고, 복수의 LBA 범위 각각에 대해, 참조 정보는 LBA 범위의 크기 및 LBA 범위에 대응하는 저장 디바이스의 각각의 상이한 논리적 기본 주소를 명시한다. 또 다른 실시예에서, 참조 정보는 유효 데이터를 현재 저장하고 있는 메모리의 임의의 LBA 범위 이외의 하나 이상의 LBA 범위를 식별하고, 참조 정보는 또한 하나 이상의 LBA 범위 각각에 대해 LBA 범위의 각각의 크기를 식별한다.
또 다른 실시예에서, 복수의 LBA 범위 각각에 대해, 참조 정보는 LBA 범위의 사용의 최신성을 명시하고, 캐시 제어기는 제1 LBA 범위의 사용의 최신성에 기초하여 제1 LBA 범위를 식별한다. 또 다른 실시예에서, 제1 LBA 범위를 식별하는 캐시 제어기는 제1 압축 데이터를 저장하기에 충분한 최소 섹터 수와 동일한 LBA 범위의 총 섹터 수를 각각 갖는 서브세트의 LBA 범위에 기초하여 복수의 LBA 범위의 서브세트를 식별하는 캐시 제어기, 및 서브세트 중에서만 제1 LBA 범위를 선택하는 캐시 제어기를 포함한다. 또 다른 실시예에서, 캐시 제어기는 서브셋의 최장 미사용 LBA 범위인 제1 LBA 범위에 기초하여 서브세트 중에서만 제1 LBA 범위를 선택한다. 또 다른 실시예에서, 제1 LBA 범위를 식별하는 캐시 제어기는 제1 압축 데이터를 저장하기에 충분한 최소 섹터 수에 가장 가까운 LBA 범위의 총 섹터 수를 각각 갖는 서브세트의 LBA 범위에 기초하여 복수의 LBA 범위의 서브세트를 식별하는 캐시 제어기, 및 서브세트 중에서만 제1 LBA 범위를 선택하는 캐시 제어기를 포함한다.
또 다른 구현에서, 캐시 메모리 디바이스는 제1 데이터를 압축하여 제1 압축 데이터를 생성하고 -제1 데이터는 캐시 제어기로부터 데이터 압축 모듈에 의해 수신됨- , 제1 압축 데이터의 크기를 표시하는 정보를 캐시 제어기에 전송하고 -캐시 제어기는 제1 압축 데이터의 크기 및 제1 LBA 범위의 크기에 기초하여 캐시 디바이스의 메모리의 제1 논리적 블록 주소(LBA) 범위를 식별함- , 캐시 제어기가 제1 압축 데이터의 크기를 표시하는 정보를 수신하는 것에 기초하여 제1 LBA 범위에 제1 압축 데이터를 기입하며, 제2 데이터를 압축하여 제2 압축 데이터를 생성하도록 구성된 회로를 포함하고, 제2 데이터는 캐시 제어기로부터 수신된다. 데이터 압축 모듈은 또한 제2 압축 데이터의 크기를 나타내는 정보를 캐시 제어기에 전송하고 -캐시 제어기는 제2 압축 데이터의 크기 및 제2 LBA 범위의 크기에 기초하여 캐시 디바이스의 메모리의 제2 LBA 범위를 식별하고, 제2 LBA 범위의 크기는 제1 LBA 범위의 크기와 상이함- , 캐시 제어기가 제2 압축 데이터의 크기를 표시하는 정보를 수신하는 것에 기초하여 제2 LBA 범위에 제2 압축 데이터를 기입한다.
일 실시예에서, 캐시 제어기는 메모리의 복수의 LBA 범위를 명시하는 참조 정보에 기초하여 제1 LBA 범위를 식별하고, 복수의 LBA 범위는 각각의 상이한 크기의 LBA 범위를 포함한다. 또 다른 실시예에서, 캐시 디바이스 이외의 저장 디바이스는 제1 LBA 범위가 제1 압축 데이터를 저장하는 동안 제1 데이터의 버전을 저장하고, 복수의 LBA 범위 각각에 대해, 참조 정보는 LBA 범위의 크기 및 LBA 범위에 대응하는 저장 디바이스의 각각의 상이한 논리적 기본 주소를 명시한다. 일 실시예에서, 참조 정보는 유효 데이터를 현재 저장하고 있는 메모리의 임의의 LBA 범위 이외의 하나 이상의 LBA 범위를 식별하고, 참조 정보는 또한 하나 이상의 LBA 범위 각각에 대해 LBA 범위의 각각의 크기를 식별한다. 일 실시예에서, 복수의 LBA 범위 각각에 대해, 참조 정보는 LBA 범위의 사용의 최신성을 명시하고, 캐시 제어기 모듈은 제1 LBA 범위의 사용의 최신성에 기초하여 제1 LBA 범위를 식별한다.
또 다른 구현에서, 캐시 메모리 디바이스에서의 방법은 제1 데이터를 압축하여 제1 압축 데이터를 생성하는 단계 -제1 데이터는 캐시 제어기로부터 데이터 압축 모듈에 의해 수신됨- , 제1 압축 데이터의 크기를 표시하는 정보를 캐시 제어기에 전송하는 단계 -캐시 제어기는 제1 압축 데이터의 크기 및 제1 LBA 범위의 크기에 기초하여 캐시 디바이스의 메모리의 제1 논리적 블록 주소(LBA) 범위를 식별함- , 캐시 제어기가 제1 압축 데이터의 크기를 표시하는 정보를 수신하는 것에 기초하여 제1 LBA 범위에 제1 압축 데이터를 기입하는 단계를 포함한다. 본 방법은 제2 데이터를 압축하여 제2 압축 데이터를 생성하는 단계 -제2 데이터는 캐시 제어기로부터 수신됨- , 제2 압축 데이터의 크기를 표시하는 정보를 캐시 제어기에 전송하는 단계 -캐시 제어기는 제2 압축 데이터의 크기 및 제2 LBA 범위의 크기에 기초하여 캐시 디바이스의 메모리의 제2 LBA 범위를 식별하고, 제2 LBA 범위의 크기는 제1 LBA 범위의 크기와 상이함- , 캐시 제어기가 제2 압축 데이터의 크기를 표시하는 정보를 수신하는 것에 기초하여 제2 LBA 범위에 제2 압축 데이터를 기입하는 단계를 더 포함한다.
일 실시예에서, 캐시 제어기는 메모리의 복수의 LBA 범위를 명시하는 참조 정보에 기초하여 제1 LBA 범위를 식별하고, 복수의 LBA 범위는 각각의 상이한 크기의 LBA 범위를 포함한다. 또 다른 실시예에서, 캐시 디바이스 이외의 저장 디바이스는 제1 LBA 범위가 제1 압축 데이터를 저장하는 동안 제1 데이터의 버전을 저장하고, 복수의 LBA 범위 각각에 대해, 참조 정보는 LBA 범위의 크기 및 LBA 범위에 대응하는 저장 디바이스의 각각의 상이한 논리적 기본 주소를 명시한다.
또 다른 실시예에서, 참조 정보는 유효 데이터를 현재 저장하고 있는 메모리의 임의의 LBA 범위 이외의 하나 이상의 LBA 범위를 식별하고, 참조 정보는 또한 하나 이상의 LBA 범위 각각에 대해 LBA 범위의 각각의 크기를 식별한다. 또 다른 실시예에서, 복수의 LBA 범위 각각에 대해, 참조 정보는 LBA 범위의 사용의 최신성을 명시하고, 캐시 제어기 모듈은 제1 LBA 범위의 사용의 최신성에 기초하여 제1 LBA 범위를 식별한다.

Claims (25)

  1. 호스트와 통신 가능하게 커플링되는 SSD 장치로서,
    상기 SSD 장치는,
    상기 호스트로부터 수신된 제 1 데이터를 포함하는 제 1 압축 명령을 압축 엔진에 전송하도록 구성된 SSD 컨트롤러;
    상기 제 1 압축 명령에 응답하여 상기 제 1 데이터를 압축하여 제 1 압축 데이터를 생성하고, 상기 제 1 압축 데이터의 크기를 포함하는 리턴 메시지를 상기 SSD 컨트롤러에 전송하도록 구성된 압축 엔진; 및
    하나 이상의 논리적 블록 어드레스 (LBA) 에 상기 제 1 압축 데이터를 저장하도록 구성된 메모리를 포함하고,
    상기 SSD 컨트롤러는:
    상기 리턴 메시지에 기초하여 상기 제 1 압축 데이터의 크기를 결정하고;
    상기 메모리의 제 1 LBA 범위를 식별하는 것으로, 상기 제 1 LBA 범위는 상기 제 1 압축 데이터의 크기에 기초하여, 그리고 추가로 상기 메모리의 복수의 LBA 범위를 명시하는 참조 정보에 기초하여 식별되고, 상기 복수의 LBA 범위는 각각의 상이한 크기의 LBA 범위 및 복수의 리스트를 포함하고,
    상기 복수의 리스트 각각은:
    상이한 각각의 슬롯 크기에 대응하고,
    상기 메모리의 하나 이상의 LBA 범위 각각을 식별하는 것으로서, 상기 리스트 내의 각각의 LBA 범위가 동일한 슬롯 크기를 가지고, 상기 동일한 슬롯 크기의 LBA 범위들 간의 상대적인 사용의 최신성(relative recency of use)에 따라 배열되는, 상기 메모리의 하나 이상의 LBA 범위 각각을 식별하고;
    상기 제 1 LBA 범위의 식별에 기초하여,
    상기 제 1 LBA 범위가 상기 제 1 압축 데이터에 할당된다는 것을 표시하기 위해 상기 참조 정보를 업데이트하고;
    상기 제 1 LBA 범위에 상기 제 1 압축 데이터를 기입하도록 구성되는, SSD 장치.
  2. 제 1 항에 있어서,
    상기 SSD 컨트롤러는, 또한
    상기 제 1 압축 명령에 기초하여 생성된 임의의 압축된 데이터 이외의 제 2 압축 데이터의 크기를 결정하는 것으로, 상기 제 2 압축 데이터의 크기는 상기 제1 압축 데이터의 크기와 상이한, 상기 제 2 압축 데이터의 크기를 결정하고;
    상기 메모리의 제 2 LBA 범위를 식별하는 것으로서, 상기 제 2 LBA 범위는 상기 제 2 압축 데이터의 크기 및 상기 참조 정보에 기초하여 식별되는, 상기 메모리의 제 2 LBA 범위를 식별하고;
    상기 제 2 LBA 범위의 식별에 기초하여,
    상기 제 2 LBA 범위가 상기 제 2 압축 데이터에 할당된다는 것을 표시하기 위해 상기 참조 정보를 업데이트하고;
    상기 제 1 LBA 범위에 상기 제 1 압축 데이터를 기입하고, 상기 제 2 LBA 범위에 상기 제 2 압축 데이터를 기입하도록 구성되는 SSD 장치.
  3. 제 1 항에 있어서,
    상기 SSD 컨트롤러는 또한 상기 제 1 데이터를 제 1 태그와 연관시켜서 상기 제 1 압축 명령시 상기 제 1 태그를 전송하도록 구성되는 SSD 장치.
  4. 제 3 항에 있어서,
    상기 제 1 LBA 범위에 상기 제 1 압축 데이터를 기입하는 상기 SSD 컨트롤러는 상기 제 1 태그 및 상기 제 1 LBA 범위를 포함하는 기입 명령을 상기 메모리에 발행하도록 추가로 구성되는 SSD 장치.
  5. 제 1 항에 있어서,
    상기 제 1 LBA 범위를 식별하는 상기 SSD 컨트롤러는 상기 메모리로부터 제거할 제 2 압축 데이터를 식별하도록 추가로 구성되는 SSD 장치.
  6. 제 1 항에 있어서,
    상기 메모리 이외의 저장 디바이스는 상기 제 1 LBA 범위가 상기 제 1 압축 데이터를 저장하는 동안 상기 제 1 데이터의 버전을 저장하고, 상기 복수의 LBA 범위 각각에 대해, 상기 참조 정보는,
    LBA 범위의 크기; 및
    상기 LBA 범위에 대응하는 상기 저장 디바이스의 각각의 상이한 논리적 기본 주소를 명시하는 SSD 장치.
  7. 제 1 항에 있어서,
    상기 참조 정보는 유효 데이터를 현재 저장하고 있는 상기 메모리의 임의의 LBA 범위 이외의 하나 이상의 LBA 범위를 식별하고, 상기 참조 정보는 또한 상기 하나 이상의 LBA 범위 각각에 대해 LBA 범위의 각각의 크기를 식별하는 SSD 장치.
  8. 제 1 항에 있어서,
    상기 제 1 LBA 범위를 식별하는 상기 SSD 컨트롤러는,
    상기 제 1 압축 데이터를 저장하기에 충분한 최소 섹터 수와 동일한 LBA 범위의 총 섹터 수를 각각 갖는 서브세트의 LBA 범위에 기초하여 상기 복수의 LBA 범위의 서브세트를 식별하고;
    상기 서브세트 중에서만 상기 제 1 LBA 범위를 선택하도록 추가로 구성되는 SSD 장치.
  9. 제 8 항에 있어서,
    상기 서브세트 중에서만 상기 제 1 LBA 범위를 선택하는 상기 SSD 컨트롤러는 상기 서브세트의 최장 미사용(least recently used) LBA 범위인 상기 제 1 LBA 범위에 기초하는 SSD 장치.
  10. 제 1 항에 있어서,
    상기 제 1 LBA 범위를 식별하는 상기 SSD 컨트롤러는,
    상기 제 1 압축 데이터를 저장하기에 충분한 최소 섹터 수에 가장 가까운 LBA 범위의 총 섹터 수를 각각 갖는 서브세트의 LBA 범위에 기초하여 상기 복수의 LBA 범위의 서브세트를 식별하고;
    상기 서브세트 중에서만 상기 제1 LBA 범위를 선택하도록 추가로 구성되는 SSD 장치.
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
  21. 삭제
  22. 삭제
  23. 삭제
  24. 삭제
  25. 삭제
KR1020237008572A 2014-12-16 2015-10-28 압축된 데이터 백그라운드를 캐싱하는 장치, 시스템 및 방법 KR102584018B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US14/572,689 US9652384B2 (en) 2014-12-16 2014-12-16 Apparatus, system and method for caching compressed data
US14/572,689 2014-12-16
KR1020177012886A KR102510384B1 (ko) 2014-12-16 2015-10-28 압축된 데이터 백그라운드를 캐싱하는 장치, 시스템 및 방법
PCT/US2015/057815 WO2016099664A1 (en) 2014-12-16 2015-10-28 Apparatus, system and method for caching compressed data background

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020177012886A Division KR102510384B1 (ko) 2014-12-16 2015-10-28 압축된 데이터 백그라운드를 캐싱하는 장치, 시스템 및 방법

Publications (2)

Publication Number Publication Date
KR20230039769A KR20230039769A (ko) 2023-03-21
KR102584018B1 true KR102584018B1 (ko) 2023-09-27

Family

ID=56111286

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020237008572A KR102584018B1 (ko) 2014-12-16 2015-10-28 압축된 데이터 백그라운드를 캐싱하는 장치, 시스템 및 방법
KR1020177012886A KR102510384B1 (ko) 2014-12-16 2015-10-28 압축된 데이터 백그라운드를 캐싱하는 장치, 시스템 및 방법

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020177012886A KR102510384B1 (ko) 2014-12-16 2015-10-28 압축된 데이터 백그라운드를 캐싱하는 장치, 시스템 및 방법

Country Status (5)

Country Link
US (2) US9652384B2 (ko)
KR (2) KR102584018B1 (ko)
CN (1) CN107111551B (ko)
TW (1) TWI596603B (ko)
WO (1) WO2016099664A1 (ko)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9652384B2 (en) 2014-12-16 2017-05-16 Intel Corporation Apparatus, system and method for caching compressed data
US10095595B2 (en) 2015-11-17 2018-10-09 International Business Machines Corporation Instant recovery in a multi-grained caching framework
US9971692B2 (en) 2015-11-17 2018-05-15 International Business Machines Corporation Supporting concurrent operations at fine granularity in a caching framework
US9916249B2 (en) * 2015-11-17 2018-03-13 International Business Machines Corporation Space allocation in a multi-grained writeback cache
US9965390B2 (en) 2015-11-17 2018-05-08 International Business Machines Corporation Reducing defragmentation in a multi-grained writeback cache
US10713211B2 (en) * 2016-01-13 2020-07-14 Red Hat, Inc. Pre-registering memory regions for remote direct memory access in a distributed file system
US10901937B2 (en) 2016-01-13 2021-01-26 Red Hat, Inc. Exposing pre-registered memory regions for remote direct memory access in a distributed file system
US20170271030A1 (en) * 2016-03-18 2017-09-21 Alibaba Group Holding Limited Method and system for using downgraded flash die for cache applications
US9996471B2 (en) * 2016-06-28 2018-06-12 Arm Limited Cache with compressed data and tag
US10459644B2 (en) * 2016-10-28 2019-10-29 Western Digital Techologies, Inc. Non-volatile storage system with integrated compute engine and optimized use of local fast memory
US10503652B2 (en) * 2017-04-01 2019-12-10 Intel Corporation Sector cache for compression
US10490238B2 (en) * 2017-06-29 2019-11-26 SK Hynix Inc. Serializer and memory device including the same
WO2019029793A1 (en) * 2017-08-08 2019-02-14 Continental Automotive Gmbh METHOD FOR OPERATING A CACHE MEMORY
US10558364B2 (en) 2017-10-16 2020-02-11 Alteryx, Inc. Memory allocation in a data analytics system
KR102157354B1 (ko) * 2017-11-20 2020-09-17 삼성전자 주식회사 효율적으로 압축된 캐시 라인의 저장 및 처리를 위한 시스템 및 방법
US10447296B1 (en) 2018-06-22 2019-10-15 International Business Machines Coporation Accelerated compression/decompression including predefined dictionary
US10884940B2 (en) * 2018-12-21 2021-01-05 Advanced Micro Devices, Inc. Method and apparatus for using compression to improve performance of low voltage caches
US11048419B2 (en) * 2019-01-30 2021-06-29 EMC IP Holding Company LLC Adaptively over-allocating storage space for compressed data
US11086791B2 (en) 2019-08-29 2021-08-10 Micron Technology, Inc. Methods for supporting mismatched transaction granularities
US20210224191A1 (en) * 2020-01-22 2021-07-22 Alibaba Group Holding Limited Compression and decompression module in a cache controller for reducing off-chip data traffic
US11616722B2 (en) * 2020-10-22 2023-03-28 EMC IP Holding Company LLC Storage system with adaptive flow control using multiple feedback loops
US11614880B2 (en) * 2020-12-31 2023-03-28 Pure Storage, Inc. Storage system with selectable write paths
CN113391951B (zh) * 2021-05-20 2021-12-24 广西飞创信息科技有限公司 一种基于以太网精简传输的多点集中远程备份容灾方法与系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030131184A1 (en) 2002-01-10 2003-07-10 Wayne Kever Apparatus and methods for cache line compression
US20030229761A1 (en) 2002-06-10 2003-12-11 Sujoy Basu Memory compression for computer systems

Family Cites Families (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5537575A (en) 1994-06-30 1996-07-16 Foley; Denis System for handling cache memory victim data which transfers data from cache to the interface while CPU performs a cache lookup using cache status information
US6002411A (en) * 1994-11-16 1999-12-14 Interactive Silicon, Inc. Integrated video and memory controller with data processing and graphical processing capabilities
US5721874A (en) * 1995-06-16 1998-02-24 International Business Machines Corporation Configurable cache with variable, dynamically addressable line sizes
US6879266B1 (en) 1997-08-08 2005-04-12 Quickshift, Inc. Memory module including scalable embedded parallel data compression and decompression engines
US6408364B1 (en) * 2000-03-17 2002-06-18 Advanced Micro Devices, Inc. Apparatus and method for implementing a least recently used cache replacement algorithm
US6823427B1 (en) * 2001-05-16 2004-11-23 Advanced Micro Devices, Inc. Sectored least-recently-used cache replacement
US7181578B1 (en) * 2002-09-12 2007-02-20 Copan Systems, Inc. Method and apparatus for efficient scalable storage management
US7136973B2 (en) * 2004-02-04 2006-11-14 Sandisk Corporation Dual media storage device
US20050198062A1 (en) * 2004-03-05 2005-09-08 Shapiro Richard B. Method and apparatus for accelerating data access operations in a database system
US7243191B2 (en) 2004-08-31 2007-07-10 Intel Corporation Compressing data in a cache memory
US7412564B2 (en) * 2004-11-05 2008-08-12 Wisconsin Alumni Research Foundation Adaptive cache compression system
US20070104212A1 (en) * 2005-11-10 2007-05-10 Michael Gutman Cache-based compression of structured network traffic
US7849241B2 (en) 2006-03-23 2010-12-07 International Business Machines Corporation Memory compression method and apparatus for heterogeneous processor architectures in an information handling system
US8489817B2 (en) * 2007-12-06 2013-07-16 Fusion-Io, Inc. Apparatus, system, and method for caching data
JP4653830B2 (ja) 2008-09-19 2011-03-16 株式会社東芝 命令キャッシュシステム
US20100185816A1 (en) * 2009-01-21 2010-07-22 Sauber William F Multiple Cache Line Size
JP4621794B1 (ja) * 2009-07-22 2011-01-26 株式会社東芝 キャッシュメモリ制御方法およびキャッシュメモリを備えた情報記憶装置
US20110161560A1 (en) 2009-12-31 2011-06-30 Hutchison Neil D Erase command caching to improve erase performance on flash memory
US20120185638A1 (en) * 2011-01-14 2012-07-19 Daniel Schreiber Method and system for cache endurance management
US8949513B2 (en) * 2011-05-10 2015-02-03 Marvell World Trade Ltd. Data compression and compacting for memory devices
US9448922B2 (en) 2011-12-21 2016-09-20 Intel Corporation High-performance storage structures and systems featuring multiple non-volatile memories
TWI459201B (zh) * 2012-04-27 2014-11-01 Toshiba Kk Information processing device
US9471500B2 (en) * 2013-04-12 2016-10-18 Nec Corporation Bucketized multi-index low-memory data structures
US9251096B2 (en) * 2013-09-25 2016-02-02 Intel Corporation Data compression in processor caches
KR101904421B1 (ko) * 2013-09-27 2018-11-30 삼성전자주식회사 캐시 메모리를 제어하는 방법 및 장치.
US9304937B2 (en) * 2013-10-23 2016-04-05 Netapp Inc. Atomic write operations for storage devices
US9734062B2 (en) * 2013-12-13 2017-08-15 Avago Technologies General Ip (Singapore) Pte. Ltd. System and methods for caching a small size I/O to improve caching device endurance
US9292449B2 (en) * 2013-12-20 2016-03-22 Intel Corporation Cache memory data compression and decompression
US9740621B2 (en) * 2014-05-21 2017-08-22 Qualcomm Incorporated Memory controllers employing memory capacity and/or bandwidth compression with next read address prefetching, and related processor-based systems and methods
KR102336528B1 (ko) * 2014-07-07 2021-12-07 삼성전자 주식회사 캐시 메모리를 가지는 전자 장치 및 그의 운용 방법
US9858196B2 (en) * 2014-08-19 2018-01-02 Qualcomm Incorporated Power aware padding
US20160092361A1 (en) * 2014-09-26 2016-03-31 Intel Corporation Caching technologies employing data compression
US9652384B2 (en) 2014-12-16 2017-05-16 Intel Corporation Apparatus, system and method for caching compressed data

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030131184A1 (en) 2002-01-10 2003-07-10 Wayne Kever Apparatus and methods for cache line compression
US20030229761A1 (en) 2002-06-10 2003-12-11 Sujoy Basu Memory compression for computer systems

Also Published As

Publication number Publication date
US9996466B2 (en) 2018-06-12
US20170286294A1 (en) 2017-10-05
CN107111551B (zh) 2021-06-08
KR20170097609A (ko) 2017-08-28
KR20230039769A (ko) 2023-03-21
CN107111551A (zh) 2017-08-29
TW201626382A (zh) 2016-07-16
TWI596603B (zh) 2017-08-21
WO2016099664A1 (en) 2016-06-23
KR102510384B1 (ko) 2023-03-16
US20160170878A1 (en) 2016-06-16
US9652384B2 (en) 2017-05-16

Similar Documents

Publication Publication Date Title
KR102584018B1 (ko) 압축된 데이터 백그라운드를 캐싱하는 장치, 시스템 및 방법
TWI594121B (zh) 使用資料壓縮的快取技術
EP3436953B1 (en) Method and apparatus for processing sequential writes to a block group of physical blocks in a memory device
US9229876B2 (en) Method and system for dynamic compression of address tables in a memory
JP6142081B2 (ja) 不揮発性メモリデバイスにおける揮発性メモリアーキテクチャ及び関連コントローラ
US11263149B2 (en) Cache management of logical-physical translation metadata
US10496334B2 (en) Solid state drive using two-level indirection architecture
CN109085997A (zh) 用于非易失性存储器的存储器高效持续键值储存
US9507705B2 (en) Write cache sorting
US11675709B2 (en) Reading sequential data from memory using a pivot table
US10997080B1 (en) Method and system for address table cache management based on correlation metric of first logical address and second logical address, wherein the correlation metric is incremented and decremented based on receive order of the first logical address and the second logical address
US20230342294A1 (en) Memory device and non-transitory computer readable recording medium
US10019198B2 (en) Method and apparatus for processing sequential writes to portions of an addressable unit
US9524236B1 (en) Systems and methods for performing memory management based on data access properties
US11126624B2 (en) Trie search engine
CN106155583B (zh) 缓存固态设备读取请求结果的系统和方法
CN110968520B (zh) 基于统一缓存架构的多流存储设备
CN110532199B (zh) 预读方法及其存储控制器
CN117806570B (zh) 在线内存扩展方法、装置、设备及存储介质
US20220206711A1 (en) Devices and methods for optimized fetching of multilingual content in media streaming

Legal Events

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