KR20190104989A - 메모리 수명을 연장시키는 장치 및 방법 - Google Patents

메모리 수명을 연장시키는 장치 및 방법 Download PDF

Info

Publication number
KR20190104989A
KR20190104989A KR1020197015289A KR20197015289A KR20190104989A KR 20190104989 A KR20190104989 A KR 20190104989A KR 1020197015289 A KR1020197015289 A KR 1020197015289A KR 20197015289 A KR20197015289 A KR 20197015289A KR 20190104989 A KR20190104989 A KR 20190104989A
Authority
KR
South Korea
Prior art keywords
memory
data
static data
cache
physical
Prior art date
Application number
KR1020197015289A
Other languages
English (en)
Other versions
KR102469139B1 (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 KR20190104989A publication Critical patent/KR20190104989A/ko
Application granted granted Critical
Publication of KR102469139B1 publication Critical patent/KR102469139B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • G11C16/349Arrangements for evaluating degradation, retention or wearout, e.g. by counting erase cycles
    • G11C16/3495Circuits or methods to detect or delay wearout of nonvolatile EPROM or EEPROM memory devices, e.g. by counting numbers of erase or reprogram cycles, by using multiple memory areas serially or cyclically
    • 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
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • G11C16/349Arrangements for evaluating degradation, retention or wearout, e.g. by counting erase cycles
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • G06F11/0754Error or fault detection not based on redundancy by exceeding limits
    • G06F11/076Error or fault detection not based on redundancy by exceeding limits by exceeding a count or rate limit, e.g. word- or bit count limit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/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/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/126Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
    • 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/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/128Replacement control using replacement algorithms adapted to multidimensional cache systems, e.g. set-associative, multicache, multiset or multilevel
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/21Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements
    • G11C11/34Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices
    • G11C11/40Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors
    • G11C11/401Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors forming cells needing refreshing or charge regeneration, i.e. dynamic cells
    • G11C11/4063Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing
    • G11C11/407Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing for memory cells of the field-effect type
    • G11C11/409Read-write [R-W] circuits 
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C13/00Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00
    • G11C13/0002Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00 using resistive RAM [RRAM] elements
    • G11C13/0021Auxiliary circuits
    • G11C13/0035Evaluating degradation, retention or wearout, e.g. by counting writing cycles
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/26Sensing or reading circuits; Data output circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C8/00Arrangements for selecting an address in a digital store
    • 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/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/126Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
    • G06F12/127Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning using additional replacement algorithms
    • 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/1032Reliability improvement, data loss prevention, degraded operation etc
    • G06F2212/1036Life time enhancement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/21Employing a record carrier using a specific recording technology
    • G06F2212/214Solid state disk
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/50Control mechanisms for virtual memory, cache or TLB
    • G06F2212/502Control mechanisms for virtual memory, cache or TLB using adaptive policy
    • 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/7201Logical to physical mapping or translation of blocks or pages
    • 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/7211Wear leveling

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Computer Hardware Design (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

일반적으로, 본 기술의 실시형태는 (휘발성 및 비휘발성) 메모리의 개선된 마모-평준화를 위한 장치 및 방법을 제공한다. 특히, 본 마모-평준화 기술은, 실질적으로 메모리 내에서 모든 위치들에 걸쳐 쓰기들의 밸런스를 맞추도록, 메모리 내에서 정적 데이터를 움직이는 것을 포함한다.

Description

메모리 수명을 연장시키는 장치 및 방법
본 기술은 일반적으로 메모리에 대한 마모-평준화(wear-levelling)에 관한 것이고, 특히 메모리 내에서 정적 데이터를 움직이는 것에 관한 것이다.
비휘발성 메모리(NVM)는 셀/소자에 공급되는 전원이 제거된 후에 메모리 셀 또는 소자가 그 상태를 잃지 않는 메모리 클래스이다. 비휘발성 메모리 디바이스들의 예는 플래시 메모리, 자기 컴퓨터 스토리지 디바이스들(예를 들면 하드 디스크들, 플로피 디스크들, 및 자기 테이프), 및 광학 디스크들을 포함한다. NVM 디바이스들의 다른 예들은 상 변화 메모리(PCM/PCRAM) 디바이스들, 저항 랜덤 액세스 메모리(RRAM/ReRAM) 디바이스들, 및 상관 전자 물질(CEM/CeRAM) 디바이스들을 포함한다. 상 변화 메모리 디바이스에서, 프로그래밍(쓰기)은 메모리 셀을 가열하여 용융시키고(저항의 변화를 야기함) 도전성 결정 상태 또는 비도전성 어모퍼스 상태로 냉각시키는 것을 수반한다. 저항 RAM 디바이스에서, 프로그래밍은 유전체 고체상 물질의 저항을 변화시키는 것을 수반한다. CeRAM 디바이스는 (전체적으로 또는 부분적으로) 상관 전자 물질(CEM)로 형성되고, 이것은 고체상 구조 상 변화라기보다는 전자 상관들로부터 발생하는 급격한 도전 또는 절연 상태 전이를 나타낸다.
일반적으로 말하면, NVM 셀들 또는 디바이스들은 전기적으로 소거 및 재프로그래밍될 수 있다. 그러나, NVM 셀들 또는 디바이스들은 자주 반복된 소거 및 재프로그램 사이클들로 인해 경시적으로 마모된다. 이 마모로 인해 비트 에러들이 높아질 수 있고, 결과적으로, NVM 디바이스의 일부는 데이터를 저장할 수 없을 수도 있다. 플래시 메모리는 전형적으로 105회 프로그램/소거 사이클들의 내구성을 갖고, PCM은 전형적으로 107회 내지 109회 프로그램/소거 사이클들의 내구성을 갖고, CeRAM은 109회 프로그램/소거 사이클들 정도라 기대되는 한편, 동적 랜덤 액세스 메모리(DRAM)는 적어도 1015회 프로그램/소거 사이클들을 지원한다. 마모는 메모리 디바이스의 타입에 따라 원인이 다르다. PCM은 전형적으로 쓰기 시에 이용되는 고온으로 인해 마모된다. 고온은 PCM 셀을 물리적으로 팽창 및 수축시키게 하고, 이는 셀 내의 물질에 스트레스를 주게 된다. 플래시 메모리는, 연속적인 프로그램/소거 사이클들이 비트 셀의 금속 산화물층을 마모시키므로, 마모된다.
본 출원인은 높은 횟수의 프로그램/소거 사이클들을 받게 되며 마모될 수 있는 디바이스들의 메모리 수명을 증가시킬 개선된 기술에 대한 필요성을 인식했다.
본 기술의 제1 양태에 따르면, 마모-평준화의 방법이 제공되고, 상기 방법은, 스토리지 시스템 내에서 정적 데이터(static data)를 저장하는 메모리 위치를 식별하는 스텝; 상기 스토리지 시스템의 메모리 내에서 쓰기 헤비 영역 내의 프리 메모리 위치를 식별하는 스텝; 및 저장된 정적 데이터를 상기 메모리 내에서 쓰기 헤비 영역 내의 프리 메모리 위치에 쓰기하는 스텝을 포함한다.
본 기술의 제2 양태에 따르면, 스토리지 시스템이 제공되고, 상기 스토리지 시스템은, 적어도 하나의 캐시; 메모리; 및 모듈을 포함하고, 상기 모듈은, 상기 스토리지 시스템 내에서 정적 데이터를 저장하는 메모리 위치를 식별하는 것; 메모리 내에서 쓰기 헤비 영역 내의 프리 메모리 위치를 식별하는 것; 및 저장된 정적 데이터를 상기 메모리 내에서 상기 쓰기 헤비 영역 내의 프리 메모리 위치에 쓰기하는 것을 위한 것이다.
본 기술은 시스템, 방법 또는 컴퓨터 프로그램 제품으로서 구현될 수 있음을 당업자는 이해할 것이다. 따라서, 본 기술은 전체적으로 하드웨어 실시형태, 전체적으로 소프트웨어 실시형태, 또는 소프트웨어와 하드웨어 양태들을 조합하는 실시형태의 형태를 취할 수 있다.
또한, 본 기술은 컴퓨터 판독 가능한 프로그램 코드가 구현된 컴퓨터 판독 가능한 매체에 구현된 컴퓨터 프로그램 제품의 형태를 취할 수 있다. 컴퓨터 판독 가능한 매체는 컴퓨터 판독 가능한 신호 매체 또는 컴퓨터 판독 가능한 스토리지 매체일 수 있다. 컴퓨터 판독 가능한 매체는, 예를 들면, 제한이 아닌 예시로서, 전자, 자기, 광학, 전자기, 적외선, 또는 반도체 시스템, 장치, 또는 디바이스, 또는 전술한 것의 임의의 적절한 조합일 수 있다.
본 기술의 동작들을 수행하기 위한 컴퓨터 프로그램 코드는 객체 지향 프로그래밍 언어들 및 종래의 절차 프로그래밍 언어들을 포함하는 하나 이상의 프로그래밍 언어들의 임의의 조합으로 쓰기될 수 있다. 코드 컴포넌트들은 절차, 방법 등으로서 구현될 수 있고, 원시 명령어 세트의 직접 머신 명령어들로부터 하이 레벨 컴파일 언어 또는 해석 언어 구성소까지의 임의의 추상화 레벨에서의 명령어들 또는 명령어들의 시퀀스들의 형태를 취할 수 있는 하위-컴포넌트들을 포함할 수 있다.
도 1은 스토리지 시스템의 마모-평준화의 종래기술 시스템의 개략도.
도 2는 스토리지 시스템의 마모-평준화의 개선된 시스템의 개략도.
도 3은 스토리지 시스템의 블록도.
도 4는 스토리지 시스템 내의 마모-평준화를 행하는 일반적 스텝의 흐름도.
도 5는 캐시로부터 정적 데이터가 퇴거되는 시점을 판정함으로써 스토리지 시스템 내의 마모-평준화를 행하는 예시적 스텝의 흐름도.
도 6은 캐시로부터의 정적 데이터 퇴거의 특정 횟수 후에 스토리지 시스템 내의 마모-평준화를 행하는 예시적 스텝의 흐름도.
도 7은 정적 데이터의 판독의 특정 횟수 후에 스토리지 시스템 내의 마모-평준화를 행하는 예시적 스텝의 흐름도.
도 8은 각각의 메모리 위치에서의 판독 횟수 및 쓰기 횟수를 추적함으로써 스토리지 시스템 내의 마모-평준화를 행하는 예시적 스텝의 흐름도.
도 9는 캐시 내의 정적 데이터 퇴거들을 물리 메모리에 통신함으로써 스토리지 시스템 내의 마모-평준화를 행하는 예시적 스텝의 흐름도.
도 10은 정적 데이터를 물리 메모리 내에 다시쓰기함으로써 스토리지 시스템 내의 마모-평준화를 행하는 예시적 스텝의 흐름도.
도 11은 각각의 판독 후에 메모리 블록의 상태값을 판정하고 메모리 블록에 저장된 데이터를 이동시킬지의 여부를 판정하는 예시적 동기 알고리즘의 흐름도.
도 12의 (a)는 비동기 알고리즘의 추적 부분을 나타내고, 도 12의 (b)는 비동기 알고리즘의 결정 부분을 나타내는 도면.
본 기술은 예를 들어 첨부 도면에서 도식적으로 나타낸다.
일반적으로, 본 기술의 실시형태는 스토리지 시스템들 내의 개선된 마모-평준화를 위한 방법을 제공한다. 스토리지 시스템들은 휘발성 메모리 및/또는 비휘발성 메모리를 포함할 수 있고, 본원에 기술된 마모-평준화 기술은 휘발성 및 비휘발성 메모리 모두에 적용될 수 있다. 특히, 본 마모-평준화 기술은 (휘발성 또는 비휘발성) 메모리 내에서 모든 위치들에 걸쳐 실질적으로 쓰기들의 밸런스를 맞추도록, 메모리 내에서 정적 데이터를 이동시키는 것을 포함한다.
본 기술을 비휘발성 메모리(NVMs) 내의 마모-평준화를 행하는 것과 관련하여 후술한다. 그러나, 이것은 단지 단순화를 목적으로 하는 것일 뿐이며 본 기술은 마모될 수 있는 임의의 타입의 메모리(휘발성 메모리(DRAM 및 SRAM 등)를 포함함) 내의 마모-평준화를 행하는데 동등하게 적용되거나, 적응될 수 있음이 이해될 것이다. 따라서, 용어 "메모리"는 본원에서 "비휘발성 메모리" 및/또는 "휘발성 메모리"를 의미하는데 사용된다.
본 기술은 메모리의 블록들 상에서 작용함으로써 마모-평준화를 행한다. 일반적으로 말하면, 메모리는 데이터를 저장하는데 사용될 수 있는 블록들로 나뉜다. 각각의 메모리 블록은 (예를 들면 1 이상의 바이트인) 메모리의 하나 이상의 연속 청크들의 그룹이다. 각각의 메모리 블록은 통상 어드레스와 연관되어, CPU가 명령어들을 실행하여 메모리 블록에 대해 읽고 쓰기할 수 있다. 메모리 블록은 임의의 크기일 수 있고, 고정 크기 또는 가변 크기일 수 있다. 메모리/메모리 어레이의 메모리 블록의 최소 크기는 캐시 라인 크기, 즉 캐시 내로 복사하기 위해 메모리로부터 액세스 가능한 데이터의 최소 크기와 같을 수 있다. 예를 들면, 캐시 라인 크기는 64 바이트일 수 있다. 물리 메모리는 임의의 크기, 예를 들면 64 Gbyte일 수 있다. 메모리는 메모리 어레이의 형태를 취할 수 있거나, 또는 그것을 포함할 수 있고, 메모리 블록들은 메모리 어레이 내에 등간격의 어드레스들로 위치될 수 있다.
본원에 기술된 마모-평준화 기술은, 일반적으로, 메모리(즉 휘발성 및/또는 비휘발성 메모리) 내의 모든 메모리 블록들에 걸쳐 실질적으로 균일하게 쓰기들의 밸런스를 맞추는 것을 수반한다. 용어 "메모리 블록"은 본원에서 용어 "메모리 위치", "위치", "영역", "메모리 셀", "메모리 어드레스", "메모리 페이지", "논리 페이지", "논리 어드레스", "물리 메모리 위치", 및 "물리 메모리 어드레스"와 상호 교환 가능하게 사용된다.
마모-평준화를 행하는 일반적인 방법은, '자리를 벗어난(out-of-place)' 쓰기, 즉 메모리(예를 들면 휘발성 또는 비휘발성 메모리) 내에서 별개의 프리 메모리 블록들에 데이터를 쓰기하는 것이다. 그러나, 메모리 내에서 일 위치/메모리 블록에 많은 횟수로 데이터를 쓰기 및 다시쓰기하는 것은 메모리 내의 위치들이 상대적으로 빠르게 다 마모되게 할 수 있다(예를 들면 107회 쓰기들 이후). 쓰기(및 다시쓰기)의 동작은 본원에서 "프로그램/소거 사이클" 또는 "소거 및 재프로그램 사이클"이라고도 한다. 메모리 내의 위치가 반복된 프로그램/소거 사이클들을 거치면, 해당 위치는 데이터를 저장할 수 없을 수도 있다. 이는 전체 메모리가 사용 불가, 또는 신뢰성이 떨어지게 할 수 있다. 따라서, 일반적으로 메모리 내의 모든 위치들/메모리 블록들 또는 가능한 많은 메모리 블록들에 걸쳐 데이터의 쓰기를 분산시켜, 디바이스가 n * 107 쓰기들 이후에 다 마모되게 하는 것이 바람직하다(n은 메모리 내에서 메모리 블록들의 수임).
메모리 내에 저장된 데이터는 새로운 쓰기들을 위해 메모리 내의 위치들을 프리로 하도록 단순히 삭제 또는 덮어쓰기될 수 없다. 메모리의 데이터의 일부는 정적 데이터일 수 있다. 정적 데이터는 드물게 액세스되거나, 경시적으로 변하지 않거나, 또는 동적 데이터만큼 빈번하게는 변하지 않는 데이터이다. 정적 데이터는 또한 지속 데이터라고도 한다(정적 데이터 또는 지속 데이터는 '지속' 타입의 스토리지, 예를 들면 하드 디스크들 또는 비휘발성 스토리지에 저장되는 데이터와는 동일하지 않음을 유의해야 한다. 정적/지속 데이터는 캐시, RAM 또는 메인 메모리에서와 같이 어디에나 위치될 수 있고, 전적으로 지속 타입의 스토리지에서만 발견되는 것은 아니다). 정적 데이터는, 빈번하게 변할 수 있는 데이터인 동적 데이터와 반대라고 간주될 수 있다. 일 타입의 정적 데이터는 판독-전용 데이터이다. 또 다른 타입의 정적 데이터는 판독이 드문 데이터이다. 용어 "정적 데이터"는 본원에서 용어 "판독-전용 데이터" 및 "판독이 드문 데이터"와 상호 교환 가능하게 사용된다.
본 마모-평준화 기술은 스토리지 시스템 내의 캐시 메모리/CPU 캐시, 및/또는 스토리지 시스템 내의 1차 스토리지/메인 메모리에 적용될 수 있다. 1차 스토리지/메인 메모리는 CPU가 직접 액세스 가능한 스토리지 타입이고, CPU는 필요에 따라 메인 메모리 내에 저장된 명령어들을 연속적으로 판독하고 실행한다. CPU에 의해 작업되는 데이터는 메인 메모리 내에 저장된다. 메인 메모리는 통상 RAM(휘발성(예를 들면 DRAM 및 SRAM) 및/또는 비휘발성(예를 들면 NVRAM 또는 플래시 메모리일 수 있음))을 포함한다. 그러나, 본 기술은 캐시(들), 1차 스토리지, 2차 스토리지, 3차 스토리지 및 오프라인 스토리지를 포함하는 스토리지 시스템 내의 임의의 타입의 메모리에 적용될 수 있다.
스토리지 시스템의 메모리로부터 정적 데이터가 자주 또는 빈번하게 액세스되지 않을 경우에, 정적 데이터는 보다 영구 타입의 스토리지로 움직여질 수 있다. 예를 들면, 스토리지 시스템의 캐시 내에 위치되는 정적 데이터는 캐시로부터 퇴거되고 스토리지 시스템의 1차 스토리지에 쓰기(또는 다시 쓰기)될 수 있다. 또 다른 예에서, 1차 스토리지 내에 위치되는 정적 데이터는 보다 영구 타입의 스토리지로 움직여질 수 있다. 이 예에서, 영구 스토리지는 2차 스토리지/보조 스토리지일 수 있고 CPU에 의해 직접 액세스 가능하지 않은 타입의 비휘발성 메모리이다. 다양한 상이한 타입들의 영구 스토리지, 예를 들면 하드 드라이브들(예를 들면 고체상 드라이브들), 광학 디스크들, 플래시 드라이브들, 자기 디스크들 등이 있다. 영구 스토리지 디바이스에 저장되는 데이터는 필요할 경우 검색될 수 있지만, 검색 프로세스는 캐시 및 메인 메모리(1차 메모리)로부터 데이터를 검색하는 것보다 오래 걸릴 수 있다. 따라서, 비사용/비액세스라고 판정된 1차 메모리에 저장된 정적 데이터만이 영구 스토리지로 움직여진다(상대적으로 빈번하게 액세스되는 정적 데이터는 보다 신속한 검색을 가능하는 하는 메모리 '타입', 예를 들면 1차 메모리 또는 CPU 캐시에 있을 필요가 있다). 비액세스 정적 데이터를 영구 스토리지로 움직이는 것은 메인 메모리 내의 일부 메모리 위치들이 새로운 쓰기들을 위해 프리로 됨을 의미한다. 이는 메인 메모리의 유효 수명을 증가시킨다.
도 1은 스토리지 시스템(100) 내의 마모-평준화의 종래기술 시스템의 개략을 나타낸다. 스토리지 시스템(100)은 메모리(102)를 포함하고, 다른 컴포넌트들, 예를 들면 캐시 및 영구 메모리/스토리지를 포함할 수 있다. 메모리(102)는 물리 메모리, 예를 들면 휘발성 메모리(예를 들면 SRAM, DRAM 등) 또는 비휘발성 메모리(예를 들면 플래시 메모리, 비휘발성 RAM 등)이다. 메모리(102)는 어드레서블 메모리이다. 예를 들면, 메모리(102)는 바이트-어드레서블 비휘발성 메모리일 수 있다. 메모리(102)는 본원에서는 "물리 메모리"라고도 한다. 메모리(102)는 데이터를 각각 저장(예를 들면 메모리(102)에 쓰기되는 데이터를 저장)할 수 있는 복수의 위치들 또는 메모리 블록들(104a 내지 104l)을 포함한다. 메모리 블록들은 메모리(102) 내에 등간격의 어드레스들/위치들로 위치될 수 있다. 도 1은 이러한 12개의 메모리 블록들을 나타내지만, 이는 단지 예시이고 임의의 수의 메모리 블록들이 물리 메모리 내에 존재할 수 있음이 이해될 것이다. 각각의 메모리 블록들(104a 내지 104l)은 자신의 물리 메모리 어드레스(PA)에 의해 어드레싱되어서, 쓰기 데이터를 연관된 물리 메모리 어드레스에 송신함으로써 쓰기 데이터가 물리 메모리(102) 내의 특정 메모리 블록에 쓰기될 수 있다.
이 예시적 종래기술 시스템에서, 메모리 블록들(104a 내지 104c)은 물리 메모리(102) 내의 쓰기 헤비 위치들이다. 쓰기 헤비 위치들(또는 쓰기 헤비 영역들)은 많은 횟수로 쓰기가 된 물리 메모리 내의 위치들이다. 예를 들면, 쓰기 헤비 위치는 전체 메모리에 걸친 평균 쓰기 횟수 초과로 쓰기됐을 수 있다. 이는, 메모리 블록들(104a 내지 104c)이 많은 횟수(및 아마도 물리 메모리(102) 내의 다른 위치들보다 많은 횟수)로 쓰기되었음을 의미한다. 메모리 블록들(104d, 104e 및 104j)은 쓰기 헤비 위치들만큼 많은 횟수로 쓰기되지 않았고 현재 프리/빈/비사용이다. 따라서, 전형적인 마모-평준화 기술은 데이터를 저장하는데 이용 가능하고(즉 빈/비사용이고) 쓰기 헤비가 아닌 메모리 블록들에 쓰기 헤비 위치들 내의 데이터를 움직이는 것을 수반한다. 따라서, 도 1의 화살표(106)로 나타나는 바와 같이, 쓰기 헤비 메모리 블록들(104a 내지 104c) 내에 저장된 데이터는, 쓰기 헤비 메모리 블록들을 다 마모시키는 것을 피하도록, 프리 메모리 블록들(104d, 104e 및 104j)로 움직여진다(또는 다시쓰기된다). 메모리 블록들(104k 및 104l)은 비사용/비액세스 데이터, 즉 현재 액세스되지 않는 데이터를 저장하고 있다. 메모리 블록들(104k 및 104l) 내에 저장된 데이터는, 예를 들면, 데이터가 특정 시간 동안 액세스되지 않았다고 판정될 경우, 영구 메모리/스토리지 에어리어로 움직여질 수 있다. 이는 새로운 쓰기들을 위해 메모리 블록들(104k 및 104l)을 프리로 하여, 물리 메모리(102) 내의 마모-평준화의 가능함을 돕는다. 메모리 블록들(104f 내지 104i)은 정적 데이터를 저장한다. 상술한 바와 같이, 용어 '정적 데이터'는 경시적으로 변하지 않거나, 또는 동적 데이터만큼은 빈번하게 변하지 않지만, 영구 스토리지로 움직이기보다는 데이터가 여전히 물리 메모리(102) 내에 유지되기에 충분히 자주 판독/액세스되는 데이터를 의미하는데 사용된다. 따라서 메모리 블록들(104f 내지 104i)은, 상대적으로 빈번하게 판독되지만 변하지 않는 데이터를 포함할 수 있다. 도 1의 종래기술 시스템의 단점은 물리 메모리(102) 내의 마모-평준화를 실시하는데 사용될 수 있는 메모리 블록들이 상대적으로 적다는 것이다.
본 기술은, 메모리 내에서 보다 덜 쓰기된 위치들을 새로운 쓰기들에 이용 가능하게 하도록, 액세스되는(따라서, 영구 스토리지로 움직여질 수 없는) 정적 데이터가 메모리 내에서 움직여질 수 있는 것을 제안한다. 따라서, 본 기술은 메모리 내에서 정적 데이터를 움직여서 메모리 내의 헤비 위치들에 쓰기하고, 이에 의해 덜 사용된 메모리 내의 위치들이 쓰기들에 이용 가능하게 한다. 메모리의 수명은 메모리 내에서 정적 데이터를 움직임으로써 현저히 증가될 수 있다. 예를 들면, 메모리는 S개의 메모리 블록들을 포함하고, 각각의 메모리 블록은 내구성 E(내구성은 메모리가 비신뢰/비사용되기 전에 발생할 수 있는 프로그램/소거 사이클들의 횟수임)를 가질 경우, 메모리의 수명은,
데이터가 단일 메모리 블록에만 쓰기 및 다시쓰기될 경우, 및 마모-평준화가 행해지지 않을 경우, E회 쓰기들; 또는
메모리에 마모-평준화가 행해질 경우, E*S회 쓰기들과 같다.
메모리의 단 하나의 메모리 블록이 연속적으로 쓰기되고, 및 메모리의 C개의 메모리 블록들이 이미 정적 데이터를 저장하고 있다고 상정하면, 메모리의 수명은
E*(S-C)회 쓰기들이다.
환언하면, 보다 많은 정적 데이터가 메모리에 저장될 수록, 메모리의 수명은 마모-평준화가 없는 메모리의 수명에 가까워진다. 이는, 정적 데이터를 저장하는 메모리 블록들 C가 다시쓰기되지 않고, 새로운 쓰기들을 위해 사용될 수 없기 때문이다. 따라서, 메모리 블록들 C는 새로운 쓰기들에 사용할 수 있는 메모리 블록들의 수를 제한함으로써 행해질 수 있는 마모-평준화의 양을 제한하고, 이에 의해 메모리의 유효 수명을 줄인다. 따라서, 메모리 내에서 정적 데이터를 움직임으로써 메모리의 이론적 최대 수명에 접근할 수 있다.
본 기술은 여전히 액세스되고 메모리 내에서 움직여질 수 있는 정적 데이터를 식별하는 다수의 방법을 포함한다. 이하 이들 방법을 보다 상세히 기술한다.
본 기술의 다음 설명에서, 용어 "메모리"는 용어 "휘발성 메모리", "비휘발성 메모리", "물리 메모리", "비휘발성 메모리 디바이스", "NVM", "NVM 디바이스", "비휘발성 랜덤 액세스 메모리", "비휘발성 메모리 어레이", "플래시 메모리", "상 변화 메모리", "저항 랜덤 액세스 메모리", "상관 전자 물질 메모리", "CeRAM", "상관 전자 스위치", "CES" 또는 "상관 전자 스위치(CES) 소자"를 의미하는데 사용되고, 이들과 상호 교환 가능하게 사용된다.
상술한 바와 같이, 용어 "메모리 위치"는 본원에서 용어 "메모리 블록", "위치", "메모리 어드레스", "메모리 페이지", "논리 페이지", "논리 어드레스", "물리 메모리 위치", 및 "물리 메모리 어드레스"와 상호 교환 가능하게 사용된다. 용어 "메모리 위치"는 본원에서 데이터가 저장될 수 있는 물리 메모리 내의 위치(예를 들면 비휘발성 메모리 또는 휘발성 메모리)를 의미하는데 사용된다. 물리 메모리는 메모리 어레이를 포함할 수 있고, 메모리 블록들은 메모리 어레이 내에 등간격의 어드레스들로 위치될 수 있다. 각각의 메모리 블록은 자신의 물리 메모리 어드레스에 의해 어드레싱될 수 있어, 쓰기 데이터를 연관된 물리 메모리 어드레스에 송신함으로써 쓰기 데이터가 물리 메모리(또는 메모리 어레이) 내의 특정 블록에 쓰기될 수 있다. 메모리 블록들은 임의의 크기일 수 있다. 메모리 블록들은 고정 크기일 수 있다. 물리 메모리/메모리 어레이 내의 메모리 블록의 최소 크기는 캐시 라인 크기, 즉 캐시 내로 복사하기 위해 메모리로부터 액세스 가능한 데이터의 최소 크기와 같을 수 있다. 캐시 라인 크기는 64 바이트일 수 있다. 물리 메모리는 임의의 크기, 예를 들면 64 Gbytes일 수 있다.
도 2로 가면, 이는 본 기술에 따른 스토리지 시스템 내의 마모-평준화(100')의 개선된 시스템의 개략을 나타낸다. 스토리지 시스템(100')은 메모리(102')를 포함하고, 다른 컴포넌트들, 예를 들면 캐시 및/또는 영구 메모리/스토리지를 포함할 수 있다. 메모리(102')는 물리 메모리, 예를 들면 휘발성 메모리(예를 들면 SRAM, DRAM 등) 또는 비휘발성 메모리(예를 들면 플래시 메모리, 비휘발성 RAM 등)이다. 메모리(102')는 어드레서블 메모리이다. 예를 들면, 메모리(102')는 바이트-어드레서블 비휘발성 메모리일 수 있다. 메모리(102')는 본원에서는 "물리 메모리"라고도 한다. 물리 메모리(102')는 비휘발성 메모리 또는 비휘발성 메모리 어레이이거나 이를 포함할 수 있다. 물리 메모리(102')는 휘발성 메모리 또는 휘발성 메모리 어레이이거나 이를 포함할 수 있다. 물리 메모리(102')는 플래시 메모리, 상 변화 메모리, 저항 랜덤 액세스 메모리, 또는 상관 전자 물질 메모리(CeRAM)를 포함할 수 있다. 물리 메모리(102')는 각각이 데이터를 저장(예를 들면 메모리에 쓰기되는 데이터를 저장)할 수 있는 복수의 위치들 또는 메모리 블록들(104'a 내지 104'l)을 포함한다. 메모리 블록들은 물리 메모리(102') 내에 등간격의 어드레스들/위치들로로 위치될 수 있다. 메모리 블록들은 동일한 크기일 수 있다. 또는, 메모리 블록들은 모두가 동일한 크기는 아닐 수도 있다. 도 2는 12개의 메모리 블록들을 나타내지만, 이는 단순히 예시를 위함이고, 임의의 수의 메모리 블록들이 물리 메모리(102') 내에 존재할 수 있음이 이해될 것이다. 각각의 메모리 블록(104'a 내지 104'l)은 자신의 물리 메모리 어드레스(PA)에 의해 어드레싱되어서, 쓰기 데이터를 연관된 물리 메모리 어드레스에 송신함으로써 쓰기 데이터가 물리 메모리(102') 내의 특정 메모리 블록(104'a 내지 104'l)에 쓰기될 수 있다. 마찬가지로, 물리 메모리 어드레스는 메모리 블록 내에 저장된 데이터가 액세스/판독 가능되게 할 수 있다.
도 2에서, 메모리 블록들(104'a 내지 104'c)은 물리 메모리(102') 내의 쓰기 헤비 위치들이다. 상술한 바와 같이, 쓰기 헤비 위치들(또는 쓰기 헤비 영역들)은 많은 횟수로 쓰기가 된 물리 메모리 내의 위치들이다. 예를 들면, 쓰기 헤비 위치는 전체 메모리에 걸친 평균 쓰기 횟수 초과로 쓰기됐을 수 있다. 이는, 메모리 블록들(104'a 내지 104'c)이 많은 횟수(및 아마도 물리 메모리(102') 내의 다른 위치들보다 많은 횟수)로 쓰기되었음을 의미한다. 메모리 블록들(104'd, 104'e 및 104'j)은 물리 메모리(102') 내의 현재 프리/빈/비사용 위치들이다. 메모리 블록들(104'd, 104'e 및 104'j)이 이전에 많은 횟수로 쓰기되었을 경우, 그들은 마모-평준화를 행하는 것 및 물리 메모리(102')에 걸쳐 쓰기를 분산시키는 것에 적절하지 않을 수 있으며, 이는, 그들 스스로가 자신의 프로그램/소거 사이클들의 최대 횟수(본원에서는 내구성값이라고도 함)에 도달하고 있기 때문이다.
실시형태에서, 메모리 블록들(104'd, 104'e 및 104'j)이 쓰기 헤비 위치들만큼 많은 횟수로 쓰기되지 않았을 경우, 그들은, 물리 메모리(102')에 걸쳐 쓰기들을 분산시키는 마모-평준화 동작에 사용될 수 있다. 상술한 바와 같이, 전형적인 마모-평준화 기술은, 데이터를 저장하는데 이용 가능(즉 빈/비사용)하고 쓰기 헤비 위치들만큼 많은 프로그램/소거 사이클들을 거치지 않은 메모리 블록들에 쓰기 헤비 위치들의 데이터를 이동시키는 것을 수반한다. 따라서, 도 2의 화살표(106')로 나타난 바와 같이, 쓰기 헤비 메모리 블록들을 다 마모(또는 과마모)시키는 것을 피하도록, 쓰기 헤비 메모리 블록들(104'a 내지 104'c) 내에 저장된 데이터는 프리 메모리 블록들(104'd, 104'e 및 104'j)로 움직여질(또는 다시쓰기될) 수 있다.
메모리 블록들(104'k 및 104'l)은 비사용/비액세스 데이터, 즉 현재 액세스되지 않는 데이터를 저장할 수 있다. 즉, 메모리 블록들(104'k 및 104'l)은 데이터를 물리 메모리(102') 내에 유지하는 것을 보증하기에는 충분히 빈번하게 액세스되지 않는 정적 데이터를 저장할 수 있다. 예를 들면, 데이터가 특정 시간 동안 액세스되지 않았다고 판정될 경우, 메모리 블록들(104'k 및 104'l) 내에 저장된 정적 데이터는 영구 메모리/스토리지 에어리어로 움직여질 수 있다. 이것은 새로운 쓰기들을 위해 메모리 블록들(104'k 및 104'l)을 프리로 하며, 물리 메모리(102') 내의 마모-평준화를 가능하게 하는 것을 돕는다.
도 2에서, 메모리 블록들(104'f 내지 104'i)은 정적 데이터를 저장한다. 상술한 바와 같이, 용어 '정적 데이터'는 경시적으로 변하지 않거, 또는 동적 데이터만큼 빈번하게 변하지 않지만, 데이터를 영구 스토리지로 움직이기보다는 여전히 물리 메모리(102') 내에 유지하기에 충분히 자주 판독/액세스되는 데이터를 의미하는데 사용된다. 따라서, 메모리 블록들(104'f 내지 104'i)은 상대적으로 빈번하게 판독되지만, 변하지 않는 데이터를 포함할 수 있다. 따라서, 정적 데이터를 저장하는 메모리 블록들(예를 들면 도 2의 메모리 블록들(104'f 내지 104'i))은 데이터를 쓰기하고 마모-평준화를 실시하는데 사용될 수 있는 물리 메모리(102') 내의 위치들의 수를 제한함으로써 물리 메모리(102')의 수명을 유효하게 제한하다. 본 기술은, 새로운 쓰기들을 위해, 특히 많은 횟수로 쓰기 및 다시쓰기되는 동적 데이터를 저장하기 위해 물리 메모리 내의 보다 많은 위치들이 이용 가능하게 하도록, 물리 메모리 내의 정적 데이터/판독-전용 데이터의 이동을 강제하는 방법을 제공한다. 물리 메모리 내의 각각의 정적 데이터의 이동에 의해 새로운 쓰기가 행해지게 하지만, 이동은 보다 많은 쓰기들을 견딜 수 있는 메모리 내의 위치를 프리로 할 수 있다. 따라서, 메모리 내에서 전략적으로 데이터를 이동시키는 것/다시쓰기하는 것에 의해, 메모리의 전체 수명이 증가될 수 있다.
실시형태에서, 쓰기 헤비 메모리 블록들(104'a 내지 104'c) 내에 저장된 데이터가 프리 메모리 블록들(104'd, 104'e 및 104'j)로 움직여질(또는 다시쓰기될) 경우, 쓰기 헤비 메모리 블록들은 데이터를 저장하는데 프리로 된다. 이들 쓰기 헤비 메모리 블록들의 마모를 피하기 위해, 동적 데이터는 바람직하게는 이들 위치들에 쓰기되지 않는다. 대신, 물리 메모리(102') 내에 저장된 정적 데이터는 쓰기 헤비 메모리 블록들로 다시쓰기/이동될 수 있다. 따라서, 도 2에 점선 화살표(108)로 나타난 바와 같이, 메모리 블록들(104'f, 104'g, 및 104'h) 내의 정적 데이터는 쓰기 헤비 메모리 블록들(104'a, 104'b 및 104'c)로 움직여진다. 정적 데이터의 각각의 이동은 효과적으로 물리 메모리(102')의 쓰기 헤비 위치의 추가적 쓰기로 되지만, 이점은, 정적 데이터를 저장하는데 사용된 메모리 블록들은 이제 새로운 쓰기들/새로운 데이터가 메모리에 쓰기되는데 이용 가능해져, 마모-평준화가 물리 메모리(102') 내의 보다 많은 수의 메모리 블록들에 걸쳐 행해지게 할 수 있다는 것이다. 따라서, 물리 메모리(102') 내에서 정적 데이터를 이동시킴으로써, 및 특히, 정적 데이터를 물리 메모리(102') 내의 쓰기 헤비 위치들로 이동시킴으로써, 마모-평준화가 물리 메모리 내의 보다 많은 위치들에 걸쳐 행해짐에 따라 물리 메모리(102')의 수명이 증가될 수 있다.
따라서, 본 기술은 정적 데이터를 저장하는 물리 메모리 내의 에어리어들/메모리 블록들이 동적 데이터를 저장하는데 사용되어, 물리 메모리 내의 모든 위치들에 걸쳐 데이터의 쓰기를 실질적으로 밸런스를 맞추거나 분산시킬 수 있음을 제안한다.
도 3은 메모리 시스템(10)(본원에서는 스토리지 시스템이라고도 함)의 블록도를 나타낸다. 스토리지 시스템(10)은 적어도 하나의 중앙 처리 유닛(CPU)(12) 및 메인 메모리(26)(본원에서는 1차 스토리지라고도 함)를 포함한다. CPU(12)는 메인 메모리(26)로부터 데이터/명령어들을 페치하고, 데이터를 메인 메모리(26) 내에 저장 등 할 수 있다. 메모리 시스템(10)은 적어도 하나의 캐시(14)를 포함할 수 있다. 캐시(들)(14)는 계층 레벨들에 조직화될 수 있다. 최상위 캐시는 메인 메모리(26)에 액세스하기 전에 호출되는 최종 캐시이다. 도 3은 또한 메인 메모리(26)에 액세스하기 전에 CPU(12)에 의해 호출되는 최종 캐시인 최종 레벨 캐시(LL 캐시)를 나타낸다. CPU(12)에 의해 규칙적으로/빈번하게 액세스되거나, 또는 신속히 액세스될 필요가 있는 데이터가 캐시들 중의 하나에 저장될 수 있다. 메모리 시스템(10)은 CPU(들)(12), 캐시들 및 메인 메모리(26) 간의 인터페이스를 제공하는 상호접속부(16)를 포함할 수 있다.
메인 메모리(26)는 휘발성 메모리(17), 예를 들면 랜덤 액세스 메모리(RAM)를 포함할 수 있다. 메인 메모리(26)는 비휘발성 메모리(18), 예를 들면 비휘발성 RAM(NVRAM) 또는 플래시 메모리를 포함할 수 있다. NVM(18)은 플래시 메모리, 상 변화 메모리, 저항 랜덤 액세스 메모리, 또는 상관 전자 물질 메모리(CeRAM)를 포함할 수 있다. 도 2를 참조하여 앞서 설명한 바와 같이, 휘발성 메모리(17) 및/또는 NVM(18)은 각각 데이터를 저장(예를 들면 메모리에 쓰기되는 데이터를 저장)할 수 있는 복수의 위치들 또는 메모리 블록들을 포함할 수 있다. 메모리 블록들은 메모리(17, 18) 내에 등간격의 어드레스들/위치들로 위치될 수 있다. 각각의 메모리 블록은 자신의 물리 메모리 어드레스(PA)에 의해 어드레싱될 수 있어서, 쓰기 데이터를 연관된 물리 메모리 어드레스에 송신함으로써 쓰기 데이터가 메모리(17, 18)의 특정 메모리 블록에 쓰기될 수 있다.
따라서, 실시형태에서, 스토리지 시스템의 메모리(마모 평준화됨)는 비휘발성 메모리이다. 추가적으로 또는 대안으로, 마모 평준화되는 메모리는 휘발성 메모리이다. 메모리는, 플래시 메모리, 상 변화 메모리, 저항 랜덤 액세스 메모리, RAM, DRAM, SRAM, 비휘발성 RAM, 및 상관 전자 RAM(CeRAM) 중 어느 하나 이상이거나, 이들을 포함할 수 있다.
스토리지 시스템은 영구 스토리지(20)(본원에서는 2차 스토리지 또는 보조 메모리라고도 함)를 포함할 수 있다. 메모리(20)는 자주 액세스되지 않거나, 또는 현재 액세스되고 있지 않은 데이터를 저장하는데 사용될 수 있다. 상술한 바와 같이, 메인 메모리(26)에 저장되지만 현재 액세스되지 않는 데이터는 메모리(20)로 움직여질 수 있다. 이것은 새로운 쓰기들을 위해 메모리 내의 메모리 블록들(17/18)을 프리로 하며, 메모리(17/18)의 마모-평준화를 가능하게 하는 것을 돕는다.
본 기술의 다음 설명은 마모-평준화를 실시하도록 스토리지 시스템(10)의 NVM(18) 내에서 데이터를 이동시키는 것에 초점을 맞추고 있다. 그러나, 다음 기술은 스토리지 시스템(10)의 휘발성 메모리(17) 내에서 데이터를 이동시키는 것에 동등하게 적용되거나, 또는 쉽게 적응될 수 있음이 이해될 것이다.
본 기술은 여전히 액세스되는 정적 데이터를 메모리(18)로부터 메모리(18) 내의 쓰기 헤비 위치들로 움직이고(또는 이동시키고), 이에 의해 덜 사용된 메모리(18) 내의 위치들을 쓰기들에 이용 가능하게 한다. 이에 의해 메모리(18)의 전체 유효 스토리지 용량이 증가되어, 메모리(18)의 수명이 현저히 증가될 수 있다. 본 기술은 여전히 액세스되고 메모리(18) 내에서 움직여질 수 있는 정적 데이터를 식별하는 여러가지 방법을 포함한다. 이를 행하는 한 가지 방법은 캐시(들)(14)(예를 들면 캐시 계층 내의 최종 레벨 캐시 또는 임의의 다른 레벨의 캐시)로부터 정적 데이터가 '퇴거' 또는 제거된 시점을 판정하는 것이다. 전형적으로, 캐시 내의 데이터는 메인 메모리(26) 내에 저장된 데이터에 대응한다. 신속히 및/또는 자주 사용될 필요가 있는 메인 메모리(26) 내의 데이터는 캐시에 복사되어 메인 메모리(26)가 아닌 캐시로부터 CPU에 의해 액세스된다. 그러나, 캐시 내의 데이터가 필요하지 않을 경우, 캐시된 데이터는 캐시 내의 공간을 프리로 하도록 퇴거될 수 있다. 데이터가 변경되지 않은 및 경우에 따라서는 데이터가 캐시에 남는 것을 보증할 빈도로 액세스되지 않은 정적 데이터일 경우, 캐시(들) 내의 데이터는 퇴거될 수 있다. 데이터가 캐시로부터 액세스되는지의 여부를 모니터링하는 것 및 이를 이용하여 데이터가 캐시로부터 퇴거될 수 있는지의 여부를 결정하는 것을 전형적으로 수반하는 다양한 가능한 캐시 퇴거 알고리즘들/스킴들이 있다. 예를 들면, 정적 데이터(본원에서는 "판독-전용 데이터" 또는 "클린 데이터"라고도 함 )는 특정 기간 동안 캐시로부터 액세스되지 않았을 경우 캐시로부터 퇴거될 수 있고, 캐시 퇴거 정책은, 빈번하게 액세스되거나 및/또는 빠르게 액세스될 필요가 있는 데이터를 위해, 빈번하게 액세스되지 않는 데이터를 퇴거시키는 것을 결정할 수 있다. 실시형태에서, 정적 데이터는 캐시로부터 무작위로 퇴거될 수 있다. 캐시 퇴거는 이하 보다 상세히 설명한다.
정적 데이터의 캐시 퇴거들은 메인 메모리(26)에(예를 들면 NVM(18)에) 저장된 데이터의 일부가 이동될 수 있는 정적 데이터일 수 있음을 지시(indication)할 수 있다. 캐시로부터 퇴거된 데이터는 정적 데이터가 메모리(18) 내에 위치되는 개소를 판정하는데 사용될 수 있어, 이동될 수 있다. 메모리(18)는 여러 방식으로 정적 데이터가 위치되는 개소를 알 수 있다. 예를 들면, 실시형태에서, 캐시로부터의 클린 데이터 퇴거들은 물리 메모리(18)에 통신될 수 있다. 이 통신은, 캐시(14)로부터 퇴거된 정적 데이터를 식별하는 정보를 포함하는 메시지 또는 신호를 물리 메모리(18)에 송신하는 것을 포함할 수 있다. 퇴거되는 정적 데이터를 식별하는 정보는 정적 데이터와 연관된 어드레스(물리/논리)일 수 있다. 이 예에서, 퇴거가 물리 메모리(18)에 통신되었을 경우, 물리 메모리(18)는 퇴거되는 클린 데이터를 물리 메모리 내에서 이동시킬지의 여부를 판정할 수 있다. 결정은 퇴거되는 정적 데이터를 저장하는 메모리 블록의 "판독 헤비니스"에 의거할 수 있다. "판독 헤비니스"는 얼마나 많은 횟수로 특정 메모리 블록으로부터 데이터가 판독되었는지, 또는 얼마나 많은 횟수로 데이터가 메모리 블록에의 쓰기 횟수에 대해 특정 메모리 블록으로부터 판독되었는지의 척도이다. 환언하면, "판독 헤비니스"는 얼마나 자주 스토리지 시스템(10) 내의 논리 페이지들이 액세스될 수 있는지 및/또는 얼마나 자주 논리 페이지가 캐시로부터 클린 퇴거되는지의 척도이다. "판독 헤비니스"는 또한 얼마나 자주 논리 페이지가 수정되고 다시 물리 메모리(18)에 쓰기되는지를 고려할 수 있다.
또 다른 예에서, 정적 데이터 퇴거들을 물리 메모리(18)에 통신하는 것 대신에, 캐시(14)는 정적 데이터를 퇴거하고 퇴거되는 정적 데이터를 다시 물리 메모리(18) 내에 쓰기하는 명령어를 송신할 수 있다. 이 경우에, 물리 메모리(18)는 메모리 내로 쓰기될 데이터가 변경되지 않았음(즉 물리 메모리(18) 내에서 동일한 위치에 이미 저장된 데이터에 대해 수정되지 않음)을 인식하는 일부 방법을 가질 수 있고 따라서 데이터가 캐시로부터 퇴거된 정적 데이터임을 판정할 수 있다. 상술한 바와 같이, 물리 메모리(18)는 물리 메모리 내에서 정적 데이터를 이동시킬지의 여부를 결정할 수 있다.
실시형태에서, 물리 메모리(18)는, 캐시 퇴거가 발생할 때마다, 물리 메모리 내에서 정적 데이터를 이동시킬 수 있다. 이는 스토리지 시스템 내에서 실시되는 간단한 마모-평준화 기술일 수 있다. 그러나, 일부 적용들/시나리오들에서, 이는 정적 데이터의 너무 많은 쓰기들(즉 이동들)을 발생하게 할 수 있어, 메모리 수명의 바람직한 증가를 달성할 수 없다.
실시형태에서, 물리 메모리(18)는 매 n개의 캐시 퇴거들마다 정적 데이터를 이동시킬 수 있다. 이 경우에, 물리 메모리(18)는 어느 정적 데이터를 이동시킬지를 무작위로 선택할 수 있거나, 또는 매 n번째 캐시 퇴거에 대응하는 데이터를 이동시킬 수 있다. 이는 실시하기에 상대적으로 간단한 마모-평준화 기술일 수 있고, 캐시 퇴거가 발생할 때마다 데이터를 이동시키는 상술한 실시형태보다 쓰기들이 적게 된다. 따라서, 메모리의 내구성/수명에 대한 마모-평준화 기술을 실시하는 비용은 상술한 실시형태보다 낮다.
실시형태에서, 메모리 시스템(10) 내의 논리 페이지들의 "판독 헤비니스"가 모니터링되어, 물리 메모리(18) 내에서 정적 데이터를 이동할 시점을 판정할 수 있다. 상술한 바와 같이, "판독 헤비니스"는 얼마나 자주 스토리지 시스템(10) 내의 논리 페이지들이 액세스될 수 있거나 및/또는 얼마나 자주 논리 페이지가 캐시(14)로부터 클린 퇴거되는지의 척도이다. "판독 헤비니스"는 또한 얼마나 자주 논리 페이지가 수정되고 다시 물리 메모리(18)에 쓰기되는지를 고려할 수 있다(논리 페이지들은 논리 어드레스들(LA)과 연관된다. 논리 어드레스들은 메인 메모리(26) 내의 물리 어드레스들(PA)에 맵핑된다. 프로그램들 및 연산들은 통상 논리 어드레스 공간에서 작업되고, 따라서, 논리 페이지들/논리 어드레스들의 "판독 헤비니스"를 모니터링하는 것은 메모리 시스템(10)이 논리 페이지가 정적인지의 여부, 또는 정적이고 규칙적으로 액세스되는지의 여부, 또는 정적이고 규칙적으로 액세스되지 않는지의 여부 등을 판정하게 할 수 있다). 스토리지 시스템(10) 내의 논리 페이지들 판독 헤비니스를 추적하는 것은, 메모리(18) 내의 위치들 자체를 추적할 필요 없이, 정적 데이터를 저장하는 메모리(18) 내의 위치들을 식별하게 할 수 있다. 예를 들면, 정적 데이터는 양호한 로컬성을 갖는 복수의 메모리 블록들에 저장된다고 상정할 수 있다. 어느 논리 페이지들이 연속적으로 복수 회 판독됨을 추적하는 것은 정적 데이터를 저장하는 메모리(18) 내의 위치들을 식별 가능하게 할 수 있다.
메모리 시스템(10)은 선택적으로 카운터(22)를 포함할 수 있다. 카운터(22)는 캐시(들)(14)로부터의 클린 데이터(정적 데이터) 퇴거들의 총 횟수를 카운트하는데 사용될 수 있다. 이하 보다 상세히 설명하는 바와 같이, 캐시 시스템으로부터의 정적 데이터 퇴거들의 횟수가, 정적 데이터가 물리 메모리(18) 내에서 쓰기 헤비 위치로 이동될 시점을 판정하는데 사용될 수 있다. 카운터(22)는 메모리 시스템(10) 내의 독립 소자일 수 있거나, 또는 물리 메모리(18) 내에 마련될 수 있다. 이하 카운터(22)를 예를 들면 도 6과 관련하여 보다 상세히 설명한다.
메모리 시스템(10)은 선택적으로 테이블(24)을 포함할 수 있다. 테이블(24)이 메모리 위치마다, 또는 메모리 블록마다, 또는 논리 페이지마다 정적 데이터 퇴거들의 횟수를 추적 및 저장하는데 사용될 수 있다. 테이블(24)은 얼마나 많은 횟수로 논리 페이지가 판독되었는지를 추적할 수 있고, 이는 논리 페이지가 물리 메모리(18) 내에서 쓰기 헤비 위치로 이동될 수 있는 정적 데이터를 포함함을 지시할 수 있다. 테이블(24)은 각각의 논리 페이지의 "판독 헤비니스"를 추적 및 저장할 수 있다. 테이블은 해시 테이블, 해시 맵, 또는 유사한 데이터 구조일 수 있다. 정적 데이터 퇴거들은 캐시에서 행해지므로, 테이블(24)은 캐시 시스템에 마련될 수 있다. 바람직하게는, 테이블(24)은 물리 메모리(18) 내에 마련된다. 그러나, 이 경우에, 메모리 시스템(10)은, 캐시(14) 내에서 발생되는 클린 데이터 퇴거들을 물리 메모리(18) 내의 테이블(24)로 통신하거나, 또는 메모리 시스템(10)이 비수정 데이터가 다시 물리 메모리(18) 내에 쓰기되는 시점을 인식할 수 있는 기술을 요한다. 테이블(24)은 이하 도 8 및 도 9와 관련하여 보다 상세히 설명한다.
따라서, 실시형태에서, 적어도 하나의 캐시; 메모리; 및 모듈(또는 적절한 수단)을 포함하는 스토리지 시스템이 제공되고, 상기 모듈은, 스토리지 시스템 내에서 정적 데이터를 저장하는 메모리 위치를 식별하고; 메모리 내에서 쓰기 헤비 영역 내의 프리 메모리 위치를 식별하고; 및 저장된 정적 데이터를 메모리 내에서 쓰기 헤비 영역 내의 프리 메모리 위치에 쓰기위한 것이다.
도 4는 메모리 시스템, 예를 들면 도 3의 스토리지 시스템(10) 내의 마모-평준화를 행하는 일반적 스텝의 흐름도이다. 프로세스는 스토리지 시스템 내의 정적 데이터/판독-전용 데이터를 식별함으로써 시작된다(스텝 S40). 정적 데이터는 캐시 및/또는 물리 메모리(예를 들면 비휘발성 메모리) 내에서 식별될 수 있고, 이는, 상술한 바와 같이, 정적 데이터는 캐시(정보를 물리 메모리에 전함), 또는 물리 메모리에 의해 식별될 수 있기 때문이다. 캐시 퇴거 정책이 캐시로부터 정적 데이터를 퇴거시키는데 적용될 경우, 예를 들면 퇴거되는 정적 데이터와 연관된 어드레스 또는 퇴거되는 정적 데이터의 일부 다른 식별자를 통신함으로써, 또는 퇴거되는 정적 데이터를 다시 물리 메모리에 송신함으로써, 캐시는 캐시 퇴거를 물리 메모리에 통신할 수 있다. 실시형태에서, 정적 데이터는 물리 메모리에 의해, 예를 들면 비수정 데이터가 쓰기 명령어와 함께 물리 메모리에 송신되었음을 관찰함에 의해 식별될 수 있다. 따라서, 정적 데이터를 식별하는 스텝은 캐시 내에서 (예를 들면 캐시 퇴거 정책을 통해) 발생할 수 있거나, 또는 물리 메모리 내에서 (예를 들면 비수정 데이터가 물리 메모리에 송신되었음을 판정함으로써) 발생할 수 있다. 판독-전용 데이터(또는 정적 데이터)는 변하지 않은 데이터이고, 즉 동적이지 않다. 정적 데이터는 다양한 방식으로 식별될 수 있다. 예를 들면, 다시쓰기되지 않고 물리 메모리(또는 캐시)로부터 많은 횟수로 액세스되는 데이터는 정적 데이터로 상정될 수 있다. 또 다른 예에서, 물리 메모리(또는 캐시)로부터 액세스되고 물리 메모리에 다시쓰기되는 데이터는, 다시쓰기된 데이터가 비수정이라고 판정될 경우, 정적 데이터로서 식별될 수 있다. 캐시가 퇴거 스킴을 채용할 경우, 캐시는 정적 데이터를 퇴거하도록 구성될 것이므로, 캐시로부터 퇴거되는 데이터는 정적 데이터로 상정될 수 있다.
실시형태에서, 스토리지 시스템 내의 정적 데이터를 식별하는 스텝은 스토리지 시스템 내의 정적 페이지를 식별하는 것을 포함할 수 있다. 페이지(메모리 페이지, 또는 가상 페이지, 또는 논리 페이지라고도 알려짐)는 페이지 테이블 내에 단일 엔트리로 기술되는 가상 메모리의 고정-길이 연속 블록이다. 각각의 페이지는 물리 메모리(예를 들면 비휘발성 메모리)의 물리 어드레스(PA)에 맵핑될 수 있는 논리 어드레스(LA)를 가질 수 있다. LA들과 PA들 사이의 맵핑은 통상 페이지 테이블에 저장된다. 메모리 페이지들은 정적 데이터 또는 동적 데이터를 포함할 수 있다. 따라서, 도 4의 프로세스의 스텝 S40은 스토리지 시스템(예를 들면 스토리지 시스템(10)) 내의 정적 메모리 페이지들을 식별하는 것을 포함할 수 있다. 정적 메모리 페이지들이 캐시(예를 들면 캐시(14))에서 발견될 수 있고, 이 경우에, 캐시로부터 퇴거되는 정적 메모리 페이지의 LA가 물리 메모리(예를 들면 휘발성 메모리(17) 또는 NVM(18))에 통신될 수 있고, 물리 메모리는 LA를 PA로 맵핑하여 물리 메모리에서 데이터가 위치되는 개소를 판정할 수 있다. 정적 메모리 페이지에 대응하는 데이터가 물리 메모리에서 발견될 수 있고, 이 경우에, 캐시는 메모리 페이지를 퇴거하고 데이터가 이미 위치하는 물리 어드레스 내에 데이터를 다시쓰기하는 명령어를 송신할 수 있다. 물리 메모리는 PA에 쓰기될 들어오는 데이터가 해당 PA에 이미 저장된 데이터와 동일함을 판정할 수 있고, 따라서 해당 PA에 저장된 데이터가 이동될 수 있는 정적 데이터임을 판정한다.
정적 데이터가 식별되었을 경우, 마모-평준화 프로세스는 스토리지 시스템의 메모리(10) 내에서 쓰기 헤비 영역 내의 프리 메모리 위치를 식별하는 것을 포함한다(스텝 S42). 메모리는 휘발성 메모리(17) 또는 NVM(18)일 수 있다. 상술한 바와 같이, 데이터가 쓰기 헤비 위치로부터 빈/비사용 위치로 또는 덜-쓰기 헤비 위치로 이동될 경우, 쓰기 헤비 위치는 데이터를 저장하는데 이용 가능해진다. 이 새롭게-이용 가능한 쓰기 헤비 위치는 바람직하게는 정적 데이터를 저장하는데 사용될 수 있고, 이는 변하지 않는, 또는 자주 변하지 않는 데이터여서, 데이터가 동적 데이터만큼 자주 스토리지 시스템에 쓰기 및 다시쓰기되지 않을 것이기 때문이다. 스토리지 시스템의 쓰기 헤비 영역 또는 메모리 블록 내의 프리 메모리 위치를 식별하는데 임의의 기술이 사용될 수 있다. 예를 들면, 테이블(예를 들면 도 3의 테이블(24))은 각각의 메모리 페이지/메모리 블록에 대한 쓰기 횟수를 저장할 수 있고, 각각의 메모리 블록에서 쓰기가 일어날 때마다 횟수를 증가시킬 수 있다.
마모-평준화 프로세스는 식별된 정적 데이터를 메모리(17/18) 내의 식별된 프리 메모리 위치에 다시쓰기/이동시키는 것을 더 포함한다(스텝 S44). 그렇게 함으로써, 이전에 정적 데이터가 저장되었던 메모리의 위치는 이제 데이터, 바람직하게는 동적 데이터를 저장하는데 프리로 된다. 따라서, 정적 데이터가 쓰기 헤비 위치들로 이동될/움직여질 경우, 메모리(17/18) 내의 메모리 위치들이 이용 가능해지고, 이에 의해 물리 메모리 내의 보다 많은 위치들에 걸쳐 쓰기가 가능해진다. 따라서, 정적 데이터를 휘발성/비휘발성 메모리 내에서 이동시키는 것을 포함하는 마모-평준화를 행하는 것은 메모리 내의 각각의 메모리 블록이 최대 횟수(예를 들면 내구성값)으로 쓰기 가능하게 해서, 쓰기 헤비 메모리 블록들이 다른 메모리 블록들보다 훨씬 빠르게 고장으로 되는 대신, 모든 블록들이 대략 동일한 시간에 고장으로 된다.
도 4에 나타난 스텝 S40 내지 S44 각각은 소프트웨어, 하드웨어, 또는 소프트웨어와 하드웨어의 조합을 이용하여 실시될 수 있다. 하드웨어는 CPU(12), 상호접속부(16) 및/또는 메인 메모리(26)에 위치될 수 있는 메모리 컨트롤러일 수 있다. 바람직하게는, 물리 메모리(18) 내에서 정적 데이터를 이동시킬지의 여부의 결정은 물리 메모리(18)에 위치되거나 그에 연결되거나, 그 상에서 동작하는 소프트웨어/하드웨어에 의해 이루어진다.
따라서, 마모-평준화의 방법이 제공되고, 상기 방법은, 스토리지 시스템 내에서 정적 데이터를 저장하는 메모리 위치를 식별하는 것; 스토리지 시스템의 메모리 내에서 쓰기 헤비 영역 내의 프리 메모리 위치를 식별하는 것; 및 저장된 정적 데이터를 메모리 내에서 쓰기 헤비 영역 내의 프리 메모리 위치에 쓰기하는 것을 포함한다.
상술한 바와 같이, 마모-평준화 기술은 스토리지 시스템의 적어도 하나의 메모리에 적용되어, 메모리 내에서 식별된 정적 데이터가 메모리 내의 쓰기 헤비 영역으로 움직여진다. 메모리는 휘발성 또는 비휘발성 메모리일 수 있다(또는 이것을 포함할 수 있다). 상술한 바와 같이, 정적 데이터를 저장하는 메모리 내의 위치는 스토리지 시스템의 캐시를 통해 식별될 수 있거나, 또는 자체적으로 스토리지 시스템의 메모리 내에서 식별될 수 있다.
따라서, 실시형태에서, 정적 데이터를 저장하는 메모리 위치를 식별하는 스텝은 스토리지 시스템의 (비휘발성 또는 휘발성) 메모리 내의 메모리 위치를 식별하는 것을 포함할 수 있다. 특히, 메모리 내의 메모리 위치를 식별하는 것은 메모리에 쓰기될 데이터가 메모리 내에 이미 저장된 데이터와 동일한 경우를 인식하는 것을 포함할 수 있다. 추가적으로 또는 대안으로, 실시형태에서, 메모리 내의 메모리 위치를 식별하는 것은 (예를 들면 스토리지 시스템의 캐시 또는 다른 컴포넌트로부터) 정적 데이터와 연관된 논리 어드레스를 수신하는 것, 및 맵핑 테이블을 이용하여 메모리 내에서 정적 데이터의 대응하는 물리 어드레스를 판정하는 것을 포함한다.
정적 데이터를 판정하고, 정적 데이터를 이동시킬지의 여부를 판정하는 여러 예시적 기술을 이하 설명한다.
도 5는 캐시로부터 정적 데이터가 퇴거되는 시점을 판정함으로써 스토리지 시스템(예를 들면 도 3의 스토리지 시스템) 내의 마모-평준화를 행하는 예시적 스텝의 흐름도이다. 프로세스는 스토리지 시스템의 캐시 내의 정적 데이터를 식별함으로써 시작된다(스텝 S50). 따라서, 이 예에서, 우선 정적 데이터가, 마모 평준화되는 메모리 내에서가 아니라 캐시 내에서 식별된다. 캐시 내의 정적 데이터는 마모 평준화되는 메모리 내에 저장된 데이터에 대응하고, 단 캐시는 어느 데이터가 정적임을 식별하는데 사용된다. 이 정보가 알려지면, 메모리 내의 정적 데이터의 대응하는 위치가 식별될 수 있다. 정적 데이터는 캐시에 의해 실시되는 캐시 퇴거 스킴을 통해 식별될 수 있다. 캐시 퇴거 스킴은, 예를 들면, 데이터가 정적(예를 들면 판독-전용) 데이터이거나, 특정 시간 길이 동안 액세스되지 않았거나, 또는 캐시 내에 데이터를 유지하는 것을 보증하는데 충분히 자주 액세스되지 않았을 경우, 캐시로부터 데이터를 퇴거/제거하는 것을 포함할 수 있다. 액세스 시간, 액세스 빈도, 또는 액세스 레이트에 대한 특정 값들(데이터가 정적 데이터인지의 여부를 판정하는데 사용됨)은, 사용- 또는 실시-특정적일 수 있다. 캐시 퇴거 스킴은 활동 데이터 세트를 캐시 내에 유지하는데 사용될 수 있다. 이는 다른 타입의 메모리(예를 들면 메인 메모리)에 저장된 일부 데이터가 캐시 내의 일부 데이터보다 자주/빈번하게 액세스되는지의 여부를 판정하는 것을 포함할 수 있고, 그럴 경우, 보다 자주/빈번하게 액세스되는 다른 곳에 저장된 데이터를 위한 공간을 만들기 위해 캐시 내의 데이터를 퇴거시키는 것을 포함할 수 있다. 스토리지 시스템에 의해 채용되는 캐시 퇴거 스킴은 데이터가 정적인지의 여부를 판정하는데 사용될 파라미터들을 자체적으로 정의할 수 있다. 일단 식별되면, 캐시는 캐시로부터 정적 데이터를 퇴거시킨다(스텝 S52).
마모-평준화 프로세스의 다음 스텝은 캐시 퇴거를 마모 평준화되는 메모리에 통신하는 것을 요해서, 메모리(또는 그 컨트롤러)가 메모리 내의 대응하는 퇴거되는 데이터의 위치를 판정할 수 있다(스텝 S54). 상술한 바와 같이, 이는 단순히 캐시로부터 퇴거된 메모리 페이지 또는 퇴거되는 데이터의 논리 어드레스를 통신하는 것을 포함할 수 있다. 물리 메모리는 이를 이용하여, 논리 어드레스를 물리 어드레스로 맵핑함으로써, 캐시로부터 퇴거되는 데이터가 물리 메모리 내의 어디에 상주하는지를 판정할 수 있다. 추가적으로 또는 대안으로, 캐시는 클린 데이터를 퇴거시키고 퇴거되는 클린 데이터가 동일한 위치에서 물리 메모리 내에 다시쓰기되는 명령어를 송신하도록 구성될 수 있다. 물리 메모리는 들어오는 쓰기 데이터가 물리 메모리 내의 해당 위치에 이미 저장된 데이터와 동일함을 판정할 수 있고, 따라서 들어오는 데이터가 비수정, 정적 데이터임을 결론지을 수 있다.
도 5에 나타난 실시형태에서, 마모-평준화 프로세스는 정적 데이터가 캐시로부터 퇴거될 때마다 물리 메모리 내의 정적 데이터를 이동시키도록 구성된다. 따라서, 캐시로부터의 정적 데이터의 각각의 퇴거는 동일한 데이터의 물리 메모리 내에서의 이동을 트리거한다. 추가적으로 또는 대안으로, 캐시로부터의 정적 데이터의 각각의 퇴거는 물리 메모리 내에 저장된 임의의 정적 데이터의 이동을 트리거한다. 이 경우에, 캐시로부터 퇴거되는 데이터는 반드시 물리 메모리 내에서 이동되는 데이터에 대응하는 것은 아니다. 그러나, 이 경우에, 물리 메모리는 물리 메모리 내에 저장된 어느 데이터가 정적 데이터이고 어느 것이 동적 데이터인지를 판정하는 또 다른 메커니즘이 필요할 것이다. 이는, 물리 메모리의 정적 데이터가 위치되는 개소를 판정하고 이동을 위한 정적 데이터를 선택하도록, 각각의 메모리 블록(논리 메모리 블록 또는 물리 메모리 블록)의 판독 헤비니스를 추적하는 테이블을 참조하는 것을 요할 수 있다.
따라서, 정적 데이터(예를 들면 캐시로부터 퇴거되는 데이터)의 위치가 물리 메모리(예를 들면 휘발성 또는 비휘발성 메모리) 내에서 발견되면, 마모-평준화 프로세스는 물리 메모리 내에서 쓰기 헤비 영역 내의 프리 메모리 위치를 식별해야 한다(스텝 S56). 물리 메모리의 쓰기 헤비 영역 또는 쓰기 헤비 메모리 블록 내의 프리 메모리 위치를 식별하는데 임의의 기술이 사용될 수 있다. 예를 들면, 테이블(예를 들면 도 3의 테이블(24))은 각각의 메모리 페이지/메모리 블록에 대한 쓰기 횟수를 저장할 수 있고, 각각의 메모리 블록에서 쓰기가 일어날 때마다 횟수를 증가시킬 수 있다. 테이블은 또한 각각의 메모리 블록이 프리인지 점유되어 있는지의 여부를 지시할 수 있다.
마모-평준화 프로세스는 식별된 정적 데이터를 물리 메모리 내에서 식별된 프리 메모리 위치로 다시쓰기/이동시키는 것을 포함한다(스텝 S58). 그렇게 함으로써, 이전에 정적 데이터가 저장되어 있던 물리 메모리 내의 위치는 이제 데이터, 바람직하게는 동적 데이터를 저장하는데 프리로 된다. 따라서, 정적 데이터가 쓰기 헤비 위치들로 이동될/움직여질 경우, 물리 메모리 내의 메모리 위치들이 이용 가능해지고, 이에 의해 물리 메모리 내의 보다 많은 위치들에 걸쳐 쓰기가 가능해진다.
도 5에 나타난 스텝 S50 내지 S58 각각은 소프트웨어, 하드웨어, 또는 소프트웨어와 하드웨어의 조합을 이용하여 실시될 수 있다. 하드웨어는, CPU(12), 상호접속부(16) 및/또는 메인 메모리(26)(또는 그에 연결)에 위치될 수 있는 메모리 컨트롤러일 수 있다. 바람직하게는, 물리 메모리(17, 18) 내의 정적 데이터를 이동시킬지의 여부, 및 정적 데이터를 어디로 이동시킬지의 결정은, 물리 메모리(17, 18)에 위치되거나, 그에 연결되거나, 그 상에서 동작하는 소프트웨어/하드웨어에 의해 이루어진다.
따라서, 실시형태에서, 정적 데이터를 저장하는 메모리 위치를 식별하는 스텝은 스토리지 시스템의 캐시 내의 메모리 위치를 식별하는 것을 포함한다.
실시형태에서, 방법은 캐시 내의 식별된 메모리 위치로부터 정적 데이터를 퇴거시키는 것을 포함할 수 있다. 실시형태에서, 방법은 퇴거되는 정적 데이터의 논리 어드레스를 마모 평준화되는 메모리에 통신하는 것을 포함할 수 있다. 이 경우에, 메모리 위치를 식별하는 스텝은 퇴거되는 정적 데이터의 논리 어드레스 및 맵핑 테이블을 이용하여, 메모리 내의 퇴거되는 정적 데이터의 대응하는 물리 어드레스를 판정하는 것을 포함할 수 있다. 또는, 방법은 퇴거되는 정적 데이터를 다시쓰기하는 명령어를 메모리에 송신하는 것을 포함할 수 있다. 이 경우에, 정적 데이터를 저장하는 메모리 위치를 식별하는 스텝은 퇴거되는 정적 데이터가 메모리 내에 이미 저장된 데이터와 동일함을 인식하는 것을 포함할 수 있다.
실시형태에서, 저장된 정적 데이터를 비휘발성 메모리 내의 프리 메모리 위치에 쓰기하는 스텝은 캐시로부터의 정적 데이터의 퇴거 후에 발생할 수 있다. 환언하면, 실시형태에서, 정적 데이터의 이동은 정적 데이터의 캐시 퇴거가 관찰될 때마다 발생할 수 있다. 상술한 바와 같이, 이는, 언제 메모리 내의 정적 데이터를 움직일지, 및 메모리에서 어느 정적 데이터를 움직일지를 판정하도록 추가적인 결정들 또는 계산들이 행해질 필요가 없으므로, 실시하기에 간단한 마모-평준화 기술일 수 있다(이 실시형태에서 이동되는 정적 데이터는 캐시로부터 퇴거되는 데이터에 대응한다). 그러나, 이는 너무 많은 쓰기들로 될 수 있어, 마모 평준화되는 메모리의 전체 수명에 영향을 줄 수 있다.
실시형태에서, 정적 데이터 퇴거가 발생할 때마다 데이터를 이동시키는 것은, 물리 메모리가 그 직후에 쓰기될 수 있으므로, 유용 또는 효율적이지 않을 수 있다. 데이터를 이동시키는 것은 사실상 쓰기이므로, 물리 메모리에 대한 쓰기 횟수가, 정적 데이터의 이동이 매 캐시 퇴거 후에 발생할 경우, 빠르게 증가할 수 있다. 따라서, 실시형태에서, 퇴거들의 미리 정해진 횟수가 일어난 후에만, 예를 들면 캐시로부터의 매 n번 정적 데이터 퇴거들 후에만 데이터를 이동시키는 것이 바람직할 수 있다.
도 6은 캐시로부터의 정적 데이터 퇴거의 특정 횟수 후에 메모리 시스템 내의 마모-평준화를 행하는 예시적 스텝의 흐름도이다. 따라서, 도 5의 실시형태와 달리, 도 6의 실시형태에서는, 매 정적 데이터의 캐시 퇴거가 물리 메모리 내에서의 정적 데이터의 이동을 트리거하지 않는다. 대신, 캐시 퇴거들의 특정 횟수가 일어난 후에만, 단지 정적 데이터의 이동이 발생할 수 있다.
프로세스는 스토리지 시스템의 캐시 내의 정적 데이터/판독-전용 데이터를 식별함으로써 시작된다(스텝 S60). 따라서, 이 예에서, 우선 정적 데이터가 마모 평준화되는 물리 메모리 내가 아니라, 캐시 내에서 식별된다. 캐시 내의 정적 데이터는 마모 평준화되는 메모리 내에 저장된 데이터에 대응하고, 단 캐시는 어느 데이터가 정적임을 식별하는데 사용된다. 이 정보가 알려지면, 메모리 내의 정적 데이터의 대응하는 위치가 식별될 수 있다. 정적 데이터는 캐시에 의해 실시되는 캐시 퇴거 스킴을 통해 식별될 수 있다. 캐시 퇴거 스킴은 예를 들면, 데이터가 정적(예를 들면 판독-전용) 데이터이거나 특정 시간 길이 동안 액세스되지 않았거나, 또는 캐시 내에 데이터를 유지하는 것을 보증하는데 충분히 자주 액세스되지 않았을 경우, 캐시로부터 데이터를 퇴거/제거하는 것을 포함할 수 있다. 스토리지 시스템에 의해 채용되는 캐시 퇴거 스킴은 자체적으로 데이터가 정적인지의 여부를 판정하는데 사용될 파라미터들을 정의할 수 있다. 일단 식별되면, 캐시는 캐시로부터 정적 데이터를 퇴거시킨다(스텝 S62).
이 실시형태에서, 캐시로부터의 정적 데이터의 각각의 퇴거가 예를 들면 도 3에서의 카운터(22)를 이용하여 카운트된다. 따라서, 식별된 정적 데이터가 캐시로부터 퇴거되면, 캐시 퇴거 카운터는 1씩 증가/증분된다(스텝 S64). 캐시 퇴거 카운터의 카운트는, 정적 데이터가 캐시로부터 퇴거될 때마다, 제로로 재설정되지 않고 1씩 증가될 수 있거나, 또는 데이터가 물리 메모리 내에서 이동될 때마다 제로로 재설정될 수 있다. 캐시 퇴거 카운터가 증가되는 양은 임의적이고, 임의의 값일 수 있음이 이해될 것이다. 또한 정적 데이터가 캐시로부터 퇴거될 때마다 캐시 퇴거 카운터가 초기값으로부터 동등하게 감소될 수 있음이 이해될 것이다. 이 경우에, 캐시 퇴거 카운터가 제로에 도달하면, 데이터는 물리 메모리 내에서 이동될 수 있고, 캐시 퇴거 카운터는 초기값으로 재설정될 수 있다.
이 실시형태에서, 클린 데이터 퇴거들의 특정 횟수가 캐시 내에서 관찰/발생된 후에, 정적 데이터는 이동된다. 따라서, 정적 데이터 이동의 액션을 트리거하는 퇴거들의 임계치가 있을 수 있다. 임계치는 임의의 수일 수 있다(임계치는 캐시 퇴거가 관찰될 때마다 카운터를 증가시킴으로써 도달될 수 있거나, 또는 캐시 퇴거가 관찰될 때마다 감소되는 카운터의 초기값일 수 있다). 예를 들면, 임계치가 1일 수 있고, 유효하게 도 5의 마모-평준화 프로세스가 행해지게 될 수 있다. 또 다른 예에서, 임계치는 퇴거들의 수백일 수 있다. 임계치는 물리 메모리의 작업부하, 및/또는 얼마나 적극적 마모-평준화가 요구되는지에 의존할 수 있다. 따라서, 일부 타입의 물리 메모리에 대해, 마모-평준화는, 예를 들면 메모리 타입의 내구성값이 낮을 경우, 적극적일 수 있다. 마모-평준화는 메모리의 사용량에 의존하여, 예를 들면 메모리가 많은 쓰기들이 발생하는 환경에서 사용될 경우, 적극적일 수 있다. 임계치는 변할 수 있거나(또는 시간- 또는 작업부하-의존적일수 있거나) 또는 복수의 임계치들이 있을 수 있다. 예를 들면, 메모리의 프로그램/소거 레이트가 높을 경우, 또는 메모리가 높은 레이트로 사용될 경우에 하나의 임계치가 사용될 수 있고, 메모리의 프로그램/소거 레이트가 낮을 경우, 또는 메모리가 높은 레이트로 사용되지 않을 경우에 또 다른 임계치가 사용될 수 있다. 따라서, 스텝 S66에서, 카운터의 값이 임계치보다 크거나 같은지의 여부를 판정하도록, 카운터의 값은 임계치(또는 그 시간에 적절한 어느 임계치)와 비교된다. 카운터의 값이 임계치 미만이면, 정적 데이터 이동은 트리거되지 않고, 프로세스는 스텝 S60으로 복귀한다.
스텝 S66에서 카운터의 값이 임계치보다 크거나 동일할 경우, 물리 메모리 내에서 정적 데이터를 이동시키는 프로세스가 개시된다. 이동 프로세스를 시작하도록, 물리 메모리(즉 물리 메모리를 제어하는 소프트웨어 및/또는 하드웨어)는 캐시 퇴거들의 임계값이 도달 또는 초과했음을 통지받는다. 실시형태에서, 물리 메모리는 무작위로 정적 데이터를 포함하는 메모리 블록(메모리 위치)을 선택할 수 있고 선택된 메모리 블록을 물리 메모리 내에서 쓰기 헤비 메모리 블록(메모리 위치)으로 움직이는 프로세스를 시작한다. 이는, 물리 메모리 내에서 정적 데이터가 위치되는 개소를 판정하고 이동을 위한 정적 데이터를 선택하도록, 각각의 메모리 블록(논리 메모리 블록 또는 물리 메모리 블록)의 판독 헤비니스를 추적하는 테이블을 참조하는 것을 요할 수 있다. 추가적으로 또는 대안으로, 캐시로부터 퇴거되는 최근 데이터의 논리 어드레스가 물리 메모리에 통신될 수 있어서, 물리 메모리는 물리 메모리 내에서 퇴거되는 데이터의 대응하는 물리 어드레스를 판정할 수 있다(스텝 S68). 상술한 바와 같이, 이는 간단히, 퇴거된 메모리 페이지 또는 퇴거되는 데이터의 논리 어드레스를 통신하는 것을 포함할 수 있다. 물리 메모리는 이를 이용하여, 논리 어드레스를 물리 어드레스로 맵핑함으로써, 캐시로부터 퇴거되는 데이터가 물리 메모리 내의 어디에 상주하는지를 판정할 수 있다. 추가적으로 또는 대안으로, 캐시는 클린 데이터를 퇴거시키고 퇴거되는 클린 데이터가 동일한 위치에서 물리 메모리 내에 쓰여지게 하는 명령어를 송신하도록 구성될 수 있다. 실시형태에서, 이는 매 클린 퇴거 후에 발생할 수 있지만, 스텝 S66이 만족되지 않을 경우(즉 퇴거들의 횟수가 임계치보다 크거나 동일하지 않을 경우), 물리 메모리를 제어하는 소프트웨어/하드웨어는 정보를 폐기/무시할 수 있다. 실시형태에서, 스텝 S66이 만족될 경우, 캐시는 가장 최근에 퇴거된 클린 데이터와 관련하여 명령어를 송신할 수 있다. 임의의 경우에, 물리 메모리는 들어오는 쓰기 데이터가 물리 메모리 내에서 해당 위치에 이미 저장된 데이터와 동일함을 판정할 수 있고, 따라서 들어오는 데이터가 비수정, 정적 데이터임을 결론지을 수 있다.
정적 데이터의 위치(예를 들면 캐시로부터 퇴거되는 데이터)가 물리 메모리(예를 들면 비휘발성 메모리 또는 휘발성 메모리) 내에서 발견될 경우, 마모-평준화 프로세스는 마모 평준화되는 물리 메모리 내에서 쓰기 헤비 영역 내의 프리 메모리 위치를 식별해야 한다(스텝 S70). 물리 메모리의 쓰기 헤비 영역 또는 쓰기 헤비 메모리 블록 내의 프리 메모리 위치를 식별하는데 임의의 기술이 사용될 수 있다. 예를 들면, 테이블(예를 들면 도 3의 테이블(24))은 각각의 메모리 페이지/메모리 블록에 대한 쓰기 횟수를 저장할 수 있고, 각각의 메모리 블록에서 쓰기가 일어날 때마다, 횟수를 증가시킬 수 있다. 테이블은 또한 각각의 메모리 블록이 프리인지 점유되어 있는지의 여부를 지시할 수 있다.
마모-평준화 프로세스는 식별된 정적 데이터를 스토리지 시스템 내의 식별된 프리 메모리 위치에 다시쓰기/이동시키는 것을 포함한다(스텝 S72). 그렇게 함으로써, 이전에 정적 데이터가 저장되어 있던 물리 메모리 내의 위치는 이제 데이터, 바람직하게는 동적 데이터를 저장하는데 프리로 된다. 따라서, 정적 데이터가 쓰기 헤비 위치들로 이동될/움직여질 경우, 물리 메모리 내의 메모리 위치들은 이용 가능해지고, 이에 의해 물리 메모리 내의 보다 많은 위치들에 걸쳐 쓰기가 가능해진다.
선택적으로, 정적 데이터가 물리 메모리 내에서 이동될 때마다 캐시 퇴거 카운터는 제로로 재설정될 수 있다(스텝 S74). 또는, 캐시 퇴거 카운터가 제로로 재설정되지 않을 경우, 각각의 정적 데이터의 이동 이후에 임계치는 증가될 수 있고(예를 들면 정수 곱함), 새로운 임계치가 스텝 S66에서 사용된다. 예를 들면, 캐시 퇴거 카운터의 임계치는 최초에 X로 설정될 수 있다. 정적 데이터의 제1 이동 후에, 임계치는 2X로 설정될 수 있고, 제2 이동 후에, 임계치는 3X로 설정되는 등 할 수 있다.
도 6에 나타난 스텝 S60 내지 S74 각각은 소프트웨어, 하드웨어, 또는 소프트웨어와 하드웨어의 조합을 이용하여 실시될 수 있다. 하드웨어는 CPU(12), 상호접속부(16) 및/또는 메인 메모리(26)(또는 그 컴포넌트)에 위치될 수 있는 메모리 컨트롤러일 수 있다. 바람직하게는, 물리 메모리(17, 18) 내에서 정적 데이터를 이동시킬지의 여부, 및 정적 데이터를 어디로 이동시킬지의 결정은 물리 메모리(17, 18)에 위치되거나, 그에 연결되거나, 그 상에서 동작하는 소프트웨어/하드웨어에 의해 이루어진다.
따라서, 실시형태에서, 정적 데이터를 저장하는 메모리 위치를 식별하는 스텝은, 각각의 메모리 위치에 저장된 데이터의 판독 횟수를 추적하고, 각각의 메모리 위치에서의 판독 횟수가 저장된 데이터가 정적 데이터임을 지시하는지의 여부를 판정하는 것을 포함한다. 예를 들면, 메모리 위치에서의 판독 횟수가 임계값(캐시 퇴거 카운터, 판독 카운터, 또는 달리 지시됨)을 초과할 경우, 메모리 위치가 정적 데이터를 저장함을 상정할 수 있다.
도 5 및 도 6의 실시형태는, 정적 데이터의 캐시 퇴거가 발생할 때마다, 또는 정적 데이터의 캐시 퇴거들의 특정 횟수가 발생할 때마다, 정적 데이터를 물리 메모리 내에서 이동시키는 프로세스를 제공한다. 그러나, 일부 경우에, 이는, 일부 논리 페이지들 또는 물리 메모리 내의 메모리 블록들이 자주 쓰기/다시쓰기될 수 있고 자주 판독될 수 있으므로, 마모-평준화를 행하는 효과적인 방법이 아닐 수 있다. 따라서, 각각의 논리 페이지의 판독 횟수를 고려하거나, 또는 각각의 논리 페이지에서의 판독 횟수 및 쓰기 횟수를 고려하는 마모-평준화 프로세스가 보다 효과적일 수 있다.
도 7은 정적 데이터의 판독의 특정 횟수 후에 스토리지 시스템에서 마모-평준화를 행하는 예시적 스텝의 흐름도이다. 도 5 및 도 6의 실시형태와 달리, 도 7의 실시형태에서, 스토리지 시스템의 물리 메모리 내에서의 정적 데이터의 이동은 캐시로부터 퇴거된 데이터가 특정 횟수로 판독되었을 경우에만 발생한다. 따라서, 이 실시형태는 논리 페이지들/메모리 블록들의 "판독 헤비니스"를 모니터링하고 이를 이용하여 메모리 블록들이 물리 메모리 내에서 이동되어야 할 판독 헤비 메모리 블록들인지의 여부를 판정하는 것에 관련된다. 상술한 바와 같이, "판독 헤비니스"는 얼마나 많은 횟수로 특정 메모리 블록으로부터의 데이터가 판독되었는지, 또는 동일한 메모리 블록에 대한 쓰기 횟수와 비교하여 얼마나 많은 횟수로 메모리 블록으로부터 데이터가 판독되었는지의 척도이다.
프로세스는 스토리지 시스템의 캐시 내의 정적 데이터를 식별함으로써 시작된다(스텝 S80). 따라서, 이 예에서, 우선 정적 데이터가 마모 평준화되는 물리 메모리에서가 아니라, 캐시 내에서 식별된다. 캐시 내의 정적 데이터는 마모 평준화되는 메모리 내에 저장된 데이터에 대응하고, 캐시는 어느 데이터가 정적임을 식별하는데 사용된다. 이 정보가 알려지면, 메모리 내에서 정적 데이터의 대응하는 위치가 식별될 수 있다. 정적 데이터는 캐시에 의해 실시되는 캐시 퇴거 스킴을 통해 식별될 수 있다. 캐시 퇴거 스킴은, 예를 들면, 데이터가 정적(예를 들면 판독-전용) 데이터이거나 특정 시간 길이 동안 액세스되지 않았거나, 또는 캐시 내에 데이터를 유지하는 것을 보증하는데 충분히 자주 액세스되지 않았을 경우, 캐시로부터 데이터를 퇴거/제거하는 것을 포함할 수 있다. 스토리지 시스템에 의해 채용되는 캐시 퇴거 스킴은 데이터가 정적인지의 여부를 판정하는데 사용될 파라미터들을 자체적으로 정의할 수 있다. 일단 식별되면, 캐시는 캐시로부터 정적 데이터를 퇴거시킨다(스텝 S82).
이 실시형태에서, 캐시로부터의 정적 데이터의 각각의 퇴거는 메모리 블록 단위로 예를 들면 도 3에서의 카운터(22)를 이용하여 카운트된다. 메모리 블록의 캐시 퇴거들의 횟수(또는 캐시로부터/물리 메모리로부터의 판독 횟수)는 모니터링되고 테이블(예를 들면 테이블(24)) 내에 기록될 수 있다. 테이블은 또한 각각의 논리 페이지/메모리 페이지에 대한 논리 어드레스들로부터 물리 어드레스들로의 맵들을 포함할 수 있다. 따라서, 식별된 정적 데이터가 캐시로부터 퇴거되면, 해당 정적 데이터(즉 정적 데이터의 논리 어드레스)와 연관된 판독 카운터는 1씩 증가/증분될 수 있다(스텝 S84). 논리 페이지가 캐시로부터 퇴거될 때마다 각각의 논리 페이지와 연관된 판독 카운터의 값은 제로로 재설정되지 않고 1씩 증가될 수 있고, 또는 논리 페이지에 대응하는 데이터가 물리 메모리 내에서 이동될 때마다 제로로 재설정될 수 있다. 캐시 퇴거 카운터가 증가되는 양은 임의적이고, 임의의 값일 수 있음이 이해될 것이다. 또한 정적 데이터가 캐시로부터 퇴거될 때마다 캐시 퇴거 카운터는 동등하게 초기값으로부터 감소될 수 있음이 이해될 것이다. 이 경우에, 캐시 퇴거 카운터가 제로에 도달하면, 데이터는 물리 메모리 내에서 이동될 수 있고, 캐시 퇴거 카운터는 초기값으로 재설정될 수 있다.
이 실시형태에서, 정적 데이터는 데이터가 특정 횟수 판독된 후에 이동된다. 따라서, 정적 데이터 이동의 액션을 트리거하는 판독들의 임계치가 있을 수 있다. 임계치는 임의의 수일 수 있다. 예를 들면, 임계치는 하나의 판독으로부터 수백의 판독들까의 어느 것일 수 있다(임계치는 캐시 퇴거가 관찰될 때마다 카운터를 증가시킴으로써 도달될 수 있거나, 또는 캐시 퇴거가 관찰될 때마다 감소되는 카운터의 초기값일 수 있다). 임계치는 물리 메모리의 작업부하, 및/또는 얼마나 적극적 마모-평준화가 요구되는지에 의존할 수 있다. 따라서, 일부 타입의 물리 메모리에 대해, 예를 들면 메모리 타입의 내구성값이 낮을 경우, 마모-평준화는 적극적일 수 있다. 마모-평준화는 메모리의 사용량에 의존하여, 예를 들면 메모리가 많은 쓰기들이 발생하는 환경에서 사용될 경우 적극적일 수 있다. 임계치는 변할 수 있거나(또는 시간- 또는 작업부하-의존적일 수 있음) 또는 복수의 임계치들이 있을 수 있다. 예를 들면, 메모리의 프로그램/소거 레이트가 높을 경우, 또는 메모리가 높은 레이트로 사용될 경우에 하나의 임계치가 사용될 수 있고, 메모리의 프로그램/소거 레이트가 낮을 경우, 또는 메모리가 높은 레이트로 사용되지 않을 경우, 또 다른 임계치가 사용될 수 있다. 따라서, 스텝 S86에서, 퇴거되는 데이터에 대한 판독 카운터의 값은, 카운터의 값이 임계치보다 크거나 같은지의 여부를 판정하도록, 판독들의 임계치(또는 그 때에 적절한 어떠한 판독들의 임계치)와 비교된다. 카운터의 값이 임계치 미만이면, 논리 페이지가 판독 헤비 페이지로 간주되지 않으므로, 정적 데이터 이동이 트리거되지 않고, 프로세스는 스텝 S80으로 복귀한다.
스텝 S86에서 카운터의 값이 임계치보다 크거나 동일할 경우, 물리 메모리 내에서 정적 데이터를 이동시키는 프로세스가 개시된다. 이동 프로세스를 시작하도록, 물리 메모리(즉 물리 메모리를 제어하는 소프트웨어 및/또는 하드웨어)는 퇴거되는 데이터에 대해 판독들의 임계값이 도달했거나 또는 초과되었음을 통지받는다. 퇴거되는 데이터의 논리 어드레스는 물리 메모리에 통신될 수 있어서, 물리 메모리는 물리 메모리 내에서 퇴거되는 데이터의 대응하는 물리 어드레스를 판정할 수 있다(스텝 S88). 상술한 바와 같이, 이는 단순히 퇴거된 메모리 페이지 또는 퇴거되는 데이터의 논리 어드레스를 통신하는 것을 포함할 수 있다. 물리 메모리는 이를 이용하여, 논리 어드레스를 물리 어드레스로 맵핑함으로써, 캐시로부터 퇴거되는 데이터가 물리 메모리 내에 상주하는 개소를 판정할 수 있다. 추가적으로 또는 대안으로, 캐시는 클린 데이터를 퇴거시키고 퇴거되는 클린 데이터가 동일한 위치에서 물리 메모리 내에 쓰기되게 하는 명령어를 송신하도록 구성될 수 있다. 실시형태에서, 이는 매 클린 퇴거 후에 발생할 수 있지만, 물리 메모리를 제어하는 소프트웨어/하드웨어는 스텝 S86이 만족되지 않을 경우(즉 논리 페이지의 판독 횟수가 임계치보다 크거나 동일할 경우) 정보를 폐기/무시할 수 있다. 실시형태에서, 스텝 S86이 만족될 경우, 캐시는 가장 최근에 퇴거된 클린 데이터와 관련하여 명령어를 송신할 수 있다. 임의의 경우에, 물리 메모리는 들어오는 쓰기 데이터가 물리 메모리 내에서 해당 위치에 이미 저장된 데이터와 동일함을 판정할 수 있고, 따라서 들어오는 데이터가 비수정, 정적 데이터임을 결론지을 수 있다.
정적 데이터(예를 들면 캐시로부터 퇴거되는 데이터)의 위치가 물리 메모리(예를 들면 비휘발성 메모리) 내에서 발견되면, 마모-평준화 프로세스는 물리 메모리 내에서 쓰기 헤비 영역 내의 프리 메모리 위치를 식별해야 한다(스텝 S90). 쓰기 헤비 영역 또는 물리 메모리의 쓰기 헤비 메모리 블록 내의 프리 메모리 위치를 식별하는데 임의의 기술이 사용될 수 있다. 예를 들면, 테이블(예를 들면 도 3의 테이블(24))은 각각의 메모리 페이지/메모리 블록에 대한 쓰기 횟수를 저장할 수 있고, 각각의 메모리 블록에서 쓰기가 일어날 때마다, 횟수를 증가시킬 수 있다. 테이블은 또한 각각의 메모리 블록이 프리인지 점유되어 있는지의 여부를 지시할 수 있다.
마모-평준화 프로세스는 식별된 정적 데이터를 물리 메모리 내에서 식별된 프리 메모리 위치로 다시쓰기/이동시키는 것을 포함한다(스텝 S92). 그렇게 함으로써, 이전에 정적 데이터가 저장되어 있던 물리 메모리 내의 위치는 이제 데이터, 바람직하게는 동적 데이터를 저장하는데 프리로 된다. 따라서, 물리 메모리 내의 메모리 위치들은 정적 데이터가 쓰기 헤비 위치들로 이동될/움직여질 경우 이용 가능해지고, 이에 의해 물리 메모리 내의 보다 많은 위치들에 걸쳐 쓰기가 가능해진다.
선택적으로, 메모리 페이지와 연관된 데이터가 물리 메모리 내에서 이동될 때마다 메모리 페이지에 대한 판독 카운터는 제로로 재설정될 수 있다(스텝 S94). 또는, 판독 카운터가 제로로 재설정되지 않을 경우, 메모리 페이지와 연관된 데이터의 각각의 이동 후에 해당 특정 메모리 페이지에 대해 임계치가 증가될 수 있고(예를 들면 정수로 곱함), 스텝 S86에서 해당 메모리 페이지에 대해 새로운 임계치가 사용된다. 예를 들면, 판독 카운터의 임계치는 최초에 X로 설정될 수 있다. 정적 데이터의 제1 이동 이후에, 임계치는 2X로 설정될 수 있고, 제2 이동 이후에, 임계치는 3X로 설정되는 등 될 수 있다. 임계치(또는 새로운 임계치)는 관련 논리 어드레스와 연관되어 테이블(24) 내에 저장될 수 있다.
도 7에 나타난 스텝 S80 내지 S94의 각각은 소프트웨어, 하드웨어, 또는 소프트웨어와 하드웨어의 조합을 이용하여 실시될 수 있다. 하드웨어는 CPU(12), 상호접속부(16) 및/또는 메인 메모리(26)(또는 그 컴포넌트)에 위치될 수 있는 메모리 컨트롤러일 수 있다. 바람직하게는, 물리 메모리(17, 18) 내에서 정적 데이터를 이동시킬지의 여부, 및 정적 데이터를 어디로 이동시킬지의 결정은 물리 메모리(17, 18)에 위치되거나, 그에 연결되거나, 그 상에서 동작하는 소프트웨어/하드웨어에 의해 이루어진다.
실시형태에서, 저장된 정적 데이터를 쓰기하는 스텝은, 식별된 메모리 위치에서의 저장된 데이터의 판독 횟수가 임계 판독 횟수보다 크거나 같을 경우, 저장된 정적 데이터를 프리 메모리 위치에 쓰기하는 것을 포함한다.
실시형태에서, 방법은 스토리지 시스템 내의 테이블 내에 판독 횟수를 저장하는 것을 포함한다. 정적 데이터를 저장하는 메모리 위치는 복수의 물리 메모리 어드레스들 중의 물리 메모리 어드레스일 수 있고, 판독 횟수를 저장하는 스텝은 복수의 물리 메모리 어드레스들의 각각에 대해, 물리 메모리 어드레스에서 저장된 데이터의 판독 횟수를 저장하는 것을 포함할 수 있다. 메모리 위치는 스토리지 시스템 내의 복수의 메모리 블록들 중의 메모리 블록일 수 있고, 판독 횟수를 저장하는 스텝은 복수의 메모리 블록들의 각각에 대해, 메모리 블록에 저장된 데이터의 판독 횟수를 저장하는 것을 포함할 수 있다.
실시형태에서, 판독 횟수를 추적하는 것은, 스토리지 시스템의 메모리(예를 들면 휘발성 메모리(17) 또는 NVM(18)) 내의 각각의 메모리 위치에서 데이터의 판독 또는 데이터의 캐시 퇴거가 관찰될 때마다, 카운터(예를 들면 캐시 퇴거 카운터 또는 판독 카운터)를 증가시키는 것을 포함한다. 저장된 정적 데이터를 쓰기하는 스텝은, 카운터가 임계치보다 크거나 같을 경우, 저장된 정적 데이터를 프리 메모리 위치에 쓰기하는 것을 포함할 수 있다.
도 8은 마모 평준화되는 물리 메모리의 각각의 메모리 위치에서(예를 들면 논리 어드레스 또는 물리 어드레스)의 판독 횟수 및 쓰기 횟수를 추적함으로써 스토리지 시스템 내의 마모-평준화를 행하는 예시적 스텝의 흐름도이다. 도 5 및 도 6의 실시형태와 달리, 도 8의 실시형태에서, 스토리지 시스템의 물리 메모리 내에서의 정적 데이터의 이동은, 캐시로부터 퇴거되는 데이터가 특정 상태값을 가질 경우에만 발생한다. 각각의 메모리 위치(예를 들면 각각의 메모리 블록, 각각의 물리 어드레스 등)에 대한 상태값은, 메모리 위치에 저장된 데이터의 판독/정적 데이터 퇴거들의 횟수 및 메모리 위치에 대한 쓰기/다시쓰기 횟수에 의거하여 판정된다. 어떻게 상태값이 판정되는지는 이하 도 11 및 도 12a와 관련하여 보다 상세히 설명한다. 따라서, 이 실시형태는 논리 페이지들/메모리 블록들의 쓰기 횟수뿐만 아니라 판독 헤비니스를 모니터링하는 것과 관련되고, 이를 이용하여 메모리 블록들이 물리 메모리 내에서 이동되어야 할 판독 헤비 메모리 블록들인지의 여부를 판정한다. 환언하면, 이 실시형태는, 캐시로부터 퇴거되는 데이터는, 적어도 경우에 따라서는, 데이터가 물리 메모리에 다시쓰기되는 퇴거되는 것으로 될 수 있어, 정적 데이터 퇴거가 발생할 때마다 데이터를 이동시키는 것은 유용하거나 효과적이지 않을 수 있다는 사실을 고려한다.
프로세스는 스토리지 시스템의 캐시 내의 정적 데이터를 식별함으로써 시작된다(스텝 S100). 따라서, 이 예에서, 우선 정적 데이터가, 마모 평준화되는 물리 메모리에서가 아니라 캐시 내에서 식별된다. 캐시 내의 정적 데이터는 마모 평준화되는 메모리 내에 저장된 데이터에 대응하고, 단 캐시는 어느 데이터가 정적임을 식별하는데 사용된다. 이 정보가 알려지면, 메모리 내의 정적 데이터의 대응하는 위치가 식별될 수 있다. 정적 데이터는 캐시에 의해 실시되는 캐시 퇴거 스킴을 통해 식별될 수 있다. 캐시 퇴거 스킴은, 예를 들면, 데이터가 정적(예를 들면 판독-전용) 데이터이거나 특정 시간 길이 동안 액세스되지 않았거나, 또는 캐시 내에 데이터를 유지하는 것을 보증하는데 충분히 자주 액세스되지 않았을 경우, 캐시로부터 데이터를 퇴거/제거하는 것을 포함할 수 있다. 스토리지 시스템에 의해 채용되는 캐시 퇴거 스킴은 데이터가 정적인지의 여부를 판정하는데 사용될 파라미터들을 자체적으로 정의할 수 있다. 일단 식별되면, 캐시는 캐시로부터 정적 데이터를 퇴거시킨다(스텝 S102).
이 실시형태에서, 캐시(물리 메모리의 메모리 블록에 저장된 데이터에 대응함)로부터의 데이터의 각각의 판독, 및 물리 메모리의 메모리 블록 내에의 데이터의 각각의 쓰기는 메모리 블록 단위로 추적된다. 메모리 블록의 쓰기/다시쓰기 횟수뿐만 아니라 메모리 블록의 캐시 퇴거들의 횟수(또는 캐시로부터/물리 메모리로부터의 판독 횟수)가 모니터링되어 테이블(예를 들면 테이블(24)) 내에 기록될 수 있다. 실시형태에서, 판독 횟수 및 쓰기 횟수는 각각의 메모리 블록에 대한 단일 상태값으로 변환될 수 있고, 상태값은 메모리 블록의 판독 헤비니스를 지시한다. 테이블은 또한 각각의 메모리 블록에 대한 논리 어드레스들로부터 물리 어드레스들로의 맵들을 포함할 수 있다. 따라서, 식별된 정적 데이터가 캐시로부터 퇴거되면, 메모리 블록/정적 데이터의 상태값이 업데이트된다(스텝 S104).
이 실시형태에서, 물리 메모리의 메모리 블록 내에 위치되는 정적 데이터는, 메모리 블록의 대응하는 상태값이 임계치보다 크거나 같을 경우, 이동된다. 임계치는 메모리 블록으로부터 물리 메모리 내의 또 다른 위치로의 정적 데이터 이동의 액션을 트리거하는 특정 판독 헤비니스 값을 지시할 수 있다. 임계치는 임의의 수일 수 있다. 상술한 바와 같이, 임계치는 물리 메모리의 작업부하, 및/또는 얼마나 적극적으로 마모-평준화가 요구되는지에 의존할 수 있다. 따라서, 스텝 S106에서, 퇴거되는 정적 데이터가 위치되는 물리 메모리의 메모리 블록(예를 들면 논리 페이지)과 연관된 상태값이 임계치와 비교된다. 상태값이 임계치 미만일 경우, 논리 페이지는 판독 헤비 페이지로 간주되지 않으므로, 정적 데이터 이동은 트리거되지 않고, 프로세스는 스텝 S100으로 복귀한다.
스텝 S106에서 상태값이 임계치보다 크거나 동일할 경우, 물리 메모리 내에서 정적 데이터를 이동시키는 프로세스가 개시된다. 이동 프로세스를 시작하도록, 물리 메모리(즉 물리 메모리를 제어하는 소프트웨어 및/또는 하드웨어)는 퇴거되는 데이터에 대해 임계 상태값이 도달 또는 초과되었음을 통지받는다. 퇴거되는 데이터의 논리 어드레스는 물리 메모리에 통신될 수 있어서, 물리 메모리는 물리 메모리 내에서 퇴거되는 데이터의 대응하는 물리 어드레스를 판정할 수 있다(스텝 S108). 상술한 바와 같이, 이는 단순히 퇴거된 메모리 페이지 또는 퇴거되는 데이터의 논리 어드레스를 통신하는 것을 포함할 수 있다. 물리 메모리는 이를 이용하여, 논리 어드레스를 물리 어드레스로 맵핑함으로써, 캐시로부터 퇴거되는 데이터가 물리 메모리 내에 상주하는 개소를 판정할 수 있다.
정적 데이터(예를 들면 캐시로부터 퇴거되는 데이터)의 위치가 물리 메모리(예를 들면 비휘발성 메모리) 내에서 발견되면, 마모-평준화 프로세스는 물리 메모리 내에서 쓰기 헤비 영역 내의 프리 메모리 위치를 식별해야 한다(스텝 S110). 쓰기 헤비 영역 또는 물리 메모리의 쓰기 헤비 메모리 블록 내의 프리 메모리 위치를 식별하는데 임의의 기술이 사용될 수 있다. 예를 들면, 각각의 메모리 페이지/물리 메모리의 메모리 블록에 대한 상태값들은 쓰기 헤비 위치들을 식별 가능하게 할 수 있다. 특정 상태값들은 메모리 블록이 쓰기 헤비인지의 여부를 지시할 수 있는 한편, 다른 상태값들은 메모리 블록이 판독 헤비인지의 여부를 지시할 수 있다. 테이블은 또한 각각의 메모리 블록이 프리인지 점유되어 있는지의 여부를 지시할 수 있다.
마모-평준화 프로세스는 식별된 정적 데이터를 물리 메모리 내에서 식별된 프리 메모리 위치로 다시쓰기/이동시키는 것을 포함한다(스텝 S112). 그렇게 함으로써, 정적 데이터가 이전에 저장되었던 물리 메모리의 위치는 이제 데이터, 바람직하게는 동적 데이터를 저장하도록 프리로 된다. 따라서, 정적 데이터가 쓰기 헤비 위치들로 이동될/움직여질 경우, 물리 메모리 내의 메모리 위치들이 이용 가능해지고, 이에 의해 물리 메모리 내의 보다 많은 위치들에 걸쳐 쓰기가 가능해진다.
데이터가 이동되어 나간 메모리 블록의 상태값(또는 이동되는 데이터와 연관된 논리 페이지의 상태값)은 이동(다시쓰기) 후에 업데이트될 수 있다(스텝 S114). 이 방식으로, 각각의 메모리 블록/논리 페이지에 대한 상태값은 판독들 및 쓰기들을 고려한다(상태값은 또한 데이터가 메모리 블록에 쓰기/재쓰기될 때마다 업데이트될 수 있다).
도 8에 나타난 스텝 S100 내지 S114 각각은 소프트웨어, 하드웨어, 또는 소프트웨어와 하드웨어의 조합을 이용하여 실시될 수 있다. 하드웨어는 상호접속부(16) 및/또는 메인 메모리(26)(또는 그 컴포넌트)에 위치될 수 있는 메모리 컨트롤러일 수 있다. 바람직하게는, 물리 메모리(17, 18) 내에서 정적 데이터를 이동시킬지의 여부, 및 정적 데이터를 어디로 이동시킬지의 결정은 물리 메모리(17, 18)에 위치되거나, 그에 연결되거나, 그 상에서 동작하는 소프트웨어/하드웨어에 의해 이루어진다.
실시형태에서, 판독 횟수를 추적하는 것은, 카운터를 초기값으로 설정하는 것; 식별된 메모리 위치에서 판독이 관찰될 때마다 카운터의 초기값을 제1 값만큼 수정하는 것; 및 식별된 메모리 위치에서의 데이터가 수정 또는 다시쓰기될 경우 카운터를 제2 값만큼 수정하는 것을 포함할 수 있다. 저장된 정적 데이터를 쓰기하는 스텝은, 카운터가 임계치에 도달할 경우 데이터를 프리 메모리 위치에 쓰기하는 것; 및 데이터가 프리 메모리 위치에 쓰기된 후에, 식별된 메모리 위치에 대해, 카운터를 제3 값만큼 수정하는 것을 포함할 수 있다.
바람직하게는, 제1 값에 의해 적용된 수정은 (적어도 수학 함수/연산의 관점에서), 제2 값에 의해 적용된 수정과 수학적으로 반대이다. 즉, 예를 들면, 제1 값이 카운터의 초기값에 가산되면, 제2 값은 카운터로부터 감산된다. 바람직하게는, 제1 값 및 제2 값은 상이하다. 예를 들면, 제1 값은 +5인 한편, 제2 값은 -2일 수 있다(개념을 설명하기 위해 이들은 단지 예시적인 값임을 이해할 것이다). 따라서, 실시형태에서, 판독 횟수를 추적하는 것은, 카운터를 초기값으로 설정하는 것; 식별된 메모리 위치에서 판독이 관찰될 때마다 카운터의 초기값을 제1 값만큼 감소시키는 것; 및 식별된 메모리 위치에서 데이터가 수정 또는 다시쓰기될 경우 카운터를 제2 값만큼 증가시키는 것을 포함할 수 있다. 저장된 정적 데이터를 쓰기하는 스텝은, 카운터가 임계치보다 크거나 같을 경우, 데이터를 프리 메모리 위치에 쓰기하는 것; 및 식별된 메모리 위치에 대해, 데이터가 프리 메모리 위치에 쓰기된 후에, 카운터를 제3 값만큼 증가시키는 것을 포함할 수 있다.
이하 도 11, 12a 및 12b를 참조하여 설명하는 바와 같이, 실시형태에서, 저장된 정적 데이터를 쓰기하는 스텝은, 카운터가 임계치보다 크거나 같고나서 후속되어 행해질 수 있다. 또는, 저장된 정적 데이터를 쓰기하는 스텝은, 스토리지 시스템(또는 스토리지 시스템의 컴포넌트)에서의(또는 그것의) 활동 레벨을 모니터링하는 것; 및 활동 레벨이 낮을 경우에 저장된 정적 데이터를 쓰기하는 것을 포함할 수 있다. 이 문맥에서 용어 '낮음'은 일반적으로 스토리지 시스템(또는 스토리지 시스템의 컴포넌트, 예를 들면 마모 평준화되는 메모리)이 보통보다 덜 자주 액세스될 경우를 의미한다. 예를 들면, 메모리가 평균 액세스 레이트/액세스 빈도를 가질 경우, 활동 레벨은 액세스 레이트/액세스 빈도가 평균 미만일 경우 '낮음'이다. CPU에 의해 사용되는/작업되는 활동 데이터 세트(또는 작업 데이터 세트)는 CPU에 가까운 캐시 레벨들 내에 저장되므로, 메모리는 덜 액세스되는 시간들/단계들을 거칠 수 있어, 최종 레벨 캐시 및/또는 물리 메모리는 다른 시간들/단계들만큼 많이 액세스되지 않는다. 또는, 메모리는, CPU가 비지 상태가 아니어서 덜 액세스되는 시간들/단계들을 거칠 수 있다. 예를 들면, 스토리지 시스템, 또는 스토리지 시스템의 컴포넌트가 비지 상태일 경우(예를 들면 특정 수의 동작들/작업들을 행하고 있을 경우), 스토리지 시스템(또는 그 컴포넌트)은 덜 비지 상태인 시점에 메모리 내에서 정적 데이터를 이동시키는 것이 더 효율적일 수 있다. 활동 레벨이 낮은(또는 액세스 레이트/빈도가 낮은) 단계들은 물리 메모리를 요하는 임의의 트랜잭션들을 지연시킬 필요 없이 물리 메모리가 메인터넌스 작업들(예를 들면 마모-평준화)을 행할 기회를 제공한다.
마모-평준화 방법은 스토리지 시스템 내의 테이블에 카운터의 값을 저장하는 것을 포함할 수 있다. 실시형태에서, 정적 데이터를 저장하는 메모리 위치는 복수의 물리 메모리 어드레스들 중의 물리 메모리 어드레스이고, 카운터의 값을 저장하는 스텝은 복수의 물리 메모리 어드레스들의 각각에 대한 카운터의 값을 저장하는 것을 포함한다. 실시형태에서, 메모리 위치는 스토리지 시스템 내의 복수의 메모리 블록들 중의 메모리 블록이고, 카운터의 값을 저장하는 스텝은, 복수의 메모리 블록들마다의 카운터의 값을 저장하는 것을 포함한다. 테이블은 논리 메모리 어드레스들을 물리 메모리 어드레스들로 맵핑하는 어드레스 맵핑 테이블일 수 있다.
상술한 바와 같이, 마모-평준화 프로세스의 부분으로서 정적 데이터가 식별될 수 있는 여러가지 방법이 있다. 두 가지 예시적 방법을 도 9 및 도 10에 대해 이하 설명한다.
도 9는 캐시 내의 정적 데이터 퇴거들을 물리 메모리에 통신함으로써 메모리 시스템 내에서 마모-평준화를 행하는 예시적 스텝의 흐름도이다. 프로세스는 스토리지 시스템의 캐시 내의 정적 데이터/판독-전용 데이터를 식별하는 것을 시작한다(스텝 S120). 따라서, 이 예에서, 우선 정적 데이터가, 마모 평준화되는 물리 메모리에서가 아니라, 캐시 내에서 식별된다. 정적/판독-전용 데이터는 캐시에 의해 실시되는 캐시 퇴거 스킴을 통해 식별될 수 있다. 캐시 퇴거 스킴은, 예를 들면, 데이터가 정적(예를 들면 판독-전용) 데이터이거나 특정 시간 길이 동안 액세스되지 않았거나, 또는 캐시 내에 데이터를 유지하는 것을 보증하는데 충분히 자주 액세스되지 않았을 경우, 캐시로부터 데이터를 퇴거/제거하는 것을 포함할 수 있다. 일단 식별되면, 캐시는 캐시로부터 정적 데이터를 퇴거시킨다(스텝 S122).
이 실시형태에서, 캐시로부터의 메모리 블록의 각각의 판독(또한 경우에 따라서는 물리 메모리 내로의 메모리 블록의 각각의 쓰기)은 메모리 블록 단위로 추적된다. 메모리 블록의 캐시 퇴거들의 횟수(또는 캐시로부터/물리 메모리로부터의 판독 횟수)는 모니터링되고 테이블(예를 들면 테이블(24)) 내에 기록될 수 있다. 실시형태에서, 메모리 블록의 쓰기/다시쓰기 횟수가 또한 기록될 수 있다. 실시형태에서, 판독 횟수 및 쓰기 횟수는 각각의 메모리 블록에 대한 단일 상태값으로 변환될 수 있고, 상태값은 메모리 블록의 판독 헤비니스를 지시한다. 실시형태에서, 상태값은 판독 횟수만을 고려할 수 있다. 테이블은 또한 각각의 메모리 블록에 대한 논리 어드레스들로부터 물리 어드레스들로의 맵들을 포함할 수 있다. 따라서, 식별된 정적 데이터가 캐시로부터 퇴거되면, 메모리 블록의 상태값/정적 데이터가 업데이트된다(스텝 S124).
퇴거는 마모 평준화되는 물리 메모리(예를 들면 비휘발성 메모리)에 통신될 수 있다(스텝 S126). 물리 메모리에 송신된 '메시지' 또는 신호는 캐시로부터 퇴거되는 데이터의 논리 어드레스를 포함할 수 있다. 물리 메모리는 논리 어드레스를 이용하여 대응하는 물리 어드레스, 즉 물리 메모리 내의 퇴거되는 데이터의 위치를 판정할 수 있다(스텝 S128). 이는, 논리 어드레스들을 물리 어드레스들로 맵핑하는 맵핑 테이블을 참조하는 것을 포함할 수 있다. 물리 메모리는, 위치의 판독 헤비니스를 판정하도록, 판정된 물리 어드레스의 상태값을 검색할 수 있다(스텝 S130). 각각의 논리 어드레스/물리 어드레스의 상태값은 맵핑 테이블에 저장될 수 있거나, 별개의 테이블에 저장될 수 있다.
이 실시형태에서, 메모리 블록의 대응하는 상태값이 임계치보다 크거나 같을 경우, 물리 메모리 내에서 정적 데이터가 이동된다. 임계치는 메모리 블록으로부터 물리 메모리 내의 또 다른 위치로의 정적 데이터 이동의 액션을 트리거하는 특정 판독 헤비니스 값을 지시할 수 있다. 임계치는 임의의 수일 수 있다. 상술한 바와 같이, 임계치는 물리 메모리의 작업부하, 및/또는 얼마나 적극적 마모-평준화가 요구되는지에 의존할 수 있다. 따라서, 스텝 S132에서, 퇴거되는 정적 데이터가 위치되는 물리 메모리의 메모리 블록(예를 들면 논리 페이지)과 연관된 상태값은 임계치와 비교된다. 상태값이 임계치 미만일 경우, 논리 페이지는 판독 헤비 페이지로 간주되지 않으므로, 정적 데이터 이동은 트리거되지 않고, 프로세스는 스텝 S120으로 복귀한다.
스텝 S132에서 상태값이 임계치보다 크거나 동일할 경우, 물리 메모리 내에서 정적 데이터를 이동시키는 프로세스가 개시된다. 물리 메모리(즉 물리 메모리를 제어하는 소프트웨어 및/또는 하드웨어)는 메모리 내에서 쓰기 헤비 영역 내의 프리 메모리 위치를 식별한다(스텝 S134). 물리 메모리의 쓰기 헤비 영역 또는 쓰기 헤비 메모리 블록 내의 프리 메모리 위치를 식별하는데 임의의 기술이 사용될 수 있다. 예를 들면, 각각의 메모리 페이지/메모리 블록에 대한 상태값들은 쓰기 헤비 위치들을 식별 가능하게 할 수 있다. 특정 상태값들은 메모리 블록이 쓰기 헤비인지의 여부를 지시할 수 있는 한편, 다른 상태값들은 메모리 블록이 판독 헤비인지의 여부를 지시할 수 있다. 테이블은 또한 각각의 메모리 블록이 프리인지 점유되어 있는지의 여부를 지시할 수 있다.
마모-평준화 프로세스는 식별된 정적 데이터를 물리 메모리 내의 식별된 프리 메모리 위치로 다시쓰기/이동시키는 것을 포함한다(스텝 S136). 그렇게 함으로써, 이전에 정적 데이터가 저장되어 있던 물리 메모리 내의 위치는 이제 데이터, 바람직하게는 동적 데이터를 저장하는데 프리로 된다. 따라서, 정적 데이터가 쓰기 헤비 위치들로 이동될/움직여질 경우, 물리 메모리 내에서 메모리 위치들이 이용 가능해지고, 이에 의해 물리 메모리 내의 보다 많은 위치들에 걸쳐 쓰기가 가능해진다.
이동(다시쓰기) 이후에 데이터가 이동되어 나간 메모리 블록의 상태값(또는 이동되는 데이터와 연관된 논리 페이지의 상태값)이 업데이트될 수 있다. 이 방식으로, 각각의 메모리 블록/논리 페이지에 대한 상태값은 판독들 및 쓰기들을 고려한다(상태값은 또한 데이터가 메모리 블록에 쓰기/다시쓰기될 때마다 업데이트될 수 있다).
도 9에 나타난 스텝 S120 내지 S136 각각은 소프트웨어, 하드웨어, 또는 소프트웨어와 하드웨어의 조합을 이용하여 실시될 수 있다. 하드웨어는 CPU(12), 상호접속부(16) 및/또는 메인 메모리(26)(또는 그 컴포넌트)에 위치될 수 있는 메모리 컨트롤러일 수 있다. 바람직하게는, 물리 메모리(17, 18) 내의 정적 데이터를 이동시킬지의 여부, 및 정적 데이터를 어디로 이동시킬지의 결정은 물리 메모리(17, 18)에 위치되거나, 그에 연결되거나, 그 상에서 동작하는 소프트웨어/하드웨어에 의해 이루어진다.
도 10은 정적 데이터를 물리 메모리(예를 들면 비휘발성 메모리) 내로 다시쓰기함으로써 스토리지 시스템 내의 마모-평준화를 행하는 예시적 스텝의 흐름도이다. 이 실시형태에서, 정적 데이터가 마모 평준화되는 물리 메모리 내에서 식별된다. 물리 메모리가 물리 메모리 내로 쓰기 위한 쓰기 데이터, 및 물리 메모리에서 수신된 데이터가 어디에 쓰기될지에 대한 명령어들을 수신할 경우, 프로세스가 시작된다(스텝 S140). 수신된 데이터가 어디에 쓰기될지에 대한 명령어들은 특정 물리 어드레스를 포함할 수 있다. 명령어들은 이제 메모리 내에 다시 쓰기되는 데이터를 퇴거한 캐시로부터 수신될 수 있다.
물리 메모리는 지정된 위치가 수신된 쓰기 데이터에 대해 프리인지의 여부를 판정한다(스텝 S142). 위치가 프리일 경우, 수신된 쓰기 데이터는 프리 위치 내에 쓰기된다(스텝 S144). 이 경우에, 물리 메모리는 수신된 쓰기 데이터가 물리 메모리 내에 이미 저장되어 있지 않은 새로운 데이터라고 상정할 수 있고, 정적 데이터를 식별하는 프로세스는 종료된다.
지정된 위치가 프리가 아닐 경우, 물리 메모리는 지정된 위치에 이미 저장된 데이터가 수신된 쓰기 데이터와 동일한지의 여부를 판정한다(스텝 S146). 이는 데이터의 2 세트들의 일부 종류의 비교를 행하는 것을 포함할 수 있다. 저장된 데이터가 수신된 쓰기 데이터와 동일하지 않을 경우, 물리 메모리는 수신된 쓰기 데이터가 물리 메모리 내에 이미 저장되지 않은 새로운 데이터라고 상정할 수 있다. 물리 메모리는 수신된 쓰기 데이터를 저장할 대체 위치를 찾을 수 있고(스텝 S148), 정적 데이터를 식별하는 프로세스는 종료된다.
지정된 위치에서의 저장된 데이터가 수신된 쓰기 데이터와 동일할 경우, 물리 메모리는 수신된 쓰기 데이터가 정적 데이터(예를 들면 판독-전용 데이터)라고 상정하도록 구성될 수 있다. 이 경우에, 물리 메모리는 식별된 정적 데이터를 갖는다.
물리 메모리는 예를 들면 상술한 기술 중 하나를 이용하여 물리 메모리 내에서 식별된 정적 데이터를 이동시킬지의 여부를 결정할 수 있다. 실시형태에서, 물리 메모리는, 위치의 판독 헤비니스를 판정하도록, 지정된 위치의 상태값을 검색할 수 있다(스텝 S150). 각각의 위치의 상태값은 맵핑 테이블에 저장될 수 있거나, 또는 별개의 테이블에 저장될 수 있다. 식별된 정적 데이터는, 지정된 위치의 대응하는 상태값이 임계치보다 크거나 같을 경우, 이동될 수 있다. 임계치는 메모리 블록으로부터 물리 메모리 내에서의 또 다른 위치로의 정적 데이터 이동의 액션을 트리거하는 특정 판독 헤비니스 값을 지시할 수 있다. 임계치는 임의의 수일 수 있다. 상술한 바와 같이, 임계치는 물리 메모리의 작업부하, 및/또는 얼마나 적극적 마모-평준화가 요구되는지에 의존할 수 있다. 따라서, 스텝 S152에서, 지정된 위치와 연관된 상태값이 임계치와 비교된다. 상태값이 임계치 미만일 경우, 지정된 위치가 판독 헤비 위치로 간주되지 않으므로, 정적 데이터 이동이 트리거되지 않고, 프로세스는 스텝 S140으로 복귀한다.
스텝 S152에서 상태값이 임계치보다 크거나 같다고 판정될 경우, 물리 메모리 내에서 정적 데이터를 이동시키는 프로세스가 개시된다. 물리 메모리(즉 물리 메모리를 제어하는 소프트웨어 및/또는 하드웨어)는 물리 메모리 내에서 쓰기 헤비 영역 내의 프리 메모리 위치를 식별한다(스텝 S154). 물리 메모리의 쓰기 헤비 영역 또는 쓰기 헤비 메모리 블록 내의 프리 메모리 위치를 식별하는데 임의의 기술이 사용될 수 있다. 예를 들면, 각각의 메모리 페이지/메모리 블록에 대한 상태값들은 쓰기 헤비 위치들을 식별 가능하게 할 수 있다. 특정 상태값들은 메모리 블록이 쓰기 헤비인지의 여부를 지시할 수 있는 한편, 다른 상태값들은 메모리 블록이 판독 헤비인지의 여부를 지시할 수 있다. 테이블은 또한 각각의 메모리 블록이 프리이거나 점유되어 있는지의 여부를 지시할 수 있다.
마모-평준화 프로세스는 식별된 정적 데이터를 스토리지 시스템 내에서 식별된 프리 메모리 위치로 다시쓰기/이동시키는 것을 포함한다(스텝 S156). 그렇게 함으로써, 이전에 정적 데이터가 저장되어 있던 물리 메모리 내의 위치는 이제 데이터, 바람직하게는 동적 데이터를 저장하는데 프리로 된다. 따라서, 정적 데이터가 쓰기 헤비 위치들로 이동될/움직여질 경우, 스토리지 시스템 내의 메모리 위치들이 이용 가능해지고, 이에 의해 물리 메모리 내의 보다 많은 위치들에 걸쳐 쓰기가 가능해진다.
이동(다시쓰기) 이후에, 데이터가 이동되어 나간 메모리의 지정된 위치의 상태값이 업데이트될 수 있다. 이 방식으로, 물리 메모리의 각각의 메모리 위치에 대한 상태값이 읽기들 및 쓰기들 모두를 고려한다.
도 10에 나타난 스텝 S140 내지 S156 각각은 소프트웨어, 하드웨어, 또는 소프트웨어와 하드웨어의 조합을 이용하여 실시될 수 있다.
상술한 바와 같이, 물리 메모리의 메모리 블록의 상태값은 메모리 블록의 판독 횟수 및 메모리 블록에의 쓰기 횟수에 의거할 수 있다. 환언하면, 상태값은 메모리 블록의 판독 헤비니스(및/또는 쓰기 헤비니스)의 척도일 수 있다. 메모리 블록의 상태값을 추적/업데이트하기 위한 2개의 예시적 알고리즘을 이하 설명한다.
도 11은 물리 메모리 내의 메모리 블록의 상태값을 판정하는 예시적 알고리즘의 흐름도를 나타낸다. 각각의 메모리 블록은, 물리 메모리가 생성되거나 또는 처음 사용될 때 초기 상태값이 할당될 수 있다. 물리 메모리 내의 각각의 메모리 블록은 바람직하게는 동일한 초기 상태값이 주어진다. 단순히 예시의 목적으로, 초기 상태값은 20일 수 있다. 메모리 블록에 대해/그 상에서 행해지는 각각의 액션은 블록의 상태값을 변경한다. 예를 들면, 데이터가 메모리 블록에 쓰기될 경우, 상태값은 증가될 수 있다. 단순히 예시의 목적으로, 데이터가 메모리 블록에 쓰기될 때마다, 상태값은 5만큼 증가될 수 있다. 데이터가 메모리 블록으로부터 판독(또는 캐시로부터 퇴거)될 경우, 상태값은 감소될 수 있다. 단순히 예시의 목적으로, 판독/클린 퇴거가 발생할 때마다 상태값은 1만큼 감소될 수 있다. 따라서, 이 예의 알고리즘에서, 메모리 블록의 상태값은 판독/클린 퇴거가 일어날 때마다 감소되어서, 낮은 상태값은 판독 헤비 메모리 블록을 지시할 수 있는 한편, 높은 상태값은 쓰기 헤비 메모리 블록을 지시할 수 있다. 낮은 상태값은 초기 상태값에 대해, 또는 어떤 임계치에 대해 낮을 수 있다. 마찬가지로, 높은 상태값은 초기 상태값에 대해, 또는 어떤 임계치에 대해 높을 수 있다.
메모리 블록의 상태값이 (판독 헤비 위치를 지시할 수 있는) 임계치 미만이라고 판정될 경우, 메모리 블록 내의 데이터를 정적 데이터, 또는 다시쓰기보다는 판독이 보다 과도한 데이터라 상정한다. 따라서, 메모리 블록 내의 데이터는 물리 메모리 내에서 또 다른 위치(즉 프리, 쓰기 헤비 위치)로 이동된다/움직여져 물리 메모리에 걸쳐 쓰기들을 분산시킨다. 데이터가 이동될 경우, 상태값을 '재설정"하는 방식으로 메모리 블록의 상태값이 증가된다. 단순히 예시의 목적으로, 상태값은 20만큼 증가될 수 있다. 메모리 블록의 상태값이 임계값과 같거나 크다고 판정될 경우, 액션은 취해지지 않는다.
도 11에 나타낸 값들은 단지 예시이고 비제한적인이다. 실시형태에서, 쓰기가 발생할 때 상태값에 이루어지는 수정은 바람직하게는 판독이 발생할 경우에 이루어지는 수정보다 값이 커서, 각각의 판독은 자동으로 데이터의 이동을 하지 않는다.
도 11에 나타난 알고리즘은 동기 알고리즘의 예이고, 이는, 판독이 발생할 때마다 데이터를 이동시킬지의 여부에 대한 결정이 이루어지기 때문이다. 도 12의 (a) 및 12의 (b)는 물리 메모리 내에서 메모리 블록의 상태값을 판정하는 예시적 비동기 알고리즘을 나타낸다. 도 12의 (a)는 비동기 알고리즘의 추적 부분을 나타내는 한편, 도 12의 (b)는 비동기 알고리즘의 결정 부분을 나타낸다. 도 12의 (a)는 판독 또는 쓰기가 발생할 때마다 어떻게 상태값이 수정될 수 있는지를 나타낸다. 그러나, 매 판독 후에 데이터를 이동시킬지의 여부에 대한 결정이 이루어지기 보다는, 추적 부분은 단순히 판독/쓰기가 일어날 때마다 메모리 블록의 상태값을 계속해서 변경한다. 메모리 블록 내에서 데이터를 이동시킬지의 여부에 대한 결정은 상이한 시간에 이루어진다. 예를 들면, 알고리즘의 결정 부분(도 12의 (b)에 나타남)은, 메모리가 사용되고 있을 않을 경우, 또는 최소 메모리 상호작용이 있을 경우 개시될 수 있다. 이는, 모든 필요 데이터 이동들이 메모리 사용률이 낮을 때(예를 들면 메모리를 포함하는 디바이스가 슬립 모드에 있을 때) 함께, 또는 실질적으로 함께 행해질 수 있으므로, 유용할 수 있다. 메모리 사용률이 높을 경우(즉 메모리가 '비지(busy)'), 데이터 이동이 동일한 시간에 일어날 경우, 메모리에 대한 액세스를 요하는 프로세스들은 느려지거나 부정적인 영향을 받을 수 있다. 따라서, 메모리 블록 상태값이 임계치 미만인 즉시에 데이터를 이동시키지 않고 대신 메모리 사용이 덜 비지 상태를 기다리는 것이 유용할 수 있다.
본 기술의 실시형태는 또한 프로세서 상에서 실행 시, 프로세서에게 본원에 기술된 방법을 수행하게 하는 코드를 운반하는 비일시적인 데이터 캐리어를 제공한다.
본 기술은 상술한 방법을, 예를 들면 범용 컴퓨터 시스템 상에서 또는 디지털 신호 프로세서(DSP) 상에서 실행하는 프로세서 제어 코드를 더 제공한다. 본 기술은 또한 특히 비일시적인 데이터 캐리어 또는 비일시적인 컴퓨터-판독 가능한 매체, 예를 들면 디스크, 마이크로프로세서, CD- 또는 DVD-ROM, 프로그래밍된 메모리, 예를 들면 판독-전용 메모리(펌웨어) 상에서, 또는 데이터 캐리어, 예를 들면 광학 또는 전기 신호 캐리어 상에서, 실행 시, 상기 방법의 어느 것을 실행하는 프로세서 제어 코드를 운반하는 캐리어를 제공한다. 코드는 (비일시적인) 캐리어, 예를 들면 디스크, 마이크로프로세서, CD- 또는 DVD-ROM, 프로그래밍된 메모리, 예를 들면 비휘발성 메모리(예를 들면 플래시) 또는 판독-전용 메모리(펌웨어) 상에서 제공될 수 있다. 기술의 실시형태를 실행하는 코드(및/또는 데이터)는, 종래의 프로그래밍 언어(해석되거나 컴파일링됨)에서의 소스, 객체 또는 실행 가능 코드, 예를 들면 C, 또는 어셈블리 코드, ASIC(Application Specific Integrated Circuit) 또는 FPGA(Field Programmable Gate Array)를 설정 또는 제어하는 코드, 또는 하드웨어 디스크립션 언어, 예를 들면 VerilogTM 또는 VHDL(Very high speed integrated circuit Hardware Description Language)에 대한 코드를 포함할 수 있다. 당업자가 이해하는 바와 같이, 이러한 코드 및/또는 데이터는 하나의 또 다른 것과 통신하는 복수의 연결된 컴포넌트들 간에서 분산될 수 있다. 기술은 마이크로프로세서, 시스템의 하나 이상의 컴포넌트들에 연결되는 작업 메모리 및 프로그램 메모리를 포함하는 컨트롤러를 포함할 수 있다.
상술한 기술에 대한 동작들을 수행하는 컴퓨터 프로그램 코드는, 객체 지향 프로그래밍 언어들 및 종래의 절차 프로그래밍 언어들을 포함하는 하나 이상의 프로그래밍 언어들의 임의의 조합으로 쓰여질 수 있다. 코드 컴포넌트들은 절차, 방법 등으로서 구현될 수 있고, 또한 원시 명령어 세트의 직접 머신 명령어로부터 하이 레벨 컴파일된 또는 해석된 언어 구문까지의 임의의 추상화 레벨에서의 명령어들 또는 명령어들의 시퀀스들의 형태를 취할 수 있는 하위-컴포넌트들을 포함할 수 있다.
바람직한 본 기술의 실시형태에 따른 논리 방법의 모두 또는 부분은 상술한 방법의 스텝을 행하는 논리 소자들을 포함하는 논리 장치에서 적절히 구현될 수 있고, 및 이러한 논리 소자들은 컴포넌트들, 예를 들면 예를 들면 프로그래머블 논리 어레이 또는 ASIC에서의 논리 게이트들을 포함할 수 있은은 당업자에게 명백할 것이다. 이러한 논리 배치는 또한 예를 들면, 고정 또는 전송 가능한 캐리어 매체를 이용하여 저장 및 전송될 수 있는 가상 하드웨어 디스크립터 언어를 이용하여 이러한 어레이 또는 회로에서 논리 구조들을 소자들이 일시적으로 영구적으로 확립하게 구현될 수 있다.
실시형태에서, 본 기술은 함수 데이터를 갖는 데이터 캐리어의 형태로 실현될 수 있고, 상기 함수 데이터는 컴퓨터 시스템 또는 네트워크 내로 로딩되어 실행 시 상기 컴퓨터 시스템이 상술한 방법의 모든 스텝을 행하게 할 수 있는 함수 컴퓨터 데이터 구조들을 포함한다.
당업자는, 전술한 바가 최선의 모드로 간주되는 것 및 본 기술을 행하는 적절한 다른 모드들을 설명했지만, 본 기술은 바람직한 실시형태의 이 설명에서 공개된 특정 구성 및 방법에 제한되지 않음을 이해할 것이다. 당업자는 본 기술은 폭넓은 적용을 갖고, 및 실시형태는 첨부된 특허청구범위에 정의된 임의의 발명 개념에서 벗어나지 않고 넓은 범위의 변경을 취할 수 있음을 인식할 것이다.

Claims (33)

  1. 스토리지 시스템 내에서 정적 데이터(static data)를 저장하는 메모리 위치를 식별하는 스텝;
    상기 스토리지 시스템의 메모리 내에서 쓰기 헤비 영역(write heavy region) 내의 프리 메모리 위치를 식별하는 스텝; 및
    저장된 정적 데이터를 상기 메모리 내에서 쓰기 헤비 영역 내의 프리 메모리 위치(free memory location)에 쓰기하는 스텝을 포함하는 마모-평준화(wear-leveling)의 방법.
  2. 제1항에 있어서,
    상기 정적 데이터를 저장하는 메모리 위치를 식별하는 스텝은 상기 스토리지 시스템의 메모리 내에서 상기 메모리 위치를 식별하는 스텝을 포함하는 방법.
  3. 제2항에 있어서,
    상기 메모리 내에서 상기 정적 데이터를 저장하는 메모리 위치를 식별하는 스텝은 상기 메모리에 쓰기될 데이터가 상기 메모리 내에 이미 저장된 데이터와 동일할 경우를 인식하는 스텝을 포함하는 방법.
  4. 제2항에 있어서,
    상기 메모리 내에서 상기 메모리 위치를 식별하는 스텝은, 정적 데이터와 연관된 논리 어드레스를 수신하는 스텝, 및 맵핑 테이블을 이용하여 상기 정적 데이터의 대응하는 물리 어드레스를 판정하는 스텝을 포함하는 방법.
  5. 제1항에 있어서,
    상기 정적 데이터를 저장하는 메모리 위치를 식별하는 스텝은 상기 스토리지 시스템의 캐시 내에서 메모리 위치를 식별하는 스텝을 포함하는 방법.
  6. 제5항에 있어서,
    상기 캐시 내에서 상기 식별된 메모리 위치로부터 상기 정적 데이터를 퇴거(eviction)시키는 스텝을 더 포함하는 방법.
  7. 제6항에 있어서,
    상기 퇴거되는 정적 데이터의 논리 어드레스를 상기 메모리에 통신하는 스텝을 더 포함하는 방법.
  8. 제7항에 있어서,
    상기 메모리 위치를 식별하는 스텝은 상기 퇴거되는 정적 데이터의 논리 어드레스 및 맵핑 테이블을 이용하여, 상기 메모리 내의 퇴거되는 정적 데이터의 대응하는 물리 어드레스를 판정하는 스텝을 더 포함하는 방법.
  9. 제6항에 있어서,
    상기 퇴거되는 정적 데이터를 다시쓰기하는 명령어를 상기 메모리에 송신하는 스텝을 더 포함하는 방법.
  10. 제9항에 있어서,
    상기 정적 데이터를 저장하는 메모리 위치를 식별하는 스텝은 상기 퇴거되는 정적 데이터가 상기 메모리 내에 이미 저장된 데이터와 동일함을 인식하는 스텝을 더 포함하는 방법.
  11. 제5항 내지 제10항 중 어느 한 항에 있어서,
    상기 저장된 정적 데이터를 상기 메모리 내의 프리 메모리 위치에 쓰기하는 스텝은 상기 캐시로부터 상기 정적 데이터를 퇴거시키는 스텝 후에 발생하는 방법.
  12. 제1항 내지 제10항 중 어느 한 항에 있어서,
    상기 정적 데이터를 저장하는 메모리 위치를 식별하는 스텝은,
    각각의 메모리 위치에 저장된 데이터의 판독 횟수를 추적하는 스텝; 및
    각각의 메모리 위치에서의 판독 횟수가, 상기 저장된 데이터가 정적 데이터임을 지시(indication)하는지의 여부를 판정하는 스텝을 포함하는 방법.
  13. 제12항에 있어서,
    상기 저장된 정적 데이터를 쓰기하는 스텝은,
    상기 식별된 메모리 위치에서 저장된 데이터의 판독 횟수가 임계 판독 횟수보다 크거나 같을 경우, 상기 저장된 정적 데이터를 상기 프리 메모리 위치에 쓰기하는 스텝을 포함하는 방법.
  14. 제12항 또는 제13항에 있어서,
    상기 스토리지 시스템 내의 테이블 내에 상기 판독 횟수를 저장하는 스텝을 더 포함하는 방법.
  15. 제14항에 있어서,
    정적 데이터를 저장하는 메모리 위치는 복수의 물리 메모리 어드레스들 중의 물리 메모리 어드레스이고,
    상기 판독 횟수를 저장하는 스텝은,
    상기 복수의 물리 메모리 어드레스들의 각각에 대해, 상기 물리 메모리 어드레스에서 저장된 데이터의 판독 횟수를 저장하는 스텝을 포함하는 방법.
  16. 제14항에 있어서,
    상기 메모리 위치는 상기 스토리지 시스템의 메모리 내에서 복수의 메모리 블록들 중의 메모리 블록이고,
    상기 판독 횟수를 저장하는 스텝은,
    상기 복수의 메모리 블록들의 각각에 대해, 상기 메모리 블록에 저장된 데이터의 판독 횟수를 저장하는 스텝을 포함하는 방법.
  17. 제12항에 있어서,
    상기 판독 횟수를 추적하는 스텝은 각각의 메모리 위치에서 데이터의 판독 또는 데이터의 캐시 퇴거가 관찰될 때마다 카운터를 증가시키는 스텝을 포함하는 방법.
  18. 제17항에 있어서,
    상기 저장된 정적 데이터를 쓰기하는 스텝은,
    상기 카운터가 임계치보다 크거나 같을 경우, 상기 저장된 정적 데이터를 상기 프리 메모리 위치에 쓰기하는 스텝을 포함하는 방법.
  19. 제12항에 있어서,
    상기 판독 횟수를 추적하는 스텝은,
    카운터를 초기값으로 설정하는 스텝;
    상기 식별된 메모리 위치에서 판독이 관찰될 때마다 상기 카운터의 초기값을 제1 값만큼 수정하는 스텝; 및
    상기 식별된 메모리 위치에서의 데이터가 수정 또는 다시쓰기될 경우 상기 카운터를 제2 값만큼 수정하는 스텝을 포함하는 포함하는 방법.
  20. 제19항에 있어서,
    상기 저장된 정적 데이터를 쓰기하는 스텝은,
    상기 카운터가 임계치에 도달할 경우, 데이터를 상기 프리 메모리 위치에 쓰기하는 스텝; 및
    상기 데이터가 상기 프리 메모리 위치에 쓰기된 후에, 상기 식별된 메모리 위치에 대해, 상기 카운터를 제3 값만큼 수정하는 스텝을 포함하는 방법.
  21. 제12항에 있어서,
    상기 판독 횟수를 추적하는 스텝은,
    카운터를 초기값으로 설정하는 스텝;
    상기 식별된 메모리 위치에서 판독이 관찰될 때마다, 상기 카운터의 초기값을 제1 값만큼 감소시키는 스텝; 및
    상기 식별된 메모리 위치에서의 데이터가 수정 또는 다시쓰기될 경우, 상기 카운터를 제2 값만큼 증가시키는 스텝을 포함하는 방법.
  22. 제21항에 있어서,
    상기 저장된 정적 데이터를 쓰기하는 스텝은,
    상기 카운터가 임계치보다 크거나 같을 경우, 데이터를 상기 프리 메모리 위치에 쓰기하는 스텝; 및
    상기 데이터가 상기 프리 메모리 위치에 쓰기된 후에, 상기 식별된 메모리 위치에 대해, 상기 카운터를 제3 값만큼 증가시키는 스텝을 포함하는 방법.
  23. 제22항에 있어서,
    상기 저장된 정적 데이터를 쓰기하는 스텝은 상기 카운터가 임계치보다 크거나 같고나서 후속되는 스텝인 방법.
  24. 제22항에 있어서,
    상기 저장된 정적 데이터를 쓰기하는 스텝은,
    상기 스토리지 시스템의 활동 레벨(activity level)을 모니터링하는 스텝; 및
    상기 활동 레벨이 낮을 경우에, 상기 저장된 정적 데이터를 쓰기하는 스텝을 포함하는 방법.
  25. 제17항 내지 제24항 중 어느 한 항에 있어서,
    상기 스토리지 시스템 내의 테이블 내에 상기 카운터의 값을 저장하는 스텝을 더 포함하는 방법.
  26. 제25항에 있어서,
    상기 정적 데이터를 저장하는 메모리 위치는 복수의 물리 메모리 어드레스들 중의 물리 메모리 어드레스이고,
    상기 카운터의 값을 저장하는 스텝은,
    상기 복수의 물리 메모리 어드레스들의 각각에 대한 카운터의 값을 저장하는 스텝을 더 포함하는 방법.
  27. 제26항에 있어서,
    상기 메모리 위치는 상기 스토리지 시스템의 메모리의 복수의 메모리 블록들 중의 메모리 블록이고,
    상기 카운터의 값을 저장하는 스텝은,
    상기 복수의 메모리 블록들의 각각에 대한 카운터의 값을 저장하는 스텝을 포함하는 방법.
  28. 제14항 내지 제27항 중 어느 한 항에 있어서,
    상기 테이블은 논리 메모리 어드레스들을 물리 메모리 어드레스들에 맵핑하는 어드레스 맵핑 테이블인 방법.
  29. 프로세서 상에서 실행 시, 프로세서에게 제1항 내지 제28항 중 어느 한 항에 기재된 방법을 수행하게 하는 코드를 운반하는 비일시적인 데이터 캐리어.
  30. 스토리지 시스템으로서,
    적어도 하나의 캐시;
    메모리; 및
    모듈을 포함하고,
    상기 모듈은,
    상기 스토리지 시스템 내에서 정적 데이터를 저장하는 메모리 위치를 식별하고;
    상기 메모리 내에서 쓰기 헤비 영역 내의 프리 메모리 위치를 식별하고;
    저장된 정적 데이터를 상기 메모리 내에서 상기 쓰기 헤비 영역 내의 프리 메모리 위치에 쓰기하기 위한 것인, 스토리지 시스템.
  31. 제30항에 있어서,
    상기 메모리는 비휘발성 메모리인 스토리지 시스템.
  32. 제30항에 있어서,
    상기 메모리는 휘발성 메모리인 스토리지 시스템.
  33. 제30항 내지 제32항 중 어느 한 항에 있어서,
    상기 메모리는 플래시 메모리, 상 변화 메모리, 저항 랜덤 액세스 메모리, RAM, DRAM, SRAM, 비휘발성 RAM, 및 상관 전자 RAM(CeRAM) 중 어느 하나 이상을 포함하는 스토리지 시스템.
KR1020197015289A 2017-01-20 2018-01-09 메모리 수명을 연장시키는 장치 및 방법 KR102469139B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1700982.0 2017-01-20
GB1700982.0A GB2559119B (en) 2017-01-20 2017-01-20 Apparatus and methods to prolong lifetime of memories
PCT/GB2018/050046 WO2018134562A1 (en) 2017-01-20 2018-01-09 Apparatus and methods to prolong lifetime of memories

Publications (2)

Publication Number Publication Date
KR20190104989A true KR20190104989A (ko) 2019-09-11
KR102469139B1 KR102469139B1 (ko) 2022-11-23

Family

ID=58462930

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197015289A KR102469139B1 (ko) 2017-01-20 2018-01-09 메모리 수명을 연장시키는 장치 및 방법

Country Status (5)

Country Link
US (1) US11604727B2 (ko)
KR (1) KR102469139B1 (ko)
CN (1) CN110140173B (ko)
GB (1) GB2559119B (ko)
WO (1) WO2018134562A1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2559119B (en) 2017-01-20 2020-12-30 Advanced Risc Mach Ltd Apparatus and methods to prolong lifetime of memories
US10922221B2 (en) * 2018-03-28 2021-02-16 Micron Technology, Inc. Memory management
WO2021189203A1 (zh) * 2020-03-23 2021-09-30 华为技术有限公司 带宽均衡方法和装置
LU102722B1 (en) * 2021-03-31 2022-09-30 Microsoft Technology Licensing Llc Logging cache line lifetime hints when recording bit-accurate trace

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130205076A1 (en) * 2012-02-02 2013-08-08 Ocz Technology Group Inc. Apparatus, methods and architecture to increase write performance and endurance of non-volatile solid state memory components
US20140208007A1 (en) * 2013-01-22 2014-07-24 Lsi Corporation Management of and region selection for writes to non-volatile memory
US9122588B1 (en) * 2013-03-15 2015-09-01 Virident Systems Inc. Managing asymmetric memory system as a cache device
KR101576575B1 (ko) * 2008-02-29 2015-12-10 마벨 월드 트레이드 리미티드 하이브리드 비휘발성 고체 상태 메모리 시스템에 대한 피로 관리 시스템 및 방법
US9524236B1 (en) * 2014-01-09 2016-12-20 Marvell International Ltd. Systems and methods for performing memory management based on data access properties
US10642505B1 (en) * 2013-01-28 2020-05-05 Radian Memory Systems, Inc. Techniques for data migration based on per-data metrics and memory degradation

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8341332B2 (en) * 2003-12-02 2012-12-25 Super Talent Electronics, Inc. Multi-level controller with smart storage transfer manager for interleaving multiple single-chip flash memory devices
JP2004348792A (ja) * 2003-05-20 2004-12-09 Sharp Corp 半導体記憶装置、表示装置及び携帯電子機器
KR100755702B1 (ko) * 2005-12-27 2007-09-05 삼성전자주식회사 비휘발성 메모리가 캐쉬로 사용되는 저장 장치 및 그 동작방법
TWI389125B (zh) * 2008-07-18 2013-03-11 A Data Technology Co Ltd 記憶體儲存裝置及其控制方法
WO2010076829A1 (en) * 2008-12-30 2010-07-08 Massimo Iaculo Wear leveling for erasable memories
US8453021B2 (en) * 2009-07-29 2013-05-28 Stec, Inc. Wear leveling in solid-state device
US8990476B2 (en) * 2009-10-01 2015-03-24 Micron Technology, Inc. Power interrupt management
JP2012203443A (ja) * 2011-03-23 2012-10-22 Toshiba Corp メモリシステムおよびメモリシステムの制御方法
US9104547B2 (en) 2011-08-03 2015-08-11 Micron Technology, Inc. Wear leveling for a memory device
CN105354152B (zh) * 2014-08-19 2018-06-26 华为技术有限公司 非易失性存储器及磨损均衡方法
GB2559119B (en) 2017-01-20 2020-12-30 Advanced Risc Mach Ltd Apparatus and methods to prolong lifetime of memories

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160019141A1 (en) * 2006-12-11 2016-01-21 Marvell World Trade Ltd. Method and apparatus for mapping a logical address between memories of a storage drive based on write frequency rankings
KR101576575B1 (ko) * 2008-02-29 2015-12-10 마벨 월드 트레이드 리미티드 하이브리드 비휘발성 고체 상태 메모리 시스템에 대한 피로 관리 시스템 및 방법
US20130205076A1 (en) * 2012-02-02 2013-08-08 Ocz Technology Group Inc. Apparatus, methods and architecture to increase write performance and endurance of non-volatile solid state memory components
US20140208007A1 (en) * 2013-01-22 2014-07-24 Lsi Corporation Management of and region selection for writes to non-volatile memory
US10642505B1 (en) * 2013-01-28 2020-05-05 Radian Memory Systems, Inc. Techniques for data migration based on per-data metrics and memory degradation
US9122588B1 (en) * 2013-03-15 2015-09-01 Virident Systems Inc. Managing asymmetric memory system as a cache device
US9524236B1 (en) * 2014-01-09 2016-12-20 Marvell International Ltd. Systems and methods for performing memory management based on data access properties

Also Published As

Publication number Publication date
US20200050541A1 (en) 2020-02-13
GB2559119A (en) 2018-08-01
GB2559119B (en) 2020-12-30
KR102469139B1 (ko) 2022-11-23
WO2018134562A1 (en) 2018-07-26
CN110140173A (zh) 2019-08-16
US11604727B2 (en) 2023-03-14
CN110140173B (zh) 2023-07-25
GB201700982D0 (en) 2017-03-08

Similar Documents

Publication Publication Date Title
US10838859B2 (en) Recency based victim block selection for garbage collection in a solid state device (SSD)
KR102469139B1 (ko) 메모리 수명을 연장시키는 장치 및 방법
JP6266019B2 (ja) データストレージシステム向けの優先度に基づくガベージコレクション
KR101454817B1 (ko) 반도체 메모리 장치 및 그것의 마모도 관리 방법
US20140229654A1 (en) Garbage Collection with Demotion of Valid Data to a Lower Memory Tier
US11204705B2 (en) Retention-aware data tiering algorithm for hybrid storage arrays
JP7549424B2 (ja) ソリッドステート・ストレージ・デバイス用メモリ・コントローラ
US20150032949A1 (en) Semiconductor Device and Method of Controlling Non-Volatile Memory Device
TWI673722B (zh) 具有可原地重寫之記憶體的資料儲存裝置
KR20100016987A (ko) 상 변화 메모리를 포함하는 컴퓨팅 시스템
KR20090062754A (ko) 반도체 메모리 시스템 및 그것의 마모도 관리 방법
US20200393972A1 (en) Wear-aware block mode conversion in non-volatile memory
CN113254358A (zh) 用于地址表高速缓存管理的方法和系统
CN115904221A (zh) 高速缓存块预算技术
KR102138767B1 (ko) 제자리에 다시쓰기 가능한 메모리를 갖는 데이터 저장 디바이스
CN108984111B (zh) 具有可重写原地存储器的数据存储设备
US12019893B2 (en) Storage device pool management based on fragmentation levels
US20230418486A1 (en) Configuration of new storage devices in a storage device pool
US20240329888A1 (en) Storage device pool management based on over-provisioning

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