KR20170036075A - 데이터 압축을 채용하는 캐싱 기술들 - Google Patents

데이터 압축을 채용하는 캐싱 기술들 Download PDF

Info

Publication number
KR20170036075A
KR20170036075A KR1020177005353A KR20177005353A KR20170036075A KR 20170036075 A KR20170036075 A KR 20170036075A KR 1020177005353 A KR1020177005353 A KR 1020177005353A KR 20177005353 A KR20177005353 A KR 20177005353A KR 20170036075 A KR20170036075 A KR 20170036075A
Authority
KR
South Korea
Prior art keywords
compressed output
cache
memory
data
compression
Prior art date
Application number
KR1020177005353A
Other languages
English (en)
Inventor
크누트 에스. 그림스러드
산지브 엔. 트리카
Original Assignee
인텔 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인텔 코포레이션 filed Critical 인텔 코포레이션
Publication of KR20170036075A publication Critical patent/KR20170036075A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • G06F12/0833Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means in combination with broadcast means (e.g. for invalidation or updating)
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/423Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation characterised by memory arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/20Employing a main memory using a specific memory technology
    • G06F2212/202Non-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/62Details of cache specific to multiprocessor cache arrangements
    • G06F2212/621Coherency control relating to peripheral accessing, e.g. from DMA or I/O device

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

데이터 압축을 채용하는 캐싱 기술이 설명된다. 본 개시내용의 기술은, 캐시 라인 내의 데이터가 캐시 메모리에 기입되기 전에 압축되는 캐시 시스템, 방법 및 컴퓨터 판독가능한 매체를 포함한다. 일부 실시예에서, 이 기술은, 캐싱 제어기가 압축된 데이터를 캐시 메모리에 기입하기 전에 캐시 라인 내의 데이터가 압축되는 정도를 이해할 수 있게 한다. 결과적으로, 캐시 제어기는, 압축된 데이터의 크기, 압축된 데이터(또는 그것의 대응하는 입력 데이터)에 기인하는 압축비, 또는 이들의 조합에 적어도 부분적으로 기초하여, 압축된 데이터가 캐시 메모리에 저장될 곳을 결정할 수 있다.

Description

데이터 압축을 채용하는 캐싱 기술들{CACHING TECHNOLOGIES EMPLOYING DATA COMPRESSION}
본 개시내용은 캐싱 기술에 관한 것이다. 특히, 본 개시내용은 데이터 압축을 채용하는 드라이브 캐싱 기술에 관한 것이다.
데스크탑 컴퓨터, 랩탑 컴퓨터, 스마트폰, 태블릿 등의 전자 디바이스는, 종종 하나 이상의 주변 저장 디바이스를 포함한다. 예를 들어, 데스크탑 컴퓨터는 데이터를 영구적으로 저장하도록 구성된 자기 기록 매체(디스크)를 포함하는 하드 디스크 드라이브(HDD)를 포함할 수 있다. 유용하긴 하지만, HDD의 입/출력(예를 들어, 기입/판독) 성능은 디바이스의 다른 컴포넌트들에 비해 비교적 느릴 수 있다. 따라서, HDD들 및 다른 비교적 저속의 저장 디바이스들(예를 들어, 테이프 메모리)은 그것/그것들이 설치되는 전자 디바이스의 성능에 병목 현상을 야기할 수 있다. 성능 향상을 위한 많은 시도가 있었지만, HDD들의 전기-기계적 성질은 성능이 향상될 수 있는 정도를 실질적으로 제한할 수 있다.
비교적 느린 주변 저장 디바이스에 의해 제기되는 병목 현상을 경감하는 한 가지 방식은, 캐시 디바이스(여기서는 "캐시"라고도 함)를 이용하는 것이다. 일반적으로, 캐시 디바이스는, 비교적 느린 저장 디바이스와 프로세서 등의 전자 디바이스의 다른 컴포넌트 사이에 논리적으로 존재하는 메모리 디바이스이다. 통상적으로 캐시는, 캐시 디바이스와 연관된 비교적 느린 저장 디바이스에 비해 비교적 빠른 메모리를 포함한다. 캐시 디바이스의 메모리는 주변 저장 디바이스를 위한 임시 저장 영역으로서 역할할 수 있다. 예를 들어, 자주 액세스되는("핫") 데이터는, 예를 들어 비교적 느린 저장 디바이스로부터 초기에 액세스된 후 캐시에 배치될 수 있다. 그 후 핫 데이터로의 후속 액세스는 비교적 느린 저장 디바이스 대신에 캐시에 대해 이루어질 수 있다. 캐시 제어기는 어느 데이터가 캐시 디바이스의 메모리에 저장되고 어느 데이터가 제거되는지를 결정하기 위해 하나 이상의 알고리즘 및/또는 정책을 적용할 수 있다. 캐시는 비교적 느린 저장 디바이스보다 빠르기 때문에, 시스템의 입/출력 성능이 향상될 수 있다.
캐시 디바이스는 비교적 느린 주변 저장 디바이스에 의해 도입된 성능 병목 현상을 완화할 수 있지만, 캐시 메모리는 종종 상당히 비싸다. 따라서 캐시의 크기는 비용 및/또는 기타의 고려사항에 의해 제한될 수 있다. 결과적으로, 캐시에 저장될 수 있는 데이터의 양은 메모리의 크기에 따라 사실상 제한될 수 있다.
청구된 주제의 실시예들의 특징 및 이점들은, 유사한 참조번호들이 유사한 부분들을 가리키는 도면을 참조한, 이하의 상세한 설명을 진행함에 따라 명백해질 것이다.
도 1은 본 개시내용과 일치하는 캐싱 시스템의 블록도를 나타낸다;
도 2는 본 개시내용과 일치하는 캐싱 시스템에 의해 채용될 수 있는 예시적인 명령을 도시한다;
도 3은 본 개시내용과 일치하는 데이터를 캐싱하는 예시적인 방법에서의 캐시 제어기 모듈의 예시적인 동작들의 플로차트이다;
도 4은 본 개시내용과 일치하는 데이터를 캐싱하는 예시적인 방법에서의 데이터 압축 모듈의 예시적인 동작들의 플로차트이다.
또한, 도 5a 및 도 5b는 본 개시내용과 일치하는 캐싱 시스템을 포함하는 예시적인 전자 디바이스의 블록도이다.
본 개시내용이 특정한 응용에 대한 실시예를 참조하여 여기서 설명되지만, 이러한 실시예들은 단지 예시일 뿐이고 청구항에 의해 정의되는 본 발명은 이것으로 제한되지 않는다는 점을 이해해야 한다. 사실상 예시의 목적을 위해, 여기서 설명된 기술들은, 솔리드 스테이트 드라이브가 하드 디스크 드라이브 또는 테이프 메모리 등의 저장 디바이스를 위한 캐시 디바이스로서 이용되는 하나 이상의 사용 모델의 맥락에서 논의될 수 있다. 이러한 논의는 단지 예시적인 것이며, 여기서 설명된 기술의 전부 또는 일부는 다른 정황에서 이용될 수도 있다는 것을 이해해야 한다. 사실상 여기서 설명된 기술들은 임의의 적절한 캐시 디바이스 및 저장 디바이스와 함께 이용될 수 있다. 여기서 제공된 교시를 접하는 관련 분야(들)의 통상의 기술자라면, 본 개시내용의 범위 내의 추가의 수정, 응용, 및 실시예와, 본 개시내용의 실시예들이 유용한 추가의 분야를 이해할 것이다.
여기에 설명된 기술들은 하나 이상의 전자 디바이스에서 구현될 수 있다. 여기에 설명된 기술들을 이용할 수 있는 전자 디바이스들의 비제한적인 예로서는, 카메라, 셀 전화, 컴퓨터 단말기, 데스크탑 컴퓨터, 전자 판독기, 팩시밀리 머신, 키오스크, 넷북 컴퓨터, 노트북 컴퓨터, 인터넷 디바이스, 결제 단말기, 개인용 정보 단말기, 미디어 재생기 및/또는 레코더, 서버(예를 들어, 블레이드 서버, 랙 마운트 서버, 이들의 조합 등), 셋탑 박스, 스마트폰, 태블릿 개인용 컴퓨터, 울트라 모바일 개인용 컴퓨터, 유선 전화기, 이들의 조합 등의, 임의의 종류의 모바일 디바이스 및/또는 고정 디바이스가 포함된다. 이러한 디바이스들은 휴대형 또는 고정형일 수 있다. 일부 실시예들에서, 여기서 설명된 기술들은, 데스크탑 컴퓨터, 랩탑 컴퓨터, 스마트폰, 태블릿 컴퓨터, 넷북 컴퓨터, 노트북 컴퓨터, 개인 휴대 정보 단말기, 서버, 이들의 조합 등에서 채용될 수 있다. 더 일반적으로는, 여기서 설명된 기술들은, 캐시 디바이스와 저장 디바이스 중 하나 또는 양쪽 모두가 결합 및/또는 설치될 수 있는 임의의 전자 디바이스에서 채용될 수 있다.
용어 "캐시 디바이스"는, 여기서는, 또 다른 메모리 디바이스(이하, "저장 디바이스"라고 함)를 위한 캐시로서 이용되는 메모리 디바이스를 지칭하는데 사용된다. 본 개시내용은 솔리드 스테이트 드라이브가 캐시 디바이스로서 이용되는 실시예에 초점을 맞추고 있지만, 이러한 설명은 단지 예시적인 것이며, 용어 "캐시 디바이스"는, 저장 디바이스로서 이용될 수 있는 임의 타입의 메모리 디바이스를 포괄한다는 것을 이해해야 한다. 제한없이, 일부 실시예에서 여기서 설명된 캐시 디바이스는, 솔리드 스테이트 드라이브, 동적 랜덤 액세스 메모리(DRAM), 하드 드라이브, 이들의 조합 등의 형태이다. 일부 실시예들에서, 여기서 설명된 캐싱 디바이스들은 연관된 저장 디바이스의 성능보다 높은 입출력("I/O") 성능을 나타낸다. 따라서, 일부 실시예들에서, 여기서 설명된 캐시 디바이스들은, 캐시 디바이스와 연관된 저장 디바이스의 메모리보다 빠른 메모리(여기서는 "캐시 메모리"라고도 함)를 포함할 수 있다.
용어 "저장 디바이스"는, 여기서는, 데이터를 영구적으로 저장하는데 이용될 수 있는 메모리 디바이스를 지칭하기 위해 사용된다. 캐시 디바이스의 비제한적인 예로서는, 하드 드라이브(예를 들어, 자기 기록 매체를 채용하는 드라이브), 솔리드 스테이트 드라이브, 테이프 메모리, 이들의 조합 등이 포함된다. 일부 실시예에서, 여기서 설명된 저장 디바이스는 연관된 캐시 디바이스의 I/O 성능보다 낮은 I/O 성능을 나타내는 하나 이상의 메모리 디바이스의 형태이다. 따라서, 일부 실시예들에서, 여기서 설명된 저장 디바이스들은, 저장 디바이스와 연관된 캐시 디바이스의 메모리보다 느린 메모리(여기서는 "저장 메모리"라고도 함)를 포함할 수 있다.
본 명세서의 임의의 실시예에 사용된 바와 같이, 용어 "모듈"은 본 개시내용과 일치하는 하나 이상의 동작을 수행하도록 구성된 소프트웨어, 펌웨어, 회로 및/또는 이들의 조합을 지칭할 수 있다. 소프트웨어는, 비일시적 컴퓨터 판독가능한 저장 매체 상에 기록된 소프트웨어 팩키지, 코드, 명령어, 명령어 세트 및/또는 데이터로서 구현될 수 있다. 펌웨어는, 메모리 디바이스에 하드-코딩된(예를 들어, 비휘발성) 코드, 명령어 또는 명령어 세트 및/또는 데이터로서 구현될 수 있다. 본 명세서의 임의의 실시예에서 사용될 때, "회로"는, 하드와이어드 회로, 하나 이상의 개별 명령어 처리 코어, 상태 머신 회로, 프로그램가능한 회로에 의해 실행되는 명령어를 저장하는 소프트웨어 및/또는 펌웨어를 포함하는 컴퓨터 프로세서 등의, 프로그램가능한 회로를, 예를 들어, 단일로 또는 임의의 조합으로, 포함할 수 있다. 모듈은, 집합적으로 또는 개별적으로, 앞서 정의된 바와 같이, 하나 이상의 전자 디바이스의 일부를 형성하는 회로로서 구현될 수 있다. 일부 실시예들에서, 여기서 설명된 하나 이상의 모듈들은, 본 개시내용과 일치하는 하나 이상의 기능들을 수행하기 위해 적어도 부분적으로 하드웨어로 구현되는 로직의 형태일 수 있다.
용어 "솔리드 스테이트 드라이브", "SSD", "SSD들"은, 여기서는, 데이터를 영구적으로 저장하기 위해 집적 회로 어셈블리(예를 들어, 비휘발성 랜덤 액세스 메모리(NVRAM) 어셈블리)가 이용되는 다양한 데이터 저장 디바이스들 중 임의의 것을 지칭하기 위해 상호교환가능하게 사용된다. 어쨌든, SSD는 NAND(negated and not and) 및/또는 NOR(not or) 메모리 등의 비휘발성 메모리를 포함하는 것으로 이해될 수 있다.
용어 "하드 드라이브" 및 "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)의 동작에 관한 추가 상세한 설명은 나중에 제공될 것이다.
코덱(104)은 일반적으로 CCM(101)으로부터 수신된 데이터를 압축하도록 기능한다. 특히 및 후술되는 바와 같이, 코덱(104)은 CCM(101)(또는 더 구체적으로는 DCM(103))으로부터 캐시 라인 내의 데이터를 수신할 수 있다. 명료성을 위해, CODEC(104)에 의해 수신된 데이터는 입력 데이터라고 지칭된다. 본 개시내용은, CODEC이 단일의 캐시 라인으로부터의 입력 데이터에 관해 동작하는 실시예를 설명하지만, 이러한 설명은 예시의 목적을 위한 것이고, CODEC은 복수의 캐시 라인들로부터의 입력 데이터에 관해 동작하도록 구성될 수도 있다는 것을 이해해야 한다. 따라서, 예를 들어, CCM(101)은 데이터 풀(pool of data)을 복수의 캐시 라인으로 분할할 수 있고, 각각의 캐시 라인은 입력 데이터(예를 들어, 4KB, 8KB 등)를 포함한다. CCM(101)(또는 DCM(103))은 하나 이상의 캐시 라인으로부터의 입력 데이터를 압축을 위해 CODEC(104)에 전송할 수 있다. 그 구성에 따라, 코덱(104)은 한번에 입력 데이터 세트들 중 단 하나(즉, 하나의 캐시 라인으로부터의 입력 데이터)에 관해 동작하거나, 또는 복수의 입력 데이터 세트(즉, 복수의 캐시 라인으로부터의 입력 데이터)에 관해 동시에 동작할 수 있다.
그 다음, 코덱(104)은, 압축된 출력을 생성하도록, 예를 들어, 하나 이상의 압축 알고리즘을 이용하여 입력 데이터에 관해 압축 동작을 수행할 수 있다. 이해할 수 있는 바와 같이, 압축된 출력의 크기는 입력 데이터의 크기와는 상이할 수 있다. 압축된 출력과 입력 데이터의 크기 사이의 상대적인 차이는 압축비로 표현될 수 있고, 압축비는, 일부 실시예에서는 입력 데이터의 크기를 압축된 출력의 크기로 나눔으로써 또는 그 반대로 결정될 수 있다. 따라서, 예를 들어, 입력 데이터의 크기가 4KB이고 압축된 출력의 크기가 2KB라면, 압축비는, 그 압축비가 계산되는 방식에 따라, 0.5 또는 2일 수 있다.
CODEC(104)에 의해 실행될 수 있는 압축 알고리즘의 비제한적인 예로서는, Lempel-Ziv(LZ) 알고리즘, Deflate 알고리즘, LZR 알고리즘, 및 이들의 조합이 포함된다. 물론, 이들 알고리즘은 단지 예시적인 것이며, 임의의 적절한 압축 알고리즘(및 특히 무손실 압축 알고리즘)이 이용될 수 있다. 제한없이, 일부 실시예에서, CODEC(104)은, CCM(101)(또는 특히 DCM(103))으로부터 수신된 데이터/상태에 관해 Lempel-Ziv 알고리즘을 실행한다.
도 1은, 코덱(104)이 캐시 디바이스(102)에 통합되는 실시예를 나타낸다. 이 예시는 단지 예의 목적일 뿐이며, CODEC(104)은 캐시 디바이스(102)와 통합될 필요는 없다는 것을 이해해야 한다. 사실상, 본 개시내용은 코덱(104)이 임의의 적절한 위치에 저장되거나 및/또는 구현되는 실시예를 구상하고 있다. 예를 들어, 코덱(104)은, 비디오 카드 또는 다른 하드웨어 가속기 등의, 호스트 시스템의 다른 하드웨어에 의해 구현되는 하드웨어 코덱일 수 있다. 대안으로서 또는 추가로, 코덱은, 예를 들어, 호스트 시스템의 프로세서에 의해 실행되는 소프트웨어 코덱일 수 있다.
CODEC(104)의 성질에 관계없이, CODEC(104)에 의해 생성된 압축된 출력은 버퍼(105)에 저장될 수 있다. 따라서, 버퍼(105)는 코덱(105)의 압축된 출력을 저장하도록 구성될 수 있다. 특히, 버퍼(105)는 압축된 출력을 캐시 디바이스(102)의 메모리(106)에 기입하기 전에 코덱(105)의 압축된 출력을 저장할 수 있다. 후술되는 바와 같이, 압축된 출력을 메모리(106)에 기입하는 것은, 예를 들어 CCM(101)으로부터의 데이터 기입 명령(예를 들어, 기입 명령)의 수신시에 컨디셔닝(condition)될 수 있다. 또한, 이후에 더 설명되는 바와 같이, (예를 들어, 압축된 출력이 버퍼(105)에 저장되어 있는 동안) 압축된 출력을 메모리(105)에 커밋(commit)하기 전에, 압축된 출력이 기입될 위치(예를 들어, 메모리(106)의 논리적 블록 주소)가 CCM(101)에 저장된다. 따라서, 버퍼(105)는, 압축된 출력을 캐시 메모리(106)에 커밋하기 전에 코덱(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) 표준의 이전의, 현재의 또는 향후의 개발된 버전에서의 벤더 고유 명령 등의 임의의 적합한 포멧일 수 있다. 어느 경우이든, 압축 명령은, 태그의 사본, 압축을 위한 입력 데이터(즉, 캐시 라인 내의 데이터), 및 선택사항으로서 입력 데이터의 압축되지 않은 크기의 측정치를 명령 내에 포함할 수 있다. 이 개념이 도 2에 도시되어 있고, 여기서 압축 명령(201)은, 태그, 입력 데이터, 및 선택사항으로서 입력 데이터의 압축되지 않은 크기의 측정치를 포함하는 단일 명령의 형태로 도시되어 있다. 물론, 압축 명령은, 명령 헤더 등의 그러나 이것으로 제한되지 않는, 원하는 다른 요소들을 포함할 수 있다. 압축 명령은 또한, CODEC(104)으로 하여금 입력 데이터에 관해 압축 동작을 수행하게 하도록 구성될 수 있는 하나 이상의 압축 명령어를 포함하거나 이와 연관될 수 있다. 물론, 태그, 데이터 및 압축 명령어는 동일한 명령에 포함될 필요가 없으며, 원한다면 상이한 명령들에 포함될 수도 있다.
DCM(103)은 CCM(101)으로부터 직접 압축 명령을 수신할 수 있거나, 압축 명령은 캐시 디바이스(102)의 다른 컴포넌트들로부터 DCM(103)에 포워딩될 수 있다. 어쨌든, 압축 명령에 응답하여, DCM(103)은 캐시 제어기 모듈로부터 수신된 입력 데이터를 압축을 위해 CODEC(104)에 포워딩할 수 있다. 이에 응답하여, 코덱(104)은, 예를 들어 전술된 바와 같이, 하나 이상의 압축 알고리즘을 이용하여 입력 데이터에 관해 하나 이상의 압축 동작을 실행할 수 있다. 도 1의 지점 2에 나타낸 바와 같이, CODEC(104)은 결과의 압축된 출력을 전송 버퍼(105)에 저장할 수 있다. 그 다음, 코덱(104)은, 압축 동작의 완료 및 압축된 출력의 위치(예를 들어, 버퍼(105)의 식별자, 버퍼(105) 내의 주소 범위 등)를 DCM(103)에 보고할 수 있다.
도 1의 지점 3에 도시된 바와 같이, DCM(103)은 리턴 메시지를 CCM(101)에 전달할 수 있다. 리턴 신호는, DCM(103)에 저장된 압축된 출력의 크기의 측정치 뿐만 아니라 입력 데이터에 할당된 태그를 포함할 수 있다. 이러한 개념이 도 2에 도시되어 있으며, 리턴 메시지(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)에 전송할 수 있다.
어쨌든, 도 4의 지점 4에 도시된 바와 같이, CCM(101)은 캐시 디바이스(102)(또는 더 구체적으로는 DCM(103))로부터 리턴 메시지를 수신할 수 있다. 리턴 메시지의 수신에 응답하여, CCM(101)은 리턴 메시지를 분석하여 태그 및 압축된 데이터의 크기를 식별할 수 있다. 이러한 분석을 통해, CCM(101)은 태그와 연관된 입력 데이터가 코덱(104)에 의해 압축된 정도를 결정할 수 있다. 다시 말하면, 리턴 메시지를 분석함으로써, CCM(101)은 버퍼(105)에 저장된 압축된 출력의 크기를 결정할 수 있다. (리턴 메시지 내의) 태그와 연관된 압축된 출력 및 태그는, (압축 명령에서) 입력 데이터와 연관되었기 때문에, 따라서 CCM(101)은, 압축된 출력의 크기 및/또는 코덱(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와 연관된 태그를 포함할 수 있다. 이 개념이 도 2에 도시되어 있으며, 여기서, 기입 명령(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)), 입력/출력 인터페이스/디바이스(예를 들어, 키보드, 마우스 등), 디스플레이(506)를 포함한다. SSD(504)는 캐시 시스템(100)을 포함하며, 그 상세사항은 도 5b에 도시된다.
전자 디바이스(500)는, 전술된 전자 디바이스 등의, 임의의 적합한 전자 디바이스일 수 있다. 따라서, 전자 디바이스(500)로서 이용될 수 있는 전자 디바이스들의 비제한적인 예로서는, 카메라, 셀 전화, 컴퓨터 단말기, 데스크탑 컴퓨터, 전자 판독기, 팩시밀리 머신, 키오스크, 넷북 컴퓨터, 노트북 컴퓨터, 인터넷 디바이스, 결제 단말기, 개인용 정보 단말기, 미디어 재생기 및/또는 레코더, 서버(예를 들어, 블레이드 서버, 랙 마운트 서버, 이들의 조합 등), 셋탑 박스, 스마트폰, 태블릿 개인용 컴퓨터, 울트라 모바일 개인용 컴퓨터, 유선 전화기, 이들의 조합 등의, 임의의 종류의 모바일 디바이스 및/또는 고정 디바이스가 포함된다. 이러한 디바이스들은 휴대형 또는 고정형일 수 있다. 일부 실시예들에서, 여기서 설명된 기술들은, 데스크탑 컴퓨터, 랩탑 컴퓨터, 스마트폰, 태블릿 컴퓨터, 넷북 컴퓨터, 노트북 컴퓨터, 개인 휴대 정보 단말기, 서버, 이들의 조합 등에서 채용될 수 있다.
디바이스 플랫폼은, 임의의 적합한 디바이스 플랫폼일 수 있고, 일부 실시예에서는 전자 디바이스(500)로서 이용되는 전자 디바이스의 타입과 상관된다. 따라서, 예를 들어 전자 디바이스(500)가 스마트폰, 노트북 컴퓨터, 데스크탑 컴퓨터, 서버 등인 예의 경우, 디바이스 플랫폼(501)은, 각각, 스마트폰 플랫폼, 노트북 컴퓨터 플랫폼, 데스크탑 컴퓨터 플랫폼, 서버 플랫폼의 형태일 수 있다. 물론, 이러한 디바이스 플랫폼들은 단지 예의 목적을 위한 것이며, 임의의 적합한 디바이스 플랫폼이 디바이스 플랫폼(501)으로서 이용될 수 있다.
프로세서(502)는 임의의 적합한 범용 프로세서 또는 주문형 집적 회로일 수 있고, 하나 또는 복수의 프로세서 코어 상에서 하나 또는 복수의 쓰레드(thread)를 실행할 수 있다. 제한없이, 일부 실시예에서, 프로세서(502)는, INTEL® Corp., 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)의) 버스(506)와 통신할 수 있다. 이와 관련하여, 임의의 적합한 버스가 버스(506)로서 이용될 수 있으며, 임의의 적합한 인터페이스가 인터페이스(505)로서 이용될 수 있다. 제한없이, 한 실시예에서 버스(506)는 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 제어기(미도시)에 통합되거나 또는 기타의 방식으로 포함될 수 있다.
동작에 있어서, 버스(506)는 (예를 들어, 프로세서(502)로부터의) 데이터를 SSD(504)에 운반할 수 있다. SSD(504)는, 예를 들어, 인터페이스(505)를 통해, 데이터를 수신할 수 있다. 그 다음, 수신된 데이터는 CCM(101)에 전달될 수 있다. 그 때, CCM(101)은, 데이터의 전부 또는 일부가 메모리(106)에 기입되어야 하는지를 결정하기 위해 하나 이상의 캐시 정책을 적용할 수 있다. 만일 그렇다면, CCM(101)은 앞서 논의된 바와 같이 데이터를 하나 또는 복수의 캐시 라인들로 나눌 수 있고, (선택사항으로서 태그로 마킹된) 캐시 라인들 중 하나 이상을 압축을 위해 DCM(103)에 전송할 수 있다. 앞서 논의된 바와 같이, DCM(103)은 데이터(입력 데이터)를 압축을 위해 CODEC(104)에 전송할 수 있다. 코덱(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)로부터 제거되게 할 수 있다.
본 개시내용의 또 다른 양태는 데이터 캐싱 방법에 관한 것이다. 이와 관련하여, 본 개시내용과 일치하는 데이터 캐싱의 예시적 방법에 따른 캐시 제어기 모듈의 예시적인 동작의 흐름도인 도 3을 참조한다. 도시된 바와 같이, 방법(300)은 블록 301에서 시작한다. 이 방법은, 선택사항적인 블록 302로 진행할 수 있으며, 이 때 캐시 제어기 모듈은, 호스트 시스템의 또 다른 컴포넌트 등의, 소스로부터 입력 데이터를 수신할 수 있다. 블록 302은, 여기서 설명된 동작들의 수행이 캐시 제어기 모듈에 의한 데이터의 수신시에 컨디셔닝되지 못할 수도 있기 때문에 선택사항으로서 표시되어 있다. 예를 들어, 캐시 제어기 모듈은, 원한다면, 캐싱 또는 호스트 시스템의 또 다른 컴포넌트에 의해 수신되거나 이들 내에 저장된 데이터에 관해 여기서 설명된 동작들을 수행할 수 있다.
어느 경우에나, 방법은 블록 303으로 진행할 수 있으며, 여기서, 캐시 제어기 모듈은, 전술된 바와 같이, 압축을 위한 입력 데이터 및 선택사항적 태그를 데이터 압축 모듈에 전송할 수 있다. 상기 설명과 일치하여, 일부 실시예에서, 캐시 제어기 모듈은 입력 데이터를 고정된 크기 캐시 라인들로 분할하고, 각각의 캐시 라인 내의 데이터를 태그와 연관시킬 수 있다. 그 다음, 캐시 압축 모듈은, 캐시 라인 내의 데이터 및 그 연관된 태그를, 예를 들어 압축 명령에서 캐시 디바이스의 데이터 압축 모듈에 전송할 수 있다. 상기 내용과 일치하여, 압축 명령은 데이터 압축 모듈이 입력 데이터를 압축을 위해 코덱에 전송하게 하도록 구성될 수 있다. 대안으로서, 태그가 이용되지 않는 실시예들에서, 압축 명령은 데이터를 캐시 라인에 포함할 수 있고 데이터 압축 모듈로 하여금 입력 데이터를 압축을 위해 코덱에 전송하게 하고 압축된 출력의 위치(전송 버퍼)를 캐시 제어기 모듈에 전송하게 할 수 있다.
그 다음, 방법은 블록 304로 진행할 수 있고, 여기서, 캐시 제어기 모듈은, 예를 들어 데이터 압축 모듈로부터 리턴 메시지가 수신되었는지에 관해 결정할 수 있다. 앞서 언급된 바와 같이, 리턴 메시지는, 블록 303에서, 캐시 제어기 모듈이 입력 데이터에 할당한 태그로서 데이터 압축 모듈도 입력 데이터를 압축함으로써 생성된 압축된 출력과 상관시킨 태그의 사본을 포함할 수 있다. 리턴 메시지는 또한, 전술된 바와 같이, 압축된 출력의 크기를 포함할 수 있다. 대안으로서, 태그가 이용되지 않는 경우에, 리턴 명령은 압축된 출력이 저장되는 전송 버퍼의 식별자(identity)를 포함할 수 있다.
리턴 메시지가 수신되지 않았다면, 캐시 제어기 모듈은 리턴 메시지의 수신을 계속 기다릴 수 있고, 및/또는 이 방법은 블록 305로 진행할 수 있다. 블록 305에 따라, 캐시 제어기 모듈은 캐시 디바이스(또는 더 구체적으로는 그 데이터 압축 모듈)에 질의 메시지를 전송할 수 있다. 전술된 바와 같이, 질의 메시지는 캐시 디바이스 및/또는 디바이스 압축 모듈로 하여금 태그와 연관된 압축된 출력의 크기를 보고하게 할 수 있다. 대안으로서 태그가 이용되지 않는 경우, 질의 메시지는 데이터 압축 모듈로 하여금 압축된 출력의 위치, 예를 들어 전송 버퍼(105)의 식별자를 보고하게 할 수 있다.
리턴 메시지가 수신되었거나 캐시 제어기 모듈이 (예를 들어, 질의 메시지를 통해) 다른 수단에 의해 압축된 출력의 크기를 획득한 경우, 이 방법은 블록 306으로 진행할 수 있다. 블록 306에 따라, 캐시 제어기 모듈은, 개괄적으로 전술된 바와 같이, 태그와 연관된 압축된 출력의 크기 및/또는 태그와 연관된 입력 데이터에 기인하는 압축비를 분석할 수 있다. 대안으로서, 태그가 이용되지 않는 경우, 캐시 제어기 모듈은 저장된 압축된 출력이 저장되는 전송 버퍼를 목표로 하는 판독 명령을 발행할 수 있고, 판독 명령에 응답하여 판독되는 전송 버퍼의 내용으로부터 압축된 출력의 크기 및/또는 대응하는 입력 데이터의 압축비를 결정할 수 있다.
그 다음, 방법은 블록 307로 진행할 수 있고, 여기서, 압축된 출력이 캐시 디바이스의 메모리에 기입되는지에 관한 결정이 이루어질 수 있다. 전술된 바와 같이, 일부 실시예들에서, 이러한 결정은, 적어도 부분적으로, 압축된 출력의 크기 및/또는 입력 데이터에 기인하는 압축비의, 하나 이상의 임계치들에 대한 비교에 기초할 수 있다.
압축된 출력을 캐시 디바이스의 메모리에 기입하지 않기로 결정되면, 이 방법은 블록 308로 진행할 수 있고, 여기서, 캐시 제어기 모듈은 제거 명령을 전송할 수 있다. 앞서 언급된 바와 같이, 제거 명령은, 캐시 디바이스로 하여금 태그와 연관된 압축된 데이터를 캐시 디바이스의 전송 버퍼로부터 제거하게 하도록 구성될 수 있다. 그러나, 압축된 출력을 캐시 디바이스의 메모리에 기입하도록 결정되면, 이 방법은 블록 309로 진행할 수 있다.
블록 309에 따라, 캐시 제어기 모듈은, 압축된 출력의 저장을 위해 캐시 디바이스의 메모리의 하나 이상의 논리적 블록 주소를 할당할 수 있다. 전술된 바와 같이, 일부 실시예에서 캐시 제어기는, 적어도 부분적으로, 태그와 연관된 압축된 출력의 크기 및/또는 태그와 연관된 입력 데이터에 기인하는 압축비에 기초하여, LBA를 할당할 수 있다. 어쨌든, 캐시 제어기 모듈은 태그 및 할당된 LBA(들)를 포함하는 기입 명령을 캐시 디바이스에 전송할 수 있다. 대안으로서, 태그가 이용되지 않는 경우, 캐시 제어기 모듈은, (전송 버퍼로부터 판독된) 압축된 데이터 및 할당된 LBA(들)를 포함하는 기입 명령을 캐시 디바이스에 전송할 수 있다. 어느 경우이든, 기입 명령은, 캐시 디바이스로 하여금 압축된 출력을 기입 명령에서 식별된 LBA(들)에 기입하게 하도록 구성될 수 있다.
블록 308에 따른 제거 명령 또는 블록 309에 따른 기입 명령의 전송에 이어, 이 방법은 선택사항적 블록 310으로 진행할 수 있다. 이 선택적인 블록에 따라, 추가 동작이 수행되어야 하는지에 관한 결정이 이루어질 수 있다. 일부 실시예들에서, 이러한 결정의 결과는, 잠재적으로 캐시 메모리에 기입될 수 있는 추가의 입력 데이터가 있는지의 여부에 따라 컨디셔닝될 수 있다. 추가적인 동작이 수행되어야 한다면, 이 방법은 블록 303으로 되돌아 가서 반복될 수 있다. 그러나, 추가적인 동작이 수행되지 않는다면, 이 방법은 블록 311로 진행하여 종료될 수 있다.
이제, 본 개시내용과 일치하는 데이터 압축된 방법의 한 예에 따른 데이터 압축 모듈의 예시적인 동작의 흐름도인 도 4를 참조한다. 도시된 바와 같이, 방법 400은 블록 401에서 시작될 수 있다. 그 다음, 방법은 선택 블록 402로 진행할 수 있고, 여기서 데이터 압축 모듈은 입력 데이터 및 선택사항적인 태그를 포함하는 압축 명령이 수신되었는지에 관한 결정을 내릴 수 있다. 블록 402는, 방법의 추가 동작들은, 결정에 따라서 컨디셔닝될 수 없고, 입력 데이터 및 선택사항적인 태그의 수신에 따라서 컨디셔닝될 수 있기 때문에 선택사항으로서 도시되어 있다. 앞서 언급된 바와 같이, 압축 명령은 데이터를 하나 또는 복수의 캐시 라인으로 분할한 캐시 제어기 모듈로부터 발행될 수 있으며, 여기서 각각의 캐시 라인 내의 데이터는 선택사항으로서 고유 태그와 연관된다.
입력 데이터 및 선택사항적인 태그가 수신되지 않았다고 결정되면, 이 방법은 블록 409로 진행하여 종료될 수 있다. 그러나 입력 데이터 및 선택사항적인 태그가 수신되었다면, 이 방법은 블록 403으로 진행할 수 있다. 태그가 이용되지 않지만 입력 데이터가 수신된 실시예에서, 이 방법은 블록 403으로 진행할 수 있다.
블록 403에 따라, 데이터 압축 모듈은, 개괄적으로 전술된 바와 같이, 입력 데이터를 압축을 위해 CODEC에 전송할 수 있다. 예를 들어, 데이터 압축 모듈은 압축 명령어 및 입력 데이터를 CODEC에 전송할 수 있다. 압축 명령은, 전술된 바와 같이, CODEC으로 하여금 입력 데이터에 관해 하나 이상의 압축 동작을 수행하게 하고, 결과의 압축된 출력을 캐시 디바이스의 전송 버퍼에 저장하게 하도록 구성될 수 있다.
그 다음, 방법은 블록 404로 진행할 수 있고, 여기서 데이터 압축 모듈은 리턴 메시지를 캐시 제어기 모듈에 전송할 수 있다. 앞서 언급된 바와 같이, 리턴 메시지의 전송은, (예를 들어, CODEC에 의한 압축 동작의 완료에 응답하여) 또는 캐시 제어기 모듈로부터의 질의에 응답하여, 자동적으로 수행될 수 있다. 어떤 경우이든, 리턴 메시지는, 압축된 출력의 크기 뿐만 아니라 입력 데이터와 연관된 태그(및 압축된 출력)를 포함할 수 있다. 대안으로서, 태그가 이용되지 않는 경우, 리턴 메시지는 압축된 출력이 저장되는 위치(예를 들어, 전송 버퍼의 식별자)를 명시할 수 있다.
이 시점에서, 방법은 블록 405으로 진행할 수 있고, 여기서 커밋/폐기 명령이 수신되었는지에 대한 결정이 이루어질 수 있다. 앞서 언급된 바와 같이, 기입 명령은 캐시 제어기 모듈에 의해 전송될 수 있고, 기입 명령, 압축된 출력과 연관된 태그, 및 압축된 출력이 기입될 캐시 메모리의 하나 이상의 논리적 블록 주소를 포함할 수 있다. 대조적으로, 폐기 명령은, 폐기 명령어와 함께, 압축된 출력과 연관된 태그를 포함할 수 있다. 대안으로서, 태그가 이용되지 않는다면, 기입 명령은, 전송 버퍼로부터 이전에 판독된 압축된 출력의 전부 또는 일부 뿐만 아니라, 압축된 출력이 기입될 캐시 메모리의 하나 이상의 논리적 블록 주소를 포함할 수 있다. 마찬가지로, 태그가 이용되지 않는 실시예에서, 폐기 명령은, 태그를 이용하는 것 대신에 압축된 출력이 저장되는 전송 버퍼를 목표로 할 수 있다.
커밋 또는 폐기 명령이 수신되지 않았다면, 이 방법은 블록 406으로 진행할 수 있고, 여기서, 데이터 압축 모듈이 이러한 명령의 수신을 계속 기다릴지에 관한 결정이 이루어질 수 있다. 이 결정의 결과는, 예를 들어, 임계 기간이 만료되었는지에 따라 컨디셔닝될 수 있다. 데이터 압축 모듈이 커밋 또는 폐기 명령의 수신 대기를 계속할 것이라면, 이 방법은 블록 405로 되돌아 갈 수 있다. 만일 그렇지 않다면, 이 방법은 블록 409로 진행하여 종료될 수 있다.
커밋 또는 디스차지(discharge) 명령이 수신된 경우, 이 방법은 블록 407로 진행할 수 있고, 여기서 데이터 압축 모듈은 캐시 디바이스로 하여금 전송 버퍼에 저장된 압축된 출력을 적절히 커밋 또는 제거하게 할 수 있다. 예를 들어, 태그를 포함하는 폐기 명령이 수신될 때, 데이터 압축 모듈은, 캐시 디바이스로 하여금, 명령 내의 태그와 연관되고 캐시 디바이스의 전송 버퍼에 저장되어 있는 압축된 출력을 폐기하게 할 수 있다. 대안으로서 태그가 이용되지 않고 폐기 명령이 수신되고 전송 버퍼의 위치를 명시하는 경우, 데이터 압축 모듈은 캐시 디바이스로 하여금 식별된 전송 버퍼에 저장된 압축된 출력을 폐기하게 할 수 있다.
대안으로서, 태그를 포함하는 기입 명령이 수신될 때, 데이터 압축 모듈은 캐시 디바이스로 하여금 태그와 연관된 압축된 출력을 기입 명령에서 명시된 캐시 메모리의 논리적 블록 주소에 기입하게 할 수 있다. 데이터 압축 모듈은, 예를 들어, 캐시 디바이스로 하여금 기입 명령 내의 태그와 연관된 압축된 데이터를 기입 명령에서 명시된 캐시 메모리의 논리적 블록 주소에 기입하게 하도록 구성된 기입 명령을 발행함으로써 이러한 동작들을 수행할 수 있다. 태그가 이용되지 않는 경우에, 기입 명령은 (예를 들어, 전송 버퍼로부터 이전에 판독된) 기입될 압축된 출력을 포함할 수 있다.
이러한 경우에, 데이터 압축 모듈은 캐시 디바이스로 하여금 기입 명령 내의 압축된 출력을 기입 명령에서 명시된 논리적 블록 주소(들)에 기입하게 할 수 있다.
이 시점에서, 이 방법은 동작 블록 408로 진행할 수 있고, 여기서 추가적인 동작이 수행되어야 하는지에 관한 결정이 이루어질 수 있다. 일부 실시예들에서, 이러한 결정의 결과는, 잠재적으로 캐시 메모리에 기입될 수 있는 추가의 입력 데이터 및/또는 압축된 출력이 있는지의 여부에 따라 컨디셔닝될 수 있다. 추가적인 동작이 수행되어야 한다면, 이 방법은 블록 402로 되돌아 가서 반복될 수 있다. 그러나, 추가적인 동작이 수행되지 않는다면, 이 방법은 블록 409로 진행하여 종료될 수 있다.
상기 내용으로부터 이해할 수 있는 바와 같이, 본 개시내용의 기술은, 캐시 제어기 모듈이, 캐시 메모리의 논리적 블록 주소가 할당되기 전에 압축된 출력의 크기를 이해할 수 있게 한다. 결과적으로, 캐시 제어기 모듈은 캐시 메모리의 논리적 블록 주소의 할당을 압축된 출력의 크기에 맞출 수 있다. 또한, 캐시 제어기 모듈은 메모리에 기입되는 압축된 데이터의 각각의 조각의 크기 및 캐시 메모리의 크기를 이해하기 때문에, 캐시 디바이스에 질의할 필요없이 캐시 메모리 내의 논리적 블록 주소의 할당 및/또는 가용성을 알 수 있다. 따라서, 여기서 설명된 기술들은 캐싱 시스템에서 더 많은 원활한 및/또는 효율적인 압축을 가능하게 할 수 있다. 이러한 이점은 또한, 캐시 메모리를 목표로 하는 판독 명령에 영향을 미치지 않고 달성될 수 있다.
예들
이하의 예들은 추가 실시예에 관한 것이다. 본 개시내용의 이하의 예들은, 이하에서 제공되는 바와 같이, 시스템, 디바이스, 방법, 실행될 때 머신으로 하여금 방법에 기초하여 및/또는 방법에 기초하여 동작을 수행하기 위한 수단에 기초하여, 동작을 수행하게 하는 명령어들을 저장한 컴퓨터 판독가능한 저장 매체 등의 대상 자료를 포함할 수 있다.
예 1: 본 개시내용의 한 예는 캐시 제어기 모듈을 포함하는 시스템이며, 여기서, 상기 캐시 제어기 모듈은, 입력 데이터를 포함하는 압축 명령을 압축 엔진 ―상기 압축 명령은 상기 압축 엔진으로 하여금 상기 입력 데이터를 압축하여 압축된 출력을 생성하고 상기 압축된 출력을 전송 버퍼에 저장하게 하도록 구성됨― 에 전송하고; 상기 압축된 출력을 캐시 디바이스의 메모리에 기입하기 전에 상기 압축된 출력의 크기 및 상기 입력 데이터에 기인하는 압축비 중 적어도 하나를 결정하고; 상기 압축된 출력이 상기 캐시 디바이스의 메모리에 기입될 것일 때, 상기 압축된 출력의 크기, 상기 압축비 또는 이들의 조합에 적어도 부분적으로 기초하여, 상기 압축된 출력의 저장을 위한 상기 메모리 디바이스 내의 적어도 하나의 논리적 블록 주소(LBA) 범위를 할당하도록 구성된다.
예 2: 이 예는 예 1의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 압축 엔진은 상기 캐시 디바이스의 일부이다.
예 3: 이 예는 예 1 및 예 2 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 전송 버퍼는 상기 캐시 디바이스의 일부이다.
예 4: 이 예는 예 1 내지 예 3 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 제어기 모듈은 또한, 상기 입력 데이터를 태그와 연관시키고 상기 압축 명령에서 상기 태그를 전송하도록 구성되며; 상기 압축 명령에 응답하여, 상기 태그는 상기 임시 버퍼 내의 상기 압축된 출력과 연관되고; 상기 압축된 출력이 상기 캐시 디바이스의 상기 메모리에 기입될 것일 때, 상기 캐시 제어기 모듈은 상기 태그 및 상기 적어도 하나의 LBA 범위를 포함하는 기입 명령을 상기 캐시 디바이스에 발행하고, 상기 기입 명령은 상기 캐시 디바이스로 하여금 상기 태그와 연관된 상기 압축된 출력을 상기 기입 명령에서 명시된 상기 메모리의 상기 적어도 하나의 LBA 범위에 전송하도록 구성된다.
예 5: 이 예는 예 1 내지 예 4 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 제어기 모듈은 또한, 상기 캐시 디바이스로부터 리턴 메시지 ―상기 리턴 메시지는 상기 태그 및 상기 압축된 출력의 크기의 측정치를 포함함― 를 수신하고; 상기 리턴 메시지의 수신에 응답하여, 상기 압축된 출력의 크기 및 상기 입력 데이터에 기인하는 상기 압축비 중 적어도 하나를 결정하도록 구성된다.
예 6: 이 예는 예 1 내지 예 5 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 압축된 출력이 상기 캐시 디바이스의 메모리에 기입될 것일 때, 상기 캐시 제어기 모듈은 또한, 상기 전송 버퍼로부터 상기 압축된 출력을 판독하고; 상기 압축된 출력 및 상기 적어도 하나의 LBA 범위를 포함하는 기입 명령 ―상기 기입 명령은 상기 캐시 디바이스로 하여금 상기 기입 명령 내의 압축된 출력을 상기 기입 명령에서 명시된 메모리의 적어도 하나의 LBA 범위에 기입하게 하도록 구성됨― 을 상기 캐시 디바이스에 전송하도록 구성된다.
예 7: 이 예는 예 1 내지 예 6 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 제어기 모듈은 또한, 상기 캐시 디바이스로부터 리턴 메시지 ―상기 리턴 메시지는, 상기 압축된 출력이 저장되는 상기 전송 버퍼의 위치를 포함함― 를 수신하고; 상기 압축된 출력이 저장된 전송 버퍼의 위치를 목표로 하는 판독 명령을 발행함으로써, 상기 압축된 출력을 적어도 부분적으로 판독하며; 상기 전송 버퍼로부터 판독된 상기 압축된 출력으로부터 상기 압축된 출력의 크기 및 상기 입력 데이터에 기인하는 상기 압축비 중 적어도 하나를 결정하도록 구성된다.
예 8: 이 예는 예 1 내지 예 7 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 제어기 모듈은 상기 압축된 출력을 상기 메모리에 기입하기 전에 상기 적어도 하나의 LBA 범위를 할당하도록 구성된다.
예 9: 이 예는 예 1 내지 예 8 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 적어도 하나의 LBA 범위의 크기는 실질적으로 상기 압축된 출력의 크기에 대응한다.
예 10: 이 예는 예 1 내지 예 9 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 전송 버퍼의 크기는 상기 캐시 라인의 크기보다 크거나 같다.
예 11: 이 예는 예 1 내지 예 10 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 라인은 하나 또는 복수의 캐시 라인이고, 상기 복수의 캐시 라인들의 각각의 캐시 라인은 동일한 크기이다.
예 12: 이 예는 예 1 내지 예 11 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 제어기 모듈은 또한, 상기 캐시 디바이스의 상기 메모리에 상기 입력 데이터를 저장할지를 결정하기 위해 하나 이상의 캐싱 정책을 구현하도록 구성된다.
예 13: 이 예는 예 1 내지 예 12 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 제어기 모듈은 또한, 상기 캐시 디바이스의 상기 메모리에 상기 압축된 출력을 저장할지를 결정하기 위해 하나 이상의 캐싱 정책을 구현하도록 구성된다.
예 14: 이 예는 예 1 내지 예 13 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 제어기는 또한, 상기 압축된 데이터가 상기 캐시 디바이스의 상기 메모리에 기입되기 전에 상기 압축된 출력을 상기 캐시 디바이스의 상기 메모리에 저장할지를 결정하도록 구성된다.
예 15: 이 예는 예 1 내지 예 14 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 제어기 모듈은 또한, 상기 압축된 출력의 크기에 적어도 부분적으로 기초하여 상기 캐시 디바이스의 상기 메모리에 상기 압축된 출력을 저장할지를 결정하도록 구성된다.
예 16: 이 예는 예 1 내지 예 15 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 제어기 모듈은 또한, 상기 압축된 출력의 크기와 임계 크기의 비교에 적어도 부분적으로 기초하여 상기 캐시 디바이스의 상기 메모리에 상기 압축된 출력을 저장할지를 결정하도록 구성된다.
예 17: 이 예는 예 1 내지 예 16 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 제어기 모듈은 또한, 리턴 메시지의 수신에 앞서, 상기 캐시 디바이스에 질의 명령을 발행하도록 구성되고, 상기 질의 명령은 상기 캐시 디바이스로 하여금 상기 리턴 메시지를 캐시 제어기 모듈에 전달하게 하도록 구성된다.
예 18: 이 예는 예 1 내지 예 17 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 제어기 모듈은 또한, 상기 압축된 출력이 상기 캐시 디바이스의 상기 메모리에 기입되지 않을 것일 때 폐기 명령을 발행하도록 구성되고, 상기 폐기 명령은 상기 캐시 디바이스로 하여금 상기 전송 버퍼로부터 상기 압축된 출력을 제거하게 하도록 구성된다.
예 19: 이 예는 예 1 내지 예 18 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 압축된 출력은 상기 전송 버퍼로부터 제거되기 전에 상기 캐시 디바이스의 상기 메모리에 기입되지 않는다.
예 20: 이 예에 따르면, 데이터 압축 모듈을 포함하는 시스템이 제공되며, 여기서, 상기 데이터 압축 모듈은: 캐시 제어기 모듈로부터의 압축 명령 ―상기 압축 명령은 캐시 라인의 입력 데이터를 포함함― 의 수신에 응답하여, 압축 압축해제 엔진에 압축 명령 ―상기 압축 명령은 상기 압축 압축해제 엔진으로 하여금 상기 입력 데이터를 압축하여 압축된 출력을 생성하게 하고 상기 압축된 출력을 캐시 디바이스의 전송 버퍼에 저장하게 함― 을 발행하고; 리턴 메시지 ―상기 리턴 메시지는, 상기 캐시 제어기 모듈로 하여금, 상기 압축된 출력의 크기 및 상기 입력 데이터에 기인하는 압축비 중 적어도 하나를 결정하게 하도록 구성됨― 를 상기 캐시 제어기 모듈에 전달하며; 상기 압축된 출력이 상기 캐시 디바이스의 상기 메모리에 기입될 것일 때, 상기 압축된 출력의 크기, 상기 압축비 또는 이들의 조합에 적어도 부분적으로 기초하여, 상기 압축된 출력의 저장을 위해 상기 캐시 디바이스의 메모리 내의 적어도 하나의 논리적 블록 주소 범위를 할당하도록 구성된다.
예 21: 이 예는 예 20의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 데이터 압축 모듈은 또한, 상기 캐시 제어기 모듈에 의해 할당된 적어도 하나의 논리적 블록 주소를 포함하는 기입 명령의 수신에 응답하여, 기입 명령을 발행하도록 구성되고, 상기 기입 명령은, 상기 캐시 디바이스로 하여금 상기 압축된 데이터를 상기 기입 명령에서 명시된 상기 메모리의 논리적 블록 주소에 기입하게 하도록 구성된다.
예 22: 이 예는 예 20 및 예 21 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 기입 명령의 수신 전에, 상기 압축된 데이터는 상기 캐시 디바이스의 상기 메모리에 기입되지 않는다.
예 23: 이 예는 예 20 및 내지 22 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 압축 명령은 상기 입력 데이터와 연관된 태그를 포함하고; 상기 압축 명령에 역시 응답하여, 상기 데이터 압축 모듈은 상기 태그를 상기 압축된 출력과 연관시키고; 상기 리턴 메시지는 상기 태그 및 상기 압축된 출력의 크기를 포함한다.
예 24: 이 예는 예 20 및 내지 23 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 데이터 압축 모듈은 또한, 상기 캐시 제어기 모듈로부터의 질의 명령의 수신시 상기 리턴 메시지의 전송을 컨디셔닝하도록 구성된다.
예 25: 이 예는 예 20 및 내지 24 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 디바이스는 압축 압축해제 엔진을 포함한다.
예 26: 이 예는 예 20 및 내지 25 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 리턴 메시지는, 상기 캐시 제어기 모듈로 하여금, 상기 압축된 데이터가 상기 메모리에 기입되기 전에 적어도 하나의 논리적 블록 주소를 할당하게 하도록 구성된다.
예 27: 이 예는 예 20 및 내지 26 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 제어기 모듈에 의해 할당된 적어도 하나의 논리적 블록 주소의 크기는 상기 압축된 출력의 크기와 상관된다.
예 28: 이 예는 예 20 및 내지 27 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 제어기 모듈에 의해 할당된 적어도 하나의 논리적 블록 주소의 크기는 실질적으로 상기 압축된 출력의 크기와 동일하다.
예 29: 이 예는 예 20 내지 예 28 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 전송 버퍼의 크기는 상기 캐시 라인의 크기보다 크거나 같다.
예 30: 이 예는 예 20 내지 예 29 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 라인은 복수의 캐시 라인 중 하나이고, 상기 복수의 캐시 라인들의 각각의 캐시 라인은 동일한 크기이다.
예 31: 이 예는 예 20 내지 예 30 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 리턴 메시지는, 상기 캐시 제어기 모듈로 하여금, 상기 압축된 데이터가 상기 캐시 디바이스의 상기 메모리에 기입되기 전에 상기 압축된 출력을 상기 캐시 디바이스의 상기 메모리에 저장할지를 결정하게 하도록 구성된다.
예 32: 이 예는 예 20 내지 예 31 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 제어기 모듈은 또한, 상기 압축된 출력의 크기에 적어도 부분적으로 기초하여 상기 캐시 디바이스의 상기 메모리에 상기 압축된 출력을 저장할지를 결정하도록 구성된다.
예 33: 이 예는 예 20 내지 예 32 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 제어기 모듈은 또한, 상기 압축된 출력의 크기와 임계 크기의 비교에 적어도 부분적으로 기초하여 상기 캐시 디바이스의 상기 메모리에 상기 압축된 출력을 저장할지를 결정하도록 구성된다.
예 34: 이 예는 예 20 내지 예 33 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 데이터 압축 모듈은 또한, 상기 캐시 제어기 모듈로부터의 폐기 명령의 수신에 응답하여, 상기 캐시에 폐기 명령을 발행하도록 구성되고, 상기 폐기 명령은 상기 캐시 디바이스로 하여금 상기 전송 버퍼로부터 상기 압축된 출력을 제거하게 하도록 구성된다.
예 35: 이 예는 예 20 내지 예 34 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 압축된 출력은 상기 전송 버퍼로부터 제거되기 전에 상기 캐시 디바이스의 상기 메모리에 기입되지 않는다.
예 36: 이 예에 따르면, 데이터를 캐싱하는 방법이 제공되고, 이 방법은 캐시 제어기 모듈에 의해: 캐시 라인의 입력 데이터를 압축을 위해 압축 엔진에 전송하는 단계; 압축된 출력을 생성하기 위해 상기 입력 데이터를 압축하는 단계; 상기 압축된 출력을 전송 버퍼에 저장하는 단계; 상기 압축된 출력의 크기, 상기 입력 데이터에 기인하는 압축비, 또는 이들의 조합에 적어도 부분적으로 기초하여, 상기 압축된 출력을 캐시 디바이스의 메모리에 기입할지를 결정하는 단계; 및 상기 압축된 출력이 상기 메모리에 기입될 것일 때, 상기 압축된 출력의 크기, 상기 입력 데이터에 기인하는 압축비, 또는 이들의 조합에 적어도 부분적으로 기초하여, 상기 압축된 출력의 저장을 위해 상기 메모리의 적어도 하나의 논리적 블록 주소(LBA) 범위를 할당하는 단계를 포함한다.
예 37: 이 예는 예 36의 피쳐들 중 임의의 것 또는 전부를 포함하고, 상기 압축된 출력이 상기 메모리에 기입될 것일 때, 상기 캐시 제어기 모듈로부터 기입 명령을 발행하는 단계를 더 포함하고, 상기 기입 명령은 상기 캐시 디바이스로 하여금 상기 압축된 출력을 상기 전송 버퍼로부터 상기 메모리에 기입하게 하도록 구성된다.
예 38: 이 예는 예 36 및 예 27 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 상기 캐시 제어기 모듈에 의해, 데이터 압축 모듈로부터 리턴 메시지를 수신하는 단계; 및 상기 리턴 메시지로부터 상기 압축된 출력의 크기 및 상기 압축비 중 적어도 하나를 결정하는 단계를 더 포함한다.
예 39: 이 예는 예 36 내지 예 38 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 상기 캐시 제어기 모듈로부터 상기 데이터 압축 모듈로 질의 명령을 발행하는 단계를 더 포함하며, 상기 질의 명령은 상기 데이터 압축 모듈로 하여금 상기 리턴 메시지를 상기 캐시 제어기 모듈에 전송하게 하도록 구성된다.
예 40: 이 예는 예 36 내지 예 39 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 상기 입력 데이터를 태그와 연관시키는 단계; 상기 압축된 출력을 상기 태그와 연관시키는 단계를 더 포함하고; 상기 압축된 출력이 상기 메모리에 기입될 것일 때, 상기 기입 명령은 상기 적어도 하나의 LBA 범위 및 상기 태그를 포함하고, 상기 기입 명령은 상기 캐시 디바이스로 하여금 상기 태그와 연관된 상기 압축된 데이터를 상기 전송 버퍼로부터 상기 메모리에 기입하게 하도록 구성된다.
예 41: 이 예는 예 36 내지 예 40 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 상기 캐시 제어기 모듈로: 데이터 압축 모듈로부터 태그를 포함하는 리턴 메시지를 수신하는 단계; 및 상기 리턴 메시지에 포함된 상기 태그에 적어도 부분적으로 기초하여 상기 압축된 출력의 크기 및 상기 압축비 중 적어도 하나를 결정하는 단계를 더 포함한다.
예 42: 이 예는 예 36 내지 예 41 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 압축된 데이터를 상기 메모리에 기입하기 전에 상기 적어도 하나의 LBA 범위를 할당하는 단계가 발생한다.
예 43: 이 예는 예 36 내지 예 42 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 적어도 하나의 LBA 범위의 크기는 상기 압축된 출력의 크기와 상관된다.
예 44: 이 예는 예 36 내지 예 43 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 적어도 하나의 LBA 범위의 크기는 상기 압축된 출력의 크기에 실질적으로 동일하다.
예 45: 이 예는 예 36 내지 예 44 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 전송 버퍼의 크기는 상기 캐시 라인의 크기보다 크거나 같다.
예 46: 이 예는 예 36 내지 예 45 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 라인은 복수의 캐시 라인 중 하나이고, 상기 복수의 캐시 라인들의 각각의 캐시 라인은 동일한 크기이다.
예 47: 이 예는 예 36 내지 예 46 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 하나 이상의 캐싱 정책에 적어도 부분적으로 기초하여 상기 캐시 디바이스의 상기 메모리에 상기 입력 데이터를 저장할지를 결정하는 단계를 더 포함한다.
예 48: 이 예는 예 36 내지 예 47 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 하나 이상의 캐싱 정책에 적어도 부분적으로 기초하여 상기 캐시 디바이스의 상기 메모리에 상기 압축된 출력을 저장할지를 결정하는 단계를 더 포함한다.
예 49: 이 예는 예 36 내지 예 48 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 디바이스의 상기 메모리에 상기 압축된 출력을 저장할지를 결정하는 단계는 상기 압축된 출력의 크기에 적어도 부분적으로 기초한다.
예 50: 이 예는 예 36 내지 예 49 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 디바이스의 상기 메모리에 압축된 출력을 저장할지를 결정하는 단계는 압축된 출력의 크기를 임계 크기와 비교하는 단계를 포함한다.
예 51: 이 예는 예 36 내지 예 50 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 상기 압축된 출력이 상기 캐시 디바이스의 상기 메모리에 기입되지 않을 것일 때, 폐기 명령을 상기 캐시 디바이스에 발행하는 단계를 더 포함하고, 상기 폐기 명령은 상기 캐시 디바이스로 하여금 상기 전송 버퍼로부터 상기 압축된 출력을 제거하게 하도록 구성된다.
예 52: 이 예는 예 36 내지 예 51 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 압축된 출력은 상기 전송 버퍼로부터 제거되기 전에 상기 캐시 디바이스의 상기 메모리에 기입되지 않는다.
예 53: 이 예에 따르면, 데이터를 캐싱하는 방법이 제공되고, 이 방법은 데이터 압축 모듈에 의해: 압축 압축해제 엔진에 압축 명령 ―상기 압축 명령은 압축 압축해제 엔진으로 하여금 캐시 제어기 모듈로부터 수신된 캐시 라인의 입력 데이터를 압축하여 압축된 출력을 생성하고 상기 압축된 출력을 캐시 디바이스의 전송 버퍼에 저장하게 하도록 구성됨― 을 발행하는 단계; 리턴 메시지 ―상기 리턴 메시지는 상기 캐시 제어기 모듈로 하여금 상기 압축된 출력의 크기 및 상기 입력 데이터에 기인하는 압축비 중 적어도 하나를 결정하게 하도록 구성됨― 를 상기 캐시 제어기 모듈에 전송하는 단계; 상기 압축된 출력이 상기 캐시 디바이스의 메모리에 기입될 것일 때, 상기 압축된 출력의 크기, 상기 압축비, 또는 이들의 조합에 적어도 부분적으로 기초하여, 상기 압축된 출력의 저장을 위해 상기 캐시 디바이스의 상기 메모리 내의 적어도 하나의 논리적 블록 주소(LBA) 범위를 할당하는 단계를 포함한다.
예 54: 이 예는 예 53의 피쳐들 중 임의의 것 또는 전부를 포함하고, 상기 캐시 제어기 모듈로부터의 기입 명령의 수신에 응답하여, 데이터 압축 모듈로 기입 명령을 발행하는 단계를 더 포함하고, 상기 기입 명령은 상기 캐시 디바이스로 하여금 상기 압축된 출력을 상기 전송 버퍼로부터 상기 메모리에 기입하게 하도록 구성된다.
예 55: 이 예는 예 53 및 예 54 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 기입 명령의 수신 전에, 상기 압축된 데이터는 상기 캐시 디바이스의 상기 메모리에 기입되지 않는다.
예 56: 이 예는 예 53 및 내지 55 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 입력 데이터는 태그와 연관되고; 상기 압축 명령에 역시 응답하여, 상기 데이터 압축 모듈은 상기 태그를 상기 압축된 출력과 연관시키고; 상기 리턴 메시지는 상기 태그를 포함한다.
예 57: 이 예는 예 53 내지 예 56 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 리턴 메시지는 상기 압축된 출력의 크기를 더 포함한다.
예 58: 이 예는 예 53 및 내지 57 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 리턴 메시지의 전송은 상기 캐시 제어기 모듈로부터의 질의 명령의 수신시에 컨디셔닝된다.
예 59: 이 예는 예 53 및 내지 58 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 리턴 메시지는, 상기 캐시 제어기 모듈로 하여금, 상기 압축된 데이터가 상기 메모리에 기입되기 전에 적어도 하나의 논리적 블록 주소를 할당하게 하도록 구성된다.
예 60: 이 예는 예 53 및 내지 59 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 제어기 모듈에 의해 할당된 적어도 하나의 논리적 블록 주소의 크기는 상기 압축된 출력의 크기와 상관된다.
예 61: 이 예는 예 53 및 내지 60 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 제어기 모듈에 의해 할당된 적어도 하나의 논리적 블록 주소의 크기는 실질적으로 상기 압축된 출력의 크기와 동일하다.
예 62: 이 예는 예 53 내지 예 62 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 리턴 메시지는, 상기 캐시 제어기 모듈로 하여금, 상기 압축된 데이터가 상기 캐시 디바이스의 상기 메모리에 기입되기 전에 상기 압축된 출력을 상기 캐시 디바이스의 상기 메모리에 저장할지를 결정하게 하도록 구성된다.
예 63: 이 예는 예 53 내지 예 62 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 상기 데이터 압축 모듈에 의해: 상기 캐시 제어기 모듈로부터의 폐기 명령의 수신에 응답하여, 상기 캐시 디바이스에 폐기 명령을 발행하는 단계를 더 포함하고, 상기 폐기 명령은 상기 캐시 디바이스로 하여금 상기 전송 버퍼로부터 상기 압축된 출력을 제거하게 하도록 구성된다.
예 64: 이 예는 예 53 내지 예 63 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 압축된 출력은 상기 전송 버퍼로부터 제거되기 전에 상기 캐시 디바이스의 상기 메모리에 기입되지 않는다.
예 65: 이 예에 따르면, 캐시 시스템의 프로세서에 의해 실행될 때 캐시 제어기 모듈에 의해 하기의 동작들을 수행하게 하는 명령어들을 포함하는 적어도 하나의 컴퓨터 판독가능한 매체가 제공되고, 이 동작들은: 캐시 라인의 입력 데이터를 압축을 위해 압축 엔진에 전송하는 동작; 압축된 출력을 생성하기 위해 상기 입력 데이터를 압축하는 동작; 상기 압축된 출력을 전송 버퍼에 저장하는 동작; 상기 압축된 출력의 크기, 상기 입력 데이터에 기인하는 압축비, 또는 이들의 조합에 적어도 부분적으로 기초하여, 상기 압축된 출력을 캐시 디바이스의 메모리에 기입할지를 결정하는 동작; 및 상기 압축된 출력이 상기 메모리에 기입될 것일 때, 상기 압축된 출력의 크기, 상기 입력 데이터에 기인하는 압축비, 또는 이들의 조합에 적어도 부분적으로 기초하여, 상기 압축된 출력의 저장을 위해 상기 메모리의 적어도 하나의 논리적 블록 주소(LBA) 범위를 할당하는 동작을 포함한다.
예 66: 이 예는 예 65의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 명령어들은 실행될 때 또한: 상기 압축된 출력이 상기 메모리에 기입될 것일 때, 상기 캐시 제어기 모듈로부터 기입 명령을 발행하는 동작을 포함하는 동작들을 더 수행하게 하고, 상기 기입 명령은 상기 캐시 디바이스로 하여금 상기 압축된 출력을 상기 전송 버퍼로부터 상기 메모리에 기입하게 하도록 구성된다.
예 67: 이 예는 예 65 및 예 66 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 명령어들은 실행될 때 또한: 상기 캐시 제어기 모듈에 의해, 데이터 압축 모듈로부터 리턴 메시지를 수신하는 동작; 및 상기 리턴 메시지로부터 상기 압축된 출력의 크기 및 상기 압축비 중 적어도 하나를 결정하는 동작을 포함하는 동작들을 수행하게 한다.
예 68: 이 예는 예 65 내지 예 67 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 명령어들은 실행될 때 또한: 상기 캐시 제어기 모듈로부터 상기 데이터 압축 모듈로 질의 명령을 발행하는 동작을 포함하는 동작들을 수행하게 하고, 상기 질의 명령은 상기 데이터 압축 모듈로 하여금 상기 리턴 메시지를 상기 캐시 제어기 모듈에 전송하게 하도록 구성된다.
예 69: 이 예는 예 65 내지 예 68 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 명령어들은 실행될 때 또한: 상기 입력 데이터를 태그와 연관시키는 동작; 상기 압축된 출력을 상기 태그와 연관시키는 동작을 포함하는 동작들을 수행되게 하고; 상기 압축된 출력이 상기 메모리에 기입될 것일 때, 상기 기입 명령은 상기 적어도 하나의 LBA 범위 및 상기 태그를 포함하고, 상기 기입 명령은 상기 캐시 디바이스로 하여금 상기 태그와 연관된 상기 압축된 데이터를 상기 전송 버퍼로부터 상기 메모리에 기입하게 하도록 구성된다.
예 70: 이 예는 예 65 내지 예 69 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 명령어들은 실행될 때 또한: 데이터 압축 모듈로부터 태그를 포함하는 리턴 메시지를 수신하는 동작; 및 상기 리턴 메시지에 포함된 상기 태그에 적어도 부분적으로 기초하여 상기 압축된 출력의 크기 및 상기 압축비 중 적어도 하나를 결정하는 동작을 포함하는 동작들을 수행하게 한다.
예 71: 이 예는 예 65 내지 예 70 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 압축된 데이터를 상기 메모리에 기입하기 전에 상기 적어도 하나의 LBA 범위를 할당하는 동작이 발생한다.
예 72: 이 예는 예 65 내지 예 71 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 적어도 하나의 LBA 범위의 크기는 상기 압축된 출력의 크기와 상관된다.
예 73: 이 예는 예 65 내지 예 72 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 적어도 하나의 LBA 범위의 크기는 상기 압축된 출력의 크기에 실질적으로 동일하다.
예 74: 이 예는 예 65 내지 예 73 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 전송 버퍼의 크기는 상기 캐시 라인의 크기보다 크거나 같다.
예 75: 이 예는 예 65 내지 예 74 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 라인은 복수의 캐시 라인 중 하나이고, 상기 복수의 캐시 라인들의 각각의 캐시 라인은 동일한 크기이다.
예 76: 이 예는 예 65 내지 예 75 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 명령어들은 실행될 때 또한: 상기 캐시 제어기 모듈에 의해, 하나 이상의 캐싱 정책에 적어도 부분적으로 기초하여 상기 캐시 디바이스의 상기 메모리에 상기 입력 데이터를 저장할지를 결정하는 동작을 포함하는 동작들을 수행하게 한다.
예 77: 이 예는 예 65 내지 예 76 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 명령어들은 실행될 때 또한: 상기 캐시 제어기 모듈에 의해, 하나 이상의 캐싱 정책에 적어도 부분적으로 기초하여 상기 캐시 디바이스의 상기 메모리에 상기 압축된 출력을 저장할지를 결정하는 동작을 포함하는 동작들을 수행하게 한다.
예 78: 이 예는 예 65 내지 예 77 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 디바이스의 상기 메모리에 상기 압축된 출력을 저장할지를 결정하는 동작은 상기 압축된 출력의 크기에 적어도 부분적으로 기초한다.
예 79: 이 예는 예 65 내지 예 78 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 디바이스의 상기 메모리에 압축된 출력을 저장할지를 결정하는 동작은 압축된 출력의 크기를 임계 크기와 비교하는 동작을 포함한다.
예 80: 이 예는 예 65 내지 예 79 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 명령어들은 실행될 때 또한: 상기 압축된 출력이 상기 캐시 디바이스의 상기 메모리에 기입되지 않을 것일 때, 상기 캐시 제어기 모듈로부터 폐기 명령을 상기 캐시 디바이스에 발행하는 동작을 포함하는 동작들을 수행하게 하고, 상기 폐기 명령은 상기 캐시 디바이스로 하여금 상기 전송 버퍼로부터 상기 압축된 출력을 제거하게 하도록 구성된다.
예 81: 이 예는 예 65 내지 예 80 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 압축된 출력은 상기 전송 버퍼로부터 제거되기 전에 상기 캐시 디바이스의 상기 메모리에 기입되지 않는다.
예 82: 이 예에 따르면, 캐시 시스템의 프로세서에 의해 실행될 때 데이터 압축 모듈에 의해 하기의 동작들을 수행하게 하는 명령어들을 포함하는 적어도 하나의 컴퓨터 판독가능한 매체가 제공되고, 이 동작들은: 압축 압축해제 엔진에 압축 명령 ―상기 압축 명령은 압축 압축해제 엔진으로 하여금 캐시 제어기 모듈로부터 수신된 캐시 라인의 입력 데이터를 압축하여 압축된 출력을 생성하고 상기 압축된 출력을 캐시 디바이스의 전송 버퍼에 저장하게 하도록 구성됨― 을 발행하는 동작; 리턴 메시지 ―상기 리턴 메시지는 상기 캐시 제어기 모듈로 하여금 상기 압축된 출력의 크기 및 상기 입력 데이터에 기인하는 압축비 중 적어도 하나를 결정하게 하도록 구성됨― 를 상기 캐시 제어기 모듈에 전송하는 동작; 상기 압축된 출력이 상기 캐시 디바이스의 메모리에 기입될 것일 때, 상기 압축된 출력의 크기, 상기 압축비, 또는 이들의 조합에 적어도 부분적으로 기초하여, 상기 압축된 출력의 저장을 위해 상기 캐시 디바이스의 상기 메모리 내의 적어도 하나의 논리적 블록 주소(LBA) 범위를 할당하는 동작을 포함한다.
예 83: 이 예는 예 82의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 명령어들은 실행될 때 또한: 상기 캐시 제어기 모듈로부터의 기입 명령의 수신에 응답하여, 데이터 압축 모듈로 기입 명령을 발행하는 동작을 포함하는 동작들을 수행하게 하고, 상기 기입 명령은 상기 캐시 디바이스로 하여금 상기 압축된 출력을 상기 전송 버퍼로부터 상기 메모리에 기입하게 하도록 구성된다.
예 84: 이 예는 예 82 및 예 83 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 기입 명령의 수신 전에, 상기 압축된 데이터는 상기 캐시 디바이스의 상기 메모리에 기입되지 않는다.
예 85: 이 예는 예 82 및 내지 84 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 명령어들은 실행될 때 상기 데이터 압축 모듈로 하여금 상기 압축된 출력을 태그 ―상기 태그는 상기 입력 데이터와 연관됨― 와 연관시키게 하고; 상기 리턴 메시지는 상기 태그를 포함한다.
예 86: 이 예는 예 82 내지 예 85 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 리턴 메시지는 상기 압축된 출력의 크기를 더 포함한다.
예 87: 이 예는 예 82 및 내지 86 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 리턴 메시지의 전송은 상기 캐시 제어기 모듈로부터의 질의 명령의 수신시에 컨디셔닝된다.
예 88: 이 예는 예 82 및 내지 87 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 리턴 메시지는, 상기 캐시 제어기 모듈로 하여금, 상기 압축된 데이터가 상기 메모리에 기입되기 전에 적어도 하나의 논리적 블록 주소를 할당하게 하도록 구성된다.
예 89: 이 예는 예 82 및 내지 88 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 제어기 모듈에 의해 할당된 적어도 하나의 논리적 블록 주소의 크기는 상기 압축된 출력의 크기와 상관된다.
예 90: 이 예는 예 82 및 내지 89 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 제어기 모듈에 의해 할당된 적어도 하나의 논리적 블록 주소의 크기는 실질적으로 상기 압축된 출력의 크기와 동일하다.
예 91: 이 예는 예 82 내지 예 90 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 리턴 메시지는, 상기 캐시 제어기 모듈로 하여금, 상기 압축된 데이터가 상기 캐시 디바이스의 상기 메모리에 기입되기 전에 상기 압축된 출력을 상기 캐시 디바이스의 상기 메모리에 저장할지를 결정하게 하도록 구성된다.
예 92: 이 예는 예 82 내지 예 91 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 명령어들은 실행될 때 상기 데이터 압축 모듈에 의해 하기의 동작들을 수행하게 하고, 이 동작들은: 상기 캐시 제어기 모듈로부터의 폐기 명령의 수신에 응답하여, 상기 캐시 디바이스에 폐기 명령을 발행하는 동작을 포함하고, 상기 폐기 명령은 상기 캐시 디바이스로 하여금 상기 전송 버퍼로부터 상기 압축된 출력을 제거하게 하도록 구성된다.
예 93: 이 예는 예 82 내지 예 92 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 압축된 출력은 상기 전송 버퍼로부터 제거되기 전에 상기 캐시 디바이스의 상기 메모리에 기입되지 않는다.
예 94: 이 예에 따르면, 예 36 내지 예 52 중 어느 하나의 방법을 수행하기 위해 적어도 부분적으로 하드웨어로 구현된 로직을 포함하는 적어도 하나의 컴퓨터 판독가능한 매체가 제공된다.
예 95: 이 예에 따르면, 예 53 내지 예 64 중 어느 하나의 방법을 수행하기 위해 적어도 부분적으로 하드웨어로 구현된 로직을 포함하는 적어도 하나의 컴퓨터 판독가능한 매체가 제공된다.
예 96: 이 예는 예 1 내지 예 19 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 제어기 모듈, 상기 압축 압축해제 엔진, 및 상기 전송 버퍼는 상기 캐시 디바이스의 일부이고, 상기 캐시 디바이스는 솔리드 스테이트 드라이브이다.
예 97: 이 예는 예 1 내지 예 19 및 예 96 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 시스템은, 프로세서, 버스 및 저장 디바이스를 더 포함하며; 상기 프로세서는 상기 버스를 통해 상기 입력 데이터를 상기 솔리드 스테이트 드라이브에 전송하도록 구성되고; 상기 솔리드 스테이트 드라이브는 상기 저장 디바이스를 위한 캐시로서 구성된다.
예 98: 이 예는 예 20 내지 예 35 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 캐시 제어기 모듈, 상기 데이터 압축 모듈, 상기 압축 압축해제 엔진, 및 상기 전송 버퍼는 상기 캐시 디바이스의 일부이고, 상기 캐시 디바이스는 솔리드 스테이트 드라이브이다.
예 99: 이 예는 예 20 내지 예 35 및 예 98 중 어느 하나의 피쳐들 중 임의의 것 또는 전부를 포함하고, 여기서, 상기 시스템은, 프로세서, 버스 및 저장 디바이스를 더 포함하며; 상기 프로세서는 상기 버스를 통해 상기 입력 데이터를 상기 솔리드 스테이트 드라이브에 전송하도록 구성되고; 상기 솔리드 스테이트 드라이브는 상기 저장 디바이스를 위한 캐시로서 구성된다.
여기서 채용된 용어와 표현들은 제한이 아닌 설명의 관점으로서 사용된 것이고, 이러한 용어와 표현의 사용에 있어서, 도시되고 설명된 피쳐들(또는 그 일부)의 어떠한 균등물을 배제하려는 의도는 없으며, 청구항의 범위 내에서 다양한 수정이 가능하다는 것을 이해해야 한다. 따라서, 청구항은 모든 이러한 균등물들을 포괄하도록 의도된 것이다.

