KR20190111714A - 스토리지 디바이스 및 컴퓨터 시스템 - Google Patents
스토리지 디바이스 및 컴퓨터 시스템 Download PDFInfo
- Publication number
- KR20190111714A KR20190111714A KR1020180083935A KR20180083935A KR20190111714A KR 20190111714 A KR20190111714 A KR 20190111714A KR 1020180083935 A KR1020180083935 A KR 1020180083935A KR 20180083935 A KR20180083935 A KR 20180083935A KR 20190111714 A KR20190111714 A KR 20190111714A
- Authority
- KR
- South Korea
- Prior art keywords
- data
- block
- host
- memory
- controller
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0685—Hybrid storage combining heterogeneous device types, e.g. hierarchical storage, hybrid arrays
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0613—Improving I/O performance in relation to throughput
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0647—Migration mechanisms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0647—Migration mechanisms
- G06F3/0649—Lifecycle management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0658—Controller construction arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1032—Reliability improvement, data loss prevention, degraded operation etc
- G06F2212/1036—Life time enhancement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7211—Wear 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)
- Techniques For Improving Reliability Of Storages (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System (AREA)
- Read Only Memory (AREA)
Abstract
실시 형태는, 성능을 향상시킬 수 있는 스토리지 디바이스 및 컴퓨터 시스템을 제공한다. 실시 형태에 의하면, 스토리지 디바이스는, 복수의 블록을 포함하는 불휘발성 메모리와, 컨트롤러를 구비한다. 상기 컨트롤러는, 상기 호스트상에서 동작하고 있는 총 프로세스 수를 나타내는 정보를 상기 호스트로부터 수신한다. 상기 컨트롤러는, 상기 총 프로세스 수가 제1 임계값을 상회하고 있다는 판정을 한 후, 상기 불휘발성 메모리의 적어도 하나의 블록에 저장되어 있는 데이터를 상기 불휘발성 메모리의 다른 적어도 하나의 블록으로 이동시키는 처리를 실행한다.
Description
본 출원은, 일본 특허출원 제2018-54918호(출원일: 2018년 3월 22일)를 기초 출원으로 하는 우선권을 향수한다. 본 출원은 이 기초 출원을 참조함으로써 기초 출원의 모든 내용을 포함한다.
본 발명의 실시 형태는, 불휘발성 메모리를 제어하는 기술에 관한 것이다.
퍼스널 컴퓨터로 대표되는 컴퓨터 시스템은, 유저가 원하는 처리를 행하는 호스트(호스트 컴퓨터)와, 연산 결과나 데이터 등을 저장하는 스토리지 디바이스 등으로 구성된다.
스토리지 디바이스로서는, 불휘발성 메모리를 구비하는 스토리지 디바이스가 널리 보급되고 있다. 이러한 스토리지 디바이스의 하나로서는, NAND 플래시 메모리를 구비하는 솔리드 스테이트 드라이브(SSD)가 알려져 있다.
최근에는, 컴퓨터 시스템의 성능 개선을 도모하기 위해서, 스토리지 디바이스의 성능의 향상이 요구되고 있다.
본 발명의 실시 형태는, 성능을 향상시킬 수 있는 스토리지 디바이스 및 컴퓨터 시스템을 제공한다.
실시 형태에 의하면, 호스트에 접속 가능한 스토리지 디바이스는, 복수의 블록을 포함하는 불휘발성 메모리와, 상기 불휘발성 메모리에 전기적으로 접속되고, 상기 불휘발성 메모리를 제어하도록 구성된 컨트롤러를 구비한다. 상기 컨트롤러는, 상기 호스트상에서 동작하고 있는 총 프로세스 수를 나타내는 정보를 상기 호스트로부터 수신한다. 상기 컨트롤러는, 상기 총 프로세스 수가 제1 임계값을 상회하고 있다는 판정을 한 후, 상기 불휘발성 메모리의 적어도 하나의 블록에 저장되어 있는 데이터를 상기 불휘발성 메모리의 다른 적어도 하나의 블록으로 이동시키는 처리를 실행한다.
도 1은, 제1 실시 형태에 따른 스토리지 디바이스를 포함하는 컴퓨터 시스템의 구성예를 나타내는 블록도.
도 2는, 호스트(호스트 컴퓨터)의 내부 구성예를 나타내는 블록도.
도 3은, 제1 실시 형태의 스토리지 디바이스의 구성예를 나타내는 블록도.
도 4는, 제1 실시 형태의 스토리지 디바이스 내에 설치된 불휘발성 메모리의 구성예를 나타내는 도면.
도 5는, 제1 실시 형태의 스토리지 디바이스에 의해 사용되는, 불휘발성 메모리의 사용 상황을 관리하기 위한 테이블의 예를 나타내는 도면.
도 6은, 프로세스 감시부를 포함하는, 호스트의 내부 구성예를 나타내는 블록도.
도 7은, 호스트의 프로세스 감시부에 의해 사용되는 관리 테이블의 예를 나타내는 도면.
도 8은, 호스트와 제1 실시 형태의 스토리지 디바이스에 의해 실행되는, 총 프로세스 수 통지 처리 및 데이터 이동 처리의 수순을 나타내는 흐름도.
도 9는, 호스트와 제1 실시 형태의 스토리지 디바이스에 의해 실행되는, 프로세스 수 증감 통지 처리 및 데이터 이동 처리의 수순을 나타내는 흐름도.
도 10은, 제2 실시 형태의 스토리지 디바이스에 대응하는 호스트의 내부 구성예를 나타내는 블록도.
도 11은, 제2 실시 형태의 스토리지 디바이스에 의해 작성되는 관리 테이블의 예를 나타내는 도면.
도 12는, 호스트와 제2 실시 형태의 스토리지 디바이스에 의해 실행되는 데이터 판독/기입 처리의 수순을 나타내는 흐름도.
도 13은, 프로세스의 종료에 따라서 호스트와 제2 실시 형태의 스토리지 디바이스에 의해 실행되는, 프로세스 식별자 통지 처리 및 데이터 이동 처리의 수순을 나타내는 흐름도.
도 14는, 총 프로세스 수가 임계값을 초과한 경우 또는 프로세스 수의 증가의 통지를 수신한 경우에 제2 실시 형태의 스토리지 디바이스에 의해 실행되는 데이터 이동 처리의 수순을 나타내는 흐름도.
도 15는, 호스트에 의해 실행되는, 생성된 프로세스의 종별(유저 프로세스/시스템 프로세스)을 스토리지 디바이스에 통지하는 처리의 수순을 나타내는 흐름도.
도 16은, 호스트와 제3 실시 형태의 스토리지 디바이스에 의해 실행되는, 프로세스 수 증감 통지 처리 및 데이터 이동 처리의 수순을 나타내는 흐름도.
도 17은, 호스트와 제3 실시 형태의 스토리지 디바이스에 의해 실행되는, 총 프로세스 수 통지 처리 및 데이터 이동 처리의 수순을 나타내는 흐름도.
도 18은, 제3 실시 형태의 스토리지 디바이스에 의해 실행되는, 종료된 프로세스 중, 유저 프로세스의 데이터를 우선적으로 이동시키는 처리의 수순을 나타내는 흐름도.
도 19는, 호스트와 제4 실시 형태의 스토리지 디바이스에 의해 실행되는, 사용 메모리양 통지 처리 및 데이터 이동 처리의 수순을 나타내는 흐름도.
도 20은, 호스트와 제5 실시 형태의 스토리지 디바이스에 의해 실행되는, 스왑 아웃에 의해 스토리지 디바이스에 기입되는 데이터양을 통지하는 처리 및 데이터 이동 처리의 수순을 나타내는 흐름도.
도 21은, 호스트와 제5 실시 형태의 스토리지 디바이스에 의해 실행되는, 사용 메모리양/스왑 아웃에 의해 스토리지 디바이스에 기입되는 데이터양을 통지하는 처리 및 데이터 이동 처리의 수순을 나타내는 흐름도.
도 22는, 호스트와 제6 실시 형태의 스토리지 디바이스에 의해 실행되는, 빈번하게 기동되는 프로그램을 통지하는 처리 및 데이터 이동 처리의 수순을 나타내는 흐름도.
도 2는, 호스트(호스트 컴퓨터)의 내부 구성예를 나타내는 블록도.
도 3은, 제1 실시 형태의 스토리지 디바이스의 구성예를 나타내는 블록도.
도 4는, 제1 실시 형태의 스토리지 디바이스 내에 설치된 불휘발성 메모리의 구성예를 나타내는 도면.
도 5는, 제1 실시 형태의 스토리지 디바이스에 의해 사용되는, 불휘발성 메모리의 사용 상황을 관리하기 위한 테이블의 예를 나타내는 도면.
도 6은, 프로세스 감시부를 포함하는, 호스트의 내부 구성예를 나타내는 블록도.
도 7은, 호스트의 프로세스 감시부에 의해 사용되는 관리 테이블의 예를 나타내는 도면.
도 8은, 호스트와 제1 실시 형태의 스토리지 디바이스에 의해 실행되는, 총 프로세스 수 통지 처리 및 데이터 이동 처리의 수순을 나타내는 흐름도.
도 9는, 호스트와 제1 실시 형태의 스토리지 디바이스에 의해 실행되는, 프로세스 수 증감 통지 처리 및 데이터 이동 처리의 수순을 나타내는 흐름도.
도 10은, 제2 실시 형태의 스토리지 디바이스에 대응하는 호스트의 내부 구성예를 나타내는 블록도.
도 11은, 제2 실시 형태의 스토리지 디바이스에 의해 작성되는 관리 테이블의 예를 나타내는 도면.
도 12는, 호스트와 제2 실시 형태의 스토리지 디바이스에 의해 실행되는 데이터 판독/기입 처리의 수순을 나타내는 흐름도.
도 13은, 프로세스의 종료에 따라서 호스트와 제2 실시 형태의 스토리지 디바이스에 의해 실행되는, 프로세스 식별자 통지 처리 및 데이터 이동 처리의 수순을 나타내는 흐름도.
도 14는, 총 프로세스 수가 임계값을 초과한 경우 또는 프로세스 수의 증가의 통지를 수신한 경우에 제2 실시 형태의 스토리지 디바이스에 의해 실행되는 데이터 이동 처리의 수순을 나타내는 흐름도.
도 15는, 호스트에 의해 실행되는, 생성된 프로세스의 종별(유저 프로세스/시스템 프로세스)을 스토리지 디바이스에 통지하는 처리의 수순을 나타내는 흐름도.
도 16은, 호스트와 제3 실시 형태의 스토리지 디바이스에 의해 실행되는, 프로세스 수 증감 통지 처리 및 데이터 이동 처리의 수순을 나타내는 흐름도.
도 17은, 호스트와 제3 실시 형태의 스토리지 디바이스에 의해 실행되는, 총 프로세스 수 통지 처리 및 데이터 이동 처리의 수순을 나타내는 흐름도.
도 18은, 제3 실시 형태의 스토리지 디바이스에 의해 실행되는, 종료된 프로세스 중, 유저 프로세스의 데이터를 우선적으로 이동시키는 처리의 수순을 나타내는 흐름도.
도 19는, 호스트와 제4 실시 형태의 스토리지 디바이스에 의해 실행되는, 사용 메모리양 통지 처리 및 데이터 이동 처리의 수순을 나타내는 흐름도.
도 20은, 호스트와 제5 실시 형태의 스토리지 디바이스에 의해 실행되는, 스왑 아웃에 의해 스토리지 디바이스에 기입되는 데이터양을 통지하는 처리 및 데이터 이동 처리의 수순을 나타내는 흐름도.
도 21은, 호스트와 제5 실시 형태의 스토리지 디바이스에 의해 실행되는, 사용 메모리양/스왑 아웃에 의해 스토리지 디바이스에 기입되는 데이터양을 통지하는 처리 및 데이터 이동 처리의 수순을 나타내는 흐름도.
도 22는, 호스트와 제6 실시 형태의 스토리지 디바이스에 의해 실행되는, 빈번하게 기동되는 프로그램을 통지하는 처리 및 데이터 이동 처리의 수순을 나타내는 흐름도.
이하, 도면을 참조하여, 실시 형태를 설명한다.
(제1 실시 형태)
<컴퓨터 시스템의 설명>
우선, 도 1을 참조하여, 제1 실시 형태에 따른 스토리지 디바이스를 포함하는 컴퓨터 시스템(1)의 구성을 설명한다.
이 스토리지 디바이스는, 불휘발성 메모리에 데이터를 기입하고, 불휘발성 메모리로부터 데이터를 판독하도록 구성된 반도체 스토리지 디바이스이다. 이 스토리지 디바이스는, 예를 들어 NAND 플래시 메모리를 구비한 솔리드 스테이트 드라이브(SSD)(3)로서 실현되어 있다.
컴퓨터 시스템(1)은, 호스트(호스트 디바이스)(2)와, SSD(3)를 포함한다. 호스트(2)는, SSD(3)를 액세스하는 컴퓨터(호스트 계산기)이다. 호스트(2)로서 기능하는 컴퓨터의 예에는, 퍼스널 컴퓨터, 서버 컴퓨터, 다른 다양한 전자 기기(예를 들어, 스마트폰 등)가 포함된다.
<호스트와 SSD 사이의 접속이나 통신 프로토콜의 설명>
호스트(2)와 SSD(3)의 사이에는 그 사이에 요구나 정보를 송수신하기 위한 경로가 존재한다. 또한, 요구나 정보를 송수신하기 위한 결정으로서 표준 규격 등이 존재한다.
호스트(2)는, 다양한 요구를 신호선(20)을 통해 SSD(3)에 보낸다. 이들 요구에는, 데이터의 판독을 요구하는 판독 요구 및 데이터의 기입을 요구하는 기입 요구를 포함하는 각종 데이터 처리 요구, SSD(3)의 상태를 변화시키는 상태 변화 요구, SSD(3)의 상태를 취득하는 상태 취득 요구 등이 포함된다.
한편, SSD(3)는, 호스트(2)로부터 수신한 요구에 대한 회답을 신호선(20)을 통해 호스트(2)에 보낸다. 회답의 예에는, 데이터 판독/기입의 결과, 상태 변화의 결과, SSD(3) 자신의 상태 등이 있다.
다양한 호스트와 다양한 스토리지 디바이스가 상호 접속할 수 있도록 신호선(20)을 통해 요구나 회답을 보내는 방법으로서 표준 규격이 존재한다.
호스트와 스토리지 디바이스의 사이에서 신호선(20)을 통해 정보를 송수신하기 위한 표준 규격에는, 예를 들어 PCI Express(PCIe)(등록상표)가 존재한다.
또한 호스트와 스토리지 디바이스의 사이에서 송수신되는 요구나 회답의 수속이나 데이터 포맷 등의 표준 규격에는, 예를 들어 Non-Volatile Memory Express(NVMe)(등록상표)가 존재한다.
본 실시 형태에서는, 신호선(20)을 통해 정보를 송수신하기 위한 방식이나, 요구나 회답을 송수신하기 위한 수속 및 데이터 포맷에 대해서는, 특정한 규격을 가정하지 않는다. 본 실시 형태의 기술은, PCIe나 NVMe를 비롯해, 다양한 표준 규격 및 표준 규격 이외의 방법을 이용한 경우에서도 적용 가능하다.
또한, 호스트(2)와 SSD(3)는 물리적인 신호선으로 접속되어 있을 필요는 없다. 호스트(2)와 SSD(3)는 무선 LAN 등의 물리적인 신호선을 수반하지 않는 방법으로 접속되어 있어도 상관없다. 호스트(2)와 SSD(3)의 물리적인 신호선을 수반하지 않는 방법으로 접속되어 있어도 본 실시 형태의 기술은 적용 가능하다.
<호스트의 설명>
호스트(2)는, 그 하드웨어 컴포넌트로서, 호스트 스토리지 컨트롤러(11), 프로세서(12), 및 메모리(13)를 구비한다. 이들 호스트 스토리지 컨트롤러(11), 프로세서(12), 메모리(13)는, 버스(10)를 통해 상호 접속되어 있어도 된다. 호스트(2)는, 또한, 네트워크 인터페이스(14), 디스플레이 인터페이스(15)를 구비하고 있어도 상관없다.
호스트 스토리지 컨트롤러(11)는 SSD(3)와의 통신을 실행한다. 상세하게는, 호스트 스토리지 컨트롤러(11)는, 프로세서(12)의 제어하에 전술한 다양한 요구를 SSD(3)에 송신하고, 또한 이들 요구에 대한 회답을 SSD(3)로부터 수신한다. 프로세서(12)는 호스트(2) 내의 다양한 컴포넌트를 제어하는 CPU이며, SSD(3)로부터 메모리(13)에 로드되는 다양한 프로그램을 실행한다. 메모리(13)는, Dynamic Random Access Memory(DRAM)와 같은 랜덤 액세스 메모리에 의해 실현된다.
<SSD의 설명>
SSD(3)는, 컨트롤러(4) 및 불휘발성 메모리(NAND 플래시 메모리)(5)를 구비한다. NAND 플래시 메모리(5)는, 복수의 NAND 플래시 메모리 칩을 포함하고 있어도 된다. 컨트롤러(4)는, NAND 플래시 메모리(5)에 전기적으로 접속되고, NAND 플래시 메모리(5)를 제어하도록 구성된 메모리 컨트롤러로서 동작한다. 이 컨트롤러(4)는, System-on-a-chip(SoC)과 같은 회로에 의해 실현되어도 된다. SSD(3)는, DRAM도 구비하고 있어도 된다. SSD(3)가 DRAM도 구비하는 구성인 경우에는, DRAM은, 컨트롤러(4)의 외부에 설치되어 있어도 된다.
NAND 플래시 메모리(5)는, 매트릭스 형상으로 배치된 복수의 메모리 셀을 포함하는 메모리 셀 어레이를 포함한다. NAND 플래시 메모리(5)는, 2차원 구조의 NAND 플래시 메모리여도 되고, 3차원 구조의 NAND 플래시 메모리여도 된다.
<호스트의 내부 구성>
도 2는, 호스트(호스트 컴퓨터)(2)의 내부 구성예를 나타낸다.
호스트(2)에 있어서는, 프로세서(12)상에서 동작하는 호스트 소프트웨어로서, 스토리지 드라이버(31)와, 오퍼레이팅 시스템(OS)(32)과, 파일 시스템(33)과, 유저 프로세스(34)와, 시스템 프로세스(35)가 존재한다.
<오퍼레이팅 시스템(OS)과 프로세스의 설명>
여기에서는, 프로세스에는 메모리가 할당되어 있는 경우, 오퍼레이팅 시스템(OS)(32), 더욱 상세히 설명하면 오퍼레이팅 시스템(OS)(32)의 프로세스 관리부가, 호스트(2)상에서 동작하는 프로세스의 정보를 전부 알고 있는 경우에 대하여 설명한다.
오퍼레이팅 시스템(OS)(32)은, 프로세스 관리부(321)와, 메모리 관리부(322)와, 디바이스 관리부(323)를 포함한다.
도 2의 예에서는, 오퍼레이팅 시스템(OS)(32)에 상기 3개의 관리부가 포함되어 있지만, 또한 파일 시스템(33) 및 스토리지 드라이버(31) 중 일부 또는 전부가 오퍼레이팅 시스템(OS)(32)에 더 포함되어 있어도 상관없다.
오퍼레이팅 시스템(OS)(32)은, 예를 들어 Microsoft Windows(등록상표), Linux(등록상표)와 같은 소프트웨어이며, 프로세서(12), 메모리(13), 및 SSD(3)를 포함하는, 컴퓨터 시스템(1) 전체의 자원을 관리한다.
오퍼레이팅 시스템(32)은 또한, 호스트(2)상에서 동작하는 애플리케이션 프로그램(이하 '프로그램'이라고 기재함)의 관리를 행한다. 호스트(2)상에서는, 오퍼레이팅 시스템(32)의 관리하에 하나 이상의 기능을 실현하는 프로그램이, 하나 이상 동작 상태에 있다.
프로그램이 동작 상태가 될 때에는, 이하의 수속이 행해진다.
처음에, 유저에 의한 직접적 요구에 의해, 혹은 유저에게 특정한 기능을 제공하기 위해서 오퍼레이팅 시스템(32) 자신에 의해, 프로세스 관리부(321)에 프로그램의 기동이 요구된다.
다음으로, 프로세스 관리부(321)가 이 프로그램의 기동을 승인하여 이 프로그램용 프로세스를 생성한다. 그리고 프로세스 관리부(321)가 메모리 관리부(322)에 대해서 당해 프로세스에 대한 메모리 할당을 요구한다. 메모리 할당 요구를 받은 메모리 관리부(322)는, 당해 프로세스에 메모리(13) 내의 메모리 영역을 할당한다. 프로세스 관리부(321)는, 이 프로그램을 SSD(3)로부터 판독하고, 당해 프로세스에 할당된 메모리 영역에 이 프로그램을 로드한다. 마지막으로, 프로세스 관리부(321)는, 당해 프로세스를 프로세서(12)의 실행 시간의 할당 대상으로 한다. 즉, 프로그램의 실행의 실체는 프로세스이며, 프로세스에는 메모리가 할당되어 있다.
본 실시 형태에서는, 유저의 요구에 의해 생성된 프로세스를 유저 프로세스라 칭한다. 이에 반하여, 오퍼레이팅 시스템(32) 자신이 특정한 기능을 실현하기 위해 생성한 프로세스와 같은, 유저 프로세스 이외의 프로세스를 시스템 프로세스라 칭한다.
예를 들어, 유저가 Web 브라우징을 위해 사용하는 Web 브라우저의 프로그램을 기동함으로써 생성된 프로세스는, 유저 프로세스이다. 한편, 키보드나 마우스로부터의 입력을 접수하는 프로그램이나 디스플레이로의 영상 출력을 행하는 프로그램으로부터 생성된 프로세스는, 시스템 프로세스이다.
따라서, 프로세스 관리부(321)는, 어떤 시각에 호스트(2)상에 존재하는 프로세스를, 유저 프로세스 및 시스템 프로세스에 관계없이 전부 파악 가능하다.
<프로세스의 스왑의 설명>
여기에서는, 프로세스에 할당된 메모리 영역의 내용이, 스왑 아웃 또는 스왑 인의 타이밍에, SSD(3)에 기입되거나 또는 SSD(3)로부터 판독되는 경우를 설명한다.
프로세스 관리부(321)가 새로운 프로세스를 생성하려고 했을 때, 당해 프로세스에 할당되는 메모리가 부족한 경우가 있다. 그 때, 프로세스 관리부(321)로부터 메모리 할당의 요구를 받은 메모리 관리부(322)는, 당해 프로세스에 할당되는 메모리 영역을 확보하기 위해서, 다른 프로세스의 메모리 영역에 저장되어 있는 데이터를 SSD(3)로 퇴피시키는 경우가 있다. 이 퇴피 처리는 프로세스의 스왑 아웃이라 불린다.
스왑 아웃의 대상 프로세스는, 다양한 기준으로 선정된다. 예를 들어, 마지막으로 프로세서(12)상에서 동작한 시각이 가장 오래된 프로세스부터 순서대로 선택하는 방법이 있다. 또한 예를 들어, 생성 시각이 가장 오래된 프로세스부터 순서대로 선택하는 방법도 있다. 또한 예를 들어, 선택 대상의 프로세스를 유저 프로세스로 한정하는 방법도 있다.
어쨌든, 프로세스에 할당된 메모리 영역에 저장된 데이터는, 스왑 아웃에 의해 SSD(3)에 기입되는 경우가 있다.
또한, 일단 스왑 아웃한 프로세스가 프로세서(12)상에서 다시 동작할 때에는, 스왑 아웃에 의해 SSD(3)에 기입된 데이터를 SSD(3)로부터 판독하여, 메모리(13) 내의 메모리 영역으로 복원시키는 처리가 행해진다. 이 복원 처리는 프로세스의 스왑 인이라 불린다.
본 실시 형태에서는, 스왑 아웃 및 스왑 인의 처리는, 프로세스 관리부(321)가 행한다.
<프로세스가 SSD(3)에 액세스할 때의 처리의 설명>
여기에서는, 각 프로세스가 파일 시스템(33)을 경유하여 SSD(3)에 액세스하는 케이스에 있어서는, 파일 시스템(33)은 어느 프로세스가 어느 논리 어드레스(논리 블록 주소: LBA)에 언제 액세스했는지를 알고 있는 경우와, 파일 시스템(33)을 경유하지 않고 SSD(3)에 액세스할 수 있는 경로도 존재하는 경우에 대하여 설명한다.
프로세스가 SSD(3)에 대한 데이터의 판독 또는 기입을 행하는 경우, 일반적으로, 파일 시스템(33)에 대해서 데이터의 판독 또는 기입을 요구한다. 이것은, 유저 프로세스에서도 시스템 프로세스에서도 동일하다.
파일 시스템(33)을 경유하여 SSD(3)에 대한 데이터의 판독 또는 기입을 행하는 경우, 프로세스는 파일 시스템(33)에 액세스 요구를 송출한다. 상세하게는, 프로세스는 파일 시스템(33)에 대해서, 판독 또는 기입을 하고 싶은 파일명과, 판독/기입의 종별과, 판독 또는 기입을 하고 싶은 데이터 사이즈와, 데이터 판독의 경우에는 판독처 메모리 영역을, 데이터 기입의 경우에는 기입하고 싶은 데이터가 저장되어 있는 메모리 영역을 지정한다.
파일 시스템(33)은, 당해 프로세스가, 지정한 파일에 대해서 액세스권을 갖는지 여부를 체크하고, 당해 프로세스가 액세스권을 갖는 경우에는 액세스 요구를 승인하고, 액세스권을 갖지 않는 경우에는 당해 액세스 요구를 각하한다.
즉, 파일 시스템(33)은 어느 프로세스가 어느 파일에 언제 액세스를 요구했는지를 알고 있다.
파일 시스템(33)은, 프로세스에 의한 액세스 요구를 승인하면, 당해 액세스 대상 파일에 대응하는, SSD(3)의 논리 블록 주소(LBA)를 해결한다.
데이터 판독의 경우, 파일 시스템(33)은, 파일 시스템 자신이 갖는 파일명 각각과 LBA 각각의 대응 관계를 나타내는 표로부터, SSD(3)에 대해서 판독을 요구하는, 선두 LBA와 사이즈의 조를 하나 이상 작성한다. 선두 LBA와 사이즈의 조가 복수로 될 가능성이 있는 것은, 하나의 파일을 구성하는 데이터가, SSD(3)의 LBA 공간상에서, 복수의 영역으로 분할(프래그먼트화)되어 있을 가능성이 있기 때문이다.
데이터 기입의 경우, 파일 시스템(33)은, 파일 시스템(33) 자신이 갖는 미사용 LBA 영역 중에서 당해 기입 요구에 할당되는 LBA 영역을 하나 이상 선택하고, 선두 LBA와 사이즈의 조를 하나 이상 작성한다. 선두 LBA와 사이즈의 조가 복수로 될 가능성이 있는 것은, 기입 요구 사이즈를 통합해서 저장할 수 있는 빈 공간의 연속 LBA 영역이 존재하지 않을 가능성이 있기 때문이다.
파일 시스템(33)이, SSD(3)에 요구하는, 판독 기입 대상의 선두 LBA와 사이즈의 조를 포함하라는 요구 정보를 작성하면, 파일 시스템(33)은, 그 요구 정보와 함께, 스토리지 드라이버(31)에 데이터 판독/기입의 요구를 송출한다.
스토리지 드라이버(31)는, 파일 시스템(33)으로부터 수신한 데이터 판독/기입의 요구로부터, 호스트 스토리지 컨트롤러(11)에 대한 조작을 생성하고, 호스트 스토리지 컨트롤러(11)를 적절하게 조작하고, 신호선(20)을 통해 SSD(3)에 판독/기입 요구(리드/라이트 커맨드)를 송신한다.
스토리지 드라이버(31)는, SSD(3)로부터 회답되는, 판독/기입 요구의 결과를, 호스트 스토리지 컨트롤러(11) 경유로 수신하고, 판독/기입 요구의 결과를, 데이터 판독/기입의 요구를 송출한 파일 시스템(33)으로 보낸다. 파일 시스템(33)은, 이 데이터 판독/기입의 요구의 근본 요구원인 프로세스에, 이 데이터 판독/기입의 요구 결과를 보낸다.
이와 같이 하여, 프로세스에 의한 SSD(3)로부터의 데이터의 판독 및 프로세스에 의한 SSD(3)로의 데이터의 기입은 처리된다. 따라서, 파일 시스템(33)은, 어느 프로세스가 어느 LBA에 언제 액세스했는지를 알고 있다.
또한, 프로세스로부터 SSD(3)로 송출되는 요구는, 판독/기입 요구만이 아니다. 예를 들어, SSD(3)로의 총 기입 데이터양, SSD(3)로부터의 총 판독 데이터양과 같은 통계 정보를 SSD(3)로부터 취득하라는 요구나, SSD(3)의 상태를 저소비 전력 상태로 변화시키라는 요구가 SSD(3)에 송신되는 경우도 있다.
이들 요구는, 파일 시스템(33)을 경유하지 않고, 프로세스로부터 스토리지 드라이버(31)로 직접 송출되는 경우가 많다.
파일 시스템(33)은, 예를 들어 NTFS(NT File System)나, ext4(fourth extended file system) 등이다. 호스트(2) 내에 복수의 파일 시스템이 존재하기도 한다.
<SSD(3)의 구성의 설명>
여기에서는, SSD(3)의 데이터 제어부(403)가, 호스트(2)가 데이터를 판독/기입하기 위해 지정하는 LBA와, 그 LBA에 대응하는 최신 데이터가 저장되어 있는 NAND 플래시 메모리(5)상의 기억 위치의 대응 관계를 관리하고 있는 경우에 대하여 설명한다.
도 3은, SSD(3)의 구성예를 나타낸다.
SSD(3)는, 도 1에서 설명한 바와 같이, 컨트롤러(4)와 NAND 플래시 메모리(5)를 포함한다. 컨트롤러(4)는, 도 3에 도시된 바와 같이, 인터페이스 컨트롤러(401)와, 호스트 요구 처리부(402)와, 데이터 제어부(403)와, 버퍼 메모리(404)와, Direct Memory Access Controller(DMAC)(405)와, 오류 정정 부호 처리부(406)와, NAND 인터페이스 컨트롤러(407)를 포함한다.
인터페이스 컨트롤러(401)는, 신호선(20)을 통해 호스트(2)로부터 송신된 SSD(3)에 대한 처리 요구를 수신하고, 호스트 요구 처리부(402)에 이 요구의 내용을 전달한다. 또한 인터페이스 컨트롤러(401)는, 호스트 요구 처리부(402)로부터의 요구에 따라 호스트(2)로부터의 요구에 대한 처리 결과의 회답을, 신호선(20)을 통해 호스트(2)에 송신한다. 또한 인터페이스 컨트롤러(401)는, DMAC(405)로부터의 지시에 따라 기입 데이터를 호스트(2)측의 메모리(13)로부터 판독하여 버퍼 메모리(404)에 기입하거나, 호스트(2)로부터의 리드 요구에 의해 지정되는 데이터를 버퍼 메모리(404)로부터 판독하여 호스트(2)측의 메모리(13)에 기입하거나 한다.
호스트 요구 처리부(402)는, 호스트(2)로부터 송신된 처리 요구를 인터페이스 컨트롤러(401)로부터 수신하여, 처리 요구의 내용을 해석하고, 처리 요구의 내용에 따라서 SSD(3) 내부의 동작을 제어한다.
호스트 요구 처리부(402)는, 예를 들어 호스트(2)로부터 판독 요구(리드 커맨드)를 수신하면, NAND 플래시 메모리(5)로부터 당해 판독 요구에 의해 지정된 데이터를 버퍼 메모리(404)에 판독하도록 데이터 제어부(403)에 대해서 지시하고, 버퍼 메모리(404)에 판독된 데이터를, DMAC(405)를 조작하여 호스트(2)측의 메모리(13)로 전송한다. 또한 호스트 요구 처리부(402)는, 예를 들어 호스트(2)로부터 기입 요구(라이트 커맨드)를 수신하면, DMAC(405)를 조작하여 호스트(2)측의 메모리(13)로부터 기입 데이터를 버퍼 메모리(404)로 전송하고, 버퍼 메모리(404) 내의 기입 데이터를 NAND 플래시 메모리에 기입하도록 데이터 제어부(403)에 대해서 지시한다. 그리고 호스트 요구 처리부(402)는, 호스트(2)로부터 수신한 요구의 처리가 완료되면, 호스트(2)에 대해서 처리 결과를 송신한다.
SSD(3)가 호스트(2)로부터 수신하라는 요구는, 판독 요구, 기입 요구만이 아니다. 전술한 바와 같이, 예를 들어 총 기입 데이터양이나 총 판독 데이터양과 같은 통계 정보를 취득하라는 요구나, SSD(3)의 상태를 저소비 전력 상태로 변화시키라는 요구를 수신하기도 한다. 이들 요구를 수신한 호스트 요구 처리부(402)는, 데이터 제어부(403)에 구체적인 처리를 요구하여, 원하는 처리를 실현한다.
데이터 제어부(403)는, SSD(3) 내에 저장되어 있는 데이터의 관리 및 NAND 플래시 메모리(5)에 대한 액세스의 제어를 행한다. 구체적으로는, 데이터 제어부(403)는, 호스트에 의해 지정되는 LBA와, 그 LBA에 대응하는 최신 데이터가 저장되어 있는 NAND 플래시 메모리(5) 내의 기억 위치를 나타내는 위치 정보의 조를 유지하고 있다. 이 NAND 플래시 메모리(5) 내의 위치 정보를 NAND 물리 어드레스(NAND Physical Address: NPA)라 칭하기로 한다. 또한, 데이터 제어부(403)에 의해 관리되는, LBA 각각과 NPA 각각 사이의 대응 관계를 관리하는 테이블을 논리/물리 변환 테이블이라 칭하기로 한다.
NAND 플래시 메모리(5)는, 메모리 셀 어레이를 갖는 1 이상의 NAND 플래시 메모리 칩을 갖는다. 메모리 셀 어레이는, 매트릭스 형상으로 배열된 복수의 메모리 셀을 갖는다. NAND 플래시 메모리(5)의 메모리 셀 어레이는, 도 4에 도시된 바와 같이, 복수의 블록(물리 블록) BLK0 내지 BLK(j-1)을 포함한다. 블록 BLK0 내지 BLK(j-1)은, 소거 동작의 단위로서 기능한다.
블록 BLK0 내지 BLK(j-1)은 복수의 페이지(물리페이지)를 포함한다. 즉, 블록 BLK0 내지 BLK(j-1)의 각각은, 페이지 P0, P1, …P(k-1)을 포함한다. 각 페이지는, 동일 워드선에 접속된 복수의 메모리 셀을 포함한다. NAND 플래시 메모리(5)에 있어서는, 데이터의 판독 및 데이터의 기입은 페이지 단위로 실행된다.
<SSD(3)에 데이터를 기입하는 처리의 설명>
여기에서는, 데이터 기입 시에 논리/물리 변환 테이블이 갱신되는 경우에 대하여 설명한다.
호스트(2)로부터 SSD(3)에 대해서 데이터 기입 요구가 보내진 경우, SSD(3)의 컨트롤러(4)는 다음과 같이 처리를 행한다.
컨트롤러(4)에 있어서는, 우선, 호스트 요구 처리부(402)가 인터페이스 컨트롤러(401) 경유로 이 기입 요구를 수신한다.
이 기입 요구에는, 기입처 LBA 영역의 선두 LBA와, 기입 사이즈와, 기입 데이터가 저장되어 있는 호스트 메모리의 선두 어드레스가 포함되어 있다. 그래서 호스트 요구 처리부(402)는, DMAC(405)를 조작하여, 이 호스트 메모리의 선두 어드레스로부터, 이 기입 사이즈만큼의 데이터를, 버퍼 메모리(404)에 전송한다. 그리고, 호스트 요구 처리부(402)는, 데이터 제어부(403)에 대해서 버퍼 메모리(404) 내의 데이터를 NAND 플래시 메모리(5)에 기입하도록 지시한다.
또한, 호스트 요구 처리부(402)는, 호스트(2)로부터 수신한 기입 요구에 대한 회답을, 기입이 요구된 데이터를 모두 버퍼 메모리(404)에 전송이 끝난 시점에서 호스트(2)에 송신해도 되고, 기입이 요구된 데이터를 모두 NAND 플래시 메모리(5)에 기입이 끝난 시점에서 호스트(2)에 송신해도 된다.
호스트 요구 처리부(402)로부터 데이터의 기입 지시를 수령한 데이터 제어부(403)는, 당해 데이터를 NAND 플래시 메모리(5)의 어느 NPA에 대응하는 기억 위치에 기입할지를 결정하고, 필요에 따라 오류 정정 부호 처리부(406)를 조작하여 당해 데이터로부터 당해 데이터와 오류 정정 부호를 포함하는 부호화 데이터를 작성하고, NAND 인터페이스 컨트롤러(407)를 조작하여 당해 데이터(또는 당해 부호화 데이터)를 NAND 플래시 메모리(5)에 기입한다.
데이터 제어부(403)는, 당해 데이터를 NAND 플래시 메모리(5)에 기입한 후에, 당해 데이터의 LBA에, 당해 데이터가 기입된 기억 위치를 나타내는 NPA가 대응지어지도록, 논리/물리 변환 테이블을 갱신한다. 만약 논리/물리 변환 테이블에 있어서, 당해 LBA에, 당해 LBA의 오래된 데이터에 대응하는 NPA가 대응지어져 있으면, 이 오래된 데이터에 대응하는 NPA는, 당해 데이터가 기입된 기억 위치를 나타내는 NPA(새로운 NPA)에서 갱신된다. 이와 같이 하여, 논리/물리 변환 테이블의 내용은, LBA와 NPA의 대응 관계가 항상 최신이 되도록 관리된다.
<다치도의 구분 사용>
여기에서는, SSD(3)는, 하나의 메모리 셀에 저장되는 비트의 수를 나타내는 다치도가 서로 다른 복수 종의 프로그램 모드(SLC 모드/MLC 모드/TLC 모드)를 적절히 구분 사용하여 데이터를 NAND 플래시 메모리(5)에 기입할 수 있는 경우에 대하여 설명한다.
예를 들어, NAND 플래시 메모리(5)가, 하나의 메모리 셀에 3비트의 데이터가 저장되는 트리플 레벨 셀(TLC)-NAND 플래시 메모리로서 실현되어 있는 경우에는, NAND 플래시 메모리(5)는, 다치도가 서로 다른 복수의 프로그램 모드, 즉 (1) 하나의 메모리 셀에 1비트의 데이터가 저장되는 싱글 레벨 셀(SLC) 모드, (2) 하나의 메모리 셀에 2비트의 데이터가 저장되는 멀티 레벨 셀(MLC) 모드, (3) 하나의 메모리 셀에 3비트의 데이터가 저장되는 트리플 레벨 셀(TLC) 모드를 선택적으로 사용하여, 데이터를 NAND 플래시 메모리(5)에 기입할 수 있다.
일반적으로, 하나의 메모리 셀에 기입되는 데이터양(비트 수)이 많은, 즉 다치도가 높은 쪽이, 메모리 비용은 낮아져서, NAND 플래시 메모리(5)의 이용 효율이 올라간다. 그러나, 다치도가 높은 프로그램 모드에서 데이터를 메모리 셀에 기입하기 위해서는, 또한 다치도가 높은 프로그램 모드로 기입된 데이터를 메모리 셀로부터 판독하기 위해서는, 복잡한 처리가 필요하게 되어, 데이터의 기입/판독에 걸리는 시간이 길어지는 경우가 많다.
따라서, 데이터 제어부(403)는, 호스트(2)로부터 지시된 기입 요구를 가능한 한 신속하게 완료시키고 싶은 경우에, NAND 플래시 메모리(5)의 블록에 SLC 모드와 같은 다치도가 낮은 프로그램 모드로 기입하는 경우가 있다.
반대로, 데이터 제어부(403)는, NAND 플래시 메모리(5)의 이용 효율을 올리고 싶을 때에는, 가비지 컬렉션(GC) 등을 행하여, 다치도가 낮은 프로그램 모드로 기입된 데이터를, TLC 모드와 같은 보다 다치도가 높은 프로그램 모드에서 재기입한다. GC는, 유효 데이터와 무효 데이터가 혼재하는 몇 개의 블록(GC 소스 블록) 내의 유효 데이터를 새로운 블록(GC 데스티네이션 블록)으로 이동시키고, GC 소스 블록을 유효 데이터를 포함하지 않는 프리 블록으로 하는 동작이다.
프로그램 모드의 전환은 NAND 플래시 메모리(5)의 블록 단위로 행해진다. 즉, NAND 플래시 메모리(5)에 포함되는 복수의 블록은, 하나의 메모리 셀에 저장되는 비트의 수를 나타내는 다치도가 서로 다른 복수 종의 블록 중 어느 것으로서 선택적으로 사용된다.
이후, SLC로서 사용되고 있는 NAND 플래시 메모리(5)의 블록(즉, SLC 모드에서 데이터가 기입되는 블록)을 SLC 블록이라 칭한다. 마찬가지로, MLC로서 사용되고 있는 NAND 플래시 메모리(5)의 블록(즉, MLC 모드에서 데이터가 기입되는 블록)을 MLC 블록, TLC로서 사용되고 있는 NAND 플래시 메모리(5)의 블록(즉, TLC 모드에서 데이터가 기입되는 블록)을 TLC 블록이라 칭한다.
예를 들어, 데이터 제어부(403)는, 우선, 호스트(2)에 의한 데이터 기입을 신속하게 완료시키기 위해서, 호스트(2)로부터 수신한 거의 모든 기입 요구에 대응하는 기입 데이터를 다치도가 낮은 블록(예를 들어 SLC 블록)에 기입해도 된다. 그리고, 후에, 데이터 제어부(403)는, 필요에 따라 다치도가 낮은 하나 이상의 블록에 저장되어 있는 데이터(유효 데이터)를, 보다 다치도가 높은 하나 이상의 블록(MLC 블록 또는 TLC 블록)으로 이동시켜도 된다.
여기서, 데이터의 이동이란, NAND 플래시 메모리(5)의 적어도 하나의 블록(이동원 블록)에 저장되어 있는 데이터를 NAND 플래시 메모리(5)의 다른 적어도 하나의 블록(이동처 블록)으로 데이터를 카피하고, 이동원 블록 내의 이 데이터를 무효화함을 의미한다.
또한, 유효 데이터란, LBA와 같은 논리 어드레스에 관련지어져 있는 최신의 데이터를 의미한다. 무효 데이터란, 어느 논리 어드레스에도 관련지어져 있지 않은 오래된 데이터를 의미한다.
이와 같은 이동 처리를 제어하기 위해서, 데이터 제어부(403)는, 도 5와 같은 관리 테이블을 작성하여, NAND 플래시 메모리(5)의 사용 상황을 관리한다.
<NAND 플래시 메모리의 사용 상황을 관리하는 테이블의 설명>
도 5는, 데이터 제어부(403)가 작성하여 관리하는, SSD(3) 내의 NAND 플래시 메모리(5)의 사용 상황을 관리하는 테이블을 나타낸다. 이 테이블의 경우를, 이하 NAND 관리 테이블이라 칭한다.
이 도 5의 NAND 관리 테이블에는, SLC, MLC, TLC와 같은 NAND 플래시 메모리(5)의 이용 가능한 다치도별로, 각 다치도로 사용하고 있는 NAND 플래시 메모리(5)의 블록 수(사용 블록 수), 사용되고 있는 블록 내에 저장되어 있는 유효 데이터의 총량(유효 데이터양), 각 다치도로 사용 가능한 최대 블록 수, 최대 블록 수를 각 다치도로 사용한 경우에 저장 가능한 최대 데이터양 및 각 다치도로 현재 사용할 수 있는 빈 블록 수(프리 블록 수)가 기록되어, 관리되고 있다.
또한, 도 5의 NAND 관리 테이블에는, 다치도와는 관계없이, SSD(3) 전체로서의, 상기 사용 블록 수, 유효 데이터양, 최대 블록 수, 최대 데이터양, 및 프리 블록 수도 기록되고, 관리되어 있다.
데이터 제어부(403)가 NAND 플래시 메모리(5)에 데이터를 기입한 경우, 데이터 제어부(403)는, 기입 시의 다치도에 따라 NAND 관리 테이블을 갱신한다. 예를 들어, 데이터 제어부(403)가 SLC의 프리 블록으로부터 하나의 블록을 취득하고, 당해 블록에 4킬로바이트의 데이터를 SLC 모드로 기입하면, 데이터 제어부(403)는, NAND 관리 테이블 내의 SLC의 행의 사용 블록 수를 1 증가시키고, SLC의 행의 유효 데이터양을 4킬로바이트 증가시키며, SLC의 행의 프리 블록 수를 1 감소시킨다.
이때, 이 데이터의 기입에 의해 예를 들어 MLC 블록에 저장되어 있는 4킬로바이트의 데이터가 오래된 데이터로 된(무효 데이터로 된) 경우, 데이터 제어부(403)는, NAND 관리 테이블 내의 MLC의 행의 유효 데이터양을 4킬로바이트 감소시킨다.
또한, 데이터 제어부(403)는, SSD 전체의 행의 사용 블록 수를 1 증가시키고, SSD 전체의 행의 프리 블록 수를 1 감소시킨다. 또한, SSD 전체의 행의 유효 데이터양은 변화하지 않는다. 왜냐하면, SLC 블록에 새롭게 기입된 4킬로바이트의 데이터가 유효 데이터로 된 대신에, MLC 블록에 저장되어 있던 4킬로바이트의 데이터가 무효 데이터로 되었기 때문이다.
<NAND 관리 테이블로부터 알 수 있는 사실의 설명>
도 5의 NAND 관리 테이블을 보면, SSD(3) 내부의 상태에 대하여, 다음과 같은 사실을 알 수 있다.
SLC 블록의 사용 블록 수가 많은 경우, NAND 플래시 메모리(5)의 이용 효율이 저하된다는 사실을 알 수 있다. SLC 블록은 판독 기입이 빠르지만, 다치도가 낮기 때문에 이용 효율은 나쁘다. 따라서, SLC 블록으로서 사용하는 최대 블록 수는 어느 정도 적게 설정할 필요가 있다.
SLC의 사용 블록 수가 미리 설정한 최대 블록 수에 근접한 경우, NAND 플래시 메모리(5)의 이용 효율이 떨어져 있을 뿐만 아니라, 추가로 호스트(2)로부터의 기입 요구에 대해서 SLC 블록을 할당할 수 없게 된다. 그래서, SLC 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시킬 필요가 있다고 판단할 수 있다.
또한, 모든 다치도에 대하여, 사용 블록 수가 증가되었는데도 불구하고, 유효 데이터양이 최대 데이터양과 비교하여 적은 경우에는, 무효 데이터가 많아, NAND 플래시 메모리(5) 내의 많은 블록이 유효 활용되고 있지 않다는 사실을 알 수 있다.
이 때에는, 동시에 전체적으로 프리 블록 수가 줄어들고 있다. 따라서, 데이터 제어부(403)는 GC에 의해 사용 블록 수를 줄여, 프리 블록 수를 증가시킬 필요가 있다고 판단할 수 있다.
이와 같이, 도 5의 NAND 관리 테이블을 사용하여 SSD(3) 내의 NAND 플래시 메모리(5)의 사용 상황을 체크함으로써, 데이터 제어부(403)는 다음에 어떠한 처리가 필요한지를 판단할 수 있다.
<제1 실시 형태의 데이터 이동 처리의 설명>
우선, 제1 실시 형태의 데이터 이동 처리의 개요에 대하여 설명한다.
호스트(2)의 프로세서(12)에 의해 실행되는 호스트 소프트웨어에는, 프로세스 감시부(41)가 추가된다. 이 프로세스 감시부(41)는 호스트(2)상에서 동작하는 프로세스 수를 알고 있어, 총 프로세스 수를 SSD(3)에 통지할 수 있다. 또한, 프로세스 감시부(41)는, 총 프로세스 수의 증감을 SSD(3)에 통지해도 된다.
SSD(3)의 컨트롤러(4)는, 호스트(2)로부터 통지되는 총 프로세스 수가 어떤 임계값을 상회하였는지 여부를 판정하고, 총 프로세스 수가 어떤 임계값을 상회하였다고 판정된 경우, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행한다. 이 경우 , 예를 들어 SLC 블록에 저장되어 있는 데이터(유효 데이터)를 MLC 블록 또는 TLC 블록으로 이동시키는 처리가 실행된다. 이에 의해, 현재 사용되고 있는 SLC 블록을 프리 블록으로 할 수 있다. 전술한 바와 같이, 총 프로세스 수가 많아지면, 스왑 아웃, 스왑 인이 일어나기 쉬워진다. 본 실시 형태에서는, 총 프로세스 수에 기초하여, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리가 실행되므로, 스왑 아웃, 스왑 인이 일어나기 쉬워지기 전에, 다치도가 낮은 블록(예를 들어 SLC 블록)의 프리 블록 수를 증가시키는 것이 가능해진다. 따라서, 후에 프로세스의 스왑 아웃이나 스왑 인이 발생할 때 다치도가 낮은 블록을 데이터의 기입 및 데이터의 판독에 사용할 수 있을 가능성이 높아진다. 이 결과, 스왑 아웃이나 스왑 인에 걸리는 시간을 단축할 수 있다.
또한, 데이터의 이동은, 동일한 다치도의 블록 간에서 행해도 된다. 이 데이터 이동은, 전술한 GC의 일 형태이다. 이 데이터 이동에 의해 생성된 프리 블록을 SLC의 프리 블록으로서 할당함으로써, 후속의 호스트(2)로부터의 기입 요구에 대비할 수 있다.
또한, 데이터를 이동시키는 처리는, 반드시 총 프로세스 수가 어떤 임계값을 상회하였다고 판정된 시점에 바로 실행될 필요는 없으며, 총 프로세스 수가 어떤 임계값을 상회하였다고 판정된 후에 실행되면 된다.
예를 들어, 총 프로세스 수가 어떤 임계값을 상회하였다고 판정된 시점에, 컨트롤러(4)(예를 들어 호스트 요구 처리부(402))는 데이터를 이동시키는 처리를 실행할 것을 결정하고, 이 데이터 이동을 위한 처리를 대기 행렬에 큐잉해도 된다.
또는, 총 프로세스 수가 임계값을 상회하였음을 트리거로 하여, 호스트 요구 처리부(402)는, 데이터 이동을 위한 처리의 우선도를 올려도 된다. 이에 의해, 데이터 이동을 위한 처리의 우선도가 몇 개의 다른 처리의 우선도보다도 높아지므로, 데이터 이동을 위한 처리를, 이들 몇 개의 다른 처리보다도 우선하여 실행하는 것이 가능해진다.
또는, 총 프로세스 수가 어떤 임계값을 상회하였다고 판정된 시점에, 호스트 요구 처리부(402)는 데이터를 이동시키는 처리를 실행할 것을 결정하고, 그리고 SLC의 유효 데이터양이 어떤 임계값으로까지 저하되거나, 또는 SSD(3) 전체의 프리 블록 수가 어떤 임계값으로까지 저하된다고 하는 조건이 성립될 때까지 기다려, 이 조건이 성립될 때, 데이터 이동을 위한 처리를 실행해도 된다.
이하, 총 프로세스 수에 기초하는 데이터 이동 처리를 실현하기 위한 구체적인 구성에 대하여 설명한다.
도 6은, 프로세스 감시부(41)를 포함하는, 호스트(2)의 내부 구성예를 나타낸다.
이 도 6의 구성예는, 도 2의 구성예에 대해, 프로세스 감시부(41)를 추가한 것이다.
프로세스 감시부(41)는, OS(32)의 프로세스 관리부(321)나 메모리 관리부(322), 나아가 파일 시스템(33)과의 정보의 수수를 통하여, 호스트(2)에서 동작하고 있는 프로세스, 이들 각 프로세스에 할당되어 있는 메모리 영역, 그 영역 사이즈, 나아가 각 프로세스가 액세스한 SSD(3)의 LBA 등의 정보를 취득하고, 관리한다.
구체적으로는, 프로세스 감시부(41)는, 도 7과 같은 관리 테이블을 사용하여 상기 정보를 관리하고 있다. 도 7과 같은 관리 테이블은, 복수의 프로세스에 대응하는 복수의 엔트리(행)를 갖는다. 각 행은, 프로세스 식별자 필드, 프로세스 종별 필드, 메모리 사용량 필드, 복수의 LBA 이용 리스트 필드, 최종 기동 시각 필드를 포함한다.
어떤 프로세스에 대응하는 행에 있어서, 프로세스 식별자 필드는, 이 프로세스의 식별자를 나타낸다. 프로세스 종별 필드는, 이 프로세스의 종별(유저 프로세스/시스템 프로세스)을 나타낸다. 메모리 사용량 필드는, 이 프로세스에 의해 사용되고 있는 호스트 메모리상의 메모리 영역의 용량을 나타낸다. LBA 이용 리스트 필드는, 이 프로세스가 액세스(판독/기입)한 SSD(3)의 LBA의 리스트를 나타낸다. 최종 기동 시각 필드는, 이 프로세스가 마지막으로 기동된 시각을 나타낸다.
전술한 바와 같이, 프로세스 생성 시에는 프로세스 관리부(321)가 SSD(3)로부터 프로그램을 판독하는 외에, 프로세스가 SSD(3)에 대한 판독/기입 요구를 발행한다. 따라서, 프로세스가 생성되면, SSD(3)로의 데이터의 기입, SSD(3)로부터의 데이터의 판독이 행해질 가능성이 높다.
그래서, 프로세스 감시부(41)가 프로세스 관리부(321)에 문의함으로써 프로세스가 생성되었음을 검출하면, 프로세스 감시부(41)는 그 사실을 SSD(3)에 통지한다. 이 SSD(3)로의 통지는, NVMe 등의 표준 규격의 커맨드를 사용해도 되고, 다른 방법을 이용해도 상관없다.
호스트(2)로부터 프로세스 수가 늘어났음을 통지받은 SSD(3)의 컨트롤러(4)에 있어서는, 그 통지를 수령한 호스트 요구 처리부(402)는, 데이터 제어부(403)에, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키고, 이에 의해 다치도가 낮은 블록용 프리 블록 수를 늘려, 후속의 호스트(2)로부터의 액세스에 대비한다.
또한, 프로세스 수가 감소되는 것은 프로세스가 종료되었음을 의미한다. 프로세스가 종료되면, 당해 종료된 프로세스가 SSD(3)에 대해서 판독 기입한 데이터는 당분간 액세스되지 않을 가능성이 높다.
그래서, 프로세스 감시부(41)가 프로세스 관리부(321)에 문의함으로써 프로세스가 종료되었음을 검출하면, 프로세스 감시부(41)는 그 사실을 SSD(3)에 통지한다. 이 SSD(3)로의 통지도, NVMe 등의 표준 규격의 커맨드를 사용해도 되고, 다른 방법을 이용해도 상관없다.
호스트(2)로부터 프로세스 수가 줄어들었음을 통지받은 SSD(3)의 컨트롤러(4)에 있어서는, 그 통지를 수령한 호스트 요구 처리부(402)는, 데이터 제어부(403)에, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키고, 이에 의해 다치도가 낮은 블록용 프리 블록 수를 늘려, NAND 플래시 메모리(5)의 이용 효율의 개선을 도모한다.
또한, 프로세스의 총 수가 적은 것은, 호스트(2)로부터 SSD(3)로 송신되는 판독/기입 요구가 적을 가능성을 나타낸다.
또한 프로세스의 총 수가 많은 것은, 전술한 프로세스의 스왑 아웃과 스왑 인이 일어날 가능성이 높음을 나타낸다.
그래서 프로세스 감시부(41)는, 프로세스 관리부(321)에 문의한 결과로부터 총 프로세스 수를 관리하고, 그 총 프로세스 수를 SSD(3)에 통지한다. 이 SSD(3)로의 통지도, NVMe 등의 표준 규격의 커맨드를 사용해도 되고, 다른 방법을 이용해도 상관없다. SSD(3)에 총 프로세스 수를 통지하는 타이밍은, 프로세스 수가 증감했을 때여도 되며, 정기적으로 통지하도록 해도 된다.
호스트(2)로부터 총 프로세스 수의 통지를 받은 SSD(3)의 컨트롤러(4)에 있어서는, 그 통지를 수령한 호스트 요구 처리부(402)는, 통지된 총 프로세스 수가 미리 설정된 임계값(제1 임계값)을 상회하고 있는지를 체크한다.
만약 총 프로세스 수가 상기 제1 임계값을 상회하고 있는 경우, 호스트 요구 처리부(402)는, 데이터 제어부(403)에, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키도록 지시한다. 이에 의해, 다치도가 낮은 블록에 저장되어 있는 데이터가 보다 다치도가 높은 블록으로 이동되므로, 다치도가 낮은 블록용 프리 블록 수가 늘어나, 후에 프로세스의 스왑 아웃이나 스왑 인이 발생할 때에 다치도가 낮은 블록을 사용할 수 있을 가능성이 높아진다. 이 결과, 스왑 아웃이나 스왑 인에 걸리는 시간이 단축되어, 호스트(2)측에서 본 SSD(3)의 성능, 나아가서는 유저측에서 본 SSD(3)의 성능을 향상시킬 수 있다.
또한, 호스트 요구 처리부(402)는, 총 프로세스 수가 미리 설정된 임계값(제2 임계값)을 하회하고 있는지를 체크한다. 예를 들어, 제2 임계값은, 제1 임계값보다도 작은 값이다.
만약 총 프로세스 수가 제2 임계값을 하회하고 있는 경우, 호스트 요구 처리부(402)는, 데이터 제어부(403)에, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키도록 지시한다. 이에 의해, 다치도가 낮은 블록에 저장되어 있는 데이터가 보다 다치도가 높은 블록으로 이동되므로, 다치도가 낮은 블록용 프리 블록 수가 늘어나, NAND 플래시 메모리(5)의 이용 효율이 개선된다.
도 8의 흐름도는, 호스트(2)와 SSD(3)에 의해 실행되는, 총 프로세스 수의 통지 처리 및 데이터 이동 처리의 수순을 나타낸다.
호스트(2)의 프로세스 감시부(41)는, 프로세스 관리부(321)와 공동하여, 호스트(2)의 프로세서(12)상에서 동작하고 있는 총 프로세스 수를 관리한다(스텝 S11). 총 프로세스 수가 증감되었거나, 또는 전회의 통지로부터 일정 기간이 경과하였다고 하는 통지 조건이 성립했을 때(스텝 S12의 예), 프로세스 감시부(41)는, 총 프로세스 수를 나타내는 정보를 SSD(3)로 송신하여 총 프로세스 수를 SSD(3)에 통지한다(스텝 S13).
SSD(3)의 컨트롤러(4)는, 총 프로세스 수를 나타내는 통지를 호스트(2)로부터 수신한다(스텝 S21). 컨트롤러(4)의 호스트 요구 처리부(402)는, 호스트(2)에 의해 통지된 총 프로세스 수를 제1 임계값과 비교하여, 총 프로세스 수가 제1 임계값을 상회하고 있는지 여부를 판정한다(스텝 S22).
총 프로세스 수가 제1 임계값을 상회하고 있으면(스텝 S22의 예), 호스트 요구 처리부(402)는, 데이터 제어부(403)를 사용하여, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행한다(스텝 S23). 스텝 S23에서는, 호스트 요구 처리부(402)로부터 데이터 제어부(403)에 데이터 이동이 지시된다. 그리고, 데이터 제어부(403)가 데이터를 다치도가 낮은 블록으로부터 다치도가 높은 블록으로 이동시킨다. 예를 들어, 데이터 제어부(403)는, SLC 블록에 저장되어 있는 데이터(유효 데이터)를 판독하고, 이 데이터를, MCL 블록에 MLC 모드로 기입하거나, 또는 TLC 블록에 TLC 모드로 기입한다. 이에 의해, SLC 블록에 저장되어 있는 데이터가 SLC 블록으로부터 MCL 블록 또는 TLC 블록으로 이동된다. 데이터의 이동에 의해 유효 데이터가 없어진 SLC 블록은 프리 블록으로 된다.
따라서, 호스트(2)(프로세서(12))상에서 동작하고 있는 프로세스의 수의 증가에 의해 스왑 아웃이 일어나기 전에, SLC의 프리 블록을 사전에 확보해 두는 것이 가능하게 되어, 스왑 아웃에 요하는 시간을 저감시킬 수 있다. 이 결과, 컴퓨터 시스템(1) 전체의 성능을 개선시키는 것이 가능해진다.
총 프로세스 수가 제1 임계값을 상회하고 있지 않으면(스텝 S22의 아니오), 호스트 요구 처리부(402)는, 총 프로세스 수를 제2 임계값(<제1 임계값)과 비교하여, 총 프로세스 수가 제2 임계값을 하회하고 있는지 여부를 판정한다(스텝 S24).
총 프로세스 수가 제2 임계값을 하회하고 있으면(스텝 S24의 예), 호스트 요구 처리부(402)는, 데이터 제어부(403)를 사용하여, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행한다(스텝 S25). 스텝 S25에서는, 호스트 요구 처리부(402)로부터 데이터 제어부(403)에 데이터의 이동이 지시된다. 그리고, 데이터 제어부(403)는, 데이터를 다치도가 낮은 블록으로부터 다치도가 높은 블록으로 이동시킨다. 예를 들어, 데이터 제어부(403)는, SLC 블록에 저장되어 있는 데이터(유효 데이터)를 판독하고, 이 데이터를, MCL 블록에 MLC 모드로 기입하거나, 또는 TLC 블록에 TLC 모드로 기입한다. 이에 의해, SLC 블록에 저장되어 있는 데이터가 SLC 블록으로부터 MCL 블록 또는 TLC 블록으로 이동된다. 이 데이터의 이동에 의해, NAND 플래시 메모리(5)의 이용 효율이 개선된다.
또한, 스텝 S23에서는, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행하였지만, 예를 들어 TLC 블록 간에서 데이터(유효 데이터)를 이동시켜도 된다. 전술한 바와 같이, 이 데이터 이동은 GC의 일 형태이다. 이 경우에도, 데이터 이동에 의해 생성된 프리 블록을 SLC용 프리 블록으로서 할당함으로써, 후의 스왑 아웃에 대비할 수 있다.
마찬가지로, 스텝 S25에서도, 예를 들어 TLC 블록 간에서 데이터(유효 데이터)를 이동시켜도 된다.
도 9의 흐름도는, 호스트(2)와 SSD(3)에 의해 실행되는, 프로세스 수 증감 통지 처리 및 데이터 이동 처리의 수순을 나타낸다.
호스트(2)의 프로세스 감시부(41)는, 프로세스 관리부(321)와 공동하여, 호스트(2)의 프로세서(12)상에서 동작하고 있는 총 프로세스 수의 증감을 관리한다(스텝 S31).
총 프로세스 수가 증가하면(스텝 S32의 예), 프로세스 감시부(41)는, 총 프로세스 수의 증가를 나타내는 통지를 SSD(3)에 송신한다(스텝 S33).
한편, 총 프로세스 수가 감소하면(스텝 S34의 예), 프로세스 감시부(41)는, 총 프로세스 수의 감소를 나타내는 통지를 SSD(3)에 송신한다(스텝 S35).
SSD(3)의 컨트롤러(4)가 총 프로세스 수의 증가를 나타내는 통지를 호스트(2)로부터 수신하면(스텝 S41의 예), 컨트롤러(4)의 호스트 요구 처리부(402)는, 데이터 제어부(403)를 사용하여, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행한다(스텝 S42). 스텝 S42에서는, 호스트 요구 처리부(402)로부터 데이터 제어부(403)에 데이터의 이동이 지시되고, 데이터 제어부(403)가 데이터를 다치도가 낮은 블록으로부터 다치도가 높은 블록으로 이동시킨다. 예를 들어, 데이터 제어부(403)는, SLC 블록에 저장되어 있는 데이터(유효 데이터)를 판독하고, 이 데이터를, MCL 블록에 MLC 모드로 기입하거나, 또는 TLC 블록에 TLC 모드로 기입한다. 이에 의해, SLC 블록에 저장되어 있는 데이터가 SLC 블록으로부터 MCL 블록 또는 TLC 블록으로 이동된다. 데이터의 이동에 의해 유효 데이터가 없어진 SLC 블록은 프리 블록으로 된다.
따라서, 스왑 아웃이 일어나기 전에, SLC용 프리 블록을 사전에 확보해 두는 것이 가능하게 되어, 스왑 아웃에 요하는 시간을 저감시킬 수 있다. 이 결과, 컴퓨터 시스템(1) 전체의 성능을 개선하는 것이 가능해진다.
SSD(3)의 컨트롤러(4)가 총 프로세스 수의 감소를 나타내는 통지를 호스트(2)로부터 수신하면(스텝 S43의 예), 컨트롤러(4)의 호스트 요구 처리부(402)는, 데이터 제어부(403)를 사용하여, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행한다(스텝 S44). 스텝 S44에서는, 호스트 요구 처리부(402)로부터 데이터 제어부(403)로 데이터의 이동이 지시되고, 데이터 제어부(403)가 데이터를 다치도가 낮은 블록으로부터 다치도가 높은 블록으로 이동시킨다. 예를 들어, 데이터 제어부(403)는, SLC 블록에 저장되어 있는 데이터(유효 데이터)를 판독하고, 이 데이터를, MCL 블록에 MLC 모드로 기입하거나 또는 TLC 블록에 TLC 모드로 기입한다. 이에 의해, SLC 블록에 저장되어 있는 데이터가 SLC 블록으로부터 MCL 블록 또는 TLC 블록으로 이동된다. 이 데이터의 이동에 의해, NAND 플래시 메모리(5)의 이용 효율이 개선된다.
또한, 스텝 S42에서는, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행하였지만, 예를 들어 TLC 블록 간에서 데이터(유효 데이터)를 이동시켜도 된다. 전술한 바와 같이, 이 데이터 이동은 GC의 일 형태이다. 이 경우에도, 데이터 이동에 의해 생성된 프리 블록을 SLC용 프리 블록으로서 할당함으로써, 후의 스왑 아웃에 대비할 수 있다.
마찬가지로, 스텝 S44에서도, 예를 들어 TLC 블록 간에서 데이터(유효 데이터)를 이동시켜도 된다. 이에 의해, TLC 블록의 프래그먼테이션을 저감시킬 수 있다.
도 8의 흐름도 및 도 9의 흐름도를 참조하여 설명한 호스트(2)의 처리는, 호스트 소프트웨어(스토리지 드라이버(31), 오퍼레이팅 시스템(OS)(32), 파일 시스템(33), 프로세스 감시부(41) 등)를 실행하도록 구성된 프로세서(12)에 의해 실행된다.
(제2 실시 형태)
제1 실시 형태에서는, 호스트(2)로부터 SSD(3)에 통지되는 총 프로세스 수(또는 총 프로세스 수의 증감)에 기초하여 데이터 이동을 실행하였다. 제2 실시 형태에서는, 프로세스의 식별자가 호스트(2)로부터 SSD(3)에 통지되고, 특정된 프로세스에 의해 기입된 데이터가 블록 간에서 이동된다. 또한, 제2 실시 형태에 있어서의 SSD(3)의 하드웨어 구성 및 호스트(2)의 하드웨어 구성은 제1 실시 형태의 SSD(3) 및 호스트(2)와 마찬가지이다.
<제2 실시 형태의 데이터 이동 처리의 설명>
우선, 제2 실시 형태의 데이터 이동 처리의 개요에 대하여 설명한다.
호스트(2)는, 호스트(2)에 있어서 생성된 각 프로세스의 식별자를 나타내는 정보를 SSD(3)에 통지할 수 있다. 또한, 호스트(2)는, 데이터의 기입을 요구한 프로세스의 식별자가 각각에 부여된 기입 요구 각각을 SSD(3)에 송신할 수 있다. SSD(3)의 컨트롤러(4)는, 생성된 각 프로세스의 식별자와, 상기 생성된 각 프로세스에 의해 기입된 데이터에 대응하는 어드레스 범위의 대응 관계를 관리 테이블을 사용하여 관리한다.
SSD(3)의 컨트롤러(4)는, 어떤 프로세스의 종료를 나타내는 통지를 호스트(2)로부터 수신한 후, 관리 테이블에 기초하여, 종료된 프로세스에 의해 NAND 플래시 메모리(5)에 기입된 데이터를 다치도가 낮은 블록으로부터 보다 다치도가 높은 블록으로 이동시키는 처리를 실행한다.
종료된 프로세스에 대응하는 데이터는, 잠시 동안, 호스트(2)로부터 액세스되는 일은 없다. 따라서, 종료된 프로세스에 대응하는 데이터를 보다 다치도가 높은 블록으로 이동시켜도, 이 데이터의 판독 속도가 저하된다고 하는 현상은 일어나지 않으므로, 성능의 저하를 초래하지 않아, 후속의 호스트(2)로부터의 기입 요구에 대비할 수 있다.
또한, 종료된 프로세스에 대응하는 데이터의 이동은, 동일한 다치도의 블록 간에서 행해도 된다. 이 경우에도, 데이터 이동은, 전술한 GC의 일 형태이다. 이 데이터 이동에 의해 생성된 프리 블록을 SLC의 프리 블록으로서 할당함으로써, 후속의 호스트(2)로부터의 기입 요구에 대비할 수 있다.
또한, 호스트(2)는, 데이터의 기입을 요구한 프로세스의 식별자가 각각에 부여된 기입 요구를 SSD(3)에 송신할 뿐만 아니라, 데이터의 판독을 요구한 프로세스의 식별자가 각각에 부여된 판독 요구를 SSD(3)에 송신해도 된다. 이 경우, SSD(3)의 컨트롤러(4)는, 생성된 각 프로세스의 식별자와, 생성된 각 프로세스에 의해 액세스된(판독 또는 기입된) 데이터에 대응하는 어드레스 범위의 대응 관계를 관리 테이블을 사용하여 관리하면 된다. 그리고, SSD(3)의 컨트롤러(4)는, 어떤 프로세스의 종료를 나타내는 통지를 호스트(2)로부터 수신한 후, 이 관리 테이블에 기초하여, 종료된 프로세스에 의해 액세스된(판독 또는 기입된) 데이터를 다치도가 낮은 블록으로부터 보다 다치도가 높은 블록으로 이동시킨다.
또한, 제1 실시 형태와 마찬가지로, 데이터를 이동시키는 처리는, 반드시, 종료된 프로세스가 호스트(2)로부터 통지된 시점에 바로 실행될 필요는 없으며, 나중에 실행되어도 된다.
이하, 제2 실시 형태의 데이터 이동 처리를 실현하기 위한 구체적인 구성에 대하여 설명한다.
도 10은, 호스트(2)의 내부 구성예를 나타낸다.
도 10의 내부 구성예는, 도 6의 내부 구성예에 비하여, 스토리지 드라이버(31)의 전단에 필터 드라이버(42)가 추가되어 있는 점이 상이하다.
제1 실시 형태에서 설명한 바와 같이, 호스트(2)의 프로세스 감시부(41)는 호스트(2)에서 동작하고 있는 프로세스 각각을 파악하고 있다. 또한 프로세스 감시부(41)는, 파일 시스템(33)으로부터, 각 프로세스가 판독 기입한 LBA 영역(LBA 범위)의 정보를 취득하고 있다. 또한, 판독 요구 및 기입 요구의 각각은 액세스처 LBA 영역을 지정하는 정보(선두 LBA와 데이터 사이즈)를 포함한다. 이로 인해, 프로세스 감시부(41)는, 필터 드라이버(42)를 추가하고, 판독/기입 요구에 포함되는 액세스처 LBA 영역을 참조함으로써, 이 데이터의 판독/기입을 요구한 요구원의 프로세스를 특정할 수 있고, 또한, 필터 드라이버(42)를 사용하여, 이 특정된 프로세스의 식별자를 이 판독/기입 요구에 부여할 수 있다. 따라서, 스토리지 드라이버(31)는, 데이터의 판독/기입을 요구한 프로세스의 식별자가 부여된 판독/기입 요구를 SSD(3)에 송신할 수 있다. 이 경우, 프로세스의 식별자를 포함하는 판독/기입 요구(리드/라이트 커맨드)가 SSD(3)에 송신되어도 된다.
SSD(3)의 컨트롤러(4)는, 프로세스의 식별자가 부여된 판독/기입 요구를 호스트(2)로부터 수신한다. 따라서, 컨트롤러(4)는, 이 판독/기입 요구에 기초하여, 데이터의 판독/기입을 요구한 요구원의 프로세스의 식별자를 검출할 수 있다.
이 프로세스의 식별자는, 프로세스 ID여도 되고, 프로세스의 기초가 된 프로그램의 ID여도 되고, 이 프로그램의 명칭 또는 이 프로그램의 파일명이어도 된다.
SSD(3)의 데이터 제어부(403)는, 수신된 판독/기입 요구 내의 프로세스 식별자를 사용하여, 도 11에 도시한 테이블(이하, '프로세스 데이터 관리 테이블'이라 칭함)을 작성한다.
데이터 제어부(403)는, 데이터의 판독/기입을 요구한 프로세스 각각의 식별자와, 이들 프로세스 각각에 의해 액세스(판독/기입)된 데이터에 대응하는 어드레스 범위 각각의 대응 관계를, 프로세스 데이터 관리 테이블을 사용하여 관리한다.
이 프로세스 데이터 관리 테이블은, 복수의 프로세스에 대응하는 복수의 엔트리(행)를 갖는다. 각 행은, 프로세스 식별자 필드, SLC 필드, MLC 필드, TLC 필드, 프로세스 종별 필드, LBA 영역·다치도 필드, 최종 액세스 시각 필드를 포함한다.
어떤 프로세스에 대응하는 행에 있어서, 프로세스 식별자 필드는, 이 프로세스의 식별자를 나타낸다. SLC 필드는, 이 프로세스에 의해 액세스되는 전체 데이터양 중, SLC 모드로 저장되어 있는 데이터양을 나타낸다. MLC 필드는, 이 프로세스에 의해 액세스되는 전체 데이터양 중, MLC 모드로 저장되어 있는 데이터양을 나타낸다. TLC 필드는, 이 프로세스에 의해 액세스되는 전체 데이터양 중, TLC 모드로 저장되어 있는 데이터양을 나타낸다. 프로세스 종별 필드는, 이 프로세스가 시스템 프로세스 또는 유저 프로세스 중 어느 것인지를 나타낸다. LBA 영역·다치도 필드는, 이 프로세스에 의해 액세스(판독/기입)된 LBA 영역(선두 LBA와 사이즈(논리 블록의 수))과, 그 LBA 영역의 데이터가 어느 다치도의 블록에 저장되어 있는지를 나타낸다. 이 LBA 영역은, 이 프로세스에 의해 판독/기입된 데이터에 대응하는 어드레스 범위를 나타내고 있다. 최종 액세스 시각 필드는, 이 프로세스가 마지막으로 SSD(3)에 액세스한 최종 액세스 시각, 즉 이 프로세스가 마지막으로 SSD(3)로부터의 데이터의 판독 또는 SSD(3)로의 데이터의 기입을 행한 최종 액세스 시각을 나타낸다. 또한, 최종 액세스 시각은, 도 11에 도시한 바와 같이, LBA 영역별로 관리되어도 된다.
본 실시 형태에서는, 데이터를 다치도가 서로 다른 복수의 블록 간에서 이동함으로써, 동일한 프로세스의 데이터를 다치도가 서로 다른 복수의 블록으로 분산시킬 수도 있다. 예를 들어, 어떤 프로세스에 대응하는 프로그램이 TLC 블록과 같은 다치도가 높은 블록에 저장되어도 되고, 이 프로세스에 의해 작성된 파일과 같은 데이터가 SLC 블록에 저장되어도 된다. 이 경우, 이 프로그램에 할당된 LBA 영역에 대응하는 다치도는 TLC를 나타내고, 파일과 같은 데이터에 할당된 LBA 영역에 대응하는 다치도는 SLC를 나타낸다. 통상, 프로그램은 좀처럼 갱신되지 않는 데 반하여, 파일과 같은 데이터는 비교적 높은 빈도로 갱신된다. 따라서, 어떤 프로세스에 대응하는 프로그램을 TLC 블록과 같은 다치도가 높은 블록에 저장하고, 이 프로세스에 의해 작성된 파일과 같은 데이터를 SLC 블록에 저장한다고 하는 데이터 배치를 이용함으로써, 파일과 같은 데이터를 고속으로 판독/기입하는 경우와, NAND 플래시 메모리(5)의 이용 효율을 개선하는 경우의 양쪽 모두를 실현할 수 있다.
도 11의 프로세스 데이터 관리 테이블은, 도 5의 NAND 관리 테이블과 마찬가지로, 데이터 제어부(403)가 관리 및 갱신된다.
프로세스 데이터 관리 테이블에 새로운 프로세스의 행을 추가하는 타이밍은, 예를 들어 호스트(2)의 프로세스 감시부(41)가, 프로세스가 생성되었음을 SSD(3)에 통지했을 때이다. 예를 들어, 프로세스 감시부(41)는, 호스트(2)에 있어서 생성된 프로세스의 식별자를 포함하는 정보를, 프로세스의 생성을 나타내는 통지로서 SSD(3)에 송신해도 된다.
한편, 프로세스 데이터 관리 테이블로부터 특정한 프로세스의 행을 삭제하는 타이밍은, 예를 들어 호스트(2)의 프로세스 감시부(41)가, 프로세스가 종료되었음을 SSD(3)에 통지했을 때이다. 예를 들어, 프로세스 감시부(41)는, 호스트(2)에 있어서 종료된 프로세스의 식별자를 포함하는 정보를, 프로세스의 종료를 나타내는 통지로서 SSD(3)에 송신해도 된다.
또한, 프로세스가 종료되었음이 호스트(2)로부터 통지되어도, 프로세스 데이터 관리 테이블로부터 이 프로세스의 행을 삭제하지 않는 형태도 고려된다.
특히, 프로세스를 식별하는 식별자로서, 프로세스의 기초로 된 프로그램명을 사용하는 구성에 있어서는, 후에 동일 프로그램이 기동된 경우에 대비하여, 프로세스 데이터 관리 테이블에 종료된 프로세스에 관한 데이터(행)를 남겨 둔다고 하는 활용 방법이 고려된다. 이 경우, 프로세스 데이터 관리 테이블로부터 데이터(행)를 삭제하는 타이밍은, 프로세스 데이터 관리 테이블의 사이즈가 너무 커졌을 때 등이 고려된다.
구체적인 처리는 다음과 같이 된다.
우선, 프로세스의 종료 시에, 호스트(2)의 프로세스 감시부(41)가 종료된 프로세스의 식별자를 SSD(3)에 통지한다. SSD(3)의 컨트롤러(4)가 종료된 프로세스의 식별자를 호스트(2)로부터 수신한 후, 컨트롤러(4)는, 프로세스 데이터 관리 테이블로부터 이 종료된 프로세스의 행을 특정하고, 이 종료된 프로세스가 액세스하고 있는 데이터(예를 들어, 종료된 프로세스에 의해 NAND 플래시 메모리(5)에 기입된 데이터, 또는 종료된 프로세스에 의해 NAND 플래시 메모리(5)로부터의 판독 또는 NAND 플래시 메모리(5)로의 기입 중 어느 것이 행해진 데이터)를, 보다 다치도가 높은 블록으로 이동시킨다. 이에 의해, 보다 효율적으로 다치도가 낮은 블록의 프리 블록 수를 늘려, NAND 플래시 메모리(5)의 이용 효율의 개선을 도모할 수 있다.
또한, 도 11의 프로세스 데이터 관리 테이블은, 제1 실시 형태에 있어서 이동 대상 데이터를 선택하기 위해서도 이용할 수 있다.
예를 들어, 호스트(2)의 프로세스 감시부(41)로부터 통지된 총 프로세스 수가 제1 임계값을 초과하였거나, 혹은 호스트(2)의 프로세스 감시부(41)로부터 총 프로세스 수의 증가가 통지되면, SSD(3)의 컨트롤러(4)는, 도 11의 프로세스 데이터 관리 테이블을 참조하여, 다치도가 낮은 블록에 보다 많은 데이터가 저장되어 있는 프로세스를 특정하고, 이 특정된 프로세스가 액세스하고 있는 데이터(예를 들어, 이 특정된 프로세스에 의해 NAND 플래시 메모리(5)에 기입된 데이터, 또는 이 특정된 프로세스에 의해 NAND 플래시 메모리(5)로부터의 판독 또는 NAND 플래시 메모리(5)로의 기입 중 어느 것이 행해진 데이터)를, 다치도가 낮은 블록으로부터 보다 다치도가 높은 블록으로 이동시키는 처리를 실행한다.
또는, 호스트(2)의 프로세스 감시부(41)로부터 통지된 총 프로세스 수가 제1 임계값을 초과하였거나, 혹은 호스트(2)의 프로세스 감시부(41)로부터 총 프로세스 수의 증가가 통지되면, SSD(3)의 컨트롤러(4)는, 도 11의 프로세스 데이터 관리 테이블을 참조하여, 최종 액세스 시각의 가장 오래된 프로세스를 특정하고, 이 특정된 프로세스가 액세스하고 있는 데이터(예를 들어, 이 특정된 프로세스에 의해 NAND 플래시 메모리(5)에 기입된 데이터, 또는 이 특정된 프로세스에 의해 NAND 플래시 메모리(5)로부터의 판독 또는 NAND 플래시 메모리(5)로의 기입 중 어느 것이 행해진 데이터)를, 다치도가 낮은 블록으로부터 보다 다치도가 높은 블록으로 이동시키는 처리를 실행해도 된다.
도 12의 흐름도는, 호스트(2)와 SSD(3)에 의해 실행되는 데이터 판독/기입 처리의 수순을 나타낸다.
판독/기입 요구를 SSD(3)에 송신할 때(스텝 S51의 예), 호스트(2)의 프로세스 감시부(41)는, 데이터의 판독 또는 기입을 요구한 요구원의 프로세스의 식별자를 이 판독/기입 요구에 부여하고(스텝 S52), 이 요구원의 프로세스의 식별자가 부여된 판독/기입 요구를 SSD(3)에 송신한다(스텝 S53).
SSD(3)의 컨트롤러(4)는, 판독/기입 요구를 호스트(2)로부터 수신한다(스텝 S61). 호스트 요구 처리부(402)는, 이 수신된 판독/기입 요구에 기초하여, NAND 플래시 메모리(5)로부터의 데이터의 판독 또는 NAND 플래시 메모리(5)로의 데이터의 기입을 데이터 제어부(403)에 지시하고, 데이터 제어부(403)는, NAND 플래시 메모리(5)로부터의 데이터의 판독 또는 NAND 플래시 메모리(5)로의 데이터의 기입을 행한다(스텝 S62). 또한, 데이터 제어부(403)는, 판독/기입 요구에 부여된 프로세스의 식별자와, 이 프로세스에 의해 판독 또는 기입된 데이터의 어드레스 범위(LBA 영역)의 대응 관계를 도 11의 프로세스 데이터 관리 테이블에 저장한다(스텝 S63).
도 13의 흐름도는, 프로세스의 종료에 따라 호스트와 제2 실시 형태의 스토리지 디바이스에 의해 실행되는, 프로세스 식별자 통지 처리 및 데이터 이동 처리의 수순을 나타낸다.
어떤 프로세스가 종료되었을 때(스텝 S54의 예), 호스트(2)의 프로세스 감시부(41)는, 이 종료된 프로세스의 식별자를 SSD(3)에 통지한다(스텝 S55).
SSD(3)의 컨트롤러(4)는, 종료된 프로세스의 식별자를 호스트(2)로부터 수신한다(스텝 S64). 호스트 요구 처리부(402)는, 데이터 제어부(403)에, 종료된 프로세스의 데이터 이동을 지시하고, 데이터 제어부(403)는, 도 11의 프로세스 데이터 관리 테이블에 기초하여, 종료된 프로세스에 의해 액세스된 데이터(예를 들어, 종료된 프로세스에 의해 NAND 플래시 메모리(5)에 기입된 데이터, 또는 종료된 프로세스에 의해 NAND 플래시 메모리(5)로부터의 판독 또는 NAND 플래시 메모리(5)로의 기입 중 어느 것이 행해진 데이터)를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행한다(스텝 S65).
도 14의 흐름도는, 총 프로세스 수가 임계값을 초과한 경우 또는 프로세스 수의 증가의 통지를 수신한 경우에 SSD(3)에 의해 실행되는 데이터 이동 처리의 수순을 나타낸다.
호스트(2)로부터 통지된 총 프로세스 수가 제1 임계값을 초과하였거나, 혹은 호스트(2)의 프로세스 감시부(41)로부터 총 프로세스 수의 증가가 통지되면(스텝 S71의 예), 호스트 요구 처리부(402)는, 데이터 제어부(403)에 데이터의 이동을 지시한다. 데이터 제어부(403)는, 도 11의 프로세스 데이터 관리 테이블을 참조하여, 다치도가 낮은 블록에 보다 많은 데이터가 저장되어 있는 프로세스를 특정하고, 이 특정된 프로세스가 액세스하고 있는 데이터(예를 들어, 이 특정된 프로세스에 의해 NAND 플래시 메모리(5)에 기입된 데이터, 또는 이 특정된 프로세스에 의해 NAND 플래시 메모리(5)로부터의 판독 또는 NAND 플래시 메모리(5)로의 기입 중 어느 것이 행해진 데이터)를, 다치도가 낮은 블록으로부터 보다 다치도가 높은 블록으로 이동시키는 처리를 실행한다(스텝 S72).
또는, 스텝 S72에서는, 데이터 제어부(403)는, 도 11의 프로세스 데이터 관리 테이블을 참조하여, 최종 액세스 시각의 가장 오래된 프로세스를 특정하고, 이 특정된 프로세스가 액세스하고 있는 데이터(예를 들어, 이 특정된 프로세스에 의해 NAND 플래시 메모리(5)에 기입된 데이터, 또는 이 특정된 프로세스에 의해 NAND 플래시 메모리(5)로부터의 판독 또는 NAND 플래시 메모리(5)로의 기입 중 어느 것이 행해진 데이터)를, 다치도가 낮은 블록으로부터 보다 다치도가 높은 블록으로 이동시키는 처리를 실행해도 된다.
도 12의 흐름도, 도 13의 흐름도 및 도 14의 흐름도를 참조하여 설명한 호스트(2)의 처리는, 호스트 소프트웨어(스토리지 드라이버(31), 오퍼레이팅 시스템(OS)(32), 파일 시스템(33), 프로세스 감시부(41) 등)를 실행하도록 구성된 프로세서(12)에 의해 실행된다.
(제3 실시 형태)
이하, 생성된 프로세스의 식별자와 생성된 프로세스가 시스템 프로세스 또는 유저 프로세스 중 어느 것인지를 나타내는 종별(프로세스 종별)을 호스트(2)로부터 SSD(3)에 통지하고, SSD(3)가, 유저 프로세스에 의해 액세스된 데이터(예를 들어 유저 프로세스에 의해 NAND 플래시 메모리(5)에 기입된 데이터 또는 유저 프로세스에 의해 NAND 플래시 메모리(5)로부터의 판독 또는 NAND 플래시 메모리(5)로의 기입 중 어느 것이 행해진 데이터)를, 시스템 프로세스에 의해 액세스된 데이터(예를 들어 시스템 프로세스에 의해 NAND 플래시 메모리(5)에 기입된 데이터 또는 시스템 프로세스에 의해 NAND 플래시 메모리(5)로부터의 판독 또는 NAND 플래시 메모리(5)로의 기입 중 어느 것이 행해진 데이터)보다도 우선하여 이동 대상 데이터로서 선택하는 처리를 실행한다고 하는 구성을, 제3 실시 형태로서 설명한다.
또한, 제2 실시 형태에 있어서의 SSD(3)의 하드웨어 구성 및 호스트(2)의 하드웨어 구성은 제1 실시 형태의 SSD(3) 및 호스트(2)와 마찬가지이며, 호스트(2)의 내부 구성은 도 10에서 설명한 내부 구성과 마찬가지이다.
제1 실시 형태 및 제2 실시 형태에 있어서, 프로세스 감시부(41)는 호스트(2)상의 프로세스의 상태를 관리하고 있지만, 전술한 바와 같이, 프로세스에는 유저 프로세스와 시스템 프로세스와 같은 종별이 있다.
전술한 바와 같이, 프로세스는 스왑 아웃이나 스왑 인하는 경우가 있지만, 시스템 프로세스는 호스트(2)의 정상적인 동작을 위해 필요한 프로세스이기 때문에, 스왑 아웃하는 경우는 드물다. 바꾸어 말하면, 스왑 아웃, 스왑 인되는 대부분의 프로세스는 유저 프로세스이며, 시스템 프로세스는 호스트(2)의 메모리(13)에 상주하는 케이스가 많다. 따라서, 기동된 시스템 프로세스는, SSD(3)에 판독/기입 요구를 송출할 가능성이 높다.
그래서, 호스트(2)의 프로세스 감시부(41)는, SSD(3)에 프로세스의 생성을 통지할 때, 그 생성된 프로세스의 식별자뿐만 아니라, 그 생성된 프로세스가 시스템 프로세스 또는 유저 프로세스 중 어느 것인지를 나타내는 종별도 SSD(3)에 통지한다.
SSD(3)의 데이터 제어부(403)는, 도 11의 프로세스 데이터 관리 테이블을 사용하여, 생성된 각 프로세스의 식별자와, 생성된 각 프로세스의 종별과, 생성된 각 프로세스에 의해 액세스된 데이터(예를 들어, 생성된 프로세스에 의해 NAND 플래시 메모리(5)에 기입된 데이터 또는 생성된 프로세스에 의해 NAND 플래시 메모리(5)로부터의 판독 또는 NAND 플래시 메모리(5)로의 기입 중 어느 것이 행해진 데이터)에 대응하는 어드레스 범위(LBA 영역) 등과의 대응 관계를 관리한다. 그리고, 데이터 제어부(403)는, 어느 프로세스의 데이터를 보다 다치도가 높은 블록으로 이동시킬지를 판단하는 경우에, 종별이 유저 프로세스인 프로세스에 의해 액세스된 데이터를, 종별이 시스템 프로세스인 프로세스에 의해 액세스된 데이터보다도 우선하여 선택한다. 이에 의해, 유저 프로세스의 데이터를, 액세스될 가능성이 높은 시스템 프로세스의 데이터보다도 우선하여 다치도가 높은 블록으로 이동시킬 수 있으므로, 호스트(2)측에서 본 SSD(3)의 성능, 나아가서는 유저측에서 본 SSD(3)의 성능을 보다 향상시킬 수 있다.
도 15의 흐름도는, 호스트(2)에 의해 실행되는, 생성된 프로세스의 종별(유저 프로세스/시스템 프로세스)을 SSD(3)에 통지하는 처리의 수순을 나타낸다.
호스트(2)에 있어서 새로운 프로세스가 생성되었음을 검출한 경우(스텝 S81의 예), 호스트(2)의 프로세스 감시부(41)는, 생성된 프로세스의 식별자와 이 생성된 프로세스의 종별을 SSD(3)에 통지한다(스텝 S82).
도 16의 흐름도는, 호스트(2)와 SSD(3)에 의해 실행되는, 프로세스 수 증감 통지 처리 및 데이터 이동 처리의 수순을 나타낸다.
호스트(2)의 프로세스 감시부(41)는, 프로세스 관리부(321)와 공동하여, 호스트(2)의 프로세서(12)상에서 동작하고 있는 총 프로세스 수의 증감을 관리한다(스텝 S91).
총 프로세스 수가 증가하면(스텝 S92의 예), 프로세스 감시부(41)는, 총 프로세스 수의 증가를 나타내는 통지를 SSD(3)에 송신한다(스텝 S93).
한편, 총 프로세스 수가 감소하면(스텝 S94의 예), 프로세스 감시부(41)는, 총 프로세스 수의 감소를 나타내는 통지를 SSD(3)에 송신한다(스텝 S95).
SSD(3)의 컨트롤러(4)가 총 프로세스 수의 증가를 나타내는 통지를 호스트(2)로부터 수신하면(스텝 S101의 예), 컨트롤러(4)의 호스트 요구 처리부(402)는, 데이터 제어부(403)를 사용하여, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행한다(스텝 S102). 스텝 S102에서는, 호스트 요구 처리부(402)로부터 데이터 제어부(403)로 데이터의 이동이 지시되고, 데이터 제어부(403)가, 도 11의 프로세스 데이터 관리 테이블에 기초하여, 유저 프로세스에 의해 액세스된 데이터(예를 들어, 유저 프로세스에 의해 NAND 플래시 메모리(5)에 기입된 데이터, 또는 유저 프로세스에 의해 NAND 플래시 메모리(5)로부터의 판독 또는 NAND 플래시 메모리(5)로의 기입 중 어느 것이 행해진 데이터)를, 시스템 프로세스에 의해 액세스된 데이터(예를 들어, 시스템 프로세스에 의해 NAND 플래시 메모리(5)에 기입된 데이터 또는 시스템 프로세스에 의해 NAND 플래시 메모리(5)로부터의 판독 또는 NAND 플래시 메모리(5)로의 기입 중 어느 것이 행해진 데이터)보다도 우선하여 이동 대상 데이터로서 선택하고, 이 선택된 이동 대상 데이터를, 다치도가 낮은 블록으로부터 다치도가 높은 블록으로 이동시킨다.
따라서, 스왑 아웃이 일어나기 전에, SLC용 프리 블록을 사전에 확보해 두는 것이 가능하게 되어, 스왑 아웃에 요하는 시간을 저감시킬 수 있다. 이 결과, 컴퓨터 시스템(1) 전체의 성능을 개선하는 것이 가능해진다.
SSD(3)의 컨트롤러(4)가 총 프로세스 수의 감소를 나타내는 통지를 호스트(2)로부터 수신하면(스텝 S103의 예), 컨트롤러(4)의 호스트 요구 처리부(402)는, 데이터 제어부(403)를 사용하여, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행한다(스텝 S104). 스텝 S104에서는, 호스트 요구 처리부(402)로부터 데이터 제어부(403)로 데이터의 이동이 지시되고, 데이터 제어부(403)가, 도 11의 프로세스 데이터 관리 테이블에 기초하여, 유저 프로세스에 의해 액세스된 데이터(예를 들어, 유저 프로세스에 의해 NAND 플래시 메모리(5)에 기입된 데이터 또는 유저 프로세스에 의해 NAND 플래시 메모리(5)로부터의 판독 또는 NAND 플래시 메모리(5)로의 기입 중 어느 것이 행해진 데이터)를, 시스템 프로세스에 의해 액세스된 데이터(예를 들어, 시스템 프로세스에 의해 NAND 플래시 메모리(5)에 기입된 데이터 또는 시스템 프로세스에 의해 NAND 플래시 메모리(5)로부터의 판독 또는 NAND 플래시 메모리(5)로의 기입 중 어느 것이 행해진 데이터)보다도 우선하여 이동 대상 데이터로서 선택하고, 이 선택한 이동 대상 데이터를, 다치도가 낮은 블록으로부터 다치도가 높은 블록으로 이동시킨다. 이 데이터의 이동에 의해, NAND 플래시 메모리(5)의 이용 효율이 개선된다.
또한, 스텝 S102에서는, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행하였지만, 예를 들어 유저 프로세스에 의해 액세스된 데이터(유효 데이터)를 TLC 블록 간에서 이동해도 된다. 전술한 바와 같이, 이 데이터 이동은 GC의 일 형태이다. 이 경우에도, 데이터 이동에 의해 생성된 프리 블록을 SLC용 프리 블록으로서 할당함으로써, 후의 스왑 아웃에 대비할 수 있다.
마찬가지로, 스텝 S104에서도, 예를 들어 TLC 블록 간에서 유저 프로세스의 데이터(유효 데이터)를 이동시켜도 된다.
도 17의 흐름도는, 호스트(2)와 SSD(3)에 의해 실행되는, 총 프로세스 수 통지 처리 및 데이터 이동 처리의 수순을 나타낸다.
호스트(2)의 프로세스 감시부(41)는, 프로세스 관리부(321)와 공동하여, 호스트(2)의 프로세서(12)상에서 동작하고 있는 총 프로세스 수를 관리한다(스텝 S111). 총 프로세스 수가 증감되거나 또는 전회의 통지로부터 일정 기간이 경과하였다는 통지 조건이 성립되었을 때(스텝 S112의 예), 프로세스 감시부(41)는, 총 프로세스 수를 나타내는 정보를 SSD(3)에 송신하여 총 프로세스 수를 SSD(3)에 통지한다(스텝 S113).
SSD(3)의 컨트롤러(4)는, 총 프로세스 수를 나타내는 통지를 호스트(2)로부터 수신한다(스텝 S121). 컨트롤러(4)의 호스트 요구 처리부(402)는, 호스트(2)에 의해 통지된 총 프로세스 수를 제1 임계값과 비교하여, 총 프로세스 수가 제1 임계값을 상회하고 있는지 여부를 판정한다(스텝 S122).
총 프로세스 수가 제1 임계값을 상회하고 있으면(스텝 S122의 예), 호스트 요구 처리부(402)는, 데이터 제어부(403)를 사용하여, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행한다(스텝 S123). 스텝 S123에서는, 호스트 요구 처리부(402)로부터 데이터 제어부(403)로 데이터 이동이 지시된다. 그리고, 데이터 제어부(403)가, 도 11의 프로세스 데이터 관리 테이블에 기초하여, 유저 프로세스에 의해 액세스된 데이터(예를 들어, 유저 프로세스에 의해 NAND 플래시 메모리(5)에 기입된 데이터 또는 유저 프로세스에 의해 NAND 플래시 메모리(5)로부터의 판독 또는 NAND 플래시 메모리(5)로의 기입 중 어느 것이 행해진 데이터)를, 시스템 프로세스에 의해 액세스된 데이터(예를 들어, 시스템 프로세스에 의해 NAND 플래시 메모리(5)에 기입된 데이터 또는 시스템 프로세스에 의해 NAND 플래시 메모리(5)로부터의 판독 또는 NAND 플래시 메모리(5)로의 기입 중 어느 것이 행해진 데이터)보다도 우선하여 이동 대상 데이터로서 선택하고, 이 선택된 이동 대상 데이터를, 다치도가 낮은 블록으로부터 다치도가 높은 블록으로 이동시킨다.
따라서, 스왑 아웃이 일어나기 전에, SLC용 프리 블록을 사전에 확보해 두는 것이 가능하게 되어, 스왑 아웃에 요하는 시간을 저감시킬 수 있다. 이 결과, 컴퓨터 시스템(1) 전체의 성능을 개선시키는 것이 가능해진다.
총 프로세스 수가 제1 임계값을 상회하고 있지 않으면(스텝 S122의 아니오), 호스트 요구 처리부(402)는, 총 프로세스 수를 제2 임계값(<제1 임계값)과 비교하여, 총 프로세스 수가 제2 임계값을 하회하고 있는지 여부를 판정한다(스텝 S124).
총 프로세스 수가 제2 임계값을 하회하고 있으면(스텝 S124의 예), 호스트 요구 처리부(402)는, 데이터 제어부(403)를 사용하여, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행한다(스텝 S125). 스텝 S125에서는, 호스트 요구 처리부(402)로부터 데이터 제어부(403)로 데이터의 이동이 지시된다. 그리고, 데이터 제어부(403)는, 도 11의 프로세스 데이터 관리 테이블에 기초하여, 유저 프로세스에 의해 액세스된 데이터(예를 들어, 유저 프로세스에 의해 NAND 플래시 메모리(5)에 기입된 데이터 또는 유저 프로세스에 의해 NAND 플래시 메모리(5)로부터의 판독 또는 NAND 플래시 메모리(5)로의 기입 중 어느 것이 행해진 데이터)를, 시스템 프로세스에 의해 액세스된 데이터(예를 들어, 시스템 프로세스에 의해 NAND 플래시 메모리(5)에 기입된 데이터 또는 시스템 프로세스에 의해 NAND 플래시 메모리(5)로부터의 판독 또는 NAND 플래시 메모리(5)로의 기입 중 어느 것이 행해진 데이터)보다도 우선하여 이동 대상 데이터로서 선택하고, 이 선택한 이동 대상 데이터를, 다치도가 낮은 블록으로부터 다치도가 높은 블록으로 이동시킨다. 이 데이터의 이동에 의해, NAND 플래시 메모리(5)의 이용 효율이 개선된다.
또한, 스텝 S123에서는, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행하였지만, 예를 들어 유저 프로세스에 의해 액세스된 데이터(유효 데이터)를 TLC 블록 간에서 이동해도 된다. 전술한 바와 같이, 이 데이터 이동은 GC의 일 형태이다. 이 경우에도, 데이터 이동에 의해 생성된 프리 블록을 SLC용 프리 블록으로서 할당함으로써, 후의 스왑 아웃에 대비할 수 있다.
마찬가지로, 스텝 S125에서도, 예를 들어 TLC 블록 간에서 유저 프로세스의 데이터(유효 데이터)를 이동시켜도 된다.
또한, 만약 복수의 프로세스의 종료가 호스트(2)로부터 SSD(3)로 통지되면, SSD(3)의 컨트롤러(4)는, 종료가 통지된 프로세스 중, 종별이 유저 프로세스인 프로세스에 의해 액세스된 데이터를, 종별이 시스템 프로세스인 프로세스에 의해 액세스된 데이터보다도 우선하여 이동 대상 데이터로서 선택해도 된다.
이 경우, 도 18의 흐름도에서 나타낸 수순이 SSD(3)의 컨트롤러(4)에 의해 실행된다.
복수의 프로세스의 종료가 호스트(2)로부터 SSD(3)로 통지되면, SSD(3)의 컨트롤러(4)의 호스트 요구 처리부(402)는, 데이터 제어부(403)로 데이터의 이동을 지시한다. 그리고, 데이터 제어부(403)는, 도 11의 프로세스 데이터 관리 테이블에 기초하여, 종료가 통지된 프로세스 중, 종별이 유저 프로세스인 프로세스에 의해 액세스된 데이터(유저 프로세스에 의해 NAND 플래시 메모리(5)에 기입된 데이터 또는 유저 프로세스에 의해 NAND 플래시 메모리(5)로부터의 판독 또는 NAND 플래시 메모리(5)로의 기입 중 어느 것이 행해진 데이터)를 시스템 프로세스의 데이터보다도 우선하여 이동 대상 데이터로서 선택한다(스텝 S127).
그리고, 데이터 제어부(403)는, 이 이동 대상 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행한다(스텝 S128).
도 15의 흐름도, 도 16의 흐름도, 도 17의 흐름도, 및 도 18의 흐름도를 참조하여 설명한 호스트(2)의 처리는, 호스트 소프트웨어(스토리지 드라이버(31), 오퍼레이팅 시스템(OS)(32), 파일 시스템(33), 프로세스 감시부(41) 등)를 실행하도록 구성된 프로세서(12)에 의해 실행된다.
(제4 실시 형태)
제4 실시 형태에서는, 호스트(2)의 메모리(13)의 사용량이 호스트(2)로부터 SSD(3)에 통지된다. SSD(3)의 컨트롤러(4)는, 메모리(13)의 사용량이 제3 임계값을 상회하고 있는 경우, 스왑 아웃에 대비하여 데이터의 이동을 행한다. 이 데이터의 이동은, GC의 일 형태이다.
또한, 메모리(13)의 사용량이 제3 임계값보다도 작은 제4 임계값을 하회하고 있는 경우에도, SSD(3)의 컨트롤러(4)는, 데이터의 이동을 행해도 된다. 이 데이터의 이동도, GC의 일 형태이다. 메모리(13)의 사용량이 적을 때에는, 스왑 아웃은 발생하기 어려우므로, 호스트(2)로부터의 데이터의 기입량은 비교적 적다. 따라서, 메모리(13)의 사용량이 적을 때 데이터 이동을 행함으로써, 호스트(2)측에서 본 SSD(3)의 데이터 기입 성능의 저하를 초래하지 않고, 예를 들어 SLC의 프리 블록을 사전에 증가시킬 수 있다.
또한, 호스트(2)의 메모리(13)의 사용량은, 메모리(13)의 총 사용량에 의해 표시되어도 되고, 메모리(13)의 총 메모리 사이즈에 대한 메모리(13)의 총 사용량의 비율에 의해 표시되어도 된다.
또한, 제4 실시 형태에 있어서의 SSD(3)의 하드웨어 구성 및 호스트(2)의 하드웨어 구성은 제1 실시 형태의 SSD(3) 및 호스트(2)와 마찬가지이며, 호스트(2)의 내부 구성은 도 10에서 설명한 내부 구성과 마찬가지이다.
전술한 바와 같이, 호스트(2)의 프로세스 감시부(41)는, 호스트(2)상에서 동작하고 있는 프로세스에 할당된 메모리 영역의 사이즈를 알고 있다. 그래서, 프로세스 감시부(41)는, 호스트(2)의 메모리(13)의 사용량(메모리(13)의 총 사용량 또는 메모리(13)의 총 메모리 사이즈에 대한 메모리(13)의 총 사용량의 비율)을 SSD(3)에 통지한다. SSD(3)는, 호스트(2)의 메모리(13)의 사용량에 관한 정보를 수신하고, 이하의 처리를 행한다.
SSD(3)의 컨트롤러(4)는, 호스트(2)의 메모리(13)의 사용량이 제3 임계값보다 많은 경우, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시킨다. 호스트(2)의 메모리 사용량이 많아졌음은, 프로세스의 스왑 아웃이 가까운 장래에 행해질 가능성이 높다는 사실을 나타낸다. 따라서, 낮은 다치도용 프리 블록을 작성해 둠으로써, 프로세스의 스왑 아웃 및 스왑 인을 보다 짧은 시간에 행할 수 있게 된다. 이에 의해, 호스트(2)측에서 본 SSD(3)의 성능, 나아가서는 유저측에서 본 SSD(3)의 성능을 보다 향상시킬 수 있다.
또한 SSD(3)의 컨트롤러(4)는, 호스트(2)의 메모리(13)의 사용량이 제4 임계값(<제3 임계값)보다 적은 경우, 다치도가 낮은 블록에 기록되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시킨다. 호스트(2)의 메모리 사용량이 적다는 것은, 가까운 장래에 SSD(3)로의 액세스가 적을 가능성이 높다는 사실을 나타낸다. 따라서, 낮은 다치도용 프리 블록을 작성함으로써, NAND 플래시 메모리(5)의 이용 효율을 개선시킬 수 있다.
프리 블록을 작성하기 위해서, 어느 프로세스의 데이터를 이동 대상으로 할지의 판단은, 예를 들어 지금까지 설명한 각 실시 형태와 마찬가지의 방법으로 행할 수 있다.
도 19의 흐름도는, 호스트(2)와 SSD(3)에 의해 실행되는, 사용 메모리양 통지 처리 및 데이터 이동 처리의 수순을 나타낸다.
호스트(2)의 프로세스 감시부(41)는, 프로세스 관리부(321)와 공동하여, 호스트(2)의 메모리(13)의 사용량(메모리(13)의 총 사용량 또는 메모리(13)의 총 메모리 사이즈에 대한 메모리(13)의 총 사용량의 비율)을 관리한다(스텝 S131). 메모리(13)의 사용량이 증감되었거나, 또는 전회의 통지로부터 일정 기간이 경과되었다는 통지 조건이 성립되었을 때(스텝 S132의 예), 프로세스 감시부(41)는, 호스트(2)의 메모리(13)의 사용량을 나타내는 정보(메모리(13)의 총 사용량 또는 메모리(13)의 총 메모리 사이즈에 대한 메모리(13)의 총 사용량의 비율)를 SSD(3)에 송신하여 호스트(2)의 메모리(13)의 사용량을 SSD(3)에 통지한다(스텝 S133).
SSD(3)의 컨트롤러(4)는, 호스트(2)의 메모리(13)의 사용량(메모리(13)의 총 사용량 또는 메모리(13)의 총 메모리 사이즈에 대한 메모리(13)의 총 사용량의 비율)을 호스트(2)로부터 수신한다(스텝 S141). 컨트롤러(4)의 호스트 요구 처리부(402)는, 호스트(2)에 의해 통지된 메모리(13)의 사용량(메모리(13)의 총 사용량 또는 메모리(13)의 총 메모리 사이즈에 대한 메모리(13)의 총 사용량의 비율)을 제3 임계값과 비교하여, 메모리(13)의 사용량(메모리(13)의 총 사용량 또는 메모리(13)의 총 메모리 사이즈에 대한 메모리(13)의 총 사용량의 비율)이 제3 임계값을 상회하고 있는지 여부를 판정한다(스텝 S142).
메모리(13)의 사용량(메모리(13)의 총 사용량 또는 메모리(13)의 총 메모리 사이즈에 대한 메모리(13)의 총 사용량의 비율)이 제3 임계값을 상회하고 있으면(스텝 S142의 예), 호스트 요구 처리부(402)는, 데이터 제어부(403)를 사용하여, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행한다(스텝 S143). 스텝 S143에서는, 호스트 요구 처리부(402)로부터 데이터 제어부(403)로 데이터 이동이 지시된다. 그리고, 데이터 제어부(403)가 데이터를 다치도가 낮은 블록으로부터 다치도가 높은 블록으로 이동시킨다.
메모리(13)의 사용량(메모리(13)의 총 사용량 또는 메모리(13)의 총 메모리 사이즈에 대한 메모리(13)의 총 사용량의 비율)이 제3 임계값을 상회하고 있지 않으면(스텝 S142의 아니오), 호스트 요구 처리부(402)는, 메모리(13)의 사용량(메모리(13)의 총 사용량 또는 메모리(13)의 총 메모리 사이즈에 대한 메모리(13)의 총 사용량의 비율)을 제4 임계값(<제3 임계값)과 비교하여, 메모리(13)의 사용량(메모리(13)의 총 사용량 또는 메모리(13)의 총 메모리 사이즈에 대한 메모리(13)의 총 사용량의 비율)이 제4 임계값을 하회하고 있는지 여부를 판정한다(스텝 S144).
메모리(13)의 사용량(메모리(13)의 총 사용량 또는 메모리(13)의 총 메모리 사이즈에 대한 메모리(13)의 총 사용량의 비율)이 제4 임계값을 하회하고 있으면(스텝 S144의 예), 호스트 요구 처리부(402)는, 데이터 제어부(403)를 사용하여, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행한다(스텝 S145). 스텝 S145에서는, 호스트 요구 처리부(402)로부터 데이터 제어부(403)로 데이터의 이동이 지시된다. 그리고, 데이터 제어부(403)는, 데이터를 다치도가 낮은 블록으로부터 다치도가 높은 블록으로 이동시킨다.
또한, 스텝 S143에서는, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리(GC의 일 형태)를 실행하였지만, 예를 들어 TLC 블록 간에서 데이터(유효 데이터)를 이동시키는 처리(GC의 일 형태)를 실행해도 된다. 이 경우에도, 데이터 이동에 의해 생성된 프리 블록을 SLC용 프리 블록으로서 할당함으로써, 후의 스왑 아웃에 대비할 수 있다.
마찬가지로, 스텝 S145에서도, 예를 들어 TLC 블록 간에서 데이터(유효 데이터)를 이동시키는 처리(GC의 일 형태)를 실행해도 된다.
도 19의 흐름도를 참조하여 설명한 호스트(2)의 처리는, 호스트 소프트웨어(스토리지 드라이버(31), 오퍼레이팅 시스템(OS)(32), 파일 시스템(33), 프로세스 감시부(41) 등)를 실행하도록 구성된 프로세서(12)에 의해 실행된다.
(제5 실시 형태)
제5 실시 형태에서는, 다음에 일어날 스왑 아웃에 의해 호스트(2)로부터 SSD(3)에 기입될 데이터양을 나타내는 정보가 SSD(3)에 통지된다. SSD(3)의 컨트롤러(4)는, 예를 들어 메모리(13)의 사용량이 제3 임계값을 상회하고 있는 경우, 호스트(2)로부터 통지된 데이터양에 대응하는 빈 용량이 다치도가 낮은 블록에 확보되도록, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행한다.
호스트(2)의 프로세스 감시부(41)는, 다음에 호스트(2)에서 행해지는 스왑 아웃의 대상 프로세스를 알 수 있다. 스왑 아웃의 대상 프로세스는, 예를 들어 최종 기동 시각이 오래된 프로세스나, 가장 할당 메모리 사이즈가 큰 프로세스이다. 따라서, 프로세스 감시부(41)는, 다음에 일어날 스왑 아웃에 의해 SSD(3)에 기입될 데이터양을 예측할 수 있다. 그래서, 프로세스 감시부(41)는 다음에 일어날 스왑 아웃에 의해 SSD(3)에 기입될 것으로 예측되는 데이터양을 SSD(3)에 통지한다.
통지를 받은 SSD(3)의 컨트롤러는, 다치도가 낮은 블록에 통지된 양의 빈 용량이 생기도록, 데이터의 이동을 행한다. 이에 의해, 스왑 아웃에 걸리는 시간을 단축할 수 있어, 호스트(2)측에서 본 SSD(3)의 성능, 나아가서는 유저측에서 본 SSD(3)의 성능을 보다 향상시킬 수 있다.
어느 프로세스의 데이터를 이동 대상으로 할지의 판단은, 예를 들어 지금까지 설명한 각 실시 형태와 마찬가지의 방법으로 행할 수 있다.
도 20의 흐름도는, 호스트(2)와 SSD(3)에 의해 실행되는, 스왑 아웃에 의해 SSD(3)에 기입되는 데이터양을 통지하는 처리 및 데이터 이동 처리의 수순을 나타낸다.
호스트(2)의 프로세스 감시부(41)는, 다음에 일어날 스왑 아웃에 의해 SSD(3)에 기입될 데이터양을 추정한다(스텝 S151). 그리고, 프로세스 감시부(41)는, 이 추정되는 데이터양을 나타내는 정보를 SSD(3)에 송신하여 이 추정되는 데이터양을 SSD(3)에 통지한다(스텝 S152).
SSD(3)의 컨트롤러(4)는, 이 추정되는 데이터양의 통지를 호스트(2)로부터 수신한다(스텝 S161). 컨트롤러(4)의 호스트 요구 처리부(402)는, 이 추정되는 데이터양에 대응하는 빈 용량이 다치도가 낮은 블록에 확보되도록 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시킬 것을 데이터 제어부(403)에 지시한다. 이 지시를 받은 데이터 제어부(403)는, 이 추정되는 데이터양에 대응하는 빈 용량이 다치도가 낮은 블록에 확보되도록, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행한다(스텝 S162).
또한, 스텝 S162에서는, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행하였지만, 예를 들어 TLC 블록 간에서 데이터(유효 데이터)를 이동시켜도 된다. 전술한 바와 같이, 이 데이터 이동은 GC의 일 형태이다. 이 경우에도, 데이터 이동에 의해 생성된 프리 블록을 SLC용 프리 블록으로서 할당함으로써, 후의 스왑 아웃에 대비할 수 있다.
도 21의 흐름도는, 호스트(2)와 SSD(3)에 의해 실행되는, 사용 메모리양/스왑 아웃에 의해 SSD(3)에 기입되는 데이터양을 통지하는 처리 및 데이터 이동 처리의 수순을 나타낸다.
호스트(2)의 프로세스 감시부(41)는, 프로세스 관리부(321)와 공동하여, 호스트(2)의 메모리(13)의 사용량(메모리(13)의 총 사용량 또는 메모리(13)의 총 메모리 사이즈에 대한 메모리(13)의 총 사용량의 비율)을 관리한다. 그리고, 프로세스 감시부(41)는, 호스트(2)의 메모리(13)의 사용량을 나타내는 정보와, 다음에 일어날 스왑 아웃에 의해 SSD(3)에 기입될 추정 데이터양을 SSD(3)에 통지한다(스텝 S153).
SSD(3)의 컨트롤러(4)는, 호스트(2)의 메모리(13)의 사용량(메모리(13)의 총 사용량 또는 메모리(13)의 총 메모리 사이즈에 대한 메모리(13)의 총 사용량의 비율)과, 다음에 일어날 스왑 아웃에 의해 SSD(3)에 기입될 추정 데이터양을 호스트(2)로부터 수신한다(스텝 S163).
컨트롤러(4)의 호스트 요구 처리부(402)는, 호스트(2)에 의해 통지된 메모리(13)의 사용량(메모리(13)의 총 사용량 또는 메모리(13)의 총 메모리 사이즈에 대한 메모리(13)의 총 사용량의 비율)을 제3 임계값과 비교하여, 메모리(13)의 사용량(메모리(13)의 총 사용량 또는 메모리(13)의 총 메모리 사이즈에 대한 메모리(13)의 총 사용량의 비율)이 제3 임계값을 상회하고 있는지 여부를 판정한다(스텝 S164).
메모리(13)의 사용량(메모리(13)의 총 사용량 또는 메모리(13)의 총 메모리 사이즈에 대한 메모리(13)의 총 사용량의 비율)이 제3 임계값을 상회하고 있으면(스텝 S164의 예), 호스트 요구 처리부(402)는, 데이터 제어부(403)를 사용하여, 통지된 추정 데이터양에 대응하는 빈 용량이 다치도가 낮은 블록에 확보되도록 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시킬 것을 데이터 제어부(403)에 지시한다. 이 지시를 받은 데이터 제어부(403)는, 이 추정되는 데이터양에 대응하는 빈 용량이 다치도가 낮은 블록에 확보되도록, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행한다(스텝 S165).
또한, 스텝 S165에서는, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행하였지만, 예를 들어 TLC 블록 간에서 데이터(유효 데이터)를 이동시켜도 된다. 전술한 바와 같이, 이 데이터 이동은 GC의 일 형태이다. 이 경우에도, 데이터 이동에 의해 생성된 프리 블록을 SLC용 프리 블록으로서 할당함으로써, 후의 스왑 아웃에 대비할 수 있다.
또한, 다음에 일어날 스왑 아웃에 의해 호스트(2)로부터 SSD(3)에 기입되는 데이터양을 호스트(2)로부터 SSD(3)에 통지하는 처리는, 제4 실시 형태뿐만 아니라, 제1 실시 형태, 제2 실시 형태 또는 제3 실시 형태에 적용해도 된다. 예를 들어, 스왑 아웃에 의해 호스트(2)로부터 SSD(3)에 기입되는 데이터양을 호스트(2)로부터 SSD(3)에 통지하는 처리가 제1 실시 형태에 적용되면, SSD(3)의 컨트롤러(4)는, 총 프로세스 수가 제1 임계값을 상회하고 있다는 판정을 한 후, 통지된 데이터양만큼의 빈 용량이 다치도가 낮은 블록에 확보되도록, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시켜도 된다.
또한, 도 20의 흐름도 및 도 21의 흐름도를 참조하여 설명한 호스트(2)의 처리는, 호스트 소프트웨어(스토리지 드라이버(31), 오퍼레이팅 시스템(OS)(32), 파일 시스템(33), 프로세스 감시부(41) 등)를 실행하도록 구성된 프로세서(12)에 의해 실행된다.
(제6 실시 형태)
제6 실시 형태에서는, 호스트(2)의 프로세스 감시부(41)는, 프로그램 각각이 기동되는 빈도와 함께, 이들 프로그램의 리스트를 관리하고 있다. 프로세스 감시부(41)는, 기동 빈도가 높은 프로그램을 나타내는 정보를 SSD(3)에 통지한다. 어떤 프로그램의 기동 빈도는, 예를 들어 이 프로그램이 어떤 기준 기간 내에 기동된 횟수 또는 호스트(2)의 OS(32)의 부팅부터 셧 다운까지의 기간에 이 프로그램이 기동된 횟수 등에 의해 나타낼 수 있다. 기준 기간 내에 기동된 횟수(또는 OS(32)의 부팅부터 셧 다운까지의 기간에 기동된 횟수)가 어떤 임계값을 상회하는 프로그램이, 기동 빈도가 높은 프로그램으로서 검출되어도 된다.
SSD(3)의 컨트롤러(4)는, 호스트(2)로부터 통지된 기동 빈도가 높은 프로그램에 대응하는 프로세스에 의해 판독 또는 기입된 데이터를, 다치도가 높은 블록으로부터 보다 다치도가 낮은 블록으로 이동시키는 처리를 실행한다. 이에 의해, 이 프로그램을 기동하기 위해 요하는 시간을 단축할 수 있어, 이 프로그램을 고속으로 기동하는 것이 가능해진다.
기동 빈도가 높은 프로그램의 데이터를 보다 다치도가 낮은 블록으로 이동시키는 처리를 실행하는 타이밍은, 이것으로 한정되지 않지만, 예를 들어 호스트(2)로부터 통지되는 총 프로세스 수가 제2 임계값을 하회하였다는 판정의 후여도 되고, 호스트(2)로부터 총 프로세스 수의 감소가 통지된 후여도 되거나, 혹은 호스트 메모리의 사용량이 제4 임계값을 하회하였다는 판정의 후여도 된다.
또한, SSD(3)의 컨트롤러(4)는, 다치도가 낮은 블록의 데이터를 다치도가 높은 블록으로 이동시킬 때, 기동 빈도가 낮은 프로그램의 데이터를 이동 대상 데이터로서 우선적으로 선택해도 된다.
또한, 제6 실시 형태에 있어서의 SSD(3)의 하드웨어 구성 및 호스트(2)의 하드웨어 구성은 제1 실시 형태의 SSD(3) 및 호스트(2)와 마찬가지이며, 호스트(2)의 내부 구성은 도 10에서 설명한 내부 구성과 마찬가지이다.
이하, 제6 실시 형태의 데이터 이동 처리에 대하여 구체적으로 설명한다.
전술한 바와 같이, 호스트(2)의 프로세스 감시부(41)는, 호스트(2)상에서 동작하고 있는 프로세스가 어느 프로그램에 대응하는지를 관리하고 있다. 프로그램은, 기동과 종료를 반복하고, 그 때마다 프로세스는 생성되고, 파기된다.
프로세스의 식별자 중, 프로세스 ID는 프로세스가 생성될 때마다 서로 다른 수치가 할당되지만, 대응하는 프로그램, 예를 들어 프로그램명은 동일하다. 따라서, 프로세스 감시부(41)는, 생성된 프로세스가 어느 프로그램에 대응하는지를 기록해 둠으로써, 빈번히 기동되는 프로그램을 알 수 있다. 그래서, 프로세스 감시부(41)는, SSD(3)에 대해서, 빈번히 기동되는 프로그램, 즉 기동 빈도가 높은 프로그램을 통지한다.
SSD(3)의 컨트롤러(4)는, 생성된 각 프로세스의 식별자와, 생성된 각 프로세스에 의해 판독 또는 기입된 데이터에 대응하는 어드레스 범위 등의 대응 관계를 도 11의 프로세스 데이터 관리 테이블을 사용하여 관리한다. 또한, SSD(3)의 컨트롤러(4)는, 도 11의 프로세스 데이터 관리 테이블에, 각 프로세스 식별자가 어느 프로그램에 대응하는지를 아울러 기록한다. 그리고, 컨트롤러(4)는, 프로세스 감시부(41)로부터 통지된 빈번히 기동되는 프로그램에 대응하는 프로세스가 액세스(판독 또는 기입)하는 데이터를 이동 대상 데이터로서 선택하고, 이 이동 대상 데이터를 다치도가 높은 블록으로부터 보다 다치도가 낮은 블록으로 이동시킨다. 이에 의해, 유저 혹은 시스템에 의해 빈번히 기동되는 프로그램의 데이터를 다치도가 낮은 블록에 모을 수 있어, 호스트(2)측에서 본 SSD(3)의 성능, 나아가서는 유저측에서 본 SSD(3)의 성능을 보다 향상시킬 수 있다.
또한, 다른 각 실시 형태에서 설명한 데이터 이동 처리 대상의 프로세스를 선택할 때, 컨트롤러(4)는, 프로세스 감시부(41)로부터 통지된 빈번히 기동되는 프로그램을, 다치도가 낮은 블록으로부터 다치도가 높은 블록으로 이동할 이동 대상 데이터로서 선택하지 않도록 해도 된다. 예를 들어, 호스트(2)상에서 동작하는 총 프로세스 수가 제1 임계값을 상회하였다는 판정의 후, 혹은 호스트(2)의 메모리(13)의 사용량이 제4 임계값을 상회하였다는 판정의 후, 컨트롤러(4)는, 도 11의 프로세스 데이터 관리 테이블에 기초하여, 호스트(2)에 의해 통지된 기동 빈도가 높은 프로그램을 제외한 다른 프로그램에 대응하는 프로세스 중에서, 데이터를 이동할 프로세스를 선택해도 되며, 그리고, 이 선택된 프로세스에 의해 판독 또는 기입된 데이터를 다치도가 낮은 블록으로부터 다치도가 높은 블록으로 이동시켜도 된다.
이에 의해, 유저 혹은 시스템이 빈번히 기동하는 프로그램의 데이터가 다치도가 낮은 블록에 기록되어 있는 상태가 유지되므로, 호스트(2)측에서 본 SSD(3)의 성능, 나아가서는 유저측에서 본 SSD(3)의 성능을 보다 향상시킬 수 있다.
도 22의 흐름도는, 호스트(2)와 SSD(3)에 의해 실행되는, 빈번히 기동되는 프로그램을 통지하는 처리 및 데이터 이동 처리의 수순을 나타낸다.
호스트(2)의 프로세스 감시부(41)는, 빈번히 기동되는 프로그램을 검출한다(스텝 S171). 프로세스 감시부(41)는, 검출된 프로그램 즉 기동 빈도가 높은 프로그램을 나타내는 정보를 SSD(3)에 송신하고, 기동 빈도가 높은 프로그램을 SSD(3)에 통지한다(스텝 S172).
SSD(3)의 컨트롤러(4)는, 기동 빈도가 높은 프로그램을 나타내는 정보를 호스트(2)로부터 수신한다. 그리고, 컨트롤러(4)의 호스트 요구 처리부(402)는, 데이터 제어부(403)에 대해서, 기동 빈도가 높은 프로그램 따라서 액세스된 데이터를 보다 다치도가 낮은 블록으로 이동시킬 것을 지시한다. 이 지시를 받은 데이터 제어부(403)는, 도 11의 프로세스 데이터 관리 테이블에 기초하여, 호스트(2)에 의해 통지된 기동 빈도가 높은 프로그램에 대응하는 프로세스에 의해 판독 또는 기입된 데이터를 다치도가 높은 블록으로부터 보다 다치도가 낮은 블록으로 이동시키는 처리를 실행한다(스텝 S173).
도 22의 흐름도를 참조하여 설명한 호스트(2)의 처리는, 호스트 소프트웨어(스토리지 드라이버(31), 오퍼레이팅 시스템(OS)(32), 파일 시스템(33), 프로세스 감시부(41) 등)를 실행하도록 구성된 프로세서(12)에 의해 실행된다.
이상 설명한 바와 같이, 본 제1 실시 형태 내지 제6 실시 형태에 의하면, 호스트(2)의 내부 상태에 관한 정보(총 프로세스 수, 총 프로세스 수의 증가 또는 감소, 생성된 각 프로세스의 식별자, 생성된 각 프로세스의 종별, 종료된 프로세스의 식별자, 요구원의 프로세스의 식별자가 부여된 판독/기입 요구, 호스트 메모리의 사용량, 다음에 일어나는 스왑 아웃에 의해 SSD(3)에 기입될 데이터양, 빈번히 기동되는 프로그램 등)가 호스트(2)로부터 SSD(3)에 통지되고, 이 정보에 기초하여, 다치 레벨이 서로 다른 블록 간에서의 데이터 이동이나 GC를 위한 데이터 이동과 같은 SSD(3)의 내부 동작이 제어된다.
이와 같이, 호스트(2)의 상태 변화를 SSD(3)의 내부 제어에 이용함으로써, 호스트(2)측에서 본 SSD(3)의 성능, 나아가서는 유저측에서 본 SSD(3)의 성능을 향상시킬 수 있다. 또한, SSD(3) 내부의 NAND 플래시 메모리(5)의 이용 효율의 개선을 도모할 수 있다.
또한, 여기에서는, 호스트(2)의 내부 상태 통지 처리와 호스트(2)로부터 통지되는 내부 상태에 기초하는 데이터 이동 처리를 제1 실시 형태 내지 제6 실시 형태로 각각 나누어 설명하였지만, 이들 실시 형태의 처리는 적절히 조합하여 사용할 수 있다. 또한, 제1 실시 형태 내지 제6 실시 형태 중 임의의 2 이상의 실시 형태의 구성을 겸비하는 구성이 이용되어도 된다.
또한, SSD(3)에 대한 호스트(2)의 상태 통지는, 다양한 표준 규격에 따른 방법으로 행해도 되고, 표준 규격 이외의 방법을 이용하여 행해도 된다.
본 발명의 몇 가지 실시 형태를 설명하였지만, 이들 실시 형태는, 예로서 제시한 것으로, 발명의 범위를 한정하는 것은 의도하고 있지 않다. 이들 신규의 실시 형태는, 그 밖의 다양한 형태로 실시되는 것이 가능하며, 발명의 요지를 일탈하지 않는 범위에서, 다양한 생략, 대체, 변경을 행할 수 있다. 이들 실시 형태나 그 변형은, 발명의 범위나 요지에 포함됨과 함께, 청구범위에 기재된 발명과 그 균등의 범위에 포함된다.
2: 호스트
3: SSD(스토리지 디바이스)
4: 컨트롤러
5: NAND 플래시 메모리
31: 스토리지 드라이버
32: 오퍼레이팅 시스템
33: 파일 시스템
321: 프로세스 관리부
41: 프로세스 감시부
42: 필터 드라이버
402: 호스트 요구 처리부
403: 데이터 제어부
3: SSD(스토리지 디바이스)
4: 컨트롤러
5: NAND 플래시 메모리
31: 스토리지 드라이버
32: 오퍼레이팅 시스템
33: 파일 시스템
321: 프로세스 관리부
41: 프로세스 감시부
42: 필터 드라이버
402: 호스트 요구 처리부
403: 데이터 제어부
Claims (18)
- 호스트에 접속 가능한 스토리지 디바이스로서,
복수의 블록을 포함하는 불휘발성 메모리와,
상기 불휘발성 메모리에 전기적으로 접속되고, 상기 불휘발성 메모리를 제어하도록 구성된 컨트롤러를 구비하며,
상기 컨트롤러는,
상기 호스트상에서 동작하고 있는 총 프로세스 수를 나타내는 정보를 상기 호스트로부터 수신하고,
상기 총 프로세스 수가 제1 임계값을 상회하고 있다는 판정을 한 후, 상기 불휘발성 메모리의 적어도 하나의 블록에 저장되어 있는 데이터를 상기 불휘발성 메모리의 다른 적어도 하나의 블록으로 이동시키는 처리를 실행하도록 구성되어 있는, 스토리지 디바이스. - 제1항에 있어서,
상기 복수의 블록의 각각은, 하나의 메모리 셀에 저장되는 비트의 수를 나타내는 다치도가 서로 다른 복수 종의 블록 중 어느 하나로서 선택적으로 사용되고,
상기 컨트롤러는, 상기 총 프로세스 수가 상기 제1 임계값을 상회하고 있다는 판정을 한 후, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행하도록 구성되어 있는, 스토리지 디바이스. - 제1항에 있어서,
상기 컨트롤러는,
상기 호스트에 있어서 생성된 각 프로세스의 식별자와 상기 생성된 각 프로세스가 시스템 프로세스 또는 유저 프로세스 중 어느 것인지를 나타내는 종별을 나타내는 정보와, 데이터의 기입을 요구한 프로세스의 식별자가 각각에 부여된 기입 요구 각각을 상기 호스트로부터 수신하고,
상기 생성된 각 프로세스의 식별자와, 상기 생성된 각 프로세스의 종별과, 상기 생성된 각 프로세스에 의해 기입된 데이터에 대응하는 어드레스 범위의 대응 관계를 제1 관리 테이블을 사용하여 관리하고,
상기 총 프로세스 수가 상기 제1 임계값을 상회하고 있다는 판정을 한 후, 상기 제1 관리 테이블에 기초하여, 종별이 상기 유저 프로세스인 프로세스에 의해 상기 불휘발성 메모리에 기입된 데이터를, 종별이 상기 시스템 프로세스인 프로세스에 의해 상기 불휘발성 메모리에 기입된 데이터보다도 우선하여 이동 대상 데이터로서 선택하고, 상기 이동 대상 데이터를, 상기 이동 대상 데이터가 저장되어 있는 블록으로부터 다른 블록으로 이동시키는 처리를 실행하도록 구성되어 있는, 스토리지 디바이스. - 제3항에 있어서,
상기 복수의 블록의 각각은, 하나의 메모리 셀에 저장되는 비트의 수를 나타내는 다치도가 서로 다른 복수 종의 블록 중 어느 하나로서 선택적으로 사용되고,
상기 컨트롤러는, 상기 이동 대상 데이터를 다치도가 낮은 블록으로부터 보다 다치도가 높은 블록으로 이동시키는 처리를 실행하도록 구성되어 있는, 스토리지 디바이스. - 호스트에 접속 가능한 스토리지 디바이스로서,
복수의 블록을 포함하는 불휘발성 메모리와,
상기 불휘발성 메모리에 전기적으로 접속되고, 상기 불휘발성 메모리를 제어하도록 구성된 컨트롤러를 구비하며,
상기 컨트롤러는,
상기 호스트에 있어서 생성된 각 프로세스의 식별자를 나타내는 정보와, 데이터의 기입을 요구한 프로세스의 식별자가 각각에 부여된 기입 요구 각각을 상기 호스트로부터 수신하고,
상기 생성된 각 프로세스의 식별자와, 상기 생성된 각 프로세스에 의해 기입된 데이터에 대응하는 어드레스 범위의 대응 관계를 제1 테이블을 사용하여 관리하고,
종료된 프로세스의 식별자를 나타내는 정보를 상기 호스트로부터 수신한 후, 상기 제1 테이블에 기초하여, 상기 종료된 프로세스에 의해 상기 불휘발성 메모리에 기입된 제1 데이터를, 상기 제1 데이터가 저장되어 있는 블록으로부터 다른 블록으로 이동시키는 처리를 실행하도록 구성되어 있는, 스토리지 디바이스. - 제5항에 있어서,
상기 복수의 블록의 각각은, 하나의 메모리 셀에 저장되는 비트의 수를 나타내는 다치도가 서로 다른 복수 종의 블록 중 어느 하나로서 선택적으로 사용되고,
상기 컨트롤러는, 상기 종료된 프로세스에 의해 상기 불휘발성 메모리에 기입된 상기 제1 데이터를 다치도가 낮은 블록으로부터 보다 다치도가 높은 블록으로 이동시키는 처리를 실행하도록 구성되어 있는, 스토리지 디바이스. - 호스트에 접속 가능한 스토리지 디바이스로서,
복수의 블록을 포함하는 불휘발성 메모리와,
상기 불휘발성 메모리에 전기적으로 접속되고, 상기 불휘발성 메모리를 제어하도록 구성된 컨트롤러를 구비하며,
상기 컨트롤러는,
상기 호스트의 메모리 사용량을 나타내는 정보를 상기 호스트로부터 수신하고,
상기 호스트의 메모리 사용량이 제3 임계값을 상회하고 있다는 판정을 한 후, 상기 불휘발성 메모리의 적어도 하나의 블록에 저장되어 있는 데이터를 상기 불휘발성 메모리의 다른 적어도 하나의 블록으로 이동시키는 처리를 실행하도록 구성되어 있는, 스토리지 디바이스. - 제7항에 있어서,
상기 복수의 블록의 각각은, 하나의 메모리 셀에 저장되는 비트의 수를 나타내는 다치도가 서로 다른 복수 종의 블록 중 어느 하나로서 선택적으로 사용되고,
상기 컨트롤러는, 상기 호스트의 메모리 사용량이 상기 제3 임계값을 상회하고 있다는 판정을 한 후, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행하도록 구성되어 있는, 스토리지 디바이스. - 제7항에 있어서,
상기 컨트롤러는,
다음에 일어날 프로세스의 스왑 아웃에 의해 상기 스토리지 디바이스에 기입될 데이터양을 나타내는 정보를 상기 호스트로부터 수신하고,
상기 호스트의 메모리 사용량이 상기 제3 임계값을 상회하고 있다는 판정을 한 후, 상기 수신된 정보에 의해 나타나는 데이터양에 대응하는 빈 용량이 확보되도록 상기 불휘발성 메모리의 적어도 하나의 블록에 저장되어 있는 데이터를 상기 불휘발성 메모리의 다른 적어도 하나의 블록으로 이동시키는 처리를 실행하도록 구성되어 있는, 스토리지 디바이스. - 제7항에 있어서,
상기 복수의 블록의 각각은, 하나의 메모리 셀에 저장되는 비트의 수를 나타내는 다치도가 서로 다른 복수 종의 블록 중 어느 하나로서 선택적으로 사용되고,
상기 컨트롤러는,
다음에 일어날 프로세스의 스왑 아웃에 의해 상기 스토리지 디바이스에 기입될 데이터양을 나타내는 정보를 상기 호스트로부터 수신하고,
상기 호스트의 메모리 사용량이 상기 제3 임계값을 상회하고 있다는 판정을 한 후, 상기 수신된 정보에 의해 나타나는 데이터양에 대응하는 빈 용량이 다치도가 낮은 블록에 확보되도록, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행하도록 구성되어 있는, 스토리지 디바이스. - 호스트에 접속 가능한 스토리지 디바이스로서,
복수의 블록을 포함하는 불휘발성 메모리와,
상기 불휘발성 메모리에 전기적으로 접속되고, 상기 불휘발성 메모리를 제어하도록 구성된 컨트롤러를 구비하며,
상기 복수의 블록의 각각은, 하나의 메모리 셀에 저장되는 비트의 수를 나타내는 다치도가 서로 다른 복수 종의 블록 중 어느 하나로서 선택적으로 사용되고,
상기 컨트롤러는,
상기 호스트에 있어서 생성된 각 프로세스의 식별자를 나타내는 정보와, 데이터의 판독 또는 기입을 요구한 프로세스의 식별자가 각각에 부여된 판독/기입 요구 각각과, 기동 빈도가 높은 프로그램을 나타내는 정보를 상기 호스트로부터 수신하고,
상기 생성된 각 프로세스의 식별자와, 상기 생성된 각 프로세스에 의해 판독 또는 기입된 데이터에 대응하는 어드레스 범위의 대응 관계를 제1 관리 테이블을 사용하여 관리하고,
상기 제1 관리 테이블에 기초하여, 상기 기동 빈도가 높은 프로그램에 대응하는 프로세스에 의해 판독 또는 기입된 데이터를 다치도가 높은 블록으로부터 보다 다치도가 낮은 블록으로 이동시키는 처리를 실행하도록 구성되어 있는, 스토리지 디바이스. - 프로세서 및 메모리를 포함하는 컴퓨터와, 스토리지 디바이스를 구비하는 컴퓨터 시스템으로서,
상기 프로세서는, 상기 프로세서상에서 동작하고 있는 총 프로세스 수를 상기 스토리지 디바이스에 통지하는 처리를 실행하도록 구성되고,
상기 스토리지 디바이스는,
복수의 블록을 포함하는 불휘발성 메모리와,
상기 불휘발성 메모리에 전기적으로 접속되고, 상기 불휘발성 메모리를 제어하도록 구성된 컨트롤러를 구비하며,
상기 컨트롤러는,
상기 컴퓨터로부터 통지되는 상기 총 프로세스 수가 제1 임계값을 상회하고 있다는 판정을 한 후, 상기 불휘발성 메모리의 적어도 하나의 블록에 저장되어 있는 데이터를 상기 불휘발성 메모리의 다른 적어도 하나의 블록으로 이동시키는 처리를 실행하도록 구성되어 있는, 컴퓨터 시스템. - 제12항에 있어서,
상기 복수의 블록의 각각은, 하나의 메모리 셀에 저장되는 비트의 수를 나타내는 다치도가 서로 다른 복수 종의 블록 중 어느 하나로서 선택적으로 사용되고,
상기 컨트롤러는, 상기 총 프로세스 수가 상기 제1 임계값을 상회하고 있다는 판정을 한 후, 다치도가 낮은 블록에 저장되어 있는 데이터를 보다 다치도가 높은 블록으로 이동시키는 처리를 실행하도록 구성되어 있는, 컴퓨터 시스템. - 제12항에 있어서,
상기 프로세서는, 상기 컴퓨터에 있어서 생성된 각 프로세스의 식별자와 상기 생성된 각 프로세스가 시스템 프로세스 또는 유저 프로세스 중 어느 것인지를 나타내는 종별을 나타내는 정보와, 데이터의 기입을 요구한 프로세스의 식별자가 각각에 부여된 기입 요구 각각을 상기 스토리지 디바이스에 송신하도록 구성되고,
상기 컨트롤러는,
상기 생성된 각 프로세스의 식별자와, 상기 생성된 각 프로세스의 종별과, 상기 생성된 각 프로세스에 의해 기입된 데이터에 대응하는 어드레스 범위의 대응 관계를 제1 관리 테이블을 사용하여 관리하고,
상기 총 프로세스 수가 상기 제1 임계값을 상회하고 있다는 판정을 한 후, 상기 제1 관리 테이블에 기초하여, 종별이 유저 프로세스인 프로세스에 의해 상기 불휘발성 메모리에 기입된 데이터를, 종별이 상기 시스템 프로세스인 프로세스에 의해 상기 불휘발성 메모리에 기입된 데이터보다도 우선하여 이동 대상 데이터로서 선택하고, 상기 이동 대상 데이터를, 상기 이동 대상 데이터가 저장되어 있는 블록으로부터 다른 블록으로 이동시키는 처리를 실행하도록 구성되어 있는, 컴퓨터 시스템. - 제14항에 있어서,
상기 복수의 블록의 각각은, 하나의 메모리 셀에 저장되는 비트의 수를 나타내는 다치도가 서로 다른 복수 종의 블록 중 어느 하나로서 선택적으로 사용되고,
상기 컨트롤러는, 상기 이동 대상 데이터를 다치도가 낮은 블록으로부터 보다 다치도가 높은 블록으로 이동시키는 처리를 실행하도록 구성되어 있는, 컴퓨터 시스템. - 제12항에 있어서,
상기 프로세서는, 상기 컴퓨터의 상기 메모리의 사용량을 상기 스토리지 디바이스에 통지하도록 구성되고,
상기 컨트롤러는, 상기 컴퓨터의 상기 메모리의 사용량이 제3 임계값을 상회하고 있다는 판정을 한 후, 상기 불휘발성 메모리의 적어도 하나의 블록에 저장되어 있는 데이터를 상기 불휘발성 메모리의 다른 적어도 하나의 블록으로 이동시키는 처리를 실행하도록 구성되어 있는, 컴퓨터 시스템. - 제16항에 있어서,
상기 프로세서는, 다음에 일어날 프로세스의 스왑 아웃에 의해 상기 스토리지 디바이스에 기입될 데이터양을 상기 스토리지 디바이스에 통지하도록 구성되고,
상기 컴퓨터의 상기 메모리의 사용량이 상기 제3 임계값을 상회하고 있다는 판정을 한 후, 상기 통지된 데이터양에 대응하는 빈 용량이 확보되도록 상기 불휘발성 메모리의 적어도 하나의 블록에 저장되어 있는 데이터를 상기 불휘발성 메모리의 다른 적어도 하나의 블록으로 이동시키는 처리를 실행하도록 구성되어 있는, 컴퓨터 시스템. - 제12항에 있어서,
상기 프로세서는, 상기 컴퓨터에 있어서 생성된 각 프로세스의 식별자를 상기 스토리지 디바이스에 통지하는 처리와, 데이터의 판독 또는 기입을 요구한 프로세스의 식별자가 각각에 부여된 판독/기입 요구 각각을 상기 스토리지 디바이스에 송신하는 처리와, 기동 빈도가 높은 프로그램을 상기 스토리지 디바이스에 통지하는 처리를 실행하도록 구성되고,
상기 컨트롤러는,
상기 생성된 각 프로세스의 식별자와, 상기 생성된 각 프로세스에 의해 판독 또는 기입된 데이터에 대응하는 어드레스 범위의 대응 관계를 제1 관리 테이블을 사용하여 관리하고,
상기 제1 관리 테이블에 기초하여, 상기 기동 빈도가 높은 프로그램에 대응하는 프로세스에 의해 판독 또는 기입된 데이터를 다치도가 높은 블록으로부터 보다 다치도가 낮은 블록으로 이동시키는 처리를 실행하도록 구성되어 있는, 컴퓨터 시스템.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JPJP-P-2018-054918 | 2018-03-22 | ||
JP2018054918A JP6968016B2 (ja) | 2018-03-22 | 2018-03-22 | ストレージデバイスおよびコンピュータシステム |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20190111714A true KR20190111714A (ko) | 2019-10-02 |
KR102094236B1 KR102094236B1 (ko) | 2020-04-23 |
Family
ID=67983633
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020180083935A KR102094236B1 (ko) | 2018-03-22 | 2018-07-19 | 스토리지 디바이스 및 컴퓨터 시스템 |
Country Status (5)
Country | Link |
---|---|
US (2) | US10871920B2 (ko) |
JP (1) | JP6968016B2 (ko) |
KR (1) | KR102094236B1 (ko) |
CN (1) | CN110297780B (ko) |
TW (1) | TWI682279B (ko) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11023150B2 (en) * | 2019-07-01 | 2021-06-01 | International Business Machines Corporation | Block mode toggling using hybrid controllers |
US11768701B2 (en) * | 2019-09-17 | 2023-09-26 | Western Digital Technologies, Inc. | Exception analysis for data storage devices |
CN113590509B (zh) * | 2020-04-30 | 2024-03-26 | 华为技术有限公司 | 一种页交换的方法、存储系统和电子设备 |
JP7490469B2 (ja) | 2020-06-25 | 2024-05-27 | キオクシア株式会社 | ストレージデバイス、ストレージシステム及び制御方法 |
US11907539B2 (en) * | 2020-11-20 | 2024-02-20 | Samsung Electronics Co., Ltd. | System and method for stream based data placement on hybrid SSD |
CN112559392B (zh) | 2020-12-23 | 2023-08-15 | 深圳大普微电子科技有限公司 | 一种加速读存储介质的方法、读加速硬件模块及存储器 |
US20220374216A1 (en) * | 2021-05-20 | 2022-11-24 | Lenovo (United States) Inc. | Method of manufacturing information processing apparatus and mobile computer |
CN113504994B (zh) * | 2021-07-26 | 2022-05-10 | 上海遁一信息科技有限公司 | 一种内存池性能弹性伸缩的实现方法及系统 |
CN114201233B (zh) * | 2021-11-18 | 2024-07-16 | 成都网思科平科技有限公司 | 一种基于快照参照的减少进程模块加载数据存储的方法 |
US11977739B2 (en) | 2022-09-01 | 2024-05-07 | Western Digital Technologies, Inc. | Handling write data burst for improved performance and resource usage |
US11960742B1 (en) * | 2022-10-14 | 2024-04-16 | Oracle International Corporation | High-performance, block-level fail atomicity on byte-level non-volatile media |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20080055734A (ko) * | 2006-12-15 | 2008-06-19 | 가부시끼가이샤 도시바 | 메모리 디바이스 |
KR20100075116A (ko) * | 2008-12-24 | 2010-07-02 | 주식회사 코아로직 | 복수의 프로세스를 멀티태스킹하기 위한 명령 실행 방법 및장치 |
KR20120012375A (ko) * | 2010-07-30 | 2012-02-09 | 가부시끼가이샤 도시바 | 메모리 관리 장치, 정보 처리 장치 및 메모리 관리 방법 |
KR20140043329A (ko) * | 2011-03-31 | 2014-04-09 | 샌디스크 테크놀로지스, 인코포레이티드 | 셀 저장 용량당 서로 다른 비트를 갖는 세 개의 메모리 층을 구비한 메모리 시스템 |
KR20170072600A (ko) * | 2015-12-17 | 2017-06-27 | 에스케이텔레콤 주식회사 | 메모리제어장치 및 메모리제어장치의 동작 방법 |
Family Cites Families (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8078794B2 (en) * | 2000-01-06 | 2011-12-13 | Super Talent Electronics, Inc. | Hybrid SSD using a combination of SLC and MLC flash memory arrays |
US7594128B2 (en) * | 2004-08-04 | 2009-09-22 | Hewlett-Packard Development Company, L.P. | Systems and methods to determine processor utilization |
JP4805696B2 (ja) | 2006-03-09 | 2011-11-02 | 株式会社東芝 | 半導体集積回路装置およびそのデータ記録方式 |
US20080222348A1 (en) * | 2007-03-08 | 2008-09-11 | Scandisk Il Ltd. | File system for managing files according to application |
TW200841343A (en) * | 2007-04-02 | 2008-10-16 | Apacer Technology Inc | A data storage device consisting of NAND (Not-AND) flash memory and its data storing method |
JP2010266962A (ja) * | 2009-05-12 | 2010-11-25 | Toshiba Storage Device Corp | 記憶装置、その制御方法及びその記憶装置を備える電子装置 |
US8402214B2 (en) * | 2009-09-16 | 2013-03-19 | Hitachi, Ltd. | Dynamic page reallocation storage system management |
JP5066209B2 (ja) * | 2010-03-18 | 2012-11-07 | 株式会社東芝 | コントローラ、データ記憶装置、及びプログラム |
JP5405663B2 (ja) * | 2010-05-31 | 2014-02-05 | パナソニック株式会社 | メモリ管理装置、メモリ管理方法、メモリ管理プログラム、メモリ管理プログラムを記録したコンピュータ読み取り可能な記録媒体及び集積回路 |
JP5066241B2 (ja) * | 2010-09-24 | 2012-11-07 | 株式会社東芝 | メモリシステム |
TWI471862B (zh) | 2011-08-19 | 2015-02-01 | Silicon Motion Inc | 快閃記憶體控制器 |
US20170017406A1 (en) * | 2015-07-14 | 2017-01-19 | HGST Netherlands B.V. | Systems and methods for improving flash-oriented file system garbage collection |
CN108108311A (zh) * | 2013-12-12 | 2018-06-01 | 株式会社日立制作所 | 存储装置及存储装置的控制方法 |
US9678797B2 (en) * | 2014-03-10 | 2017-06-13 | Microsoft Technology Licensing, Llc | Dynamic resource management for multi-process applications |
US9928169B2 (en) * | 2014-05-07 | 2018-03-27 | Sandisk Technologies Llc | Method and system for improving swap performance |
US10452280B2 (en) * | 2014-10-03 | 2019-10-22 | International Business Machines Corporation | Hybrid storage system employing reconfigurable memory |
JP2016170583A (ja) * | 2015-03-12 | 2016-09-23 | 株式会社東芝 | メモリシステムおよび情報処理システム |
US20160283124A1 (en) * | 2015-03-25 | 2016-09-29 | Kabushiki Kaisha Toshiba | Multi-streamed solid state drive |
TWI672706B (zh) * | 2015-12-14 | 2019-09-21 | 南韓商愛思開海力士有限公司 | 記憶體儲存裝置及其操作方法 |
US11169707B2 (en) * | 2016-01-22 | 2021-11-09 | Netapp, Inc. | Garbage collection pacing in a storage system |
US10235079B2 (en) * | 2016-02-03 | 2019-03-19 | Toshiba Memory Corporation | Cooperative physical defragmentation by a file system and a storage device |
US10185658B2 (en) * | 2016-02-23 | 2019-01-22 | Sandisk Technologies Llc | Efficient implementation of optimized host-based garbage collection strategies using xcopy and multiple logical stripes |
US20170249092A1 (en) * | 2016-02-25 | 2017-08-31 | Canon Kabushiki Kaisha | Apparatus having volatile memory, memory control method, and storage medium |
US10739996B1 (en) * | 2016-07-18 | 2020-08-11 | Seagate Technology Llc | Enhanced garbage collection |
KR102550343B1 (ko) | 2016-07-27 | 2023-07-03 | 삼성전자주식회사 | 솔리드 스테이트 드라이브 장치 및 그것의 동작 방법 |
TWI615710B (zh) * | 2016-12-14 | 2018-02-21 | 群聯電子股份有限公司 | 記憶體管理方法、記憶體儲存裝置及記憶體控制電路單元 |
TWI602061B (zh) * | 2017-03-16 | 2017-10-11 | 群聯電子股份有限公司 | 資料寫入方法、記憶體儲存裝置與記憶體控制電路單元 |
TWI615711B (zh) * | 2017-03-28 | 2018-02-21 | 群聯電子股份有限公司 | 資料寫入方法、記憶體控制電路單元與記憶體儲存裝置 |
US11048624B2 (en) * | 2017-04-25 | 2021-06-29 | Samsung Electronics Co., Ltd. | Methods for multi-stream garbage collection |
US10496297B2 (en) * | 2017-11-21 | 2019-12-03 | Micron Technology, Inc. | Data categorization based on invalidation velocities |
US10713158B2 (en) * | 2018-06-28 | 2020-07-14 | Western Digital Technologies, Inc. | Non-volatile storage system with dynamic allocation of applications to memory based on usage monitoring |
-
2018
- 2018-03-22 JP JP2018054918A patent/JP6968016B2/ja active Active
- 2018-07-05 TW TW107123304A patent/TWI682279B/zh active
- 2018-07-19 KR KR1020180083935A patent/KR102094236B1/ko active IP Right Grant
- 2018-07-20 CN CN201810801383.0A patent/CN110297780B/zh active Active
- 2018-07-27 US US16/047,205 patent/US10871920B2/en active Active
-
2020
- 2020-11-18 US US16/951,785 patent/US20210072923A1/en not_active Abandoned
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20080055734A (ko) * | 2006-12-15 | 2008-06-19 | 가부시끼가이샤 도시바 | 메모리 디바이스 |
KR20100075116A (ko) * | 2008-12-24 | 2010-07-02 | 주식회사 코아로직 | 복수의 프로세스를 멀티태스킹하기 위한 명령 실행 방법 및장치 |
KR20120012375A (ko) * | 2010-07-30 | 2012-02-09 | 가부시끼가이샤 도시바 | 메모리 관리 장치, 정보 처리 장치 및 메모리 관리 방법 |
KR20140043329A (ko) * | 2011-03-31 | 2014-04-09 | 샌디스크 테크놀로지스, 인코포레이티드 | 셀 저장 용량당 서로 다른 비트를 갖는 세 개의 메모리 층을 구비한 메모리 시스템 |
KR20170072600A (ko) * | 2015-12-17 | 2017-06-27 | 에스케이텔레콤 주식회사 | 메모리제어장치 및 메모리제어장치의 동작 방법 |
Also Published As
Publication number | Publication date |
---|---|
CN110297780A (zh) | 2019-10-01 |
TW201941060A (zh) | 2019-10-16 |
JP6968016B2 (ja) | 2021-11-17 |
US10871920B2 (en) | 2020-12-22 |
CN110297780B (zh) | 2023-08-25 |
TWI682279B (zh) | 2020-01-11 |
US20210072923A1 (en) | 2021-03-11 |
US20190294365A1 (en) | 2019-09-26 |
KR102094236B1 (ko) | 2020-04-23 |
JP2019168822A (ja) | 2019-10-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6968016B2 (ja) | ストレージデバイスおよびコンピュータシステム | |
CN111241006B (zh) | 存储阵列及控制方法 | |
JP6785205B2 (ja) | メモリシステムおよび制御方法 | |
JP6414853B2 (ja) | メモリシステムおよび制御方法 | |
JP6414852B2 (ja) | メモリシステムおよび制御方法 | |
US10732905B2 (en) | Automatic I/O stream selection for storage devices | |
JP6517685B2 (ja) | メモリシステムおよび制御方法 | |
TW202230136A (zh) | 儲存裝置 | |
KR20210111527A (ko) | 메모리 시스템에서 가비지 컬렉션을 수행하는 장치 및 방법 | |
JP2016170583A (ja) | メモリシステムおよび情報処理システム | |
US11023132B2 (en) | Electronic device, computer system, and control method | |
US11392309B2 (en) | Memory system for performing migration operation and operating method thereof | |
CN110908595B (zh) | 存储装置及信息处理系统 | |
US10365857B2 (en) | Memory system | |
KR101549569B1 (ko) | 가비지 컬렉션 수행 방법 및 그 방법을 이용한 플래시 메모리 장치 | |
JP6721765B2 (ja) | メモリシステムおよび制御方法 | |
JP6666405B2 (ja) | メモリシステムおよび制御方法 | |
EP4287028A1 (en) | Storage device providing high purge performance and memory block management method thereof | |
JP2019016386A (ja) | メモリシステムおよび制御方法 |
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 |