KR20180013693A - 초과 공급 메모리 장치들을 통합하기 위한 시스템 및 방법 - Google Patents

초과 공급 메모리 장치들을 통합하기 위한 시스템 및 방법 Download PDF

Info

Publication number
KR20180013693A
KR20180013693A KR1020170054566A KR20170054566A KR20180013693A KR 20180013693 A KR20180013693 A KR 20180013693A KR 1020170054566 A KR1020170054566 A KR 1020170054566A KR 20170054566 A KR20170054566 A KR 20170054566A KR 20180013693 A KR20180013693 A KR 20180013693A
Authority
KR
South Korea
Prior art keywords
memory
swap
memory device
pages
driver module
Prior art date
Application number
KR1020170054566A
Other languages
English (en)
Other versions
KR102168193B1 (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 KR20180013693A publication Critical patent/KR20180013693A/ko
Application granted granted Critical
Publication of KR102168193B1 publication Critical patent/KR102168193B1/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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • 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
    • 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/0835Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means for main memory peripheral accesses (e.g. I/O or DMA)
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • 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/10Address translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/15Use in a specific computing environment
    • G06F2212/152Virtualized environment, e.g. logically partitioned system
    • 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/40Specific encoding of data in memory or cache
    • G06F2212/403Error protection encoding, e.g. using parity or ECC codes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express

Abstract

메모리 장치는 호스트 컴퓨터에 대한 메모리 인터페이스 및 호스트 동작 시스템(OS)에 가상 메모리 용량을 제공하도록 구성된 메모리 초과 공급 로직을 포함한다. 상기 호스트 OS의 커널 드라이버 모듈은 상기 메모리 장치의 상기 메모리 초과공급 로직에 의해 제공된 상기 메모리 장치의 상기 가상 메모리 용량을 관리하도록 구성되고 상기 메모리 장치의 상기 가상 메모리 용량에 기반한 상기 메모리 장치의 프론트스왑 공간에 익명 페이지들의 고속 스왑을 제공하고 상기 메모리 장치의 클린 캐시 공간에 파일 페이지들의 고속 스왑을 제공한다.

Description

초과 공급 메모리 장치들을 통합하기 위한 시스템 및 방법{SYSTEM AND METHOD FOR INTEGRATING OVERPROVISIONED MEMORY DEVICES}
본 발명은 메모리 시스템에 관한 것으로 더욱 상세하게는 초과 공급 메모리 장치들을 통합하기 위한 시스템 및 방법에 관한 것이다.
데이터베이스들, 가상 데스크탑 인프라(infrastructure), 및 데이터 분석과 같은 전형적인 현대의 컴퓨터 어플리케이션들은 대형 메인 메모리를 필요로 한다. 컴퓨터 시스템들이 보다 더 복잡한 데이터 및 저장 집약적인 어플리케이션들을 수행하도록 확장되고 있기 때문에, 더 큰 메모리 용량에 대한 요구가 비례하여 증가하고 있다.
디렘(DRAM) 셀들의 신뢰성에 영향을 미치는 다양한 환경적 요인들 때문에 데이터 에러들이 발생할 수 있다. 많은 메모리 에러들은 에러 코드들을 이용하는 방법을 통해 여전히 수정될 수 있으나, 더 긴 액세스 대기 시간(latency)을 필요로 한다. 더 이상 사용하지 않는 페이지들이 많을수록 유효 메모리 용량의 감소를 초래할 수 있다. 메모리 시스템의 구현에 따라, 데이터 에러들에 의해 초래되는 감소된 메모리 용량은 하드웨어 리셋 후에 복구될 수 있다.
다이나믹 랜덤 액세스 메모리(DRAM) 기술이 메모리 용량에 대한 이러한 증가하는 요구를 충족시키기 위해 20 나노미터 공정 기술을 넘어 적극적으로 스케일(scale)하고 있지만, 인라인(inline) 압축 또는 중복제거, 및 에러-정정과 같은 시스템-레벨 기술들이 시스템 메모리의 물리적 메모리 용량의 2-3배까지 시스템 메모리의 가상 메모리 용량을 증가 시키기 위해 적용된다.
트렌스샌던트 메모리(transcendent memory)는 리눅스 커널(Linux kernel)에서 알려지지 않고 동적으로 가변하는 크기의 메모리 클래스를 나타낸다. 트렌스샌던트 메모리는 리눅스 커널을 통해 간접적으로만 주소를 지정할 수 있으며, 영구적 메모리 또는 일시적 메모리로 구성된다. 일시적 메모리는 임시적으로 이용할 수 있는 메모리를 가리키나, 경고없이 사라질 수 있다. 트렌스샌던트 메모리는 여전히 동기적으로 액세스될 수 있을 만큼 충분히 빠르다.
트렌스샌던트 메모리 공간은, 지스왑(zswap) 같은 일부 소프트웨어에 기초한 구현들에서처럼 메모리 관리 유닛(MMU)에 의해 목록화되지 않고 리눅스 커널로부터 분리된다. 지스왑은 스왑된(swapped) 페이지들에 대해 압축된 후기입 캐쉬(write-back cache)를 제공하는 리눅스 커널 특징을 의미한다. 메모리 페이지들이 스왑 아웃(swap-out)될 때 솔리드 스테이트 드라이브(SSD) 또는 하드 디스크 드라이브(HDD)와 같은 스왑 장치에 메모리 페이지들을 이동하는 대신에, 지스왑은 압축을 수행하고 시스템 메모리 내에 동적으로 할당된 메모리 풀에 압축된 캐시를 저장한다.
트렌스샌던트 메모리는 가변적인 가상 메모리 용량을 디렘(DRAM) 채널을 통해 호스트 컴퓨터에 제공할 수 있다. 트렌스샌던트 메모리의 가변적인 가상 메모리 용량은 OS 커널의 블록 입/출력 레이어(layer)를 통해 시스템 스왑으로서 호스트 컴퓨터에 노출될 수 있다. 트렌스샌던트 메모리는, 디렘 채널의 대기 시간 요구들뿐만 아니라 시스템이 제안하는 디렘 또는 다른 메모리 기술들의 성능 이점들을 고려하여 기존 시스템에 통합되어야 한다.
본 발명의 목적은 초과 공급 메모리 장치들을 통합하기 위한 시스템 및 방법을 제공하는데 있다.
본 발명의 실시 예에 따른 표시 장치는 호스트 컴퓨터에 대한 메모리 인터페이스 및 호스트 운영 체재(OS)에 가상 메모리 용량을 제공하도록 구성된 메모리 초과 공급 로직을 포함하고, 상기 호스트 OS의 커널 드라이버 모듈은 메모리 장치의 상기 메모리 초과공급 로직에 의해 제공된 상기 메모리 장치의 상기 가상 메모리 용량을 관리하도록 구성되고, 그리고 상기 메모리 장치의 상기 가상 메모리 용량에 기반하여 상기 메모리 장치의 프론트스왑 공간에 익명 페이지들의 고속 스왑을 제공하고 상기 메모리 장치의 클린 캐시 공간에 파일 페이지들의 고속 스왑을 제공하도록 구성된다.
본 발명의 실시 예에 따르면, 메모리 장치는 초과 공급 메모리 장치들을 효율적으로 메모리 시스템에 통합하면서 높은 성능의 고속 스왑을 제공할 수 있다.
도 1은 본 발명의 일 실시 예에 따른 예시적인 메모리 계층을 보여주는 도면이다.
도 2는 본 발명의 일 실시 예에 따른, 프런트스왑 및 클린캐시 후크들을 사용하는 예시적인 초과 공급 메모리 장치에 대한 구성도를 보여주는 도면이다.
도 3은 본 발명의 일 실시 예에 따른, 압축/중복제거에 기반한 시스템 메모리 사용의 예시적인 기능을 보여주는 도면이다.
도 4는 본 발명의 일 실시 예에 따른, 초과 공급 메모리 장치를 포함하는 예시적인 시스템의 하드웨어 스택을 보여주는 도면이다.
도 5는 본 발명의 일 실시 예에 따른, 초과 공급 메모리 장치를 포함하는 예시적인 시스템의 소프트웨어 스택을 보여주는 도면이다.
도 6은 본 발명의 일 실시 예에 따른, 정상적인 스왑 장치에서 예시적인 프런트스왑 동작을 보여주는 도면이다.
본 명세서에 개시된 특징들 및 도출 예들 각각은 초과 공급 메모리 시스템들의 효율적 통합을 제공하기 위해 다른 특징들 및 도출 예들과 독립적으로 또는 함께 결합되어 이용될 수 있다. 많은 추가적 특징들 및 도출 예들을 이용하는 대표적인 예시들은, 독립적 혹은 조합으로써, 첨부된 도면들을 참조하여 보다 더 상세히 설명될 것이다. 이러한 상세한 설명은 단지 본 발명의 실시 예들을 실행하기 위해 보다 세부적인 설명들을 당업자에게 교시하기 위함이지, 청구항들의 권리범위를 제한하는 것은 아니다. 그러므로, 상세한 설명에서 상기 개시된 특징들의 조합들은 가장 넓은 의미에서 교시를 수행하는데 필수적이지 않을 수 있고, 단지 본 발명의 특별한 대표 예시들을 설명하기 위해서 교시된다.
이하의 설명에서, 단지 설명의 목적으로, 특정 명칭이 본 명세서의 완전한 이해를 제공하기 위해 제시된다. 그러나, 이러한 특정 세부 사항들이 본 명세서의 교시를 실행하기 위해 요구되지 않는다는 것은 당업자에게 자명할 것이다.
본 명세서의 상세한 설명의 몇몇 부분들은 컴퓨터 메모리 내의 데이터 비트들에 대한 연산들의 심볼 표현들 및 알고리즘의 용어들로 나타낸다. 이러한 알고리즘 설명들 및 표현들은 그들의 작업 내용을 당업자에게 효과적으로 전달하기 위해 데이터 처리 기술 분야의 당업자에게 사용된다. 여기서 알고리즘은, 일반적으로, 원하는 결과를 유도하는 단계들의 일관성 있는 순서로 간주된다. 이러한 단계들은 물리적인 양들의 물리적인 조작들을 요구하는 단계이다. 일반적으로, 반드시 그런 것은 아니나, 이러한 양들은 저장, 전송, 결합, 비교, 및 다르게 조작될 수 있는 전기적 형태 또는 자기 신호들의 형태를 갖는다. 원칙적으로 일반적인 사용의 이유로, 이러한 신호들을 비트들, 값들, 요소들, 기호들, 문자들, 용어들, 숫자들 등으로 참조하는 것이 때때로 편리하다고 증명되어 왔다.
이러한 모든 용어들 및 유사한 용어들은 적절한 물리적 양들과 관련되어야 하며, 단지 이러한 양에 적용되는 편의 상의 라벨들이라는 것을 명심해야 한다. 이하 설명으로부터 명백하게 구체적으로 다르게 언급되지 않으면, 상세한 설명 전체에서, “처리”, “연산”, “계산”, “결정”, “디스플레이” 등과 같은 용어들을 사용하는 논의들은 컴퓨터 시스템의 동작 및 프로세스 또는 유사한 전기 연산 장치의 동작 및 프로세스를 나타내며, 연산 장치는 컴퓨터 시스템의 레지스터 및 메모리 내의 물리적(전자) 양들로 표현된 데이터를 컴퓨터 시스템 메모리, 레지스터, 다른 정보 저장 장치, 전송 또는 디스플레이 장치 내에서 물리적 양들로 유사하게 표현되는 다른 데이터로 조작 및 변환한다.
본 명세서에서 제시되는 알고리즘은 본질적으로 어떤 특정 컴퓨터나 다른 장치와 관련되지 않는다. 다양한 범용 시스템들, 컴퓨터 서버들, 또는 개인용 컴퓨터들이 본 명세서의 교시에 따라 프로그램과 함께 사용될 수 있거나, 방법 단계들을 수행하기 위해 더 특수화된 장치를 구성하는 것이 편리할 수 있다. 이러한 다양한 시스템을 위해 요구되는 구조는 후술될 것이다. 여기에 설명된 바와 같이, 본 발명의 개시 내용들을 구현하기 위해서 다양한 프로그래밍 언어가 사용될 수 있을 것이다.
더욱이 대표 실시 예들 및 종속항들의 다양한 특징들은 본 발명의 추가적인 유용한 실시 예들을 제공하기 위해서 구체적 및 명시적으로 열거되지 않은 방식으로 결합될 수 있다. 또한 기업 집단들의 모든 가치 범위 및 지시들은 청구된 주제를 제한하는 목적뿐만 아니라, 원래 공개의 목적을 위한 모든 가능한 중간 가치 또는 중간 실체를 공개하는 것을 명시적으로 언급하고 있다. 또한 도면에 도시된 구성 요소의 치수 및 형상은 본 발명의 교시가 어떻게 수행되는지를 이해하도록 돕기 위한 것이지만, 실시 예에 도시된 치수 및 형상을 제한하고자 하는 것은 아닌 것이 명시적으로 언급되어 있다.
본 발명은 다양한 메모리 용량을 가질 수 있는 초과 공급(overprovisioned) 메모리 장치를 설명한다. 초과 공급 메모리 장치에 저장된 데이터는 인라인(inline) 압축, 중복제거, 및/또는 에러-보정될 수 있다. 또한, 본 발명은 초과 공급 메모리 장치를 소프트웨어 또는 어플리케이션들에 대해 명료하게 시스템에 통합하는 단순하고 효율적인 방법들, 및 데이터 압축 또는 중복제거, 또는 에러-보정으로부터 발생되는 초과 공급 메모리 장치의 증폭된 메모리 용량을 관리하는 단순하고 효율적인 방법들을 설명한다. 더욱이, 초과 공급 메모리 장치의 초과 공급 용량의 구현 및 사용은 호스트 컴퓨터의 시스템 커널 대신 커널 드라이버 모듈 내에 통합된다.
추가적으로, 본 발명은 인라인 메모리(압축, 중복제거, 및/또는 에러-보정에 의해 증가됨, “Augmentation By Compression, Deduplication, or/and Error-correction")를 배치하는 효율적인 방법을 제공한다. 본 발명의 초과 공급 메모리 시스템은 "메모리 ABCDE"로 나타낼 수 있다. 본 발명의 초과 공급 메모리 장치를 구비하여 배치된 시스템은 본 발명의 초과 공급 메모리 장치에 국부적인 기술들에 의존하면서도 메모리 용량을 급격히 증가시킬 수 있다.
본 발명의 초과 공급 메모리 장치를 기존 메모리 시스템에 통합하기 위해서는 몇몇의 과제들이 있다. 예를 들어, 본 발명의 초과 공급 메모리 장치의 가변 메모리 용량은 에러들, 압축 비율들 등에 영향을 미칠 수 있는 어플리케이션 데이터 또는 외부 조건들에 의해서 변화할 수 있다.
일 실시 예에 따르면, 본 발명의 초과 공급 메모리 시스템은 데이터 압축, 데이터 중복제거, 및/또는 에러-보정에 의해 더 높은 가상 용량을 제공하는 하드웨어 구현과 결합된 트랜스샌던트(transcendent) 메모리일 수 있다. 본 발명의 초과 공급 메모리는 호스트 운영 체재(OS)의 메모리 관리 유닛(MMU)에 대한 중대한 수정 없이 가변 메모리 용량에 대한 시스템-레벨 지원을 제공할 수 있다.
데이터 압축, 데이터 중복제거, 및/또는 에러-보정을 제공하기 위한 적절한 하드에어 구현들 없이, 초과 공급 메모리 장치를 기존 시스템에 통합하는 것은 호스트 OS의 MMU에 대한 중대한 수정들을 요구할 수 있다. 예를 들어, 더블 데이터 레이트(DDR) 인터페이스와 같은 동기 인터페이스의 경우, 가변 메모리 용량을 구비한 메모리 모듈은 데이터 압축, 데이터 중복제거, 및/또는 에러 보정 때문에 동기 인터페이스 타이밍들을 따르지 못할 수도 있다. 주변 구성요소 상호연결 익스프레스(또는 PCI 익스프레스)(peripheral component interconnect express: PCIe) 인터페이스와 같은 비동기 인터페이스 상에서, 메모리 시스템은 메모리 모듈에 대한 세분화된(fine-grained) 메모리 액세스를 위해 최적화되지 않을 수도 있는 블록 기반 I/O 스택(stack) 때문에 더 긴 대기 시간(latency)을 겪을 수 있다.
또한, 메모리 용량, 즉, 부트 타임 동안 호스트 시스템에 알려지는 초과 공급 메모리 장치의 가상 메모리 용량은 그것의 물리적 메모리 용량보다 더 클 수 있다. 그러나, 런타임(runtime) 동안, 호스트 시스템의 상주 어플리케이션들 또는 외부 상태들은 메모리 모듈에서 발생할 수 있는 데이터 압축, 중복제거, 및/또는 에러-보정에 적합하지 않을 수 있어, 메모리 부족을 초래할 수 있다.
이러한 이슈들을 처리하기 위한 하나의 해법은 메모리 관리 유닛(MMU)이 데이터 압축, 중복제거, 및/또는 에러-보정의 세부 사항들을 인지하는 것을 가능하도록, 그리고 필요할 때 MMU가 페이징(paging)/스와핑(swapping)을 세부적으로 관리하는 것을 가능하게 하도록 호스트 시스템의 커널에 대해 광범위한 수정들을 하는 것이다. 그러나 이러한 수정들은 MMU 및 호스트 OS의 커널에 대한 중요한 변화들을 요구할 것이다. 본 발명의 초과 공급 메모리 장치는 호스트 OS의 커널의 MMU에 대한 수정이 없도록 확장 가능한 커널 드라이버 모듈로 구현된다.
커널 드라이버 모듈은 본 발명의 초과 공급 메모리 장치로부터 수신된 피드백으로 인해 본 발명의 초과 공급 메모리 장치의 가상 메모리 용량을 동적으로 조절할 수 있다. 커널 드라이버 모듈은 커널 시스템의 메모리 관리 유닛(MMU)에 대한 광범위한 수정들을 할 필요가 없도록 구현될 수 있다. 커널 드라이버 모듈은 호스트 OS의 부분일 수 있다. 그러나, 커널 드라이버 모듈은 호스트 OS의 커널의 부분으로 컴파일되지 않을 수 있다. 대신에, 커널 드라이버 모듈은, 예들 들어, 런타임 동안, 호스트 OS의 커널과는 별도로 컴파일되거나, 호스트 OS의 커널과는 별도로 로딩될 수 있다.
일부 실시 예들에 따르면, 본 발명의 초과 공급 메모리 장치는 다양한 시스템 인터페이스들을 통해 데이터 압축, 중복제거, 및/또는 에러-보정을 제공할 수 있다. 이러한 시스템 인터페이스들의 예시들로서 DDR 인터페이스 및 PCIe 인터페이스가 있지만, 이에 한정되지는 않는다.
도 1은 본 발명의 일 실시 예에 따른 예시적인 메모리 계층을 보여주는 도면이다. 물리적 매체(140)는 디렘(122), 초과 공급 메모리(123), 및 솔리드 스테이트 드라이브(SSD) 또는 하드 디스크 드라이브(HDD)와 같은 2차 스왑 시스템(124)을 포함한다. 호스트 OS는 디렘(122)의 물리적 메모리(102)를 페이지들 단위로 다양한 프로세스들에 할당한다. 호스트 OS의 메모리 관리 유닛(MMU)은 특정 프로세스에 의해 요구되는대로 물리적 페이지들을 가상 메모리에 맵핑할 수 있다. 일반적으로, 페이지는 4KB의 물리적 메모리(102) 이다. MMU는 각 페이지에 대한 통계들 및 플래그들을 유지하여 할당된 페이지들의 상태를 결정한다. 페이지들은 서로 다른 상태들일 수 있다. 예를 들어, 일부는 사용되지 않은 상태이고, 일부는 실행 가능한 코드를 유지하도록 사용되고, 일부는 어플리케이션 프로그램의 데이터를 맵핑하도록 할당된다.
페이지들은 물리적 메모리(102)의 시스템 페이지 캐시(112)에 저장될 수 있다. 페이지들은 크게 익명 페이지들(101) 및 비익명 파일 페이지들(111)로 분류될 수 있다. 익명 페이지들(101)은 물리적 메모리(102) 내에 있다. 그러나, 호스트 OS 커널은 익명 페이지들(101)이 기입되기 전에 익명 페이지들(101)을 물리적 어드레스로 맵핑하지 않는다. 그 결과로, 익명 페이지들(101)은 익명 페이지들(101)이 실제로 사용되기 전에 호스트(OS) 커널에 부담을 추가하지 않는다. 이는 프로세스가 물리적 메모리(102)를 사용하지 않고 가상 메모리 어드레스 공간에 많은 메모리를 예약할 수 있도록 한다. 호스트(OS) 커널은 실제 사용 가능한 것 보다 더 많은 메모리를 예약할 수 있다. 익명 페이지들(101)은 초과 공급 메모리(123)의 프런트스왑(frontswap) 공간(103) 또는 2차 스왑 시스템(124)의 스왑 공간(104)으로 이동될 수 있다. 페이지 캐시(112)에 있는 비익명 파일 페이지들(111)은 초과 공급 메모리(123)의 클린 캐시(113, clean cache) 또는 2차 스왑 시스템(124)의 파일 시스템(114)으로 이동될 수 있다. 비익명 파일 페이지들(111)은 사용하지 않은 깨끗한(clean) 상태이고, 시스템의 물리적 메모리(102)의 부족 때문에 시스템 페이지 캐시(112)로부터 축출될 수 있다.
호스트 OS의 MMU는 어플리케이션 프로그래밍 인터페이스(API) 호출들을 통해 메모리 어드레스 변환, 메모리 관리, 메모리 보호, 캐시 제어 등을 물리적 매체(140)에 제공한다. 일 실시 예에 따르면, 프런트스왑(103) 및 클린 캐시(113) API들은 커널 드라이버 모듈을 통해 초과 공급 메모리(123)에 고속 스왑 인터페이스들을 제공한다. 보다 구체적으로, 프런트 스왑(103)은 익명 페이지들(101)이 2차 스왑 시스템(124)으로 이동되기 전에 익명 페이지들(101)을 인터셉트하기 위한 후크(hook)를 제공한다. 클린 캐시(113)는 비익명 파일 페이지들(111)을 위한 유사한 후크를 제공한다. 따라서, 커널 드라이버 모듈을 경유하여 프런트스왑(103) 및 클린 캐시(113) API들에 의해 액세스 할 수 있는 본 발명의 초과 공급 메모리(123)는, 2차 스왑 시스템(124)처럼 캐시 라인-기반이 되는 대신에, 메모리 블록 액세스를 하는 스왑 장치처럼 작용할 수 있다. 일반적으로, 호스트 OS 커널의 블록 I/O 레이어(layer)는 블록-레벨 페이지 액세스들을 2차 스왑 시스템(124)에 제공할 수 있다. 프런트스왑(103) 및 클린 캐시(113) API 호출들에 대한 커널 드라이브 모듈의 후크들은 블록 I/O 레이어를 통하지 않고 초과 공급 메모리(123)에 대한 페이지 액세스들을 허용한다.
도 2는 본 발명의 일 실시 예에 따른, 프런트스왑 및 클린캐시 후크들을 사용하는 예시적인 초과 공급 메모리 장치에 대한 구성도를 보여주는 도면이다. 사용자 공간(201)은 호스트 OS의 커널 외부의 사용자 공간 어플리케이션들에 의해 로드되는 파일들 및 프로그램들을 참조한다. 사용자 공간 어플이케이션들의 예로서 유틸리티들, 프로그래밍 언어들, 및 그래픽 툴들이 있다. 사용자 어플리케이션은 사용자 공간(201)의 파일들 및 프로그램들을 시스템 메모리로 로딩함으로써 개시되어 사용자 어플리케이션이 호스트 OS의 커널 공간으로 API 시스템 호출들을 할 수 있게 한다.
사용자 공간(201)으로부터의 시스템 호출들은 페이지 캐시(211) 가상 파일 시스템(VFS) 및/또는 파일 시스템(FS)(212), 다이렉트 I/O(213), 스왑 처리기(214), 및 프런트스왑/클린캐시 API 후크들(232)을 포함하는 호스트 OS 커널로 넘겨진다. VFS는 커널과 다른 파일 시스템들 사이의 인터페이스로서 동작한다. VFS는 표준 파일 시스템에 관련된 시스템 호출들을 처리하는 커널 레이어이다. 호스트 OS는 VFS를 통해 다중 파일 시스템들을 관리할 수 있다. VFS는 다른 파일 시스템들 사이의 갭을 연결하고, 공통 시스템 호출 인터페이스를 사용자 공간에 제공할 수 있다.
블록 I/O 레이어(221)는 페이지 캐시(211), VFS/FS(212), 다이렉트 I/O(213), 및 스왑 처리기(214)에 인터페이스들을 제공하여 물리적 시스템 메모리 및 SSD 또는 HDD와 같은 2차 스왑 시스템에 액세스 할 수 있도록 한다. 또한, 스왑 처리기(214)는 블록 I/O 레이어(221)로 축출된 페이지들(260)의 다이렉트 메모리 액세스(DMA) 전송(261)을 처리할 수 있다.
일 실시 예에 따르면, 시스템은 프런트스왑/클린캐시 API 인터페이스(232)(이하, 프런트스왑/클린캐시 API 후크들로 칭함)를 초과 공급 메모리 장치(251)에 제공한다. 물리적 시스템 메모리의 페이지들은 프런트스왑/클린캐시 API 후크들(232)을 통해 블록 레벨에서 초과 공급 메모리 장치(251)에 빠르게 스왑될 수 있다. 따라서, 초과 공급 메모리 장치(251)는 스왑 장치처럼 동작할 수 있으나, 블록 I/O 레이어(221)에 의해 액세스되는 대신에, 블록 액세스들을 할 수 있다. 프런트스왑/클린캐시 API 후크들(232)은 블록 I/O 레이어(221)를 통하지 않고 특정 디바이스 인터페이스(245)(DDR4, PCIe 등)를 통해 인터페이스 컨트롤러(241)를 경유하여 초과 공급 메모리 장치(251)에 페이지 액세스들이 가능하게 할 수 있다. 프런트스왑/클린캐시 API 후크들(232)은 커널 드라이버 모듈(231)을 통하지 않고 인터페이스 컨트롤러(241)에 바로 CPU 메모리 카피 및 DMA 전송(263)을 시작할 수 있다.
일 실시 예에 따르면, 시스템은 두 개 또는 그 이상의 초과 공급 메모리 장치들(251)에 인터페이스들을 제공할 수 있으며, 예를 들어, 하나는 DDR4 인터페이스를 통해 그리고 다른 하나는 PCIe 인터페이스를 통해 제공할 수 있다. 서로 다른 커널 드라이버 모듈들(231)은 서로 다른 타입의 초과 공급 메모리 장치들(251) 및/또는 같은 타입의 초과 공급 메모리 장치(251)에 대한 다른 인터페이스들을 위해 사용될 수 있다.
일 실시 예에 따르면, 초과 공급 메모리 장치(251)는 시스템의 유효 메모리 용량을 증가시킬 수 있다. 초과 공급 메모리 장치(251)에 대한 메모리 액세스를 제공하는 프런트스왑/클린캐시 API 후크들(232)은 블록 I/O 레이어(221)를 경유하는 전형적인 저속 I/O 패스는 건너뛸 수 있기 때문에 SSD 및 HDD와 같은 2차 스왑 장치들에 대한 가상 메모리 액세스와 비교하여 보다 더욱 높은 성능을 제공할 수 있다. 초과 공급 메모리 장치(251)에 대한 액세스들은 커널 드라이버 모듈(231)에 의해 관리된다. 그러므로, 시스템은 호스트 OS 커널에 대한 수정들을 하지 않고 특정의 초과 공급 메모리 장치(251)와 함께 작동할 수 있는 임의의 인터페이스들(예를 들면, PCIe 또는 DDR 인터페이스 등)을 사용할 수 있다.
초과 공급 메모리 장치(251)를 관리하기 위한 커널 드라이버 모듈(231)의 구현은 초과 공급 메모리 장치(251)에 특별한 구성을 요구한다. 커널 드라이버 모듈(231)은 특별한 인터페이스를 통해 장치 인터페이스(245)를 관리하도록 구성될 필요가 있을 수 있다. 예를 들어, PCIe 구현은 관련된 순서 제어, 베이스 어드레스 레지스터(BAR) 매핑, 및 메모리 초기화를 가질 수 있다. 커널 드라이버 모듈(231)은 초과 공급 메모리 장치(251)가 가변적인 초과 공급 용량을 갖도록 할 수 있다.
초과 공급 메모리 장치(251)에 저장된 데이터의 인라인 압축 또는 중복제거, 또는 에러-보정 때문에, 초과 공급 메모리 장치(251)는 런타임 동안 가변하는 가상 메모리 용량을 가질 수 있다. 초과 공급 메모리 장치(251)에 대한 모든 페이지 엑세스에 대해, 호스트 OS의 MMU는 페이지가 API 호출을 통해 받아들여질 수 있는지 여부를 커널 드라이버 모듈(231)에 문의할 수 있다. 일 실시 예에 따르면, 커널 드라이버 모듈(231)은 인터페이스(245)를 통해 초과 공급 메모리 장치에 내장된 로직(예를 들면, 도 4의 SoC 404)과 통신하여 메모리 통계들의 리스트, 예를 들어, 현재 초과공급 비율 및 사용 가능한 물리적 용량을 얻을 수 있다. 커널 드라이버 모듈(231)은 이러한 통계들을 사용하여 호스트 OS로부터 수신된 문의을 거절 또는 수용할 수 있다.
도 3은 본 발명의 일 실시 예에 따른, 압축/중복제거에 기반한 시스템 메모리 사용의 예시적인 기능을 보여주는 도면이다. 메모리 점유가 증가함에 따라, 커널 드라이버 모듈과 함께 초과 공급 메모리 장치에 내장된 로직은 메모리 사용이 메모리 사용 임계값에 도달했을 때 초과공급 비율을(1까지) 감소시킬 수 있다.
일 실시 예에 따르면, 초과 공급 메모리 장치에 내장된 로직은 초과공급 버퍼를 포함한다. 초과공급 버퍼는 커널 드라이버 모듈이 초과 공급 메모리 장치의 불충분한 용량 때문에 임의의 페이지를 수용할 수 없는 예기치 않은 상황에서의 과도한 데이터를 관리할 수 있다. 이러한 메모리 런어웨이(runaway) 상황을 피하기 위해, 커널 드라이버 모듈은 미리 정해진 기능, 예를 들어, 도 3에 도시된 선형 함수들을 사용하여 초과 공급 비율을 동적으로 감소시킬 수 있다.
도 4는 본 발명의 일 실시 예에 따른, 초과 공급 메모리 장치를 포함하는 예시적인 시스템의 하드웨어 스택을 보여주는 도면이다. 초과 공급 메모리(예를 들어, 405a 및 405b)는, 시스템 온 칩(SoC)으로도 또한 명명되는(예를 들어, 404a 및 404b) 내장된 초과공급 로직을 포함한다. 초과 공급 메모리 장치에 저장된 데이터 셋(dataset)에 따라, 인라인 압축 및/또는 중복제거의 효율이 변화할 수 있다. 초과 공급 메모리 장치에 내장된 SoC는 초과 공급 알고리즘을 구현하여 동적으로 가변하는 가상 메모리 용량을 제공할 수 있다.
일부 실시 예들에 따르면, 초과 공급 메모리 장치는 DDR 및 PCIe 인터페이스들 (그러나 이에 한정되지 않음)을 포함하는 다양한 인터페이스들과 함께 시스템 내에 배치될 수 있다. 본 발명의 실시 예에서, 초과 공급 메모리 장치(405a)는 PCIe 버스에 배치되고, 초과 공급 메모리 장치(405b)는 64 비트 DDR4 메모리 버스에 배치된다. 부팅시, 호스트 시스템의 바이오스(BIOS)는 초과 공급 메모리 장치들(405a, 405b)을 특정된 인터페이스상의 디렘 메모리 또는 SSD 또는 HDD와 유사한 블록 장치로서 등록한다. 초과 공급 메모리 장치는 초과 공급 메모리 장치의 물리적 용량보다 더 큰 초과 공급 메모리 장치의 가상 메모리 용량을 알릴 수 있다. 바이오스는 초과 공급 메모리 장치의 초과 공급 가상 메모리 용량을 등록한다. DDR4 인터페이스와 같은 동기 인터페이스들에서, 특별한 트레이닝(training) 순서가 시스템 메모리와 어드레스 인터리빙(interleaving)을 디스에이블 하는 것과 함께 요구될 수 있다.
런타임 동안, 초과 공급 메모리 장치(405a,405b)에 데이터를 저장하거나 초과 공급 메모리 장치(405a,405b)부터 데이터를 로드하기 위한 CPU(401)의 명령어들은 수정없이 실행될 수 있다. 이는 초과 공급 메모리 장치가 시스템의 가상 메모리의 부분이지만 SSD 또는 HDD와 같은 페이지 메모리로 나타나지 않기 때문이다. 비록 스왑 장치로 표시되지만, 초과 공급 메모리 장치는 초과 공급 메모리 장치가 "최선형(best-effort)" 서비스를 제공할 수 있기 때문에 시스템의 2차 스왑으로 백업된다. 커널 드라이버 모듈은 이용 가능한 용량과 초과 공급 메모리 장치의 하드웨어 상태를 고려함으로써 페이지 단위(기반)로 페이지들을 수용 또는 거절할 수 있다. CPU(401)에서 로드/저장에 대한 페이지 결함(fault)시, 호스트 OS 커널의 페이지 폴트 처리기(page fault handler)(예를 들어, 도 2의 스왑 처리기(214))는 프런트스왑/클린캐시 API 호출을 통해 고속 스왑을 자동적으로 호출할 수 있다. 액세스가 성공하지 않는다면, 페이지 액세스는 SSD 또는 HDD와 같은 스왑 시스템에 대한 정규 시스템 스왑으로 진행한다.
초과 공급 메모리 장치(405a,405b)에 대한 DMA 트랜잭션들(transactions)은 표준 방식으로 동작할 수 있다. 이는 초과 공급 메모리 장치(405a,405b)에 대한 모든 액세스들이 페이지 폴트 처리기에서 직렬화되기 때문이며, DMA 트랜잭션 영역이 CPU-캐시화되지 않기 때문이다. 그러므로, 물리적 시스템 메모리로부터 초과 공급 메모리 장치(405a,405b)까지 또는 그 반대로의 데이터 이동들은 추가적인 캐시 무효화들을 필요로 하지 않는다.
도 5는 본 발명의 일 실시 예에 따른, 초과 공급 메모리 장치를 포함하는 예시적인 시스템의 소프트웨어 스택을 보여주는 도면이다. 도 6은 본 발명의 일 실시 예에 따른, 정상적인 스왑 장치에서 예시적인 프런트스왑 동작을 보여주는 도면이다. 다양한 호스트 OS들이 고속 스왑 동작을 구현할 수 있지만, 본 발명은 예시적으로 리눅스 OS의 기능들 및 API 호출들을 보여준다.
도 6을 참조하면, 페이지 스왑-아웃(swap-out) 요청이 발생되면, 프런트스왑/클린캐시 API는 스왑 캐시(601)에 페이지들을 저장한다. 프런트스왑/클린캐시 API는 스왑_인포(swap_info) 구조(602)를 검색하여 프런트스왑 장치(605)에서 비어있는 무효 페이지를 발견한다. 빈 페이지가 프런트스왑 장치(605)에서 발견되면, 페이지 스왑-아웃 요청이 완료된다. 무효 페이지가 프런트스왑 장치(605)에서 발견되면, 프런트스왑/클린캐시 API는 무효 페이지를 깨끗하게 만들어 빈 페이지로 설정한다. 빈 페이지들이 발견되지 않는다면, 프런트스왑/클린캐시 API는 2차 스왑 장치(606)에 대응하는 맵 테이블을 검색한다. 전체 스왑 공간에서 이용 가능한 페이지가 없다면, 프런트스왑/클린캐시 API는 페이지 스왑-아웃 요청이 실패된 것으로 결정한다.
부트 시간 동안, 커널 드라이버 모듈(507)은 초과 공급 메모리 장치(508)를 블록 메모리 장치로서 등록한다. 추가적으로, 커널 드라이버 모듈(507)은 레지스터_옵스(register_ops) 호출을 이용하여 프런트스왑 API 기능(504) 및 클린캐시 API 기능(505)을 등록한다. 프런트스왑 API 기능(504) 및 클린캐시 API 기능(505)의 등록은 초과 공급 메모리 장치(508) 및 인터페이스(예를 들어, DDR4 또는 PCIe)의 토폴로지에 따라서 특화될 수 있다. 프런트스왑 API 기능(504) 및 클린캐시 API 기능(505)은 각각 블록 I/O 레이어를 회피하여 초과 공급 메모리 장치(508)에서 익명 및 비익명 페이지들의 배치를 용이하게 한다. 그러므로, 프런트스왑 API 기능(504) 및 클린캐시 API 기능(505)은 물리적 시스템 메모리(예를 들어, DRAM) 또는 다른 메모리 기술 기반 시스템들을 위한 높은 성능의 고속 스왑을 제공할 수 있다.
커널 드라이버 모듈(507)의 다양한 기능들은 초기화동안 구현될 수 있다. 커널 드라이버 모듈(507)의 예시적인 기능들은 1) 인터페이스-특화된 구성(예를 들어, DDR4 및 PCIe), 인터페이스 플로우 제어, 다이렉트 메모리 액세스(DMA) 초기화, 2) 초과공급 알고리즘 초기화(예를 들어, 알고리즘 파라미터들 및 내부 메모리 영역 할당들), 3) 가지비 컬렉션 핸드쉐이크(garbage collection handsake), 4) 내부 캐시/메모리 컨트롤러, 및 신뢰성, 가용성, 내구성 (RAS: Reliability, Availability, Serviceability) 방침들(예를 들어, ECC 보호), 및 5) 장치 파워 관리 방침을 포함하나 이에 이에 한정되지 않는다.
도 5를 참조하면, 시스템이 신뢰성 있는 2차 스왑 장치(506)와 함께 제공된다. 2차 스왑 장치(506)의 용량은 초과 공급 메모리 장치(508)보다 크거나 같을 수 있다. 2차 스왑 장치(506)는 초과 공급 메모리 장치(508)가 메모리 장치의 데이터 압축 비율 때문에 모두 채워졌을 때 안전하게 페이지들을 수용할 수 있다. 메모리 장치의 데이터 압축 비율은 메모리 장치의 데이터 압축 비율, 데이터 중복제거 비율, 및/또는 에러-보정된 비트 비율 전체로서 나타낼 수 있다. 더욱이, 비트맵(bitmap)은 페이지들이 초과 공급 메모리 장치(508), 2차 스왑 공간, 또는 파일 시스템에 위치해 있는지 여부를 빠르게 식별하도록 구성된다. 호스트 OS의 MMU는 스왑_인포 구조(예를 들어 도 6에 도시된 스왑 인포(602))를 사용하여 2차 스왑 장치(506)를 관리한다. 일 실시 예에 있어서, 스왑_인포 구조에서 블록에 대한 각 엔트리(entry)의 크기는 8비트이다. 스왑_인포 구조에 의한 페이지 추적은 각 페이지에 대한 추가적인 비트를 유지할 수 있다. MMU는 스왑온 시스콜(swapon syscall)을 호출하여 메모리 할당 처리를 완료한다.
도 5 및 도 6을 참조하면, 커널 드라이버 모듈(507)은 프런트스왑 기능 호출(504) 또는 클린캐시 기능 호출(505)을 액세스 할 때 리드(read), 라이트(write), 및 무효화 기능들(invalidate functions)을 실행하여 호스트 커널 OS의 페이지 폴트 처리기(예를 들어 도 2의 스왑 처리기(214))와 상호 작용할 수 있다. 페이지 폴트 처리기는 물리적 메모리(502)로부터 곡선 라인(509)를 통해 4K 페이지들을 이동시킨다. 일 실시 예에 따르면, 리드, 라이트, 및 무효화 기능들은 각 페이지 요청에 대한 런타임 동안 CPU(501)에 의해 호출된다. 예를 들어, 커널 드라이버 모듈(507)은 스왑_라이트페이지(swap_writepage)를 사용하여 프런트스왑 기능 호출(504)이 인에이블 되는지 안되는지 여부를 확인할 수 있다. 인에이블 된다면, 스왑_라이트페이지 기능은 표준 스왑 관리 절차들을 따르는 동안 프런트스왑 장치(604)를 갖는 페이지(601)를 초과 공급 메모리 장치(508)로 스왑-아웃 하도록 시도한다. 예를 들어, 희생 페이지(victim page)가 스왑 케쉬(603)와 비교하여 체크되어 클린 페이지들의 불필요한 이동을 제거한다. 그리고 나서, 커널 스왑_인포(602) 안의 스왑_맵(swap_map)은 빈 슬롯을 검색하여 페이지의 참조들(references)이 반영될 수 있는 것을 보장한다. 최종적으로, 프로세스 페이지 테이블로부터 페이지에 대한 참조는 페이지가 프런트스왑 장치(604)에 복사된 후 제거된다. 프런트스왑 장치(604)는 초과 공급된 메모리 장치에 대한 용량의 논리적인 보기이다.
프런트스왑-맵 테이블의 크기는 프런트스왑 장치(604) 및 2차 스왑 장치(들)에 관한 전체 페이지들을 포함하는 전체 스왑 공간을 커버한다. 스왑 프런트-엔드(front-end)의 관점에서, 이러한 다수의 스왑 장치들은 1차원 싱글 어레이로서 간주된다. 비트맵은 프런트스왑 장치 또는 2차 스왑 장치(506)안에 있는 타겟 페이지를 가리킨다. 스왑-아웃을 위한 페이지 할당은 첫 번째로 프런트스왑 장치(605)에서 완료되어야 한다. 프런트스왑 장치(605)에서 페이지가 없으면, 스왑 프런트-엔드는 2차 스왑 장치(606)에서 사용 가능한 페이지들을 찾는다. 프런트스왑 장치(605)는 물리적 장치 자체를 나타낸다.
일 실시 예에 따르면, 커널 드라이버 모듈(507)은 각 스왑 요청을 처리할 때 동적으로 가변 용량을 관리할 수 있다. 이를 실행하기 위해, 커널 드라이버 모듈(507)은 초과 공급 메모리 장치(508)의 SoC와 피드백 채널을 설정하여 쓰기 요청에 대한 초과 공급 비율, 현재 메모리 용량, 버퍼 크기들, 및 안전 임계값들(그러나, 이에 한정되지 않음)을 포함하는 초과 공급 메모리 장치(508)의 상태를 획득할 수 있다. 커널 드라이버 모듈(507) 또는 SoC는 초과 공급 메모리 장치(508)의 용량이 페이지 요청들을 수용할 수 있을 정도로 충분한지 아닌지 여부를 결정할 수 있다. 프런트스왑 및 클린캐시 API 후크들은, 예를 들어, 현재 초과공급 비율 및 물리적 용량이 안전하게 추가 페이지를 저장하기에 불충분한 논리적 용량이 있다는 것을 가리키면, 페이지를 거절할 수 있는 기능을 제공한다. 대신에, MMU 스왑 처리기는 2차 스왑 장치(506) 또는 SSD(또는 HDD)의 파일 시스템의 2차 스왑 영역에 자동적으로 기입할 수 있다.
앞서 논의된 바와 같이, 본 발명의 초과 공급 메모리 장치는 광범위한 커널 수정들 없이 효율적으로 기존 메모리 시스템에 통합될 수 있다. 초과 공급 메모리 장치는 서로 다른 시스템 인터페이스들에서 높은 시스템 성능을 제공하면서 동적으로 가변하는 메모리 밀도를 제공할 수 있다. 호스트 OS의 커널 공간에 로드된 커널 드라이버 모듈은 초과 공급 메모리 장치에 내장된 SoC와 결합되어 초과 공급 메모리 장치의 초과 공급 파라미터들을 업데이트한다. 이와 같이 통합된 초과 공급 메모리 장치는 효율적으로 배치 및 관리되어 다른 시스템 인터페이스들에서 압축, 중복제거, 및 에러 보정에 의한 하드웨이 기반 메모리 증대를 제공할 수 있다. 커널 드라이버 모듈 및 초과 공급 메모리 장치의 SoC는 예를 들어, 전용 통신 채널에서 서로 통신하여 초과 공급 메모리 장치의 가변 메모리 초과 공급을 관리하기 위해 물리적 메모리 사용을 업데이트 할 수 있다.
일부 실시 예들에서, 호스트 시스템에 알려진 초과 공급 비율 및 초과 공급 메모리 장치의 사용 가능한 물리적 용량을 결정하는 초과 공급 로직은 초과 공급 메모리 장치의 SoC내에 내장된다. SoC는 커널 드라이버 모듈과 직접 통신하여 초과 공급 파라미터들을 보고한다. 이러한 경우, 커널 드라이버 모듈은 단지 획득된 초과 공급 파라미터들에 근거하여 페이지들을 거절 또는 수용하는 것에 대해 결정할 수 있다. 그렇지 않으면, 커널 드라이버 모듈은 SoC로부터 원본 데이터를 가져오고 기능 자체에 대해 보다 복잡한 계산들을 한다.
일 실시 예에 따르면, 메모리 장치는 호스트 컴퓨터에 대한 메모리 인터페이스 및 호스트 동작 시스템(OS)에 가상 메모리 용량을 제공하도록 구성된 메모리 초과공급 로직을 포함한다. 호스트 OS의 커널 드라이버 모듈은 메모리 장치의 메모리 초과공급 로직에 의해 제공된 메모리 장치의 가상 메모리 용량을 관리하도록 구성되고 메모리 장치의 가상 메모리 용량에 기반한 메모리 장치의 프론트스왑 공간에 익명 페이지들의 고속 스왑을 제공하고 메모리 장치의 클린 캐시 공간에 파일 페이지들의 고속 스왑을 제공한다.
메모리 장치의 가상 메모리 용량은 메모리 장치에 저장된 데이터의 압축, 중복제거, 및/또는 에러-보정에 의해 동적으로 가변할 수 있다.
메모리 인터페이스는 더블 데이터 레이트(DDR) 인터페이스 또는 병렬 구성 상호연결 익스프레스(PCIe) 인터페이스일 수 있다.
커널 드라이버 모듈은 프론트스왑 어플리케이션 프로그래밍 인터페이스(API) 호출 및 클린캐시 API 호출을 제공할 수 있다.
커널 드라이버 모듈의 프론트스왑 API 호출은 익명 페이지들이 2차 스왑 시스템의 스왑 공간으로 이동하기 전에 익명 페이지들을 인터셉트하기 위한 후크를 제공할 수 있고, 익명 페이지들을 메모리 공간의 프론트스왑 공간으로 이동시킬 수 있다.
커널 드라이버 모듈의 프론트스왑 API 호출은 메모리 장치의 압축 비율 때문에 가상 메모리 용량이 가득차면 2차 스왑 시스템의 스왑 공간으로 익명 페이지들을 이동시킬 수 있다.
커널 드라이버 모듈의 클린캐시 API 호출은 파일 페이지들이 2차 스왑 시스템의 파일 시스템으로 이동하기 전에 파일 페이지들을 인터셉트하기 위한 후크를 제공할 수 있고, 파일 페이지들을 메모리 장치의 클린캐시 공간으로 이동시킬 수 있다.
커널 드라이버 모듈의 클린캐시 API 호출은 메모리 장치의 압축 비율 때문에 가상 메모리 용량이 가득차면 2차 스왑 시스템의 파일 시스템으로 파일 페이지들을 이동시킬 수 있다.
프론트스왑 및 클린캐시 API 호출들은 인터페이스 컨트롤러에 CPU 메모리 카피 및 다이렉트 메모리 액세스(DMA) 전송을 시작할 수 있다.
메모리 초과공급 로직은 메모리 장치 내의 페이지들을 추적하기 위해 내장된 비트맵을 포함할 수 있다.
청구항 1의 메모리 장치는 호스트 OS에 가상 메모리 용량을 제공하기 위한 전용 통신 채널을 더 포함할 수 있다.
다른 실시 예에 따르면, 방법은 호스트 동작 시스템(OS)에 가상 메모리 용량을 제공하도록 구성된 메모리 초과공급 로직을 포함하는 메모리 장치를 제공하는 단계; 메모리 장치를 호스트 컴퓨터에 대한 메모리 인터페이스를 통해 블록 메모리 장치로서 구성하는 단계; 런타임동안 호스트 OA의 커널로부터 커널 드라이버 모듈을 로딩하는 단계; 및 메모리 장치의 가상 메모리 용량에 기반한 커널 드라이버 모듈을 이용하여 메모리 장치의 프론트스왑 공간에 익명 페이지들의 고속 스왑을 제공하고 메모리 장치의 클린캐시 공간에 파일 페이지들의 고속 스왑을 제공하는 단계를 포함한다.
방법은 메모리 장치를 가상 메모리 용량을 갖는 블록 메모리 장치로서 등록하는 단계를 더 포함한다.
커널 드라이버 모듈은 가상 메모리 용량에 근거하여 익명 페이지들 또는 파일 페이지들을 거절 또는 수용하는 것에 대해 결정할 수 있다.
메모리 장치의 가상 메모리 용량은 메모리 장치에 저장된 데이터의 압축, 중복제거, 및/또는 에러-보정에 의해 동적으로 가변할 수 있다.
메모리 인터페이스는 더블 데이터 레이트(DDR) 인터페이스 또는 병렬 구성 상호연결 익스프레스(PCIe) 인터페이스일 수 있다.
커널 드라이버 모듈은 프론트스왑 어플리케이션 프로그래밍 인터페이스(API) 호출 및 클린캐시 API 호출을 제공할 수 있다. 커널 드라이버 모듈의 프론트스왑 API 호출은 익명 페이지들이 2차 스왑 시스템의 스왑 공간으로 이동하기 전에 익명 페이지들을 인터셉트하기 위한 후크를 제공할 수 있고, 익명 페이지들을 메모리 장치의 프론트스왑 공간으로 이동시킬 수 있다. 커널 드라이버 모듈의 클린캐시 API 호출은 파일 페이지들이 2차 스왑 시스템의 파일 시스템으로 이동하기 전에 파일 페이지들을 인터셉트하기 위한 후크를 제공할 수 있고, 파일 페이지들을 메모리 장치의 클린캐시 공간으로 이동시킬 수 있다.
메모리 장치의 압축 비율 때문에 가상 메모리 용량이 가득차면 커널 드라이버 모듈의 프론트스왑 API 호출은 2차 스왑 시스템의 스왑 공간으로 익명 페이지들을 이동시킬 수 있고, 커널 드라이버 모듈의 클린캐시 API 호출은 2차 스왑 시스템의 파일 시스템으로 파일 페이지들을 이동시킬 수 있다.
프론트스왑 및 클린캐시 API 호출들은 인터페이스 컨트롤러에 CPU 메모리 카피 및 다이렉트 메모리 액세스(DMA) 전송을 시작할 수 있다.
메모리 초과공급 로직은 메모리 장치 내의 페이지들을 추적하기 위해 내장된 비트맵을 포함할 수 있다.
상기 예시적인 실시 예들은 초과 공급 메모리 장치들을 통합하기 위한 시스템 및 방법을 구현하는 다양한 실시 예들을 설명하기 위해 본 명세서에서 설명되었다. 개시된 예시적인 실시 예들로부터 다양한 수정들 및 변화들이 당업자에게 발생할 것이다. 본 발명의 권리범위 내에 의도된 주제는 다음 청구항들에서 제시된다.
101: 익명 페이지들 111: 파일 페이지들
102: 물리적 메모리 112: 페이지 캐시
103: 프론트스왑 113: 클린 캐시
104: 스왑 114: 파일 시스템
122: 디렘 123: 초과 공급 메모리
124: 2차 스왑 140: 물리적 매체

Claims (10)

  1. 호스트 컴퓨터에 대한 메모리 인터페이스; 및
    호스트 운영 체재(OS)에 가상 메모리 용량을 제공하도록 구성된 메모리 초과공급 로직을 포함하고,
    상기 호스트 OS의 커널 드라이버 모듈은 메모리 장치의 상기 메모리 초과공급 로직에 의해 제공된 상기 메모리 장치의 상기 가상 메모리 용량을 관리하도록 구성되고, 그리고 상기 메모리 장치의 상기 가상 메모리 용량에 기반하여 상기 메모리 장치의 프론트스왑 공간에 익명 페이지들의 고속 스왑을 제공하고 상기 메모리 장치의 클린 캐시 공간에 파일 페이지들의 고속 스왑을 제공하도록 구성되는 메모리 장치.
  2. 제 1 항에 있어서,
    상기 메모리 장치의 상기 가상 메모리 용량은 상기 메모리 장치에 저장된 데이터의 압축, 중복제거, 및/또는 에러-보정에 의해 동적으로 가변하는 메모리 장치.
  3. 제 1 항에 있어서,
    상기 메모리 인터페이스는 더블 데이터 레이트(DDR) 인터페이스 또는 병렬 구성 상호연결 익스프레스(PCIe) 인터페이스인 메모리 장치.
  4. 제 1 항에 있어서,
    상기 커널 드라이버 모듈은 프론트스왑 어플리케이션 프로그래밍 인터페이스(API) 호출 및 클린캐시 API 호출을 제공하는 메모리 장치.
  5. 제 4 항에 있어서,
    상기 커널 드라이버 모듈의 상기 프론트스왑 API 호출은 상기 익명 페이지들이 2차 스왑 시스템의 스왑 공간으로 이동하기 전에 상기 익명 페이지들을 인터셉트하기 위한 후크를 제공하고, 상기 익명 페이지들을 상기 메모리 장치의 상기 프론트스왑 공간으로 이동시키는 메모리 장치.
  6. 제 5 항에 있어서,
    상기 커널 드라이버 모듈의 상기 프론트스왑 API 호출은 상기 메모리 장치의 압축 비율 때문에 상기 가상 메모리 용량이 가득차면 상기 2차 스왑 시스템의 상기 스왑 공간으로 상기 익명 페이지들을 이동시키는 메모리 장치.
  7. 제 4 항에 있어서,
    상기 커널 드라이버 모듈의 상기 클린캐시 API 호출은 상기 파일 페이지들이 2차 스왑 시스템의 파일 시스템으로 이동하기 전에 상기 파일 페이지들을 인터셉트하기 위한 후크를 제공하고, 상기 파일 페이지들을 상기 메모리 장치의 상기 클린캐시 공간으로 이동시키는 메모리 장치.
  8. 제 7 항에 있어서,
    상기 커널 드라이버 모듈의 상기 클린캐시 API 호출은 상기 메모리 장치의 압축 비율 때문에 상기 가상 메모리 용량이 가득차면 상기 2차 스왑 시스템의 상기 파일 시스템으로 상기 파일 페이지들을 이동시키는 메모리 장치.
  9. 제 4 항에 있어서,
    상기 프론트스왑 및 상기 클린캐시 API 호출들은 인터페이스 컨트롤러에 CPU 메모리 카피 및 다이렉트 메모리 액세스(DMA) 전송을 시작하는 메모리 장치.
  10. 호스트 운영 체재(OS)에 가상 메모리 용량을 제공하도록 구성된 메모리 초과공급 로직을 포함하는 메모리 장치를 제공하는 단계;
    상기 메모리 장치를 호스트 컴퓨터에 대한 메모리 인터페이스를 통해 블록 메모리 장치로서 구성하는 단계;
    런타임동안 상기 호스트 OS의 커널로부터 커널 드라이버 모듈을 로딩하는 단계; 및
    상기 메모리 장치의 상기 가상 메모리 용량에 기반한 상기 커널 드라이버 모듈을 이용하여 상기 메모리 장치의 프론트스왑 공간에 익명 페이지들의 고속 스왑을 제공하고 상기 메모리 장치의 클린캐시 공간에 파일 페이지들의 고속 스왑을 제공하는 단계를 포함하는 방법.