Claims (25)

  1. 캐시 제어기 모듈을 포함하는 시스템으로서, 상기 캐시 제어기 모듈은,
    입력 데이터를 포함하는 압축 명령을 압축 엔진 ―상기 압축 명령은 상기 압축 엔진으로 하여금 상기 입력 데이터를 압축하여 압축된 출력을 생성하고 상기 압축된 출력을 전송 버퍼에 저장하게 하도록 구성됨― 에 전송하고;
    상기 압축된 출력을 캐시 디바이스의 메모리에 커밋(commit)하기 전에 상기 압축된 출력의 크기 및 상기 입력 데이터에 기인하는 압축비 중 적어도 하나를 결정하고;
    상기 압축된 출력이 상기 캐시 디바이스의 상기 메모리에 기입될 것일 때, 상기 압축된 출력의 크기, 상기 압축비 또는 이들의 조합에 적어도 부분적으로 기초하여, 상기 압축된 출력의 저장을 위한 상기 메모리 디바이스 내의 최소한 적어도 하나의 논리적 블록 주소(LBA; logical block address) 범위를 할당하도록 구성된, 시스템.
  2. 제1항에 있어서,
    상기 압축 엔진과 상기 전송 버퍼는 상기 캐시 디바이스의 일부인, 시스템.
  3. 제1항 또는 제2항에 있어서,
    상기 캐시 제어기 모듈은 또한, 상기 입력 데이터를 태그와 연관시키고 상기 압축 명령에서 상기 태그를 전송하도록 구성되며;
    상기 압축 명령에 응답하여, 상기 태그는 임시 버퍼 내의 상기 압축된 출력과 연관되고;
    상기 압축된 출력이 상기 캐시 디바이스의 상기 메모리에 기입될 것일 때, 상기 캐시 제어기 모듈은 상기 태그 및 상기 적어도 하나의 LBA 범위를 포함하는 커밋 명령을 상기 캐시 디바이스에 발행하고, 상기 커밋 명령은 상기 캐시 디바이스로 하여금 상기 태그와 연관된 상기 압축된 출력을 상기 커밋 명령에서 명시된 상기 메모리의 상기 적어도 하나의 LBA 범위에 기입하게 하도록 구성된, 시스템.
  4. 제3항에 있어서,
    상기 캐시 제어기 모듈은 또한,
    상기 캐시 디바이스로부터 리턴 메시지 ―상기 리턴 메시지는 상기 태그 및 상기 압축된 출력의 크기의 측정치를 포함함― 를 수신하고;
    상기 리턴 메시지의 수신에 응답하여, 상기 압축된 출력의 크기 및 상기 입력 데이터에 기인하는 상기 압축비 중 적어도 하나를 결정하도록 구성된, 시스템.
  5. 제1항 또는 제2항에 있어서,
    상기 압축된 출력이 상기 캐시 디바이스의 메모리에 기입될 것일 때, 상기 캐시 제어기 모듈은 또한,
    상기 전송 버퍼로부터 상기 압축된 출력을 판독하고;
    상기 압축된 출력 및 상기 적어도 하나의 LBA 범위를 포함하는 커밋 명령 ―상기 커밋 명령은 상기 캐시 디바이스로 하여금 상기 커밋 명령 내의 압축된 출력을 상기 커밋 명령에서 명시된 메모리의 적어도 하나의 LBA 범위에 기입하게 하도록 구성됨― 을 상기 캐시 디바이스에 전송하도록 구성된, 시스템.
  6. 제5항에 있어서,
    상기 캐시 제어기 모듈은 또한,
    상기 캐시 디바이스로부터 리턴 메시지 ―상기 리턴 메시지는, 상기 압축된 출력이 저장되는 상기 전송 버퍼의 위치를 포함함― 를 수신하고;
    상기 압축된 출력이 저장된 전송 버퍼의 위치를 목표로 하는 판독 명령을 발행함으로써 적어도 부분적으로 상기 압축된 출력을 판독하며;
    상기 전송 버퍼로부터 판독된 상기 압축된 출력으로부터 상기 압축된 출력의 크기 및 상기 입력 데이터에 기인하는 상기 압축비 중 적어도 하나를 결정하도록 구성된, 시스템.
  7. 제1항 또는 제2항에 있어서,
    상기 캐시 제어기 모듈은 상기 압축된 출력을 상기 메모리에 기입하기 전에 상기 적어도 하나의 LBA 범위를 할당하도록 구성된, 시스템.
  8. 제1항 또는 제2항에 있어서,
    상기 캐시 제어기 모듈은 또한, 상기 압축된 출력이 상기 캐시 디바이스의 상기 메모리에 기입되지 않을 것일 때 폐기 명령을 발행하도록 구성되고, 상기 폐기 명령은 상기 캐시 디바이스로 하여금 상기 전송 버퍼로부터 상기 압축된 출력을 제거(purge)하게 하도록 구성된, 시스템.
  9. 제1항 또는 제2항에 있어서,
    상기 캐시 제어기 모듈, 상기 압축 압축해제 엔진, 및 상기 전송 버퍼는 상기 캐시 디바이스의 일부이고, 상기 캐시 디바이스는 솔리드 스테이트 드라이브인, 시스템.
  10. 제10항에 있어서,
    프로세서, 버스 및 저장 디바이스를 더 포함하고,
    상기 프로세서는 상기 버스를 통해 상기 입력 데이터를 상기 솔리드 스테이트 드라이브에 전송하도록 구성되며;
    상기 솔리드 스테이트 드라이브는 상기 저장 디바이스를 위한 캐시로서 구성된, 시스템.
  11. 데이터를 캐싱하는 방법으로서, 캐시 제어기 모듈에 의해:
    캐시 라인의 입력 데이터를 압축을 위해 압축 엔진에 전송하는 단계;
    압축된 출력을 생성하기 위해 상기 입력 데이터를 압축하는 단계;
    상기 압축된 출력을 전송 버퍼에 저장하는 단계;
    상기 압축된 출력의 크기, 상기 입력 데이터에 기인하는 압축비, 또는 이들의 조합에 적어도 부분적으로 기초하여 상기 압축된 출력을 캐시 디바이스의 메모리에 기입할지를 결정하는 단계; 및
    상기 압축된 출력이 상기 메모리에 기입될 것일 때, 상기 압축된 출력의 크기, 상기 입력 데이터에 기인하는 상기 압축비, 또는 이들의 조합에 적어도 부분적으로 기초하여, 상기 압축된 출력의 저장을 위한 상기 메모리의 적어도 하나의 논리적 블록 주소(LBA) 범위를 할당하는 단계
    를 포함하는 방법.
  12. 제11항에 있어서,
    상기 압축된 출력이 상기 메모리에 기입될 것일 때, 상기 캐시 제어기 모듈로부터 커밋 명령을 발행하는 단계를 더 포함하고, 상기 커밋 명령은, 상기 캐시 디바이스로 하여금 상기 압축된 출력을 상기 전송 버퍼로부터 상기 메모리에 기입하게 하도록 구성된, 방법.
  13. 제11항에 있어서,
    상기 캐시 제어기 모듈에 의해:
    데이터 압축 모듈로부터 리턴 메시지를 수신하는 단계; 및
    상기 리턴 메시지로부터 상기 압축된 출력의 크기 및 상기 압축비 중 적어도 하나를 결정하는 단계
    를 더 포함하는 방법.
  14. 제10항 내지 제13항 중 어느 한 항에 있어서,
    상기 입력 데이터를 태그와 연관시키는 단계;
    상기 압축된 출력을 상기 태그와 연관시키는 단계를 더 포함하고,
    상기 압축된 출력이 상기 메모리에 기입될 것일 때, 상기 커밋 명령은 상기 적어도 하나의 LBA 범위 및 상기 태그를 포함하고, 상기 커밋 명령은 상기 캐시 디바이스로 하여금 상기 태그와 연관된 압축된 데이터를 상기 전송 버퍼로부터 상기 메모리에 기입하게 하도록 구성된, 방법.
  15. 제14항에 있어서,
    상기 캐시 제어기 모듈에 의해:
    데이터 압축 모듈로부터 리턴 메시지 ―상기 리턴 메시지는 상기 태그를 포함함― 를 수신하는 단계; 및
    상기 리턴 메시지에 포함된 태그에 적어도 부분적으로 기초하여 상기 압축된 출력의 크기 및 상기 압축비 중 적어도 하나를 결정하는 단계
    를 더 포함하는 방법.
  16. 제10항 내지 제13항 중 어느 한 항에 있어서,
    하나 이상의 캐싱 정책에 적어도 부분적으로 기초하여 상기 압축된 출력을 상기 캐시 디바이스의 상기 메모리에 저장할지를 결정하는 단계를 더 포함하는 방법.
  17. 제10항 내지 제13항 중 어느 한 항에 있어서,
    상기 압축된 출력이 상기 캐시 디바이스의 상기 메모리에 기입되지 않을 것일 때, 폐기 명령 ―상기 폐기 명령은, 상기 캐시 디바이스로 하여금 상기 전송 버퍼로부터 상기 압축된 출력을 제거하게 하도록 구성됨― 을 상기 캐시 디바이스에 발행하는 단계를 더 포함하는 방법.
  18. 캐시 시스템의 프로세서에 의해 실행될 때, 캐시 제어기 모듈에 의해 하기의 동작들을 수행하게 하는 명령어들을 포함하는 적어도 하나의 컴퓨터 판독가능한 매체로서, 이 동작들은,
    캐시 라인의 입력 데이터를 압축을 위해 압축 엔진에 전송하는 동작;
    압축된 출력을 생성하기 위해 상기 입력 데이터를 압축하는 동작;
    상기 압축된 출력을 전송 버퍼에 저장하는 동작;
    상기 압축된 출력의 크기, 상기 입력 데이터에 기인하는 압축비, 또는 이들의 조합에 적어도 부분적으로 기초하여 상기 압축된 출력을 캐시 디바이스의 메모리에 기입할지를 결정하는 동작; 및
    상기 압축된 출력이 상기 메모리에 기입될 것일 때, 상기 압축된 출력의 크기, 상기 입력 데이터에 기인하는 상기 압축비, 또는 이들의 조합에 적어도 부분적으로 기초하여, 상기 압축된 출력의 저장을 위한 상기 메모리의 적어도 하나의 논리적 블록 주소(LBA) 범위를 할당하는 동작
    을 포함하는, 적어도 하나의 컴퓨터 판독가능한 매체.
  19. 제18항에 있어서,
    상기 명령어들은 실행될 때 하기의 동작들을 더 수행하게 하고, 이 동작들은,
    상기 압축된 출력이 상기 메모리에 기입될 것일 때, 상기 캐시 제어기 모듈로부터 커밋 명령 ―상기 커밋 명령은, 상기 캐시 디바이스로 하여금 상기 압축된 출력을 상기 전송 버퍼로부터 상기 메모리에 기입하게 하도록 구성됨― 을 발행하는 동작을 포함하는, 적어도 하나의 컴퓨터 판독가능한 매체.
  20. 제18항 또는 제19항에 있어서,
    상기 명령어들은 실행될 때, 상기 캐시 제어기 모듈에 의해 하기의 동작들을 더 수행하게 하고, 이 동작들은,
    데이터 압축 모듈로부터 리턴 메시지를 수신하는 동작; 및
    상기 리턴 메시지로부터 상기 압축된 출력의 크기 및 상기 압축비 중 적어도 하나를 결정하는 동작
    를 포함하는, 적어도 하나의 컴퓨터 판독가능한 매체.
  21. 제19항에 있어서,
    상기 명령어들은 실행될 때 하기의 동작들을 더 수행하게 하고, 이 동작들은,
    상기 입력 데이터를 태그와 연관시키는 동작;
    상기 압축된 출력을 상기 태그와 연관시키는 동작을 포함하고,
    상기 압축된 출력이 상기 메모리에 기입될 것일 때, 상기 커밋 명령은 상기 적어도 하나의 LBA 범위 및 상기 태그를 포함하고, 상기 커밋 명령은 상기 캐시 디바이스로 하여금 상기 태그와 연관된 압축된 데이터를 상기 전송 버퍼로부터 상기 메모리에 기입하게 하도록 구성된, 적어도 하나의 컴퓨터 판독가능한 매체.
  22. 제21항에 있어서,
    상기 명령어들은 실행될 때 하기의 동작들을 더 수행하게 하고, 이 동작들은,
    데이터 압축 모듈로부터 리턴 메시지 ―상기 리턴 메시지는 상기 태그를 포함함― 를 수신하는 동작; 및
    상기 리턴 메시지에 포함된 태그에 적어도 부분적으로 기초하여 상기 압축된 출력의 크기 및 상기 압축비 중 적어도 하나를 결정하는 동작
    을 포함하는, 적어도 하나의 컴퓨터 판독가능한 매체.
  23. 제18항, 제19항, 제21항, 및 제22항 중 어느 한 항에 있어서,
    상기 적어도 하나의 LBA 범위를 할당하는 동작은, 상기 압축된 데이터를 상기 메모리에 기입하기 전에 발생하는, 적어도 하나의 컴퓨터 판독가능한 매체.
  24. 제18항, 제19항, 제21항, 및 제22항 중 어느 한 항에 있어서,
    하나 이상의 캐싱 정책에 적어도 부분적으로 기초하여 상기 압축된 출력을 상기 캐시 디바이스의 상기 메모리에 저장할지를 결정하는 동작을 더 포함하는, 적어도 하나의 컴퓨터 판독가능한 매체.
  25. 제18항, 제19항, 제21항, 및 제22항 중 어느 한 항에 있어서,
    상기 압축된 출력이 상기 캐시 디바이스의 상기 메모리에 기입되지 않을 것일 때, 폐기 명령 ―상기 폐기 명령은, 상기 캐시 디바이스로 하여금 상기 전송 버퍼로부터 상기 압축된 출력을 제거하게 하도록 구성됨― 을 상기 캐시 디바이스에 발행하는 동작을 더 포함하는, 적어도 하나의 컴퓨터 판독가능한 매체.
KR1020177005353A 2014-09-26 2015-08-31 데이터 압축을 채용하는 캐싱 기술들 KR20170036075A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/497,392 US20160092361A1 (en) 2014-09-26 2014-09-26 Caching technologies employing data compression
US14/497,392 2014-09-26
PCT/US2015/047758 WO2016048599A1 (en) 2014-09-26 2015-08-31 Caching technologies employing data compression

Publications (1)

Publication Number Publication Date
KR20170036075A true KR20170036075A (ko) 2017-03-31

Family

ID=55581788

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177005353A KR20170036075A (ko) 2014-09-26 2015-08-31 데이터 압축을 채용하는 캐싱 기술들

Country Status (6)

Country Link
US (1) US20160092361A1 (ko)
KR (1) KR20170036075A (ko)
CN (1) CN106575260A (ko)
DE (1) DE112015003540T5 (ko)
TW (1) TWI594121B (ko)
WO (1) WO2016048599A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200051835A (ko) * 2017-10-16 2020-05-13 알테릭스 인코포레이티드 데이터 분석 시스템에서의 메모리 할당

Families Citing this family (14)

* 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
US10168939B2 (en) * 2015-11-24 2019-01-01 International Business Machines Corporation Reading records from a tape medium
US10490238B2 (en) * 2017-06-29 2019-11-26 SK Hynix Inc. Serializer and memory device including the same
CN111108485B (zh) * 2017-08-08 2023-11-24 大陆汽车科技有限公司 操作高速缓存的方法
US10747442B2 (en) 2017-11-29 2020-08-18 International Business Machines Corporation Host controlled data chip address sequencing for a distributed memory buffer system
US10489069B2 (en) 2017-11-29 2019-11-26 International Business Machines Corporation Address/command chip synchronized autonomous data chip address sequencer for a distributed buffer memory system
US10395698B2 (en) 2017-11-29 2019-08-27 International Business Machines Corporation Address/command chip controlled data chip address sequencing for a distributed memory buffer system
US10534555B2 (en) 2017-11-29 2020-01-14 International Business Machines Corporation Host synchronized autonomous data chip address sequencer for a distributed buffer memory system
CN109558088B (zh) * 2018-12-03 2021-12-17 郑州云海信息技术有限公司 一种压缩方法、系统、设备及计算机可读存储介质
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
JP2020154525A (ja) * 2019-03-19 2020-09-24 キオクシア株式会社 メモリシステムおよび情報処理システム
US11054993B2 (en) 2019-05-28 2021-07-06 Intel Corporation Mass storage system having peer-to-peer data movements between a cache and a backend store
CN113656364B (zh) * 2021-08-05 2024-02-20 福瑞泰克智能系统有限公司 传感器数据处理方法、装置和计算机可读存储介质
CN114579050B (zh) * 2022-02-14 2024-04-02 阿里巴巴(中国)有限公司 处理压缩数据的方法以及装置

