KR102437775B1 - 효율적인 맵핑을 위한 페이지 캐시 장치 및 방법 - Google Patents

효율적인 맵핑을 위한 페이지 캐시 장치 및 방법 Download PDF

Info

Publication number
KR102437775B1
KR102437775B1 KR1020150153949A KR20150153949A KR102437775B1 KR 102437775 B1 KR102437775 B1 KR 102437775B1 KR 1020150153949 A KR1020150153949 A KR 1020150153949A KR 20150153949 A KR20150153949 A KR 20150153949A KR 102437775 B1 KR102437775 B1 KR 102437775B1
Authority
KR
South Korea
Prior art keywords
skip list
mapping
page
page table
module
Prior art date
Application number
KR1020150153949A
Other languages
English (en)
Other versions
KR20160060550A (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 KR20160060550A publication Critical patent/KR20160060550A/ko
Application granted granted Critical
Publication of KR102437775B1 publication Critical patent/KR102437775B1/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
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1045Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache
    • G06F12/1054Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache the data cache being concurrently physically addressed
    • 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/0873Mapping of cache memory to specific storage devices or parts thereof
    • 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/0882Page mode
    • 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
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/608Details relating to cache mapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation

Landscapes

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

Abstract

본 발명은 페이지 캐시 컨트롤러에 관한 것으로, 페이지 캐시 컨트롤러는 가상 메모리 페이지 어드레스를 포함하는 요청을 수신하는 요청 수신 모듈, 그리고 스킵 리스트 또는 페이지 테이블을 포함하는 맵핑 모듈을 포함하되, 상기 스킵 리스트 또는 상기 페이지 테이블 중 적어도 하나는 가상 메모리 페이지 어드레스를 물리 메모리 페이지 어드레스로 맵핑한다.

Description

효율적인 맵핑을 위한 페이지 캐시 장치 및 방법{PAGE CACHE DEVICE AND METHOD FOR EFFICIENT MAPPING}
본 발명은 메모리 페이지 캐시에 관한 것으로, 보다 구체적으로는 효율적인 메모리 페이지 맵핑을 위한 페이지 캐시 장치 및 그 방법에 관한 것이다.
오늘날, 대부분의 운영 시스템(OS) 커널들 또는 하이퍼바이저들은 DRAM(Dynamic Random Access Memory)을 자주 사용되고, 휘발성의 사용자 데이터, 파일 시스템 데이터, 등을 위한 페이지 캐시로서 사용한다. DRAM은 NAND 메모리 보다 상당히 비싸기 때문에, 대부분의 데이터 센터 서버들은 비용적인 측면을 고려하여 제한된 DRAM 용량을 가진다.
일부 어플리케이션들, 특히 빅 데이터 어플리케이션들은 DRAM 페이지 캐시에 저장된 매우 큰 워킹 세트(working set)를 가지는 것으로부터 이익을 얻을 수 있다. 어플리케이션 워킹 세트가 페이지 캐싱을 위해 사용 가능한 DRAM의 양을 초과하는 경우, 커널 및 하이퍼바이저(이하, 둘 모두를 커널로 언급)는 DRAM에서 보조 기억 장치로 캐시 페이지들을 이빅트하기 위해 가장 최근에 사용된(LRU) 교체 정책을 사용한다. 보조 기억 장치는 DRAM에 비해 매우 느리기 때문에(예컨대, 100배 이상 느림), DRAM과 보조 기억 장치 접근 속도 사이의 차이를 다루기 위해서 상당한 오버헤드가 발생한다. 휘발성 및 불휘발성 모두인, 스토리지 또는 메모리 장치들은 더 빨라지고, 발생된 프로세싱 복잡도 오버헤드는 상당한 프로세싱 코스트 인자가 된다.
통상적인 메모리 페이지 맵핑 기술들은 복잡한 호스트 인터페이스를 필요로 하며 그리고 거대한 가상 어드레스 공간들을 한정된 물리 어드레스 공간들로 맵핑함으로 인해 비효율적이다. 시간이 지남에 따라 증가하는 큰 메모리 어드레스 공간들에 대한 요구로서, 비용 및 효율성에 대한 문제들은 계속될 것이며 더 악화될 것이다.
또한, 커널이 일반적으로 저장 장치와 동작하는 경우, 커널 블록 레이어는 모든 입력/출력(I/O) 관련 요청들을 처리하기 위해 인보크(invoke)된다. 커널 저장 레이어들은 요청들을 IO 장치의 장치 드라이버로 전달하기 위해 그 뒤에 호출된다. 이러한 프로세싱 경로는 복잡하고 그리고 가장 빈번한 IO 요청 패턴들에 대해 높은 IO 장치 성능을 달성하기 어렵다. IO 요청 패턴들이 변하는 경우, 프로세싱 경로 또한 변해야 하고, 그렇지 않을 경우, 성능에 대한 패널티가 발생한다.
본 발명의 목적은 효율적으로 메모리 페이지를 맵핑하는 방법을 제공하는데 있다.
본 발명에 따른 페이지 캐시 컨트롤러는 가상 메모리 페이지 어드레스를 포함하는 요청을 수신하는 요청 수신 모듈, 스킵 리스트 또는 페이지 테이블을 포함하는 맵핑 모듈을 포함하되, 상기 스킵 리스트 또는 상기 페이지 테이블 중 적어도 하나는 가상 메모리 페이지 어드레스를 물리 메모리 페이지 어드레스로 맵핑한다.
실시 예로서, 상기 맵핑 모듈은 상기 스킵 리스트의 섹션을 상기 페이지 테이블로 동적으로 변환하는 맵핑 로직 섹션을 더 포함한다.
실시 예로서, 상기 맵핑 로직 섹션은 미리 정의된 밀집도(populated density) 문턱치보다 더 큰 노드들의 밀집도를 가지는 상기 스킵 리스트에 응답하여 상기 스킵 리스트의 섹션을 상기 페이지 테이블로 동적으로 변환한다.
실시 예로서, 상기 미리 결정된 밀집도 문턱치는 80%이다.
실시 예로서, 상기 맵핑 로직 섹션은 미리 정의된 검색 시간 문턱치보다 더 큰 검색 시간을 가지는 상기 스킵 리스트에 응답하여 상기 스킵 리스트의 섹션을 상기 페이지 테이블로 동적으로 변환한다.
실시 예로서, 상기 맵핑 모듈은 상기 페이지 테이블을 상기 스킵 리스트의 섹션으로 동적으로 변환하는 맵핑 로직 섹션을 더 포함한다.
실시 예로서, 상기 맵핑 로직 섹션은 미리 정의된 밀집도 문턱치보다 더 작은 엔트리들의 밀집도를 가지는 상기 페이지 테이블에 응답하여 상기 페이지 테이블을 상기 스킵 리스트의 섹션으로 동적으로 변환한다.
실시 예로서, 상기 미리 정의된 밀집도 문턱치는 10%이다.
실시 예로서, 상기 맵핑 로직 섹션은 미리 정의된 룩업 시간 문턱치보다 더 큰 룩업 시간을 가지는 상기 페이지 테이블에 응답하여 상기 페이지 테이블을 상기 스킵 리스트의 섹션으로 동적으로 변환한다.
실시 예로서, 상기 페이지 테이블은 제 1 페이지 테이블로 참조되고, 상기 스킵 리스트는 제 1 스킵 리스트로 참조되며, 그리고 상기 맵핑 모듈은 제 2 페이지 테이블 및 제 2 스킵 리스트를 더 포함한다.
실시 예로서, 상기 맵핑 모듈은 제 3 페이지 테이블 및 제 3 스킵 리스트를 더 포함하며, 상기 제 2 스킵 리스트는 상기 제 3 페이지 테이블에 대한 제 1 포인터를 포함하고, 그리고 상기 제 2 스킵 리스트는 상기 제 3 스킵 리스트에 대한 제 2 포인터를 포함한다.
실시 예로서, 상기 스킵 리스트는 멀티-레벨 스킵 리스트이다.
실시 예로서, 상기 가상 메모리 페이지 어드레스와 연관된 메모리 컨텐츠를 포함하는 응답을 전송하는 요청 응답 모듈, 상기 요청 수신 모듈 및 상기 요청 응답 모듈과 연결되며 상기 요청 및 상기 응답의 수신 및 전송을 각각 관리하는 요청 관리 모듈, 그리고 상기 요청 관리 모듈과 연결되고 그리고 자주 접근된 메모리 페이지들을 캐싱하는 캐시 매니저를 더 포함하되, 상기 맵핑 모듈은 제 1 기준(criteria)에 응답하여 상기 스킵 리스트의 섹션을 상기 페이지 테이블로 동적으로 변환하고, 그리고 제 2 기준에 응답하여 상기 페이지 테이블을 상기 스킵 리스트의 섹션으로 동적으로 변환하는 맵핑 로직 섹션을 더 포함한다.
실시 예로서, 상기 맵핑 모듈은, 상기 요청 수신 모듈과 연결되며, 대응하는 메모리 페이지가 TLB(Translation Look-aside Buffer)내로 캐시되는 경우 상기 가상 메모리 페이지 어드레스와 연관된 메모리 컨텐츠를 즉시 리턴시키는 TLB 및 인덱스 매니저, 상기 TBL 및 인덱스 매니저와 연결되며, 자주 접근된 메모리 페이지들을 캐싱하는 맵핑 캐시 매니저, 그리고 상기 맵핑 캐시 매니저 및 상기 맵핑 로직 섹션과 연결되며, 불휘발성 저장 장치와 인터페이싱하는 스토리지 인터페이스를 더 포함한다.
본 발명에 따른 메모리 페이지들을 효율적으로 맵핑하기 위한 컴퓨터로 구현되는 방법은, 가상 메모리 페이지 어드레스를 포함하는 요청을 요청 수신 모듈이 수신하는 단계, 맵핑 모듈의 스킵 리스트 또는 맵핑 모듈의 페이지 테이블 중 적어도 하나에 의해 상기 가상 메모리 페이지 어드레스를 물리 메모리 페이지 어드레스로 맵핑하는 단계, 그리고 상기 맵핑 모듈의 맵핑 로직 섹션이 상기 스킵 리스트를 상기 페이지 테이블로 동적으로 변환하는 단계를 포함한다.
실시 예로서, 상기 맵핑 모듈의 상기 맵핑 로직 섹션이 미리 정의된 밀집도 문턱치보다 더 큰 노드들의 밀집도를 가지는 상기 스킵 리스트 또는 미리 정의된 검색 시간 문턱치보다 더 큰 검색 시간을 가지는 상기 시킵 리스트 중 적어도 하나에 응답하여 상기 스킵 리스트의 상기 섹션을 상기 페이지 테이블로 동적으로 변환하는 단계를 더 포함한다.
실시 예로서, 상기 맵핑 모듈의 상기 맵핑 로직 섹션이 미리 정의된 밀집도 문턱치보다 작은 엔트리들의 밀집도를 가지는 상기 페이지 테이블 또는 미리 정의된 룩업 시간 문턱치보다 더 큰 룩업 시간을 가지는 상기 페이지 테이블 중 적어도 하나에 응답하여 상기 페이지 테이블을 상기 스킵 리스트의 상기 섹션으로 동적으로 변환하는 단계를 더 포함한다.
본 발명에 따른 메모리 페이지를 효율적으로 맵핑하는 시스템은, 인터커넥터, 그리고 상기 인터커넥터를 통해 복수의 클라이언트들과 통신하도록 연결되는 서버를 포함하되, 상기 서버는, 불휘발성 저장 장치, 그리고 상기 복수의 클라이언트로부터의 복수의 요청들을 수신하고, 그리고 상기 불후발성 저장 장치와 통신하는 페이지 캐시 컨트롤러를 포함하고, 상기 페이지 캐시 컨트롤러는, 각각이 가상 메모리 페이지 어드레스를 포함하는 복수의 요청들을 수신하는 요청 수신 모듈, 그리고 스킵 리스트 및 페이지 테이블을 포함하는 맵핑 모듈을 포함하되, 상기 스킵 리스트 또는 상기 페이지 테이블 중 적어도 하나는 복수의 요청들 각각의 가상 메모리 페이지 어드레스를 대응하는 물리 메모리 페이지 어드레스로 맵핑한다.
실시 예로서, 상기 맵핑 모듈은, 미리 정의된 밀집도 문턱치보다 더 큰 노드들의 밀집도를 가지는 상기 스킵 리스트 또는 미리 정의된 검색 시간 문턱치보다 더 큰 검색 시간을 가지는 상기 스킵 리스트 중 적어도 하나에 응답하여 상기 스킵 리스트의 섹션을 상기 페이지 테이블로 동적으로 변환하는 맵핑 로직 섹션을 더 포함하고, 상기 맵핑 로직 섹션은, 미리 정의된 밀집도 문턱치보다 더 작은 엔트리들의 밀집도를 가지는 상기 페이지 테이블 또는 미리 정의된 룩업 시간 문턱치보다 더 큰 룩업 시간을 가지는 상기 페이지 테이블 중 적어도 하나에 응답하여 상기 페이지 테이블을 상기 스킵 리스트의 상기 섹션으로 동적으로 변환한다.
본 발명에 따른 메모리 페이지 맵핑 방법은 효율적으로 메모리 페이지를 맵핑할 수 있다.
도 1은 본 발명의 실시 예들에 따른 맵핑 모듈을 가지는 페이지 캐시 컨트롤러를 가지는 서버를 포함하는 컴퓨팅 시스템의 예시적인 블록도이다.
도 2는 본 발명의 실시 예들에 따른 도 1의 서버의 페이지 캐시 컨트롤러 및 저장 장치의 예시적인 블록도이다.
도 3은 본 발명의 실시 예들에 따른 도 1의 저장 장치의 예시적인 블록도이다.
도 4는 본 발명의 실시 예들에 따른 도 1의 맵핑 모듈의 예시적인 블록도이다.
도 5는 본 발명의 실시 예들에 따른 하나 이상의 동적 페이지 테이블들 및 하나 이상의 동적 스킵 리스트들을 사용하는 멀티-레벨 메모리 페이지 맵핑 기술의 블록도이다.
도 6a는 본 발명의 실시 예들에 따른 멀티-레벨 스킵 리스트의 예시적인 블록도이다.
도 6b는 본 발명의 실시 예에 따른 도 6a의 멀티-레벨 스킵 리스트의 성능을 유추가하기 위한 밸런스드 바이너리 트리의 예시적인 블록도이다.
도 7은 본 발명의 실시 예들에 따라 멀티-레벨 스킵 리스트의 섹션의 페이지 테이블로의 동적 변환을 예시적으로 보여주는 블록도이다.
도 8은 본 발명의 실시 예들에 따른 메모리 페이지 테이블 맵핑 기술의 예시적인 흐름도 및 블록도이다.
도 9는 본 발명의 실시 예들에 따른 효율적으로 메모리 페이지들을 맵핑하기 위한 기술을 도시하는 흐름도이다.
도 10은 도 1의 맵핑 모듈을 포함하는 컴퓨팅 시스템의 블록도이다.
다음 실시 예들은 기술분야에서 통상의 지식을 가진 자가 명세서에서 설명된 실시 예들을 만들고 그리고 사용할 수 있도록 충분히 상세하게 설명된다. 다른 실시 예들이 본 개시 내용에 기초하여 명백할 것으로 이해되어야 하고, 그 시스템, 프로세스, 또는 기계적 변경은 실시 예의 범위를 벗어나지 않고 이루어질 수 있다.
아래의 설명에서, 많은 특정한 세부 사항들이 실시 예의 자세한 이해를 제공하기 위해 주어졌다. 그러나, 이러한 특정한 세부 사항들 없이도 실시 예들이 실시될 수 있음을 이해할 수 있을 것이다. 실시 예를 모호하게 하는 것을 방지하기 위해, 일부 잘 알려진 회로들, 시스템 구성들, 및 처리 단계들은 상세하게 개시되지 않는다.
일반적으로, 본 명세서에서 사용된 용어, 그리고 특히 첨부된 청구항(즉, 첨부된 청구항의 본체부(body))에서 사용된 용어들은, "개방(open)" 용어들(즉, 용어 "포함하는"은 "포함하나 제한되지는 않는" 것으로, 용어 "가지는"은 "적어도 가지는" 것으로, 용어 "포함한다"는 "포함하나 제한되지는 않는" 것 등으로 이해되어야 한다.)로서 일반적으로 의도된 것으로 기술분야에서 통상의 지식을 가진 자에 의해 이해되어야 할 것이다. 만약 소개된 청구항 설명(introduced claim recitation)의 특정 번호가 의도된 것이라면, 그와 같은 의도는 청구항에서 명백하게 설명될 것이며, 그리고 그와 같은 설명의 부재는 그와 같은 의도가 없는 것으로 기술분야에서 통상의 지식을 가진 자에 의해 이해되어야 할 것이다. 예를 들어, 이해를 위해, 하기의 첨부된 청구항들은 청구항 설명들을 소개하기 위한 도입구들 "적어도 하나" 및 "하나 이상"의 사용을 포함할 수 있다. 그러나 심지어 동일한 청구항이 도입구들 "하나 이상" 또는 "적어도 하나" 그리고 "a" 또는 "an"과 같은 부정관사(즉, "a" 및/또는 "an"은 "적어도 하나" 또는 "하나 이상"을 의미하는 것으로 해석되어야 한다)을 포함하는 경우에도, 그와 같은 구들의 사용은 부정관사 "a" 또는 "an"에 의한 청구항 설명의 소개가 그와 같은 소개된 청구항 설명을 단지 하나의 그와 같은 설명을 포함하는 것의 예시로 한정하는 것을 함축하는 것으로 이해되어서는 안 된다.
본 명세서에서 기술되는 본 발명에 따른 실시 예들은 메인 메모리 페이지 캐시를 위해 커널 코드 복잡도를 감소시키고 그리고 메모리 페이지 맵핑 효율성을 증가시키는, 보조 페이지 캐시 장치를 포함할 수 있다. 본 발명에 따른 실시 예들은 그 자신의 특성들에 따라 각 스테이지를 최적화하는 것을 허용하고 더 유연한 멀티-스테이지 맵핑 기법을 포함할 수 있다. 예를 들어, 거대한 가상 페이지 어드레스 공간이 물리 페이지 어드레스로 시간 및 공간 모두의 측면에서 효율적으로 맵핑될 수 있다. 본 발명에 따른 실시 예들은 커널 가상 페이지 어드레스 캐싱을 위한 맵핑 기법을 구현할 수 있는 내부 맵핑 모듈을 포함할 수 있다. 일부 실시 예들에서, 맵핑 모듈은 희박한 밀집도의 커널 가상 페이지 어드레스 공간을 물리 블록(즉, 페이지) 어드레스 공간 또는 공간들로 맵핑하기 위해 통합된 균형 스킵 리스트들 및 페이지 테이블들을 포함할 수 있다. 맵핑 모듈은 스킵 리스트로부터의 하나 이상의 섹션들을 페이지 테이블로, 또는 페이지 테이블로부터의 섹션들을 스킵 리스트로 자동으로 그리고 동적으로 변환할 수 있다. 따라서, 커널 페이지 캐시는 휘발성 또는 불휘발성 페이지 캐시 저장 매체를 사용하는 더 큰 보조 메모리를 가지기 위해 확장될 수 있다.
본 명세서에서 기술되는 본 발명의 실시 예들은 커널 코드 복잡도를 감소시키고 그리고 메모리 페이지 맵핑 효율성을 증가시키는, 메인 메모리 페이지 를 위한 보조 페이지 캐시 장치를 포함한다. 본 발명의 실시 예들은 더 유연하고 그리고 그 자신의 특성들에 따라 각 스테이지를 최적화할 수 있는 멀티-스테이지 맵핑 기술을 포함할 수 있다. 예를 들어, 거대한 가상 페이지 어드레스 공간은 시간 및 공간 측면에서 효율적으로 물리 페이지 어드레스로 맵핑될 수 있다. 본 발명의 실시 예들은 커널 가상 페이지 어드레스 캐싱을 위한 맵핑 기술을 수행할 수 있는 내부 맵핑 모듈을 포함할 수 있다. 일부 실시 예들에서, 맵핑 모듈은 흩어져 있는 통합된 밸런스드 스킵 리스트들 및 페이지 테이블들을 포함할 수 있다. 맵핑 모듈은 자동 및 동적으로 스킵 리스트로부터의 하나 이상의 섹션들을 페이지 테이블로 변환하거나, 또는 페이지 테이블로부터의 섹션들을 스킵 리스트로 변환할 수 있다. 따라서, 커널 페이지 캐시는 휘발성 또는 불휘발성 페이지 캐시 저장 매체를 사용하는 더 큰 보조 메모리를 가지기 위해 확장될 수 있다.
도 1은 본 발명의 실시 예에 따른 맵핑 모듈(115)을 구비하는 페이지 캐시 컨트롤러(110)를 가지는 서버(105)를 포함하는 컴퓨팅 시스템(100)의 예시적인 블록도이다. 컴퓨팅 시스템(100)은 하나 이상의 클라이언트들(130), 인터커넥터(125)(예컨대, 인터넷, 파일 시스템, 로컬 메모리, 등), 및 서버(105)를 포함할 수 있다. 서버(105)는 인터커넥터(125)를 통해 복수의 클라이언트들(130)과 통신할 수 있다. 서버(105)는 불휘발설 저장 장치(120)를 포함할 수 있다. 불휘발성 저장 장치는 플래시 메모리, PCRAM(phase-change random access memory), STT-RAM(spin-transfer torque random access memory), MRAM(magnetic random access memory), RRAM(resistive random access memory), HDDs(hard disk drives) 등을 포함할 수 있다. 서버(105)는 운영 시스템 커널(112)을 포함할 수 있다. 커널(112)은 페이지 캐시 컨트롤러(110)을 포함하거나 또는 페이지 캐시 컨트롤러(110)와 통신할 수 있다. 페이지 캐시 컨트롤러(110)는 맵핑 모듈(115)을 포함할 수 있다. 맵핑 모듈(115)은 맵핑 캐시(117)를 포함할 수 있다.
본 발명에 따른 실시 예들에 따르면, 서버(105)는 IO 블록 인터페이스를 커널(112)에 노출할 필요가 없다. 더욱이, 하드웨어 인터페이스들도 고정될 필요가 없다. 서버(105)는 마더 보더(미도시)와 상호연결하기 위한 적당한 모든 하드웨어 인터페이스를 구비하거나 또는 마더 보더에 통합될 수 있다. 예를 들어, 서버(105)는 NVMe(non-volatile memory express) 하드웨어 인터페이스, PCIe(peripheral component interconnect express) 인터페이스, 마더 보더 DIMM(dual in-line memory module) 커넥터, 네트워크 인터페이스(예컨대, 인터커넥터(125)), 등을 포함하거나 또는 이와 같은 것들과 통신할 수 있다.
커널(112) 내부에서, 메모리 페이지가 일반적으로 페이지 캐시 LRU(least recently used) 리스트로부터 이빅트되는 경우, 메모리 페이지는 스왑 공간 또는 파일 시스템 공간(미도시) 모두에 저장될 수 있다. 본 발명에 따른 실시 예들에 따르면, 메모리 페이지는 아래에서 더 논의될, 맵핑 모듈(115)에 의해 수행되는 동작들에 따라, 저장 장치(120)에 이빅트될 수 있다. 서버(105) 상에서 구동될 수 있는 어플리케이션들은 전형적인 메인 메모리 페이지 캐시가 홀드(hold)할 수 있는 것, 특히 가상화 또는 빅 데이터가 관련되는 경우보다 더 큰 워킹 세트(working set)를 사용할 수 있다. 본 발명에 따른 실시 예들에 따르면, 더 낮은 가격의 메모리들(예컨대, 플래시, PCRAM, MRAM, RRAM, 등)을 사용할 수 있는 맵핑 모듈(115)의 부분적인 보조 메모리 페이지 맵핑 캐시(117) 때문에 서버(105)의 성능은 향상되고 가격은 감소할 수 있다. 맵핑 모듈(115)은 저장 장치(120)에 정보를 기입하거나 저장 장치(120)로부터 정보를 독출하기 위해 저장 장치(120)와 인터페이싱할 수 있다. 저장 장치(120)는 사용자 데이터, 맵핑 인덱스 정보, 맵핑 스킵 리스트 정보, 맵핑 테이블 정보, 및/또는 맵핑 모듈(115)을 위한 메타 데이터와 같은 정보를 저장할 수 있다.
도 2는 본 발명에 따른 실시 예들에 따른 도 1의 페이지 캐시 컨트롤러(110) 및 서버(105)의 저장 장치(120)의 예시적인 블록도이다. 페이지 캐시 컨트롤러(110)는 가상 메모리 페이지 어드레스를 포함하는 요청을 수신하기 위한 요청 수신 모듈(205)을 포함할 수 있다. 요청 수신 모듈(205)은 미처리된 사용자 요청들을 조정할 수 있다. 페이지 캐시 컨트롤러(110)는 가상 메모리 페이지 어드레스와 연관된 메모리 컨텐츠 또는 데이터를 포함하는 응답을 전송하기 위한 요청 응답 모듈(210)을 포함할 수 있다. 페이지 캐시 컨트롤러(110)는 요청 수신 모듈(205) 및 요청 응답 모듈(210)과 통신 가능하게 연결되는 요청 관리 모듈(215)을 포함할 수 있다. 요청 관리 모듈(215)은 사용자 요청들 및 응답들 각각의 수신 및 전송을 관리할 수 있다.
페이지 캐시 컨트롤러(110)는 요청 관리 모듈(215)과 통신 가능하게 연결되는 캐시 매니저(225)를 포함할 수 있다. 캐시 매니저(225)는 자주 액세스된 메모리 페이지들을 캐싱할 수 있다. 페이지 캐시 컨트롤러(110)는 맵핑 모듈(115)을 포함할 수 있다. 맵핑 모듈(115)은 맵핑 캐시(117) 및 맵핑 로직 섹션(119)을 포함할 수 있다. 맵핑 모듈(115)은 캐시 히트(hit)들이 요청 관리 모듈로 즉시 리턴될 수 있는 맵핑 동안 다른 시점들 및 위치들에서 맵핑 캐시(117)에 액세스할 수 있다. 캐시 미스는 맵핑 모듈에 의해 캐치될 수 있고 그리고 결국 저장 장치(120)로 제출될 수 있다. 이와 같은 상황이 발생하기 전에, 다른 저장 스토리지 요청들이 그것들의 프로세싱을 끝내기 위해 저장 장치(120)로 제출될 수 있다. 저장 장치(120)가 사용자 데이터를 리턴한 후에, 사용자 데이터는 그것의 캐시-능력(cache-ability)이 결정된 이후에 요청 관리 모듈(215)로 리턴될 수 있다.
본 발명에 따른 실시 예들에 따르면, 맵핑 로직 섹션(119)은 아래에서 더 자세하게 설명될 바와 같이, 제 1 기준(criteria)에 응답하여 스킵 리스트의 섹션을 페이지 테이블로 동적으로 변환할 수 있고, 그리고 제 2 기준에 응답하여 페이지 테이블을 스킵 리스트의 섹션으로 동적으로 변환할 수 있다. 맵핑 모듈(115)은 아래에서 더 자세하게 설명될 바와 같이 가상 메모리 페이지 어드레스를 물리 메모리 페이지 어드레스로 맵핑할 수 있다. 캐시 매니저(225) 및/또는 맵핑 모듈(115)은 아래에서 더 자세하게 설명될 바와 같이, 저장 장치(120)와 인터페이싱할 수 있다.
도 3은 본 발명에 따른 실시 예들에 따른 도 1의 저장 장치(120)의 예시적인 블록도이다. 저장 장치(120)는 물리 메모리 페이지 어드레스를 포함하는 페이지 캐시 컨트롤러(110)로부터의 요청을 수신하기 위한 요청 수신 모듈(305), 그리고 페이지 캐시 컨트롤러(110)에 물리 메모리 페이지 어드레스와 연관된 메모리의 컨텐츠를 응답하기 위한 요청 응답 모듈(310)을 포함할 수 있다. 요청 관리 모듈(315)은 요청 수신 모듈(305) 및 요청 응답 모듈(310)과 통신 가능하게 연결되고, 그리고 요청들 및 응답들 각각의 수신 및 전송을 관리할 수 있다.
저장 장치(120)는 스토리지 유지 매니저(storage maintenance manager, 325)를 포함할 수 있다. 스토리지 유지 메너지(325)는 가비지 컬렉터(330), 웨어 레벨링 섹션(335), 및 리드 디스터번스 섹션(340)을 포함할 수 있다. 저장 장치(120)는 물리 메모리 페이지들을 관리하기 위한 로우-레벨 맵핑 모듈(317)을 포함할 수 있다. 로우-레벨 맵핑 모듈(317)은 물리 메모리 페이지 맵핑 및 관리를 위한 맵핑 하드웨어(320)를 포함할 수 있다. 스토리지 유지 매니저(325) 및/또는 로우-레벨 맵핑 모듈(317)은 매체 컨트롤러(medium controller, 350)를 통해 스토리지 미디어(355)와 인터페이싱할 수 있다. 스토리지 미디어(355)는 플래시 메모리 장치, PCRAM 장치, MRAM 장치, RRAM 장치, 및 HDD 장치, 등을 포함할 수 있다.
도 4는 본 발명에 따른 실시 예들에 따른 도 1의 맵핑 모듈(115)의 예시적인 블록도이다. 맵핑 모듈(115)은 가상 메모리 페이지 어드레스를 포함하는 요청을 수신하기 위한 요청 수신 모듈(405)을 포함할 수 있다. 맵핑 모듈(115)은 가상 메모리 페이지 어드레스와 연관된 메모리 컨텐츠 또는 데이터를 포함하는 응답을 전송하기 위한 요청 응답 모듈(410)을 포함할 수 있다. 맵핑 모듈(115)은 요청 수신 모듈(405) 및 요청 응답 모듈(410)과 통신 가능하게 연결되는 TLB(translation look-aside buffer) 및 인덱스 매니저(415)를 포함할 수 있다. TLB 및 인덱스 매니저(415)는 대응하는 메모리 페이지가 TLB(415) 내로 캐시되는 경우 즉시 가상 메모리 페이지 어드레스와 연관딘 메모리 컨텐츠 또는 데이터를 리턴할 수 있다.
맵핑 모듈(115)은 TLB 및 인덱스 매너저(415)와 통신 가능하게 연결되는 맵핑 캐시 매너저(420)를 포함할 수 있다. 맵핑 캐시 매니저(420)는 자주 액세스된 메모리 페이지들을 캐시할 수 있다. 맵핑 모듈(115)은 맵핑 로직 섹션(119)을 포함할 수 있다. 맵핑 로직 섹션(119)은 아직 캐시되지 않은 메모리 페이지들에 대한 요청들을 처리하기 위한 인덱스 캐시(432) 및 폴트 핸들러(fault handler, 430)를 포함할 수 있다. 맵핑 모듈(115)은 맵핑 캐시 매니저(420) 및 맵핑 로직 섹션(119)과 통신 가능하게 연결되고, 그리고 불휘발성 저장 장치(120)와 인터페이싱하도록 구성되는 스토리지 인터페이스(435)를 포함할 수 있다.
요청이 요청 수신 모듈(405)에서 수신되는 경우, TLB 및 인덱스 매너저(415)는 그 요청이 TLB(415)에 존재하는지를 결정하기 위해 메모리 어드레스를 룩업(lookup)할 수 있다. 만약 존재한다면, 요청 응답 모듈(410)은 가상 메모리 어드레스와 연관된 메모리 컨텐츠 또는 데이터를 즉시 리턴할 수 있다.반면에, 존재하지 않는다면, 맵핑 캐시 매니저(420)는 메모리 어드레스가 맵핑 캐시 매니저(420)에 존재하는지를 결정할 수 있고, 만약 존재하지 않는다면, 맵핑 로직 섹션(119)은 스토리지 인터페이스(435)를 통해 저장 장치(120)로부터 물리 메모리 어드레스와 연관된 메모리 컨텐츠 또는 데이터를 요청할 수 있다. 스토리지 인터페이스(435)는 메모리 페이지가 스토리지 매체로부터 현재 독출되었고 그리고 그것이 현재 캐시되었음을 폴트 핸들러(430)에게 알려줄 수 있다. 맵핑 로직 섹션(119)은 요청 응답 모듈(410)을 통해 요청된 메모리 페이지의 가상 어드레스를 리퀘스터(requester)로 리턴할 수 있다. 만약 요청된 메모리 페이지가 자주 액세스된 페이지인 경우, 맵핑 로직 섹션(119)은 자주 액세스된 페이지가 TLB 및 인덱스 매니저(415)에 캐시되도록 할 수 있다.
도 5는 본 발명에 따른 실시 예들에 따른 하나 이상의 동적 페이지 테이블들(예컨대, 535) 및 하나 이상의 동적 스킵 리스트들(예컨대, 505)을 사용하는 도 1의 맵핑 로직 섹션(119)에 의해 수행될 수 있는 멀티-레벨 메모리 페이지 맵핑 기법의 블록도이다. 하나 이상의 동적 스킵 리스트들은 각각이 멀티-레벨 스킵 리스트들일 수 있다. 스킵 리스트들 및 페이지 테이블들은 런-타입 셀프 적응성과 함께 시간 및 공간 효율성을 달성하기 위해 사용될 수 있다.
하나 이상의 스킵 리스트들은 논리 맵핑 레벨들(예컨대, 제 1 레벨, 제 2 레벨, 제 n 레벨, 등)로 나누어질 수 있다. 대안적으로 또는 추가로, 하나 이상의 페이지 테이블들은 논리 맵핑 레벨들(예컨대, 제 1 레벨, 제 2 레벨, 제 n 레벨, 등)로 나누어질 수 있다. 논리 맵핑 레벨들은 메모리를 보존할 수 있다. 각 레벨은 하나 이상의 맵핑 페이지 테이블들 및/또는 스킵 리스트들을 포함할 수 있다. 예를 들어, 제 1 논리 맵핑 레벨은 스킵 리스트들(505 및 510)을 포함할 수 있다. 제 2 논리 맵핑 레벨은 스킵 리스트들(515, 525, 및 530) 및 페이지 테이블들(520 및 535)를 포함할 수 있다. 제 N 논리 맵핑 레벨은 스킵 리스트(545) 및 페이지 테이블들(540 및 550)을 포함할 수 있다. 일부 실시 예들에서, 제 1 논리 맵핑 레벨은 가상 어드레스 공간의 거대한 크기(예컨대, 72 비트, 128 비트, 또는 그 이상) 때문에 페이지 테이블들이 없이 단지 스킵 리스트들만을 포함할 수 있다. 일부 실시 예들에서, 제 1 논리 맵핑 레벨은 다른 레벨들의 스킵 리스트들 및 페이지 테이블들 포함할 수 있다. 적당한 모든 레벨들의 개수가 스킵 리스트들 및 페이지 테이블들 모두를 포함할 수 있는 것으로 이해될 수 있을 것이다.
스킵 리스트들은 각 가상 메모리 페이지 어드레스를 위해 노드를 필요하지 않기 때문에 메모리를 보존할 수 있고, 사용되지 않은 가상 메모리 페이지 어드레스들의 긴 스트레치(stretch)들이 스킵 리스트 내에 "스킵"될 수 있다. 다시 말해서, 사용중인 가상 메모리 페이지 어드레스들만이 스킵 리스트에 저장될 수 있다. 스킵 리스트는 포인트가 맵핑이 있는지 없는지에 도달되기까지 트래버스(traverse)될 수 있다. 스킵 리스트의 트래버싱은 멀티플 리드 동작을 필요로 한다. 그러나 공간 효율성이, 즉, O(n) 공간 효율성에 따라 고려 가능하다. 스킵 리스트들은 또한 페이지 테이블로의 쉬운 전환의 특징을 가진다. 더욱이, 노드들의 잦은 삽입, 수정, 및 삭제가 효율적으로 수행될 수 있다. 스킵 리스트들은 균형 이진 트리들 또는 그와 유사한 데이터 구조들과 비교될 수 있는 동일한 검색, 삽입, 및 삭제 동작들을 유지하면서 페이지 테이블들에 관하여 더 단순한 구현의 이점을 가진다. 스킵 리스트들은 O(log n) 레벨에서 수행될 수 있다. 균형 스킵 리스트(balanced skip list)는 최고의 검색 성능을 가지는 스킵 리스트이고 그리고 균형 이진 트리와 동일하거나 또는 유사한 구조를 가진다.
페이지 테이블들은 또한 메모리를 보존한다. 페이지 테이블들은 스킵 리스트들보다 빠르기 때문에 이점이 있다. 페이지 테이블들은 특정한 가장 메모리 페이지와 그것의 맵핑 사이에서 일대일 대응관계를 가진다. 따라서, 메모리의 싱글 리드 동작이 맵핑을 획득하기 위해 수행될 수 있다. 각 논리 맵핑 레벨이 적당한 모든 수의 스킵 리스트들 및 페이지 테이블들을 포함하거나 또는 그것들과 연관된 것을 가지는 것으로 이해될 것이다.
노드들(예컨대, 507)은 스킵 리스트들(예컨대, 505)에 삽입될 수 있다. 노드들(507)이 특정 스킵 리스트(505)에 삽입되는 경우, 맵핑 로직 섹션(119)은 노드들의 수 또는 검색 횟수 중 하나를 컨트롤하기 위해 페이지 테이블(예컨대, 520)에 저장될 노드 범위를 선택할 수 있다. 맵핑 로직 섹션(119)은 미리 정의된 밀집도 문턱치(populated density threshold)보다 더 큰 노드들의 밀집도를 가지는 스킵 리스트(505)에 응답하여 스킵 리스트(예컨대, 505)의 섹션(예컨대, 노드들의 그룹)을 페이지 테이블(예컨대, 520)로 동적으로 변환할 수 있다. 예를 들어, 스킵 리스트(505)가 80% 또는 그정도 보다 큰 밀집도를 가지는 경우, 맵핑 로직 섹션(119)은 스킵 리스트(505)의 섹션을 페이지 테이블(520)로 동적으로 변환할 수 있다. 밀집도는 스킵 리스트 내에 존재 가능한 노드들의 총합, 또는 스킵 리스트 내의 노드들의 미리 정의된 총합에 관하여 결정될 수 있다. 다른 예시로서, 맵핑 로직 섹션(119)은 미리 정의된 검색 시간 문턱치보다 더 큰 검색 시간을 가지는 스킵 리스트(505)에 응답하여 스킵 리스트(505)의 섹션을 페이지 테이블(520)로 동적으로 변환할 수 있다.
반대로, 맵핑 로직 섹션(119)은 페이지 테이블(예컨대, 520)을 스킵 리스트(예컨대, 505)의 섹션으로 동적으로 변환할 수 있다. 예를 들어, 맵핑 로직 섹션(119)은 미리 정의된 밀집도 문턱치보다 더 작은 엔트리들(entries)의 밀집도를 가지는 페이지 테이블(520)에 응답하여 페이지 테이블(520)을 스킵 리스트(505)의 섹션으로 동적으로 변환할 수 있다. 예를 들어, 페이지 테이블(520)이 10% 또는 그정도보다 더 작은 엔트리들의 밀집도를 가지는 경우, 맵핑 로직 섹션(119)은 페이지 테이블(520)을 스킵 리스트(505)의 섹션으로 동적으로 변환할 수 있다. 스킵 리스트의 미리 정의된 밀집도 문턱치(예컨대, 80%)와 페이지 테이블의 미리 정의된 밀집도 문턱치(10%) 사이의 차이는 스킵 리스트 및 페이지 테이블 사이의 스래싱(thrashing)(즉, 전환이 너무 자주 수행되는)을 방지한다. 전환들은 전환에 의해 야기되는 스래싱을 방지하기 위해 변화하는 레이지니스(laziness)의 정도를 가질 수 있다. 다른 예시로서, 맵핑 로직 섹션(119)은 미리 정의된 룩업 시간 문턱치보다 더 큰 룩업 시간을 가지는 페이지 테이블(520)에 응답하여 페이지 테이블(520)을 스킵 리스트(505)의 섹션으로 동적으로 변환할 수 있다. 스킵 리스트와 페이지 테이블 사이의 전환은 런 타임에서 전환이 전환 기준을 정의하는 방법을 자동으로 계속할 수 있는, 셀프-적응식일 수 있다.
페이지 테이블들 및 스킵 리스트들은 동시에 동작할 수 있다. 엠프티 맵핑 모듈(empty mapping module)은 엠프티 스킵 리스트와 함께 시작할 수 있다. 어드레스 공간이 논리적으로 그룹핑된 경우, 멀티플 최고 레벨 엠프티 시작 스킵 리스트들(multiple top-level empty starting skip lists)이 있을 수 있다. 더 많은 어드레스들이 스킵 리스트에 추가되면, 스킵 리스트의 수는 증가할 것이다. 그렇지 않으면, 더 많은 시간이 목표 노드를 찾기 위해 스킵 리스트를 트래버싱하는데 사용된다. 맵핑 로직 섹션(119)은 리스트 세그먼트를 하나 이상의 페이지 테이블들로 나누기 위한 기회를 찾을 수 있다. 스킵 리스트의 가상 어드레스들의 수가 밀도 문턱치 또는 시간 기준을 초과하는 경우, 스킵 리스트의 노드들은 페이지 테이블들로 변환될 수 있고 그리고 하나의 스킵 리스트 노드가 이후의 검색들을 위해 그 사실을 표시할 수 있다. 유사한 프로세스들이 어드레스 제거에 적용될 수 있다. 어드레스 제거의 경우, 맵핑 페이지 테이들이 소수의 유효 맵핑 엔트리들을 포함하는 경우, 맵핑 페이지 테이블이 스킵 리스트로 변환될 것이다. 페이지 테이블들 및 스킵 리스트들 사이의 전환에 대한 전환 휴리스틱(heuristics)은 페이지 테이블보다 더 큰 스킵 리스트에 응답하여 전환이 일어나는 공간 지향 휴리스틱을 포함할 수 있다 대인적으로 또는 추가적으로, 전환은 스킵 리스트 검색이 페이지 테이블 워크 쓰루(work through) 또는 룩업보다 긴 경우 일어날 수 있다. 다른 기법들이 어느 방향으로의 전환 기회를 찾기 위해 적용될 수 있다. 예를 들어, 아래의 20-비트의 어드레스 마스크를 고려하자.
어드레스 마스크: 0000 1100 1111 0011 1111
일부 실시 예들에서, 전환 기준은 연산(스킵 리스트 노드들의 키 레인지(key range))이 연속된 키 시퀀스(key sequence)의 서브셋으로 정의될 수 있다. 스킵 리스트 노드들의 범위에 연산을 적용하는 경우 숫자들의 시퀀스를 리턴할 수 있다. 만약 시퀀스에 있는 숫자들 모두가 유니크하다면, 그 전환은 성공이다. 예를 들어, 연산이 상수 0x0000 0000 0000 0070을 논리적으로 AND 연산하는 경우, 키들을 가지는 6개의 연속적인 스킵 리스트 노드들이 있을 것이다. 상수 0x0000 0000 0000 0070에 AND 연산이 수행된 경우, 모든 출력 값들은 {0x0, 0x7} 범위 내에 있을 것이다.
스킵 리스트(505) 및 페이지 테이블(520)을 참고함에도 불구하고, 동적 전환들이 스킵 리스트들(예컨대, 505, 510, 515, 525, 530, 및 545) 중 어느 하나와 페이지 테이블들(예컨대, 535, 520, 540, 및 550) 중 어느 하나 사이에서 일어날 수 있는 것으로 이해될 수 있을 것이다. 예를 들어, 페이지 테이블(520)은 페이지 테이블(550)에 대한 포인터(예컨대, PAGE POINTER)를 포함할 수 있다. 페이지 테이블(520)은 스킵 리스트(530)에 대한 포인터(예컨대, LIST POINTER)를 포함할 수 있다. 페이지 테이블들이 2 이상의 추가적인 페이지 테이블들에 대한 2 이상의 포인터들을 각각 포함할 수 있는 것으로 이해될 수 있을 것이다. 대안적으로 또는 추가로, 페이지 테이블들이 2 이상의 추가적인 스킵 리스트들에 대한 2 이상의 포인터들을 각각 포함할 수 있을 것이다. 포인터의 타입은 각 포인터를 위한 테이블의 BITS 섹션에 저장될 수 있다. 각 페이지 테이블은 BITS 필드가 포인터 타입과 같은 추가적인 정보를 저장하는데 사용될 수 있도록 미리 정의된 메모리 바운더리(예컨대, 4 킬로바이트 바운더리)에 정렬될 수 있다. BITS 필드는 예를 들어, 12 비트의 정보를 포함할 수 있다. BITS 필드는 리드-온리, 라이트-온리, 등과 같은, 다른 속성들 또는 플래그들을 포함할 수 있다. 각 페이지 테이블은 페이지 테이블 엔트리들의 다수를 차지할 수 있는, 멀티플 메모리 페이지들을 위한 맵핑 정보를 포함할 수 있다. 예를 들어, 각 페이지 테이블은 가상 메모리 페이지 어드레스들을 물리 메모리 페이지 어드레스들로 맵핑하는 엔트리들을 포함할 수 있다.
더욱이, 스킵 리스트(예컨대, 505)는 페이지 테이블(520)에 대한 포인터(예컨대, PAGE POINTER)를 포함할 수 있다. 스킵 리스트(예컨대, 505)는 스킵 리스트 노드에 저장된 스킵 리스트(515)에 대한 포인터(예컨대, LIST POINTER)를 포함할 수 있다. 2 이상의 추가적인 페이지 테이블에 대한 서로 다른 스킵 리스트 노드들에 저장된 2 이상의 포인터들을 각각 포함할 수 있다. 대안적으로 또는 추가적으로, 스킵 리스트들은 2 이상의 추가적인 스킵 리스트들에 대한 서로 다른 스킵 리스트 노드들에 저장된 2 이상의 포인터들을 각각 포함할 수 있다. 포인터의 타입은 각 포인터에 대한 스킵 리스트의 대응 노드들에 저장될 수 있다. 각 노드는 포인터 타입과 같은, 노드들에 저장된 추가적인 정보를 포함할 수 있다. 각 스킵 리스트는 스킵 리스트 노드들의 다수를 차지할 수 있는, 멀티플 메모리 페이지들에 대한 맵핑 정보를 포함할 수 있다. 예를 들어, 각 스킵 리스트는 가상 메모리 페이지 어드레스들을 물리 메모리 페이지 어드레스들로 맵핑하는 노드들을 포함할 수 있다.
맵핑 캐시(117, 도 1)는 페이지 테이블들, 스킵 리스트들, 및/또는 사용자 데이터 캐시들을 포함할 수 있다. 스킵 리스트들(예컨대, 505, 510, 515, 525, 530, 및 545) 및 페이지 테이블들(예컨대, 535, 520, 540, 및 550)은 맵핑 모듈의 맵핑 캐시(117) 내에 모두 피트(fit)될 필요는 없다. 폴트 핸들러(430)는 페이지 폴트들, 리스트 폴트들, 및/또는 페이지 테이블 폴트들을 다룰 수 있다. 다시 말해, 하나 이상의 스킵 리스트들이 맵핑 캐시(117)로부터 제거될 수 있고 그리고 보조 저장 장치(예컨대, 120)에 저장될 수 있거나, 또는 그 반대일 수 있다. 대안적으로 또는 추가적으로, 하나 이상의 페이지 테이블들이 맵핑 캐시(117)로부터 제거될 수 있고, 그리고 보조 저장 장치(120)에 저장될 수 있거나, 또는 그 반대일 수 있다. 맵핑 로직 섹션(119)은 보조 저장 장치(120)에 존재하는 페이지 테이블들 및/또는 스킵 리스트들의 검색을 가속하기 위해 인덱스 캐시(432)를 사용할 수 있다. 스킵 리스트가 보조 저장 장치(120)에서 맵핑 캐시(117)로 로드되는 경우, 균형 스킵 리스트는 리빌드(rebuild)가 필요하다면 생성될 수 있다. 일부 실시 예들에서, 맵핑 로직 섹션(119)은 스파스(sparse) 페이지 테이블들을 스파스 스킵 리스트들로 간결화하기 위한 간결화 프로세스를 야기할 수 있다. 간결화는 레이지(lazy) 간결화일 수 있다. 보조 저장 장치(120)가 충분히 높은 성능을 가지는 경우, 더 작은 DRAM이 맵핑 모듈의 맵핑 캐시(117)에 사용될 수 있다.
예시적인 맵핑 기법은 룩업 기법을 포함할 수 있다. 사용자가 파일 내의 특정한 바이트 또는 바이트의 그룹에 액세스를 시도하고, 그리고 그 바이트 또는 바이트의 그룹이 메모리에 아직 없는 경우, 커널(예컨데, 도 1의 112)은 파일 시스템의 아이노드(inode) 수를 결정할 수 있다. 아이노드 수 및 아이노드의 오프셋으로부터, 커널(112)은 가상 페이지 어드레스를 형성할 수 있다. 전형적인 페이지 어드레스는 4 킬로바이트이다. 가상 페이지 어드레스는 ASI(address space identifier), HDL(object handle), 및 PGID(page identifier)으로 구성될 수 있다. ASI는 프로세서들, 공유 라이브러리들, 및/또는 파일 시스템과 같은, 유사한 대상들의 카테고리, 또는 그것들을 위한 컨테이너일 수 있다. HDL은 어드레스 공간, 파일 시스템 내의 파일, 및/또는 프로세스 힙(heap) 내에 있을 수 있다. PGID는 또 다른 스킵 리스트를 사용할 수 있다. PGID 스킵 리스트는 예를 들어, 스킵 리스트를 위한 공간이 맵핑 페이지 테이블을 위해 요구되는 공간보다 더 큰 경우와 같은 필요한 경우에는 맵핑 페이지 테이블로 변환될 수 있다. 또 다른 예시는 예를 들어, 스킵 리스트가 너무 길거나 또는 맵핑 테이블이 하드웨어 가속기를 가지는 경우, 맵핑 페이지 테이블이 사용될 수 있도록 성능적인 측면을 고려한다.
전형적인 아이노드 수는 16 비트이다. 가상 페이지 어드레스는 맵핑 모듈(예컨대, 도 1의 115)에 제출될 수 있다. 가상 페이지 어드레스의 매치가 TLB 및 인덱스 매니저(415)에서 발견된다면, 대응하는 맵핑된 물리 페이지 어드레스가 저장 장치(120)로부터 블록을 읽는데 사용될 수 있고 그리고 읽은 블록을 사용자 또는 클라이언트로 리턴할 수 있다. 가상 페이지의 미스(miss)가 발생한 경우(즉, 가상 페이지가 TLB 내로 캐시되지 않은 경우), 엔트리는 이빅트될 수 있고 그리고, 만약 더티(dirty)라면, 캐시 업데이트가 수행될 수 있다. 물리 페이지 어드레스는 저장 장치(120)의 물리 블록 어드레스와 더 유사하다.
도 4 및 도 5를 참조하면, 맵핑 캐시(117)의 룩업이 수행될 수 있다. 만약 맵핑 캐시(117) 또한 룩업 미스를 경험한다면 인터럽트가 불휘발성 저장 장치(120)로부터의 요청을 만족시키기 위해 발행되거나, 또는 맵핑 로직 섹션(119)이 불휘발성 저장 장치(120)가 검색되도록 할 수 있다. 맵핑 로직 섹션(119)은 전용 스킵 리스트 영역을 검색할 수 있다. 스킵 리스트는 매치를 위해 트래버스될 수 있다. 매치가 발견된 경우, 대응하는 맵핑 페이지 테이블 또는 스킵 리스트가 맵핑 캐시(117)로 이동하고, 그리고 인-메모리 해시 테이블이 메모리 내의 대응 맵핑 페이지 테이블 또는 스킵 리스트를 가리키도록 수정될 수 있다. 더티 맵 페이지는 인-메모리 구조로부터 이빅트될 수 있고, 그리고 불휘발성 페이지 테이블 또는 스킵 리스트의 대응 엔트리들이 그러한 변화를 반영하기 위해 수정될 수 있다. 스킵 리스트 확장은 페이지 테이블 전환을 야기할 수 있다. 반대로, 매치가 발견되지 않은 경우, 그것은 요청된 메모리 페이지가 아직 생성되지 않았음을 의미한다. 이 경우에, 스킵 리스트 및 페이지 테이블들이 확장될 수 있다. 무효 요청들이 동일한 또는 유사한 프로세스를 통해 진행될 수 있다. 동작의 마지막에서, 스킵 리스트 또는 페이지 테이블들은 쉬링크될 수 있다. 페이지 테이블 쉬링키지(shrinkage)는 스킵 리스트 전환을 야기할 수 있다.
맵핑 모듈(115)은 고주파수에서 효율적인(시간 및 공간 모두에서) 맵핑 및 페이지 캐시 삽입, 수정, 및/또는 삭제를 구현할 수 있다. 맵핑 성능은 호스트 요청을 만족시키기 위해 중요하다. 맵핑 모듈(115)은 셀프-적응성, 희박하게 캐시된 대상들을 위한 멀티-레벨 스킵 리스트, 및 밀집하게 캐시된 대상들을 위한 멀티-레벨 맵핑 페이지을 관리할 수 있다. 불휘발성 저장 장치(예컨대, 120)는 맵핑 데이터를 저장할 수 있지만, 이것은 비용이 많이 발생할 수 있다. 희박한 핸들 공간은 단지 희박하게 밀집된 큰 맵핑 테이블을 초래할 것이다. 맵핑 모듈(115)은 변화하는 기준 주파수들과 함께 대상들의 캐싱을 수용할 수 있다. 맵핑 모듈(115)은 입력으로 요청하는 가상 페이지 어드레스를 받아들이고, 그리고 가상 페이지 어드레스를 물리 페이지 어드레스로 변환할 수 있다. 맵핑 모듈(115)은 캐시 서브시스템(예컨대, 도 2의 캐시 매니저(225))과 TLB 및 인덱스 매니저(예컨대, 도 4의 415)와 함께 동작할 수 있다. 일부 실시 예들에서, 캐시 서브시스템 및 TLB 매니저는 맵핑 모듈(115)의 일부로서 포함될 수 있다.
도 6a는 본 발명에 따른 실시 예들에 따른 멀티-레벨 스킵 리스트의 예시적인 블록도이다. 도 6b는 본 발명에 따른 실시 예에 따른 도 6a의 멀티-레벨 스킵 리스트의 성능을 유추하기 위한 균형 이진 트리의 예시적인 블록도이다.
균형 스킵 리스트(600)는 균형 이진 트리(605)에 대하여 동일하거나 또는 유사한 성능을 가질 수 있다. 예를 들어, 노드(5)가 목표 노드이고 그리고 5가 목표 값인 경우, 멀티-레벨 스킵 리스트(600)의 제 1 열(605)이 첫 번째로 트래버스될 것이다. 더 구체적으로, 열(605)의 헤드(H)와 테일(T) 사이에 있는 노드(4)가 목표 값인 5와 비교될 수 있다. 목표 값인 5가 4보다 더 크기 때문에, 다은 열(610)이 노드(4)와 테일(T) 사이에서 트래버스될 것이다. 목표 값인 5가 노드(6)보다 작기 때문에, 다음 열(615)이 목표 노드인 노드(5)에 도달하는, 노드(4)와 노드(6) 사이에서 트래버스될 것이다.
균형 이진 트리(605)에 대한 것과 유사하게, 만약 노드(5)가 목표 노드이고, 목표 값이 5인 경우, 목표 값인 5는 이진 트리의 탑 노드(4)와 비교될 것이다. 5가 4보다 크기 때문에, 4의 오른쪽으로 향하는 브랜치로 이어질 것이다. 목표 값인 5가 노드(6)보다 작기 때문에, 목표 노드인, 노드(5)로 도달하는 6의 왼쪽으로 향하는 다음 브랜치로 이어질 것이다.
상술한 바와 같이, 균형 스킵 리스트는 최고의 검색 성능을 가지고 그리고 균형 이진 트리와 동일하거나 또는 유사한 구조를 가지는 스킵 리스트이다. 노드의 삭제에 관하여 이진 트리와 비교하는 경우, 스킵 리스트 삭제는 노드가 스킵 리스트의 어디에 있는지와 상관없이 고정된 수의 동작들을 가질 수 있다. 이것은 또한 노드 삽입을 위한 경우에도 그럴 수 있다.
도 7은 본 발명에 따른 실시 예들에 따른 멀티-레벨 스킵 리스트(700)의 섹션(705)을 페이지 테이블(710)로의 동적 전환의 예시적인 블록도이다. 예를 들어, 스킵 리스트(700)가 충분한 노드 밀집도를 가지는 것과 같은 특정한 기준을 만족하는 경우, 스킵 리스트(700)의 섹션(705)은 페이지 테이블(710)로 변환될 수 있다. 반대로, 희박한 밀도의 페이지 테이블은 스킵 리스트 또는 스킵 리스트의 섹션으로 동적으로 변환될 수 있다. 더 구체적으로, 노드들(1, 2, 3, 4, 5, 6, 7, 8, 및 9)를 포함하는 멀티-열 스킵 리스트(700)의 세 번째 열은 노드들(1, 2, 3, 4, 5, 및 6)이 페이지 테이블(710)로 삽입되도록 짧아질 것이다. 멀티-열 스킵 리스트(700)의 세 번째 열은 따라서 헤드(H), 페이지 테이블(710)에 대한 포인터(1*)을 가지는 노드, 노드(9), 및 테일(T)를 가질 수 있다. 페이지 테이블(710)에서, 노드들(0 및 7)은 널(null) 또는 사용되지 않은 엔트리들일 수 있다. 전환은 싱글-레벨 스킵 리스트들뿐만 아니라, 멀티-레벨 스킵 리스트들 및 페이지 테이블 조합들과 함께 발생할 수 있다. 일부 실시 예들에서, 가상 어드레스 공간을 위한 가상 어드레스 디바이더(divider)가 구현될 수 있다. 가상 어드레스 디바이더는 어드레스의 비트들을 가로지르는 동작들을 사용하는 전환을 금지하는, 가상 어드레스 공간 세그먼트들에 대한 다른 속성들을 생성할 수 있다. 예를 들어, 특정한 프로세스의 힙 공간은 파일 시스템의 파일 공간과 다를 수 있다. 따라서, 힙 공간 및 파일 공간 모두를 가로지르는 페이지 테이블을 생성하는 것보다는 본 명세서에서 설명된 전환 기법이 사용될 수 있다.
도 8은 본 발명에 따른 실시 예들에 따른 메모리 페이지 테이블 맵핑 기법의 예시적인 흐름도 및 블록도(800)이다. 다이어그램(800)은 TLB 및 인덱스 매니저(415), 맵핑 캐시 매니저(420) 및/또는 맵핑 로직 섹션(119)을 포함하는 섹션(805), 및 저장 장치(120)를 포함한다. 아래는 이러한 구성요소들 사이의 상호작용의 예시들이다. TLB 및 인덱스 매니저(415)는 810에서 미스를 경험한다. 810에서의 미스는 맵핑 캐시 매니저(420)로부터의 맵핑 페치 및/또는 더티 맵핑 엔트리 이빅션(eviction)을 트리거할 수 있다. 캐시 미스들은 캐시 미스 업데이트 플러쉬(815)로 표시된, 불휘발성 저장 장치(120) 상의 맵핑 페이지 테이블을 찾기 위해 맵핑 로직 섹션(119)을 트리거할 수 있다. 저장 장치(120)는 820에서 리스트 또는 페이지 폴트를 리턴할 수 있다. TLB 필(fill)은 825에서 TLB 및 인덱스 매니저(415)로 리턴될 수 있다. 더티드(dirtied) 맵핑 엔트리들은 주기적으로 또는 필요한 경우 불휘발성 저장 장치(120)로 플러쉬될 수 있다. 불휘발성 저장 장치(120)는 상위 레벨(upper level)들(예컨대, TLB 및 캐시들)에 포함된 데이터의 슈퍼세트(superset)를 포함할 수 있다.
도 9는 본 발명의 실시 예들에 따른 효율적으로 메모리 페이지들을 맵핑하기 위한 기술을 도시하는 흐름도이다. 가상 메모리 페이지 어드레스를 포함하는 요청을 수신한 후, 가상 메모리 어드레스는 적어도 하나의 스킵 리스트 및/또는 맵핑 모듈의 적어도 하나의 페이지 테이블에 의해 물리 메모리 페이지 어드레스로 맵핑될 수 있다. 특정한 스킵 리스트가 밀집도가 너무 높은 경우, 또는 특정한 페이지 테이블의 밀집도가 너무 낮은 경우, 전환은 스킵 리스트 및 페이지 테이블 사이에서 발생할 수 있다. 905에서, 스킵 리스트의 밀집도가 미리 정의된 밀집도 문턱치보다 더 큰지에 대한 결정이 이루어질 수 있다. 만약 더 큰 경우, 흐름은 스킵 리스트의 섹션이 페이지 테이블로 동적으로 변화될 수 있는 915으로 건너뛸 것이다. 반면에, 더 작은 경우, 흐름은 스킵 리스트의 검색 시간이 미리 정의된 검색 시간 문턱치보다 더 큰지에 대한 결정이 이루어질 수 있는 910으로 진행할 것이다. 만약, 그렇다면, 흐름은 스킵 리스트의 섹션이 페이지 테이블로 동적으로 변환될 수 있는, 915로 진행할 것이다. 반면에, 그렇지 않을 경우, 흐름은 920으로 건너뛸 것이다.
920에서, 페이지 테이블의 밀집도가 미리 정의된 밀집도 문턱치보다 작은지에 대한 또 다른 결정이 이루어질 수 있다. 만약 그렇다면, 흐름은 페이지 테이블이 스킵 리스트의 섹션으로 동적으로 변환되는, 930으로 건너뛸 것이다. 반면에, 그렇지 않을 경우, 흐름은 페이지 테이블의 룩업 시간이 미리 정의된 룩업 시간 문턱치를 초과하는지에 대한 또 다른 결정이 이루어지는, 925로 진행할 것이다. 만약 그렇다면, 흐름은 페이지 테이블이 스킵 리스트의 섹션으로 동작으로 변환될 수 있는, 930으로 진행할 것이다. 반면에, 그렇지 않을 경우, 절차가 종료될 것이다.
도 9에 도시된 단계들은 도시된 순서로만 진행할 필요가 없음을 이해할 수 있을 것이다. 다른 순서로, 또는 도시되고 설명된 단계들 사이에 삽입 단계들을 가지는 순서로 진행할 수도 있음을 이해할 수 있을 것이다.
도 10은 도 1의 맵핑 모듈을 포함하는 컴퓨팅 시스템(1000)의 블록도이다. 도 10을 참조하면, 컴퓨팅 시스템(1000)은 클록(1010), RAM(random access memory, 1015), 유저 인터페이스(1020), 베이스밴드 칩셋과 같은 모뎀(1025), SSD(solid state drive/disk, 1040), 메모리 컨트롤러(1045), 및/또는 프로세서(1035)를 포함할 수 있고, 그것들 일부 또는 전부는 시스템 버스(1005)와 전기적으로 연결될 수 있다. 맵핑 모듈(115)은 앞서 자세히 설명하고, 그리고 본 명세서에서 출발하는 그것에 대응할 수 있고, 그리고 또한 시스템 버스(1005)와 전기적으로 연결될 수 있다. 맵핑 모듈(115)은 클록(1010), RAM(1015), 유저 인터페이스(1020), 모뎀(1025), SSD(1040), 메모리 컨트롤러(1045), 및/또는 프로세서(1035)를 포함하거나 또는 이들과 인터페이싱할 수 있다.
아래의 논의는 본 발명의 특정한 측면들이 구현될 수 있는 적당한 머신 또는 머신들의 간단하고, 일반적인 설명을 제공하기 위한 것이다. 일반적으로, 머신 또는 머신들은 프로세서들, 메모리, 예컨대, RAM, ROM(read-only memory), 또는 다른 상태 보존 매체, 저장 장치, 비디오 인터페이스, 및 입력/출력 인터페이스 포트들에 부착되는 시스템 버스를 포함할 수 있다. 머신 또는 머신들은 키보드, 마우스, 등과 같은, 통상의 입력 장치들로부터의 입력뿐만 아니라, 다른 머신, 가상 현실 환경, 바이오메트릭 피드백, 또는 다른 입력 신호로부터 직접적으로 수신된 입력에 의해 적어도 일부가 제어될 수 있다. 본 명세서에서 사용된 바와 같이, 용어 "머신"은 단일 머신, 가상 머신, 또는 머신들, 가상 머신들, 또는 함께 동작하는 장치들과 통신 가능하게 연결된 시스템을 넓게 포함하는 것이다. 예시적인 머신들은 개인용 컴퓨터, 워크스테이션, 서버, 포터블 컴퓨터, 핸드헬드 장치, 전화, 타블렛, 등과 같은 컴퓨팅 장치들뿐만 아니라 예컨대, 자동차, 기차, 택시 등인 개인 또는 공용 운송수단과 같은, 운송 장치들을 포함한다.
머신 또는 머신들은 프로그램 가능한 또는 프로그램 불가능한 논리 장치들 또는 어레이들, ASICs(Application Specific Integrated Circuits), 임베디드 컴퓨터, 스마트 카드, 등과 같은, 임베디드 컨트롤러를 포함할 수 있다. 머신 또는 머신들은 네트워크 인터페이스, 모뎀, 또는 다른 통신 가능한 연결 수단을 통해, 하나 이상의 원결 머신들과의 하나 이상의 연결들을 이용할 수 있다. 머신들은 인터넷, LAN(local area network), WAN(wide area network) 등과 같은, 물리 및/또는 논리 네트워크의 방식에 의해 상호연결될 수 있다. 통상의 기술자는 네트워크 통신이 다양한 유선 및/또는 RF(radio frequency), 위성, 마이크로웨이브, IEEE(Institute of Electrical and Electronics Engineers) 545.11, Bluetooth®, 광학, 적외선, 케이블, 레이저, 등을 포함하는 무선 단거리 또는 장거리 반송파 및 프로토콜들을 이용할 수 있다.
본 발명의 실시 예들은 머신이 작업들을 수행하거나 또는 추상 데이터 타입들 또는 로우-레벨 하드웨어 컨텍스트들을 정의하는 결과를 야기하는 머신에 의해 접근되는 경우 연관된 기능, 절차, 데이터 구조, 어플리케이션 프로그램, 등을 또는 그것들을 참조하여 설명될 수 있다. 연관된 데이터는 예를 들어, 휘발성 및/또는 불휘발성 메모리, 예컨대, RAM, ROM, 등, 또는 다른 저장 장치들 및 하드 드라이브, 플로피 디스크, 광학 스토리지, 테이프, 플래시 메모리, 메모리 스틱, 디지털 비디오 디스크, 생체 스토리지 등을 포함하는 그것들의 연관된 저장 매체에 저장될 수 있다. 연관된 데이터는 물리 및/또는 논리 네트워크, 패킷의 형태로, 직렬 데이터, 병렬 데이터, 전파 신호, 등을 포함하는 전송 환경을 통해 전달될 쉬 dT고, 그리고 압축 또는 암호화한 포맷으로 사용될 수 있다. 연관된 데이터는 분산 환경에서 사용될 수 있고, 그리고 머신 액세스를 위해 국지적으로 및/또는 원격으로 저장될 수 있다.
상술한 방법들에 있어서, 각 연산은 발생할 수 있는 기술된 것을 수행하거나, 또는 발생하도록 야기하는 적극적인 단계(affirmative step)로서 수행될 수 있다. 그와 같은 행위 또는 발생하도록 야기하는 것은 전체 시스템 또는 디바이스, 또는 단지 그것의 하나 이상의 구성요소들에 의해 수행될 수 있다. 게다가, 연산들의 순서는 도시된 것으로 한정되지 않으며, 다른 실시 예들에 따르는 다른 순서들이 가능할 수도 있다. 더욱이, 특정 실시 예들에서, 새로운 연산들이 추가되거나, 또는 개별적인 연산들이 수정되거나 또는 삭제될 수 있다. 예를 들어, 추가된 연산들은 다른 시스템, 디바이스 또는 방법을 본질적으로 설명하는 동안에 언급된 것으로부터 유래될 수 있다.
본 설명은 하나 이상의 예시들을 포함하지만, 그것이 발명이 어떻게 실시되어야 하는지를 한정하는 것은 아니다. 게다가, 발명의 예시들 또는 실시 예들은 설명된 것에 따라 실시되거나 또는 다르게 실시될 수 있고, 그리고 다른 현재 또는 미래의 기술들과 함께 실시될 수도 있다.
본 명세서에 있는 어떠한 선행 기술에 대한 참조가 어떤 나라에서 본 선행 기술이 공통의 일반적인 지식의 일부를 형성하는 것으로 인정하거나 또는 암시하는 것으로 받아들여져서는 안 된다.
기술분야에서 통상의 지식을 가진 자는 전체로서 획득될 수 있는, 본 설명의 관점에서 본 발명을 실시할 수 있을 것이다. 상세한 설명은 철저한 이해를 제공하기 위해 포함되었다. 다른 예시들에서, 잘 알려진 측면들은 본 발명을 불필요하게 모호하게 하지 않을 목적으로, 설명되지 않았다.
다른 실시 예들은 본 명세서에서 설명된 예시들, 실시 예들을 포함하는 특징들의 조합들 및 하위-조합들을 포함한다. 예시들 및 실시 예들은, 설명된 실시 예와는 다른 순서로 특징을 제공하거나 또는 적용하는 것; 일 실시 예에서 개별적인 특징을 추출하는 것 및 그와 같은 특징들을 다른 실시 예로 삽입하는 것; 실시 예로부터 하나 이상의 특징들을 제거하는 것; 또는 실시 예로부터 특징들을 제거하고 그리고 다른 실시 예에서 추출된 특징을 추가하는 것 모두, 그와 같은 조합들 및 하위-조합들과 결합된 특징들의 이점들을 제공하는 것;과 균등하다.
하기의 청구항들은 신규하고 진보한 것으로 간주되는, 구성요소들, 특징들 및 단계들 또는 동작들의 특정 조합들 및 하위조합들을 정의한다. 다른 조합들 및 하위조합들에 대한 추가 청구항들이 본 명세서 또는 관련된 문서에서 제시될 수 있다.
100: 컴퓨팅 시스템 105: 서버
110: 페이지 캐시 컨트롤러 112: 커널
115: 맵핑 모듈 117; 맵핑 캐시
120: 저장 장치 125: 인터커넥터
130: 클라이언트
205, 305, 405, : 요청 수신 모듈
210, 310, 410: 요청 응답 모듈
215, 315: 요청 관리 모듈
225: 캐시 매니저 317: 로우-레벨 맵핑 모듈
320: 맵핑 하드웨어 325: 스토리지 유지 매니저
330: 가비지 컬렉터 335: 웨어 레벨링 섹션
340: 리드 디스터번스 섹션 350: 매체 컨트롤러
355: 스토리지 미디어 415: TLB 및 인덱스 매니저
420: 맵핑 캐시 매니저 430: 폴트 핸들러
430: 인덱스 캐시 435: 스토리지 인터페이스
1000: 컴퓨팅 장치 1005: 시스템 버스
1010: 클록 1015: RAM
1020: 유저 인터페이스 1025: 모뎀
1035: 프로세서 1040: SSD
1045: 메모리 컨트롤러

Claims (10)

  1. 가상 메모리 페이지 어드레스를 포함하는 요청을 수신하는 요청 수신 모듈; 그리고
    스킵 리스트 또는 페이지 테이블을 포함하는 맵핑 모듈을 포함하되,
    상기 스킵 리스트 또는 상기 페이지 테이블 중 적어도 하나는 상기 가상 메모리 페이지 어드레스를 물리 메모리 페이지 어드레스로 맵핑하고,
    상기 맵핑 모듈은 상기 스킵 리스트의 섹션을 상기 페이지 테이블로 동적으로 변환하는 맵핑 로직 섹션을 더 포함하고,
    상기 맵핑 로직 섹션은:
    미리 정의된 밀집도(populated density) 문턱치보다 더 큰 노드들의 밀집도를 가지는 상기 스킵 리스트; 또는
    미리 정의된 검색 시간 문턱치보다 더 큰 검색 시간을 가지는 상기 스킵 리스트에 응답하여, 상기 스킵 리스트의 상기 섹션을 상기 페이지 테이블로 동적으로 변환하는 페이지 캐시 컨트롤러.
  2. 제 1 항에 있어서,
    상기 미리 정의된 밀집도 문턱치는 80%인 페이지 캐시 컨트롤러.
  3. 제 1 항에 있어서,
    상기 페이지 테이블은 제 1 페이지 테이블로 참조되고;
    상기 스킵 리스트는 제 1 스킵 리스트로 참조되며; 그리고
    상기 맵핑 모듈은 제 2 페이지 테이블 및 제 2 스킵 리스트를 더 포함하는 페이지 캐시 컨트롤러.
  4. 제 3 항에 있어서,
    상기 제 1 페이지 테이블은 상기 제 2 페이지 테이블에 대한 제 1 포인터를 포함하고; 그리고
    상기 제 1 페이지 테이블은 상기 제 2 스킵 리스트에 대한 제 2 포인터를 포함하는 페이지 캐시 컨트롤러.
  5. 제 3 항에 있어서,
    상기 맵핑 모듈은 제 3 페이지 테이블 및 제 3 스킵 리스트를 더 포함하며;
    상기 제 2 스킵 리스트는 상기 제 3 페이지 테이블에 대한 제 1 포인터를 포함하고; 그리고
    상기 제 2 스킵 리스트는 상기 제 3 스킵 리스트에 대한 제 2 포인터를 포함하는 페이지 캐시 컨트롤러.
  6. 제 1 항에 있어서,
    상기 스킵 리스트는 멀티-레벨 스킵 리스트인 페이지 캐시 컨트롤러.
  7. 가상 메모리 페이지 어드레스를 포함하는 요청을 수신하는 요청 수신 모듈; 그리고
    스킵 리스트 또는 페이지 테이블을 포함하는 맵핑 모듈을 포함하되,
    상기 스킵 리스트 또는 상기 페이지 테이블 중 적어도 하나는 상기 가상 메모리 페이지 어드레스를 물리 메모리 페이지 어드레스로 맵핑하고,
    상기 맵핑 모듈은 상기 페이지 테이블을 상기 스킵 리스트의 섹션으로 동적으로 변환하는 맵핑 로직 섹션을 더 포함하고; 그리고
    상기 맵핑 로직 섹션은:
    미리 정의된 밀집도(populated density) 문턱치보다 더 작은 엔트리들의 밀집도를 가지는 상기 페이지 테이블; 또는
    미리 정의된 룩업 시간 문턱치보다 더 큰 룩업 시간을 가지는 상기 페이지 테이블에 응답하여, 상기 페이지 테이블을 상기 스킵 리스트의 상기 섹션으로 동적으로 변환하는 페이지 캐시 컨트롤러.
  8. 제 7 항에 있어서,
    상기 미리 정의된 밀집도 문턱치는 10%인 페이지 캐시 컨트롤러.
  9. 가상 메모리 페이지 어드레스를 포함하는 요청을 수신하는 요청 수신 모듈;
    스킵 리스트 또는 페이지 테이블을 포함하는 맵핑 모듈;
    상기 가상 메모리 페이지 어드레스와 연관된 메모리 컨텐츠를 포함하는 응답을 전송하는 요청 응답 모듈;
    상기 요청 수신 모듈 및 상기 요청 응답 모듈과 연결되며 상기 요청 및 상기 응답의 수신 및 전송을 각각 관리하는 요청 관리 모듈;
    상기 요청 관리 모듈과 연결되고 그리고 자주 접근된 메모리 페이지들을 캐싱하는 캐시 매니저를 더 포함하되,
    상기 스킵 리스트 또는 상기 페이지 테이블 중 적어도 하나는 상기 가상 메모리 페이지 어드레스를 물리 메모리 페이지 어드레스로 맵핑하고,
    상기 맵핑 모듈은 제 1 기준(criteria)에 응답하여 상기 스킵 리스트의 섹션을 상기 페이지 테이블로 동적으로 변환하고, 그리고 제 2 기준에 응답하여 상기 페이지 테이블을 상기 스킵 리스트의 상기 섹션으로 동적으로 변환하는 맵핑 로직 섹션을 더 포함하는 페이지 캐시 컨트롤러.
  10. 제 9 항에 있어서,
    상기 맵핑 모듈은:
    상기 요청 수신 모듈과 연결되며, 대응하는 메모리 페이지가 TLB(Translation Look-aside Buffer) 내로 캐시되는 경우 상기 가상 메모리 페이지 어드레스와 연관된 메모리 컨텐츠를 즉시 리턴시키는 TLB 및 인덱스 매니저;
    상기 TLB 및 인덱스 매니저와 연결되며, 자주 접근된 메모리 페이지들을 캐시하는 맵핑 캐시 매니저; 및
    상기 맵핑 캐시 매니저 및 상기 맵핑 로직 섹션과 연결되며, 불휘발성 저장 장치와 인터페이싱하는 스토리지 인터페이스를 더 포함하는 페이지 캐시 컨트롤러.

KR1020150153949A 2014-11-20 2015-11-03 효율적인 맵핑을 위한 페이지 캐시 장치 및 방법 KR102437775B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201462082596P 2014-11-20 2014-11-20
US62/082,596 2014-11-20
US14/667,673 2015-03-24
US14/667,673 US9612975B2 (en) 2014-11-20 2015-03-24 Page cache device and method for efficient mapping

Publications (2)

Publication Number Publication Date
KR20160060550A KR20160060550A (ko) 2016-05-30
KR102437775B1 true KR102437775B1 (ko) 2022-08-29

Family

ID=56010354

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150153949A KR102437775B1 (ko) 2014-11-20 2015-11-03 효율적인 맵핑을 위한 페이지 캐시 장치 및 방법

Country Status (2)

Country Link
US (1) US9612975B2 (ko)
KR (1) KR102437775B1 (ko)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108255890B (zh) * 2016-12-29 2020-08-11 腾讯科技(深圳)有限公司 页面的处理方法和装置
US11385926B2 (en) 2017-02-17 2022-07-12 Intel Corporation Application and system fast launch by virtual address area container
CN110968528B (zh) * 2018-09-30 2024-05-28 北京忆恒创源科技股份有限公司 应用统一缓存架构为非易失存储介质组装数据
KR20200065762A (ko) 2018-11-30 2020-06-09 에스케이하이닉스 주식회사 메모리 시스템
KR20200059493A (ko) 2018-11-21 2020-05-29 에스케이하이닉스 주식회사 데이터 처리 시스템
US11544063B2 (en) 2018-11-21 2023-01-03 SK Hynix Inc. Memory system and data processing system including the same
KR20200074464A (ko) * 2018-12-17 2020-06-25 에스케이하이닉스 주식회사 데이터 저장 장치 및 동작 방법, 이를 포함하는 스토리지 시스템
KR102568662B1 (ko) * 2021-01-22 2023-08-22 성균관대학교산학협력단 복수의 스킵리스트를 병합하기 위한 지퍼 컴팩션 방법 및 장치
CN113296703B (zh) * 2021-05-27 2022-08-05 山东云海国创云计算装备产业创新中心有限公司 一种堆内存管理方法、装置、设备及介质
CN117631955A (zh) * 2022-08-11 2024-03-01 成都华为技术有限公司 数据缩减方法、装置及系统

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110082962A1 (en) 2009-10-01 2011-04-07 Vmware, Inc. Monitoring a data structure in a virtual machine

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7421562B2 (en) 2004-03-01 2008-09-02 Sybase, Inc. Database system providing methodology for extended memory support
EP1870813B1 (en) 2006-06-19 2013-01-30 Texas Instruments France Page processing circuits, devices, methods and systems for secure demand paging and other operations
US7793070B2 (en) 2007-07-12 2010-09-07 Qnx Software Systems Gmbh & Co. Kg Processing system implementing multiple page size memory organization with multiple translation lookaside buffers having differing characteristics
JP5404798B2 (ja) 2009-09-21 2014-02-05 株式会社東芝 仮想記憶管理装置及び記憶管理装置
US9703706B2 (en) 2011-02-28 2017-07-11 Oracle International Corporation Universal cache management system

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110082962A1 (en) 2009-10-01 2011-04-07 Vmware, Inc. Monitoring a data structure in a virtual machine

Also Published As

Publication number Publication date
US20160147670A1 (en) 2016-05-26
KR20160060550A (ko) 2016-05-30
US9612975B2 (en) 2017-04-04

Similar Documents

Publication Publication Date Title
KR102437775B1 (ko) 효율적인 맵핑을 위한 페이지 캐시 장치 및 방법
US11687446B2 (en) Namespace change propagation in non-volatile memory devices
US10013317B1 (en) Restoring a volume in a storage system
US11163699B2 (en) Managing least recently used cache using reduced memory footprint sequence container
US10678768B2 (en) Logical band-based key-value storage structure
US11169745B1 (en) Exporting an address space in a thin-provisioned storage device
US8868926B2 (en) Cryptographic hash database
US9971799B2 (en) Storage device for storing directory entries, directory entry lookup apparatus and method, and storage medium storing directory entry lookup program
US9817865B2 (en) Direct lookup for identifying duplicate data in a data deduplication system
US9501419B2 (en) Apparatus, systems, and methods for providing a memory efficient cache
KR102440128B1 (ko) 통합된 객체 인터페이스를 위한 메모리 관리 장치, 시스템 및 그 방법
US10782904B2 (en) Host computing arrangement, remote server arrangement, storage system and methods thereof
KR20170097609A (ko) 압축된 데이터 백그라운드를 캐싱하는 장치, 시스템 및 방법
CN111061655B (zh) 存储设备的地址转换方法与设备
US9304946B2 (en) Hardware-base accelerator for managing copy-on-write of multi-level caches utilizing block copy-on-write differential update table
US11593268B2 (en) Method, electronic device and computer program product for managing cache
Sha et al. Designing an efficient persistent in-memory file system
US11586353B2 (en) Optimized access to high-speed storage device
KR20170057821A (ko) 저장 장치, 그것을 포함하는 데이터베이스 시스템 및 그것의 인터페이스 제공 방법
KR101976320B1 (ko) 라스트 레벨 캐시 메모리 및 이의 데이터 관리 방법
US9864761B1 (en) Read optimization operations in a storage system

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant