KR20150090211A - 압축되고 컴팩트화된 가상 메모리를 위한 방법 및 장치 - Google Patents

압축되고 컴팩트화된 가상 메모리를 위한 방법 및 장치 Download PDF

Info

Publication number
KR20150090211A
KR20150090211A KR1020157017157A KR20157017157A KR20150090211A KR 20150090211 A KR20150090211 A KR 20150090211A KR 1020157017157 A KR1020157017157 A KR 1020157017157A KR 20157017157 A KR20157017157 A KR 20157017157A KR 20150090211 A KR20150090211 A KR 20150090211A
Authority
KR
South Korea
Prior art keywords
memory
compressed
units
data
uncompressed
Prior art date
Application number
KR1020157017157A
Other languages
English (en)
Other versions
KR101739213B1 (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 KR20150090211A publication Critical patent/KR20150090211A/ko
Application granted granted Critical
Publication of KR101739213B1 publication Critical patent/KR101739213B1/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
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0662Virtualisation aspects
    • G06F3/0664Virtualisation aspects at device level, e.g. emulation of a storage device or system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0685Hybrid storage combining heterogeneous device types, e.g. hierarchical storage, hybrid arrays
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Memory System (AREA)

Abstract

본 명세서에는 가상 메모리를 위해 압축된 메모리의 동적으로 업데이트된 부분을 포함하는 메모리 디바이스에 대한 방법 및 장치가 기술되었다. 메모리 디바이스는 메모리의 압축된 부분으로부터 분리된 메모리의 비압축 부분을 포함할 수 있다. 가상 메모리는 메모리의 압축된 부분으로 메모리 어드레스를 맵핑할 수 있다. 메모리의 비압축 부분 내에 할당된 메모리 영역은 메모리의 압축된 부분으로 압축될 수 있다. 그 결과, 메모리 영역은 메모리 디바이스에서 요청된 미래의 할당에 (예를 들어, 압축된 후에) 이용가능하게 될 수 있다. 메모리의 압축된 부분은 압축된 메모리 영역을 저장하도록 업데이트될 수 있다. 압축된 메모리 영역은 압축된 메모리 영역 내의 데이터에 액세스하라는 요청에 응답하여 메모리 디바이스 내의 비압축 부분으로 다시 압축해제될 수 있다.

Description

압축되고 컴팩트화된 가상 메모리를 위한 방법 및 장치{METHODS AND APPARATUS FOR COMPRESSED AND COMPACTED VIRTUAL MEMORY}
본 발명은 일반적으로 메모리 시스템들에 관한 것이다. 보다 구체적으로, 본 발명은 가상 메모리 시스템들을 위한 압축 및/또는 컴팩트화된 메모리에 관한 것이다.
가상화 기술은 메모리 디바이스의 실질적인 물리적 용량을 초과하는 크기를 갖는 메모리 공간에 대한 메모리 관리를 개선하도록 개발되어왔다. 전형적으로, 메모리 가상화는 메모리 디바이스에 연결된 저장 디바이스를 이용한 메모리 스와핑(memory swapping)에 기초할 수 있다. 메모리 객체 및/또는 IO(입력/출력) 크기가 결정론적이지 않기 때문에, 압축되지 않은 메모리의 서로 다른 크기 또는 페이지가 저장 디바이스와 메모리 디바이스 사이에서 스와핑 인/아웃될 수 있다. 그 결과, IO 처리량 및/또는 스왑 메모리에 대해 저장된 메모리 데이터를 전송하기 위한 레이턴시(latency)가 가상 메모리 시스템의 성능에 부정적인 영향을 미칠 수 있다.
또한, 스핀 기반 하드 디스크와 같은 소정의 저장 디바이스의 성능이 긴 디스크 스핀을 감소시키도록 메모리 액세스에 대한 데이터 로컬리티에 강하게 의존할 수 있다. 그러나, 메모리 액세스를 위한 클러스터링 특징들이 서로 다른 데이터 프로세싱 태스크에서 달라지기 때문에 데이터 로컬리티가 런타임 동안 보장되지 않을 수 있다. 따라서, 포괄적인 데이터 프로세싱 태스크를 지원하기 위한 메모리 디바이스와 저장 디바이스 사이의 페이징 인/아웃에 의한 메모리 스와핑은 메모리 시스템의 허용된 성능을 더 저하시킬 수 있다.
점점 더 큰 크기의 실질적인 물리적 메모리를 채택하는 트렌드가 디바이스 메모리 사이 스왑의 성능 비용을 경감시키는 경향이 있지만, 데이터 프로세싱 시스템에서의 소정의 특성 개선사항들이 메모리 크기 변화 없이 제공될 수 있다. 예를 들어, 더 높은 스크린 해상도에 대한 지원이 실질적으로 동일한 메모리 크기에 기초하여 현존하는 디바이스 상에 도입될 수 있다. 그러나, 단지 2배 더 높은 스크린 해상도가 윈도우 버퍼 크기의 4배 증가에 상응할 수 있다. 그 결과, 물리적 메모리 크기에서의 보상 증가 없이는, 더 높은 스크린 해상도를 위한 시스템 성능이 저하되고 더 느리게 보이게 될 수 있다.
따라서, 가상 메모리 시스템의 종래의 구현은 제한된 물리적 메모리 크기에 의해 제약된 성능 요구사항을 지원할 수 없다.
메모리 디바이스 내에서 동적으로 유지되는 압축된 메모리 풀은 대용량 저장 디바이스와 연결된 메모리 디바이스에 기초하여 가상 메모리를 위한 추가적인 지지층을 제공할 수 있다. 가상 메모리 어드레스는 메모리 디바이스의 비압축 부분, 압축된 메모리 풀 및/또는 저장 디바이스로 페이징 또는 맵핑될 수 있다. 압축된 메모리 풀은 가상 메모리에 대한 크기 제한 없이 메모리 디바이스 내에서 증가 및 축소할 수 있다.
일 실시예에서, 메모리 페이지(예를 들어, 비압축 메모리의 영역의 유닛)가 압축된 메모리 내의 압축된 메모리 유닛(또는 압축된 페이지)으로 압축될 수 있다. 다수의 압축된 메모리 유닛들은 압축된 메모리 내의 고정된 크기의 세그먼트로서 함께 컴팩트화될 수 있다. 세그먼트는 가상 메모리 페이저를 지지하도록 압축된 메모리 유닛의 세그먼트들을 스와핑 인/아웃하기 위해 메모리 디바이스와 대용량 저장 디바이스 사이에서의 효율적인 데이터 전송을 위한 크기를 가질 수 있다.
다른 실시예에서, 메모리 디바이스는 가상 메모리를 위해 압축된 메모리의 동적으로 업데이트된 부분을 포함할 수 있다. 메모리 디바이스는 메모리의 압축된 부분으로부터 분리된 메모리의 비압축 부분을 포함할 수 있다. 가상 메모리는 메모리의 압축된 부분으로 메모리 어드레스를 맵핑할 수 있다. 메모리의 비압축 부분 내에 할당된 메모리 영역은 메모리의 압축된 부분으로 압축될 수 있다. 그 결과, 메모리 영역은 메모리 디바이스에서 요청된 미래의 할당(future allocation)에 (예를 들어, 압축된 후에) 이용가능하게 될 수 있다. 메모리의 압축된 부분은 압축된 메모리 영역을 저장하도록 업데이트될 수 있다. 압축된 메모리 영역은 압축된 메모리 영역 내의 데이터에 액세스하라는 요청에 응답하여 메모리 디바이스 내의 비압축 부분으로 다시 압축해제될 수 있다.
다른 실시예에서, 메모리 디바이스에 기초한 가상 메모리가 제공된다. 메모리 디바이스는 메모리의 비압축 부분 및 DRAM(휘발성 메모리)와 같은 메모리의 압축된 부분으로 동적으로 분할될 수 있다. 메모리의 비압축 부분은 메모리 디바이스에 연결된 프로세서를 통해 프로세싱되는 작업 데이터를 저장할 수 있다. 메모리의 비압축 부분의 하나 이상의 페이지는 메모리의 압축된 부분 내의 하나 이상의 다양한 크기의 압축된 메모리 유닛으로 압축될 수 있다. 압축은 메모리의 비압축 부분 내의 이용가능한 메모리 공간을 증가시킬 수 있다. 압축된 메모리 유닛은, 예를 들어 압축된 메모리 유닛들 중 하나의 압축된 메모리 유닛 내의 데이터에 대한 액세스 요청에 대한 페이지 오류에 응답하여, 메모리의 압축된 부분으로부터 메모리의 비압축 부분으로 다시 압축해제될 수 있다. 적어도 하나의 다양한 크기의 압축된 메모리 유닛은 메모리의 비압축 부분 내의 이용가능한 메모리 공간을 증가시키기 위해 메모리의 압축된 부분으로부터 대용량 저장 디바이스로 스와핑-아웃될 수 있다.
다른 실시예에서, 메모리 디바이스의 비압축 부분의 하나 이상의 메모리 페이지가 메모리 디바이스의 압축된 부분 내의 하나 이상의 다양한 크기의 압축된 메모리 유닛으로 압축될 수 있다. (자기 하드 드라이브(HDD) 또는 파일 시스템의 관점에서 하나의 논리적 볼륨으로 처리되고 HDD 및 플래시 메모리를 포함하는 합성 저장 디바이스와 같은) 대용량 저장 디바이스가 메모리 디바이스와 연결될 수 있다. 다양한 크기의 압축된 메모리 유닛은 메모리 디바이스의 압축된 부분 내의 세그먼트로 컴팩트화될 수 있다. 하나의 압축된 메모리 유닛은 압축된 메모리 유닛들 중 하나의 압축된 메모리 유닛에 대한 액세스 요청에 응답하여 메모리 디바이스의 압축된 부분으로부터 비압축 부분으로 압축해제될 수 있다. 압축된 메모리 유닛의 세그먼트는 메모리 디바이스 내의 이용가능한 메모리 공간을 증가시키도록 대용량 저장 디바이스로 스와핑-아웃될 수 있다.
본 발명의 다른 특징들이 첨부 도면 및 다음의 발명을 실시하기 위한 구체적인 내용으로부터 자명할 것이다.
본 발명이 첨부 도면의 도면들에 제한이 아닌 예로서 도시되며, 도면에서 유사한 도면 부호는 유사한 요소를 지시한다.
도 1은 압축된 및/또는 컴팩트화된 메모리에 기초한 가상 메모리 시스템의 일 실시예를 도시한 블록도.
도 2는 가상 메모리를 위해 메모리를 압축 및 비압축하는 일 실시예를 도시한 순서도.
도 3은 가상 메모리를 위해 압축된 메모리 페이지들을 스와핑하는 프로세스의 일 실시예를 도시한 순서도.
도 4는 가상 메모리를 위해 압축된 메모리의 컴팩트화된 세그먼트를 스와핑하는 프로세스의 일 실시예를 도시한 순서도.
도 5는 본 명세서에 기술된 실시예들과 함께 사용될 수 있는 컴퓨터 시스템과 같은 데이터 프로세싱 시스템의 일 예시를 도시한 도면.
본 명세서에는 압축되고 컴팩트화된 가상 메모리를 위한 방법 및 장치가 기술되었다. 하기의 설명에서, 많은 구체적인 상세사항이 본 발명의 실시예의 완벽한 설명을 제공하기 위해 기재된다. 그러나, 본 발명의 실시예가 이들 구체적인 상세사항 없이도 실시될 수 있음이 당업자에게 자명할 것이다. 다른 경우에, 주지된 컴포넌트, 구조, 및 기법은 본 설명의 이해를 어렵게 하지 않도록 상세히 나타내지 않았다.
본 명세서에서의 "하나의 실시예" 또는 "일 실시예"에 대한 언급은, 그 실시예와 관련하여 기술된 특정한 특징, 구조, 또는 특성이 본 발명의 적어도 하나의 실시예에 포함될 수 있음을 의미한다. 본 명세서의 다양한 부분에서 나오는 "일 실시예에서"라는 문구는 반드시 모두 동일한 실시예를 지시하지 않는다.
아래에서 도면에 도시된 프로세스가 하드웨어(예로서, 회로, 전용 로직 등), (범용 컴퓨터 시스템 또는 전용 기계 상에서 실행하는 것과 같은) 소프트웨어, 또는 이들의 조합을 포함하는 프로세싱 로직에 의해 수행된다. 프로세스들이 몇 개의 순차적 동작들의 관점에서 하기에 기술되지만, 기술된 동작들 중 일부는 상이한 순서로 수행될 수 있음이 이해되어야 한다. 또한, 일부 동작들은 순차적이 아닌 병행(in parallel) 수행될 수 있다.
일 실시예에서, 메모리 디바이스 내의 압축 풀(또는 압축된 메모리 유닛들의 풀)이 로그 기반 데이터 구조(또는 로그 구조)를 이용하여 동적으로 관리될 수 있다. 데이터는 데이터를 저장하기 위해 요구되는 메모리 공간을 축소시키기 위해서 패킹 및/또는 압축된 방식으로 압축 풀 내에 넣어질 수 있다. 저장된 데이터를 압축 풀과 대용량 저장 디바이스(또는 비휘발성 저장 장치) 사이에서 언제 스와핑할지는, 예를 들어, 가상 메모리 시스템 또는 다른 적용가능한 메모리 사용 모듈을 언더라잉 압축 풀로부터 격리하기 위해 스스로 포함된 압축된 메모리 관리 시스템에서 자동으로 결정될 수 있다.
메모리 데이터는, 예를 들어 메모리 디바이스와 대용량 저장 디바이스와 같은 스왑 디바이스 사이의 데이터 전송 효율성을 위해, 스왑 파일 크기를 감소시키도록 압축될 수 있다. 또한, 메모리 데이터는 스왑 디바이스를 이용한 종래의 디스크 스왑 속도보다 뚜렷하게 더 낮은(예로서, 수 자릿수) 압축/압축해제 비용(예로서, 수 마이크로 초 내)을 갖는 효율적인 메모리 압축 방안에 기초하여 압축 풀로 압축될 수 있다. 압축 풀은 스왑 디바이스를 이용해 요구되는 스와핑 동작을 감소시키기 위해 필요한 메모리 디바이스 내의 크기를 증가시킬 수 있다.
예를 들어, 압축 풀은 압축 풀의 안/팎으로 데이터를 시프트하기 위한 메모리 압축/압축해제 동작을 수행하도록 충분한 메모리 공간이 남아있는 한(예를 들어, 적은 수의 메모리 페이지), 이용가능한 물리적 메모리 크기만큼 증가하고 작업할 수 있다. 작업 세트는 압축 풀이 증가/축소할 때 다양한 크기를 갖는 메모리의 비압축 부분에 들어맞도록 유지될 수 있다. 만약 작업 세트(예를 들어, 프로세서의 데이터 동작을 위한 라이브 태스크들의 세트에 할당되는 메모리)가 압축 풀(또는 메모리의 압축된 부분)로 유출되면, 메모리 페이지들은 작업 세트를 지원하기 위해 메모리의 압축 및 비압축 부분들(또는 층들) 사이에서 치환하도록 (예로서, 소정의 사전결정된 레이트에 기초하여) 압축된 부분으로부터 당겨질 수 있다. 현존하는 작업 세트가 넘쳤음을 나타내기 위해 추가의 메모리 공간을 할당하라는 요청 또는 요구가 검출될 수 있다. 작업 세트는 어떤 메모리 페이지가 압축 풀로 압축될지를 선택하기 위해 최소한 최근에 사용된(LRU; least recently used) 순서 전략을 통해 확장될 수 있다.
일 실시예에서, 다수의 압축/압축해제 방안 또는 메커니즘이 런타임 동안 동적으로 선택될 수 있다. 각 방안은 하나 이상의 압축/압축해제 알고리즘에 기초할 수 있다. 선택은 메모리의 생산자(예로서, 할당을 개시 또는 요청하는 애플리케이션 또는 프로세스)에 의해 제공되는 힌트 또는 경험에 기초하여 이루어질 수 있거나, 또는 데이터의 특정한 패턴에 대해 곧 압축될 메모리의 각 페이지를 조사함으로써 결정될 수 있다. 일 실시예에서, 압축/압축해제 방안들 중 하나는 (예를 들어, 상응하는 메모리 생산자에 의해 제공되는 어떠한 힌트도 없이) 할당된 메모리들의 다수에 적용가능한 디폴트 방안으로서 지정될 수 있다. 이러한 방안은, 패턴 매칭 메커니즘이 재생 중이었고 어떠한 매칭도 이루어지지 않은 경우에도 디폴트 방안으로서 사용될 수 있다. 전문화된 압축/압축해제 방안으로부터 이익을 얻을 수 있는(예를 들어, 보다 효율적인 압축을 찾을 수 있는) 하나의 후보는 (예로서, GPU를 통한) 그래픽 동작에 의한 사용을 위해 생성되는 메모리이다.
일부 실시예들에서, 컴팩트화 동작은 압축된 메모리 세그먼트 내의 로그 구조를 유지하도록 압축 풀 내에서 수행될 수 있다. 예를 들어, 압축된 데이터 유닛은 (예로서, 마이너 컴팩트화를 위한) 하나의 압축 메모리 세그먼트 내에서 및/또는 (예로서, 메이저 컴팩트화를 위한) 다수의 압축 메모리 세그먼트에 걸쳐 함께 패킹될 수 있다. 컴팩트화 동작은 요청에 따라 개시될 수 있고/있거나 압축된 데이터가 압축된 메모리로부터 제거되거나 압축된 메모리 내에 저장될 때 자동으로 개시될 수 있다. 로그 구조는 메모리 디바이스 내에서 및/또는 커플링 저장 디바이스들 사이에 압축 풀 상의 효율적인 입력/출력 동작(예로서, 판독/기록 동작)들을 가능하게 할 수 있다.
일 실시예에 따르면, 압축된 데이터가 압축 풀로부터 꺼내지면, 홀(즉, 압축된 데이터가 이전에 차지했던 빈 메모리 공간)이 생성될 수 있다. 그 결과, 압축 풀의 메모리 사용이 줄어들 수 있고 만약 이러한 홀이 제거되지 않으면 효율성이 낮아질 수 있다. 마이너 컴팩트화 동작은 메모리 세그먼트 내의 홀들의 수를 감소시키도록 압축 풀 내의 메모리 세그먼트(예를 들어, 로그 구조) 내에서 압축된 데이터를 이동시키도록 수행될 수 있다. 일 실시예에서, 마이너 컴팩트화 동작은 메모리 디바이스 내의 메모리 페이지의 추가적인 할당을 가능하게 하도록 수행될 수 있다. 마이너 컴팩트화 동작은 데이터 프로세싱 레이턴시(latency)에서 뚜렷한 향상을 발생시키는 데에 미미한 프로세싱 리소스를 비용으로 들일 수 있다.
일 실시예에서, 메이저 컴팩트화 동작은, 예를 들어 압축된 데이터를 스왑 디바이스로 스와핑-아웃할 필요가 있을 때, 마이너 컴팩트화 동작에 추가로 압축 풀의 서로 다른 메모리 세그먼트들 사이에서 압축된 데이터를 이동시키도록 수행될 수 있다. 압축 풀 내에서 요구되는 메모리 세그먼트의 수는 메이저 컴팩트화 동작의 결과로서 감소될 수 있다. 압축 풀의 메모리 세그먼트 내의 사용되지 않은 메모리 공간은, 예를 들어 커다란 청크의 압축된 메모리 페이지들을 스왑 디바이스에 기록하는 것을 가능하게 하도록 긴축 (또는 감소)될 수 있다. 그 결과, (예를 들어, 메모리 디바이스와 스왑 디바이스 사이의) 이용가능한 IO 대역폭이 최대화될 수 있다. 또한, (SSD 디바이스와 같은) 스왑 디바이스에 대한 마모량이 최소화될 수 있다.
일 실시예에서, 마이너 컴팩트화 동작, 메이저 컴팩트화 동작 또는 압축 풀 내의 효율적인 메모리 저장 사용을 유지하기 위한 다른 적용가능한 데이터 이동 동작을 언제 수행할지 결정하는 컴팩트화 모델에 기초하여 컴팩트화 동작들이 수행된다. 마이너 컴팩트화 동작은 이용가능한 메모리 공간을 증가 또는 해제하기 위해 하나의 메모리 세그먼트 내에서 압축된 데이터를 셔플링하도록 수행될 수 있다. 메이저 컴팩트화 동작은, 예를 들어 압축 풀로부터 스왑 디바이스로 전체 크기 내의 메모리 세그먼트를 스와핑-아웃하기 위한 준비도를 보장하도록, 다수의 메모리 세그먼트들 사이에서 압축된 데이터를 이동시키도록 수행될 수 있다. 메모리 세그먼트는 실질적으로 홀이 없다면 풀 크기일 수 있거나 또는 예를 들어 사전결정된 문턱값(예를 들어, 99%)보다 큰 메모리 사용률을 가질 수 있다.
따라서, 예를 들어 256KB, 512KB, 1024KB와 같거나 다른 적절한 크기의 동일한 크기인, 데이터 청크(예를 들어, 압축 세그먼트)에 기초하여, 압축 풀로부터 (예를 들어, 스왑 디바이스 내의) 스왑 파일에 기록하는 IO 동작을 수행할 때 로그 구조화된 데이터(또는 모델)가 유지될 수 있다. 일 실시예에서, 메모리 스와핑을 위한 IO 동작 중에 전송되는 데이터 청크는 IO 성능을 향상시키도록 (예를 들어, IO 버스 버퍼 크기와 일치하는) 스왑 디바이스를 갖는 IO 인터페이스에 따른 압축 메모리 페이지들의 집합에 상응할 수 있다. 결과적으로, 압축 풀과 스왑 디바이스 사이의 IO 동작의 효율성 또는 처리량이 스왑 디바이스에 대한 전송된 데이터의 압축 및 매칭 전송 데이터 청크 크기에 기초하여 향상될 수 있다.
일 실시예에서, 압축 풀 내의 로그 구조화된 데이터는 메모리 세그먼트들의 순서화된 리스트를 포함할 수 있다. 새롭게 압축된 데이터는 순서화된 세그먼트 리스트의 헤드 세그먼트(또는 기록 헤드) 내에 기록될 수 있다. 압축 풀 내의 순서화된 세그먼트 리스트들에 기초하여 압축 풀의 어떤 부분을 스와핑-아웃할지를 결정하도록 가상 메모리 시스템에 대한 작업 세트 분석이 수행될 수 있다. 예를 들어, 세그먼트가 순서화된 리스트 내에서 헤드 세그먼트로부터 더 멀리 위치되면, 작업 세트에 대한 관심있는 (또는 즉시 필요한) 세그먼트 내에 저장된 압축된 데이터가 더 이상 존재하지 않을 가능성이 더 높다. 그 결과, 테일 세그먼트(또는 기록 헤드의 반대쪽 끝)가 스왑 디바이스로 스와핑-아웃되도록 선택될 수 있다. 압축된 데이터는 컴팩트화된 메모리 세그먼트에 기초하여 스왑 디바이스로부터 압축 풀 내로/압축 풀로부터 스왑 디바이스로 운반될 수 있다.
메모리 스왑 동작을 수행할 필요성은, 예를 들어 압축 풀의 크기에 대한 상한을 두기 위해 식별될 수 있다. 압축 풀의 크기(또는 형태)는 런타임 메모리 액세스 패턴에 동적으로 기초하여 변화할 수 있다. 일 실시예에서, 언제 스왑 동작을 수행할지를 결정하기 위한 비용(예를 들어, 전력 소비 비용) 모델에 기초하여 컴팩트화/압축/압축해제 동작들 대 메모리 스왑 동작들의 프로세싱 비용이 동적으로 모니터링(또는 예측)될 수 있다.
예를 들어, 압축, 압축해제 및/또는 컴팩트화 동작의 속도는 메모리 디바이스 내의 압축 풀(또는 압축 층, 압축 부분)의 상태를 나타내기 위한 파워(또는 프로세싱 리소스 소비)에 상응할 수 있다. 만약 이 속도가 소정의 문턱값을 초과하면, 스왑 동작은 압축된 데이터를 압축 풀로부터 스왑 디바이스로 페이지 아웃하도록 수행되거나 트리거될 수 있다. 일 실시예에서, 압축/압축해제 및/또는 컴팩트화 동작은 스왑 동작에서의 데이터 IO 거래와 비교하여 프로세싱 비용의 일부를 발생시킬 수 있다. 전력 비용 함수는 압축된 데이터를 스왑 디바이스로 페이징 아웃하기 위한 필요성이 발생하기 전에 압축 풀이 증가하는 것을 가능하게 하도록 평가될 수 있다. 비용 함수는, 예를 들어 컴팩트화/압축/압축해제 동작들에 의해 발생되는 프로세싱 레이턴시를 견디도록 구성된 압축 풀의 형태, 또는 메모리 디바이스 내의 작업 세트를 유지하기 위한 다른 적용가능한 인자에 의존할 수 있다.
메모리 디바이스 내의 압축 풀은 스왑 디바이스로/로부터 요구되는 데이터 페이징(예를 들어, 스왑 동작)의 수를 감소시킴으로써 전력을 절약하는 것을 가능하게 할 수 있다. 예를 들어, 데이터가 압축될 때, 더 적은 수의 데이터 페이징 또는 파일 페이징이 요구된다. 또한, 각 데이터 페이징 또는 스왑 동작에서의 효율성 또는 유효성이 로그 기반 구조를 통해 압축된 데이터를 운반하는 컴팩트화된 세그먼트를 이용하여 향상될 수 있다.
일부 실시예들에서, 압축 풀 내의 로그 구조 기반 메모리 세그먼트들의 리스트들은 각 세그먼트 내에 저장된 압축된 데이터의 연식에 상응하게 순서화될 수 있다. 압축된 데이터의 연식은 데이터가 작업 세트로부터 얼마나 일찍 압축되었는지 또는 작업 세트에 액세스되었는지를 나타낼 수 있다. 스왑 동작은 작업 세트로부터 에이징-아웃된 메모리 세그먼트(예를 들어, 순서화된 세그먼트 리스트의 테일 부분)를 기록할 수 있다. 그 결과, 압축 풀로부터 스왑 디바이스(예를 들어, 디스크)로 스와핑되도록 선택된 압축된 데이터가 잠시 동안 사용되지 않은 컴팩트화된 메모리 세그먼트 내에 저장될 수 있다. 스왑 동작은 예를 들어 작업 세트를 위한 또는 작업 세트의 성장을 수용하는 공간을 만들도록 수행될 수 있다. 반면에, 유지 목적을 위한 메모리 디바이스로부터 스왑 디바이스 또는 디스크 디바이스로의 주기적인 데이터 기록(예를 들어, 파일 또는 데이터 백업/동기화)이 방지되거나 감소될 수 있으며 이는 상당한 전력을 절약한다.
압축 풀은 시스템 하이버네이션(hibernation) 및/또는 웨이크업을 위한 빠른 동작을 위한 메커니즘을 제공할 수 있다. 예를 들어, 메모리 디바이스의 압축된 부분 및 비압축 부분이 하이버네이션된 (또는 슬립) 상태에 진입하기 위해 시스템에 대한 비휘발성 저장 디바이스(예로서, 디스크) 내에 따로따로 백업(또는 저장)될 수 있다. 압축된 부분(또는 압축 풀)은 컴팩트화된 메모리 세그먼트를 통해 비휘발성 저장 디바이스로 전송(또는 푸시)될 수 있다. (예를 들어, 전류 작업 세트를 포함하는) 메모리의 비압축 부분이 컴팩트화된 메모리 세그먼트로서 비휘발성 저장 디바이스에 전송될 특별한 태그가 부착된 압축 풀로 압축될 수 있다. 예를 들어, 애플리케이션은 압축된/컴팩트화된 메모리 세그먼트로서 압축 풀로 서스펜드(suspend)될 수 있다.
시스템이 웨이크업한 동안에, 이전의 작업 세트(또는 핫 작업 세트)를 갖는 메모리 디바이스를 이동시키도록 메모리 디바이스의 비압축 부분에 상응하는 특별하게 태그된 압축된 메모리 세그먼트가 비휘발성 저장 디바이스로부터 검색(또는 취소)될 수 있다. 예를 들어, 서스펜드된 애플리케이션이 특별하게 태그된 압축된 메모리 세그먼트로부터 메모리 디바이스의 비압축 부분으로 다시 서스펜드 해제되거나 복구될 수 있다. 복구되는 애플리케이션과 연관된 (예를 들어, 메모리의 압축된 또는 비압축 부분에 이전에 저장된) 임의의 메모리 페이지를 검색하는 대신, 시스템은 압축 풀에 이전에 저장된 메모리 페이지를 검색하기에 앞서 애플리케이션에 대한 메모리의 비압축 부분에 이전에 저장된 가치 있는 정보를 이용하여 예비 가열될 수 있다(또는 웨이크업 가속화를 위해 프리-웜(pre-warmed)될 수 있다).
도 1은 압축된 및/또는 컴팩트화된 메모리에 기초한 가상 메모리 시스템의 일 실시예를 도시한 블록도이다. 예를 들어, 시스템(100)은 모바일 디바이스, 데스크톱 컴퓨터, 또는 서버 등과 같은 데이터 프로세싱 디바이스의 메모리 디바이스 내에 호스팅된 운영 환경(101)을 포함할 수 있다. 메모리 디바이스는 예를 들어 프로세싱 디바이스 내의 적어도 하나의 프로세서의 데이터 처리를 지원하기 위한 랜덤 액세스 메모리(RAM)를 포함할 수 있다. 압축된 메모리(또는 압축 풀)(117)는 메모리 디바이스 내에서 동적으로 분할(또는 유지)될 수 있다. 그 결과, 메모리 디바이스의 비압축 부분에 기초할 수 있는 운영 환경(101)의 지원 동작을 위한 메모리 디바이스 내의 이용가능한 메모리 공간이 메모리 디바이스에 의해 제공되는 총 메모리 공간보다 작을 수 있다. 소정의 실시예들에서, CPU, GPU, 또는 다른 적용가능한 프로세싱 장치와 같은 다수의 프로세서들이 압축된 메모리(117)에 동시에 액세스할 수 있다.
일 실시예에서, 마치 RAM 내의 직접 어드레스가능한 기록/판독 메모리와 같이 행동할 수 있는 오직 한 유형의 메모리, 즉 가상 메모리만이 존재하는 것처럼 애플리케이션(123)과 같이 운영 환경(101)에서 구동하는 프로그램 또는 프로세스가 메모리 어드레스(또는 가상 메모리 어드레스)에 액세스하는 것을 가능하게 하도록, 가상 메모리 관리 모듈(103)은, RAM 및 대용량 저장 디바이스(121)와 같은 다양한 형태의 컴퓨터 데이터 스토리지를 가상화할 수 있다. 예를 들어, 가상 메모리 관리 모듈(103)은 가상 메모리 어드레스(또는 가상 메모리 어드레스)와 RAM(또는 메모리 디바이스) 내의 물리적 메모리 페이지 및 대용량 저장 디바이스(121) 내의 스토리지 기준과 같은 실질적인 물리적 데이터 저장 위치 사이에서의 맵핑을 유지할 수 있다.
가상 메모리 관리 모듈(103)은 페이저 층 모듈(105)을 통해 메모리 디바이스(예로서, RAM)의 안팎으로 데이터를 이동시킬 수 있다. 예를 들어, 데이터(예를 들어 익명 데이터 또는 대용량 저장 디바이스(121) 내의 디스크 파일에 의해 뒷받침되지 않은 오손 데이터(dirty data))가, 예를 들어 애플리케이션으로부터의 메모리 할당 요청 및/또는 다른 데이터 처리 요구에 응답하여, 물리적 메모리 페이지 내의 메모리 공간을 자유롭게 하도록 메모리 디바이스 내의 물리적 메모리 페이지에서 스와핑 아웃될 수 있다. 대용량 저장 디바이스(121) 내의 디스크 파일로부터 이용가능할 수 있는 순수 데이터(clean data)(또는 메모리 데이터)는 이용가능한 메모리 공간을 증가시키도록 메모리 디바이스로부터 페이징 아웃(또는 퍼지(purge))될 수 있다. 애플리케이션(123)과 같은 애플리케이션을 종료할 때, 애플리케이션에 할당된 메모리 공간(예를 들어, 스택, 히프(heap) 등)이 미래의 할당에 이용가능해질 수 있다.
일 실시예에서, 가상 메모리 관리 모듈(103)은 메모리 디바이스의 비압축 부분 내의 가상 메모리 주소를 관리하기 위해 페이저 층 모듈(105)에 메모리 스와핑 인/아웃 요청을 전송할 수 있다. 페이저 층 모듈(105)은 메모리 디바이스의 비압축 부분으로/로부터 메모리 페이지를 이동시키도록 대용량 저장 디바이스(121) 및/또는 압축된 메모리 관리 모듈(107)과 인터페이싱할 수 있다. 그 결과, 가상 메모리 어드레스가 압축된 메모리(117) 또는 대용량 저장 디바이스(121) 내의 메모리 위치에 상응하는지 여부를 구별(또는 인지)하지 않고 가상 메모리 관리 모듈(103)이 메모리 디바이스의 비압축 부분 밖의 가상 메모리 어드레스를 맵핑할 수 있다. 다시 말하면, 가상 메모리 관리 모듈(103)은 압축된 메모리(117)의 존재를 무시할 수 있다.
페이저 층 모듈(105)은 메모리 페이징 동작을 수행하기 위해 다수의 동시 스레드(또는 입력/출력 스레드)에 기초할 수 있다. 예를 들어, 페이저 층 모듈(105)은 대용량 저장 디바이스(121)의 디스크 파일로부터 순수 데이터를 저장하는 비압축 메모리 페이지를 관리하도록 파일 페이저를 포함할 수 있다. 페이저 층 모듈(105)은 압축된 메모리(117)를 통해 메모리 디바이스의 비압축 부분으로/로부터 비압축 메모리 페이지를 이동시키기 위해서 압축된 메모리 관리 모듈(107)과 인터페이싱하는 메모리 페이저(예로서, 하나 이상의 스레드)를 포함할 수 있다.
일 실시예에서, 압축된 메모리(117)는 압축된 메모리 유닛을 저장하기 위해 (예를 들어, 어레이 또는 헤드 및 테일을 갖는 큐에 기초한) 하나 이상의 로그 구조를 포함할 수 있다. 각 로그 구조는 압축된 메모리 유닛을 저장하도록 할당된 버퍼를 이용하여 하나 이상의 세그먼트를 포함할 수 있다. 각 세그먼트는 압축된 메모리 유닛(또는 압축된 페이지)들의 순서화된 리스트를 저장하기 위한 메모리 슬롯을 갖는 동일한 크기(예를 들어, 256KB, 512KB, 1024KB, 또는 다른 적용가능한 크기)일 수 있다. 각 압축된 유닛은, 예를 들어 압축기/압축해제기 모듈(111)을 통해, 메모리 디바이스의 비압축 부분 내의 메모리 페이지로부터 로그 구조의 헤드로 압축될 수 있다. 일부 실시예들에서, 각 로그 구조는 압축된 메모리 관리 모듈(107)을 통해 동시에 및/또는 독립적으로 분리된 스레드에 의해서 업데이트 또는 동작될 수 있다.
압축된 메모리 유닛은 로그 구조의 하나의 세그먼트 내의 메모리 슬롯(또는 위치)에 저장될 수 있다. 압축기 모듈(111)은 새롭게 압축된 메모리 페이지를 로그 구조의 헤드 슬롯으로 기록 또는 저장할 수 있고, 미래의 압축을 위해 (현재 헤드 슬롯에 대한) 다음 슬롯을 로그 구조의 헤드 슬롯으로서 업데이트할 수 있다. 압축된 메모리 관리 모듈(107)은 현재 세그먼트(또는 로그 구조 내의 헤드 세그먼트)가 찼을 때(또는 실질적으로 찼을 때) 하나 이상의 새로운 세그먼트를 생성(또는 메모리 디바이스의 비압축 부분으로부터 할당)할 수 있다. 메모리 페이지와 로그 구조 내의 그의 상응하는 압축된 메모리 유닛 사이의 맵핑은, 예를 들어 로그 구조를 식별하는 식별자에 기초하여, 압축된 메모리(117), 식별된 로그 구조 내의 세그먼트 및 압축된 메모리 유닛을 저장하는 식별된 세그먼트 내의 메모리 슬롯에 대해 유지될 수 있다.
일 실시예에서, 압축기/압축해제기 모듈(111)은 압축된 메모리(117) 내의 로그 구조를 관리할 수 있다. 각 로그 구조는 예를 들어 로그 구조 내의 세그먼트들의 어레이 내의 헤드 세그먼트와 같은 현재 세그먼트 내의 헤드 슬롯으로 포인팅할 수 있는 기록 헤드와 연관될 수 있다. 다수의 스레드들은 분리된 로그 구조들을 동시에 이용하여 메모리 압축/압축해제 동작을 수행하도록 압축기/압축해제기 모듈(111)과 연관될 수 있다. 압축기/압축해제기 모듈(111)은 예를 들어 페이저 층 모듈(105)을 통해 스케줄된 것과 같이 압축될 메모리 페이지를 저장하는 요청 큐에 따라 압축 동작들을 수행할 수 있다. 압축시에 메모리 페이지는 로그 구조 내의 세그먼트 내의 메모리 슬롯에 저장될 한 페이지의 물리적 메모리 크기보다 작은 크기를 요구할 수 있다.
일 실시예에서, 더 많은 메모리 페이지들이 압축된 메모리(117)로 압축될 때, 상응하는 로그 구조의 헤드를 따라 메모리 슬롯들이 채워질 수 있다. 대안적으로, 상응하는 로그 구조 내의 일부 세그먼트 또는 세그먼트 내의 슬롯들은 비워질 수 있거나 또는 저장된 압축된 메모리 유닛들이 해제되었을 때 할당에 이용가능하게 될 수 있다. 예를 들어, 애플리케이션 또는 프로세스가 종료되면, 애플리케이션을 위해 유지되는 객체들 또는 구조들이 제거될 수 있고 애플리케이션이 소유한 물리적 메모리 페이지 또는 압축된 메모리 유닛이 미래의 사용을 위해 해제될 수 있다(즉, 할당에 이용가능함). 이와 달리, 세그먼트들은 스와핑-아웃, 압축해제 또는 컴팩트화의 결과로서 비워질 수 있다.
압축기/압축해제기 모듈(111)은, 예를 들어 가상 메모리 관리 모듈(103) 내에서 마주친 페이지 오류에 응답하여, 압축된 메모리 유닛을 압축된 메모리(117)로부터 메모리 디바이스의 비압축 부분으로 당기거나 압축해제할 수 있다. 압축기/압축해제기 모듈(111)은, 예를 들어 별개의 스레드를 통해 압축된 메모리(117)의 서로 다른 세그먼트들 상에서 동시에 압축 및 압축해제 동작을 수행할 수 있다.
압축된 메모리 관리 모듈(107)은 인터페이스 모듈(119)을 통해서 압축된 메모리(117)와 대용량 저장 디바이스(121) 사이의 압축된 메모리 유닛의 세그먼트를 이동시키기 위한 스왑 모듈(113)을 포함할 수 있다. 예를 들어, 압축된 메모리 유닛의 세그먼트는 새롭게 압축된 메모리 페이지를 수용하기 위한 공간을 만들기 위해서, 및/또는 시스템 하이버네이션 프로세스 동안 미래의 복구를 위해 메모리 디바이스의 상태를 저장하는 등을 위해서 압축된 메모리(117)로부터 스와핑-아웃될 수 있다. 대안적으로, 압축된 메모리 유닛의 세그먼트는 압축된 메모리 유닛의 하나 이상의 세그먼트 내의 데이터에 액세스하도록 가상 메모리 관리 모듈(103) 내에서 마추진 페이지 오류로 인해 압축된 메모리(117)로 스와핑될 수 있다.
일 실시예에서, 하나 이상의 스레드는 스왑 모듈(113)을 위해 구동될 수 있다. 스왑 스레드는 지정된 스케줄에 따라 또는 요청에 응답하여 웨이크업될 수 있다. 예를 들어, 페이저 층 모듈(105)은 페이지 오류를 해결하라는 요청을 발행할 수 있다. 메모리 사용 관리 모듈(115)은 메모리 디바이스 내의 이용가능한 메모리 공간을 충분히 유지하라는 요청을 전송할 수 있다. 일 실시예에 따르면, 스왑 스레드는 얼마나 많은 압축된 메모리 유닛의 세그먼트를 압축된 메모리(117)로부터 스와핑-아웃 하는지를 결정하기 위해 메모리 디바이스의 현재 상태를 검사하도록 웨이크업할 수 있다. 스왑 스레드는 적어도 사용된(예를 들어, 연식이 있거나 오래된) 세그먼트를 선택하고, 필요하다면 (예를 들어, 컴팩트화 모듈(109)을 통해) 그것을 컴팩트화하며, 선택된 세그먼트를 대용량 저장 디바이스(121)로 포워딩할 수 있다. 스왑 모듈(113)을 통한 스와핑 동작은 압축기/압축해제기 모듈(111)을 통해 압축/압축해제 동작과 독립적으로 및/또는 동시에 수행될 수 있다.
컴팩트화 모듈(109)은 메모리 단편화(fragmentation)를 감소시키도록 및/또는 메모리 스와핑 효율을 증가시키도록 압축된 메모리(117) 상에서 컴팩트화 동작을 수행할 수 있다. 예를 들어, 컴팩트화 모듈(109)은 그 사이에 남겨진 빈 메모리 슬롯들을 통합하도록 압축된 메모리 유닛들 사이의 순서 관계를 변경하지 않고 로그 구조의 세그먼트 내의 압축된 메모리 유닛들을 슬라이딩(또는 이동)시키도록 마이너 컴팩트화 동작을 수행할 수 있다. 대안적으로 또는 선택적으로, 컴팩트화 모듈(109)은 소정의 세그먼트를 채우고/거나 비우도록 압축된 메모리 유닛을 서로 다른 세그먼트들을 가로질러 이동시키기 위해 메이저 컴팩트화 동작을 수행할 수 있다.
일 실시예에서, 스왑 모듈(113)은 더 나은 스와핑 성능을 위해 세그먼트들을 컴팩트화할 것을(예를 들어, 빈 슬롯들을 최소화 또는 감소시킬 것을) 컴팩트화 모듈(109)에 요청할 수 있다. 예를 들어 메모리 디바이스와 스왑 디바이스 사이의 인터페이스는 데이터 전송을 위해 고정된 크기의 데이터 버퍼에 기초할 수 있다. 데이터 버퍼 크기와 일치하는 타이트하게 패킹된 세그먼트는 전송 효율(예로서, 단위 시간 또는 클록 사이클당 전송되는 데이터의 양)을 최대화할 수 있다.
메모리 사용 관리 모듈(115)은 압축된 메모리 유닛 또는 페이지를 압축된 메모리(117)로부터 대용량 저장 디바이스(121)로 언제 밀어내거나 스와핑-아웃할지를 결정할 수 있다. 메모리 사용 관리 모듈은 스와핑 동작을 개시하도록 스왑 모듈(113)에 트리거를 제공하도록(또는 스왑 모듈(113)에 요청을 전송하도록) 메모리 디바이스의 사용 상태를 모니터링할 수 있다. 사용 상태는 전력 사용, 메모리 성능(예로서, 판독/기록 속도), 메모리 사용률, 메모리 디바이스 내의 압축/비압축 파티션들의 비율, 압축된 메모리(117)의 크기, 메모리 페이지들의 작업 세트의 크기, 또는 다른 적용가능한 런타임 측정 등을 포함할 수 있다.
도 2는 가상 메모리를 위한 압축 및 압축해제 메모리의 일 실시예를 도시한 순서도이다. 예를 들어, 프로세스(200)는 도 1의 시스템(100)의 일부 컴포넌트들에 의해 수행될 수 있다. 블록(201)에서, 프로세스(200)의 프로세싱 로직은 하나 이상의 프로세서를 지원하는 가상 메모리를 위해 메모리 디바이스 내의 메모리의 압축된 부분을 동적으로 업데이트할 수 있다. 메모리 디바이스는 메모리의 압축된 부분으로부터 분리된 메모리의 비압축 부분을 포함할 수 있다. 가상 메모리 내의 메모리 어드레스는 메모리의 압축된 부분 또는 비압축 부분으로 맵핑될 수 있다.
일 실시예에서, 메모리의 압축된 부분은 메모리의 비압축 부분으로부터 할당된 추가적인 메모리를 이용해 업데이트될 수 있다. 메모리의 비압축 부분에 할당된 메모리 영역은 메모리 영역이 메모리 디바이스의 메모리의 비압축 부분 내의 미래의 할당에 이용가능하게 하도록 메모리의 압축된 부분으로 압축될 수 있다. 메모리의 업데이트된 압축된 부분은 압축된 메모리 영역을 저장할 수 있다. 메모리의 비압축 부분 내의 할당에 이용가능한 메모리의 크기는 메모리 영역의 압축의 결과로서 증가할 수 있다.
일 실시예에서, 압축된 메모리 영역은, 예를 들어 압축된 메모리 영역 내의 데이터에 액세스하라는 요청을 수신한 것에 응답하여, 메모리 디바이스 내의 비압축 부분으로 다시 압축해제될 수 있다. 프로세스(200)의 프로세싱 로직은 요청된 데이터가 메모리의 비압축 부분 내에서 현재 이용가능한지를 결정할 수 있다. 만약 요청된 데이터가 메모리의 비압축 부분에서 현재 이용가능하지 않다면, 요청은 예를 들어 압축된 메모리 영역을 압축해제하도록 페이지 오류 이벤트가 메모리의 압축된 부분에 대한 업데이트를 트리거하게 할 수 있다.
메모리의 압축된 부분은 다수의 (또는 적어도 하나의) 압축된 메모리 유닛 내에 저장될 수 있다. 각 압축된 메모리 유닛은 메모리의 비압축 부분으로부터 압축된 분리된 메모리 영역에 상응할 수 있다. 분리된 압축된 메모리 유닛들은 메모리의 압축된 부분 내에 연이어 (예를 들어, 메모리 디바이스 내의 물리적 할당에 기초하여) 저장될 수 있다. 일 실시예에서, 메모리의 압축된 부분은 이러한 분리된 압축된 메모리 유닛들이 메모리의 압축된 부분 내에 연이어 저장되도록 컴팩트화될 수 있다.
메모리 영역은, 메모리 디바이스의 비압축 부분 내의 메모리의 페이지와 같은 고정된 크기의 메모리 유닛에 상응할 수 있다. 압축된 메모리 유닛은, 예를 들어 압축된 메모리 유닛으로 압축된 원래의 데이터 콘텐츠의 크기 또는 압축 속성에 의존하여 다양한 크기를 가질 수 있다. 일 실시예에서, 압축된 메모리 영역은 메모리의 압축된 부분 내의 특정한 압축된 메모리 유닛에 상응할 수 있다.
일 실시예에서, 특정한 압축된 메모리 유닛은 메모리의 압축된 부분 내의 인접한 압축된 메모리 유닛들 사이에 저장될 수 있다. 특정한 압축된 메모리 유닛이 메모리의 압축된 부분으로부터 제거될 때, 인접한 메모리 유닛들이 예를 들어 컴팩트화 동작을 통해 서로의 옆에 연이어 저장되도록 이동될 수 있다. 특정한 압축된 메모리 유닛은, 예를 들어 압축해제 동작, 스와핑 동작, 또는 다른 적용가능한 메모리 관리 동작들을 통해 메모리의 압축된 부분으로부터 제거될 수 있다.
일부 실시예들에서, 메모리의 압축된 부분은 다수의 메모리 슬롯의 풀(multiple pools of memory slots)을 포함할 수 있다. 각 압축된 메모리 유닛은 (물리적 메모리 할당에 따른) 하나 이상의 연이은 메모리 슬롯 내에 저장될 수 있다. 각 풀은 압축된 메모리 유닛들의 분리된 파티션에 상응할 수 있다. 일 실시예에서, 각 풀은 예를 들어 메모리를 사용하여 시스템을 구동하는 프로세스에 속한 분리된 스레드와 연관될 수 있다. 메모리의 압축된 부분 상의 컴팩트화 동작은 자신의 연관된 스레드를 통해서 각 풀에 대해 따로따로 그리고 비동기식으로 수행될 수 있다.
메모리 디바이스는 하드 디스크, 플래시 메모리 또는 다른 적용가능한 비휘발성 저장 디바이스와 같은 분리된 저장 디바이스에 연결될 수 있다. 하나 이상의 압축된 메모리 유닛은 (예를 들어, 메모리의 압축된 부분을 업데이트하기 위해서) 메모리의 압축된 부분으로부터 분리된 저장 디바이스로 스와핑-아웃될 수 있다. 그 결과, 메모리의 비압축 부분의 크기를 증가시키도록 메모리의 압축된 부분의 크기가 감소될 수 있다. 대안적으로, 만약 요청시에 압축된 메모리 유닛 내의 데이터가 메모리의 압축된 부분 내에서 현재 이용가능하지 않다면 압축된 메모리 영역에 대한 압축된 메모리 유닛은 분리된 저장 디바이스로부터 메모리의 압축된 부분으로 스와핑될 수 있다.
프로세스(200)의 프로세싱 로직은 소정의 비트 크기를 갖는 버스 버퍼와 같은 데이터 전송 버퍼를 구비하는 인터페이스를 통해 저장 디바이스(예를 들어, 스왑 디바이스)와 메모리 디바이스 사이에서 압축된 메모리 유닛을 스와핑할 수 있다. 일 실시예에서, 프로세스(200)의 프로세싱 로직은, 데이터 전송 버퍼가 예를 들어 각 하드웨어 데이터 거래에서 실질적으로 꽉 찬 용량을 가지는 다수의 압축된 메모리 유닛들과 함께 효율적으로 운반하는 것을 가능하게 하도록 메모리의 압축된 부분을 컴팩트화할 수 있다.
일 실시예에서, 메모리 영역은 메모리 디바이스 내의 메모리 페이지에 상응할 수 있다. 메모리의 비압축 부분은 현재 활성인 데이터 프로세싱 프로세스를 지원하도록 메모리 페이지들의 작업 세트를 포함할 수 있다. 예를 들어 시스템의 동작을 임시로 중단하라는 하이버네이션 요청에 응답하여, 메모리 페이지들의 작업 세트가 메모리의 압축된 부분 내의 일련의 압축된 메모리 유닛들로 압축될 수 있다. 그 다음 일련의 압축된 메모리 유닛들은 미래의 사용을 위해 메모리 디바이스와 연결된 저장 디바이스로 스와핑-아웃될 수 있다.
프로세스(200)의 프로세싱 로직은 메모리의 압축된 부분으로부터 스와핑-아웃하기 위한 적어도 하나의 압축된 메모리 유닛을 선택할 수 있다. 선택은 압축된 메모리 유닛의 사용 속성들에 기초할 수 있다. 사용 속성은 데이터가 압축된 메모리 유닛들에 액세스할 때를 나타낼 수 있다. 예를 들어, 사용 속성은 압축된 메모리 유닛이 언제 액세스, 생성, 압축, 스와핑-인, 또는 사용되는지 등을 나타내도록 압축된 메모리 유닛과 연관된 타임 스탬프 또는 다른 메타데이터를 포함할 수 있다.
일 실시예에서, 프로세스(200)의 프로세싱 로직은 예로서 LRU 전략을 통해 최소한 작업 세트에 대해 사용되거나 요청될 가능성이 있는 압축된 메모리 유닛을 스와핑-아웃할 수 있다. 프로세스(200)의 프로세싱 로직은 연관된 사용 속성에 기초하여 가까운 미래에 압축된 메모리 유닛들이 액세스될 가능성을 경험적으로 결정할 수 있다. 일 실시예에서, 압축된 메모리 유닛들은 메모리의 압축된 부분 내에 순서를 가지고 선형적으로 저장될 수 있다. 이러한 순서는 압축된 메모리 유닛들과 연관된 사용 속성(예를 들어, 액세스 타임 스탬프)에 상응할 수 있다.
메모리의 압축된 부분은 하나 이상의 메모리 세그먼트를 포함할 수 있다. 각 메모리 세그먼트는 하나 이상의 압축된 메모리 유닛들의 어레이에 상응할 수 있다. 프로세스(200)의 프로세싱 로직은 다수의 압축된 메모리 유닛들이 특정한 메모리 세그먼트 내의 인접한 메모리 공간 내에 저장되는 것을 가능하게 하도록 컴팩트화 동작을 수행하기 위해 특정한 메모리 세그먼트 내의 하나 이상의 메모리 유닛을 이동시키거나 슬라이딩할 수 있다.
일 실시예에서, 각 메모리 세그먼트는 메모리 용량 및/또는 사용률을 가질 수 있다. 사용률은 메모리 용량이 압축된 메모리 유닛들의 상응하는 어레이를 저장하기 위해 어느 정도의 메모리 용량이 사용되었는지를 나타낼 수 있다. 프로세스(200)의 프로세싱 로직은 적어도 하나의 메모리 세그먼트의 사용률을 증가시키도록 하나 이상의 압축된 메모리 유닛을 메모리 세그먼트들을 가로질러 이동시키기 위해 컴팩트화 동작을 수행할 수 있다. 예를 들어, 60%가 차있는 메모리 세그먼트는 컴팩트화 동작 후에 99%가 차게 될 수 있다.
도 3은 가상 메모리를 위해 압축된 메모리 페이지를 스와핑하는 프로세스의 일 실시예를 도시한 순서도이다. 예를 들어, 프로세스(300)는 도 1의 시스템(100)의 일부 컴포넌트들에 의해 수행될 수 있다. 블록(301)에서, 프로세스(300)의 프로세싱 로직은 메모리 디바이스에 기초한 가상 메모리를 제공할 수 있다. 프로세스(300)의 프로세싱 로직은 메모리 디바이스를 메모리의 비압축 부분(또는 층) 및 메모리의 압축된 부분(또는 층)으로 동적으로 분할할 수 있다. 메모리 디바이스에 연결된 하나 이상의 프로세서에 의해 데이터 프로세싱 태스크를 수행하도록 사용되는 메모리 공간의 작업 세트는 메모리의 비압축 부분 내에 저장될 수 있다.
블록(303)에서, 프로세스(300)의 프로세싱 로직은 메모리의 비압축 부분의 하나 이상의 메모리 페이지를 메모리의 압축된 부분 내의 하나 이상의 다양한 크기의 압축된 메모리 유닛들로 압축할 수 있다. 압축은 메모리의 비압축 부분 내의 이용가능한 메모리 공간을 증가시킨다.
블록(305)에서, 프로세스(300)의 프로세싱 로직은, 예를 들어 특정한 압축된 메모리 유닛 내의 데이터에 대한 액세스 요청의 결과인 페이지 오류에 응답하여, 압축된 메모리 유닛들 중 특정한 압축된 메모리 유닛을 메모리의 압축된 부분으로부터 메모리의 비압축 부분으로 압축해제할 수 있다.
블록(307)에서, 프로세스(300)의 프로세싱 로직은, 예를 들어 메모리의 비압축 부분 내의 작업 세트에 대한 추가적인 할당 요청을 수용하도록, 메모리의 비압축 부분 내의 이용가능한 메모리 공간을 증가시키기 위해 적어도 하나의 다양한 크기의 압축된 메모리 유닛을 메모리의 압축된 부분으로부터 대용량 저장 디바이스로 스와핑-아웃할 수 있다.
도 4는 가상 메모리를 위해 압축된 메모리의 컴팩트화된 세그먼트를 스와핑하기 위한 프로세스의 일 실시예를 도시한 순서도이다. 예를 들어, 프로세스(400)는 도 1의 시스템(100)의 일부 컴포넌트들에 의해 수행될 수 있다. 블록(401)에서, 프로세스(400)의 프로세싱 로직은 메모리 디바이스의 비압축 부분의 하나 이상의 메모리 페이지를 메모리 디바이스의 압축된 부분 내의 하나 이상의 다양한 크기의 압축된 메모리 유닛으로 압축할 수 있다. 메모리 디바이스는 대용량 저장 디바이스와 연결될 수 있다.
블록(403)에서, 프로세스(400)의 프로세싱 로직은 다양한 크기의 압축된 메모리 유닛을 메모리 디바이스의 압축된 부분 내의 세그먼트 또는 다른 적용가능한 로그 구조 데이터로 컴팩트화할 수 있다.
압축된 메모리 유닛들 중 하나의 압축된 메모리 유닛 내의 압축된 데이터에 대한 액세스 요청을 수신한 것에 응답하여, 블록(405)에서, 프로세스(400)의 프로세싱 로직이 예를 들어 압축된 부분 내의 세그먼트로부터 메모리 디바이스의 비압축 부분으로 하나 이상의 압축된 메모리 유닛을 압축해제할 수 있다.
블록(407)에서, 프로세스(400)의 프로세싱 로직은 메모리 디바이스 내의 이용가능한 메모리 공간을 증가시키도록 압축된 메모리 유닛의 세그먼트를 대용량 저장 디바이스로 스와핑-아웃할 수 있다.
도 5는 본 발명의 일 실시예와 함께 사용될 수 있는 컴퓨터 시스템과 같은 데이터 프로세싱 시스템의 일 예시를 도시한다. 예를 들어, 도 1의 시스템(1)은 도 5에 도시된 시스템의 일부로서 구현될 수 있다. 도 5는 컴퓨터 시스템의 다양한 컴포넌트들을 도시하지만, 이러한 세부사항들이 본 발명에 밀접한 관련이 있는 것은 아니기 때문에, 임의의 특정한 아키텍처 또는 컴포넌트들의 상호접속 방식을 나타내고자 의도된 것은 아님을 인지해야 한다. 또한 더 적거나 어쩌면 더 많은 컴포넌트들을 구비하는 네트워크 컴퓨터 및 다른 데이터 프로세싱 시스템 또한 본 발명과 함께 사용될 수 있음이 이해될 것이다.
도 5에 도시된 바와 같이, 데이터 프로세싱 시스템의 형태인 컴퓨터 시스템(500)은 마이크로프로세서(들)(505) 및 ROM(판독 전용 메모리)(507) 및 휘발성 RAM(509) 및 비휘발성 메모리(511)에 연결된 버스(503)를 포함한다. 마이크로프로세서(505)는 메모리(507, 509, 511)로부터 명령어들을 검색할 수 있고 전술된 동작들을 수행하도록 명령어들을 실행할 수 있다. 버스(503)는 다양한 컴포넌트들을 함께 상호접속시키고 또한 이러한 컴포넌트들(505, 507, 509, 511)을 디스플레이 컨트롤러 및 디스플레이 디바이스(513)와 마우스, 키보드, 모뎀, 네트워크 인터페이스, 프린터 및 당업계에 잘 알려진 다른 디바이스일 수 있는 입력/출력(I/O) 디바이스들과 같은 주변 디바이스에 상호접속시킨다. 전형적으로, 입력/출력 디바이스(515)는 입력/출력 컨트롤러(517)를 통해 시스템에 연결된다. 휘발성 RAM(랜덤 액세스 메모리)(509)은 전형적으로 메모리 내의 데이터를 리프레쉬 또는 유지하기 위해 계속 전력을 요구하는 동적 RAM(DRAM)으로서 구현된다.
대용량 스토리지(511)는 전형적으로 자기 하드 드라이브 또는 자기 광학 드라이브 또는 광학 드라이브 또는 DVD RAM 또는 플래시 메모리 또는 시스템으로부터 전력이 제거된 후에도 데이터(예를 들어, 대량 데이터)를 유지하는 다른 타입의 메모리 시스템이다. 전형적으로, 대용량 스토리지(511) 또한 랜덤 액세스 메모리일 것이지만 반드시 요구되는 것은 아니다. 도 5는 대용량 스토리지(511)가 데이터 프로세싱 시스템 내의 컴포넌트들의 나머지에 직접 연결되는 로컬 디바이스임을 나타내지만, 본 발명이 모뎀 또는 이더넷 인터페이스 또는 무선 네트워킹 인터페이스와 같은 네트워크 인터페이스를 통해 데이터 프로세싱 시스템에 연결된 네트워크 저장 디바이스와 같이, 시스템으로부터 원거리에 있는 비휘발성 메모리를 활용할 수 있음이 이해될 것이다. 버스(503)는 당업계에서 알려진 바와 같이 다양한 브리지, 컨트롤러 및/또는 어댑터를 통해 서로 접속되는 하나 이상의 버스를 포함할 수 있다.
상기에 기술된 것들 중 일부는 전용 로직 회로와 같은 로직 회로로 구현되거나, 마이크로제어기 또는 프로그램 코드 명령어들을 실행시키는 다른 형태의 프로세싱 코어로 구현될 수 있다. 따라서, 상기 논의에 의해 교시되는 프로세스는 이들 명령어를 실행시키는 기계가 소정의 기능을 수행하게 하는 기계 실행가능 명령어들과 같은 프로그램 코드로 수행될 수 있다. 이러한 맥락에서, "기계"는 중간형(또는 "추상형") 명령어들을 프로세서 특정 명령어들로 변환하는 기계(예를 들어, "가상 기계"(예로서, 자바 가상 기계(Java Virtual Language), 인터프리터, 공통 언어 런타임(Common Language Runtime), 하이-레벨 언어 가상 기계, 등과 같은 추상형 실행 환경, 및/또는 범용 프로세서 및/또는 전용 프로세서와 같이 명령어들을 실행하도록 설계된 반도체 칩(예를 들어, 트랜지스터들을 이용하여 실행되는 "로직 회로") 상에 배치된 전자 회로일 수 있다. 상기 논의에 의해 교시되는 프로세스는 또한 (기계에 대한 대안으로 또는 기계와 조합하여) 프로그램 코드의 실행 없이 프로세스(또는 그의 일부)를 수행하도록 설계된 전자 회로에 의해 수행될 수 있다.
제조 물품이 프로그램 코드를 저장하는 데 사용될 수 있다. 프로그램 코드를 저장하는 제조 물품은 하나 이상의 메모리(예를 들어, 하나 이상의 플래시 메모리, 랜덤 액세스 메모리(정적, 동적 또는 그외)), 광학 디스크, CD-ROM, DVD ROM, EPROM, EEPROM, 자기 또는 광학 카드 또는 전자 명령어들을 저장하기에 적합한 다른 타입의 기계-판독가능한 매체로서 구현될 수 있지만, 이것으로 제한되지는 않는다. 프로그램 코드는 또한 (예로서, 통신 링크(예컨대, 네트워크 접속)를 통해) 전파 매체에 구현되는 데이터 신호에 의해 원격 컴퓨터(예로서, 서버)로부터 요청 컴퓨터(예로서, 클라이언트)로 다운로딩될 수 있다.
상기의 상세한 설명은 컴퓨터 메모리 내의 데이터 비트에 대한 동작들의 알고리즘 및 심볼 표현의 관점에서 제시된다. 이들 알고리즘 설명 및 표현은 데이터 처리 분야의 당업자에 의해 사용되어 그의 작업 요지를 다른 당업자에게 가장 효과적으로 전하기 위한 툴이다. 알고리즘은 여기서 그리고 일반적으로 바람직한 결과로 이어지는 동작들의 자기-무모순 시퀀스(self-consistent sequence)인 것으로 이해된다. 그 동작들은 물리적 양들의 물리적 조작을 요구하는 것들이다. 보통, 필수적인 것은 아니지만, 이들 양은 저장, 전송, 조합, 비교, 및 달리 조작될 수 있는 전기 또는 자기 신호의 형태를 취한다. 주로 공통 사용의 이유로, 이들 신호를 비트, 값, 요소, 심볼, 문자, 용어, 수 등으로 언급하는 것이 때때로 편리한 것으로 판명되었다.
그러나, 이들 및 유사한 용어들 모두는 적절한 물리적 양들과 관련될 것이며 단지 이들 양에 적용되는 편리한 라벨들임을 명심해야 한다. 상기 논의로부터 자명한 바와 같이, 명시적으로 달리 언급되지 않는 한, 설명 전반에 걸쳐, "프로세싱하는" 또는 "컴퓨팅하는" 또는 "계산하는" 또는 "결정하는" 또는 "디스플레이하는" 등과 같은 용어를 사용한 논의는 컴퓨터 시스템의 레지스터 및 메모리 내의 물리적 (전자) 양으로 표현되는 데이터를, 컴퓨터 시스템 메모리 또는 레지스터 또는 다른 그러한 정보 저장, 전송 또는 디스플레이 디바이스 내의 물리적 양으로 유사하게 표현되는 다른 데이터로 조작 및 변환하는 컴퓨터 시스템 또는 유사한 전자 컴퓨팅 디바이스의 작용 및 프로세스를 지칭함이 이해된다.
본 발명은 또한 본 명세서에 기술된 동작을 수행하기 위한 장치에 관한 것이다. 이러한 장치는 요구되는 목적을 위해 특별하게 구성될 수 있거나, 그것은 컴퓨터에 저장된 컴퓨터 프로그램에 의해 선택적으로 활성화되거나 재구성되는 범용 컴퓨터를 포함할 수 있다. 그러한 컴퓨터 프로그램은 플로피 디스크, 광 디스크, CD-ROM, 및 자기-광 디스크를 비롯한 임의의 유형의 디스크, 판독 전용 메모리(ROM), RAM, EPROM, EEPROM, 자기 또는 광학 카드, 또는 전자 명령어들을 저장하기에 적합하고 컴퓨터 시스템 버스에 각각 연결된 임의의 유형의 매체들과 같은 - 그러나 이로 제한되지 않음 - 컴퓨터 판독가능 저장 매체에 저장될 수 있다.
본 명세서에 제시된 프로세스 및 디스플레이는 내재적으로 임의의 특정 컴퓨터 또는 다른 장치에 관련되지 않는다. 다양한 범용 시스템이 본 명세서의 교시에 따라 프로그램과 함께 사용될 수 있거나, 기술된 동작들을 수행하도록 보다 특수화된 장치를 구성하는 것이 편리한 것으로 판명될 수 있다. 다양한 이들 시스템에 요구되는 구조가 하기의 기술로부터 명백할 것이다. 게다가, 본 발명은 임의의 특정한 프로그래밍 언어와 관련하여 설명되지 않는다. 다양한 프로그래밍 언어가 본 명세서에 기술된 바와 같은 본 발명의 교시를 구현하는 데 사용될 수 있음이 이해될 것이다.
전술된 논의는 단지 본 발명의 일부 예시적인 실시예들을 기술한 것이다. 당업자는 이러한 논의, 첨부된 도면들 및 청구범위로부터 본 발명의 사상 및 범주로부터 벗어나지 않고 다양한 수정이 이루어질 수 있음을 쉽게 인지할 것이다.

Claims (22)

  1. 명령어들이 저장된 기계-판독가능한 비일시적(non-transient) 저장 매체로서, 상기 명령어들이 컴퓨터에 의해 실행되었을 때, 상기 컴퓨터로 하여금,
    가상 메모리를 위한 메모리 디바이스 내의 메모리의 압축된 부분을 동적으로 업데이트하는 단계 - 상기 메모리 디바이스는 상기 메모리의 압축된 부분으로부터 분리된 메모리의 비압축 부분을 포함하고, 상기 가상 메모리는 메모리 어드레스를 상기 메모리의 압축된 부분에 맵핑할 수 있음 -;
    상기 메모리의 비압축 부분 내에 할당된 메모리 영역을 상기 메모리의 압축된 부분으로 압축하는 단계 - 상기 메모리 영역은 상기 메모리 디바이스 내의 미래의 할당(future allocation)에 이용가능하게 되고, 상기 업데이트된 압축된 부분은 상기 압축된 메모리 영역을 저장할 수 있음 -; 및
    상기 압축된 메모리 영역 내의 데이터에 접근하라는 요청에 응답하여, 상기 압축된 메모리 영역을 상기 메모리 디바이스 내의 상기 비압축 부분으로 다시 압축해제하는 단계를 포함하는 방법을 수행하게 하는, 기계-판독가능한 비일시적 저장 매체.
  2. 제1항에 있어서, 상기 요청은 상기 데이터가 상기 메모리의 비압축 부분에서 이용가능하지 않음을 나타내는 페이지 오류를 발생시키는, 기계-판독가능한 비일시적 저장 매체.
  3. 제1항에 있어서, 상기 업데이트는,
    상기 메모리의 비압축 부분으로부터의 추가 메모리를 상기 메모리의 압축된 부분에 할당하는 단계를 포함하고, 상기 메모리의 비압축 부분 내의 할당에 이용가능한 메모리의 크기가 상기 메모리 영역의 상기 압축의 결과로서 증가하는, 기계-판독가능한 비일시적 저장 매체.
  4. 제1항에 있어서, 상기 메모리의 압축된 부분은 복수의 압축된 메모리 유닛을 저장하고, 각각의 압축된 메모리 유닛은 상기 메모리의 비압축 부분으로부터 압축된 분리된 메모리 영역에 상응하고, 적어도 두 개의 상기 압축된 메모리 유닛이 상기 메모리의 압축된 부분 내에 연이어 저장되지 않으며,
    상기 메모리의 압축된 부분을 컴팩트화하는(compacting) 단계 - 상기 컴팩트화는 상기 적어도 두 개의 상기 압축된 메모리 유닛으로 하여금 상기 메모리의 압축된 부분 내에 연이어 저장되게 함 - 를 더 포함하는, 기계-판독가능한 비일시적 저장 매체.
  5. 제4항에 있어서, 상기 압축된 메모리 영역은 상기 메모리의 압축된 부분 내의 특정한 압축된 메모리 유닛에 상응하고, 상기 특정한 압축된 메모리 유닛은 상기 적어도 두 개의 압축된 메모리 유닛들 사이에 저장되며, 상기 압축해제는 상기 적어도 두 개의 상기 압축된 메모리 유닛들이 연이어 저장되는 것을 가능하게 하도록 상기 메모리의 압축된 부분으로부터 상기 특정한 압축된 메모리 유닛을 제거하는, 기계-판독가능한 비일시적 저장 매체.
  6. 제4항에 있어서, 상기 메모리 디바이스는 분리된 저장 디바이스와 연결되고, 상기 업데이트는,
    상기 메모리의 압축된 부분으로부터 상기 분리된 저장 디바이스로 하나 이상의 상기 압축된 메모리 유닛을 스와핑-아웃하는(swapping out) 단계 - 상기 스와핑-아웃은 상기 메모리의 비압축 부분의 크기를 증가시키도록 상기 메모리의 압축된 부분의 크기를 감소시킴 - 를 포함하는, 기계-판독가능한 비일시적 저장 매체.
  7. 제6항에 있어서,
    상기 요청에 대해 상기 압축된 메모리 영역의 상기 데이터가 상기 메모리의 압축된 부분 내에서 현재 이용가능한지 결정하는 단계를 더 포함하며, 상기 압축된 메모리 영역의 상기 데이터가 상기 메모리의 압축된 부분 내에서 현재 이용가능한 경우 상기 압축된 메모리 영역이 압축해제되는, 기계-판독가능한 비일시적 저장 매체.
  8. 제7항에 있어서,
    상기 압축된 메모리 영역의 상기 데이터가 상기 메모리의 압축된 부분 내에서 현재 이용가능하지 않은 경우 상기 압축된 메모리 영역을 상기 분리된 저장 디바이스로부터 상기 메모리의 압축된 부분으로 스와핑-인하는(swapping in) 단계를 더 포함하는, 기계-판독가능한 비일시적 저장 매체.
  9. 제6항에 있어서, 상기 하나 이상의 상기 압축된 메모리 유닛 중 특정한 하나가 상기 적어도 두 개의 압축된 메모리 유닛들 사이에 저장되고, 상기 스와핑-아웃은 상기 적어도 두 개의 상기 압축된 메모리 유닛들이 연이어 저장되는 것을 가능하게 하도록 상기 메모리의 압축된 부분으로부터 상기 특정한 압축된 메모리 유닛을 제거하는, 기계-판독가능한 비일시적 저장 매체.
  10. 제6항에 있어서, 상기 스와핑-아웃은,
    상기 스와핑을 위해 상기 하나 이상의 상기 압축된 메모리 유닛을 선택하는 단계를 포함하고
    상기 선택은 상기 압축된 메모리 유닛들과 연관된 사용 속성들에 기초하는, 기계-판독가능한 비일시적 저장 매체.
  11. 제10항에 있어서, 상기 메모리 영역은 상기 메모리 디바이스 내의 고정된 크기의 메모리 유닛에 상응하고, 상기 압축된 메모리 유닛들은 다양한 크기를 가지며, 상기 압축된 메모리 유닛들은 상기 메모리의 압축된 부분 내의 순서에 따라 선형적으로 저장되는, 기계-판독가능한 비일시적 저장 매체.
  12. 제11항에 있어서, 상기 사용 속성들은 상기 압축된 메모리 유닛들과 연관된 상기 선형적 순서에 상응하는, 기계-판독가능한 비일시적 저장 매체.
  13. 제12항에 있어서, 상기 사용 속성들은 데이터가 상기 압축된 메모리 유닛들에 접근될 때를 나타내고, 선택된 상기 하나 이상의 상기 압축된 메모리 유닛은 상기 선택을 위한 상기 선형적 순서에 따라 최소한 최근에 사용된, 기계-판독가능한 비일시적 저장 매체.
  14. 제11항에 있어서, 상기 메모리 디바이스는 데이터 전송 버퍼를 갖는 인터페이스를 통해 상기 분리된 저장 디바이스와 연결되고, 상기 스와핑은 상기 데이터 전송 버퍼를 통한 상기 인터페이스 상에서의 데이터 전송에 기초하며, 상기 컴팩트화는 상기 데이터 전송 버퍼가 복수의 상기 압축된 메모리 유닛을 함께 운반하는 것을 가능하게 하는, 기계-판독가능한 비일시적 저장 매체.
  15. 제11항에 있어서, 상기 메모리의 압축된 부분은 하나 이상의 메모리 세그먼트를 포함하고, 각각의 메모리 세그먼트는 하나 이상의 상기 압축된 메모리 유닛들의 어레이에 상응하고, 상기 메모리 세그먼트들 중 하나의 메모리 세그먼트의 특정한 어레이가 둘 이상의 압축된 메모리 유닛을 포함하며, 상기 컴팩트화는,
    상기 둘 이상의 압축된 메모리 유닛이 상기 특정한 메모리 세그먼트 내에서 연속된 메모리 공간에 저장되도록 상기 특정한 메모리 세그먼트 내의 상기 압축된 메모리 유닛들 중 적어도 하나를 이동시키는 단계를 포함하는, 기계-판독가능한 비일시적 저장 매체.
  16. 제15항에 있어서, 각각의 메모리 세그먼트는 메모리 용량을 가지고, 각각의 메모리 세그먼트는 상기 메모리 용량 중 어느 정도가 압축된 메모리 유닛들의 상응하는 어레이를 저장하도록 사용되었는지를 나타내는 사용률을 가지며, 상기 컴팩트화는,
    하나 이상의 상기 압축된 메모리 유닛을 상기 메모리 세그먼트들을 가로질러 이동시키는 단계 - 상기 하나 이상의 상기 압축된 메모리 유닛의 상기 이동의 결과로서 상기 메모리 세그먼트들 중 적어도 하나의 메모리 세그먼트의 상응하는 사용률이 증가함 - 를 더 포함하는, 기계-판독가능한 비일시적 저장 매체.
  17. 제4항에 있어서, 상기 메모리의 압축된 부분은 다수의 메모리 슬롯의 풀(multiple pools of memory slots)을 포함하고, 하나 이상의 연이은 상기 메모리 슬롯 내에 각각의 압축된 메모리 유닛이 저장되고, 각각의 풀은 상기 압축된 메모리 유닛들의 분리된 파티션에 상응하고, 각각의 풀은 분리된 스레드와 연관되며, 상기 컴팩트화는 연관된 스레드를 통해서 각각의 풀에 대해 따로따로 비동기식으로 수행되는, 기계-판독가능한 비일시적 저장 매체.
  18. 제6항에 있어서, 상기 메모리 영역은 상기 메모리 디바이스 내의 메모리 페이지에 상응하고, 상기 메모리의 비압축 부분은 현재의 액티브 데이터 처리 프로세스들(active data processing processes)을 지원하기 위한 메모리 페이지들의 작업 세트를 포함하며,
    하이버네이션(hibernation) 요청에 응답하여, 상기 메모리 페이지들의 작업 세트를 상기 메모리의 압축된 부분 내의 일련의 압축된 메모리 유닛들로 압축하는 단계; 및
    상기 일련의 압축된 메모리 유닛들을 상기 저장 디바이스로 스와핑-아웃하는 단계를 더 포함하는, 기계-판독가능한 비일시적 저장 매체.
  19. 명령어들이 저장된 기계-판독가능한 비일시적 저장 매체로서, 상기 명령어들이 컴퓨터에 의해 실행되었을 때, 상기 컴퓨터로 하여금,
    메모리 디바이스에 기초하여 가상 메모리를 제공하는 단계 - 상기 메모리 디바이스는 메모리의 비압축 부분 및 메모리의 압축된 부분으로 동적으로 분할되고, 작업 데이터를 저장하기 위한 상기 메모리의 비압축 부분이 상기 메모리 디바이스에 연결된 프로세서를 통해 처리됨 -;
    상기 메모리의 비압축 부분의 하나 이상의 메모리 페이지를 상기 메모리의 압축된 부분 내의 하나 이상의 다양한 크기의 압축된 메모리 유닛으로 압축하는 단계 - 상기 압축은 상기 메모리의 비압축 부분 내의 이용가능한 메모리 공간을 증가시킴 -;
    상기 압축된 메모리 유닛들 중 하나의 압축된 메모리 유닛 내의 데이터로의 접근 요청에 대한 페이지 오류에 응답하여, 상기 하나의 압축된 메모리 유닛을 상기 메모리의 압축된 부분으로부터 상기 메모리의 비압축 부분으로 압축해제하는 단계; 및
    상기 다양한 크기의 압축된 메모리 유닛들 중 적어도 하나를 상기 메모리의 압축된 부분으로부터 대용량 저장 디바이스로 스와핑-아웃하는 단계 - 상기 스와핑-아웃은 상기 메모리의 비압축 부분 내의 이용가능한 메모리 공간을 증가시킴 - 를 포함하는 방법을 수행하게 하는, 기계-판독가능한 비일시적 저장 매체.
  20. 명령어들이 저장된 기계-판독가능한 비일시적 저장 매체로서, 상기 명령어들이 컴퓨터에 의해 실행되었을 때, 상기 컴퓨터로 하여금,
    메모리 디바이스의 비압축 부분의 하나 이상의 메모리 페이지를 상기 메모리 디바이스의 압축된 부분 내의 하나 이상의 다양한 크기의 압축된 메모리 유닛으로 압축하는 단계 - 상기 메모리 디바이스는 대용량 저장 디바이스에 연결됨 -;
    상기 다양한 크기의 압축된 메모리 유닛들을 상기 메모리 디바이스의 상기 압축된 부분 내의 세그먼트로 컴팩트화하는 단계;
    상기 압축된 메모리 유닛들 중 하나의 압축된 메모리 유닛에 대한 접근 요청에 응답하여, 상기 하나의 압축된 메모리 유닛을 상기 압축된 부분으로부터 상기 메모리 디바이스의 상기 비압축 부분으로 압축해제하는 단계; 및
    상기 메모리 디바이스 내의 이용가능한 메모리 공간을 증가시키도록 상기 압축된 메모리 유닛들의 상기 세그먼트를 상기 대용량 저장 디바이스로 스와핑-아웃하는 단계를 포함하는 방법을 수행하게 하는, 기계-판독가능한 비일시적 저장 매체.
  21. 컴퓨터로 구현되는 방법으로서,
    메모리 디바이스 내의 메모리의 압축된 부분을 동적으로 업데이트하는 단계 - 상기 메모리 디바이스는 적어도 하나의 프로세서에 대한 데이터 처리를 지원할 수 있는 메모리의 비압축 부분을 포함함 -;
    상기 메모리의 비압축 부분 내에 할당된 메모리 영역을 상기 메모리의 압축된 부분으로 압축하는 단계 - 상기 메모리 영역은 상기 메모리 디바이스 내의 미래의 할당에 이용가능하게 되고, 상기 업데이트된 압축된 부분은 상기 압축된 메모리 영역을 저장할 수 있음 -; 및
    상기 압축된 메모리 영역 내의 데이터에 접근하라는 요청에 응답하여, 상기 압축된 메모리 영역을 상기 메모리 디바이스 내의 상기 비압축 부분으로 다시 압축해제하는 단계를 포함하는, 방법.
  22. 컴퓨터 시스템으로서,
    실행가능한 명령어들을 포함하는 메모리 - 상기 메모리는 압축된 부분 및 비압축 부분으로 동적으로 분할됨 -;
    대용량 저장 디바이스;
    상기 메모리 및 상기 대용량 저장 디바이스에 연결된 프로세서를 포함하며,
    상기 프로세서는 상기 메모리로부터의 상기 실행가능한 명령어들을 실행하고,
    상기 프로세서는,
    상기 메모리의 비압축 부분 내에 할당된 메모리 영역을 상기 메모리의 압축된 부분으로 압축하고 - 상기 메모리 영역은 상기 메모리 디바이스 내의 미래의 할당을 위해 이용가능하게 되고, 상기 업데이트된 압축된 부분은 상기 압축된 메모리 영역을 저장할 수 있음 -;
    상기 압축된 메모리 영역 내의 데이터에 접근하라는 요청에 응답하여, 상기 압축된 메모리 영역을 상기 메모리 디바이스 내의 상기 비압축 부분으로 다시 압축해제하며;
    상기 메모리 디바이스 내에서 높은 메모리 사용을 검출하는 것에 응답하여, 상기 메모리 디바이스 내의 이용가능한 메모리 공간을 증가시키도록 상기 압축된 메모리 영역을 상기 저장 디바이스로 스와핑-아웃하도록 구성되는, 컴퓨터 시스템.
KR1020157017157A 2012-12-28 2013-11-25 압축되고 컴팩트화된 가상 메모리를 위한 방법 및 장치 KR101739213B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/730,211 2012-12-28
US13/730,211 US10565099B2 (en) 2012-12-28 2012-12-28 Methods and apparatus for compressed and compacted virtual memory
PCT/US2013/071753 WO2014105323A1 (en) 2012-12-28 2013-11-25 Methods and apparatus for compressed and compacted virtual memory

Publications (2)

Publication Number Publication Date
KR20150090211A true KR20150090211A (ko) 2015-08-05
KR101739213B1 KR101739213B1 (ko) 2017-06-08

Family

ID=49765689

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157017157A KR101739213B1 (ko) 2012-12-28 2013-11-25 압축되고 컴팩트화된 가상 메모리를 위한 방법 및 장치

Country Status (6)

Country Link
US (2) US10565099B2 (ko)
KR (1) KR101739213B1 (ko)
CN (1) CN105027093B (ko)
DE (1) DE112013006298T5 (ko)
TW (1) TWI494764B (ko)
WO (1) WO2014105323A1 (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 (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9378560B2 (en) * 2011-06-17 2016-06-28 Advanced Micro Devices, Inc. Real time on-chip texture decompression using shader processors
US10565099B2 (en) * 2012-12-28 2020-02-18 Apple Inc. Methods and apparatus for compressed and compacted virtual memory
US9575982B1 (en) * 2013-04-29 2017-02-21 Amazon Technologies, Inc. Size targeted database I/O compression
US10102148B2 (en) * 2013-06-13 2018-10-16 Microsoft Technology Licensing, Llc Page-based compressed storage management
TWI493446B (zh) * 2013-09-23 2015-07-21 Mstar Semiconductor Inc 記憶體管理方法及記憶體管理裝置
US9652373B2 (en) * 2013-12-16 2017-05-16 International Business Machines Corporation Adaptive statistics for a linear address space
US20150242432A1 (en) * 2014-02-21 2015-08-27 Microsoft Corporation Modified Memory Compression
US9684625B2 (en) 2014-03-21 2017-06-20 Microsoft Technology Licensing, Llc Asynchronously prefetching sharable memory pages
US9940167B2 (en) * 2014-05-20 2018-04-10 Red Hat Israel, Ltd. Identifying memory devices for swapping virtual machine memory pages
US9984093B2 (en) 2014-08-06 2018-05-29 Quest Software Inc. Technique selection in a deduplication aware client environment
US10459886B2 (en) 2014-08-06 2019-10-29 Quest Software Inc. Client-side deduplication with local chunk caching
US9917894B2 (en) 2014-08-06 2018-03-13 Quest Software Inc. Accelerating transfer protocols
US9990352B2 (en) * 2014-08-06 2018-06-05 Quest Software Inc. Chunk compression in a deduplication aware client environment
KR20160070512A (ko) * 2014-12-10 2016-06-20 삼성전자주식회사 반도체 장치 및 그 동작 방법
US9354812B1 (en) * 2015-02-12 2016-05-31 Qualcomm Incorporated Dynamic memory utilization in a system on a chip
US9632924B2 (en) 2015-03-02 2017-04-25 Microsoft Technology Licensing, Llc Using memory compression to reduce memory commit charge
US9892053B2 (en) * 2015-03-24 2018-02-13 Intel Corporation Compaction for memory hierarchies
US10037270B2 (en) * 2015-04-14 2018-07-31 Microsoft Technology Licensing, Llc Reducing memory commit charge when compressing memory
US9720617B2 (en) 2015-06-02 2017-08-01 Apple Inc. System and method for compaction of compressed and uncompressed virtual memory
KR101727508B1 (ko) 2015-07-28 2017-04-18 서울과학기술대학교 산학협력단 하둡 기반 하드웨어 압축 고속화 장치 및 방법
US10606501B2 (en) 2015-12-04 2020-03-31 International Business Machines Corporation Management of paging in compressed storage
US10474385B2 (en) * 2016-02-23 2019-11-12 Google Llc Managing memory fragmentation in hardware-assisted data compression
US10942844B2 (en) 2016-06-10 2021-03-09 Apple Inc. Reserved memory in memory management system
US20170371797A1 (en) * 2016-06-24 2017-12-28 Qualcomm Incorporated Pre-fetch mechanism for compressed memory lines in a processor-based system
CN109313604B (zh) * 2016-06-27 2023-05-23 英特尔公司 用于压缩虚拟存储器的动态配置的计算系统、装置和方法
US10496292B2 (en) * 2017-01-19 2019-12-03 International Business Machines Corporation Saving/restoring guarded storage controls in a virtualized environment
US10649889B2 (en) 2017-06-04 2020-05-12 Apple Inc. Method and apparatus for managing kernel memory of data processing systems
CN107391708B (zh) * 2017-07-28 2020-09-22 苏州浪潮智能科技有限公司 一种存储系统中性能统计文件存储的方法及装置
US10331558B2 (en) 2017-07-28 2019-06-25 Apple Inc. Systems and methods for performing memory compression
JP6608468B2 (ja) * 2018-01-26 2019-11-20 株式会社日立製作所 ストレージ装置及びその制御方法
EP3821346A1 (en) 2018-08-09 2021-05-19 Huawei Technologies Co., Ltd. Device and method for compacting compressed and uncompressed data blocks
SE543649C2 (en) 2018-11-14 2021-05-18 Zeropoint Tech Ab Managing free space in a compressed memory system
US11048419B2 (en) * 2019-01-30 2021-06-29 EMC IP Holding Company LLC Adaptively over-allocating storage space for compressed data
EP3994582A4 (en) * 2019-07-02 2023-01-18 Microsoft Technology Licensing, LLC HARDWARE MEMORY COMPRESSION
CN113138941A (zh) 2020-01-20 2021-07-20 华为技术有限公司 内存交换的方法、装置
US11372547B2 (en) 2020-02-13 2022-06-28 International Business Machines Corporation Compression of aging data during compaction
CN113590500A (zh) * 2020-04-30 2021-11-02 华为技术有限公司 一种内存管理方法及终端设备
CN112199303B (zh) * 2020-12-03 2021-03-16 北京紫光青藤微系统有限公司 存储空间碎片化的处理方法和装置
US11995104B2 (en) * 2022-05-27 2024-05-28 Sap Se Linear interval-based dynamic range partitioning
TWI829394B (zh) * 2022-10-17 2024-01-11 大陸商星宸科技股份有限公司 電子裝置及其操作方法

Family Cites Families (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4829422A (en) * 1987-04-02 1989-05-09 Stellar Computer, Inc. Control of multiple processors executing in parallel regions
AU1447295A (en) * 1993-12-30 1995-08-01 Connectix Corporation Virtual memory management system and method using data compression
JPH07334310A (ja) * 1994-06-06 1995-12-22 Toshiba Corp ディスク装置及び同装置における読み出しデータのバッファ記憶制御方法
US6002411A (en) 1994-11-16 1999-12-14 Interactive Silicon, Inc. Integrated video and memory controller with data processing and graphical processing capabilities
US5721823A (en) * 1995-09-29 1998-02-24 Hewlett-Packard Co. Digital layout method suitable for near video on demand system
US6040953A (en) * 1997-03-25 2000-03-21 International Business Machines Corporation Adaptive data recovery method and means tuned to thermal asperities in a cyclic, multitracked magnetic storage subsystem
US6148368A (en) * 1997-07-31 2000-11-14 Lsi Logic Corporation Method for accelerating disk array write operations using segmented cache memory and data logging
JP3444346B2 (ja) * 1999-01-04 2003-09-08 日本電気株式会社 仮想メモリ管理方式
US6341325B2 (en) * 1999-01-12 2002-01-22 International Business Machines Corporation Method and apparatus for addressing main memory contents including a directory structure in a computer system
US6523102B1 (en) 2000-04-14 2003-02-18 Interactive Silicon, Inc. Parallel compression/decompression system and method for implementation of in-memory compressed cache improving storage density and access speed for industry standard memory subsystems and in-line memory modules
US6886085B1 (en) * 2000-04-19 2005-04-26 International Business Machines Corporation Method and apparatus for efficient virtual memory management
US6912679B1 (en) * 2000-04-29 2005-06-28 Hewlett-Packard Development Company, L.P. System and method for electrical data link testing
US6883037B2 (en) 2001-03-21 2005-04-19 Microsoft Corporation Fast data decoder that operates with reduced output buffer bounds checking
US6516397B2 (en) * 2001-04-09 2003-02-04 Hewlett-Packard Company Virtual memory system utilizing data compression implemented through a device
US6775751B2 (en) * 2002-08-06 2004-08-10 International Business Machines Corporation System and method for using a compressed main memory based on degree of compressibility
US6968424B1 (en) * 2002-08-07 2005-11-22 Nvidia Corporation Method and system for transparent compressed memory paging in a computer system
US7958289B2 (en) * 2002-08-08 2011-06-07 International Business Machines Corporation Method and system for storing memory compressed data onto memory compressed disks
US20040109463A1 (en) * 2002-12-05 2004-06-10 Alcatel Canada Inc. Efficient data transmission method
JP2005157444A (ja) * 2003-11-20 2005-06-16 Toshiba Corp Fifo制御回路
US7302543B2 (en) * 2004-06-16 2007-11-27 Nec Laboratories America, Inc. Compressed memory architecture for embedded systems
US7587572B1 (en) 2004-08-31 2009-09-08 Sun Microsystems, Inc. Method and system for managing process memory configured in resizable uncompressed and compressed regions
KR100706242B1 (ko) * 2005-02-07 2007-04-11 삼성전자주식회사 메모리 시스템 및 그것의 런 단위 어드레스 매핑 테이블 구성 방법
US8930659B2 (en) * 2005-03-31 2015-01-06 Nec Corporation Computer system, memory management method and program thereof
US7533228B1 (en) 2005-05-27 2009-05-12 Sun Microsystems, Inc. Two-pass sliding compaction
US7412466B1 (en) 2005-05-31 2008-08-12 Sun Microsystems, Inc. Offset-based forward address calculation in a sliding-compaction garbage collector
US20070005911A1 (en) * 2005-07-01 2007-01-04 Nec Laboratories America, Inc. Operating System-Based Memory Compression for Embedded Systems
US8560760B2 (en) * 2007-01-31 2013-10-15 Microsoft Corporation Extending flash drive lifespan
US20080189558A1 (en) * 2007-02-01 2008-08-07 Sun Microsystems, Inc. System and Method for Secure Data Storage
US7895242B2 (en) 2007-10-31 2011-02-22 Microsoft Corporation Compressed storage management
KR101420798B1 (ko) * 2007-11-23 2014-07-17 삼성전자주식회사 실시간 응답성이 요구되는 코드를 위한 요구 페이징 방법및 단말
JP5211751B2 (ja) * 2008-02-26 2013-06-12 富士通株式会社 計算機、ダンププログラムおよびダンプ方法
US9098625B2 (en) * 2008-02-29 2015-08-04 International Business Machines Corporation Viral trace
US7948502B2 (en) * 2008-05-13 2011-05-24 Mitac International Corp. Method of displaying picture having location data and apparatus thereof
US20090327621A1 (en) 2008-06-27 2009-12-31 Microsoft Corporation Virtual memory compaction and compression using collaboration between a virtual memory manager and a memory manager
US20100036858A1 (en) * 2008-08-06 2010-02-11 Microsoft Corporation Meta file system - transparently managing storage using multiple file systems
US9253496B2 (en) * 2008-12-12 2016-02-02 Qualcomm Incorporated Intelligent decoded picture buffering
US8145833B1 (en) 2009-10-30 2012-03-27 CSR Technology Holdings Inc. Compression solution for embedded devices and systems
US8458431B2 (en) 2009-11-03 2013-06-04 International Business Machines Corporation Expanding memory size
CN102147768B (zh) * 2010-05-21 2014-03-05 苏州捷泰科信息技术有限公司 存储器、固态缓存系统及缓存数据处理方法
US8484405B2 (en) * 2010-07-13 2013-07-09 Vmware, Inc. Memory compression policies
US9141526B2 (en) * 2010-09-16 2015-09-22 International Business Machines Corporation Reclaiming units by searching units for a predetermined criterion and storing data from a valid subunit
US9652568B1 (en) * 2011-11-14 2017-05-16 EMC IP Holding Company LLC Method, apparatus, and computer program product for design and selection of an I/O subsystem of a supercomputer
US8954556B2 (en) * 2011-12-01 2015-02-10 Verizon Patent And Licensing Inc. Utility-based model for caching programs in a content delivery network
WO2013110216A1 (en) * 2012-01-29 2013-08-01 Thomson Licensing Method for flash compressed instruction caching for limited ram/flash device architectures
US10565099B2 (en) * 2012-12-28 2020-02-18 Apple Inc. Methods and apparatus for compressed and compacted virtual memory

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
US10970203B2 (en) 2021-04-06
TW201432456A (zh) 2014-08-16
DE112013006298T5 (de) 2015-09-17
CN105027093B (zh) 2020-02-21
TWI494764B (zh) 2015-08-01
US20200073791A1 (en) 2020-03-05
US10565099B2 (en) 2020-02-18
KR101739213B1 (ko) 2017-06-08
WO2014105323A1 (en) 2014-07-03
CN105027093A (zh) 2015-11-04
US20140189281A1 (en) 2014-07-03

Similar Documents

Publication Publication Date Title
KR101739213B1 (ko) 압축되고 컴팩트화된 가상 메모리를 위한 방법 및 장치
US11989160B2 (en) Heuristic interface for enabling a computer device to utilize data property-based data placement inside a nonvolatile memory device
US9098202B2 (en) Storage apparatus and data management method
US10067881B2 (en) Compression and caching for logical-to-physical storage address mapping tables
Lee et al. LAST: locality-aware sector translation for NAND flash memory-based storage systems
US8595451B2 (en) Managing a storage cache utilizing externally assigned cache priority tags
US10310984B2 (en) Storage apparatus and storage control method
KR20220139784A (ko) 객체 저장 방법 및 이를 이용하는 분산 객체 스토리지와 시스템
WO2024099448A1 (zh) 内存释放、内存恢复方法、装置、计算机设备及存储介质
CN115640254A (zh) 通过近数据处理的内存数据库(imdb)加速
KR20130079706A (ko) 휘발성 메모리를 포함하는 저장 장치의 구동 방법
US10073851B2 (en) Fast new file creation cache
JP6243884B2 (ja) 情報処理装置、プロセッサ、および情報処理方法
JP6254986B2 (ja) 情報処理装置、アクセスコントローラ、および情報処理方法
Lee et al. Exploiting sequential and temporal localities to improve performance of NAND flash-based SSDs
JP3785127B2 (ja) ディスクアレイ制御装置及びディスクアレイ制御装置におけるデータ書き込み方法
CN114746848B (zh) 用于存储装置的高速缓存架构
US11875051B2 (en) Contiguous data storage using group identifiers
KR20080112069A (ko) 블록 단위 입출력 디바이스에서 피램을 이용한 데이터 기록시스템 및 방법
WO2023061569A1 (en) Smart defragmentation of a data storage system
CN118312102A (zh) Io请求处理方法、装置、存储设备及存储介质
WO2013108380A1 (ja) セグメント割当管理システム及び方法

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
GRNT Written decision to grant