KR20230012440A - 이기종 메모리 시스템에서의 로드 밸런싱을 위한 시스템 및 방법 - Google Patents

이기종 메모리 시스템에서의 로드 밸런싱을 위한 시스템 및 방법 Download PDF

Info

Publication number
KR20230012440A
KR20230012440A KR1020220087382A KR20220087382A KR20230012440A KR 20230012440 A KR20230012440 A KR 20230012440A KR 1020220087382 A KR1020220087382 A KR 1020220087382A KR 20220087382 A KR20220087382 A KR 20220087382A KR 20230012440 A KR20230012440 A KR 20230012440A
Authority
KR
South Korea
Prior art keywords
storage device
memory
load balancing
storage
count
Prior art date
Application number
KR1020220087382A
Other languages
English (en)
Inventor
레카 피추마니
박희권
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Publication of KR20230012440A publication Critical patent/KR20230012440A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/505Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
    • 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/0626Reducing size or complexity of 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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • 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/0614Improving the reliability of storage systems
    • G06F3/0617Improving the reliability of storage systems in relation to availability
    • 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/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0647Migration mechanisms
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • 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/1056Simplification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7202Allocation control and policies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7207Details relating to flash memory management management of metadata or control data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7208Multiple device management, e.g. distributing data over multiple flash devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7211Wear leveling

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)
  • Software Systems (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Computer Networks & Wireless Communication (AREA)

Abstract

시스템이 개시된다. 시스템은 프로세서 및 프로세서에 연결된 메모리를 포함할 수 있다. 프로세서에는 제1 저장 장치가 연결될 수 있다. 제1 저장 장치는 메모리 페이지를 포함할 수 있는 제1 저장 부분을 포함할 수 있다. 제1 저장 부분은 메모리를 확장할 수 있다. 제2 저장 장치는 또한 프로세서에 연결될 수 있다. 제2 저장 장치는 또한 제2 저장 부분을 포함할 수 있다. 제2 저장 부분은 또한 메모리를 확장할 수 있다. 로드 밸런싱 데몬은 제1 저장 장치의 제1 업데이트 카운트및 제2 저장 장치의 제2 업데이트 카운트의 적어도 일부에 기초하여 메모리 페이지를 제1 저장 장치의 제1 저장 부분으로부터 제2 저장 장치의 제2 저장 부분으로 마이그레이션할 수 있다.

Description

이기종 메모리 시스템에서의 로드 밸런싱을 위한 시스템 및 방법 {SYSTEMS AND METHODS FOR LOAD BALANCING IN A HETEROGENEOUS MEMORY SYSTEM}
본 개시의 기술적 사상은 컴퓨터 시스템에 관한 것으로, 특히 시스템 메모리를 확장하기 위해 저장 장치를 사용하는 컴퓨터 시스템에 관한 것이다.
본 개시는 2021년 7월 15일에 출원된 미국 가출원 63/222,406호의 이익을 주장하며, 전문이 참조로 포함된다.
여러 저장 장치(storage device)를 포함하는 컴퓨터 시스템은 다른 워크로드(workload)를 가질 수 있다. 어떤 저장 장치는 다른 저장 장치보다 데이터를 쓰는 데 더 많은 시간을 소비할 수 있다. 솔리드 스테이트 드라이브(SSD; Solid State Drive)와 같은 저장 장치의 경우 데이터를 읽는 것보다 쓰는 데 시간이 더 오래걸리는데, 이러한 워크로드 불균형으로 인해 컴퓨터 시스템의 전체 성능이 저하될 수 있다. 따라서, 저장 장치 간에 부하(load)의 균형(로드 밸런싱, load balancing)을 유지하는 것이 요구된다.
본 개시의 실시예는 로드 밸런싱 데몬(load balancing daemon)을 포함한다. 로드 밸런싱 데몬은 페이지를 마이그레이션(migration)할 저장 장치와 마이그레이션할 저장 장치의 페이지를 식별할 수 있다. 로드 밸런싱 데몬은 페이지가 마이그레이션될 수 있는 다른 저장 장치를 식별할 수도 있다. 그 다음, 로드 밸런싱 데몬은 제1 저장 장치에서 제2 저장 장치로의 페이지 마이그레이션을 관리할 수 있다.
본 개시의 기술적 사상의 일 측면에 따른 시스템은, 프로세서, 상기 프로세서에 연결된 메모리, 상기 프로세서에 연결되고, 제1 저장 부분을 포함하고, 메모리 페이지를 포함하는 제1 저장 장치, 상기 프로세서에 연결되고, 제2 저장 부분을 포함하는 제2 저장 장치 및 상기 제1 저장 장치의 제1 업데이트 카운트 및 상기 제2 저장 장치의 제2 업데이트 카운트에 적어도 부분적으로 기초하여, 상기 제1 저장 장치의 상기 제1 저장 부분으로부터 상기 제2 저장 장치의 상기 제2 저장 부분으로 상기 메모리 페이지를 마이그레이션하는 로드 밸런싱 데몬을 포함하고, 상기 제1 저장 부분 및 상기 제2 저장 부분은, 상기 메모리를 확장하는 것을 특징으로 한다.
본 개시의 기술적 사상의 일측면에 따른 저장 장치는, 메모리 페이지를 저장하는 제1 저장 부분을 포함하는 저장부, 상기 저장 장치로 전송된 로드 요청 또는 저장 요청 중 적어도 하나를 처리하는 컨트롤러 및 데이터가 상기 저장부에 기록된 횟수인 제1 횟수를 식별하는 업데이트 카운트 및 데이터가 상기 메모리 페이지에 기록된 횟수인 제2 횟수를 식별하는 쓰기 카운트를 관리하기 위한 증분 로직을 포함하고, 상기 저장부는, 메모리를 확장하는 것을 특징으로 한다.
본 개시의 기술적 사상의 일측면에 따른 방법은, 프로세서 상에서 실행되는 로드 밸런싱 데몬에 의해 제1 저장 장치를 식별하는 단계, 상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 제2 저장 장치를 식별하는 단계, 상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 상기 제1 저장 장치에 저장된 메모리 페이지를 식별하는 단계; 및 상기 메모리 페이지를 상기 제1 저장 장치에서 상기 제2 저장 장치로 마이그레이션하는 단계를 포함하고, 상기 제1 저장 장치 및 상기 제2 저장 장치는 메모리를 확장하는 것을 특징으로 한다.
도 1은 본 개시의 실시예에 따른 이기종 메모리 시스템에서 로드 밸런싱을 위해 사용될 수 있는 저장 장치를 포함하는 시스템의 블록도이다.
도 2는 본 개시의 실시예에 따른 도 1의 기계를 나타내는 블록도이다.
도 3은 본 발명의 실시예에 따른 로드 밸런싱을 지원하는 SSD(Solid State Drive)를 나타내는 블록도이다.
도 4는 본 개시의 실시예에 따른 애플리케이션, 도 1의 메모리 및 도 1의 저장장치 간의 상호 작용을 설명하기 위한 블록도이다.
도 5는 도 3의 플래시 변환 계층(Flash Translation Layer; FTL)에서 본 개시의 실시예에 따른 논리적-물리적 주소 테이블의 업데이트를 설명하기 위한 도면이다.
도 6은 도 3의 호스트-관리 장치 메모리(HDM)를 설명하기 위한 도면이다.
도 7은 본 개시의 실시예에 따른 도 1의 페이지 테이블을 나타내기 위한 도면이다.
도 8은 본 개시의 실시예에 따른 도 1의 페이지 테이블을 나타내기 위한 도면이다.
도 9는 본 개시의 실시예에 따른 이기종 메모리 시스템에서 로드 밸런싱을 수행하는 도 1의 로드 밸런싱 데몬을 나타내기 위한 도면이다.
도 10은 본 개시의 실시예에 따른 도 1의 저장 장치의 일부분을 나타내기 위한 도면이다.
도 11은 본 개시의 실시예에 따른 도 1의 로드 밸런싱 데몬을 나타내는 블록도 이다.
도 12는 본 개시의 실시예에 따른 도 1의 시스템에서 로드 밸런싱을 수행하기 위한 순서도를 나타낸다.
도 13a는 본 개시의 실시예에 따른 도 1의 시스템에서 로드 밸런싱을 수행하기 위한 순서도를 나타낸다.
도 13b는 본 개시의 실시예에 따른 도 1의 시스템에서 로드 밸런싱을 수행하기 위한 순서도를 나타낸다.
도 14는 도 1의 시스템에서 메모리 페이지가 마이그레이션될 수 있는 저장 장치를 식별하기 위한 도 1의 로드 밸런싱 데몬의 예시적인 순서도를 나타낸다.
도 15는 도 1의 로드 밸런싱 데몬이 도 1의 시스템에서 마이그레이션할 메모리 페이지를 선택하기 위한 예시적인 순서도를 나타낸다.
도 16은 도 1의 로드 밸런싱 데몬이 도 1의 시스템에서 마이그레이션을 위한 저장 장치 또는 메모리 페이지를 식별하기 위한 순서도를 나타낸다.
도 17은 본 개시의 실시예에 따른 도 1의 시스템에서 메모리 페이지의 마이그레이션을 수행을 설명하기 위한 순서도를 나타낸다.
이하, 첨부한 도면을 참조하여 본 개시의 실시예에 대해 상세히 설명한다. 다음의 상세한 설명에서, 본 발명의 실시 예는 본 개시의 예시적 실시예들이 속하는 기술분야에서 통상의 지식을 가진 자에게 본 발명을 보다 완전하게 설명하기 위하여 제공되는 것이다. 언급되지 아니한 특정 세부사항들은 이하의 기재로부터 본 개시의 예시적 실시예들이 속하는 기술분야에서 통상의 지식을 가진 자에게 명확하게 도출되고 이해될 수 있다. 일부 실시예에서, 잘 알려진 방법, 절차, 구성요소, 회로 및 네트워크는 실시예를 불필요하게 모호하게 하지 않도록 상세하게 설명되지 않았다.
제1, 제2 등의 용어가 다양한 구성요소를 설명하기 위해 본 명세서에서 사용될 수 있지만, 이들 구성요소는 이러한 용어에 의해 제한되어서는 안된다는 점은 이해될 것이다. 이러한 용어는 한 요소를 다른 요소와 구별하는 데만 사용된다. 예를 들어, 본 발명의 권리 범위를 벗어나지 않으면서 제1 모듈은 제2 모듈로 명명될 수 있고, 유사하게 제2 모듈도 제1 모듈로 명명될 수 있다.
본 명세서의 설명에서 사용된 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 본 개시내용 및 첨부된 청구범위의 설명에서 사용된 바와 같이, 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에 사용된 용어 "및", "또는"은 관련된 나열된 구성 중 하나 이상의 모든 가능한 조합을 지칭하고 포함하는 것으로 이해될 것이다. 본 명세서에서, "포함하다" 또는 "가지다" 등의 용어는 명세서 상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성 요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다. 도면의 구성요소와 특징은 반드시 축척(scale)에 맞게 그려지지는 않았음은 이해될 것이다.
컴퓨터 시스템에는 데이터를 저장하기 위한 다양한 형태의 저장소(storage)가 포함될 수 있다. 일반적으로 컴퓨터 시스템은 호스트 메모리 및 저장 장치를 포함한다. 예를 들어, 호스트 메모리는 전원이 중단되면 그 안에 저장된 정보가 손실될 수 있음을 의미하는 휘발성 저장소일 수 있고, 저장 장치는 비휘발성 저장소, 즉 그 안에 저장된 정보가 전원이 차단되어도 보존될 수 있는 저장 장치 일 수 있다.
이러한 상이한 형태의 저장소는 서로 다른 장단점을 가질 수 있다. 예를 들어, 호스트 메모리는 전원이 차단될 경우 데이터가 손실될 수 있으며, 대량으로 구입하는 데 있어 비용이 더 클 수 있다. 그러나 응답 시간 즉, 데이터 읽기 및/또는 쓰기 시간이 상대적으로 더 빠를 수 있다. 반면, 비휘발성 저장장치는 정전이 되어도 데이터가 손실되지 않을 수 있으며, 저렴하게 대량 구매가 가능하다. 그러나 호스트 메모리에 비해 응답시간이 느릴 수 있다.
일부 컴퓨터 시스템은 모든 스토리지, 예를 들면 시스템 메모리 및 스토리지 장치를 하나의 확장 스토리지로 표시할 수 있다. 애플리케이션(application)은 데이터가 저장되는 정확한 위치를 알지 못해도 이 확장된 스토리지 주소에서 읽거나 쓸 수 있다. 이와 관련하여 컴퓨터 시스템이 이러한 세부 정보를 관리할 수 있다.
그러나 저장 장치의 경우, 특히 데이터 쓰기 응답 시간이 데이터 읽기보다 느린 SSD(Solid State Drive)의 경우, 데이터 쓰기에 많은 시간을 소비하는 저장 장치는 결국 해당 저장 장치로 전송되는 읽기 요청(read requests) 속도가 감소될 수 있다. 사용 가능한 다른 저장 장치가 있고 다른 저장 장치의 로드가 더 적은 경우, 하나의 저장 장치가 많은 수의 쓰기 요청(write requests)을 처리하기 때문에 시스템의 전체 성능은 저하될 수 있다.
본 개시의 실시예는 저장 장치 내에 저장되는 데이터의 위치에 대한 업데이트에 기초하여, 가장 비지(busy) 상태인 장치와 가장 유휴(idle) 상태인 장치를 식별함으로써 이러한 문제를 해결할 수 있다. 가장 비지 상태인 장치와 가장 유휴 상태인 장치 간의 워크로드(workload) 차이가 임계값(threshold)을 초과하는 경우, 핫 페이지(hot page)가 가장 비지 상태인 장치에서 가장 유휴 상태인 장치로 마이그레이션(migration)되어 상대적인 부하의 균형을 유지하고 전체 시스템 성능을 개선할 수 있다.
도 1에는 본 개시의 실시예에 따른 이기종 메모리 시스템(heterogeneous memory system)에서 부하 분산을 위해 사용될 수 있는 저장 장치를 포함하는 시스템이 도시되어 있다. 도 1에서 기계(105)(시스템, 호스트 장치, 머신, 호스트, 호스트 머신 또는 호스트 컴퓨터라고도 불릴 수 있음)는 프로세서(110)(호스트 프로세서라고도 불릴 수 있음), 메모리(115)(호스트 메모리라고도 불림) 및 저장 장치(120)를 포함할 수 있다. 프로세서(110)는 임의의 다양한 프로세서일 수 있다. 프로세서(110)는 아래에서 논의되는 다른 구성요소와 함께 예시의 편의를 위해 기계(105) 외부에 도시되어 있다. 본 개시 내용의 실시예는 기계 내에 이러한 구성요소를 포함할 수 있다. 도 1에 단일 프로세서(110)가 도시되어 있지만 기계(105)는 임의의 수의 프로세서를 포함할 수 있으며, 각각의 프로세서가 단일 코어 또는 다중 코어 프로세서일 수 있다. 각 프로세서는 RISC(Reduced Instruction Set Computer) 아키텍처 또는 CISC(Complex Instruction Set Computer) 아키텍처를 구현할 수 있으며, 이들이 혼합될 수도 있다.
프로세서(110)는 메모리(115)에 연결될 수 있다. 메모리(115)는 플래시 메모리(Flash Memory), DRAM(Dynamic Random Access Memory), SRAM(Static Random Access Memory), 영구 랜덤 액세스 메모리(Persistent Random Access Memory), FRAM(Ferroelectric Random Access Memory, 또는 MRAM(Magnetoresistive Random Access Memory)등과 같은 비휘발성 랜덤 액세스 메모리(NVRAM; Non-Volatile Random Access Memory)일 수 있다. 메모리(115)는 또한 상이한 메모리 유형의 임의의 원하는 조합일 수 있고 메모리 컨트롤러(125)에 의해 관리될 수 있다. 메모리(115)는 단기(short-term) 데이터를 저장하는데 사용될 수 있다. 즉, 이러한 데이터는 장기간 동안 저장될 것으로 예상되지 않는다. 단기 데이터의 예에는 임시 파일(temporary files), 애플리케이션에서 로컬로 사용 중인 데이터등이 포함될 수 있다. 예시적 실시 예에서, 애플리케이션에서 로컬로 사용 중인 데이터는 다른 저장 위치에서 복사되었을 수 있다.
프로세서(110) 및 메모리(115)는 또한 다양한 애플리케이션이 실행될 수 있는 운영 체제(OS; Operating System)를 지원할 수 있다. 이러한 애플리케이션은 메모리(115) 또는 저장 장치(120-1 및/또는 120-2)(집합적으로 저장 장치(120)라고 칭할 수 있음)로부터 데이터를 읽거나 쓰기 위한 요청을 발행(issuing)할 수 있다. 저장 장치(120)는 장치 드라이버(130)를 사용하여 액세스될 수 있다. 도 1은 일반적인 용어인 "저장 장치(storage device)"를 사용하지만, 본 발명의 실시예들은 로드 밸런싱(load balancing)의 사용으로부터 이익을 얻을 수 있는 다양한 형태의 저장 장치를 포함할 수 있다. 예를 들면, 저장 장치(120)는 하드 디스크 드라이브 및 SSD(Solid State Drives)를 포함할 수 있다. 이하의 SSD 또는 임의의 다른 특정 형태의 저장 장치에 대한 언급은 본 개시 내용의 다른 실시예를 포함하는 것으로 이해되어야 한다. 또한, 도 1은 2개의 저장 장치(120)를 도시하지만, 본 개시의 실시예는 2개보다 적거나 많을 수 있다. 또한, 도 1은 단일 장치 드라이버(130)를 사용하여 액세스되는 2개의 저장 장치(120)를 도시하지만, 본 개시의 실시예는 상이한 장치 드라이버(130)를 사용하여 액세스되는 상이한 저장 장치(120)를 포함할 수 있다.
본 개시의 일부 실시예에서, 저장 장치(120)는 이기종 메모리 시스템(또는 이종 메모리 시스템)으로서 동작하기 위해 메모리(115)와 조합하여 사용될 수 있다. 이기종 메모리 시스템에서 애플리케이션들은 애플리케이션들과 연관된 가상 주소들을 사용하여 로드 요청 및/또는 저장 요청을 발행할 수 있다. 그 다음, 시스템은 데이터가 실제로 저장되는 위치를 결정하기 위해 페이지 테이블(135)을 사용할 수 있다. 예를 들어, 데이터가 실제로 저장된 위치는 메모리(115), 저장 장치(120-1), 또는 저장 장치(120-2)일 수 있다. 그 다음, 시스템은 데이터가 저장된 실제 위치를 애플리케이션이 인식하지 못하는 상태에서 요청된 대로 데이터를 로드(load, 적재)하거나 저장(store)할 수 있다. 페이지 테이블(135)은 도시된 바와 같이 메모리(115)에 저장될 수 있다. 저장 장치(120-1 및 120-2)는 이기종 메모리 시스템을 구현하기 위해 메모리(115)를 확장하는 데 사용될 수 있다. 예를 들어 CXL(Compute Express Link®, Compute Express Link는 Compute Express Link Consortium, Inc.의 등록 상표임) 프로토콜과 같은 캐시-코히어런트 상호 연결 프로토콜(cache-coherent interconnect protocol)을 사용하여 애플리케이션에 결합된 메모리를 나타낼 수 있다.
본 발명의 일부 실시예에서, 도 3 및 도 7을 참조하여 아래에서 논의된 바와 같이, 데이터가 저장되는 물리적 장치(메모리(115), 저장 장치(120-1) 또는 저장 장치(120-2))는 가상 주소가 매핑되는 주소에 의해 암시될 수 있으므로, 페이지 테이블(135)은 데이터가 저장된 특정 장치의 주소를 식별하지 않고 주소만 저장할 수 있다. 본 개시의 다른 실시예에서, 페이지 테이블(135)은 이기종 메모리 시스템에서 사용되는 다양한 장치를 가리키는 링크(140-1 및 140-2)와 같은 링크들을 포함할 수 있다. 이러한 링크들(140-1 및 140-2)은 페이지 테이블(135)의 특정 항목에 연결되어 어떤 항목이 특정 장치에 저장된 데이터를 나타내는지 표시할 수 있다.
이상적인 상황에서, 데이터는 동일한 빈도로 읽어지고/쓰여지게 된다. 그러나 실용적인 관점에서 보면, 단일 애플리케이션이라도 모든 데이터가 동일하게 처리되는 것은 아니다. 일부 데이터는 한 번 쓰여지고 여러 번 읽어질 수 있다. 다른 일부 데이터는 반복적으로 쓰여질 수 있다. 예를 들어, 애플리케이션은 중간 계산 결과와 같은 임시 데이터를 저장할 수 있다. 중간 계산 결과가 업데이트되면 애플리케이션은 업데이트된 결과를 저장할 수 있다. 이 프로세스는 최종 결과가 결정될 때까지 계속될 수 있으며, 최종 결과가 결정된 시점에서 최종 결과가 저장될 수 있다.
애플리케이션들은 데이터를 다르게 사용할 수 있고, 한 애플리케이션은 여러 데이터를 다르게 사용할 수 있기 때문에 다른 메모리 주소가 다른 수준(및 유형)의 활동에 종속될 수 있다. 예를 들어, 도 1에 도시된 바와 같은 이기종 메모리 시스템에서는 저장 장치(120-1)가 비지 상태가 되는 반면, 저장 장치(120-2)는 유휴 상태가 될 수 있다. 쓰기 작업(특히 SSD의 경우)이 읽기 작업보다 더 많은 시간이 걸릴 수 있으므로, 저장 장치(120-1)가 쓰기 요청과 읽기 요청을 모두 처리할 것으로 예상되면 읽기 요청이 지연될 수 있지만, 대신 데이터가 저장 장치(120-2)에 기록되면 읽기 요청을 더 빨리 처리할 수 있다.
로드 밸런싱 데몬(load balancing daemon)(145)은 저장 장치(120) 상의 로드 밸런싱을 시도하는 방식으로 데이터를 분배하기 위해 저장 장치(120)를 관리할 수 있다. (메모리(115) 및 저장 장치(120)가 이기종 메모리 시스템을 제공하는 데 사용될 수 있으므로, 로드 밸런싱 데몬(145)은 또한 메모리(115)의 부하(load)를 관리할 수 있다.)
도 2에는 본 개시의 실시예에 따른 도 1의 기계(105)의 상세 내용이 도시되어 있다. 도 2에서, 전형적으로, 기계(105)는 하나 이상의 프로세서(110)를 포함하며, 메모리 컨트롤러(125)와 클럭(205)을 포함할 수 있으며, 이는 기계의 구성 요소들의 동작을 조정하는 데 사용될 수 있다. 예를 들어, 프로세서(110)는 랜덤 액세스 메모리(RAM), 읽기 전용 메모리(ROM), 또는 다른 상태 보존 매체를 포함할 수 있는 메모리(115)에 연결될 수 있다. 프로세서(110)는 또한 저장 장치(120), 및 네트워크 커넥터(210)에 결합될 수 있다. 예를 들어, 네트워크 커넥터(210)는 이더넷 커넥터 또는 무선 커넥터일 수 있다. 프로세서(110)는 또한 다른 구성요소 중에서 I/O 엔진(225)을 사용하여 관리될 수 있는 사용자 인터페이스(220) 및 입/출력(I/O) 인터페이스 포트가 부착될 수 있는 버스(215)에 연결될 수 있다.
도 3에는 본 발명의 실시예에 따른 로드 밸런싱을 지원하는 SSD(Solid State Drive)가 도시되어 있다. 도 3에서 SSD(120)는 인터페이스(305)를 포함할 수 있다. 인터페이스(305)는 도 1의 기계(105)에 SSD(120)를 연결하기 위해 사용되는 인터페이스일 수 있다. SSD(120)는 하나 이상의 인터페이스(305)를 포함할 수 있다. 예를 들어, 하나의 인터페이스는 로드 및 저장 요청(SSD(120)의 일부 또는 전체가 도 1의 메모리(115)를 확장하는 데 사용될 때 발행됨)에 사용될 수 있고, 다른 인터페이스는 블록 기반 읽기 및 쓰기 요청에 사용될 수 있고, 세 번째 인터페이스는 키-값 읽기 및 쓰기 요청에 사용될 수 있다. 도 3은 인터페이스(305)가 SSD(120)와 도 1의 기계(105) 사이의 물리적 연결임을 시사하지만, 인터페이스(305)는 공통의 물리적 인터페이스 전반에 걸쳐 사용될 수 있는 프로토콜 차이도 나타낼 수 있다. 예를 들어, SSD(120)는 U.2 또는 M.2 커넥터를 사용하여 기계(105)에 연결될 수 있지만 로드/저장 요청, 블록 기반 요청 및 키-값 요청을 지원할 수 있다. 상이한 유형의 요청을 처리하는 것은 상이한 인터페이스(305)에 의해 수행될 수 있다.
SSD(120)는 또한 인터페이스(305)를 관리할 수 있는 호스트 인터페이스 계층(310)을 포함할 수 있다. SSD(120)가 하나 이상의 인터페이스(305)를 포함하는 경우, 단일 호스트 인터페이스 계층(310)은 모든 인터페이스를 관리할 수 있고, SSD(120)는 각 인터페이스에 대한 호스트 인터페이스 계층을 포함할 수 있거나, 이들의 일부 조합이 사용될 수 있다.
SSD(120)는 또한 SSD 컨트롤러(315), 다양한 채널들(320-1, 320-2, 320-3, 320-4)을 포함할 수 있으며, 이에 따라 다양한 플래시 메모리 칩들(325-1, 325-2, 325-3, 325-4, 325-5, 325-6, 325-7 및 325-8이 배열될 수 있다. SSD 컨트롤러(315)는 채널(320-1 내지 320-4)을 따라 플래시 메모리 칩(325-1 내지 325-8)에 대한 읽기 요청 및 쓰기 요청 전송을 관리할 수 있다. 도 3에는 4개의 채널과 8개의 플래시 메모리 칩이 도시되어 있으나, 본 발명의 실시예들은 임의의 수의 플래시 메모리 칩(1개 이상, 한정되지 않음)을 포함하는 임의의 수의 채널(1개 이상, 한정되지 않음)을 포함할 수 있다.
각 플래시 메모리 칩 내에서 공간은 블록으로 구성될 수 있으며, 이는 페이지로 더 세분화될 수 있고 슈퍼블록(superblock)으로 그룹화될 수 있다. 페이지 크기는 필요에 따라 다양할 수 있다. 예를 들어 페이지는 4KB의 데이터일 수 있다. 한 페이지보다 작은 크기의 데이터를 기록하는 경우, 초과 공간은 "미사용(unused)"상태이다. 블록에는 128 또는 256과 같이 원하는 수의 페이지가 포함될 수 있다. 그리고 슈퍼블록은 임의의 개수의 블록들을 포함할 수 있다. 플래시 메모리 칩은 데이터를 슈퍼블록으로 구성하지 않고 블록과 페이지로만 구성할 수 있다.
페이지를 쓰고 읽을 수 있지만 SSD는 일반적으로 데이터 덮어쓰기를 허용하지 않는다. 즉, 기존 데이터는 새 데이터로 "제자리에서(in place)" 대체될 수는 없다. 대신 데이터를 업데이트해야 할 때 새 데이터가 SSD의 새 페이지에 기록되고 원본 페이지는 무효화된다(삭제 대기 상태로 표시됨). 따라서 SSD 페이지는 일반적으로 사용 가능 상태(페이지에 데이터의 쓰기가 가능한 상태), 유효 상태(유효한 데이터를 포함한 상태) 및 무효 상태(더 이상 유효한 데이터를 포함하지 않지만 지울 때까지 사용할 수 없는 상태)의 세 가지 상태 중 하나를 가지며, 이러한 상태의 정확한 이름은 다를 수 있다.
그러나 페이지는 개별적으로 쓰고 읽을 수 있지만 블록은 소거(erase)될 수 있는 데이터의 기본 단위이다. 즉, 페이지는 개별적으로 소거되지 않는다. 블록의 모든 페이지는 일반적으로 동시에 소거된다. 예를 들어 블록에 256페이지가 포함되어 있으면 블록에 있는 256페이지가 모두 동시에 소거된다. 이러한 처리 방식은 SSD에 대한 몇 가지 관리 문제를 가져올 수 있다. 예를 들어, 소거를 위해 일부 유효한 데이터가 포함된 블록을 선택한 경우 해당 블록을 소거하기 전에 해당 유효한 데이터를 SSD의 다른 곳에서 사용 가능한 페이지에 복사해야 할 수 있다. (본 개시물의 일부 실시예에서, 소거 단위는 블록과 다를 수 있다: 예를 들어, 그것은 위에서 설명한 바와 같이 다중 블록의 세트인 슈퍼블록일 수 있다.)
데이터를 쓰는 단위와 소거하는 단위가 페이지와 블록으로 서로 다르기 때문에, 만약 SSD가 블록을 소거하기 전에 블록에 무효(invalid) 데이터만 포함되기를 기다린다면, 유효한 데이터의 양이 광고된 SSD 용량보다 적을지라도 SSD의 사용 가능한 저장 공간은 부족해질 수 있다. 이러한 상황을 피하기 위해, SSD 컨트롤러(315)는 가비지 컬렉션 컨트롤러(도 3에 도시되지는 않음)를 포함할 수 있다. 가비지 컬렉션 기능은 무효 페이지의 전부 또는 대부분을 포함하는 블록을 식별하고 해당 블록을 해제(free up)하여 유효한 데이터를 다시 페이지에 쓸 수 있도록 하는 것이다. 그러나 소거 단위는 페이지가 아니라 블록이기 때문에, 가비지 수집을 위해 선택한 블록에 유효한 데이터가 포함된 경우 해당 유효한 데이터는 가비지 컬렉션 로직에 의해 지워진다. 이와같이 데이터가 손실되는 것을 방지하기 위해, 가비지 컬렉션 로직은 유효한 데이터를 포함하고 있는 블록의 유효한 데이터를 다른 블록으로 프로그램할 수 있다. 데이터가 새 블록에 프로그램되면(그리고 테이블 매핑 논리 블록 주소(LBA)를 데이터의 새 위치를 반영하도록 업데이트된 물리적 블록 주소(PBA)에 매핑) 기존의 유효한 데이터를 포함하고 있던 블록은 소거되고, 이 블록이 포함하고 있는 페이지들을 사용 가능 상태(free state)로 만든다.
SSD의 메모리 셀에 데이터를 올바르게 유지하기 위해 데이터의 신뢰성이 열화되기 전까지 SSD는 셀에 한정된 횟수의 쓰기 작업을 수행할 수 있다. 이 횟수는 일반적으로 셀에 수행되는 프로그램/소거 사이클의 수로 측정된다. 일반적으로 셀이 지원할 수 있는 프로그램/소거 사이클의 수는 SSD가 합리적인 시간 동안 안정적으로 작동함을 의미한다. 개인 사용자의 경우, 제한된 프로그램/소거 횟수를 초과하여 SSD를 교체하는 경우보다는, SSD의 저장 용량이 부족해져서 사용자가 SSD를 교체할 가능성이 더 높을 수 있다. 그러나 데이터를 더 자주 쓰고 소거할 수 있는 기업 환경에서는, 셀의 프로그램/소거 사이클 수가 제한된 횟수를 초과할 위험성이 더 클 수 있다.
이러한 위험을 상쇄하기 위해, SSD 컨트롤러(315)는 웨어 레벨링 컨트롤러(도 3에 도시하지 않음)를 포함할 수 있다. 웨어 레벨링은 블록의 프로그램/소거 사이클 카운트를 기반으로 데이터를 프로그램할 데이터 블록을 선택하는 것을 포함할 수 있다. SSD는 새로운 데이터를 프로그램하기 위해 프로그램/소거 사이클 횟수가 더 적은 블록을 선택함으로써, 일부 블록에 대해 프로그램/소거 사이클 횟수가 신뢰도가 유지될 수 있는 한계치를 넘지 않도록 방지할 수 있다. 각 블록의 웨어 레벨(마모 수준, wear level)을 최대한 비슷하게 유지함으로써 SSD는 더 오랜 기간 동안 안정적인 상태를 유지할 수 있다.
SSD 컨트롤러(315)는 호스트-관리 장치 메모리(HDM; Host-managed Device Memory)(330) 및 플래시 변환 계층(FTL)(335)(플래시 스토리지를 사용하지 않는 저장 장치에 대해 보다 일반적으로 변환 계층으로 지칭될 수 있음)을 포함할 수 있다. 이기종 메모리 시스템에서 사용되는 경우, SSD(120)는 HDM(330)을 사용하여 도 1의 프로세서(110)에 메모리 주소의 범위를 제시할 수 있다. 이와 같이, 도 1의 프로세서(110)는 1은 데이터가 실제로 저장된 위치에 대한 고려 없이 로드 및/또는 저장 요청을 발행할 수 있다. 예를 들어, 도 1의 8 기가 바이트(GB)의 용량을 가지는 메모리(115)와 16 GB의 용량을 가지는 SSD(120)를 포함하는 도 1의 기계(105)와 같은 시스템을 생각해 보자. 이러한 시스템에서, 도 1의 프로세서(110)는 0x0 0000 0000부터 0x5 FFFF FFFF까지 범위의 주소에 데이터를 로드 및/또는 저장할 수 있으며, 0x0 0000 0000부터 0x1 FFFF FFFF까지는 도 1의 메모리(115) 내의 주소이다. 그리고 주소 0x2 0000 0000부터 0x5 FFFF FFFF까지는 SSD(120) 내의 주소이다. 특정 메모리 어드레스가 주어지면, SSD(120)는 데이터가 저장될 적절한 블록을 결정할 수 있고, 제공된 메모리 주소를 기초로 도 1의 프로세서(110)에 의해 요청된 대로 데이터를 읽기 및/또는 쓰기를 할 수 있다.
본 개시의 일부 실시예에서, SSD(120)에서 사용 가능한 모든 저장 공간은 도 1의 프로세서(110)에 노출되어 도 1의 메모리(115)를 확장할 수 있다. 즉, SSD(120)가 총 16GB의 스토리지를 제공하는 경우, HDM(330)은 정의된 메모리 주소 범위에서 임의의 주소에 대한 요청을 로드 및/또는 저장할 수 있다. 본 개시의 다른 실시예에서, SSD(120)가 제공하는 저장소의 일부는 도 1의 메모리(115)를 확장하기 위해 사용될 수 있으며, SSD(120)가 제공하는 저장소의 다른 일부는 SSD(120)에 대한 읽기 및/또는 쓰기 요청을 전송하는 애플리케이션에 의해 직접 접근할 수 있다(로드 및/또는 저장 요청보다 도 1의 메모리 컨트롤러(125)에 의해 먼저 처리될 수 있다). 본 개시의 이러한 실시예들에서, HDM(330)을 사용하여 노출될 수 있는 어드레스들의 범위는 SSD(120)의 이용 가능한 용량보다 작을 수 있다.
HDM(330)은 FTL(335) "위에서" 작동하는 것으로 생각할 수 있다. 즉, HDM(330)은 SSD(120)에 실제로 데이터가 저장되는 물리적 주소를 사용하는 대신(FTL(335)에 의해 결정됨), 도 1의 프로세서(110)(또는 프로세서(110)에서 실행되는 애플리케이션)에 의해 결정되고 도 1의 페이지 테이블(135)을 이용하여 처리되는 주소를 사용할 수 있다.
본 개시의 일부 실시예에서, HDM(330)은 지원되는 임의의 메모리 주소에 대한 액세스를 직접 처리할 수 있다. 그러나 본 개시내용의 다른 실시예에서(예를 들어, 바이트-어드레싱보다 블록-어드레싱을 사용할 수 있는 SSD(120)와 같은 저장 장치에서), HDM(330)은 버퍼(도 3에 도시되지는 않음)를 포함할 수 있다. 이 버퍼는 예를 들어 SSD(120) 내의 DRAM 스토리지일 수 있다. 로드 또는 저장 요청이 SSD(120)로 전송될 때, HDM(330)은 버퍼로부터 데이터에 액세스를 시도할 수 있다. 데이터가 현재 버퍼에 없는 경우 SSD(120)는 완료되지 않은 저장 요청을 플래시 메모리 칩(325-1~325-8)으로 커밋한 다음 플래시 메모리 칩(325-1~325-8)에 새로운 데이터 섹션을 버퍼로 로드할 수 있다.
버퍼의 크기는 SSD(120)에 의해 제공되는 저장소에서, 임의의 일부분일 수 있다. 예를 들어, 버퍼는 이기종 메모리로 사용되는 SSD(120)가 제공하는 스토리지의 1/10일 수 있다. 예를 들어, SSD(120)가 이기종 메모리에 대해 총 16GB의 스토리지를 지원하는 경우 버퍼 크기는 1.6GB일 수 있다. 본 개시의 이러한 실시예들은, DRAM이 버퍼에 사용되는 경우 바이트 어드레싱(byte-addressing)을 지원하는 것과 버퍼로 사용되는 DRAM 비용 사이의 균형을 제공할 수 있다. 버퍼는 또한 임의의 다양한 휘발성 메모리 또는 비휘발성 메모리일 수 있다. HDM(330)은 도 6을 참조하여 더 상세히 논의된다.
FTL(335)은 LBA 또는 다른 논리적 ID(도 1의 프로세서(110)에 의해 사용됨)와 PBA 또는 다른 물리적 주소의 변환을 처리할 수 있다. 예를 들어, 다른 물리적 주소는 데이터가 플래시 칩(325-1 내지 325-8)에 저장되는 물리적 주소일 수 있다. FTL(335)은 가비지 컬렉션 및/또는 웨어 레벨링을 수행할 때 발생할 수 있는 한 PBA에서 다른 PBA로 데이터를 재배치하는 역할도 할 수 있다. FTL(335)는 아래의 도 4 내지 도 6을 참조하여 더 논의된다.
SSD 컨트롤러(315)는 또한 프로세서(340)를 포함할 수 있다. 프로세서(340)는 SSD(120) 내에서 일부 계산 능력을 제공할 수 있는 SSD(120)에 대한 로컬 프로세서일 수 있다. 프로세서(340)는 점선 테두리로 표시된 것처럼 선택 사항이다.
만약 프로세서(340)가 포함된다면, 프로세서(340)는 캐시(345)를 포함할 수 있다. 캐시(345)는 종래의 캐시와 유사하게 동작하여 프로세서(340)에 더 가까운(그리고 잠재적으로 더 빠른) 스토리지를 제공할 수 있다. 그러나 캐시(345)가 플래시 메모리 칩(325-1 ~ 325-8)에도 저장된 정보를 저장하는 데 사용된다면, 이는 잠재적인 문제를 발생시킨다. 캐시(345)의 데이터가 업데이트 되었지만 즉시 플러시되지 않으면, HDM(330)을 통해 액세스되는 현재 캐시된 플래시 메모리 칩(325-1 ~ 325-8)의 데이터는 캐시(345)에 저장된 값에 비해 오래되었을 수 있다. 도 1의 로드 밸런싱 데몬(145)은 캐시(345)가 아니라 플래시 메모리 칩(325-1 내지 325-8)에 액세스할 수 있으므로, 도 1의 로드 밸런싱 데몬(145)은 계산에 오래된 데이터를 사용하고 있을 수 있다. 이 문제에 대한 해결책은 HDM(330)을 통해 액세스되는 데이터를 캐시 불가능하게 하거나(즉, HDM(330)을 통해 액세스되는 데이터는 캐시(345)에 저장되지 않을 수 있음), 캐시(345)의 데이터에 대한 업데이트가 플래시 메모리 칩(325-1~ 325-8)으로 자동으로 플러시되도록 하는 것이다.
마지막으로, SSD 컨트롤러(315)는 또한 인터럽트 로직(interrupt logic)(350)을 포함할 수 있다. 본 개시의 일부 실시예들에서, 도 1의 로드 밸런싱 데몬(145)은 HDM(330)에 접근하지 않을 수 있으며, 따라서 HDM(330)을 통해 그 정보에 접근하려고 시도하기 보다는 SSD(120)에 그것의 현재 정보를 조회(query) 또는 폴링(polling)할 수 있다. 인터럽트 로직(350)은, 예를 들어, 도 1의 로드 밸런싱 데몬(145)을 인터럽트(interrupt)함으로써, 요청된 정보를 도 1의 로드 밸런싱 데몬(145)에 제공할 수 있다. 인터럽트 로직(350)은 하드웨어 회로 또는 소프트웨어(예를 들어, 프로세서(340)에서 실행)로서 구현될 수 있다. 인터럽트 로직(350)은 점선 경계로 도시된 바와 같이 선택적(optional)이다. 인터럽트 로직(350)은 도 6을 참조하여 아래에서 논의된 바와 같이, 도 3의 로드 밸런싱 데몬(145)에게 다양한 정보를 알리기 위해 동일한 인터럽트 또는 서로 다른 인터럽트를 사용할 수 있다는 점에 유의해야한다.
도 4에는 애플리케이션, 도 1의 메모리(115) 및 도 1의 저장 장치(120)의 상호 작용에 대한 개략도가 도시되어 있다. 도 4에 개시된 실시예들에 따르면, 애플리케이션(405)은 메모리(115)에 대한 로드 또는 저장 요청 및/또는 저장 장치(120)에 대한 읽기 또는 쓰기 요청을 발행할 수 있다. 로드 또는 저장 요청은 가상 메모리(410)의 가상 메모리 주소를 사용할 수 있다. 메모리 관리 유닛(415)(도 4에 도시되지 않은 변환 버퍼를 포함할 수 있음)은 도 1의 페이지 테이블(135)을 사용할 수 있다. 애플리케이션(405)에 의해 사용되는 가상 주소와 연관된 호스트 시스템 메모리(420)의 물리적 주소를 결정하기 위해 도 1(도 4에는 도시되지 않음).
도시된 바와 같이, 호스트 시스템 메모리(420)는 다수의 섹션으로 분할될 수 있다. 도 4에서 호스트 시스템 메모리(420)는 메모리(115) 내의 주소일 수 있는 호스트 메모리 주소(425)와 HDM(330) 내의 주소일 수 있는 HDM 주소(430)를 포함할 수 있다.(메모리(115)를 확장하는 데 사용되는 둘 이상의 저장 장치(120)를 포함하는 본 개시의 실시예에서, 각 저장 장치와 연관된 HDM 주소의 범위가 있을 수 있다. 도 4에는 이해를 목적으로 하나의 저장 장치(120)와 하나의 HDM 주소(430) 범위만 표시된다.)
호스트 메모리 주소(425)의 물리적 주소에 대해, 메모리 관리 유닛(415)은 메모리 버스를 통해 메모리(115)로 로드 또는 저장 요청을 발행할 수 있다. HDM 주소(430)의 물리적 주소에 대해, 메모리 관리 유닛(415)은 예를 들어 CXL.mem 프로토콜과 같은 캐시-코히어런트 상호 연결 프로토콜을 사용하여 로드 또는 저장 요청을 발행할 수 있다. 저장 장치(120)는 메모리 인터페이스(435)에서 이러한 로드 저장 요청을 수신할 수 있다. 그 다음, HDM(330)은 도 3의 플래시 메모리 칩들(325-1 내지 325-8)로부터 데이터에 액세스하기 위해 사용될 수 있다. HDM(330)은 (메모리 관리 유닛(415)에 의해 결정된 물리적 주소로서) LBA(440)의 일부 또는 전부에 액세스할 수 있음에 유의한다. 이러한 LBA(440)는 그 다음 FTL(335)에 의해 PBA(445)에 매핑될 수 있다.
도 4에서, 애플리케이션(405)은 또한 장치 드라이버(130)를 통해 저장 장치(120)에 읽기 또는 쓰기 요청을 발행하는 것으로 나타나 있다. 이러한 읽기 또는 쓰기 요청은 예를 들어 PCIe(Peripheral Component Interconnect Express) 버스와 같은 저장 장치(120)에 연결하는 적절한 버스에 의해 장치 드라이버(130)에서 저장 장치(120)로 전송될 수 있다. 이러한 읽기 또는 쓰기 요청은 예를 들어 NVMe(Non-Volatile Memory Express) 인터페이스일 수 있는 호스트 인터페이스(450)에 의해 수신될 수 있다. 그 다음, 저장 장치(120)는 읽기 또는 쓰기 요청에서 액세스되고 있는 LBA(440)의 LBA(들)를 결정할 수 있다. 이들 LBA는 그 다음 FTL(335)에 의해 PBA(445)에 매핑될 수 있다. 저장 장치(120)가 메모리 인터페이스(435)와 호스트 인터페이스(450)를 통한 접근을 지원한다면, 저장 장치(120)는 동일한 데이터에 접근하기 위한 여러 모드들을 가능하게 할 수 있다. 본 개시의 일부 실시예들에서, 특정 LBA는 메모리 인터페이스(435)를 통한 로드 또는 저장 요청을 사용하거나 호스트 인터페이스(450)를 통한 읽기 또는 쓰기 요청을 사용하여 접근될 수 있지만, 둘 모두를 사용하는 것은 아니다.
도 5에는 본 개시의 실시예에 따른 도 3의 FTL(335)의 논리적-물리적 주소 테이블의 업데이트가 도시되어 있다. 도 5에서, 도 3의 SSD(120)는 저장 요청(505)을 수신할 수 있다. 저장 요청(505)은 데이터 자체와 함께 기록되어야 할 메모리 페이지의 주소(도 1의 프로세서(110)에 관한 한, 저장 요청은 도 1의 메모리(115)에 접근하고 있다. 도 1의 저장 장치(120)는 단지 도 1의 메모리(115)를 확장하기 위해 사용되고 있을 뿐이다)를 포함할 수 있다. 도 3의 플래시 메모리(325)에서 "페이지"가 메모리의 페이지를 지칭하는지 또는 블록 내의 페이지를 지칭하는지 혼동을 피하기 위해, (수정자 없이) "페이지"에 대한 참조는 일반적으로 도 3의 플래시 메모리(325)의 블록에 있는 페이지를 참조하는 것으로 이해될 수 있으며, "메모리 페이지"에 대한 참조는 일반적으로 메모리(도 1의 메모리(115) 내이든 확장 메모리 내이든)의 페이지를 참조하는 것으로 이해될 수 있다.
상술한 바와 같이, 도 3의 SSD(120)와 같은 SSD는 일반적으로 데이터를 제자리 덮어쓰는 것을 허용하지 않는다. 대신, 도 3의 SSD(120)에서 구 데이터가 무효화되어 새로운 데이터가 새로운 물리적 블록 주소(PBA)에 기록될 수 있다. LBA는 (도 3의 SSD 120에 관한 한) 단지 데이터를 식별하는 논리적 주소이므로, 저장 요청(505)의 메모리 페이지의 주소는 LBA로 사용될 수 있다. 도 3의 FTL(335)은 데이터가 실제로 저장되는 도 3의 SSD(120) 상의 물리적 블록을 식별할 수 있는 LBA-to-PBA 테이블(510)을 포함할 수 있다. 이러한 방식으로, 애플리케이션은 원하는 만큼 자주 데이터를 특정 LBA에 쓸 수 있다: 도 3의 SSD(120)는 단순히 데이터가 LBA-to-PBA 테이블(510)에 저장된 위치를 업데이트할 수 있으며, 애플리케이션은 데이터의 실제 물리적 주소를 처리할 필요가 없을 수 있다.
도 5의 좌측에는 LBA-to-PBA 테이블(510)을 볼 수 있다. LBA-to-PBA 테이블(510)은 애플리케이션에 의해 사용되는 LBA 및 데이터가 실제로 저장되는 PBA를 지정하는 다양한 쌍을 포함할 수 있다. 예를 들어, LBA(515)는 PBA(520)에 매핑될 수 있으며, 이는 LBA 2를 사용하는 애플리케이션에 의해 식별된 데이터가 PBA 3에 저장될 수 있음을 나타낸다.
도 3의 FTL(335)은 스토어 요청(505)을 수신하면, 도 5의 우측에 도시된 바와 같이 LBA-to-PBA 테이블(510)을 업데이트할 수 있다. PBA(520)는 데이터가 저장된 새로운 PBA를 식별하는 PBA(525)로 대체될 수 있다.
도 5에는 3개의 엔트리(3개의 LBA를 3개의 PBA로 매핑)를 포함하는 LBA-to-PBA 테이블(510)이 도시되어 있는 반면, 본 개시의 실시예들은 LBA-to-PBA 테이블(510)에 엔트리를 임의의 수(0개 이상) 포함할 수 있다.
도 6에는 본 개시의 실시예에 따른 도 3의 HDM(330)의 일부에 대한 상세한 내용이 도시되어 있다. 도 6에서, 도 3의 플래시 메모리 칩(325-1 내지 325-8)의 데이터에 대한 액세스를 지원하는 것 외에, HDM(330)은 또한 논리-물리적 업데이트 카운트(605)(업데이트 카운트 605로 지칭될 수 있음) 및 페이지(610-1 내지 610-6)(전체적으로 쓰기 카운트 610으로 지칭될 수 있음)당 쓰기 카운트 등의 정보를 저장할 수 있다. 업데이트 카운트(605)는 도 3의 SSD(120)에서 데이터가 업데이트 된 횟수(또는 적어도 마지막 업데이트 카운트(605)가 재설정된 이후)를 셀 수 있고, 쓰기 카운트(610)는 각각의 관련 페이지가 업데이트 된 횟수(또는 적어도 마지막 쓰기 카운트(610)가 재설정된 이후)를 셀 수 있다. 업데이트 카운트(605) 및 쓰기 카운트(610)는 도 3의 SSD(120)에 의해 사용되는 PBA가 아니라 도 1의 기계(105)에 의해 전송된 메모리 페이지 주소와 관련된 정보를 추적할 수 있다. PBA는 데이터가 도 3의 SSD(120) 주위로 이동함에 따라 변경될 수 있지만, 기계(105)에 의해 사용되는 메모리 페이지 주소는 동일하게 유지될 수 있다. 그러므로, "페이지당 쓰기 횟수"에서 "페이지"에 대한 참조는 도 3의 SSD(120) 상의 블록에서 물리적 페이지보다는 메모리 페이지를 지칭하는 것으로 이해될 수 있다. 그러나 본 개시 내용의 일부 실시예에서, 쓰기 카운트(610)는 액세스되는 메모리 페이지의 어드레스보다는 데이터가 실제로 저장되는 PBA와 연관될 수 있다.
도 5의 저장 요청(505)과 같은 새로운 저장 요청이 수신될 때마다, 증분 로직(615)(Increment Logic)은 업데이트되는 메모리 페이지와 연관된 쓰기 카운트(610)뿐만 아니라 업데이트 카운트(605)를 증가시킬 수 있다. 각 쓰기 카운트(610)는 특정 메모리 페이지(도 6에 도시되지 않음)와 연관될 수 있다. 예를 들어, 각 쓰기 카운트는 도 5의 LBA-to-PBA 테이블(510)에 도시된 것과 동일한 순서로 LBA로 사용되는 메모리 페이지와 연관될 수 있다. 그러므로, 예를 들어, 도 5의 저장 요청(505)이 도 3의 SSD(120)에 의해 수신되는 경우, 도 3의 FTL(335)의 일부일 수 있는 증분 로직(615)은 업데이트 카운트(605) 및 쓰기 카운트(610-2)(메모리 페이지 2와 관련된 쓰기 카운트)를 증가시킬 수 있다. 도 5의 LBA-to-PBA 테이블(510)은 HDM(330)에 저장될 수 있으며, 별도의 테이블 2개를 포함하는 도 3의 SSD(120)가 아닌 쓰기 카운트(610)와 결합될 수 있음에 유의한다.
상술한 바와 같이, 페이지가 아닌 SSD 소거 블록으로 인해 가비지 컬렉션을 위해 선택된 블록에 유효한 데이터가 존재하는 경우가 있으며, 이러한 데이터는 SSD 상의 새로운 블록으로 프로그램될 수 있다. 또한, 위에서 논의한 바와 같이, 각 셀이 얼마나 많은 프로그램/소거 사이클을 거쳤는지의 측면에서 플래시 메모리의 셀을 상대적으로 균형 있게 유지하기 위해, 웨어 레벨링으로 인해 데이터가 다른 블록으로 이동하는 경우가 발생할 수 있다. 본 개시의 일부 실시예에서, 도 3의 FTL(335)은 도 5의 저장 요청(505)과 같은 스토어 요청들에 데이터가 쓰여진 횟수를 셀 수 있지만, 가비지 컬렉션 및/또는 웨어 레벨링으로 인한 프로그램 동작은 제외할 수 있다. 본 개시의 다른 실시예에서, 도 3의 FTL(335)은 도 3은 또한 가비지 컬렉션 및/또는 웨어 레벨링으로 인해 데이터가 프로그래밍된 횟수를 업데이트 카운트(605) 및 쓰기 카운트(610)에 포함할 수 있다. 위에서 논의된 바와 같이, 업데이트 카운트(605) 및 쓰기 카운트(610)는 PBA보다는 메모리 페이지와 연관될 수 있는 반면, 가비지 컬렉션 및/또는 웨어 레벨링은 PBA와 연관될 수 있다. 다만, 메모리 페이지 주소는 도 3의 SSD(120)에 의해 LBA로 사용될 수 있고, 도 3의 FTL(335)를 이용하여 LBA를 기반으로 한 PBA와 PBA를 기반으로한 LBA를 모두 결정할 수 있기 때문에, 본 개시의 일부 실시예에서는 가비지 컬렉션 및/또는 웨어 레벨링에 기초한 데이터 프로그래밍을 추적하기 위해 업데이트 카운트(605) 및 쓰기 카운트(610)가 가능할 수 있다.
도 1의 저장 장치(120)가 도 1의 메모리(115)의 확장과 도 4의 애플리케이션(405)에 의한 직접 액세스를 허가하기 위해 모두 사용되는 경우, 도 1의 저장 장치(120)는 저장 요청(505)과 같은 저장 요청과 쓰기 요청을 모두 수신할 수 있다. 두 가지 유형의 요청의 차이점은, 저장 요청은 도 1의 메모리(115)의 확장으로서 도 1의 저장 장치(120)를 사용할 수 있는 반면, 쓰기 요청은 저장 장치(120)를 저장 장치(LBA를 이용한 데이터 참조)로 사용할 수 있다. 저장 요청과 쓰기 요청 모두를 사용하여 특정 LBA에 접근할 수 있는 개시의 실시예들에서, 쓰기 요청들이 업데이트 카운트(605)와 쓰기 카운트(610)의 증가를 야기할 수 있는 LBA의 데이터에 대한 업데이트로 간주되는지는 구현에 달려 있을 수 있다. 본 개시의 일부 실시예들에서, 업데이트 카운트(605)와 쓰기 카운트(610)는 저장 요청에 대한 응답에서만 업데이트될 수 있다(쓰기 요청을 통한 업데이트는 LBA가 "메모리"의 데이터의 LBA와 동일하더라도 "메모리"의 데이터를 업데이트하지 않는 것으로 간주될 수 있다). 본 개시내용의 다른 실시예에서, 업데이트 카운트(605) 및 쓰기 카운트(610)는 저장 요청 및 쓰기 요청 모두에 응답하여 업데이트될 수 있다(요청이 취한 경로에 관계없이 해당 LBA에서 데이터에 대한 업데이트를 메모리의 데이터를 업데이트하는 것으로 취급함).
도 3의 SSD(120)은 도 3의 SSD(120)에 물리적으로 데이터가 저장되는 위치를 추적하기 위해 플래시 메모리와 도 3의 FTL(335)를 포함할 수 있고, 플래시 메모리는 서로 다른 수준의 입도(granularity)로 프로그램 및 소거될 수 있기 때문에 도 3의 SSD(120)은 업데이트 카운트(605) 및 쓰기 카운트(610)를 추적하는데 필요한 대부분의 작업을 수행할 수 있다. 이를 위해 필요한 것은 이러한 카운터에 대한 스토리지를 추가하는 것이다. 하드 디스크 드라이브와 같은 다른 저장 장치는 데이터가 제자리에 업데이트될 수 있기 때문에 이러한 정보를 반드시 추적하지는 않을 수 있다. 그러나 본 개시의 일부 실시예에서, 그러한 다른 저장 장치 유형은 업데이트 카운트(605) 및 쓰기 카운트(610)도 추적할 수 있다.
도 6에는 HDM(330)이 6개의 쓰기 카운트(610-1 내지 610-6)을 포함하는 것으로 도시되어 있는 반면, 본 개시의 실시예들은 HDM(330)에 임의의 수의 쓰기 카운트(610)를 포함할 수 있으며, 도 1의 저장 장치(120)에 각 메모리 페이지 주소에 대해 하나의 쓰기 카운트(610)를 쓸 수 있다.
업데이트 카운트(605) 및 쓰기 카운트(610)가 HDM(330)에 저장되는 경우, 도 1의 로드 밸런싱 데몬(145)은 표준 로드 요청을 이용하여 업데이트 카운트(605) 및 쓰기 카운트(610)에 액세스할 수 있다. HDM(330)의 일부(즉, 도 1의 저장 장치(120)의 저장 부분)는 업데이트 카운트(605) 및 쓰기 카운트(610)를 저장하기 위해 예약될 수 있음에 유의한다. 다만, 도 3을 참조하여 상술한 바와 같이, 도 1의 저장 장치(120)는 도 3의 인터럽트 로직(350)을 이용하여 도 1의 로드 밸런싱 데몬(145)에 다양한 정보를 제공할 수 있다. 예를 들어, 도 1의 로드 밸런싱 데몬(145)은 쓰기 카운트(610)의 업데이트 카운트(605)에 대해 정보를 요청할 수 있다. 인터럽트가 사용된 실시예들에서, 도 1의 저장 장치(120)는 도 3의 인터럽트 로직(350)을 이용하여 도 1의 로드 밸런싱 데몬(145)에 이러한 정보를 제공할 수 있다. 이러한 정보는 한 번에 또는 여러 번에 나눠서 제공될 수 있다. 예를 들어, 도 1의 저장 장치(120)는 업데이트 카운트(605)와 쓰기 카운트(610)를 동시에 제공할 수도 있고, 서로 다른 시간에 이러한 정보를 제공할 수도 있다(도 1의 로드 밸런싱 데몬(145)은 데이터가 마이그레이션될 수 있는 비지 상태의 저장 장치에 대해서만 쓰기 카운트(610)에 관심을 가질 수 있기 때문이다). 만약 그러한 정보를 제공하기 위해 다중 인터럽트가 사용된다면, 인터럽트 로직(350)은 다양한 정보를 제공하기 위해 동일한 인터럽트 신호 또는 다른 인터럽트 신호를 사용할 수 있다.
도 7에는 본 개시의 실시예에 따른 도 1의 페이지 테이블(135)의 상세 내용이 도시되어 있다. 상술한 바와 같이, 이기종 메모리 시스템은 애플리케이션이 데이터가 실제로 저장되는 위치를 인지하지 못한 채, 도 1의 메모리(115)나 도 1의 저장 장치(120)에 데이터를 저장할 수 있다. 애플리케이션은 논리 주소(가상 주소라고도 함)를 사용할 수 있으며, 페이지 테이블(135)은 데이터가 저장되는 물리적 주소에 매핑할 수 있다. "물리적 주소"라는 용어는 데이터가 저장될 때 이기종 메모리 시스템에서 사용되는 메모리 주소를 지칭하는 것으로 이해될 수 있다. 도 1의 메모리(115)에 데이터가 저장되는 경우, "물리적 주소"는 메모리 115의 실제(물리적) 주소일 수 있다. 다만, 도 3의 SSD(120)에 실제로 데이터가 저장되어 있는 경우, 메모리 페이지 주소는 도 3의 SSD(120)에 의해 LBA로 해석될 수 있다. 그러므로, "물리적 주소"는 도 3의 SSD(120)에 데이터를 저장할 때, 또는 데이터가 저장되는 저장 장치 내의 물리적 위치에 논리 주소를 내부적으로 매핑할 수 있는 다른 저장 장치들을 지칭하는 것으로도 이해되어야 한다. 그러므로, 페이지 테이블(135)의 맥락에서, 데이터를 저장하는 장치에 따라, "물리적 주소"라는 용어는 물리적 주소 또는 논리적 주소를 지칭할 수 있다.
도 1의 프로세서(110)는 이기종 메모리 시스템 내의 임의의 위치에서 데이터에 접근할 수 있고, 도 1의 프로세서(110)는 이기종 메모리 시스템 전체를 도 1의 모든 메모리(115)인 것처럼 볼 수 있기 때문에, 페이지 테이블에 저장된 물리적 주소는 데이터가 저장된 디바이스를 고유하게 식별할 수 있다. 예를 들어, 도 3을 참조하여 상술한 상황을 계속하면, 페이지 테이블(135)은 도 2의 애플리케이션(405)에서 사용한 가상 주소를 주소 범위 0x0 0000 0000 내지 0x5 FFFF FFFF의 임의의 물리 주소에 매핑할 수 있다. 도 1 메모리(115)에 저장된 데이터를 식별하는 주소 0x0 0000 0000 내지 0x1 FFFF FFFF 및 도 3의 SSD(12)에 저장된 데이터를 식별하는 주소 0x2 0000 0000 내지 0x5 FFFF FFFF를 통해, 임의의 특정 주소는 특정 장치(도 1의 메모리(115) 또는 도 1의 저장 장치(120)일 수 있음)와 연관될 수 있으며, 따라서 데이터가 저장된 특정 장치가 식별될 수 있다. 이와 같은 방식으로, 특정 로드 또는 저장 요청은 적절한 장치(예를 들어, 도 1의 메모리 컨트롤러(125)에 의해)로 유도될 수 있다. 그러나 본 개시의 일부 실시예에서, 페이지 테이블(135)은 또한 데이터가 저장된 특정 장치를 식별하는 정보를 저장할 수 있다(데이터가 저장된 위치를 결정하기 위해 물리적 주소를 조사할 필요가 없을 수 있기 때문에 데이터 액세스를 촉진할 수 있다).
도 7에서, 페이지 테이블(135)은 3개의 가상 주소를 3개의 물리적 주소에 매핑하는 것을 보여준다. 가상 주소 705-1은 물리적 주소 710-1에 매핑할 수 있고, 가상 주소 705-2는 물리적 주소 710-2에 매핑할 수 있으며 가상 주소 705-3은 물리적 주소 710-3에 매핑할 수 있다. 가상 주소(705-1 내지 705-3)는 집합적으로 가상 주소(705)로 지칭될 수 있고, 물리 주소(710-1 내지 710-3)는 집합적으로 물리 주소(710)로 지칭될 수 있다. 도 7에는 가상 주소들의 물리적 주소들에 대한 3개의 매핑을 포함하는 페이지 테이블(135)이 도시되어 있지만, 본 개시의 실시예들은 페이지 테이블(135)에 이러한 매핑들의 임의의 수(0 이상)를 포함할 수 있다.
본 개시의 일부 실시예들에서, 서로 다른 애플리케이션들에 의해 사용되는 가상 주소들은 중첩될 수 있다. 예를 들어, 두 개의 서로 다른 애플리케이션은 모두 가상 주소 0x1000을 사용할 수 있다. 혼동을 피하고 다수의 애플리케이션이 공통의 이기종 메모리 시스템 주소에 접근하는 위험을 피하기 위해, 각 애플리케이션은 애플리케이션이 사용하는 가상 주소를 도 1의 기계(105)가 사용하는 물리적 주소에 매핑하는 자체 페이지 테이블(135)을 가질 수 있다. 이러한 방식으로 두 개의 애플리케이션이 각각 가상 주소 0x1000을 사용할 수 있지만 한 애플리케이션의 가상 주소 0x1000은 물리적 주소 0x0 0000 0000에 매핑될 수 있고 다른 애플리케이션의 가상 주소 0x1000은 물리적 주소 0x3 0000 0000에 매핑될 수 있다.
물론, 본 개시내용의 일부 실시예에서, 애플리케이션은 데이터 공유 및/또는 애플리케이션간 통신을 가능하게 하기 위해 특정 물리적 주소에 대한 액세스를 공유할 수 있다. 이러한 상황에서, 각 애플리케이션에 대한 페이지 테이블(135)은 가상 주소를 공통 물리적 주소에 매핑할 수 있다. 이 매핑은 동일한 가상 주소 또는 다른 가상 주소로부터 올 수 있다. 그러나 이러한 상황은 우연한 데이터 공유보다는 의도적인 데이터 공유를 반영한다.
도 8에는 본 개시의 실시예에 따른 도 1의 페이지 테이블(135)의 실시예가 도시되어 있다. 도 8에는 4단계 페이지 테이블(135)이 도시되어 있다. 가상 주소(705)의 경우, 일부 비트는 다양한 테이블로 오프셋을 결정하는 데 사용될 수 있다. 모든 다양한 테이블과 오프셋을 사용함으로써 특정 물리적 주소를 결정할 수 있다. 예를 들어, 비트 39에서 47은 테이블 805-1에 대한 오프셋으로 사용될 수 있고, 비트 30에서 38은 테이블 805-2에 대한 오프셋으로 사용될 수 있고, 비트 21에서 29는 테이블 805-3에 대한 오프셋으로 사용될 수 있고, 비트 12에서 20은 테이블 805-4에 대한 오프셋으로 사용될 수 있고, 비트 0에서 11은 테이블 805-5에 대한 오프셋으로 사용될 수 있다. 테이블 805-1의 베이스 어드레스는, 도 1의 프로세서(110)(CR3 레지스터라 할 수 있음)의 레지스터(810)를 이용하여 액세스 하거나, 도 1의 프로세서(110)의 레지스터(810) 내의 일부 비트를 이용하여 액세스 할 수 있다. 테이블 805-1내지 805-4까지의 각 항목은 다음 테이블의 기본 주소를 식별할 수 있으며, 테이블 805-5의 항목은 페이지 테이블(135)에 의해 반환될 실제 물리적 주소일 수 있다. 이와 같이, 페이지 테이블(135)은 가능한 모든 가상 주소(도 1의 상당한 양의 메모리(115)를 필요로 할 수 있음)로부터 매핑을 저장할 필요 없이 도 1의 메모리(115)(도 1의 저장 장치(120)를 사용하여 확장됨)의 큰 범위를 가로질러 가상 주소에 대한 접근을 허용할 수 있다.
도 8은 9비트 오프셋을 사용하여 액세스되는 52비트 항목이 있는 4단계 페이지 테이블을 사용하는 구현을 보여주지만, 본 개시의 실시예는 임의의 원하는 페이지 테이블 구현을 지원할 수 있고, 임의의 수의 레벨, 임의의 수의 비트를 포함하는 엔트리를 포함할 수 있고, 임의의 수의 비트를 사용하여 테이블에 대한 오프셋을 결정할 수 있다.
도 9에는 본 개시의 실시예에 따른 이기종 메모리 시스템에서 로드 밸런싱을 수행하는 도 1의 로드 밸런싱 데몬(145)이 도시되어 있다. 도 9에서, 로드 밸런싱 데몬(145)은 저장 장치(120)에 대한 부하를 고려할 수 있다. 예를 들어, 저장 장치 120-1에 대한 도 6의 업데이트 카운트(605)를 13으로 하고, 저장 장치 120-2에 대한 도 6의 업데이트 카운트(605)를 2로 가정한다. 로드 밸런싱 데몬(145)은 저장 장치(120)에서 도 3의 HDM(330)에 접속하거나, 이 정보를 위해 저장 장치(120)를 폴링함으로써 저장 장치(120)에 대한 도 6의 업데이트 카운트(605)를 결정할 수 있다. 이러한 값은 저장 장치(120)에 대한 도 6의 마지막 업데이트 카운트(605)가 재설정된 이후, 애플리케이션은 저장 장치 120-1에 13회의 데이터 업데이트를 썼지만, 애플리케이션은 저장 장치 120-2의 데이터에 대한 업데이트를 두 번만 썼다는 것을 의미한다. 로드 밸런싱 데몬(145)은 도 6의 업데이트 카운트(605)에 액세스할 수 있으며, 도 6의 업데이트 카운트(605)로부터 저장 장치(120)에 대한 상대 부하를 결정할 수 있다.
로드 밸런싱 데몬(145)은 두 개의 저장 장치를 선택할 수 있으며, 그 중 하나는 "비지(busy)" 저장 장치로 식별될 수 있고 다른 하나는 "유휴(idle)" 저장 장치로 식별될 수 있다. 본 개시 내용의 일부 실시예에서, 특히 도 1의 기계(105)가 2개보다 많은 저장 장치(120)를 포함하는 경우, 로드 밸런싱 데몬은 "가장 비지 상태" 저장 장치(즉, 도 6의 업데이트 카운트(605)가 가장 높은 저장 장치)인 하나의 저장 장치(120) 및 "가장 유휴 상태" 저장 장치(즉, 도 6의 업데이트 카운트(605)가 가장 낮은 저장 장치)인 다른 저장 장치(120)를 선택할 수 있다. 본 개시의 다른 실시예에서, 로드 밸런싱 데몬(145)은 "가장 비지" 또는 "가장 유휴" 저장 장치를 반드시 선택하지 않고 2개의 저장 장치를 선택할 수 있고, 두 개의 저장 장치가 상대적으로 "비지" 또는 "유휴"일 필요도 없다.
저장 장치(120)가 상대적으로 "비지 상태"이거나 "유휴 상태"일 수 있지만, 이는 로드 밸런싱 데몬(145)이 저장 장치 간에 데이터를 자동으로 마이그레이션해야 한다는 사실만으로는 알 수 없다. 예를 들어, 저장 장치(120-1)가 2의 도 6의 관련 업데이트 카운트(605)를 가지고 있고, 저장 장치(120-2)가 1의 도 6의 관련 업데이트 카운트(605)를 가지고 있다고 가정하자. 저장 장치 120-1에서 저장 장치 120-2로 페이지를 이동하면 어떤 저장 장치가 "비지 상태"인지는 변경되지만, 도 1의 기계(105)의 전체적인 성능은 향상되지 않을 가능성이 있다. 그러므로, 로드 밸런싱 데몬(145)은 도 6의 업데이트 카운트(605)를 이용하여 상대적인 로드가 저장 장치(120) 간의 데이터 마이그레이션에 적합한지를 결정할 수 있다. 로드 밸런싱 데몬(145)은 상대적인 부하가 마이그레이션을 정당화하는지 여부를 결정하기 위해 임의의 원하는 접근 방식을 사용할 수 있다. 예를 들어, "비지" 저장 장치와 "유휴" 저장 장치를 선택한 후, 로드 밸런싱 데몬(145)은 저장 장치에 대한 도 6의 업데이트 카운트(605) 사이의 차이를 결정하고 그 차이를 임계값(threshold)과 비교할 수 있다. 도 6의 업데이트 카운트(605) 사이의 차이가 어떤 임계값을 초과하는 경우, 로드 밸런싱 데몬(145)은 저장 장치(120) 사이의 일부 데이터를 마이그레이션하는 프로세스를 시작할 수 있고, 그렇지 않은 경우, 로드 밸런싱 데몬(145)은 저장 장치(120)를 그대로 둘 수 있다. 이 임계값은 절대 임계값일 수 있다. 예를 들어, 선택한 장치에 대한 도 6의 업데이트 카운트(605) 사이의 차이가 10보다 큰 경우일 수 있다. 또는 이 임계값은 상대 임계값일 수 있다. 예를 들어, 저장 장치 120-1에 대한 도 6의 업데이트 카운트(605)는 저장 장치 120-2에 대한 도 6의 업데이트 카운트(605)보다 10% 클 수 있다.
로드 밸런싱 데몬(145)이 저장 장치(120-1)가 저장 장치(120-2)보다 충분히 큰 부하를 가지고 있다고 결정하면, 로드 밸런싱 데몬(145)은 저장 장치(120-1)의 어떤 메모리 페이지를 저장 장치(120-2)로 마이그레이션할지 결정할 수 있다. 로드 밸런싱 데몬(145)은 임의의 원하는 알고리즘을 사용하여 메모리 페이지를 선택할 수 있다. 예를 들어, 로드 밸런싱 데몬(145)은 도 6의 쓰기 카운트(610)가 저장 장치(120-1)에서 저장 장치(120-2)로 이동될 경우 저장 장치(120-1) 및 저장 장치(120-2)의 업데이트 카운트(605)가 대략적으로 또는 거의 동일한 메모리 페이지 세트를 식별하려고 시도할 수 있다. 로드 밸런싱 데몬(145)은 저장 장치(120)에서 도 3의 HDM(330)에 접속하거나, 이 정보를 위해 저장 장치(120)를 폴링함으로써 저장 장치(120)에 대한 도 6의 쓰기 카운트(610)를 결정할 수 있다. 로드 밸런싱 데몬(145)은, 예를 들어, 마이그레이션을 위한 저장 장치(120-1, 120-2)에 대한 도 6의 쓰기 카운트(610)가 도 6의 업데이트 카운트(605)의 차이의 대략 1/2인 메모리 페이지 세트를 선택할 수 있다. 마이그레이션할 메모리 페이지에 대한 도 6의 총 쓰기 카운트(610)는 도 6의 업데이트 카운트(605) 차이의 1/2일 수 있다. 이는 마이그레이션에는 저장 장치(120-1)와 관련된 도 6의 업데이트 카운트(605)에서 도 6의 쓰기 카운트(610)를 빼는것과, 도 6의 쓰기 카운트(610)를 저장 장치(120-2)와 관련된 도 6의 업데이트 카운트(605)에 추가하는 것이 모두 포함되기 때문이다.
본 개시의 실시예는 저장 장치(120) 사이에서 마이그레이션할 메모리 페이지의 임의의 세트를 선택하는 것을 포함할 수 있지만, 메모리 페이지를 마이그레이션하는 것은 시간이 걸리며, 이는 저장 장치(120-2)에 대한 다른 요청, 특히 다른 쓰기 요청에 영향을 미칠 수 있다. 따라서, 본 개시의 일부 실시예에서 메모리 페이지의 최소 세트가 저장 장치(120) 사이에서 마이그레이션될 수 있다. 마이그레이션을 위해 선택된 메모리 페이지 수를 최대한 작게 유지하기 위해, 도 6의 쓰기 카운트(610)가 가장 큰 메모리 페이지를 선택할 수 있다. 예를 들어, 도 5의 메모리 페이지는 도 6의 쓰기 카운트(610-2)와 연관될 수 있으며, 이는 저장 장치(120-1)에 저장된 메모리 페이지에 대한 가장 큰 쓰기 카운트일 수 있다. 하나의 메모리 페이지만 마이그레이션하는 것은 도 6의 쓰기 카운트 610-3, 610-4 및 610-6이 있는 메모리 페이지를 마이그레이션하는 것보다 시간이 덜 걸릴 수 있다. 이는 집합적으로 도 6의 쓰기 카운트(610-2)보다 더 낮은 쓰기 카운트를 갖는다. 그러므로, 도 9에 나타난 바와 같이, 로드 밸런싱 데몬(145)은 메모리 페이지(905)를 저장 장치(120-1)에서 저장 장치(120-2)로 마이그레이션하도록 지시할 수 있으며, 이는 저장 장치(120)에 대한 부하를 밸런싱하는 것과 저장 장치(120) 간에 마이그레이션하는 메모리 페이지 수를 최소화하는 것 사이에서 균형을 이룰 수 있다.
그러나 데이터가 저장 장치(120-1)에서 저장 장치(120-2)로 마이그레이션되고 페이지 테이블(135)이 애플리케이션에서 사용하는 가상 주소를 데이터의 "물리적 주소"로 매핑하는 경우, 메모리 페이지(905)가 저장 장치(120-1)에서 저장 장치(120-2)로 마이그레이션된 후에는 페이지 테이블(135)이 담고 있는 정보는 오래된 정보일 수 있다. 예를 들어, 다음과 같은 상황을 고려할 수 있다. 메모리 주소 0x0 0000 0000 ~ 0x1 FFFF FFFF는 도 1의 메모리(115)에 저장된 데이터를 식별한고, 메모리 주소 0x2 0000 0000 ~ 0x3 FFFF FFFF 저장 장치(120-1)에 저장된 데이터를 식별하고, 어드레스 0x4 0000 0000 내지 0x5 FFFF FFFF는 저장 장치(120-2)에 저장된 데이터를 식별한다. 메모리 페이지(905)가 페이지 테이블(135)의 물리적 주소를 업데이트하지 않고 저장 장치(120-1)에서 저장 장치(120-2)로 마이그레이션된다면, 메모리 주소와 장치 사이의 관계가 깨질 수 있다. 이 문제를 해결하기 위한 솔루션은 적어도 두 가지가 있다. 메모리 페이지 주소가 데이터가 저장되는 이기종 메모리 시스템의 새로운 위치를 반영할 수 있게 업데이트되도록 하거나, 또는 페이지 테이블(135)이 도 7의 가상 주소(705)를 도 7의 물리적 주소(710) 및 데이터가 실제로 저장되는 장치(도 1의 메모리(115), 저장 장치(120-1) 또는 저장 장치(120-2))의 식별자에 매핑할 수도 있다.
데이터가 이기종 메모리 시스템 내에서 한 메모리 페이지에서 다른 메모리 페이지로 마이그레이션되기 때문에, 페이지 테이블(135)에서 가상 주소가 매핑되는 물리적 주소를 업데이트하는 것이 합리적이다. 따라서, 애플리케이션이 그 데이터에 액세스할 수 있도록 지원하기 위해, 로드 밸런싱 데몬(145)은 데이터가 저장되는 새로운 위치를 반영하도록 페이지 테이블(135)의 페이지 테이블 엔트리(910)를 업데이트할 수 있다. 예를 들어, 도 7의 물리적 주소(710-2)는 도 7의 가상 주소(705-2)와 연관된 데이터가 이전에는 메모리 페이지 주소 5와 연관되었음을 나타내는 반면, 마이그레이션이후 페이지 테이블(135)은 메모리 페이지 주소가 현재 15인 것을 반영하도록 업데이트될 수 있다. 그러나, 이기종 메모리 시스템 내의 임의의 디바이스(도 1의 메모리(115), 저장 장치(120-1) 또는 저장 장치(120-2))가 임의의 메모리 페이지 주소를 갖는 데이터를 저장할 수 있는 본 발명의 실시예에서, 페이지 테이블(135)은 메모리 페이지 주소를 반영할 뿐만 아니라, 데이터가 저장된 디바이스를 식별(도 1을 참고하면 링크(140-1, 140-2)로 상징적으로 도시)할 수도 있다.
위의 논의에서, 로드 밸런싱 데몬(145)은 저장 장치(120) 사이에서 데이터를 마이그레이션하는 것으로 설명된다. 로드 밸런싱 데몬(145)이 저장 장치(120)의 로드 밸런싱에 집중할 수 있기 때문에 이는 합리적이다. 단, 본 개시의 실시예는 도 1의 메모리(115)에 대한 부하도 고려할 수 있으며, 로드 밸런싱 데몬(145)은 도 1의 메모리(115)와 저장 장치(120)(도 1의 메모리(115)로 데이터를 이동하거나 또는 도 1의 메모리(115)로부터 데이터를 이동시키는 어느 한 방향) 간의 데이터 이동을 배치할 수도 있다. 로드 밸런싱 데몬(145)은 다른 임계값을 사용하여 데이터가 도 1의 저장 장치(120)에서 메모리(115)로 데이터를 이동하는 것을 정당화할 만큼 충분히 핫한 상태인지(hot. 즉, 충분히 자주 액세스되는 상태인지) 또는 데이터가 도 1의 메모리(115)에서 저장 장치(120)로 데이터를 이동하는 것을 정당화할 만큼 충분히 콜드한 상태인지(cold. 즉, 충분히 자주 액세스되지 않는 상태인지) 여부를 결정할 수 있다. 로드 밸런싱 데몬(145)은 또한 고려 중인 장치에 기초하여 상이한 임계값을 사용할 수 있다. 예를 들어, 데이터를 SSD에서 하드 디스크 드라이브(또는 메모리)로 마이그레이션할지 여부를 결정하는 데 사용되는 임계값은 데이터를 하드 디스크 드라이브(또는 메모리에서)에서 SSD로 마이그레이션하는 데 사용되는 임계값과 다를 수 있다. 또는, 임계값은 디바이스의 특성에 부분적으로 기초할 수 있다. 예를 들어, 높은 임계값은 다른 장치보다 빠르게 요청을 처리할 수 있는 장치와 연결될 수 있으며, 낮은 임계값은 다른 장치보다 느리게 요청을 처리할 수 있는 장치와 연결될 수 있다.
위의 논의는 또한 저장 장치(120)에 발행된 쓰기 요청에 초점을 맞춘 로드 밸런싱 데몬(145)을 설명한다. 쓰기 요청이 읽기 요청보다 오래 걸릴 수 있는 SSD와 같은 저장 장치의 경우 쓰기 요청 부하의 균형을 맞추는 것이 합리적일 수 있다. 그러나 본 개시의 일부 실시예에서, 로드 밸런싱 데몬(145)은 또한 읽기 요청에 의해 부과된 부하를 고려할 수 있다(또는 읽기 요청에 의해 부과된 부하에만 집중할 수 있음). 예를 들어 데이터가 상대적으로 정적인 시스템에서는 읽기 요청이 우세할 수 있다. 로드 밸런싱 데몬(145)은 거의 동일한 수의 읽기 작업을 수행하는 방식으로 저장 장치(120)에 데이터를 분산하려고 시도할 수 있으며, 이는 전체 성능을 향상시킬 수 있다.
마지막으로, 위의 논의는 저장 장치(120)가 거의 동등한 성능을 갖는다고 가정한다. 즉, 저장 장치(120-1)가 데이터를 기록하는 데 필요한 시간은 저장 장치(120-2)가 데이터를 기록하는 데 필요한 시간 및 유사하게 데이터를 읽는 데 필요한 시간과 거의 동일할 것으로 예상될 수 있다. 저장 장치(120)의 성능이 달라질 수 있는 경우, 로드 밸런싱 데몬(145)은 저장 장치(120)가 작업을 수행하는 데 필요한 시간을 고려할 수 있다.
예를 들어, 저장 장치(120-1)가 쓰기 요청에 응답하는 데 평균 100마이크로초(μs)가 소요되고 저장 장치(120-2)가 쓰기 요청에 응답하는 데 평균 200μs가 걸린다고 가정하자. 저장 장치(120-1)가 13개의 쓰기 요청(도 6의 업데이트 카운트 605를 기준으로)을 처리했다면, 저장 장치(120-1)는 쓰기 요청 처리에 약 1300 μs(1.3 밀리초(ms))를 소비할 수 있다. 저장 장치(120-2)가 동일한 간격으로 2개의 쓰기 요청만 처리해야 했다면 저장 장치(120-2)는 쓰기 요청을 처리하는 데 약 400μs를 소비할 수 있다. 그리고 비록 저장 장치(120-2)가 더 느린 쓰기 요청 응답 시간을 가질 수 있지만, 일부 데이터를 저장 장치(120-1)에서 저장 장치(120-2)로 마이그레이션하는 것이 유리할 수 있다. 그러나 저장 장치(120-2)가 해당 간격에서 7개의 쓰기 요청을 처리해야 했다면 저장 장치(120-2)는 쓰기 요청을 처리하는 데 약 1400μs(1.4ms)를 소비할 수 있다. 이는 저장 장치(120-1)가 저장 장치(120-2)보다 더 많은 쓰기 요청을 처리했음에도 불구하고 저장 장치(120-1)보다 더 많은 시간이 쓰기 요청을 처리하는 데 소비된 것이다. 이 경우 저장 장치(120-1)에서 저장 장치(120-2)로 데이터를 마이그레이션하면 성능이 오히려 저하될 수 있다. 그러므로, 다양한 성능 수준의 저장 장치를 사용하는 시스템에서 작동하기 위해서는, 저장 장치(120)가 쓰기 요청을 처리하는 데 소비한 시간을 추정하는 것이 도 6의 업데이트 카운트(605)보다 더 나은 분석을 제공할 수 있다. 유사한 방식으로, 읽기 성능은 달라질 수 있으며, 이는 로드 밸런싱 데몬(145)에 의해 좌우될 수도 있다.
로드 밸런싱 데몬(145)은 저장 장치(120)에 대한 도 3의 HDM(330)에서 도 6의 업데이트 카운트(605) 및/또는 도 6의 쓰기 카운트(610)를 주기적으로 재설정할 수 있다. 예를 들어, 로드 밸런싱 데몬(145)이 도 1의 기계(105)에서 데이터를 마이그레이션한 후, 로드 밸런싱 데몬(145)은 저장 장치(120)에 대한 도 3의 HDM(330)에서 도 6의 업데이트 카운트(605) 및/또는 도 6의 쓰기 카운트(610)를 재설정할 수 있다. 따라서 로드 밸런싱 데몬(145)이 저장 장치(120) 사이에서 데이터를 마이그레이션할지 여부를 다음에 결정할 때, 이전 데이터 마이그레이션 후에 도 6의 업데이트 카운트(605) 및 도 6의 쓰기 카운트(610)의 분석에 기초하여 결정이 이루어지도록 한다. 로드 밸런싱 데몬(145)이 도 3의 HDM(330)에 접근할 수 있는 경우, 로드 밸런싱 데몬(145)은 도 6의 업데이트 카운트(605) 및/또는 쓰기 카운트(610)를 재설정할 수 있고, 그렇지 않은 경우, 로드 밸런싱 데몬(145)은 도 3의 HDM(330)에서 도 6의 업데이트 카운트(605) 및/또는 쓰기 카운트(610)의 설정을 저장 장치(120)에 요청할 수 있다.
또한 때때로 애플리케이션이 특정 데이터를 더 이상 사용하지 않고 이 데이터를 메모리에서 해제할 수 있다. 이 데이터는 앞으로 사용되지 않으므로 해당 주소와 관련된 쓰기 카운트는 즉시 재설정될 수 있다. 또한, 도 6의 업데이트 카운트(605)로 표시되는 부하는 메모리에서 해제된 데이터에 대한 쓰기를 고려할 수 있기 때문에, 도 6의 업데이트 카운트(605)는 메모리로부터 해제된 관련 메모리 페이지에 대한 도 6의 쓰기 카운트(610)의 값만큼 감소될 수 있다. 이러한 방식으로, 이기종 메모리 시스템은 미래의 부하를 반영하지 않을 수 있는 저장 장치(120)에 대한 부하의 보기를 피할 수 있다.
도 9는 하나의 메모리 페이지(905)를 저장 장치(120-1)에서 저장 장치(120-2)로 마이그레이션하는 로드 밸런싱 데몬(145)을 도시하지만, 본 개시의 실시예는 임의의 수(하나 이상)의 페이지를 저장 장치(120-1)에서 저장 장치(120-2)로 마이그레이션하는 것을 지원할 수 있다. 또한, 저장 장치(120-1, 120-2)의 부하가 충분히 가깝다면(임계값 내), 로드 밸런싱 데몬(145)은 현재 데이터 마이그레이션이 필요하지 않다고 결정할 수 있다.
도 10에는 본 개시의 실시예에 따른 도 1의 저장 장치(120)의 일부가 도시되어 있다. 도 10에서, 저장 장치(120)는 페이지들(1015-1 내지 1015-8)을 포함할 수 있다. 위에서 논의된 바와 같이, 페이지들(1015-1 내지 1015-8)은 블록으로 구성될 수 있고, 이는 차례로 슈퍼블록으로 구성될 수 있다.
그러나 이 구성에 추가하여, 저장 장치(120)의 다른 부분이 다른 용도에 할당될 수 있다. 예를 들어, 페이지들(1015-1 내지 1015-8)은 2개의 부분(1005 및 1010)으로 구성될 수 있다. 부분(1005)은 전술한 바와 같이 이기종 메모리 시스템과 함께 사용될 수 있다. 부분(1010)은 일반 저장소 액세스에 따라 애플리케이션에서 액세스할 수 있다. 즉, 애플리케이션들은 도 1의 메모리(115)로 향하는 것처럼 보일 수 있는 로드 또는 저장 요청보다는 부분(1010)에 저장된 데이터에 접근하기 위해 읽기 또는 쓰기 요청을 발행할 수 있다. 도 10은 부분 1005 및 1010이 중첩되지 않는 것으로 도시하지만, 본 개시 내용의 일부 실시예에서 부분 1005 및 1010이 중첩될 수 있어 애플리케이션이 로드/저장 요청 및 읽기/쓰기 요청 모두를 사용하여 중첩된 페이지의 데이터에 액세스할 수 있다. 즉, 애플리케이션은 도 4의 호스트 인터페이스(450)를 사용하여 중첩된 페이지에 데이터를 기록할 수 있고 도 4의 메모리 인터페이스(435) 및 HDM(330)을 사용하여 해당 데이터를 읽을 수 있거나 그 반대의 경우도 마찬가지다.
위의 설명이 페이지 단위의 페이지들(1015-1 내지 1015-8)에 초점을 맞추고 있지만, 본 개시내용의 실시예는 블록 또는 슈퍼블록과 같은 다른 단위를 부분(1005 및 1010)으로 구성할 수 있다. 또한, 저장 장치(120)는 임의의 수(하나 이상) 부분을 포함할 수 있으며, 그 중 어느 것도 다양한 정도로 중첩되지 않거나, 일부 또는 모두 중첩될 수 있다.
도 11에는 본 개시의 실시예에 따른 도 1의 로드 밸런싱 데몬(145)의 상세 내용이 도시되어 있다. 로드 밸런싱 데몬(145)은 액세스 로직(1105), 마이그레이션 로직(1110), 페이지 테이블 업데이트 로직(1115), 및 리셋 로직(1120)을 포함할 수 있다. 액세스 로직(1105)은 도 1의 저장 장치(120)의 도 3의 HDM(330)으로부터 데이터를 읽기 위해 사용될 수 있다. 마이그레이션 로직(1110)은 도 1의 저장 장치들(120)에 로드 밸런싱 데몬(145)의 지시에 따라 도 9의 메모리 페이지(905)를 마이그레이션하도록 지시할 수 있다. 페이지 테이블 갱신 로직(1115)은 도 9의 메모리 페이지(905)와 같은 데이터가 도 1의 저장 장치(120-1)에서 도 1의 저장 장치(120-2)로 마이그레이션될 때 도 1의 페이지 테이블(135)을 갱신할 수 있다. 리셋 로직(1120)은 도 1의 저장 장치(120)의 도 3의 HDM(330)에서 데이터를 리셋하기 위해 사용될 수 있다.
도 9를 참조하여 위에서 논의된 바와 같이, 본 개시의 일부 실시예에서 로드 밸런싱 데몬(145)은 그러한 데이터에 직접 액세스하기 보다는 도 3의 HDM(330)의 정보에 대해 도 1의 저장 장치(120)를 폴링할 수 있다. 본 개시의 실시예에서, 로드 밸런싱 데몬(145)은 정보에 대해 저장 장치(120)를 폴링할 수 있는 폴러(1125)를 포함할 수 있다.
도 12에는 도 1의 시스템에서 본 개시의 실시예에 따른 로드 밸런싱을 수행하는 절차의 순서도가 도시되어 있다. 도 12의 블록 1205에서, 도 1의 로드 밸런싱 데몬(145)은 도 1의 저장 장치(120-1)를 식별할 수 있다. 도 1의 로드 밸런싱 데몬(145)은 도 11의 액세스 로직(1105)을 이용하여 도 6의 업데이트 카운트(605)에 액세스하여 도 1의 저장 장치(120-1)를 식별할 수 있다. 블록 1210에서 도 1의 로드 밸런싱 데몬(145)은 도 1의 저장 장치(120-2)를 식별할 수 있다. 도 1의 로드 밸런싱 데몬(145)은 도 11의 액세스 로직(1105)을 이용하여 도 6의 업데이트 카운트(605)에 액세스하여 도 1의 저장 장치(120-2)를 식별할 수 있다. 블록 1215에서 도 1의 로드 밸런싱 데몬(145)은 도 1의 저장 장치(120-1)에서 도 9의 메모리 페이지(905)를 식별할 수 있다. 도 1의 로드 밸런싱 데몬(145)은 도 11의 액세스 로직(1105)을 이용하여 도 6의 쓰기 카운트(610)에 액세스하여 도 9의 메모리 페이지(905)를 식별할 수 있다. 마지막으로, 블록 1220에서, 도 1의 로드 밸런싱 데몬(145)은 도 9의 메모리 페이지(905)를 도 1의 저장 장치(120-1)에서 도 2의 저장 장치(120-2)로의 마이그레이션을 개시할 수 있다. 도 3의 로드 밸런싱 데몬(145)은 도 11의 마이그레이션 로직(1110)을 이용하여 이러한 마이그레이션을 수행할 수 있다.
도 13a 및13b는 본 개시의 실시예들에 따른 도 1의 시스템에서 부하 분산을 수행하기 위한 예시적인 절차의 대안적인 순서도를 나타낸다. 도 13a 및 13b는 도 12와 유사하나, 보다 일반적이다. 도 13a에서 도 1의 저장 장치(120)는 블록 1305에서 도 9의 메모리 페이지(905)에 대한 도 5의 저장 요청(505)을 수신할 수 있다. 블록 1310에서는 도 5의 저장 요청(505)을 수행하는 일부로서 도 6의 증분 로직(615)이 도 6의 업데이트 카운트(605)를 증가시킬 수 있고, 블록 1315에서는 도 6의 증분 로직(615)이 업데이트 중인 메모리 페이지에 대한 도 6의 쓰기 카운트(610)를 증가시킬 수 있다.
블록 1205에서 도 1의 로드 밸런싱 데몬(145)은 도 1의 저장 장치(120-1)를 식별할 수 있다. 도 1의 로드 밸런싱 데몬(145)은 도 11의 액세스 로직(1105)을 이용하여 도 6의 업데이트 카운트(605)에 액세스하여 도 1의 저장 장치(120-1)를 식별할 수 있다. 블록 1210에서 도 1의 로드 밸런싱 데몬(145)은 도 1의 저장 장치(120-2)를 식별할 수 있다. 도 1의 로드 밸런싱 데몬(145)은 도 11의 액세스 로직(1105)을 이용하여 도 6의 업데이트 카운트(605)에 액세스하여 도 1의 저장 장치(120-2)를 식별할 수 있다. 블록 1215에서 도 1의 로드 밸런싱 데몬(145)은 도 1의 저장 장치(120-1)에서 도 9의 메모리 페이지(905)를 식별할 수 있다. 도 1의 로드 밸런싱 데몬(145)은 도 11의 액세스 로직(1105)을 이용하여 도 6의 쓰기 카운트(610)에 액세스하여 도 9의 메모리 페이지(905)를 식별할 수 있다.
도 13b의 블록 1220에서, 도 1의 로드 밸런싱 데몬(145)은 도 9의 메모리 페이지(905)를 도 1의 저장 장치(120-1)에서 도 2의 저장 장치(120-2)로의 이동을 개시할 수 있다. 도 3의 로드 밸런싱 데몬(145)은 도 11의 마이그레이션 로직(1110)을 이용하여 이러한 마이그레이션을 수행할 수 있다. 블록 1320에서, 도 1의 로드 밸런싱 데몬(145)은 도 1의 저장 장치(120-1)에서 도 1의 저장 장치(120-2)로의 도 9의 메모리 페이지(905)의 마이그레이션을 반영하도록 도 1의 페이지 테이블(135)을 업데이트할 수 있다. 도 1의 로드 밸런싱 데몬(145)은 도 11의 페이지 테이블 업데이트 로직(1115)을 이용하여 도 1의 페이지 테이블(135)을 업데이트할 수 있다.
블록 1325에서 도 1의 로드 밸런싱 데몬(145)은 저장 장치(120-1)에 대한 도 3의 HDM 330에서 도 6의 업데이트 카운트(605)를 재설정할 수 있다. 블록 1330에서 도 1의 로드 밸런싱 데몬 145는 저장 장치 120-2에 대한 도 3의 HDM 330에서 도 6의 업데이트 카운트 605를 재설정할 수 있다. 마지막으로, 블록 1335에서 도 1의 로드 밸런싱 데몬(145)은 도 1의 저장 장치(120-1)에서 도 9의 메모리 페이지(905)에 대한 도 6의 쓰기 카운트(610)를 재설정할 수 있다. 보다 일반적으로, 블록 1335에서, 도 1의 로드 밸런싱 데몬(145)은 도 1의 저장 장치(120-1)의 모든 메모리 페이지에 대해 도 3의 HDM(330)의 도 6의 쓰기 카운트(610)를 리셋할 수 있고, 도 1의 저장 장치(120-2)의 모든 메모리 페이지에 대해 도 3의 HDM(330)의 도 6의 쓰기 카운트(610)를 리셋할 수 있다. 로드 밸런싱 데몬(145)은 리셋 로직(1120)을 사용하여 블록 1325, 1330, 1335에 설명된 리셋을 수행할 수 있다.
도 14에는 도 1에 개시된 실시예에 따라 도 1의 시스템에서 페이지가 마이그레이션될 수 있는 저장 장치(120)를 식별하기 위한 도 1의 로드 밸런싱 데몬(145)의 예시적인 절차의 순서도가 도시되어 있다. 도 14의 블록 1405에서, 도 1의 로드 밸런싱 데몬(145)은 도 11의 액세스 로직(1105)을 이용하여, 도 1의 저장 장치(120)에 대한 도 3의 HDM(330)으로부터 도 6의 업데이트 카운트(605)에 접속할 수 있다. 블록 1410에서, 도 1의 각 저장 장치(120)에 대해, 도 1의 로드 밸런싱 데몬(145)은 도 6의 연관된 업데이트 카운트(605)를 고려할 수 있다. 도 1의 저장 장치(120)에 대한 도 6의 업데이트 카운트(605)가 최대값(즉, 도 1의 저장 장치(120)에 걸친 가장 높은 업데이트 카운트―더 일반적으로, 저장 장치(120)에 대한 도 6의(605)의 업데이트 카운트가 도 1의 다른 저장 장치(120)에 대한 도 6의 업데이트 카운트(605)보다 높음)인 경우 - 블록 1415에서, 로드 밸런싱 데몬(145)은 데이터 마이그레이션을 위한 소스 저장 장치로서 도 1의 저장 장치(120)를 선택할 수 있다. 도 1의 저장 장치(120)에 대한 도 6의 업데이트 카운트(605)가 최소값(즉, 도 1의 저장 장치(120)에 걸친 가장 낮은 업데이트 카운트―더 일반적으로, 저장 장치(120)에 대한 도 6의(605)의 업데이트 카운트가 도 1의 다른 저장 장치(120)에 대한 도 6의 업데이트 카운트(605)보다 낮은 경우)인 경우, 그러면 블록 1415에서, 로드 밸런싱 데몬(145)은 도 1의 저장 장치(120)를 데이터 마이그레이션을 위한 대상 저장 장치로 선택할 수 있다.
도 1의 저장 장치(120)의 경우, 이와 관련된 도 6의 업데이트 카운트(605)가 데이터 마이그레이션을 위한 소스 또는 목적지 저장 장치로 간주될 만큼 충분히 높거나 낮지 않다면, 도 1의 저장 장치(120)는 도 1의 로드 밸런싱 데몬(145)에 의해 전달될 수 있다.
도 15는 본 개시의 실시예에 따라 도 1의 기계(105)에서 마이그레이션하기 위해 도 9의 메모리 페이지(905)를 선택하기 위해 도 1의 로드 밸런싱 데몬(145)에 대한 예시적인 절차의 순서도를 도시한다. 도 15의 블록 1505에서, 도 1의 로드 밸런싱 데몬(145)은 소스 저장 장치에 대한 도 3의 HDM(330)으로부터 도 6의 쓰기 카운트(610)에 액세스하기 위해 도 11의 액세스 로직(1105)을 사용할 수 있다. 블록 1510에서, 도 1의 로드 밸런싱 데몬(145)은 특정 메모리 페이지에 대한 도 6의 쓰기 카운트(610)가 최대값(즉, 도 1의 저장 장치(120)의 페이지에 대한 가장 높은 쓰기 카운트 - 보다 일반적으로 도 1의 로드 밸런싱 데몬(145)은 특정 메모리 페이지에 대한 도 6의 쓰기 카운트(610)가 도 1의 저장 장치(120) 상의 다른 메모리 페이지에 대한 도 6의 쓰기 카운트(610)보다 높은지 결정할 수 있음)을 갖는지 결정할 수 있다. 그런 다음 블록 1515에서 도 1의 로드 밸런싱 데몬(145)은 도 1의 저장 장치(120-1)에서 도 1의 저장 장치(120-2)로의 마이그레이션을 위해 도 9의 관련 메모리 페이지(905)를 선택할 수 있다.
도 16은 본 개시의 실시예에 따른, 도 1의 기계(105)에서의 마이그레이션을 위해 도 1의 저장 장치(120) 또는 도 9의 메모리 페이지(905)를 식별하기 위해 도 1의 로드 밸런싱 데몬(145)을 위한 대안적인 절차의 순서도를 도시한다. 도 16을 참조하면, 블록 1605에서, 도 1의 로드 밸런싱 데몬(145)은 도 6의 업데이트 카운트(605) 및/또는 도 6의 쓰기 카운트(610)에 대해 도 1의 저장 장치(120)를 폴링할 수 있다. 블록 1610에서, 도 1의 로드 밸런싱 데몬(145)은 도 1의 저장 장치(120)에 대한 도 6의 업데이트 카운트(605) 및/또는 도 6의 쓰기 카운트(610)와 함께 도 1의 저장 장치(120)로부터 발생하는 인터럽트를 수신할 수 있다.
도 17은 본 개시내용의 실시예에 따른, 도 1의 기계(105)에서 도 9의 메모리 페이지(905)의 마이그레이션이 발생하기 위한 절차의 흐름도를 도시한다. 도 17을 참조하면, 블록 1705에서, 도 1의 로드 밸런싱 데몬(145)은 도 9의 메모리 페이지(905)를 도 1의 저장 장치(120-1)로부터 읽도록 요청할 수 있다. 블록 1710에서, 도 1의 로드 밸런싱 데몬(145)은 도 9의 메모리 페이지(905)를 도 1의 저장 장치(120-2)에 쓰도록 요청할 수 있다. 마지막으로, 블록 1715에서, 도 1의 로드 밸런싱 데몬(145)은 도 9의 메모리 페이지(905)를 도 1의 저장 장치(120)에서 삭제하도록 요청할 수 있다. 블록 1715는 기술적으로 필요하지 않은데, 그 이유는 확장 메모리 내에서 페이지의 마이그레이션이 페이지에 대한 원래 메모리 주소가 해제될 수 있음을 의미하고, 이는 도 1의 저장 장치(120) 상의 페이지가 지워질 수 있음을 의미하기 때문이다.
도 12 내지 도 17을 참조하면, 본 개시내용의 일부 실시예가 도시되어 있다. 그러나 당업자는 블록의 순서를 변경하거나, 블록을 생략하거나, 도면에 도시되지 않은 링크를 포함함으로써 본 개시내용의 다른 실시예가 또한 가능하다는 것을 이해할 것이다. 순서도의 이러한 모든 변형은 명시적으로 설명되든 아니든 본 개시의 실시예로 간주된다.
본 개시의 실시예는 도 1의 솔리드 스테이트 드라이브(SSD)(120)에서 간접 메커니즘을 사용하여 핫 페이지(hot page)들을 감지하고 SSD가 확장 메모리에 사용될 때 페이지의 핫니스(hotness, 즉, 액세스의 빈번한 정도)를 기반으로 장치 시작 데이터 마이그레이션을 수행하는 새로운 메커니즘을 도입한다. 본 개시의 실시예들은 SSD를 사용할 때 세밀한 데이터 업데이트로 인해 미디어 마모가 가속화되는 경우의 내구성 문제를 완화할 수 있다.
실시예들에서 개시된 바와 같이, 도 1의 이기종 메모리 기계(105)에서 핫 페이지들은 부하를 분산시키고 더 나은 성능을 달성하기 위해 한 종류의 시스템 메모리에서 다른 종류의 시스템 메모리로 이동할 수 있다. 본 명세서의 실시예들에서, 비휘발성 메모리는 캐시-코히런트 상호 연결 프로토콜을 사용하여 시스템 메모리로 노출될 수 있다. 이러한 비휘발성 메모리 장치의 플래시 변환 계층(FTL)은 논리 페이지 업데이트의 수와 내부 논리 블록 주소(LBA)-물리 블록 주소(PBA) 매핑 업데이트의 수를 모니터링할 수 있다.
본 개시의 실시예들은 도 1의 SSD(120)에서 LBA-to-PBA 매핑 변화를 추적하여 업데이트 카운트를 셀 수 있다. 본 개시의 일부 실시예는 호스트 및 디바이스 모두에 의해 액세스될 수 있는 호스트-관리 장치 메모리(HDM)에 업데이트 카운트를 저장할 수 있다. 본 개시의 일부 실시예들은 각 페이지에 대한 쓰기 카운트를 기록하기 위해 HDM을 예약할 수 있다. 본 개시의 일부 실시예들은 도 1의 로드 밸런싱 데몬(145)이 HDM에서 업데이트 카운트를 확인함으로써 각 디바이스의 부하를 주기적으로 확인하는 것을 특징으로 할 수 있다. 본 개시의 일부 실시예들에서, 로드 밸런싱 데몬은 가장 바쁜 장치(가장 비지 상태의 장치)에서 호스트 측의 가장 유휴한 장치로 페이지 마이그레이션을 수행할 수 있다. 예를 들어, CXL.mem을 사용할 수 있다.
본 개시의 실시예들의 장점은 SSD, PCM(Phase-Change Memory) 및 쓰기 내구성이 제한된 기타 NVRAM(비휘발성 랜덤 액세스 메모리)과 같은 비휘발성 메모리의 수명 증가를 포함할 수 있다. 또한, 본 개시의 실시예들은 가비지 컬렉션 실행 횟수를 감소시킴으로써 SSD의 전반적인 성능을 향상시킬 수 있다.
본 개시의 실시예는 로드 밸런싱을 위한 페이지 마이그레이션을 포함할 수 있다. 본 개시의 일부 실시예들에서, 이 페이지 마이그레이션은 로드 밸런싱을 위해 비휘발성 메모리에서 다른 비휘발성 메모리로 페이지들을 마이그레이션할 수 있다. 본 개시의 일부 실시예에서, 가장 바쁜 디바이스(가장 비지 상태의 디바이스)들 및 가장 유휴한 디바이스들을 찾기 위해, 도 3의 FTL(335)은 특정 기간에 걸친 총 쓰기 카운트를 셀 수 있다.
본 발명의 실시예들은 CXL.mem을 통해 호스트 시스템에 공간을 노출시키는 CXL SSD에 대한 부하 분산을 위한 도 1의 기계(105)를 포함할 수 있다.
본 개시의 실시예들은 핫 페이지를 찾기 위해 LBA-PBA 매핑 업데이트의 수를 모니터링할 수 있는 도 3의 FTL(335)을 포함할 수 있다.
본 개시의 실시예들은 호스트와 디바이스 모두에서 접근할 수 있는 도 3의 HDM(330)에 매핑 업데이트 카운트를 저장하는 단계를 포함할 수 있다.
본 개시의 실시예들은 부하 분산을 위한 페이지 이동을 포함할 수 있으며, 도 3의 FTL(335)이 특정 기간의 총 쓰기 카운트를 업데이트하는 단계를 더 포함할 수 있다. 본 개시의 일부 실시예는 또한, 도 3의 로드 밸런싱 데몬(145)을 주기적으로 점검 및 리셋하는 단계를 포함할 수 있다. 또한, 본 개시내용의 일부 실시예는 가장 바쁜 장치(가장 비지 상태의 장치)에서 가장 유휴 장치로 마이그레이션되는 핫 페이지를 포함할 수 있다.
본 개시의 실시예는 로드 밸런싱 데몬이 이기종 메모리 시스템의 저장 장치에 대한 기록에 관한 정보를 결정하는 것을 허용한다. 로드 밸런싱 데몬은 저장 장치에 대한 총 쓰기 수를 나타내는 업데이트 카운트를 포함할 수 있는 이 정보를 기반으로 각 저장 장치에 대한 상대적인 쓰기 수를 기반으로 비지 상태인 저장 장치와 유휴 저장 장치를 선택할 수 있다. 로드 밸런싱 데몬은 또한 비지 상태인 저장 장치의 각 페이지에 대한 총 쓰기 수와 같은 다른 정보를 사용하여 유휴 저장 장치로 마이그레이션할 페이지를 하나 이상 선택할 수 있다. 로드 밸런싱 데몬은 비지 상태인 저장 장치에서 유휴 저장소로 마이그레이션된 페이지를 가질 수 있다. 그런 다음, 로드 밸런싱 데몬은 호스트 시스템의 정보를 업데이트하여 비지 상태인 저장 장치에서 유휴 저장 장치로 페이지 마이그레이션을 반영할 수 있다.
다음의 논의는 본 개시의 특정 측면이 구현될 수 있는 적절한 기계(machine)에 대한 간략하고 일반적인 설명을 제공하기 위한 것이다. 기계는 적어도 부분적으로, 키보드, 마우스 등과 같은 종래의 입력 장치로부터의 입력뿐만 아니라 다른 기계로부터 수신된 지시, 가상 현실(VR) 환경과의 상호작용, 생체 인식 피드백 또는 기타 입력 신호에 의해 제어될 수 있다. 여기서 사용되는 용어 "기계(machine)"는 단일 머신, 가상 머신 또는 통신할 수 있게 결합된 머신, 가상 머신 또는 함께 작동하는 디바이스의 시스템을 포괄하는 것을 의미한다. 예시적인 기계로는 개인용 컴퓨터, 워크스테이션, 서버, 휴대용 컴퓨터, 휴대용 장치, 전화기, 태블릿 등과 같은 컴퓨팅 장치뿐만 아니라 개인 또는 대중 교통과 같은 운송 장치, 예를 들어 자동차, 기차, 택시 등이 있다.
기계는 프로그램 가능 또는 비프로그래밍 논리 소자 또는 어레이, ASIC(Application Specific Integrated Circuits), 임베디드 컴퓨터, 스마트 카드 등과 같은 임베디드 컨트롤러를 포함할 수 있다. 기계는 네트워크 인터페이스, 모뎀 또는 기타 통신 커플링을 통해 하나 이상의 원격 컴퓨터에 대한 하나 이상의 연결을 사용할 수 있다. 기계는 인트라넷, 인터넷, 근거리 통신망, 광역 통신망 등과 같은 물리적 및/또는 논리적 통신망을 통해 상호 연결될 수 있다. 당업자는 네트워크 통신이 무선 주파수(RF), 위성, 마이크로파, 전기 전자 기술자 협회(IEEE) 802.11, Bluetooth®, 광학, 적외선, 케이블, 레이저 등을 포함한 다양한 유선 및/또는 무선 단거리 또는 장거리 반송파와 프로토콜을 이용할 수 있다는 것을 이해할 것이다.
본 발명의 실시예들은 기계에 의해 접근될 때 기계가 작업을 수행하거나 추상적 데이터 유형 또는 저수준 하드웨어 컨텍스트를 정의하는 결과를 초래하는 기능, 절차, 데이터 구조, 애플리케이션 프로그램 등을 포함하는 관련 데이터를 참조하거나 이와 연계하여 설명될 수 있다. 관련 데이터는 예를 들어 휘발성 및/또는 비휘발성 메모리, 예컨대 RAM, ROM 등에 저장되거나 하드 드라이브, 플로피 디스크, 광학 스토리지, 테이프, 플래시 메모리, 메모리 스틱, 디지털 비디오 디스크, 생물학적 스토리지 등을 포함한 다른 저장 장치 및 관련 저장 매체에 저장될 수 있다. 관련 데이터는 패킷, 직렬 데이터, 병렬 데이터, 전파 신호 등의 형태로 물리적 및/또는 논리적 네트워크를 포함하는 전송 환경을 통해 전달될 수 있으며, 압축 또는 암호화된 형식으로 사용될 수 있다. 관련 데이터는 분산 환경에서 사용될 수 있으며, 기계 접근을 위해 로컬 및/또는 원격으로 저장될 수 있다.
본 개시내용의 실시예는 하나 이상의 프로세서에 의해 실행가능한 명령을 포함하는 유형의 비일시적 기계-판독가능 매체를 포함할 수 있으며, 이 명령은 본 명세서에 기재된 바와 같은 본 개시내용의 요소를 수행하기 위한 명령을 포함한다.
위에서 설명된 방법의 다양한 동작은 다양한 하드웨어 및/또는 소프트웨어 구성요소(들), 회로 및/또는 모듈(들)과 같은 동작을 수행할 수 있는 임의의 적절한 수단에 의해 수행될 수 있다. 소프트웨어는 논리 기능을 구현하기 위한 실행 가능한 명령어들의 순서 있는 목록으로 구성될 수 있으며, 명령 실행 시스템, 기구 또는 장치(예: 싱글 코어 또는 멀티 코어 프로세서 또는 프로세서 포함 시스템)에 의해 또는 이와 관련하여 사용될 수 있도록 "프로세서 판독 가능한 매체"로 구현될 수 있다.
본 명세서에 개시된 실시예들과 관련하여 설명되는 방법 또는 알고리즘의 블록 또는 단계들 및 기능들은 하드웨어에 직접 구현될 수도 있고, 프로세서에 의해 실행되는 소프트웨어 모듈에 구현될 수도 있고, 둘의 조합으로 구현될 수도 있다. 소프트웨어로 구현되는 경우, 기능들은 하나 이상의 명령어 또는 코드로 유형적이고 일시적인 컴퓨터 판독 가능한 매체에 저장되거나 전송될 수 있다. 소프트웨어 모듈은 RAM(Random Access Memory), 플래시 메모리(ROM), EPROM(EPROM), 레지스터, 하드 디스크, 이동식 디스크, CD ROM 또는 당 업계에 알려진 다른 형태의 저장 매체에 상주할 수 있다.
도시된 실시예들을 참조하여 본 개시의 원칙들을 설명하고 도시한 실시예들은 이러한 원칙들을 벗어나지 않고 배열 및 세부적으로 변형될 수 있으며, 임의의 원하는 방식으로 결합될 수 있다는 것이 인식될 것이다. 그리고, 전술한 논의는 특정 실시예에 초점을 맞추었지만, 다른 구성들도 고려될 수 있다. 특히, 본 명세서에서 "공개의 일 실시예에 따른" 등의 표현을 사용함에도 불구하고, 이러한 문구는 일반적으로 실시예 가능성을 참조하기 위한 것이며, 특정 실시예 구성에 대한 개시를 한정하기 위한 것은 아니다. 본 명세서에 사용된 바와 같이, 이들 용어는 다른 실시예로 결합될 수 있는 동일하거나 상이한 실시예를 참조할 수 있다.
전술한 예시적인 실시예는 그 개시를 제한하는 것으로 해석되어서는 안 된다. 몇몇 실시예가 설명되었지만, 당업자는 본 개시내용의 신규한 교시 및 이점을 실질적으로 벗어나지 않으면서 이러한 실시예에 대한 많은 수정이 가능하다는 점을 쉽게 이해할 것이다. 따라서, 이러한 모든 수정은 청구범위에 정의된 본 개시내용의 범위 내에 포함되도록 의도된다.
본 개시내용의 실시예는 제한 없이 다음 실시예들로 확장될 수 있다:
실시예 1. 본 개시내용의 실시예는 다음을 포함하는 시스템을 포함한다:
프로세서;
상기 프로세서에 연결된 메모리;
상기 프로세서에 연결되고, 제1 저장 부분을 포함하고, 메모리 페이지를 포함하는 제1 저장 장치;
상기 프로세서에 연결되고, 제2 저장 부분을 포함하는 제2 저장 장치; 및
상기 제1 저장 장치의 제1 업데이트 카운트 및 상기 제2 저장 장치의 제2 업데이트 카운트에 적어도 부분적으로 기초하여, 상기 제1 저장 장치의 상기 제1 저장 부분으로부터 상기 제2 저장 장치의 상기 제2 저장 부분으로 상기 메모리 페이지를 마이그레이션하는 로드 밸런싱 데몬을 포함하고,
상기 제1 저장 부분은,
상기 메모리를 확장하는 것을 특징으로 하고,
상기 제2 저장 부분은,
상기 메모리를 확장하는 것을 특징으로 하는 시스템.
실시예 2. 본 개시의 제1 실시예의 시스템에 있어서,
상기 로드 밸런싱 데몬은 상기 메모리 페이지를 상기 제1 저장 장치의 상기 제1 저장 부분으로부터 상기 제2 저장 장치의 상기 제2 저장 부분으로 마이그레이션하기 위한 마이그레이션 로직을 포함한다.
실시예 3. 본 개시의 제1 실시예의 시스템에 있어서,
상기 제1 저장 부분 및 상기 제2 저장 부분은 캐시-코히어런트 상호 연결 프로토콜을 통해 메모리를 확장한다.
실시예 4. 본 개시의 제3 실시예의 시스템에 있어서,
상기 캐시-코히어런트 상호 연결 프로토콜은 CXL(Compute Express Link) 프로토콜을 포함한다.
실시예 5. 본 개시의 제3 실시예의 시스템에 있어서,
상기 메모리는 플래시 메모리, 동적 랜덤 액세스 메모리(DRAM), 정적 랜덤 액세스 메모리(SRAM), 영구 랜덤 액세스 메모리, 강유전성 랜덤 엑세스 메모리(FRAM) 또는 비휘발성 랜덤 액세스 메모리(NVRAM)중에서 선택된다.
실시예 6. 본 개시의 제3 실시예의 시스템에 있어서,
상기 제1 저장 장치는 제1 솔리드 스테이트 드라이브(SSD)를 포함하고,
상기 제2 저장 장치는 제2 SSD를 포함한다.
실시예 7. 본 개시의 제3 실시예의 시스템에 있어서,
상기 로드 밸런싱 데몬은 상기 프로세서에 의해 실행가능한 소프트웨어를 포함한다.
실시예 8. 본 개시의 제3 실시예의 시스템에 있어서,
상기 제1 저장 장치는 상기 제1 업데이트 카운트를 저장하기 위한 제1 호스트-관리 장치 메모리(HDM)를 포함하고,
상기 제2 저장 장치는 상기 제2 업데이트 카운트를 저장하기 위한 제2 HDM을 포함한다.
실시예 9. 본 개시의 제8 실시예의 시스템에 있어서,
상기 제1 업데이트 카운트는 캐시 불가능하다.
실시예 10. 본 개시의 제8 실시예의 시스템에 있어서,
상기 제1 저장 장치는 상기 제1 업데이트 카운트를 캐싱하기 위한 캐시를 포함하는 제2 프로세서를 포함하고,
상기 제2 프로세서는 상기 캐시 내의 상기 제1 업데이트 카운트와 상기 제1 HDM 간의 일관성을 유지하기 위해 캐시-코히어런트 상호 연결 프로토콜을 사용한다.
실시예 11. 본 개시의 제8 실시예의 시스템에 있어서,
상기 로드 밸런싱 데몬은 상기 제1 HDM으로부터 상기 제1 업데이트 카운트에 액세스하고 상기 제2 HDM으로부터 상기 제2 업데이트 카운트에 액세스하기 위한 액세스 로직을 포함한다.
실시예 12. 본 개시의 제8 실시예의 시스템에 있어서,
상기 로드 밸런싱 데몬은 상기 제1 HDM의 상기 제1 업데이트 카운트를 리셋하고 상기 제2 HDM의 상기 제2 업데이트 카운트를 리셋하기 위한 리셋 로직을 포함한다.
실시예 13. 본 개시의 제8 실시예의 시스템에 있어서,
상기 제1 HDM은 상기 메모리 페이지에 대한 쓰기 카운트를 더 저장한다.
실시예 14. 본 개시의 제13 실시예의 시스템에 있어서,
상기 로드 밸런싱 데몬은 상기 제1 HDM으로부터 상기 쓰기 카운트에 액세스하기 위한 액세스 로직을 포함한다.
실시예 15. 본 개시의 제3 실시예의 시스템에 있어서,
상기 로드 밸런싱 데몬은 상기 제1 업데이트 카운트에 대해 상기 제1 저장 장치를 폴링하고 상기 제2 업데이트 카운트에 대해 상기 제2 저장 장치를 폴링하는 폴러를 포함한다.
실시예 16. 본 개시의 제3 실시예의 시스템에 있어서,
상기 제1 저장 장치는 상기 로드 밸런싱 데몬을 인터럽트하여 상기 제1 업데이트 카운트를 제공하는 제1 인터럽트 로직을 포함하고,
상기 제2 저장 장치는 상기 제2 업데이트 카운트를 제공하기 위해 상기 로드 밸런싱 데몬을 인터럽트하는 제2 인터럽트 로직을 포함한다.
실시예 17. 본 개시의 제3 실시예의 시스템에 있어서,
상기 로드 밸런싱 데몬은 상기 제2 업데이트 카운트를 초과하는 상기 제1 업데이트 카운트에 적어도 부분적으로 기초하여, 상기 제1 저장 장치의 상기 제1 저장 부분으로부터 상기 제2 저장 장치의 상기 제2 저장 부분으로 상기 메모리 페이지를 마이그레이션하도록 구성된다.
실시예 18. 본 개시의 제17 실시예의 시스템에 있어서,
상기 로드 밸런싱 데몬은 임계값을 초과하는 상기 제1 업데이트 카운트와 상기 제2 업데이트 카운트 간의 차이에 적어도 부분적으로 기초하여, 상기 제1 저장 장치의 상기 제1 저장 부분으로부터 상기 제2 저장 장치의 상기 제2 저장 부분으로 상기 메모리 페이지를 마이그레이션하도록 구성된다.
실시예 19. 본 개시의 제18 실시예의 시스템에 있어서,
상기 메모리 페이지는 쓰기 카운트와 연관되고,
상기 제1 저장 부분은 제2 쓰기 카운트와 연관된 제2 메모리 페이지를 더 저장하고,
상기 로드 밸런싱 데몬은,
임계값을 초과하는 상기 제1 업데이트 카운트와 상기 제2 업데이트 카운트의 차이 및 상기 제2 쓰기 카운트보다 높은 상기 쓰기 카운트에 적어도 부분적으로 기초하여,
상기 메모리 페이지를 상기 제1 저장 장치의 상기 제1 저장 부분에서 상기 제2 저장 장치의 상기 제2 저장 부분으로 마이그레이션하도록 구성된다
실시예 20. 본 개시의 제3 실시예의 시스템에 있어서,
상기 저장 디바이스는 상기 제1 저장 디바이스에 기록되는 새로운 데이터에 적어도 부분적으로 기초하여 상기 제1 업데이트 카운트를 증가시키는 증분 로직을 포함한다.
실시예 21. 본 개시의 제20 실시예의 시스템에 있어서,
상기 증분 로직은 상기 메모리 페이지에 기록되는 새로운 데이터에 적어도 부분적으로 기초하여 상기 메모리 페이지와 연관된 쓰기 카운트를 증가시키도록 구성된다.
실시예 22. 본 개시의 제3 실시예의 시스템에 있어서,
상기 제1 저장 부분은 제2 메모리 페이지를 포함하고,
상기 로드 밸런싱 데몬은, 상기 제1 저장 장치의 상기 제1 업데이트 카운트 및 임계값을 초과하는 상기 제2 메모리 페이지와 연관된 제2 쓰기 카운트에 적어도 부분적으로 기초하여, 상기 제1 저장 장치의 상기 제1 저장 부분에서 상기 메모리로 상기 제2 메모리 페이지를 마이그레이션하도록 구성된다.
실시예 23. 본 개시의 제3 실시예의 시스템에 있어서,
상기 메모리는 제2 메모리 페이지 및 상기 제2 메모리 페이지에 대한 제2 쓰기 카운트를 저장한다.
실시예 24. 본 개시의 제23 실시예의 시스템에 있어서,
상기 로드 밸런싱 데몬은 상기 제2 쓰기 카운트가 임계값보다 작은 것에 적어도 부분적으로 기초하여, 상기 메모리로부터 상기 제2 저장 장치의 상기 제2 저장 부분으로 상기 제2 메모리 페이지를 마이그레이션하도록 구성된다.
실시예 25. 본 개시의 제3 실시예의 시스템에 있어서,
상기 제1 저장 장치는 제3 저장 부분을 더 포함하고, 상기 제3 저장 부분은 상기 프로세서 상에서 실행되는 애플리케이션에 의해 액세스 가능하며,
상기 제2 저장 장치는 제4 저장 부분을 더 포함하고, 상기 제4 저장 부분은 상기 프로세서 상에서 실행되는 상기 애플리케이션에 의해 액세스 가능하다.
실시예 26. 본 개시의 저장 장치에 있어서,
상기 저장 장치는,
메모리 페이지를 포함하는 제1 저장 부분을 포함하는 저장부;
상기 저장 장치로 전송된 로드 요청 또는 저장 요청 중 적어도 하나를 처리하는 컨트롤러; 및
데이터가 상기 저장부에 기록된 제1 횟수를 식별하는 업데이트 카운트 및 데이터가 상기 메모리 페이지에 기록된 제2 횟수를 식별하는 쓰기 카운트를 관리하기 위한 증분 로직을 포함하고,
상기 저장부는 메모리를 확장한다.
실시예 27. 본 개시의 제26 실시예의 저장 장치에 있어서,
상기 저장 장치는 캐시-코히어런트 상호 연결 프로토콜을 지원한다.
실시예 28. 본 개시의 제27 실시예의 저장 장치에 있어서,
캐시-코히어런트 상호 연결 프로토콜은 CXL(Compute Express Link) 프로토콜을 포함한다.
실시예 29. 본 개시의 제26 실시예의 저장 장치에 있어서,
상기 저장 장치는 SSD(Solid State Drive)를 포함한다.
실시예 30. 본 개시의 제29 실시예의 저장 장치에 있어서,
상기 SSD는 증분 로직을 포함하는 플래시 변환 계층(FTL)을 포함한다.
실시예 31. 본 개시의 제30 실시예의 저장 장치에 있어서,
상기 증분 로직은 상기 메모리 페이지의 가비지 컬렉션을 무시하도록 구성된다.
실시예 32. 본 개시의 제30 실시예의 저장 장치에 있어서,
상기 증분 로직은 상기 메모리 페이지의 웨어 레벨링을 무시하도록 구성된다.
실시예 33. 본 개시의 제26 실시예의 저장 장치에 있어서,
상기 업데이트 카운트와 상기 쓰기 카운트를 저장하기 위한 HDM을 더 포함한다.
실시예 34. 본 개시의 제33 실시예의 저장 장치에 있어서,
상기 업데이트 카운트 및 상기 쓰기 카운트는 캐시 불가능하다.
실시예 35. 본 개시의 제33 실시예의 저장 장치에 있어서,
상기 제1 저장 장치는 상기 업데이트 카운트를 캐싱하기 위한 캐시를 포함하는 프로세서를 포함하고,
상기 프로세서는 캐시의 상기 업데이트 카운트와 상기 HDM 사이의 일관성을 유지하는 캐시-코히어런트 상호 연결 프로토콜을 사용한다.
실시예 36. 본 개시의 제26 실시예의 저장 장치에 있어서,
상기 저장 장치는 프로세서 상에서 실행되는 애플리케이션에 의해 액세스 가능한 제2 저장 부분을 더 포함한다.
실시예 37. 본 개시의 제26 실시예의 저장 장치에 있어서,
상기 저장 장치는 상기 업데이트 카운트를 제공하기 위해 로드 밸런싱 데몬을 인터럽트 하는 인터럽트 로직을 더 포함한다.
실시예 38. 본 개시의 방법은, 다음을 포함한다.
프로세서 상에서 실행되는 로드 밸런싱 데몬에 의해 제1 저장 장치를 식별하는 단계;
상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 제2 저장 장치를 식별하는 단계;
상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 상기 제1 저장 장치에 저장된 메모리 페이지를 식별하는 단계; 및
상기 메모리 페이지를 상기 제1 저장 장치에서 상기 제2 저장 장치로 마이그레이션하는 단계를 포함하고,
상기 제1 저장 장치 및 상기 제2 저장 장치는 메모리를 확장하는 것을 특징으로 하는 방법.
실시예 39. 본 개시의 제38 실시예의 방법에 있어서,
상기 제1 저장 장치 및 상기 제2 저장 장치는 캐시-코히어런트 상호접속 프로토콜을 통해 메모리를 확장한다.
실시예 40. 본 개시의 제39 실시예의 방법에 있어서,
상기 캐시-코히어런트 상호접속 프로토콜은 CXL(Compute Express Link) 프로토콜을 포함한다.
실시예 41. 본 개시의 제39 실시예의 방법에 있어서,
상기 제1 저장 장치는 제1 솔리드 스테이트 드라이브(SSD)를 포함하고,
상기 제2 저장 장치는 제2 SSD를 포함한다.
실시예 42. 본 개시의 제39 실시예의 방법에 있어서,
상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 상기 제1 저장 장치를 식별하는 단계는,
상기 제1 저장 장치의 제1 업데이트 카운트를 결정하는 단계를 포함하고,
상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 상기 제2 저장 장치를 식별하는 단계는,
상기 제2 저장 장치의 제2 업데이트 카운트를 결정하는 단계를 포함한다.
실시예 43. 본 개시의 제42 실시예의 방법에 있어서,
상기 제1 저장 장치의 상기 제1 업데이트 카운트를 결정하는 단계는,
상기 제1 저장 장치의 제1 HDM으로부터 상기 제1 업데이트 카운트에 액세스하는 것을 포함하고,
상기 제2 저장 장치의 상기 제2 업데이트 카운트를 결정하는 단계는,
상기 제2 저장 장치의 제2 HDM으로부터 상기 제2 업데이트 카운트에 액세스하는 단계를 포함한다.
실시예 44. 본 개시의 제42 실시예의 방법에 있어서,
상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 상기 제1 저장 장치를 식별하는 단계는,
상기 제1 업데이트 카운트가 상기 제2 업데이트 카운트보다 크다고 결정하는 단계를 더 포함하고,
상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 상기 제2 저장 장치를 식별하는 단계는,
상기 제2 업데이트 카운트가 상기 제1 업데이트 카운트보다 작다고 결정하는 단계를 포함한다.
실시예 45. 본 개시의 제42 실시예의 방법에 있어서,
상기 제1 저장 장치의 상기 제1 업데이트 카운트를 결정하는 단계는,
상기 제1 업데이트 카운트에 대해 상기 제1 저장 장치를 폴링하는 단계; 및
상기 제1 저장 장치로부터 상기 제1 업데이트 카운트를 수신하는 단계를 포함하고,
상기 제2 저장 장치의 상기 제2 업데이트 카운트를 결정하는 단계는,
상기 제2 업데이트 카운트에 대해 상기 제2 저장 장치를 폴링하는 단계; 및
상기 제2 저장 장치로부터 상기 제2 업데이트 카운트를 수신하는 단계를 포함한다.
실시예 46. 본 개시의 제42 실시예의 방법에 있어서,
상기 제1 저장 장치에서 저장 요청을 수신하는 단계; 및
저장 요청을 수신하는 것에 적어도 부분적으로 기초하여 상기 제1 업데이트 카운트를 업데이트하는 단계를 더 포함한다.
실시예 47. 본 개시의 제46 실시예의 방법에 있어서,
상기 제1 저장 장치에서 상기 저장 요청을 수신하는 단계는,
상기 제1 저장 장치에서 상기 메모리 페이지를 업데이트하라는 상기 저장 요청을 수신하는 단계를 포함하고,
상기 제1 저장 장치 상의 상기 메모리 페이지와 연관된 쓰기 카운트를 업데이트하는 단계를 더 포함한다.
실시예 48. 본 개시의 제42 실시예의 방법에 있어서,
상기 로드 밸런싱 데몬이 상기 제1 저장 장치의 상기 제1 업데이트 카운트를 리셋하는 단계; 및
상기 로드 밸런싱 데몬이 상기 제2 저장 장치의 상기 제2 업데이트 카운트를 리셋하는 단계를 더 포함한다.
실시예 49. 본 개시의 제42 실시예의 방법에 있어서,
상기 로드 밸런싱 데몬에 의해 상기 제1 저장 디바이스 상의 상기 메모리 페이지와 연관된 상기 쓰기 카운트를 리셋하는 단계를 더 포함한다.
실시예 50. 본 개시의 제39 실시예의 방법에 있어서,
상기 프로세서에서 실행되는 상기 로드 밸런싱 데몬에 의해 상기 제1 저장 장치에 저장된 메모리 페이지를 식별하는 단계는,
상기 메모리 페이지에 대한 쓰기 카운트에 적어도 부분적으로 기초하여, 상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 상기 제1 저장 장치에 저장된 상기 메모리 페이지를 식별하는 단계를 포함한다.
실시예 51. 본 개시의 제50 실시예의 방법에 있어서,
상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 상기 제1 저장 장치 상에 저장된 상기 메모리 페이지를 식별하는 단계는,
상기 메모리 페이지에 대한 상기 쓰기 카운트를 결정하는 단계;
상기 제1 저장 장치에 저장된 제2 메모리 페이지에 대한 제2 쓰기 카운트를 결정하는 단계; 및
상기 제2 쓰기 카운트보다 큰 상기 쓰기 카운트에 적어도 부분적으로 기초하여 메모리 페이지를 식별하는 단계를 더 포함한다.
실시예 52. 본 개시의 제51 실시예의 방법에 있어서,
상기 메모리 페이지에 대한 상기 쓰기 카운트를 결정하는 단계는,
상기 저장 장치의 HDM으로부터 상기 쓰기 카운트에 액세스하는 것을 포함하고,
상기 제1 저장 장치에 저장된 상기 제2 메모리 페이지에 대한 상기 제2 쓰기 카운트를 결정하는 단계는,
상기 저장 장치의 상기 HDM으로부터 상기 제2 쓰기 카운트에 액세스하는 단계를 포함한다.
실시예 53. 본 개시의 제51 실시예의 방법에 있어서,
상기 메모리 페이지에 대한 상기 쓰기 카운트를 결정하는 단계는,
상기 쓰기 카운트에 대해 상기 제1 저장 장치를 폴링하는 단계; 및
상기 제1 저장 장치로부터 상기 쓰기 카운트를 수신하는 단계를 포함하고,
상기 제1 저장 장치에 저장된 상기 제2 메모리 페이지에 대한 상기 제2 쓰기 카운트를 결정하는 단계는,
상기 제2 쓰기 카운트에 대해 상기 제1 저장 장치를 폴링하는 단계; 및
상기 제1 저장 장치로부터 상기 제2 쓰기 카운트를 수신하는 단계를 포함한다.
실시예 54. 본 개시의 제53 실시예의 방법에 있어서,
상기 제1 저장 장치로부터 상기 쓰기 카운트를 수신하는 단계는,
상기 제1 저장 장치로부터 상기 쓰기 카운트를 포함하는 제1 인터럽트를 수신하는 단계를 포함하고,
상기 제1 저장 장치로부터 상기 제2 쓰기 카운트를 수신하는 단계는,
상기 제1 저장 장치로부터 상기 제2 인터럽트를 수신하는 단계를 포함하고,
상기 제2 인터럽트는 상기 제2 쓰기 카운트를 포함한다.
실시예 55. 본 개시의 제39 실시예의 방법에 있어서,
상기 메모리 페이지를 상기 제1 저장 장치로부터 상기 제2 저장 장치로 마이그레이션하는 단계는,
상기 메모리 페이지를 상기 제1 저장 장치로부터 상기 메모리로 마이그레이션하는 단계를 포함한다.
실시예 56. 본 개시의 제39 실시예의 방법에 있어서,
상기 메모리 페이지를 상기 제1 저장 장치에서 상기 제2 저장 장치로 마이그레이션하는 단계는,
상기 메모리 페이지를 상기 메모리에서 상기 제2 저장 장치로 마이그레이션하는 단계를 포함한다.
실시예 57. 본 개시의 제39 실시예의 방법에 있어서,
상기 메모리 페이지를 상기 제1 저장 디바이스로부터 상기 제2 저장 디바이스로 마이그레이션하는 단계는,
상기 제1 저장 장치로부터 상기 메모리 페이지를 읽는 단계; 및
상기 메모리 페이지를 상기 제2 저장 장치에 쓰는 단계를 포함한다.
실시예 58. 본 개시의 제57 실시예의 방법에 있어서,
상기 메모리 페이지를 상기 제1 저장 장치로부터 상기 제2 저장 장치로 마이그레이션하는 단계는,
상기 제1 저장 장치부터 상기 메모리 페이지를 소거하는 단계를 더 포함한다.
실시예 59. 본 개시의 제39 실시예의 방법에 있어서,
상기 메모리 페이지를 상기 제1 저장 장치로부터 상기 제2 저장 장치로 마이그레이션하는 단계는,
상기 제2 저장 장치로의 상기 페이지의 마이그레이션에 적어도 부분적으로 기초하여 상기 페이지 테이블을 업데이트하는 단계를 포함한다.
실시예 60. 본 개시의 제39 실시예의 방법에 있어서,
상기 제1 저장 장치는 상기 메모리 페이지를 포함하는 상기 제1 저장 부분을 포함한다.
실시예 61. 본 개시의 제60 실시예의 방법에 있어서,
상기 제1 저장 장치는 상기 제2 저장 부분을 더 포함하고,
상기 제2 저장 부분은 상기 프로세서 상에서 실행되는 애플리케이션에 의해 액세스 가능하다.
실시예 62. 본 개시의 방법은, 다음을 포함한다.
저장 장치에서 저장 요청을 수신하는 단계; 및
상기 저장 요청을 수신하는 것에 적어도 부분적으로 기초하여, 상기 저장 장치에 대한 업데이트 카운트를 업데이트하는 단계.
실시예 63. 본 개시의 제62 실시예의 방법에 있어서,
상기 저장 장치에서 상기 저장 요청을 수신하는 단계는 상기 저장 장치에서 상기 메모리 페이지를 업데이트하라는 상기 저장 요청을 수신하는 단계를 포함하고,
상기 방법은,
상기 저장 장치상의 상기 메모리 페이지와 연관된 상기 쓰기 카운트를 업데이트하는 단계를 더 포함한다.
실시예 64. 본 개시의 제62 실시예의 방법에 있어서,
상기 업데이트 카운트에 대한 로드 밸런싱 데몬으로부터 상기 저장 장치에서 폴을 수신하는 단계; 및
상기 업데이트 카운트를 상기 저장 장치에서 상기 로드 밸런싱 데몬으로 전송하는 단계를 더 포함한다.
실시예 65. 본 개시의 제64 실시예의 방법에 있어서,
상기 저장 장치로부터 상기 로드 밸런싱 데몬으로 상기 업데이트 카운트를 전송하는 단계는,
상기 업데이트 카운트를 포함하는 인터럽트를 상기 저장 장치로부터 상기 로드 밸런싱 데몬으로 전송하는 단계를 포함한다.
실시예 66. 본 개시의 제62 실시예의 방법에 있어서,
상기 쓰기 카운트에 대한 상기 로드 밸런싱 데몬으로부터 상기 저장 장치에서 폴을 수신하는 단계; 및
상기 쓰기 카운트를 상기 저장 장치에서 상기 로드 밸런싱 데몬으로 보내는 단계를 더 포함한다.
실시예 67. 본 개시의 제66 실시예의 방법에 있어서,
상기 저장 장치로부터 상기 로드 밸런싱 데몬으로 상기 쓰기 카운트를 전송하는 단계는,
상기 쓰기 카운트를 포함하는 인터럽트를 상기 저장 장치로부터 상기 로드 밸런싱 데몬으로 전송하는 단계를 포함한다.
실시예 68. 본 개시의 제62 실시예의 방법에 있어서,
상기 업데이트 카운트를 리셋하라는 요청을 상기 저장 장치에서 수신하는 단계; 및
상기 저장 장치의 업데이트 카운트를 리셋하는 단계를 더 포함한다.
실시예 69. 본 개시의 제62 실시예의 방법에 있어서,
상기 쓰기 카운트를 리셋하라는 요청을 상기 저장 장치에서 수신하는 단계; 및
상기 저장 장치의 쓰기 카운트를 리셋하는 단계를 더 포함한다.
실시예 70. 본 개시의 제62 실시예의 방법에 있어서,
상기 제1 저장 디바이스는 상기 메모리 페이지를 포함하는 제1 저장 부분을 포함한다.
실시예 71. 본 개시의 제70 실시예의 방법에 있어서,
상기 제1 저장 장치는 상기 제2 저장 부분을 더 포함하고, 상기 제2 저장 부분은 상기 프로세서에서 실행되는 애플리케이션에 의해 액세스 가능하다.
실시예 72. 본 개시내용의 실시예는,
비일시적 저장 매체를 포함하는 물품을 포함하고,
상기 비일시적 저장 매체는 기계에 의해 실행될 때 다음과 같은 결과를 가져올 수 있는 명령어들을 저장한다.
프로세서 상에서 실행되는 로드 밸런싱 데몬에 의해 제1 저장 장치를 식별하는 단계;
상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 제2 저장 장치를 식별하는 단계;
상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 상기 제1 저장 장치에 저장된 메모리 페이지를 식별하는 단계; 및
상기 제1 저장 장치에서 상기 제2 저장 장치로 상기 메모리 페이지를 마이그레이션하는 단계.
실시예 73. 본 개시의 제72 실시예의 물품에 있어서,
상기 제1 저장 장치 및 상기 제2 저장 장치는 캐시-코히어런트 상호 연결 프로토콜을 통해 메모리를 확장한다.
실시예 74. 본 개시의 제73 실시예의 물품에 있어서,
상기 캐시-코히어런트 상호접속 프로토콜은 CXL(Compute Express Link) 프로토콜을 포함한다.
실시예 75. 본 개시의 제73 실시예의 물품에 있어서,
상기 제1 저장 장치는 상기 제1 솔리드 스테이트 드라이브(SSD)를 포함하고,
상기 제2 저장 장치는 제2 SSD를 포함한다.
실시예 76. 본 개시의 제73 실시예의 물품에 있어서,
상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 상기 제1 저장 장치를 식별하는 단계는,
상기 제1 저장 장치의 상기 제1 업데이트 카운트를 결정하는 단계를 포함하고,
상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 상기 제2 저장 장치를 식별하는 단계는,
상기 제2 저장 장치의 상기 제2 업데이트 카운트를 결정하는 단계를 포함한다.
실시예 77. 본 개시의 제76 실시예의 물품에 있어서,
상기 제1 저장 장치의 상기 제1 업데이트 카운트를 결정하는 단계는,
상기 제1 저장 장치의 제1 HDM으로부터 상기 제1 업데이트 카운트에 액세스하는 것을 포함하고,
상기 제2 저장 장치의 상기 제2 업데이트 카운트를 결정하는 단계는,
상기 제2 저장 장치의 제2 HDM으로부터 상기 제2 업데이트 카운트에 액세스하는 단계를 포함한다.
실시예 78. 본 개시의 제76 실시예의 물품에 있어서,
상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 상기 제1 저장 장치를 식별하는 단계는,
상기 제1 업데이트 카운트가 상기 제2 업데이트 카운트보다 크다고 결정하는 단계를 포함하고,
상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 상기 제2 저장 장치를 식별하는 단계는,
상기 제2 업데이트 카운트가 상기 제1 업데이트 카운트보다 작다고 결정하는 단계를 포함한다.
실시예 79. 본 개시의 제76 실시예의 물품에 있어서,
상기 제1 저장 장치의 상기 제1 업데이트 카운트를 결정하는 단계는:
상기 제1 업데이트 카운트에 대해 상기 제1 저장 장치를 폴링하는 단계; 및
상기 제1 저장 장치로부터 상기 제1 업데이트 카운트를 수신하는 단계를 포함하고,
상기 제2 저장 장치의 상기 제2 업데이트 카운트를 결정하는 단계는,
상기 제2 업데이트 카운트에 대해 상기 제2 저장 장치를 폴링하는 단계; 및
상기 제2 저장 장치로부터 상기 제2 업데이트 카운트를 수신하는 단계를 포함한다.
실시예 80. 본 개시의 제76 실시예의 물품에 있어서,
상기 비일시적 저장 매체는 기계에 의해 실행될 때 다음과 같은 결과를 가져오는 추가 명령어들을 저장한다.
상기 제1 저장 장치에서 저장 요청을 수신하는 단계; 및
상기 저장 요청을 수신하는 것에 적어도 부분적으로 기초하여 상기 제1 업데이트 카운트를 업데이트하는 단계를 포함한다.
실시예 81. 본 개시의 제80 실시예의 물품에 있어서,
상기 제1 저장 장치에서 상기 저장 요청을 수신하는 단계는,
상기 제1 저장 장치에서 상기 메모리 페이지를 업데이트하라는 저장 요청을 수신하는 단계를 포함하고,
상기 비일시적 저장 매체는 상기 기계에 의해 실행될 때, 상기 제1 저장 장치의 상기 메모리 페이지와 연관된 상기 쓰기 카운트를 업데이트하는 추가 명령어들을 저장한다.
실시예 82. 본 개시의 제76 실시예의 물품에 있어서,
상기 비일시적 저장 매체는 기계에 의해 실행될 때 다음과 같은 결과를 초래하는 추가 명령어들을 저장한다:
상기 로드 밸런싱 데몬이 상기 제1 저장 장치의 상기 제1 업데이트 카운트를 리셋하는 단계; 그리고
상기 로드 밸런싱 데몬이 상기 제2 저장 장치의 상기 제2 업데이트 카운트를 리셋하는 단계.
실시예 83. 본 개시의 제76 실시예의 물품에 있어서,
상기 비일시적 저장 매체는 상기 기계에 의해 실행될 때, 상기 로드 밸런싱 데몬에 의해 상기 제1 저장 장치의 상기 메모리 페이지와 관련된 쓰기 카운트가 리셋되는 추가 명령어들을 저장한다.
실시예 84. 본 개시의 제73 실시예의 물품에 있어서,
상기 프로세서에서 실행되는 상기 로드 밸런싱 데몬에 의해 상기 제1 저장 장치에 저장된 상기 메모리 페이지를 식별하는 단계는,
상기 메모리 페이지에 대한 쓰기 카운트에 적어도 부분적으로 기초하여, 상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 상기 제1 저장 장치에 저장된 상기 메모리 페이지를 식별하는 단계를 포함한다.
실시예 85. 본 개시의 제84 실시예의 물품에 있어서,
상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 상기 제1 저장 디바이스 상에 저장된 상기 메모리 페이지를 식별하는 단계는,
상기 메모리 페이지에 대한 상기 쓰기 카운트를 결정하는 단계,
상기 제1 저장 장치에 저장된 제2 메모리 페이지에 대한 제2 쓰기 카운트를 결정하는 단계; 및
상기 제2 쓰기 카운트보다 큰 상기 쓰기 카운트에 적어도 부분적으로 기초하여, 상기 메모리 페이지를 식별하는 단계를 포함한다.
실시예 86. 본 개시의 제85 실시예의 물품에 있어서,
상기 메모리 페이지에 대한 상기 쓰기 카운트를 결정하는 단계는,
상기 저장 장치의 HDM으로부터 상기 쓰기 카운트에 액세스하는 단계를 포함하고,
상기 제1 저장 장치에 저장된 상기 제2 메모리 페이지에 대한 상기 제2 쓰기 카운트를 결정하는 단계는,
상기 저장 장치의 상기 HDM으로부터 상기 제2 쓰기 카운트에 액세스하는 단계를 포함한다.
실시예 87. 본 개시의 제85 실시예의 물품에 있어서,
상기 메모리 페이지에 대한 상기 쓰기 카운트를 결정하는 단계는,
상기 쓰기 카운트에 대해 상기 제1 저장 장치를 폴링하는 단계; 및
상기 제1 저장 장치로부터 쓰기 카운트를 수신하는 단계를 포함하고,
상기 제1 저장 장치에 저장된 상기 제2 메모리 페이지에 대한 상기 제2 쓰기 카운트를 결정하는 단계는,
상기 제2 쓰기 카운트에 대해 상기 제1 저장 장치를 폴링하는 단계; 및
상기 제1 저장 장치로부터 상기 제2 쓰기 카운트를 수신하는 단계를 포함한다.
실시예 88. 본 개시의 제87 실시예의 물품에 있어서,
상기 제1 저장 장치로부터 상기 쓰기 카운트를 수신하는 단계는,
상기 제1 저장 장치로부터 상기 쓰기 카운트를 포함하는 제1 인터럽트를 수신하는 단계; 그리고
상기 제1 저장 디바이스로부터 상기 제2 쓰기 카운트를 수신하는 단계는,
상기 제1 저장 디바이스로부터 상기 제2 쓰기 카운트를 포함하는 제2 인터럽트를 수신하는 단계를 포함한다.
실시예 89. 본 개시의 제73 실시예의 물품에 있어서,
상기 메모리 페이지를 상기 제1 저장 장치로부터 상기 제2 저장 장치로 마이그레이션하는 단계는,
상기 메모리 페이지를 상기 제1 저장 장치로부터 상기 메모리로 마이그레이션하는 단계를 포함한다.
실시예 90. 본 개시의 제73 실시예의 물품에 있어서,
상기 메모리 페이지를 상기 제1 저장 장치에서 상기 제2 저장 장치로 마이그레이션하는 단계는,
상기 메모리 페이지를 상기 메모리에서 상기 제2 저장 장치로 마이그레이션하는 단계를 포함한다.
실시예 91. 본 개시의 제73 실시예의 물품에 있어서,
상기 메모리 페이지를 상기 제1 저장 장치로부터 상기 제2 저장 장치로 마이그레이션하는 단계는,
상기 제1 저장 장치로부터 상기 메모리 페이지를 읽는 단계; 및
상기 메모리 페이지를 상기 제2 저장 장치에 쓰는 단계를 포함한다.
실시예 92. 본 개시의 제91 실시예의 물품에 있어서,
상기 메모리 페이지를 상기 제1 저장 디바이스로부터 상기 제2 저장 디바이스로 마이그레이션하는 단계는,
상기 제1 저장 장치로부터 상기 메모리 페이지를 소거하는 단계를 더 포함한다.
실시예 93. 본 개시의 제73 실시예의 물품에 있어서,
상기 메모리 페이지를 상기 제1 저장 장치로부터 상기 제2 저장 장치로 마이그레이션하는 단계는,
상기 제2 저장 장치로의 상기 페이지의 마이그레이션에 적어도 부분적으로 기초하여 상기 페이지 테이블을 업데이트하는 단계를 포함한다.
실시예 94. 본 개시의 제73 실시예의 물품에 있어서,
상기 제1 저장 디바이스는 상기 메모리 페이지를 포함하는 제1 저장 부분을 포함한다.
실시예 95. 본 개시의 제94 실시예의 물품에 있어서,
상기 제1 저장 장치는 제2 저장 부분을 더 포함하고,
상기 제2 저장 부분은 상기 프로세서 상에서 실행되는 애플리케이션에 의해 액세스 가능하다.
실시예 96. 본 개시의 실시예는 비일시적 저장 매체를 포함하는 물품을 포함하고,
상기 비일시적 저장 매체는 기계에 의해 실행될 때 다음의 결과를 가져오는 명령어들을 저장한다.
저장 장치에서 저장 요청을 수신하는 단계; 및
상기 저장 요청을 수신하는 것에 적어도 부분적으로 기초하여, 상기 저장 장치에 대한 업데이트 카운트를 업데이트하는 단계를 포함한다.
실시예 97. 본 개시의 제96 실시예의 물품에 있어서,
상기 저장 장치에서 상기 저장 요청을 수신하는 단계는,
상기 저장 장치에서 상기 메모리 페이지를 업데이트하라는상기 저장 요청을 수신하는 단계를 포함하고,
상기 비일시적 저장 매체는,
상기 기계에 의해 실행될 때, 상기 저장 장치의 상기 메모리 페이지와 연관된 쓰기 카운트를 업데이트하는 추가 명령어들을 저장한다.
실시예 98. 본 개시의 제96 실시예의 물품에 있어서,
상기 비일시적 저장 매체는,
상기 기계에 의해 실행될 때 다음의 결과를 가져오는 추가 명령어들을 저장한다
상기 업데이트 카운트에 대한 로드 밸런싱 데몬으로부터 상기 저장 장치에서 폴을 수신하는 단계; 및
상기 업데이트 카운트를 상기 저장 장치에서 상기 로드 밸런싱 데몬으로 전송하는 단계.
실시예 99. 본 개시의 제98 실시예의 물품에 있어서,
상기 저장 장치로부터 상기 로드 밸런싱 데몬으로 상기 업데이트 카운트를 전송하는 단계는,
인터럽트를 상기 저장 장치로부터 상기 로드 밸런싱 데몬으로 전송하는 단계를 포함하고,
상기 인터럽트는 상기 업데이트 카운트를 포함한다.
실시예 100. 본 개시의 제96 실시예의 물품에 있어서,
상기 비일시적 저장 매체는 상기 기계에 의해 실행될 때 다음의 결과를 가져오는 추가 명령어들을 저장한다.
쓰기 카운트에 대한 로드 밸런싱 데몬으로부터 상기 저장 장치에서 폴을 수신하는 단계; 및
상기 쓰기 카운트를 상기 저장 장치에서 상기 로드 밸런싱 데몬으로 보내는 단계.
실시예 101. 본 개시의 제100 실시예의 물품에 있어서,
상기 저장 장치로부터 상기 로드 밸런싱 데몬으로 상기 쓰기 카운트를 전송하는 단계는,
인터럽트를 상기 저장 장치로부터 상기 로드 밸런싱 데몬으로 전송하는 단계를 포함하고,
상기 인터럽트는 쓰기 카운트를 포함한다.
실시예 102. 본 개시의 제96 실시예의 물품에 있어서,
상기 비일시적 저장 매체는 상기 기계에 의해 실행될 때 다음의 결과를 가져오는 추가 명령어들을 저장한다.
상기 업데이트 카운트를 리셋하라는 요청을 상기 저장 장치에서 수신하는 단계; 및
상기 저장 장치의 업데이트 카운트를 리셋하는 단계.
실시예 103. 본 개시의 제96 실시예의 물품에 있어서,
상기 비일시적 저장 매체는 상기 기계에 의해 실행될 때 다음의 결과를 가져오는 추가 명령어들을 저장한다.
쓰기 카운트를 리셋하라는 요청을 상기 저장 장치에서 수신하는 단계; 및
상기 저장 장치의 상기 쓰기 카운트를 리셋하는 단계.
실시예 104. 본 개시의 제96 실시예의 물품에 있어서,
상기 제1 저장 장치는, 상기 메모리 페이지를 포함하는 제1 저장 부분을 포함한다.
실시예 105. 본 개시의 제104 실시예의 물품에 있어서,
상기 제1 저장 장치는 제2 저장 부분을 더 포함하고,
상기 제2 저장 부분은 상기 프로세서 상에서 실행되는 애플리케이션에 의해 액세스 가능하다.
결과적으로, 본 명세서에 설명된 실시예들에 대한 광범위한 순열을 고려할 때, 이러한 상세한 설명 및 첨부 자료는 단지 예시적인 것일 뿐이며, 본 개시의 범위를 제한하는 것으로 받아들여져서는 안 된다. 따라서, 본 개시내용으로 청구되는 것은 다음 청구범위 및 그에 상응하는 범위 및 기술적 사상 내에서 올 수 있는 모든 수정이다.

Claims (20)

  1. 프로세서;
    상기 프로세서에 연결된 메모리;
    상기 프로세서에 연결되고, 상기 메모리를 확장하는 제1 저장 부분을 포함하는 제1 저장 장치;
    상기 프로세서에 연결되고, 상기 메모리를 확장하는 제2 저장 부분을 포함하는 제2 저장 장치; 및
    상기 제1 저장 장치의 제1 업데이트 카운트 및 상기 제2 저장 장치의 제2 업데이트 카운트에 적어도 부분적으로 기초하여, 상기 제1 저장 장치의 상기 제1 저장 부분으로부터 상기 제2 저장 장치의 상기 제2 저장 부분으로 메모리 페이지를 마이그레이션하는 로드 밸런싱 데몬을 포함하고,
    상기 제1 저장 부분은,
    상기 메모리 페이지를 포함하는 것을 특징으로 하는 시스템.
  2. 제1항에 있어서,
    상기 제1 저장 부분 및 상기 제2 저장 부분은 캐시-코히어런트 상호 연결 프로토콜을 통해 메모리를 확장하는 것을 특징으로 하는 시스템.
  3. 제2항에 있어서,
    상기 캐시-코히어런트 상호 연결 프로토콜은 CXL(Compute Express Link) 프로토콜을 포함하는 것을 특징으로 하는 시스템.
  4. 제2항에 있어서,
    상기 제1 저장 장치는 상기 제1 업데이트 카운트를 저장하기 위한 제1 HDM을 포함하고,
    상기 제2 저장 장치는 상기 제2 업데이트 카운트를 저장하기 위한 제2 HDM을 포함하는 것을 특징으로 하는 시스템.
  5. 제4항에 있어서,
    상기 로드 밸런싱 데몬은 상기 제1 HDM으로부터 상기 제1 업데이트 카운트에 액세스하고, 상기 제2 HDM으로부터 상기 제2 업데이트 카운트에 액세스하는 액세스 로직을 포함하는 것을 특징으로 하는 시스템.
  6. 제4항에 있어서,
    상기 로드 밸런싱 데몬은 상기 제1 HDM의 상기 제1 업데이트 카운트를 리셋하고, 상기 제2 HDM의 상기 제2 업데이트 카운트를 리셋하는 리셋 로직을 포함하는 것을 특징으로 하는 시스템.
  7. 제4항에 있어서,
    상기 제1 HDM은 상기 메모리 페이지에 대한 쓰기 카운트를 더 저장하는 것을 특징으로 하는 시스템.
  8. 메모리 페이지를 저장하는 제1 저장 부분을 포함하는 저장부;
    저장 장치로 전송된 로드 요청 또는 저장 요청 중 적어도 하나를 처리하는 컨트롤러; 및
    데이터가 상기 저장부에 기록된 횟수인 제1 횟수를 식별하는 업데이트 카운트 및 데이터가 상기 메모리 페이지에 기록된 횟수인 제2 횟수를 식별하는 쓰기 카운트를 관리하기 위한 증분 로직을 포함하고,
    상기 저장부는, 메모리를 확장하는 것을 특징으로 하는 저장 장치.
  9. 제8항에 있어서,
    상기 저장 장치는 캐시-코히어런트 상호 연결 프로토콜을 지원하는 것을 특징으로 하는 저장 장치.
  10. 제9항에 있어서,
    상기 캐시-코히어런트 상호 연결 프로토콜은 CXL(Compute Express Link) 프로토콜을 포함하는 것을 특징으로 하는 저장 장치.
  11. 제8항에 있어서,
    상기 업데이트 카운트 및 상기 쓰기 카운트를 저장하는 HDM을 더 포함하는 것을 특징으로 하는 저장 장치.
  12. 프로세서 상에서 실행되는 로드 밸런싱 데몬에 의해 제1 저장 장치를 식별하는 단계;
    상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 제2 저장 장치를 식별하는 단계;
    상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 상기 제1 저장 장치에 저장된 메모리 페이지를 식별하는 단계; 및
    상기 메모리 페이지를 상기 제1 저장 장치에서 상기 제2 저장 장치로 마이그레이션하는 단계를 포함하고,
    상기 제1 저장 장치 및 상기 제2 저장 장치는 메모리를 확장하는 것을 특징으로 하는 방법.
  13. 제12항에 있어서,
    상기 제1 저장 장치 및 상기 제2 저장 장치는 캐시-코히어런트 상호 연결 프로토콜을 통해 메모리를 확장하는 것을 특징으로 하는 방법.
  14. 제13항에 있어서,
    상기 캐시-코히어런트 상호 연결 프로토콜은 CXL(Compute Express Link) 프로토콜을 포함하는 것을 특징으로 하는 방법.
  15. 제13항에 있어서,
    상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 상기 제1 저장 장치를 식별하는 단계는,
    상기 제1 저장 장치의 제1 업데이트 카운트를 결정하는 단계를 포함하고,
    상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 상기 제2 저장 장치를 식별하는 단계는,
    상기 제2 저장 장치의 제2 업데이트 카운트를 결정하는 단계를 포함하는 것을 특징으로 하는 방법.
  16. 제15항에 있어서,
    상기 제1 저장 장치의 상기 제1 업데이트 카운트를 결정하는 단계는,
    상기 제1 저장 장치의 제1 HDM으로부터 상기 제1 업데이트 카운트에 액세스하는 단계를 포함하고,
    상기 제2 저장 장치의 상기 제2 업데이트 카운트를 결정하는 단계는,
    상기 제2 저장 장치의 제2 HDM으로부터 상기 제2 업데이트 카운트에 액세스하는 단계를 포함하는 것을 특징으로 하는 방법.
  17. 제15항에 있어서,
    상기 방법은,
    상기 로드 밸런싱 데몬이 상기 제1 저장 장치의 상기 제1 업데이트 카운트를 리셋하는 단계; 및
    상기 로드 밸런싱 데몬이 상기 제2 저장 장치의 상기 제2 업데이트 카운트를 리셋하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  18. 제15항에 있어서,
    상기 방법은,
    상기 로드 밸런싱 데몬에 의해 상기 제1 저장 장치 상의 상기 메모리 페이지와 연관된 쓰기 카운트를 리셋하는 단계를 더 포함하는 방법.
  19. 제13항에 있어서,
    상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 상기 제1 저장 장치에 저장된 상기 메모리 페이지를 식별하는 단계는,
    상기 메모리 페이지에 대한 쓰기 카운트에 적어도 부분적으로 기초하여, 상기 프로세서 상에서 실행되는 상기 로드 밸런싱 데몬에 의해 상기 제1 저장 장치에 저장된 상기 메모리 페이지를 식별하는 단계를 포함하는 것을 특징으로 하는 방법.
  20. 제13항에 있어서,
    상기 제1 저장 장치에서 상기 제2 저장 장치로 상기 메모리 페이지를 마이그레이션하는 단계는,
    상기 제2 저장 장치로 상기 메모리 페이지를 마이그레이션하는 것에 적어도 부분적으로 기초하여 페이지 테이블을 업데이트하는 단계를 포함하는 것을 특징으로 하는 방법.
KR1020220087382A 2021-07-15 2022-07-15 이기종 메모리 시스템에서의 로드 밸런싱을 위한 시스템 및 방법 KR20230012440A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202163222406P 2021-07-15 2021-07-15
US63/222,406 2021-07-15
US17/511,540 US20230017824A1 (en) 2021-07-15 2021-10-26 Systems and methods for load balancing in a heterogeneous memory system
US17/511,540 2021-10-26

Publications (1)

Publication Number Publication Date
KR20230012440A true KR20230012440A (ko) 2023-01-26

Family

ID=82594575

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220087382A KR20230012440A (ko) 2021-07-15 2022-07-15 이기종 메모리 시스템에서의 로드 밸런싱을 위한 시스템 및 방법

Country Status (5)

Country Link
US (1) US20230017824A1 (ko)
EP (1) EP4120089A1 (ko)
KR (1) KR20230012440A (ko)
CN (1) CN115617503A (ko)
TW (1) TW202307662A (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230023696A1 (en) * 2021-07-20 2023-01-26 Vmware, Inc. Migrating virtual machines in cluster memory systems
US11922034B2 (en) 2021-09-02 2024-03-05 Samsung Electronics Co., Ltd. Dual mode storage device
US12026387B2 (en) * 2022-03-24 2024-07-02 Advanced Micro Devices, Inc. Page swapping to protect memory devices
CN116466879B (zh) * 2023-03-17 2023-12-29 北京超弦存储器研究院 一种cxl内存模组、内存数据的置换方法及计算机系统

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7774556B2 (en) * 2006-11-04 2010-08-10 Virident Systems Inc. Asymmetric memory migration in hybrid main memory
US8239612B2 (en) * 2007-09-27 2012-08-07 Tdk Corporation Memory controller, flash memory system with memory controller, and control method of flash memory
US9513843B2 (en) * 2010-04-13 2016-12-06 Dot Hill Systems Corporation Method and apparatus for choosing storage components within a tier
KR20120128978A (ko) * 2011-05-18 2012-11-28 삼성전자주식회사 데이터 저장 장치 및 그것의 데이터 관리 방법
US8886781B2 (en) * 2011-12-13 2014-11-11 Microsoft Corporation Load balancing in cluster storage systems
US8554963B1 (en) * 2012-03-23 2013-10-08 DSSD, Inc. Storage system with multicast DMA and unified address space
US20160026984A1 (en) * 2013-04-15 2016-01-28 Hitachi, Ltd. Storage apparatus and control method of storage apparatus
US10452302B2 (en) * 2015-04-09 2019-10-22 Hitachi, Ltd. Storage system and data control method
US11074208B1 (en) * 2019-07-24 2021-07-27 Xilinx, Inc. Routing network using global address map with adaptive main memory expansion for a plurality of home agents
KR20210089853A (ko) * 2020-01-09 2021-07-19 에스케이하이닉스 주식회사 컨트롤러 및 컨트롤러의 동작방법
US12050938B2 (en) * 2020-11-30 2024-07-30 Netapp, Inc. Balance workloads on nodes based on estimated optimal performance capacity
CN114860150A (zh) * 2021-02-04 2022-08-05 戴尔产品有限公司 在存储群集的存储系统之间执行损耗均衡

Also Published As

Publication number Publication date
EP4120089A1 (en) 2023-01-18
CN115617503A (zh) 2023-01-17
US20230017824A1 (en) 2023-01-19
TW202307662A (zh) 2023-02-16

Similar Documents

Publication Publication Date Title
US10776278B2 (en) Storage control apparatus and computer-readable storage medium storing storage control program
US11216185B2 (en) Memory system and method of controlling memory system
KR20230012440A (ko) 이기종 메모리 시스템에서의 로드 밸런싱을 위한 시스템 및 방법
US8909887B1 (en) Selective defragmentation based on IO hot spots
KR101841997B1 (ko) 순응적 존속을 위한 시스템, 방법 및 인터페이스
TWI438628B (zh) 資料儲存系統及資料儲存媒介
US8924659B2 (en) Performance improvement in flash memory accesses
US10310984B2 (en) Storage apparatus and storage control method
JP2009043030A (ja) ストレージシステム
US10061706B2 (en) System and method for eviction and replacement in large content-addressable flash caches
JP2013152676A (ja) 不揮発性記憶装置
US11086562B2 (en) Computer system having data amount reduction function and storage control method
CN102063386B (zh) 一种单载体多目标的缓存系统的缓存管理方法
CN110321057B (zh) 具有增强io性能确定性的缓存的存储设备
CN112214162A (zh) 存储装置和控制方法
KR102656175B1 (ko) 스토리지 장치 및 랜덤 액세스 메모리를 제어하는 방법 및 불휘발성 메모리 장치 및 버퍼 메모리를 제어하는 방법
WO2018142622A1 (ja) 計算機
KR20210043001A (ko) 하이브리드 메모리 시스템 인터페이스
JP5597266B2 (ja) ストレージシステム
CN108984432B (zh) 一种处理io请求的方法及装置
KR102210536B1 (ko) 비휘발성 메모리 장치의 데이터 관리 시스템 및 그 방법
WO2024088150A1 (zh) 基于开放通道固态盘的数据存储方法、装置、设备、介质及产品
KR20230034194A (ko) 듀얼 모드 스토리지 장치
US9304918B2 (en) Computer system and cache control method
Yang et al. A read-write optimization scheme for flash memory storage systems