KR1020170054566A 2016-07-29 2017-04-27 초과 공급 메모리 장치들을 통합하기 위한 시스템 및 방법 KR102168193B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201662368775P 2016-07-29 2016-07-29
US62/368,775 2016-07-29
US15/282,848 US10372606B2 (en) 2016-07-29 2016-09-30 System and method for integrating overprovisioned memory devices
US15/282,848 2016-09-30

Publications (2)

Publication Number Publication Date
KR20180013693A true KR20180013693A (ko) 2018-02-07
KR102168193B1 KR102168193B1 (ko) 2020-10-20

Family

ID=61009910

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170054566A KR102168193B1 (ko) 2016-07-29 2017-04-27 초과 공급 메모리 장치들을 통합하기 위한 시스템 및 방법

Country Status (2)

Country Link
US (1) US10372606B2 (ko)
KR (1) KR102168193B1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11132133B2 (en) * 2018-03-08 2021-09-28 Toshiba Memory Corporation Workload-adaptive overprovisioning in solid state storage drive arrays
CN110008016B (zh) * 2019-04-15 2021-06-22 深圳市万普拉斯科技有限公司 匿名页面管理方法、装置、终端设备及可读存储介质
CN111581119B (zh) * 2020-05-07 2022-11-18 Oppo(重庆)智能科技有限公司 页面回收方法及装置
CN114185494B (zh) * 2022-02-16 2022-07-19 荣耀终端有限公司 内存匿名页的处理方法、电子设备及可读存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100161909A1 (en) * 2008-12-18 2010-06-24 Lsi Corporation Systems and Methods for Quota Management in a Memory Appliance
US20120266165A1 (en) * 2011-04-18 2012-10-18 Shanwei Cen Combined virtual graphics device
JP2013033369A (ja) * 2011-08-02 2013-02-14 Lenovo Singapore Pte Ltd メイン・メモリのフリー・メモリ量を拡大する方法およびコンピュータ
JP2015170271A (ja) * 2014-03-10 2015-09-28 日本電気株式会社 記憶領域管理装置、記憶領域管理方法及び記憶領域管理プログラム
US20160077966A1 (en) * 2014-09-16 2016-03-17 Kove Corporation Dynamically provisionable and allocatable external memory
US20160378530A1 (en) * 2015-06-27 2016-12-29 Vmware, Inc. Remote-direct-memory-access-based virtual machine live migration

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6438560B1 (en) 1999-09-16 2002-08-20 International Business Machines Corporation Reuse of immutable objects during object creation
US8504791B2 (en) 2007-01-26 2013-08-06 Hicamp Systems, Inc. Hierarchical immutable content-addressable memory coprocessor
WO2008094455A2 (en) 2007-01-26 2008-08-07 Cheriton David R Hierarchical immutable content-addressable memory processor
US8479080B1 (en) 2009-07-12 2013-07-02 Apple Inc. Adaptive over-provisioning in memory systems
US9501421B1 (en) 2011-07-05 2016-11-22 Intel Corporation Memory sharing and page deduplication using indirect lines
GB2495533A (en) 2011-10-13 2013-04-17 St Microelectronics Res & Dev Distributing buffer data evenly across different memory devices
US20130275699A1 (en) 2012-03-23 2013-10-17 Hicamp Systems, Inc. Special memory access path with segment-offset addressing
US9021203B2 (en) 2012-05-07 2015-04-28 International Business Machines Corporation Enhancing tiering storage performance
US9442854B2 (en) 2012-11-15 2016-09-13 Elwha Llc Memory circuitry including computational circuitry for performing supplemental functions
US9734079B2 (en) * 2013-06-28 2017-08-15 Intel Corporation Hybrid exclusive multi-level memory architecture with memory management
US9898410B2 (en) 2013-09-10 2018-02-20 Intel Corporation Hybrid main memory using a fine-grain level of remapping
US20150081649A1 (en) 2013-09-13 2015-03-19 Lsi Corporation In-line deduplication for a network and/or storage platform
US9336129B2 (en) 2013-10-02 2016-05-10 Sandisk Technologies Inc. System and method for bank logical data remapping
US9792063B2 (en) 2014-01-15 2017-10-17 Intel Corporation Deduplication-based data security
US10275171B2 (en) * 2014-09-16 2019-04-30 Kove Ip, Llc Paging of external memory

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100161909A1 (en) * 2008-12-18 2010-06-24 Lsi Corporation Systems and Methods for Quota Management in a Memory Appliance
US20120266165A1 (en) * 2011-04-18 2012-10-18 Shanwei Cen Combined virtual graphics device
JP2013033369A (ja) * 2011-08-02 2013-02-14 Lenovo Singapore Pte Ltd メイン・メモリのフリー・メモリ量を拡大する方法およびコンピュータ
JP2015170271A (ja) * 2014-03-10 2015-09-28 日本電気株式会社 記憶領域管理装置、記憶領域管理方法及び記憶領域管理プログラム
US20160077966A1 (en) * 2014-09-16 2016-03-17 Kove Corporation Dynamically provisionable and allocatable external memory
US20160077975A1 (en) * 2014-09-16 2016-03-17 Kove Corporation Provisioning of external memory
US20160378530A1 (en) * 2015-06-27 2016-12-29 Vmware, Inc. Remote-direct-memory-access-based virtual machine live migration