Family Cites Families (15)

* 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
US6879266B1 (en) * 1997-08-08 2005-04-12 Quickshift, Inc. Memory module including scalable embedded parallel data compression and decompression engines
US6735673B2 (en) * 2002-01-10 2004-05-11 Hewlett-Packard Development Company, L.P. Apparatus and methods for cache line compression
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
JP4653830B2 (ja) * 2008-09-19 2011-03-16 株式会社東芝 命令キャッシュシステム
US8479080B1 (en) * 2009-07-12 2013-07-02 Apple Inc. Adaptive over-provisioning in memory systems
US20110161560A1 (en) * 2009-12-31 2011-06-30 Hutchison Neil D Erase command caching to improve erase performance on flash memory
WO2012056493A1 (en) * 2010-10-26 2012-05-03 Hitachi, Ltd. File management method and computer system
CN102129873B (zh) * 2011-03-29 2012-07-04 西安交通大学 提高计算机末级高速缓存可靠性的数据压缩装置及其方法
WO2013048497A1 (en) * 2011-09-30 2013-04-04 Intel Corporation Apparatus and method for implementing a multi-level memory hierarchy
US20130265305A1 (en) * 2012-04-04 2013-10-10 Jon N. Hasselgren Compressed Depth Cache
WO2014028183A1 (en) * 2012-08-13 2014-02-20 Lsi Corporation Fractional redundant array of silicon independent elements
US20140098852A1 (en) * 2012-10-05 2014-04-10 Samsung Display Co., Ltd. Compression bandwidth overflow management using auxiliary control channel
US9053121B2 (en) * 2013-01-10 2015-06-09 International Business Machines Corporation Real-time identification of data candidates for classification based compression
CN103326730B (zh) * 2013-06-06 2016-05-18 清华大学 数据并行压缩方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200051835A (ko) * 2017-10-16 2020-05-13 알테릭스 인코포레이티드 데이터 분석 시스템에서의 메모리 할당
US10996855B2 (en) 2017-10-16 2021-05-04 Alteryx, Inc. Memory allocation in a data analytics system

Also Published As

Publication number Publication date
DE112015003540T5 (de) 2017-05-04
CN106575260A (zh) 2017-04-19
TWI594121B (zh) 2017-08-01
TW201629774A (zh) 2016-08-16
WO2016048599A1 (en) 2016-03-31
CN106575260A8 (zh) 2017-07-11
US20160092361A1 (en) 2016-03-31

Similar Documents

Publication Publication Date Title
KR20170036075A (ko) 데이터 압축을 채용하는 캐싱 기술들
KR102584018B1 (ko) 압축된 데이터 백그라운드를 캐싱하는 장치, 시스템 및 방법
US10761977B2 (en) Memory system and non-transitory computer readable recording medium
US10324832B2 (en) Address based multi-stream storage device access
US9811462B2 (en) Memory system executing garbage collection
TW201732597A (zh) 資料儲存裝置和其操作方法
US20130339576A1 (en) Method for constructing address mapping table of solid state drive
US11620066B2 (en) Storage device with expandible logical address space and operating method thereof
JP2010146326A (ja) 記憶装置、その制御方法及びその記憶装置を用いた電子装置
CN108958642B (zh) 存储器系统及其操作方法
US20150293845A1 (en) Multi-level memory hierarchy
US9037781B2 (en) Method for managing buffer memory, memory controllor, and memory storage device
US20230281118A1 (en) Memory system and non-transitory computer readable recording medium
US20160266827A1 (en) Memory controller, memory device, data transfer system, data transfer method, and computer program product
US10387579B2 (en) Data pattern detecting device, semiconductor device including the same, and operating method thereof
KR102330394B1 (ko) 컨트롤러의 작동 방법과 상기 컨트롤러를 포함하는 장치의 작동 방법
KR20150116627A (ko) 컨트롤러 및 그것을 포함하는 데이터 저장 장치
US20170115925A1 (en) Valid data merging method, memory controller and memory storage apparatus
US10891239B2 (en) Method and system for operating NAND flash physical space to extend memory capacity
US20150160860A1 (en) Memory management using enlarged address space
JP2009123185A (ja) フラッシュメモリ装置及びそのアクセス方法

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application