KR102412978B1 - 이중 쓰기를 수행하는 스토리지 시스템 및 그것의 이중 쓰기 방법 - Google Patents

이중 쓰기를 수행하는 스토리지 시스템 및 그것의 이중 쓰기 방법 Download PDF

Info

Publication number
KR102412978B1
KR102412978B1 KR1020160098623A KR20160098623A KR102412978B1 KR 102412978 B1 KR102412978 B1 KR 102412978B1 KR 1020160098623 A KR1020160098623 A KR 1020160098623A KR 20160098623 A KR20160098623 A KR 20160098623A KR 102412978 B1 KR102412978 B1 KR 102412978B1
Authority
KR
South Korea
Prior art keywords
data
write request
storage device
journal
request
Prior art date
Application number
KR1020160098623A
Other languages
English (en)
Other versions
KR20170080419A (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 KR20170080419A publication Critical patent/KR20170080419A/ko
Application granted granted Critical
Publication of KR102412978B1 publication Critical patent/KR102412978B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • 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/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/1805Append-only file systems, e.g. using logs or journals to store data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0616Improving the reliability of storage systems in relation to life time, e.g. increasing Mean Time Between Failures [MTBF]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0652Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • 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/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7205Cleaning, compaction, garbage collection, erase control

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)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Quality & Reliability (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Debugging And Monitoring (AREA)
  • Memory System (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

본 발명의 실시 예에 따른 시스템은 컴퓨터, 스토리지 장치, 어플리케이션, 그리고 컨트롤러를 포함할 수 있다. 컴퓨터는 프로세서 및 메모리를 포함할 수 있다. 어플리케이션은 프로세서 상에서 실행되고, 저널(journal) 쓰기 요청 및 데이터 쓰기 요청 모두를 스토리지 장치에 전송하도록 동작할 수 있다. 컨트롤러는 스토리지 장치 상에 위치하고, 스토리지 장치가 제 1 스트림(stream)과 관련된 제 1 블록(block)에 저널 정보를 쓰고 제 2 스트림과 관련된 제 2 블록에 데이터를 쓰도록 지시할 수 있다. 저널 쓰기 요청은 저널 정보를 포함하고 제 1 스트림과 관련될 수 있다. 데이터 쓰기 요청은 데이터를 포함하고 제 2 스트림과 관련될 수 있다.

Description

이중 쓰기를 수행하는 스토리지 시스템 및 그것의 이중 쓰기 방법{STORAGE SYSTEM PERFORMING DOUBLE WRITE AND DOUBLE WRITING METHOD THEREOF}
본 발명은 스토리지 시스템에 관한 것으로, 좀 더 구체적으로 이중 쓰기를 수행하는 스토리지 시스템 및 그것의 이중 쓰기 방법에 관한 것이다.
NAND 플래시 메모리를 기반으로 하는 SSD(Solid-State Drive)는 모든 종류의 데이터 저장 시스템들의 속도를 향상시키기 위해 엔터프라이즈(enterprise) 서버들과 데이터 센터들 내에서 널리 사용되어 왔다. SSD들 내의 플래시 메모리는 고유한 특성들을 갖는다. 따라서, 종래의 자기 디스크(magnetic disk)를 SSD로 직접 대체하는 것은 장치를 최대로 가동되게 활용할 수 없다. 한 가지 중요한 이유는 SSD들이 오직 프리(free) 플래시 메모리 블록들에만 쓸 수 있고, 재사용하기 위하여 가비지 콜렉션(garbage collection)을 수행하여 무효인 플래시 메모리 블록들을 회복한다는 점이다. 종래의 운영 체제들 및 어플리케이션들이 핫(hot) 데이터와 콜드(cold) 데이터를 구별하지 않기 때문에, 다른 수명(lifespan)을 갖는 혼합 데이터는 플래시 메모리를 관리하고 리클레임(reclaim)하기 위한 가비지 콜렉션의 수행을 더욱 어렵게 한다. 이는 SSD의 성능 및 수명 모두에 영향을 준다.
최근, 많은 데이터 스토리지 시스템들은 데이터 내구성 및 성능을 위해 저널링(journaling)을 사용한다. 데이터 스토리지 시스템들은 오브젝트(object) 스토리지 시스템들(Ceph 등), 블록 스토리지 시스템들(캐시 및 다른 캐싱 시스템들 등), 그리고 파일 스토리지 시스템들(IBM JFS/JFS2, Linux xfs, 및 Linux ext4 등)을 포함할 수 있다. 이러한 시스템들은 두 개의 데이터 복사본을 저장한다. 하나의 복사본은 저널 섹션(journal section)에 저장되고, 다른 하나의 복사본은 데이터 섹션에 저장된다.
이러한 시스템들이 순수 SSD 환경 내에 배치되는 경우, 성능 및 비용의 이유로 인해, 시스템들은 일반적으로 저널들과 실제 데이터를 동일 SSD 상에 저장한다. 데이터가 쓰여지기 위해 수신되는 경우, 데이터 스토리지 시스템은 먼저 하나의 데이터 복사본을 디스크에 플러쉬(flush)되는 저널에 저장하고, 두 번째 데이터 카피본은 메모리의 파일 시스템 페이지 캐시 내에 저장된다. 그러면, 데이터 스토리지 시스템은 유저 어플리케이션에 석세스(success)를 리턴(return)한다. 이어, 백그라운드(background) 내에서 언젠가, 데이터 스토리지 시스템들은 파일 시스템 페이지 캐시 내의 그러한 데이터 기록들을 디스크에 플러시하고, 디스크 상의 저널 내의 동일한 데이터 기록들을 제거한다. 이러한 과정은 데이터 쓰기 각각에 대해 반복되며, 또한, 저널이 메타 데이터에 대해서만 사용되는 경우에도 발생한다.
이러한 이중 쓰기(double-write) 방식(approach)은, SSD들과 함께 사용되는 경우 모든 SSD 블록 내부의 플래시 메모리의 내부 분열(fragmentation)이라는 문제점을 갖는다. 이러한 내부 분열 문제는 좀 더 많은 가비지 콜렉션을 유발하고, 스토리지 시스템 성능을 저하시키고, 읽기/쓰기 레이턴시(latency)를 증가시키고, SSD의 수명을 단축시킨다.
이에, SSD 내의 플레시 메모리의 분열을 피하거나 적어도 최소화하면서 SSD들과 함께 이중 쓰기의 접근을 이용할 수 있는 방법이 요구된다.
본 발명의 목적은 위에서 설명한 기술적 과제를 해결하기 위한 것으로, 이중 쓰기를 수행하는 스토리지 시스템 및 그것의 이중 쓰기 방법을 제공하는데 있다.
본 발명의 실시 예에 따른 시스템은 컴퓨터, 스토리지 장치, 어플리케이션, 그리고 컨트롤러를 포함할 수 있다. 컴퓨터는 프로세서 및 메모리를 포함할 수 있다. 어플리케이션은 프로세서 상에서 실행되고, 저널(journal) 쓰기 요청 및 데이터 쓰기 요청 모두를 스토리지 장치에 전송하도록 동작할 수 있다. 컨트롤러는 스토리지 장치 상에 위치하고, 스토리지 장치가 제 1 스트림(stream)과 관련된 제 1 블록(block)에 저널 정보를 쓰고 제 2 스트림과 관련된 제 2 블록에 데이터를 쓰도록 지시할 수 있다. 저널 쓰기 요청은 저널 정보를 포함하고 제 1 스트림과 관련될 수 있다. 데이터 쓰기 요청은 데이터를 포함하고 제 2 스트림과 관련될 수 있다.
본 발명의 다른 실시 예에 따른 이중 쓰기 방법은 저널 쓰기 및 데이터 쓰기 모두를 실행하는 어플리케이션으로부터 쓰여질 데이터를 식별하는 단계, 어플리케이션으로부터 무효 데이터에 가비지 콜렉션(garbage collection)을 수행하는 스토리지 장치로 저널 쓰기 요청을 전송하는 단계, 그리고 어플리케이션으로부터 스토리지 장치로 데이터 쓰기 요청을 전송하는 단계를 포함할 수 있다. 저널 쓰기 요청은 제 1 스트림에 할당되고, 데이터 쓰기 요청은 제 2 스트림에 할당될 수 있다.
본 발명의 다른 실시 예에 따른 논 트랜지토리(Non-Transitory) 명령을 저장하는 유형의 스토리지 매체(tangible storage medium)를 포함하는 장치에 있어, 논 트랜지토리 명령은 머신에 의해 실행될 때: 저널 쓰기 및 데이터 쓰기 모두를 실행하는 어플리케이션으로부터 쓰여질 데이터를 식별하는 단계, 어플리케이션으로부터 무효 데이터에 가비지 콜렉션을 수행하는 스토리지 장치로 저널 쓰기 요청을 전송하는 단계, 그리고 어플리케이션으로부터 스토리지 장치로 데이터 쓰기 요청을 전송하는 단계를 수행할 수 있다. 저널 쓰기 요청은 제 1 스트림에 할당되고, 데이터 쓰기 요청은 제 2 스트림에 할당될 수 있다.
본 발명의 실시 예에 따르면, 스토리지 장치 내의 단편화된 블록의 유발을 방지하면서 이중 쓰기 동작이 가능하다. 이에, 스토리지 장치의 동작 효율이 증가한다.
도 1은 본 발명의 실시 예에 따른 저널링과 함께 데이터 스토리지를 사용하는 서버를 보여주는 블록도이다.
도 2는 도 1의 서버를 보여주는 서버를 자세히 보여주는 그림이다.
도 3은 저널링 및 데이터 쓰기들을 모두 수행하기 위해 도 1의 스토리지 장치와 통신하는 도 1의 어플리케이션을 보여주는 그림이다.
도 4는 저널 및 데이터를 저장하기 위해 멀티 스트리밍을 사용하는 도 1의 스토리지 장치를 보여주는 그림이다.
도 5a 및 도 5b는 종래의 접근 방법과 본 발명의 실시 예에 따른 접근 방법을 사용하는 도 1의 스토리지 장치의 사용 방법을 비교하여 보여주는 그림이다.
도 6a 및 도 6b는 저널링 및 데이터 쓰기들을 모두 수행하기 위해 도 1의 스토리지 장치와 통신하는 도 1의 어플리케이션 및 도 1의 데이터 스토리지 시스템을 보여주는 그림이다.
도 7a 및 도 7b는 본 발명의 실시 예에 따라 저널링 및 데이터 쓰기들을 모두 수행하고 도 1의 스토리지 장치와 통신하기 위한 도 1의 어플리케이션 및 도 1의 데이터 스토리지 시스템에 대한 절차를 예시적으로 보여주는 순서도이다.
아래에서는, 본 발명의 기술 분야에서 통상의 지식을 가진 자가 본 발명을 용이하게 실시할 수 있을 정도로, 본 발명의 실시 예들이 명확하고 상세하게 기재될 것이다.
비록 본 명세서에서 첫 번째, 두 번째 등과 같은 용어가 다양한 구성 요소들을 표현하기 위해 사용되었지만, 이러한 구성 요소들은 이러한 용어들에 의해 제한되지 않는 다는 것을 쉽게 이해할 수 있을 것이다. 이러한 용어들은 단지 하나의 구성 요소를 다른 구성 요소들과 구분하기 위해 사용되었다. 예를 들어, 본 발명의 범위를 벗어나지 않으면서, 첫 번째 모듈은 두 번째 모듈로서 명명될 수 있고, 유사하게, 두 번째 모듈은 첫 번째 모듈로서 명명될 수 있다.
도 1은 본 발명의 실시 예에 따른 저널링과 함께 데이터 스토리지 시스템을 사용하는 서버를 보여주는 블록도이다. 도 1에서, 서버(105)가 도시되었다. 서버(105)는 어떠한 종류의 서버도 될 수 있다. 서버(105)는 프로세서(110) 및 메모리(115)를 포함할 수 있다. 프로세서(110)는 어떠한 종류의 프로세서도 될 수 있다. 또한, 메모리(115)는 어떠한 종류의 메모리도 될 수 있다.
프로세서(110) 상에서 동작하는 것은 데이터 스토리지 시스템(120)일 수 있다. 데이터 스토리지 시스템(120)은 이중 쓰기(즉, 저널링 및 데이터 쓰기들)를 수행하는 어떠한 종류의 시스템도 될 수 있다. 데이터 스토리지 시스템(120)은 'Ceph®'와 같은 오브젝트 스토리지 시스템들 및 파일 스토리지 시스템들뿐 아니라, 어플리케이션들이 이중 쓰기를 수행하는 다른 운영 체제 상에서 동작하는 어플리케이션들을 포함하고자 할 수 있다. 'Ceph'는 Inktank Storage, Inc.의 미국 내에서 등록된 상표이다.
데이터 스토리지 시스템(120)에 더하여, 어플리케이션(125)은 데이터 스토리지 시스템(120)의 상단(top)에서 동작할 수 있다. 본 발명의 일부 실시 예들에서, 어플리케이션(125)은 내부 이유들에 의해 자체적으로 이중 쓰기를 수행할 수 있다. 예를 들어, 어플리케이션(125)은 실시간 시뮬레이션 프로그램일 수 있다. 이러한 프로그램들은 동작들이 수행되는 시간에 크게 의존한다. 만약 실시간 시뮬레이션 프로그램이 쓰여지지는 않지만(unwriiten) 버퍼링된(buffered) 데이터에 의해 중단되는 경우, 시뮬레이션의 결과들은 버려질(wasted) 것이다. 따라서, 데이터가 데이터 스토리지 시스템(120)을 통해 스토리지 장치(130)에 쓰여지지 않는 경우에도, 시뮬레이션 프로그램은 데이터가 저널링을 통해 저장되는 것을 보장 받기를 원할 것이다.
스토리지 장치(130)는 무효 데이터의 가비지 콜렉션을 수행하는 어떠한 형태의 다양한 스토리지 장치도 될 수 있다. 예를 들어, 스토리지 장치(130)는 플래시 기반의 SSD(Solid State Drive)일 수 있다. 스토리지 장치(130)는 스토리지 장치(130)의 동작들의 관리를 담당하는 컨트롤러(135)를 포함할 수 있다. 예를 들어, 다른 기능들 중에서, 컨트롤러(135)는 데이터 읽기들 및 쓰기들을 관리할 수 있고, 로직 블록 주소들을 스토리지 장치(305) 상의 물리 블록 주소들에 매핑(mapping)할 수 있다.
다른 구성 요소들 중에서, 컨트롤러(135)는 컨트롤러(135)를 직접 또는 간접적으로 서버(105)에 연결하는 물리 인터페이스, 스토리지 장치(130)의 동작들을 제어하는 프로세서, 플래시 스토리지 내에 저장된 데이터에 대해 에러를 감지하고 정정하는 기능을 제공하는 ECC(Error Correction Code) 회로, 스토리지 장치(130) 내의 DRAM(Dynamic Random Access Memory)을 관리하는 DRAM 컨트롤러, 그리고 플래시 스토리지를 관리하는 하나 또는 하나 이상의 플래시 컨트롤러들을 포함할 수 있다. 컨트롤러(135)는 또한 멀티 스트리밍 컨트롤러를 포함할 수 있는데, 멀티 스트리밍 컨트롤러는 어떤 데이터가 어떤 블록(아래에서 설명되는 바와 같이, 서로 다른 스트림들과 관련된 블록들을 포함하여)에 쓰여지는 지를 관리 할 수 있다. 일부 실시 예들에서, 컨트롤러(135)는 이러한 구성 요소들의 기능을 프로그램하는데 적합한 단일 칩일 수 있다. 다른 실시 예들에서, 컨트롤러(135)는 이러한 구성 요소들 전부 또는 일부를 개별 구성 요소들(예를 들어, 칩들)로써 포함할 수 있다.
도 2는 도 1의 서버를 보여주는 서버를 자세히 보여주는 그림이다. 도 2를 참조하면, 일반적으로 서버(105)는 하나 또는 하나 이상의 프로세서(110)를 포함할 수 있다. 여기서 서버(105)는 복수의 서버(105)일 수 있다. 프로세서(110)는 메모리 컨트롤러(205)와 서버(105)의 구성 요소들의 동작을 조정하는데 사용되는 클록(210)을 포함할 수 있다. 또한, 프로세서(110)는 메모리(115)에 연결될 수 있다. 예를 들어, 메모리(115)는 RAM(Random Access Memory), ROM(Read-Only Memory), 또는 다른 상태 보존 매체(state preserving media)를 포함할 수 있다. 또한, 프로세서(105)는 스토리지 장치(130) 및 네트워크 커넥터(215)에 연결될 수 있다. 예를 들어, 네트워크 커넥터(215)는 이더넷(ethernet) 커넥터일 수 있다. 또한, 다른 구성 요소들 중에서, 프로세서(110)는 버스(220)에 연결될 수 있다. 버스(220)는 유저 인터페이스(225)와 연결될 수 있고, I/O(Input/Output) 엔진(230)을 이용하여 관리될 수 있는 I/O 인터페이스 포트들에 연결될 수 있다.
도 3은 저널링 및 데이터 쓰기들을 모두 수행하기 위해 도 1의 스토리지 장치(130)와 통신하는 도 1의 어플리케이션(125)을 보여주는 그림이다. 도 3을 참조하면, 도 1의 데이터 스토리지 시스템(120)의 이득이 없는 스토리지 장치(130)와 통신하는 어플리케이션(125)이 도시되었다. 오직 하나의 소프트웨어 요소(어플리케이션(125), 도 3 참조)가 스토리지 장치(130)와 통신하는 본 발명의 실시 예들에서, 소프트웨어 요소는 저널링을 수행하는 어떠한 소프트웨어 요소도 될 수 있다. 따라서, 도 3에서, 어플리케이션(125)은 적용성(applicability)의 손실 없이 도 1의 데이터 스토리지 시스템(120)과 교체될 수 있다. 이하의 도 6a 및 도 6b에서, 도 1의 데이터 스토리지 시스템(120) 및 어플리케이션(125) 모두가 스토리지 장치(130)와 저널링을 수행하는 본 발명의 실시 예가 설명될 것이다.
도 3을 참조하면, 어플리케이션(125)은 저널 쓰기 요청(310)을 스토리지 장치(130)에 전송할 수 있다. 저널 쓰기 요청(310)은 저널 정보(305) 및 제 1 스트림 식별자(315)를 포함할 수 있다. 제 1 스트림 식별자(315)는 저널 정보(305)가 할당되는 특정 스트림을 지정할 수 있다. 이하에서 도 4를 참조하여 설명되는 것처럼, 다른 스트림들은 스토리지 장치(130) 상의 다른 블록들 또는 수퍼 블록들과 연관될 수 있다. 스토리지 장치(130)는 하나 또는 하나 이상의 특성(예를 들어, 기대 수명 또는 다른 어떠한 분할 기준 등)에 기초하여 데이터를 분할(partition)한다. 저널 정보(305)가 즉시 스토리지 장치(130)에 쓰여지는 것을 보장하기 위하여, 저널 쓰기 요청(310)은 직접 I/O 커맨드를 사용하여 전송될 수 있다. 또는, 저널 정보(305)가 즉시 스토리지 장치(130)에 쓰여지는 것을 보장하기 위하여, 저널 쓰기 요청(310)은 즉시(심지어 가득 차지 않는 경우에도) 플러시(flush)되는 버퍼에 전송될 수 있다.
또한, 어플리케이션(125)은 데이터 쓰기 요청(320)을 스토리지 장치(130)에 전송할 수 있다. 데이터 쓰기 요청(320)은 데이터(325) 및 제 2 스트림 식별자(330)를 포함할 수 있다. 데이터(325)가 저널 정보(305)와는 다른 스트림에 쓰이게 (결과적으로 다른 블록 또는 수퍼 블록에 쓰이는) 하기 위해, 제 2 스트림 식별자(330)는 제 1 스트림 식별자(315)와 다른 스트림을 식별할 수 있다. 저널 쓰기 요청(310)이 즉시 스토리지 장치(130)에 쓰였기 때문에, 반드시 즉시는 아니지만 데이터(325)가 종국적으로 스토리지 장치(130)에 쓰일 수 있는 상황에서, 데이터 쓰기 요청(320)은 버퍼링된(buffered) 쓰기 요청으로서 전송될 수 있다.
종국적으로, 스토리지 장치(130)는 신호(335)를 어플리케이션(125)에 전송할 수 있다. 신호(335)는 데이터 쓰기 요청(320)이 완료되었고 데이터(325)가 스토리지 장치(130)에 쓰여졌다는 것을 나타낼 수 있다. 이러한 관점에서, 저널 정보(305)는 데이터가 스토리지 장치(130) 상의 어딘가에 쓰이는(written) 것을 더 이상 보장할 필요가 없어진다. 가비지 콜렉션을 수행하는 스토리지 장치들 상에서, 데이터는 일반적으로 데이터가 가비지 콜렉션을 통해 삭제될 수 있기 전에 무효화(invalidated) 된다. 이에 따라, 저널 정보(305)가 스토리지 장치(130)로부터 삭제되도록 요청하면서, 어플리케이션(125)은 무효화 요청(340)을 스토리지 장치(130)에 전송할 수 있다. 저널 정보(305)가 데이터(325)와는 다른 블록 또는 수퍼 블록에 쓰였기 때문에, 무효화 요청(340)은 스토리지 장치(130) 내의 유효성-단편화된(validity-fragmented) 블록들 또는 수퍼 블록들을 유발하지 않을 것이다.
도 4는 저널 및 데이터를 저장하기 위해 멀티 스트리밍을 사용하는 도 1의 스토리지 장치(130)를 보여주는 그림이다. 도 4를 참조하면, 복수의 블록(405, 410, 415, 420)으로 구분된 스토리지 장치(130)가 도시되었다. 복수의 블록(405, 410, 415, 420) 각각은 차례로 페이지들로 분할될 수 있다. 예를 들어, 블록(405)은 복수의 페이지(425, 430, 435, 440)를 포함하고, 블록(410)은 복수의 페이지(445, 450, 455, 460)를 포함할 수 있다. 도 4에서, 복수의 블록(405, 410, 415, 420) 각각이 네 개의 페이지들을 포함하는 것으로 도시되었지만, 이는 단지 예시적일 뿐이며, 복수의 블록(405, 410, 415, 420) 각각은 어떠한 원하는 수의 페이지들도 포함할 수 있다.
SSD들에서 발생할 수 있듯이, 페이지는 스토리지 장치(130)에 쓰이거나 읽어올 수 있는 최소 단위의 데이터를 나타낼 수 있다. 반면에, 일부 실시 예들에서, 블록은 가비지 콜렉션이 수행되는 최소 단위의 데이터를 나타낼 수 있다. 도 4에서 도시되지 않았지만, 일부 실시 예들에서, 스토리지 장치(130)의 복수의 블록은 수퍼 블록들이라고 불리는 좀 더 큰 블록들로 조직화될 수 있다. 수퍼 블록들은 가비지 콜렉션이 수행될 수 있는 최소 단위의 데이터일 수 있다. 가비지 콜렉션이 블록들 또는 수퍼 블록들 상에서 수행되는 것과 관계 없이, 가비지 콜렉션의 최소 단위는 페이지보다 클 수 있다. 이러한 불일치는 가비지 콜렉션이 스토리지 장치(130)의 동작에 부정적인 영향을 미칠 수 있는 이유를 설명할 수 있다. 만약 가비지 콜렉션의 대상인 블록의 하나 또는 하나 이상의 페이지들 내에 유효한 데이터가 있는 경우, 해당 블록이 가비지 콜렉션의 대상이 되기 전에 이러한 데이터는 다른 블록에 복사되어야 한다. 예를 들어, 페이지(445)가 프리(free)인 경우, 만약 페이지(425)가 유효 데이터를 포함하는 경우, 블록(405)이 가비지 콜렉션의 대상이 되기 전에 해당 데이터는 가령, 블록(410) 내의 페이지(445)에 복사되어야 한다.
일부 실시 예들에서, 페이지들은 복수의 블록들로 조직화될 수 있다. 다만, 가비지 콜렉션이 복수의 블록들에서 수행되기 보다는, 복수의 블록들이 수퍼 블록들로 조직화되어 가비지 콜렉션이 수퍼 블록 상에서 수행될 수 있다. 다만, 수퍼 블록의 개념이 스토리지 장치(130) 내의 가비지 콜렉션의 구현 상에 영향을 미칠 수 있지만, 이론적인 관점에서 수퍼 블록은 가비지 콜렉션 목적을 위한 블록 사이즈의 재조정에 지나지 않는다. 복수의 블록에 관한 모든 논의는 수퍼 블록들에도 마찬가지로 적용될 수 있음은 쉽게 이해될 수 있을 것이다.
도 3에서 상술한 바와 같이, 개별 블록들은 스트림들에 할당될 수 있다. 예를 들어, 복수의 블록(405, 410)은 스트림(315)에 할당될 수 있다. 또한, 복수의 블록(415, 420)은 스트림(330)에 할당될 수 있다. 실시 예로서, 핫(hot) 데이터 및 콜드(cold) 데이터가 다른 스트림들로 구분될 수 있는 상황에서, 스트림 할당은 가비지 콜렉션 동작들에 문제를 발생시키는 저널 쓰기들 및 데이터 쓰기들의 혼재를 방지할 수 있다.
도 5a 및 도 5b는 종래의 접근 방법과 본 발명의 실시 예에 따른 접근 방법을 사용하는 도 1의 스토리지 장치(130)의 사용 방법을 비교하여 보여주는 그림이다. 상술한 바와 같이, 종래의 시스템들에서, 저널 쓰기들 및 데이터 쓰기들은 도 1의 스토리지 장치(130) 내의 동일한 블록에 쓰여진다. 도 5a를 참조하면, 블록(505)은 저널 쓰기들을 포함하는 복수의 페이지(510, 515, 520)와 데이터 쓰기들을 포함하는 복수의 페이지(525, 530, 540)를 포함하는 것으로 도시되었다.
저널 쓰기들은 대응되는 데이터 쓰기 동작들이 완료되면 지워질 수 있는 것처럼, 저널 쓰기들은 짧은 수명을 갖는 경향이 있기 때문에, 저널 쓰기들 및 데이터 쓰기들의 혼재는 블록(535)으로 도시된 조각난 블록을 남긴다. 블록(535)은 저널 쓰기들이 무효화된 이후의 블록이며, 블록(505)과 같은 동일한 블록이다. 만약 이후에 블록(535)이 가비지 콜렉션의 대상이 된다면, 복수의 페이지(525, 530, 540)는 먼저 다른 블록에 복사되어야 한다. 이러한 카피 동작은 시간이 소모되고, 스토리지 장치(130) 상의 다른 읽기 및 쓰기 동작들을 지연시킨다.
하지만 본 발명의 실시 예와 같이, 만약 저널 쓰기들 및 데이터 쓰기들이 다른 스트림들에 전송된다면, 저널 쓰기들을 소거하는 것은 조각난 블록을 남기지 않는다. 도 5b는 이러한 상황을 보여준다. 도 5b를 참조하면, 저널 쓰기들은 블록(545)에 전송된다. 데이터 쓰기들은 블록(550)에 전송된다. 복수의 저널 쓰기(510, 515, 520)가 무효화된 경우, 블록(545)은 다른 블록에 복사되어야 하는 어떠한 데이터도 저장하지 않는다. 복수의 데이터 쓰기(525, 530, 540)는 블록(550)에 저장된다. 상술한 기술들은 이러한 상황들을 단순화하여 기술한 것이다. 다만, 저널 쓰기들은 동일한 시간에 모두 소거될 필요가 없기 때문에, 일반적으로 저널 쓰기들은 그들이 쓰인 이후에 특히 데이터 쓰기들의 수명과 비교하여 상대적으로 짧은 시간 내에 삭제된다. 따라서, 블록(545) 내의 모든 데이터는 마지막 저널 쓰기가 블록(545)에 쓰인 직후에 무효화될 것이다. 또한, 어떠한 데이터도 다른 블록에 복사될 필요 없이, 전체 블록은 가비지 콜렉션의 대상이 될 수 있다.
도 6a 및 도 6b는 저널링 및 데이터 쓰기들을 모두 수행하기 위해 도 1의 스토리지 장치(130)와 통신하는 도 1의 어플리케이션(125) 및 도 1의 데이터 스토리지 시스템(120)을 보여주는 그림이다. 어플리케이션(125)이 데이터 스토리지 시스템(120)의 이득 없이 스토리지 장치(130)와 통신하는 도 3과 대조적으로, 도 6a 및 도 6b는 일련의 이벤트 진행 순서에서 데이터 스토리지 시스템(120)을 포함할 수 있다.
도 6a를 참조하면, 어플리케이션(125)은 저널 쓰기 요청(310)을 이전과 같이 저널 정보(305) 및 스트림 식별자(315)와 함께 전송한다. 저널 쓰기 요청(310)이 직접 I/O 커맨드일 수 있기 때문에, 도 6a에서, 어플리케이션(125)이 저널 쓰기 요청(310)을 스토리지 장치(130)에 전송하고, 데이터 스토리지 시스템(120)을 바이패스(bypass)하는 것으로 도시하였다. 하지만, 다른 실시 예들에서, 어플리케이션(125)은 저널 쓰기 요청(310)을 데이터 스토리지 시스템(120)에 명령들과 함께 전송할 수 있다. 명령들은 데이터 스토리지 시스템(120)이 저널 쓰기 요청(310)을 완료하기 위해 직접 I/O 커맨드를 수행하도록 한다. 하지만, 도 3과 대조적으로, 어플리케이션(125)은 데이터(325) 및 스트림 식별자(330)와 함께 데이터 쓰기 요청(320)을 스토리지 장치(130)가 아닌 데이터 스토리지 시스템(120)에 전송한다. 그러면, 데이터 스토리지 시스템(120)은 스토리지 장치(130)에 대한 데이터(325)의 쓰기 동작의 감독을 담당할 수 있다.
데이터 스토리지 시스템(120)이 자체의 데이터 및/또는 메타 데이터에 대한 저널링을 자체적으로 수행할 수 있기 때문에, 데이터 스토리지 시스템(120)은 저널 쓰기 요청(605)을 스토리지 장치(130)에 전송할 수 있다. 저널 쓰기 요청(605)은 저널 정보(610) 및 스트림 식별자(615)를 포함할 수 있다. 이는 단일 데이터 유닛의 쓰기가 복수의 저널을 포함하고 따라서 복수의 스트림을 포함할 수 있다는 것을 보여준다.
도 6b를 참조하면, 데이터 스토리지 시스템(120)은 자체적인 데이터 쓰기 요청(620)을 스토리지 장치(130)에 전송할 수 있다. 데이터 쓰기 요청(620)은 데이터(325) 및 스트림 식별자(330)를 포함할 수 있다. 여기서, 데이터 쓰기 요청(620) 내의 데이터(325) 및 스트림 식별자(330)가 데이터 쓰기 요청(320) 에서와 동일할 수 있다는 것을 알 수 있다. 이는 단지 데이터 스토리지 시스템(120)을 통해 우회하여 쓰여지는 동일한 데이터라는 점에서 이해될 수 있다. 종국적으로, 데이터 스토리지 시스템(120)은 데이터 쓰기 요청(620)이 완료되었다는 것을 데이터 스토리지 시스템(120)에 통보하는 신호(625)를 전송할 수 있으며, 이후 데이터 스토리지 시스템(120)은 저널 정보(610)를 삭제하기 위해 무효화 요청(630)을 전송할 수 있다.
또한, 만약 스토리지 장치(130)가 어플리케이션(125)의 존재를 아는 경우, 스토리지 장치(130)는 신호(335)를 다시 어플리케이션(125)에 전송할 수 있고, 이에 어플리케이션(125)은 자체의 무효화 요청(340)을 전송할 수 있다. 하지만, 다른 실시 예들에서, 데이터 스토리지 시스템(120)은 저널 정보들(610, 305) 모두를 삭제하기 위해 무효화 요청(630)을 사용할 수 있다. 또한, 다른 실시 예들에서, 어플리케이션(125)에 어플리케이션(125)이 무효화 요청(340)을 전송할 수 있다는 것을 알리기 위해, 데이터 스토리지 시스템(120)은 신호(335)를 어플리케이션(125)에 전송할 수 있다.
상술한 실시 예들에서, 어플리케이션(125) 및/또는 데이터 스토리지 시스템(120)은 저널 정보(305, 610) 모두 또는 일부의 소거를 담당할 수 있다. 따라서, 저널 정보(305, 610) 모두 또는 일부의 소거가 언제 가능한지를 알기 위해, 어플리케이션(125) 및/또는 데이터 스토리지 시스템(120)은 신호(335, 625)를 모두 또는 일부를 수신할 필요가 있다. 하지만, 다른 실시 예들에서, 스토리지 장치(130)는 데이터(315)의 소스를 알 수 있고, 어플리케이션(125) 및/또는 데이터 스토리지 시스템(120)에 대한 무효화 요청(340, 630) 모두 또는 일부를 전송할 필요를 사전에 방지하여, 데이터 쓰기 요청(320, 620) 모두 또는 일부가 완료되기만 하면 자동적으로 저널 정보(305, 610) 모두 또는 일부를 삭제할 수 있다.
일부 실시 예들에서, 복수의 데이터 스토리지 시스템(120)의 예들이 단일 스토리지 장치(130) 상에 공존할 수 있다. 예를 들어, 스토리지 장치(130)는 복수의 저널링 파일 시스템 파티션들(partitions)을 포함할 수 있다. 또는 스토리지 장치(130)는 복수의 오브젝트(object) 스토리지 유형(instance)들을 유지할 수 있다. 이러한 실시 예들에서, 데이터 스토리지 시스템(120)의 유형들 각각은 자체적인 저널 쓰기 요청들(605)을 동일한 스토리지 장치(130)에 전송할 수 있다. 각각의 개별 저널 쓰기 요청(605)은 자체적인 저널 정보(610) 및 스트림 식별자(615)를 포함할 수 있다. 데이터 스토리지 시스템(120)의 유형들 각각은 자체적인 데이터 쓰기 요청들(620)을 동일한 스토리지 장치(130)에 전송할 수 있다. 각각의 개별 데이터 쓰기 요청(620)은 자체 데이터(325) 및 스트림 식별자(330)를 포함할 수 있다.
데이터 스토리지 시스템(120)의 유형들 각각은 자체 저널 정보(610) 및 데이터(325)를 다른 스트림들에 저장할 수 있고, 이에 스토리지 장치(130)는 다양한 저널 정보(610) 및 데이터(325)를 다른 블록들 또는 수퍼 블록들에 저장할 수 있다. 따라서, 데이터 스토리지 시스템(120)의 개별적인 유형에 대한 저널 정보(610) 및 데이터(325)가 다른 블록들 또는 수퍼 블록들을 존재하는 것뿐 아니라, 다른 유형의 데이터 스토리지 시스템(120)으로부터의 다른 저널 정보(610)는 다른 블록들 또는 수퍼 블록들 내에 저장될 수 있다. 또한, 다른 유형의 데이터 스토리지 시스템(120)으로부터의 다른 데이터(325)는 다른 블록들 또는 수퍼 블록들 내에 저장될 수 있다.
도 7a 및 도 7b는 본 발명의 실시 예에 따라 저널링 및 데이터 쓰기들을 모두 수행하고 도 1의 스토리지 장치(130)와 통신하기 위한 도 1의 어플리케이션(125) 및 도 1의 데이터 스토리지 시스템(120)에 대한 절차를 예시적으로 보여주는 순서도이다.
도 7a를 참조하면, S705 단계에서, 도 1의 어플리케이션(125)은 도 1의 스토리지 장치(130)에 쓰이는 도 3의 데이터(325)를 식별할 수 있다. S710 단계에서, 도 3의 스트림 식별자(315)를 도 3의 저널 정보(305)에 대해 사용하기 위한 스트림으로서 지정하기 위하여, 도 1의 어플리케이션(125)은 도 3의 저널 쓰기 요청(310)을 직접 I/O 커맨드로서 도 1의 스토리지 장치(130)에 전송할 수 있다.
이 지점에서, 절차들은 다른 경로를 따라 진행될 수 있다. 일부 실시 예들에서, S715 단계에서, 도 1의 어플리케이션(125)은 도 3의 데이터 쓰기 요청(320)을 버퍼링된 I/O 커맨드로서 도 3의 스토리지 장치(130)에 전송할 수 있다. 이어, S720 단계에서, 도 1의 어플리케이션(125)은 도 1의 스토리지 장치(130)로부터 신호(335)를 수신할 수 있다. 신호(335)는 도 3의 데이터 쓰기 요청(320)이 완료되었다는 것을 나타낸다. 마지막으로, S725 단계에서, 도 3의 저널 정보(305)를 삭제하기 위해, 도 1의 어플리케이션(125)은 도 3의 무효화 요청(340)을 도 1의 스토리지 장치(130)로 전송할 수 있다.
또는, 다른 실시 예들로서, 도 1의 어플리케이션(125)은 도 3의 데이터 쓰기 요청(320)을 도 1의 스토리지 장치(130)에 전송하지 않을 수 있다. 대신에, S730 단계에서, 도 1의 어플리케이션(125)은 도 3의 데이터 쓰기 요청(320)을 도 1의 데이터 스토리지 시스템(120)에 전송할 수 있다. S735 단계에서, 도 1의 데이터 스토리지 시스템(120)은 도 6a의 두 번째 저널 쓰기 요청(605)을 도 1의 스토리지 장치(130)로 전송할 수 있다. S740 단계에서, 도 1의 데이터 스토리지 시스템(120)은 도 6b의 두 번째 데이터 쓰기 요청(620)을 도 1의 스토리지 장치(130)로 전송할 수 있다.
S745 단계에서, 도 1의 데이터 스토리지 시스템(120)은 도 1의 스토리지 장치(130)로부터 도 6b의 신호(625)를 수신할 수 있다. 신호(625)는 도 6b의 데이터 쓰기 요청(620)이 완료되었다는 것을 나타낸다. 또한, S750 단계에서, 도 6a의 저널 정보(610)를 삭제하기 위해, 도 1의 데이터 스토리지 시스템(120)은 도 6b의 무효화 요청(630)을 도 1의 스토리지 장치(130)로 전송할 수 있다. 이어, 절차는 도 7a의 S720 단계로 진행될 수 있다.
도 7a 및 도 7b에서, 본 발명의 일부 실시 예들이 도시되었다. 하지만, 당업자는 상술한 단계의 순서를 변경하거나, 일부 단계를 생략하거나, 도면에서 도시되지 않은 연결을 포함하여 다른 실시 예들이 구현될 수 있음은 쉽게 이해할 수 있을 것이다. 명시적으로 설명되었는지 여부와 관계 없이, 이러한 순서도의 변형들은 본 발명의 실시 예로서 간주될 수 있다.
이하에서, 본 발명의 개념들의 특정 형태들이 구현될 수 있는 적합한 머신 또는 머신들에 대한 간략하고 일반적인 설명들이 제공될 것이다. 머신 또는 머신들은 키보드, 마우스 등과 같은 종래의 입력 장치들로부터의 입력에 의해 적어도 일부가 제어될 수 있고, 마찬가지로 다른 머신, VR(Virtual Reality) 환경과의 상호 작용, 바이오메트릭(biometric) 피드백(feedback), 또는 다른 입력 신호로부터 수신된 지시에 의해서도 제어될 수 있다. 여기서 사용된 ‘시스템’ 이라는 용어는 광범위하게 단일 머신 혹은 시스템, 가상 머신, 또는 통신 결합 머신들의 시스템, 가상 머신들, 또는 함께 동작하는 장치들을 포함할 수 있다. 예시적인 머신들은 퍼스널(Personal) 컴퓨터들, 워크스테이션들, 서버들, 포터블(Portable) 컴퓨터들, 포켓용(Handheld) 장치들, 휴대전화들, 태블릿들 등을 포함할 수 있다. 혹은 예시적인 머신들은 자동차들, 기차들, 택시들과 같은 개인용 또는 대중 교통 등과 같은 교통 장치들을 포함할 수 있다.
머신은 내장 컨트롤러들 등을 포함할 수 있다. 예를 들어, 내장 컨트롤러들은 프로그램이 가능하거나 혹은 불가능한 로직 장치들 또는 어레이(Array), ASIC(Application Specific Integrated Circuits), 내장 컴퓨터들, 스마트 카드들 등을 포함할 수 있다. 머신은 하나 또는 하나 이상의 원격 머신과의 하나 또는 하나 이상의 연결을 사용할 수 있다. 예를 들어, 이러한 연결은 네트워크 인터페이스, 모뎀, 또는 다른 의사 전달 연결을 통해 이루어질 수 있다.
머신은 인트라넷, 인터넷, LAN(Local Area Network), WAN(Wide Area Network) 등과 같은 물리적 및/또는 논리적 네트워크 방법에 의해 상호 연결될 수 있다. 당업자는 네트워크 통신이 다양한 유선 및/또는 무선 근거리 또는 장거리 캐리어 및 프로토콜을 이용할 수 있다는 것을 쉽게 이해할 수 있을 것이다. 예를 들어, 캐리어 및 프로토콜은 RF(Radio Frequency), 위성(Satellite), 마이크로 웨이브(Microwave), IEEE(Institute of Electrical and Electronics Engineers) 802.11, Bluetooth®, 광학, 적외선, 케이블, 레이저 등을 포함할 수 있다.
본 발명의 실시 예들은 기능들, 단계들, 데이터 구조들, 어플리케이션 프로그램들을 포함하는 관련 데이터를 참조하여 설명될 수 있다. 기능들, 단계들, 데이터 구조들, 어플리케이션 프로그램들은 머신에 의해 엑세스되는 경우에 머신이 테스크를 수행하거나 추상적인 데이터 타입들 또는 로우 레벨(Low-Level)의 하드웨어 컨텍스트(Context)들을 정의하도록 한다. 예를 들어, 상술한 관련 데이터는 RAM, ROM과 같은 휘발성 및/또는 불휘발성 메모리에 저장될 수 있다. 또는, 관련 데이터는 다른 스토리지 장치들 및 그들의 관련 스토리지 매체에 저장될 수 있다. 예를 들어, 관련 스토리지 매체는 하드 드라이브들, 플로피 디스크(Floppy-Disks), 광학 스토리지(Optical Storage), 테이프(Tapes), 플래시 메모리(Flash Memory), 메모리 스틱(Memory Sticks), 디지털 비디오 디스크(Digital Video Disks), 생체 스토리지(Biological Storage) 등을 포함할 수 있다.
관련 데이터는 패킷, 시리얼(Serial) 데이터, 패러렐(Parallel) 데이터, 전파 신호 등의 형태로 물리적 및/또는 논리적 네트워크를 포함하는 통신 환경을 통해 전송될 수 있다. 또한, 관련 데이터는 압축되거나 암호화된 형태로 이용될 수 있다. 관련 데이터는 분산 환경에서 이용될 수 있고, 머신 엑세스에 대해 가까이 및/또는 멀리 저장될 수 있다.
본 발명의 실시 예들은 유형의 논 트랜지토리(Non-transitory)의 머신 리더블(Readable) 매체를 포함할 수 있다. 머신 리더블 매체는 하나 또는 하나 이상의 프로세서에 의해 수행되는 명령, 여기서 기술된 본 발명의 요소들을 수행하는 명령들로 구성된 명령들을 포함할 수 있다.
본 발명의 실시 예들은 제한 없이 다음의 예시들에 확장될 수 있다.
제 1 예에서, 본 발명의 실시 예에 따른 시스템은,
프로세서 및 메모리를 포함하는 컴퓨터;
스토리지 장치;
프로세서 상에서 실행되고, 저널 쓰기 요청 및 데이터 쓰기 요청 모두를 상기 스토리지 장치에 전송하도록 동작하는 어플리케이션; 그리고
상기 스토리지 장치 상에 위치하고, 상기 스토리지 장치가 제 1 스트림과 관련된 제 1 블록에 저널 정보를 쓰고 제 2 스트림과 관련된 제 2 블록에 데이터를 쓰도록 지시하는 컨트롤러를 포함하되,
상기 저널 쓰기 요청은 상기 저널 정보를 포함하고, 상기 제 1 스트림과 관련되고,
상기 데이터 쓰기 요청은 상기 데이터를 포함하고, 상기 제 2 스트림과 관련된다.
제 2 예에서, 본 발명의 실시 예에 따른 제 1 예의 시스템에 있어, 상기 스토리지 장치가 SSD(Solid State Drive)를 포함한다.
제 3 예에서, 본 발명의 실시 예에 따른 제 1 예의 시스템에 있어, 상기 어플리케이션은 직접(direct) 입출력 커맨드를 이용하여 상기 스토리지 장치에 상기 저널 쓰기 요청을 전송하도록 동작한다.
제 4 예에서, 본 발명의 실시 예에 따른 제 1 예의 시스템에 있어, 상기 어플리케이션은 버퍼링된(buffered) 쓰기 커맨드를 이용하여 상기 스토리지 장치에 상기 데이터 쓰기 요청을 전송하도록 동작한다.
제 5 예에서, 본 발명의 실시 예에 따른 제 1 예의 시스템에 있어, 상기 컨트롤러는 데이터 쓰기 요청이 완료된 이후에 상기 저널 정보를 삭제하기 위한 무효화 요청을 수신하도록 동작한다.
제 6 예에서, 본 발명의 실시 예에 따른 제 5 예의 시스템에 있어, 상기 어플리케이션은 상기 무효화 요청을 전송하도록 동작한다.
제 7 예에서, 본 발명의 실시 예에 따른 제 6 예의 시스템에 있어, 상기 데이터 쓰기 요청이 완료되었다는 신호를 상기 어플리케이션이 수신한 것에 반응하여, 상기 어플리케이션이 상기 무효화 요청을 전송하도록 동작한다.
제 8 예에서, 본 발명의 실시 예에 따른 제 7 예의 시스템에 있어, 상기 데이터 쓰기 요청이 완료되었다는 신호를 상기 컨트롤러로부터 상기 어플리케이션이 수신한 것에 반응하여, 상기 어플리케이션이 상기 무효화 요청을 전송하도록 동작한다.
제 9 예에서, 본 발명의 실시 예에 따른 제 1 예의 시스템에 있어, 상기 어플리케이션은 상기 프로세서 상에서 실행되는 데이터 스토리지 시스템에 상기 데이터 쓰기 요청을 전송하도록 동작하고,
상기 데이터 스토리지 시스템은 제 2 데이터 쓰기 요청을 상기 스토리지 장치에 전송하도록 동작하고,
상기 제 2 데이터 쓰기 요청은 상기 데이터를 포함하고, 상기 제 2 스트림과 관련된다.
제 10 예에서, 본 발명의 실시 예에 따른 제 9 예의 시스템에 있어, 상기 데이터 스토리지 시스템은 제 2 저널 쓰기 요청을 상기 스토리지 장치에 전송하도록 동작하고,
상기 제 2 저널 쓰기 요청은 제 2 저널 정보를 포함하고, 제 3 스트림과 연관된다.
제 11 예에서, 본 발명의 실시 예에 따른 제 10 예의 시스템에 있어, 상기 데이터 스토리지 시스템은 제 2 무효화 요청을 전송하도록 동작한다.
제 12 예에서, 본 발명의 실시 예에 따른 제 10 예의 시스템에 있어, 상기 제 2 데이터 쓰기 요청이 완료되었다는 제 2 신호를 상기 데이터 스토리지 시스템이 수신한 것에 반응하여, 상기 데이터 스토리지 시스템이 상기 제 2 무효화 요청을 전송하도록 동작한다.
제 13 예에서, 본 발명의 실시 예에 따른 제 12 예의 시스템에 있어, 상기 제 2 데이터 쓰기 요청이 완료되었다는 제 2 신호를 상기 컨트롤러로부터 상기 데이터 스토리지 시스템이 수신한 것에 반응하여, 상기 데이터 스토리지 시스템이 상기 제 2 무효화 요청을 전송하도록 동작한다.
제 14 예에서, 본 발명의 다른 실시 예에 따른 방법은:
저널 쓰기 및 데이터 쓰기 모두를 실행하는 어플리케이션으로부터 쓰여질 데이터를 식별하는 단계;
상기 어플리케이션으로부터 무효 데이터에 가비지 콜렉션을 수행하는 스토리지 장치로 저널 쓰기 요청을 전송하는 단계; 그리고
상기 어플리케이션으로부터 상기 스토리지 장치로 데이터 쓰기 요청을 전송하는 단계를 포함하되,
상기 저널 쓰기 요청은 제 1 스트림에 할당되고, 상기 데이터 쓰기 요청은 제 2 스트림에 할당된다.
제 15 예에서, 본 발명의 실시 예에 따른 제 14 예의 방법에 있어,
상기 어플리케이션으로부터 상기 스토리지 장치로 상기 저널 쓰기 요청을 전송하는 단계는 상기 어플리케이션으로부터 SSD(Solid State Drive)로 상기 저널 쓰기 요청을 전송하는 단계를 포함하고,
상기 어플리케이션으로부터 상기 스토리지 장치로 상기 데이터 쓰기 요청을 전송하는 단계는 상기 어플리케이션으로부터 상기 SSD로 상기 데이터 쓰기 요청을 전송하는 단계를 포함한다.
제 16 예에서, 본 발명의 실시 예에 따른 제 14 예의 방법에 있어,
상기 어플리케이션으로부터 상기 스토리지 장치로 상기 저널 쓰기 요청을 전송하는 단계는 직접(direct) 입출력 커맨드를 이용하여 상기 어플리케이션으로부터 상기 스토리지 장치로 상기 저널 쓰기 요청을 전송하는 단계를 포함하고,
상기 어플리케이션으로부터 상기 스토리지 장치로 상기 데이터 쓰기 요청을 전송하는 단계는 버퍼링된(buffered) 쓰기 커맨드를 이용하여 상기 어플리케이션으로부터 상기 스토리지 장치로 상기 데이터 쓰기 요청을 전송하는 단계를 포함한다.
제 17 예에서, 본 발명의 실시 예에 따른 제 14 예의 방법에 있어, 상기 데이터 쓰기 요청이 상기 스토리지 장치에 쓰여진 이후에 상기 저널 정보를 삭제하기 위해 무효화 요청을 상기 스토리지 장치로 전송하는 단계를 더 포함한다.
제 18 예에서, 본 발명의 실시 예에 따른 제 17 예의 방법에 있어, 상기 무효화 요청을 상기 스토리지 장치로 전송하는 단계는 상기 무효화 요청을 상기 어플리케이션으로부터 상기 스토리지 장치에 전송하는 단계를 포함한다.
제 19 예에서, 본 발명의 실시 예에 따른 제 18 예의 방법에 있어, 상기 무효화 요청을 상기 어플리케이션으로부터 상기 스토리지 장치에 전송하는 단계는 상기 스토리지 장치 상의 상기 데이터 쓰기 요청이 완료되었다는 신호를 상기 어플리케이션에서 수신하는 단계를 포함한다.
제 20 예에서, 본 발명의 실시 예에 따른 제 19 예의 방법에 있어, 상기 스토리지 장치 상의 상기 데이터 쓰기 요청이 완료되었다는 신호를 상기 어플리케이션에서 수신하는 단계는 상기 스토리지 장치 상의 상기 데이터 쓰기 요청이 완료되었다는 신호를 상기 어플리케이션에서 상기 스토리지 장치로부터 수신하는 단계를 포함한다.
제 21 예에서, 본 발명의 실시 예에 따른 제 14 예의 방법에 있어, 상기 어플리케이션으로부터 상기 스토리지 장치로 데이터 쓰기 요청을 전송하는 단계는,
상기 어플리케이션으로부터 데이터 스토리지 시스템으로 상기 데이터 쓰기 요청을 전송하는 단계; 그리고
상기 데이터 스토리지 시스템으로부터 상기 스토리지 장치로 제 2 데이터 쓰기 요청을 전송하는 단계를 포함한다.
제 22 예에서, 본 발명의 실시 예에 따른 제 21 예의 방법에 있어, 상기 데이터 스토리지 시스템으로부터 상기 스토리지 장치로 상기 제 2 데이터 쓰기 요청을 전송하는 단계는 상기 데이터 스토리지 시스템으로부터 상기 스토리지 장치로 제 2 저널 쓰기 요청을 전송하는 단계를 포함한다.
제 23 예에서, 본 발명의 실시 예에 따른 제 22 예의 방법에 있어, 상기 제 2 데이터 쓰기 요청이 상기 스토리지 장치에 쓰여진 이후에 상기 제 2 저널 쓰기 요청에 의해 쓰여진 상기 데이터를 삭제하기 위해 무효화 요청을 상기 스토리지 장치로 전송하는 단계를 더 포함한다.
제 24 예에서, 본 발명의 실시 예에 따른 제 23 예의 방법에 있어, 상기 무효화 요청을 상기 스토리지 장치에 전송하는 단계는 상기 무효화 요청을 상기 데이터 스토리지 시스템으로부터 상기 스토리지 장치에 전송하는 단계를 포함한다.
제 25 예에서, 본 발명의 실시 예에 따른 제 24 예의 방법에 있어, 상기 무효화 요청을 상기 데이터 스토리지 시스템으로부터 상기 스토리지 장치에 전송하는 단계는 상기 스토리지 장치 상의 상기 데이터 쓰기 요청이 완료되었다는 신호를 상기 데이터 스토리지 시스템에서 수신하는 단계를 포함한다.
제 26 예에서, 본 발명의 실시 예에 따른 제 25 예의 방법에 있어, 상기 스토리지 장치 상의 상기 데이터 쓰기 요청이 완료되었다는 신호를 상기 데이터 스토리지 시스템에서 수신하는 단계는 상기 스토리지 장치 상의 상기 데이터 쓰기 요청이 완료되었다는 신호를 상기 데이터 스토리지 시스템에서 상기 스토리지 장치로부터 수신하는 단계를 포함한다.
제 27 예에서, 본 발명의 실시 예에 따른 논 트랜지토리(Non-Transitory) 명령을 저장하는 유형의 스토리지 매체를 포함하는 장치에 있어,
상기 논 트랜지토리 명령은 머신에 의해 실행될 때:
저널 쓰기 및 데이터 쓰기 모두를 실행하는 어플리케이션으로부터 쓰여질 데이터를 식별하는 단계;
상기 어플리케이션으로부터 무효 데이터에 가비지 콜렉션을 수행하는 스토리지 장치로 저널 쓰기 요청을 전송하는 단계; 그리고
상기 어플리케이션으로부터 상기 스토리지 장치로 데이터 쓰기 요청을 전송하는 단계를 수행하되,
상기 저널 쓰기 요청은 제 1 스트림에 할당되고, 상기 데이터 쓰기 요청은 제 2 스트림에 할당된다.
제 28 예에서, 본 발명의 실시 예에 따른 제 27 예의 장치에 있어,
상기 어플리케이션으로부터 상기 스토리지 장치로 상기 저널 쓰기 요청을 전송하는 단계는 상기 어플리케이션으로부터 SSD(Solid State Drive)로 상기 저널 쓰기 요청을 전송하는 단계를 포함하고,
상기 어플리케이션으로부터 상기 스토리지 장치로 상기 데이터 쓰기 요청을 전송하는 단계는 상기 어플리케이션으로부터 상기 SSD로 상기 데이터 쓰기 요청을 전송하는 단계를 포함한다.
제 29 예에서, 본 발명의 실시 예에 따른 제 27 예의 장치에 있어,
상기 어플리케이션으로부터 상기 스토리지 장치로 상기 저널 쓰기 요청을 전송하는 단계는 직접(direct) 입출력 커맨드를 이용하여 상기 어플리케이션으로부터 상기 스토리지 장치로 상기 저널 쓰기 요청을 전송하는 단계를 포함하고,
상기 어플리케이션으로부터 상기 스토리지 장치로 상기 데이터 쓰기 요청을 전송하는 단계는 버퍼링된(buffered) 쓰기 커맨드를 이용하여 상기 어플리케이션으로부터 상기 스토리지 장치로 상기 데이터 쓰기 요청을 전송하는 단계를 포함한다.
제 30 예에서, 본 발명의 실시 예에 따른 제 27 예의 장치에 있어,
상기 논 트랜지토리 명령은 머신에 의해 실행될 때:
상기 데이터 쓰기 요청이 상기 스토리지 장치에 쓰여진 이후에 상기 저널 정보를 삭제하기 위해 무효화 요청을 상기 스토리지 장치로 전송하는 단계를 더 수행한다.
제 31 예에서, 본 발명의 실시 예에 따른 제 30 예의 장치에 있어, 상기 무효화 요청을 상기 스토리지 장치로 전송하는 단계는 상기 무효화 요청을 상기 어플리케이션으로부터 상기 스토리지 장치에 전송하는 단계를 포함한다.
제 32 예에서, 본 발명의 실시 예에 따른 제 31 예의 장치에 있어, 상기 무효화 요청을 상기 어플리케이션으로부터 상기 스토리지 장치에 전송하는 단계는 상기 스토리지 장치 상의 상기 데이터 쓰기 요청이 완료되었다는 신호를 상기 어플리케이션에서 수신하는 단계를 포함한다.
제 33 예에서, 본 발명의 실시 예에 따른 제 32 예의 장치에 있어, 상기 스토리지 장치 상의 상기 데이터 쓰기 요청이 완료되었다는 신호를 상기 어플리케이션에서 수신하는 단계는 상기 스토리지 장치 상의 상기 데이터 쓰기 요청이 완료되었다는 신호를 상기 어플리케이션에서 상기 스토리지 장치로부터 수신하는 단계를 포함한다.
제 34 예에서, 본 발명의 실시 예에 따른 제 27 예의 장치에 있어, 상기 어플리케이션으로부터 상기 스토리지 장치로 데이터 쓰기 요청을 전송하는 단계는,
상기 어플리케이션으로부터 데이터 스토리지 시스템으로 상기 데이터 쓰기 요청을 전송하는 단계; 그리고
상기 데이터 스토리지 시스템으로부터 상기 스토리지 장치로 제 2 데이터 쓰기 요청을 전송하는 단계를 포함한다.
제 35 예에서, 본 발명의 실시 예에 따른 제 34 예의 장치에 있어, 상기 데이터 스토리지 시스템으로부터 상기 스토리지 장치로 상기 제 2 데이터 쓰기 요청을 전송하는 단계는 상기 데이터 스토리지 시스템으로부터 상기 스토리지 장치로 제 2 저널 쓰기 요청을 전송하는 단계를 포함한다.
제 36 예에서, 본 발명의 실시 예에 따른 제 35 예의 장치에 있어,
상기 논 트랜지토리 명령은 머신에 의해 실행될 때:
상기 제 2 데이터 쓰기 요청이 상기 스토리지 장치에 쓰여진 이후에 상기 제 2 저널 쓰기 요청에 의해 쓰여진 상기 데이터를 삭제하기 위해 무효화 요청을 상기 스토리지 장치로 전송하는 단계를 더 실행한다.
제 37 예에서, 본 발명의 실시 예에 따른 제 36 예의 장치에 있어, 상기 무효화 요청을 상기 스토리지 장치에 전송하는 단계는 상기 무효화 요청을 상기 데이터 스토리지 시스템으로부터 상기 스토리지 장치에 전송하는 단계를 포함한다.
제 38 예에서, 본 발명의 실시 예에 따른 제 37 예의 장치에 있어, 상기 무효화 요청을 상기 데이터 스토리지 시스템으로부터 상기 스토리지 장치에 전송하는 단계는 상기 스토리지 장치 상의 상기 데이터 쓰기 요청이 완료되었다는 신호를 상기 데이터 스토리지 시스템에서 수신하는 단계를 포함한다.
위에서 설명한 내용은 본 발명을 실시하기 위한 구체적인 예들이다. 본 발명에는 위에서 설명한 실시 예들뿐만 아니라, 단순하게 설계 변경하거나 용이하게 변경할 수 있는 실시 예들도 포함될 것이다. 또한, 본 발명에는 상술한 실시 예들을 이용하여 앞으로 용이하게 변형하여 실시할 수 있는 기술들도 포함될 것이다.
105 : 서버 110 : 프로세서
115 : 메모리 120 : 데이터 스토리지 시스템
125 : 어플리케이션 130 : 스토리지 장치
135 : 컨트롤러 205 : 메모리 컨트롤러
210 : 클록 215 : 네트워크 커넥터
220 : 버스 225 : 유저 인터페이스
230 : I/O 엔진

Claims (20)

  1. 프로세서 및 메모리를 포함하는 컴퓨터;
    스토리지 장치;
    상기 프로세서 상에서 실행되고, 상기 스토리지 장치로 저널(journal) 쓰기 요청을 전송하고, 상기 프로세서 상에서 실행되는 데이터 스토리지 시스템으로 데이터 쓰기 요청을 전송하도록 동작하는 어플리케이션;
    제 2 저널 쓰기 요청을 상기 스토리지 장치에 전송하고, 제 2 데이터 쓰기 요청을 상기 스토리지 장치에 전송하도록 동작하는 데이터 스토리지 시스템; 및
    상기 스토리지 장치 상에 위치하고, 상기 스토리지 장치가 제 1 스트림(stream)에 할당된 제 1 블록(block)에 저널 정보를 쓰고, 제 2 스트림에 할당된 제 2 블록에 데이터를 쓰고, 제 3 스트림에 할당된 제 3 블록에 제 2 저널 정보를 쓰도록 지시하는 컨트롤러를 포함하되,
    상기 저널 쓰기 요청은 상기 저널 정보를 포함하고 상기 제 1 스트림에 할당되고,
    상기 데이터 쓰기 요청은 상기 데이터를 포함하고 상기 제 2 스트림에 할당되고,
    상기 제 2 저널 쓰기 요청은 제 2 저널 정보를 포함하고 제 3 스트림에 할당되고,
    상기 제 2 데이터 쓰기 요청은 상기 데이터를 포함하고 상기 제 2 스트림에 할당되고,
    상기 제 1 스트림, 제 2 스트림, 및 제 3 스트림은 데이터 특성들에 의하여 정의되는 시스템.
  2. 제 1 항에 있어,
    상기 컨트롤러는 상기 데이터 쓰기 요청이 완료된 이후에 상기 저널 정보를 삭제하기 위해 무효화(invalidate) 요청을 수신하도록 동작하는 시스템.
  3. 제 2 항에 있어,
    상기 어플리케이션은 상기 무효화 요청을 전송하도록 동작하는 시스템.
  4. 제 3 항에 있어,
    상기 어플리케이션은 상기 데이터 쓰기 요청이 완료되었다는 신호를 상기 어플리케이션이 수신한 것에 반응하여, 상기 무효화 요청을 전송하도록 동작하는 시스템.
  5. 제 1 항에 있어,
    상기 데이터 스토리지 시스템은 제 2 무효화 요청을 전송하도록 동작하는 시스템.
  6. 제 5 항에 있어서,
    상기 데이터 스토리지 시스템은 상기 제 2 데이터 쓰기 요청이 완료된 후에 상기 저널 정보를 삭제하기 위해 상기 제 2 무효화 요청을 상기 스토리지 장치로 전송하도록 동작하는 시스템.
  7. 제 1 항에 있어서,
    상기 저널 쓰기 요청은 직접 입력/출력(I/O) 요청으로 전송되고,
    상기 데이터 쓰기 요청은 버퍼링된 입력/출력(I/O) 요청으로 전송되고,
    상기 저널 쓰기 요청은 상기 데이터 쓰기 요청의 상기 데이터가 상기 스토리지 장치에 쓰여지는 것을 보장하기 위해 사용되는 시스템.
  8. 제 1 항에 있어서,
    상기 제 2 데이터 쓰기 요청에 포함된 상기 데이터는 상기 데이터 쓰기 요청에 포함된 데이터인 시스템.
  9. 제 1 항에 있어서,
    상기 저널 쓰기 요청은 상기 데이터 쓰기 요청의 상기 데이터가 상기 스토리지 장치에 쓰여지는 것을 보장하기 위해 사용되는 시스템.
  10. 제 1 항에 있어서,
    상기 제 3 블록은 상기 제 1 블록인 시스템.
  11. 제 1 항에 있어서,
    상기 저널 쓰기 요청은 상기 어플리케이션에 의해 상기 제 1 스트림에 할당되고,
    상기 데이터 쓰기 요청은 상기 어플리케이션에 의해 상기 제 2 스트림에 할당되는 시스템.
  12. 저널 쓰기 및 데이터 쓰기 모두를 수행하는 어플리케이션으로부터 쓰여질 데이터를 식별하는 단계;
    상기 어플리케이션으로부터 무효 데이터에 가비지 콜렉션(garbage collection)을 수행하는 스토리지 장치로 저널 쓰기 요청을 전송하는 단계;
    상기 어플리케이션으로부터 데이터 스토리지 시스템으로 상기 데이터를 포함하는 데이터 쓰기 요청을 전송하는 단계;
    상기 데이터 스토리지 시스템으로부터 제 2 저널 쓰기 요청을 상기 스토리지 장치로 전송하는 단계; 및
    상기 데이터 스토리지 시스템으로부터 상기 데이터를 포함하는 제 2 데이터 쓰기 요청을 상기 스토리지 장치로 전송하는 단계를 포함하되,
    상기 저널 쓰기 요청은 직접 입력/출력(I/O) 요청으로 전송하고,
    상기 데이터 쓰기 요청은 버퍼링된 입력/출력(I/O) 요청으로 전송하고,
    상기 저널 쓰기 요청은 제 1 스트림에 할당되고, 상기 데이터 쓰기 요청은 제 2 스트림에 할당되고, 상기 제 2 저널 쓰기 요청은 제 3 스트림에 할당되고, 상기 제 2 데이터 쓰기 요청은 상기 제 2 스트림에 할당되고,
    상기 저널 쓰기 요청 및 상기 제 2 저널 쓰기 요청은 상기 데이터 쓰기 요청의 상기 데이터가 상기 스토리지 장치에 쓰여지는 것을 보장하기 위해 사용되는 이중 쓰기 방법.
  13. 제 12 항에 있어,
    상기 데이터 쓰기 요청이 상기 스토리지 장치에 쓰여진 이후에 저널 정보를 삭제하기 위해 무효화 요청을 상기 스토리지 장치로 전송하는 단계를 더 포함하는 이중 쓰기 방법.
  14. 제 13 항에 있어,
    상기 무효화 요청을 상기 스토리지 장치로 전송하는 단계는 상기 무효화 요청을 상기 어플리케이션으로부터 상기 스토리지 장치에 전송하는 단계를 포함하는 이중 쓰기 방법.
  15. 제 14 항에 있어,
    상기 무효화 요청을 상기 어플리케이션으로부터 상기 스토리지 장치에 전송하는 단계는 상기 스토리지 장치 상의 상기 데이터 쓰기 요청이 완료되었다는 신호를 상기 어플리케이션에서 수신하는 단계를 포함하는 이중 쓰기 방법.
  16. 제 12 항에 있어,
    상기 제 2 데이터 쓰기 요청이 상기 스토리지 장치에 쓰여진 이후에 상기 제 2 저널 쓰기 요청에 의해 쓰여진 상기 데이터를 삭제하기 위해 무효화 요청을 상기 스토리지 장치로 전송하는 단계를 더 포함하는 이중 쓰기 방법.
  17. 논 트랜지토리(Non-Transitory) 명령어들을 저장하는 유형의 스토리지 매체(tangible storage medium), 프로세서, 및 메모리를 포함하는 장치에 있어서, 상기 논 트랜지토리 명령어들이 상기 프로세서에 의해 수행됨으로써:
    저널 쓰기 및 데이터 쓰기 모두를 수행하는 어플리케이션으로부터 쓰여질 데이터를 식별하는 단계;
    상기 어플리케이션으로부터 무효 데이터에 가비지 콜렉션(garbage collection)을 수행하는 스토리지 장치로 저널 쓰기 요청을 전송하는 단계;
    상기 어플리케이션으로부터 데이터 스토리지 시스템으로 상기 데이터를 포함하는 데이터 쓰기 요청을 전송하는 단계;
    상기 데이터 스토리지 시스템으로부터 제 2 저널 쓰기 요청을 상기 스토리지 장치로 전송하는 단계; 및
    상기 데이터 스토리지 시스템으로부터 상기 데이터를 포함하는 제 2 데이터 쓰기 요청을 상기 스토리지 장치로 전송하는 단계를 실행하고,
    상기 저널 쓰기 요청은 직접 입력/출력(I/O) 요청으로 전송하고,
    상기 데이터 쓰기 요청은 버퍼링된 입력/출력(I/O) 요청으로 전송하고,
    상기 저널 쓰기 요청은 제 1 스트림에 할당되고, 상기 데이터 쓰기 요청은 제 2 스트림에 할당되고, 상기 제 2 저널 쓰기 요청은 제 3 스트림에 할당되고, 상기 제 2 데이터 쓰기 요청은 상기 제 2 스트림에 할당되고,
    상기 저널 쓰기 요청 및 상기 제 2 저널 쓰기 요청은 상기 데이터 쓰기 요청의 상기 데이터가 상기 스토리지 장치에 쓰여지는 것을 보장하기 위해 사용되는 장치.
  18. 제 17 항에 있어,
    상기 논 트랜지토리 명령어들이 상기 프로세서에 의해 실행될 때:
    상기 데이터 쓰기 요청이 상기 스토리지 장치에 쓰여진 이후에 저널 정보를 삭제하기 위해 무효화 요청을 상기 스토리지 장치로 전송하는 단계를 더 실행하는 장치.
  19. 제 18 항에 있어,
    상기 무효화 요청을 상기 스토리지 장치로 전송하는 단계는 상기 무효화 요청을 상기 어플리케이션으로부터 상기 스토리지 장치에 전송하는 단계를 포함하는 장치.
  20. 제 17 항에 있어,
    상기 논 트랜지토리 명령어들이 상기 프로세서에 의해 실행될 때:
    상기 제 2 데이터 쓰기 요청이 상기 스토리지 장치에 쓰여진 이후에, 상기 제 2 저널 쓰기 요청에 의해 쓰여진 상기 데이터를 삭제하기 위해 무효화 요청을 상기 스토리지 장치로 전송하는 단계를 더 실행하는 장치.
KR1020160098623A 2015-12-30 2016-08-02 이중 쓰기를 수행하는 스토리지 시스템 및 그것의 이중 쓰기 방법 KR102412978B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201562273323P 2015-12-30 2015-12-30
US62/273,323 2015-12-30
US15/089,237 2016-04-01
US15/089,237 US9959046B2 (en) 2015-12-30 2016-04-01 Multi-streaming mechanism to optimize journal based data storage systems on SSD

Publications (2)

Publication Number Publication Date
KR20170080419A KR20170080419A (ko) 2017-07-10
KR102412978B1 true KR102412978B1 (ko) 2022-06-24

Family

ID=59226308

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160098623A KR102412978B1 (ko) 2015-12-30 2016-08-02 이중 쓰기를 수행하는 스토리지 시스템 및 그것의 이중 쓰기 방법

Country Status (5)

Country Link
US (1) US9959046B2 (ko)
JP (1) JP6734768B2 (ko)
KR (1) KR102412978B1 (ko)
CN (1) CN106933747B (ko)
TW (1) TWI702500B (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107422992A (zh) * 2017-07-31 2017-12-01 郑州云海信息技术有限公司 一种SSD运行时Journal保存方法及系统
US11386002B2 (en) * 2018-10-04 2022-07-12 ScaleFlux, Inc. Enhancing solid-state storage device speed performance through stream-aware garbage collection
CN109491616B (zh) 2018-11-14 2022-05-24 三星(中国)半导体有限公司 数据的存储方法和设备
KR20200145151A (ko) 2019-06-20 2020-12-30 삼성전자주식회사 맵핑 정보를 축약하는 플래시 변환 계층 구조를 이용하여 메모리 리소스를 관리하는 데이터 저장 장치
KR20210097010A (ko) * 2020-01-29 2021-08-06 삼성전자주식회사 키-값 스토리지 장치들에 대한 입출력 성능을 향상을 위한 키 값 객체 입출력들 그룹화
KR20210156190A (ko) 2020-06-17 2021-12-24 삼성전자주식회사 스토리지 장치 지원 실시간 가상 머신 마이그레이션
KR20220086934A (ko) 2020-12-17 2022-06-24 에스케이하이닉스 주식회사 비휘발성 메모리 시스템의 저널링 제어 장치 및 방법

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140149473A1 (en) 2012-11-29 2014-05-29 Research & Business Foundation Sungkyunkwan University File system for flash memory
US20140208001A1 (en) 2013-01-23 2014-07-24 Vmware, Inc. Techniques for Achieving Crash Consistency when Performing Write-Behind Caching Using a Flash Storage-Based Cache
US20170139825A1 (en) 2015-11-17 2017-05-18 HGST Netherlands B.V. Method of improving garbage collection efficiency of flash-oriented file systems using a journaling approach

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6128630A (en) * 1997-12-18 2000-10-03 International Business Machines Corporation Journal space release for log-structured storage systems
CA2511304C (en) 2002-12-24 2011-09-20 Lg Electronics, Inc. Dual journaling store method and storage medium thereof
US7363420B2 (en) * 2003-12-15 2008-04-22 Nortel Networks Limited Method and file structures for managing data on a flash disk
US7197599B2 (en) * 2003-12-29 2007-03-27 Intel Corporation Method, system, and program for managing data updates
JP2008165624A (ja) * 2006-12-28 2008-07-17 Hitachi Ltd 計算機システム及び第1記憶装置
US20090119352A1 (en) 2007-11-05 2009-05-07 Steven Joseph Branda Method for Optimizing Generational Garbage Collection Through Object Life Heuristics
WO2009079478A1 (en) * 2007-12-14 2009-06-25 Virident Systems, Inc. Distributing metadata across multiple different disruption regions within an asymmetric memory system
EP2263145B1 (en) * 2008-02-12 2020-02-05 NetApp, Inc. Hybrid media storage system architecture
US8949684B1 (en) * 2008-09-02 2015-02-03 Apple Inc. Segmented data storage
US8700842B2 (en) 2010-04-12 2014-04-15 Sandisk Enterprise Ip Llc Minimizing write operations to a flash memory-based object store
JP2012084127A (ja) 2010-09-15 2012-04-26 Toshiba Corp 半導体装置
US8738882B2 (en) 2011-06-03 2014-05-27 Apple Inc. Pre-organization of data
CN103858116B (zh) * 2011-08-09 2015-09-02 Lsi公司 I/o设备及计算主机互操作
US10203881B2 (en) 2011-12-19 2019-02-12 Apple Inc. Optimized execution of interleaved write operations in solid state drives
JP6005566B2 (ja) * 2013-03-18 2016-10-12 株式会社東芝 情報処理システム、制御プログラムおよび情報処理装置
KR101567134B1 (ko) 2013-03-29 2015-11-09 이화여자대학교 산학협력단 비휘발성 메모리에 기반하여 저널링 기능을 통합한 버퍼 캐시 장치, 저널링 파일 시스템 및 저널링 방법
US10191822B2 (en) 2014-02-20 2019-01-29 Rambus Inc. High performance persistent memory
JP2016170583A (ja) 2015-03-12 2016-09-23 株式会社東芝 メモリシステムおよび情報処理システム
US20160283125A1 (en) 2015-03-25 2016-09-29 Kabushiki Kaisha Toshiba Multi-streamed solid state drive
US9696935B2 (en) 2015-04-24 2017-07-04 Kabushiki Kaisha Toshiba Storage device that secures a block for a stream or namespace and system having the storage device

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140149473A1 (en) 2012-11-29 2014-05-29 Research & Business Foundation Sungkyunkwan University File system for flash memory
US20140208001A1 (en) 2013-01-23 2014-07-24 Vmware, Inc. Techniques for Achieving Crash Consistency when Performing Write-Behind Caching Using a Flash Storage-Based Cache
US20170139825A1 (en) 2015-11-17 2017-05-18 HGST Netherlands B.V. Method of improving garbage collection efficiency of flash-oriented file systems using a journaling approach

Also Published As

Publication number Publication date
TWI702500B (zh) 2020-08-21
JP6734768B2 (ja) 2020-08-05
CN106933747B (zh) 2019-08-20
TW201723857A (zh) 2017-07-01
CN106933747A (zh) 2017-07-07
KR20170080419A (ko) 2017-07-10
US20170192687A1 (en) 2017-07-06
JP2017120626A (ja) 2017-07-06
US9959046B2 (en) 2018-05-01

Similar Documents

Publication Publication Date Title
KR102412978B1 (ko) 이중 쓰기를 수행하는 스토리지 시스템 및 그것의 이중 쓰기 방법
US10761731B2 (en) Array controller, solid state disk, and method for controlling solid state disk to write data
KR102403034B1 (ko) 이중화 저장 블록들 및 분산 소프트웨어 스택들을 위한 동적 가비지 컬렉션 p/e 정책들
US20240202135A1 (en) Memory system and method for controlling nonvolatile memory
US10223254B1 (en) Namespace change propagation in non-volatile memory devices
KR102002830B1 (ko) 세그먼트 클리닝 장치 및 방법
CN109376123B (zh) 管理文件的方法、分布式存储系统和管理节点
US8775755B2 (en) Peer-to-peer transcendent memory
US20220327049A1 (en) Method and storage device for parallelly processing the deallocation command
CN110618945B (zh) 存储系统
KR20200122086A (ko) 메모리 시스템에서 맵 세그먼트를 전송하는 방법 및 장치
JP6893897B2 (ja) ソリッドステートドライブ(ssd)、そのガーベッジコレクションに係る方法、及びその具現に係る物品
JP6526235B2 (ja) データチェック方法および記憶システム
KR20160105624A (ko) 데이터 처리 시스템 및 그것의 동작 방법
CN110908927A (zh) 数据储存装置及其删除命名空间的方法
US20170160940A1 (en) Data processing method and apparatus of solid state disk
JP2013077074A (ja) ストレージ装置、ストレージ制御装置およびコピー先データアクセス方法
US20190065395A1 (en) Storage device and data arrangement method
US9569113B2 (en) Data storage device and operating method thereof
CN110515861B (zh) 处理刷写命令的存储设备及其方法
JP6215631B2 (ja) コンピュータシステム及びそのデータ管理方法
US9563363B2 (en) Flexible storage block for a solid state drive (SSD)-based file system
KR101465426B1 (ko) 익스텐트 매핑 플래시 디바이스
US11003578B2 (en) Method and system for parallel mark processing
CN117806570B (zh) 在线内存扩展方法、装置、设备及存储介质

Legal Events

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