Also Published As

Publication number Publication date
KR102168193B1 (ko) 2020-10-20
US20180032260A1 (en) 2018-02-01
US10372606B2 (en) 2019-08-06

Similar Documents

Publication Publication Date Title
US9529814B1 (en) Selective file system caching based upon a configurable cache map
US10133677B2 (en) Opportunistic migration of memory pages in a unified virtual memory system
US10956323B2 (en) NVDIMM emulation using a host memory buffer
US9047200B2 (en) Dynamic redundancy mapping of cache data in flash-based caching systems
US20080040540A1 (en) On-disk caching for raid systems
TWI699653B (zh) 提供可擴展與可收縮記憶體超容量快取的模組、系統與方法
US11030088B2 (en) Pseudo main memory system
JP2008176785A (ja) ハイブリッドハードディスクドライブ、ハイブリッドハードディスクドライブを内蔵するコンピュータシステム、そしてハイブリッドハードディスクドライブのフラッシュメモリdma回路
KR102168193B1 (ko) 초과 공급 메모리 장치들을 통합하기 위한 시스템 및 방법
US10073644B2 (en) Electronic apparatus including memory modules that can operate in either memory mode or storage mode
US10754785B2 (en) Checkpointing for DRAM-less SSD
US20180074971A1 (en) Ddr storage adapter
US20130339594A1 (en) Host bus adapters with shared memory and battery backup
CN105786721A (zh) 一种内存地址映射管理方法及处理器
KR20130079706A (ko) 휘발성 메모리를 포함하는 저장 장치의 구동 방법
US20230176966A1 (en) Methods and apparatus for persistent data structures
US11354233B2 (en) Method and system for facilitating fast crash recovery in a storage device
US11169918B2 (en) Data access in data storage device including storage class memory
US8850087B2 (en) Storage device and method for controlling the same
JP2018060538A (ja) コンピューティングシステム及びその動作方法
KR20140102911A (ko) 메모리-디스크 통합 시스템
US20090024798A1 (en) Storing Data
US20220382478A1 (en) Systems, methods, and apparatus for page migration in memory systems
EP4273708A1 (en) Operation method of host configured to communicate with storage devices and memory devices, and system including storage devices and memory devices
KR20200034560A (ko) 스토리지 장치 및 스토리지 장치의 동작 방법

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant