KR20210155748A - 키-값 솔리드 스테이트 드라이브를 사용한 대화형 연속 인-디바이스 트랜잭션 프로세싱 - Google Patents

키-값 솔리드 스테이트 드라이브를 사용한 대화형 연속 인-디바이스 트랜잭션 프로세싱 Download PDF

Info

Publication number
KR20210155748A
KR20210155748A KR1020210046985A KR20210046985A KR20210155748A KR 20210155748 A KR20210155748 A KR 20210155748A KR 1020210046985 A KR1020210046985 A KR 1020210046985A KR 20210046985 A KR20210046985 A KR 20210046985A KR 20210155748 A KR20210155748 A KR 20210155748A
Authority
KR
South Korea
Prior art keywords
transaction
requests
index structure
input
per
Prior art date
Application number
KR1020210046985A
Other languages
English (en)
Inventor
강양욱
프라틱 미스라
기양석
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Publication of KR20210155748A publication Critical patent/KR20210155748A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2379Updates performed during online database operations; commit processing
    • 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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • G06F12/1018Address translation using page tables, e.g. page table structures involving hashing techniques, e.g. inverted page tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2365Ensuring data consistency and integrity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/24569Query processing with adaptation to specific hardware, e.g. adapted for using GPUs or SSDs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/0653Monitoring storage devices or systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/06Arrangements for sorting, selecting, merging, or comparing data on individual record carriers
    • G06F7/14Merging, i.e. combining at least two sets of record carriers each arranged in the same ordered sequence to produce a single set having the same ordered sequence
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/22Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
    • G06F7/32Merging, i.e. combining data contained in ordered sequence on at least two record carriers to produce a single carrier or set of carriers having all the original data in the ordered sequence merging methods in general

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Human Computer Interaction (AREA)
  • Computational Linguistics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

대화형 연속 인-디바이스 KV 트랜잭션 프로세싱 시스템은 호스트 디바이스와 KV-SSD를 포함한다. 상기 KV-SSD는 호스트 디바이스로부터 커맨드 패킷을 수신 및 처리하고, KV 트랜잭션과 관련된 KV 입출력 요청들을 식별하고, 트랜잭션별 인덱스 구조를 준비하는 커맨드 핸들러 모듈을 포함한다. 상기 방법은 상기 호스트 디바이스로부터 커맨드 패킷을 수신하는 단계, 상기 커맨드 핸들러 모듈이 상기 KV 트랜잭션과 관련된 트랜잭션 태그가 상기 커맨드 패킷에 임베디드되었는지 여부를 판단하는 단계를 포함한다. 상기 방법은 상기 트랜잭션 태그가 상기 커맨드 패킷에 포함되어 있지 않다는 판단에 기초하여, 메인 KV 인덱스 구조를 사용하여 하나 이상의 KV 입출력 요청들을 처리하는 단계를 포함한다. 상기 방법은 상기 트랜잭션 태그가 상기 커맨드 패킷에 포함되어 있다는 판단에 기초하여, 트랜잭션별 인덱스 구조를 사용하여 상기 하나 이상의 KV 입출력 요청들을 개별적으로 처리하는 단계를 포함한다.

Description

키-값 솔리드 스테이트 드라이브를 사용한 대화형 연속 인-디바이스 트랜잭션 프로세싱{INTERACTIVE CONTINUOUS IN-DEVICE TRANSACTION PROCESSING USING KEY-VALUE SOLID STATE DRIVES}
본 실시 예들은 키-값(key-value) 스토리지 시스템(key-value storage systems), 특히 키-값 솔리드 스테이트 드라이브(key-value solid state drive (KV-SSD))를 사용하여 대화형 연속 인-디바이스 트랜잭션 프로세싱을 제공하는 시스템들 및 방법들에 관한 것이다.
트랜잭션(Transaction)은 KV 스토리지 시스템의 필수적인 부분으로, 애플리케이션에 대한 KV 쌍의 일관성(consistency)을 보장한다. 상기 트랜잭션은 KV 쌍 그룹(a group of KV pairs) 이 메모리에서 스테이징(staging)되어 기본 장치로 전송될 수 있는 배치 연산을 사용하여 구현될 수 있다. 상기 기본 장치의 상태는 불확실할 수 있다. 그러나, 대규모 배치 쓰기들(batch writes)은 개별적으로 실행되지 않기 때문에, 저널(journal) 또는 라이트 헤드 로그(Write Head Log: WAL)과 같은 추가적인 리던던시(additional redundancy)가 필요할 수 있다. 따라서 쓰기 증폭(write amplification)이 증가하여 최적이 아닌 성능이 달성되므로, 장치의 수명을 단축시킬 수 있다.
배치 트랜잭션(batch transaction)을 스토리지 디바이스(storage device)로 오프로딩(Offloading)하면 상기 배치 트랜잭션의 부작용을 완화하는 데 도움이 될 수 있다. 그러나, 트랜잭션 크기는 상기 스토리지 디바이스의 라이트 버퍼(write buffer)의 크기에 의해 제한될 수 있다. 또한, 어떤 디바이스에 의해 호스트(host)에서 실행 중인 애플리케이션이 프로세싱되는 동안, 상기 애플리케이션은 전체 트랜잭션을 메모리에서 보관할 필요가 있다. 따라서, 동일하거나 다른 스토리지 노드들(storage nodes)에서 실행되는 다른 애플리케이션들과 트랜잭션을 공유하는 것은 어렵다. 개별 요청들(individual requests)의 출력에 기초한 데이터의 동적 뷰(dynamic view)를 다른 장치들과 공유하기는 것은 어렵거나 불가능할 수 있다.
본 개시의 목적은 키-값 솔리드 스테이트 드라이브를 사용하여 대화형 연속 인-디바이스 트랜잭션 프로세싱을 제공하는 시스템 및 방법에 관한 것이다.
본 개시의 다양한 실시 예들은 대화형 연속 인-디바이스 KV 트랜잭션 프로세싱 시스템을 포함한다. KV 트랜잭션 프로세싱 시스템은 커맨드 패킷(command packet)을 생성하도록 구성된 호스트 디바이스(host device)와 KV-SSD를 포함할 수 있다. 상기 KV-SSD은 호스트 디바이스에서 커맨드 패킷을 수신하도록 구성된 커맨드 핸들러 모듈(command handler module)을 포함할 수 있다. 상기 커맨드 핸들러 모듈은 상기 커맨드 패킷 내에서 KV 트랜잭션을 감지하도록 추가로 구성될 수 있다. 상기 커맨드 핸들러 모듈은 KV 트랜잭션과 관련된 하나 이상의 KV 입출력(I/O) 요청들을 식별하도록 추가로 구성될 수 있다. 상기 커맨드 핸들러 모듈은 i) 새로운 트랜잭션별 인덱스 구조를 준비하거나 ii) 상기 KV 트랜잭션과 연관된 기존 트랜잭션별 인덱스 구조를 선택하는 것 중 적어도 하나를 실행하도록 구성될 수 있다. 상기 KV-SSD는 상기 트랜잭션별 인덱스 구조의 상기 하나 이상의 KV 입출력 요청들을 개별적으로 처리하도록 설정된 트랜잭션 입출력 엔진을 포함할 수 있다. 상기 호스트 디바이스는 KV 트랜잭션을 커밋하거나 롤백하도록 구성될 수 있다.
대화형 연속 인-디바이스 KV 트랜잭션을 프로세싱하는 방법은 KV-SSD의 커맨드 핸들러 모듈이 커맨드 패킷을 수신하는 단계를 포함할 수 있다. 상기 방법은 상기 커맨드 핸들러 모듈이 KV 트랜잭션과 관련된 트랜잭션 태그가 상기 커맨드 패킷에 임베디드되었는지 여부를 결정하는 단계를 포함할 수 있다. 상기 방법은 상기 트랜잭션 태그가 상기 커맨드 패킷에 포함되어 있지 않다는 판단에 기초하여, 메인 KV 인덱스 구조를 사용하여 상기 KV 트랜잭션과 관련된 하나 이상의 KV 입출력 요청들을 처리하는 단계를 포함할 수 있다. 상기 방법은 상기 트랜잭션 태그가 상기 커맨드 패킷에 포함되어 있다는 판단에 기초하여, i) 새로운 트랜잭션별 인덱스 구조 또는 ii) KV 트랜잭션과 연관된 기존 트랜잭션별 인덱스 구조 중 적어도 하나에 기초하여 상기 KV 트랜잭션과 연관된 상기 하나 이상의 KV 입출력 요청을 처리하는 단계를 포함할 수 있다.
본 개시의 실시 예들은 KV-SSD와 같은 키-값 스토리지 시스템과 장치에 대화형 연속 트랜잭션 프로세싱 메커니즘을 추가함으로써 기기 내 배치 트랜잭션에 대한 제한을 해결할 수 있다.
본 개시에서 상술하고 추가적인 특징과 장점은 다음의 상세한 설명과 첨부된 도면들을 참조하여 보다 쉽게 알 수 있다.
도 1은 일부 실시 예들에 따른 KV 스토리지 시스템의 블록도를 도시한다.
도 2는 일부 실시 예들에 따른 KV 트랜잭션들을 프로세싱하는 기술을 도시하는 블록 및 흐름도이다.
도 3은 일부 실시 예에 따른 KV-SSD를 사용하여 대화형 연속 인-디바이스 트랜잭션 프로세싱을 수행하는 기술을 보여주는 블록 및 흐름도이다.
도 4는 일부 실시 예들에 따른 커맨드 핸들러 모듈이 수신한 커맨드들을 프로세싱하는 기술을 도시한 흐름도이다.
도 5는 일부 실시 예들에 따른 트랜잭션별 인덱스 구조의 블록도를 도시한다.
도 6은 일부 실시 예에 따른 트랜잭션 입출력 엔진에 의해 KV 입출력 요청을 핸들링하기 위한 기술을 도시한 흐름도이다.
도 7은 일부 실시 예들에 따른 KV-SSD로 전송된 KV 트랜잭션을 완료하기 위한 기술을 도시하는 흐름도이다.
본 명세서에 개시된 실시 예들은 상세하게 참조될 것이며, 그 예들은 첨부된 도면들에 도시된다. 다음의 상세한 설명에서, 본 발명에 대한 철저한 이해를 가능하게 하기 위하여 많은 구체적인 설명들이 제시된다. 그러나, 이 분야에서 통상의 기술을 가진 사람들은 이러한 구체적인 설명들 없이 본 발명을 실행할 수 있다는 것을 이해할 필요가 있다. 다른 예를 들면, 실시 예들을 불필요하게 모호하게 하지 않기 위해 잘 알려진 방법들, 절차들, 구성 요소들, 회로들, 및 네트워크들은 자세히 설명되지 않는다.
본 명세서에 개시된 “첫 번째”, “두 번째” 등의 용어들이 다양한 요소를 설명하기 위하여 사용될지라도 이러한 요소들은 이 용어들에 의해 제한되어서는 안 된다는 것이 이해될 것이다. 이러한 용어들은 하나의 요소를 다른 요소와 구분하는 데만 사용된다. 예를 들어, 제1 트랜잭션을 제2 트랜잭션이라고 지칭할 수 있고, 마찬가지 방식으로, 제2 트랜잭션 또한, 본 발명의 범위에서 벗어나지 않는 한, 제1 트랜잭션이라고 지칭할 수 있다.
본 명세서에서, 본 발명의 설명에 사용되는 용어는 단지 특정한 실시 예들을 설명하기 위해 사용된 것으로, 본 본 발명을 제한하는 것으로써 의도되지 않는다. 본 발명과 첨부된 청구 범위에 대한 설명에 사용되는 것처럼, 문맥 상 명백하게 다르게 뜻하지 않는 한, 단수 형태 “a”, “an”, “the” 또한 복수 형태를 포함하는 것으로 의도된다. 그리고, 본 문서에 사용된 “및/또는”이라는 용어는 하나 이상의 관련 목록 항목들의 가능한 모든 조합들을 지칭하고 포괄하는 것으로 이해될 것이다. 본 명세서에서 사용될 때 “포함한다” 및/또는 “포함하는”이라는 용어는 언급된 특징, 정수, 단계, 연산, 요소 및/또는 구성요소의 존재를 특정하나 하나 이상의 다른 특징들, 정수들, 단계들, 동작들, 요소들, 구성요소들, 및/또는 이들의 그룹의 존재 또는 추가를 배제하지는 않는다. 상기 도면들의 구성요소들과 특징들은 반드시 일정한 축척으로 도시되는 것은 아니다.
본 명세서에서 개시된 실시 예들에서, 예를 들어 KV-SSD와 같은 KV 스토리지 시스템과 장치에 대화형 연속 트랜잭션 프로세싱 메커니즘을 추가함으로써 기기 내 배치 트랜잭션에 대한 제한을 해결할 수 있다. 일부 KV 스토리지 시스템들은 애플리케이션들에 대한 KV 쌍들의 일관성을 보장하기 위하여 트랜잭션들을 사용할 수 있다. 일반적으로, 트랜잭션들은 Wait-batch-submit 메커니즘을 사용하여 구현될 수 있다. 상기 Wait-batch-submit 메커니즘에서, 독립적인 KV 쌍 그룹이 호스트 디바이스상 트랜잭션의 메모리에서 스테이징되고 한 번에 기본 디바이스로 전송될 수 있다(예를 들어, 단일 트랜잭션으로써). KV-SSD들과 같은 일부 스토리지 디바이스들은 데이터 프로세싱 능력들을 가지고 있어 많은 호스트 측 KV 기능들(host-side KV functionalities)을 디바이스로 오프로드(offload)할 수 있다. 상술한 KV-SSD는 주요 원칙을 동일하게 유지하는 기기 내 트랜잭션 관리를 구현할 수 있다. 즉, 트랜잭션 내의 모든 요청들은 데이터베이스 시스템(database system)에 구현된 트랜잭션들과는 다르게 일괄적으로 전송되고 프로세싱된다. 여기서 트랜잭션들의 소유자는 트랜잭션들 내 개별적 요청들의 상태를 볼 수 있다.
본 개시는 KV-SSD와 같은 KV 스토리지 디바이스에서 트랜잭션을 쌍방향적 및 연속적으로 관리하는 메커니즘을 제공한다. 상기 개시된 시스템은 애플리케이션들에 개별적으로 상태를 제공하면서, 트랜잭션에 속하는 개별 요청들의 원활하고 지속적인 프로세싱을 제공할 수 있다.
본 개시는 KV-SSD 디바이스들 내에서 트랜잭션들을 구현하는 다양한 방법들을 다룬다. 상기 트랜잭션은 배치(batch)와 연속(continuous)의 두 가지 유형을 포함할 수 있다. 게다가. 본 개시는 KV-SSD에서 연속적이고 대화형 트랜잭션을 지원하는 메커니즘을 소개한다. 상기 메커니즘에서, 트랜잭션 내의 개별 KV 요청들은 KV-SSD에 전송될 수 있다. 상태(status)는 트랜잭션의 완료되지 않은 동안에도 트랜잭션 ID를 보유하는 애플리케이션들이 이용 가능하도록 할 수 있다. 상기 요청들을 스테이징하는 일부 기술들은 일괄적으로 장치에 전송되고, 개별 요청에 대한 결과들을 검색하기 위하여 상기 트랜잭션 내의 모든 요청들의 완료를 대기하고, 그리고 전반적인 레이턴시(latency)와 리소스 사용을 증가시킨다. 또한, 개별 요청들의 연속적인 인오더(in-order) 관리로 인해 호스트 디바이스에서 실행되는 애플리케이션은 배치 트랜잭션 프로세싱의 종래 기술에 의해 제공되지 않는 동적 결정(dynamic decision)을 실행할 수 있다.
이러한 접근은 애플리케이션 의미론에 더 근접하고, 대규모 트랜잭션들을 지원하기 위하여 더 확장될 수 있고, 개별 요청들의 출력에 기초한 데이터의 다이나믹 뷰(dynamic view)가 이용 가능하다는 점에서 역동적이고, 저널링(journaling)이 필요하지 않기 때문에 더 효율적이고, 더 쉽게 데이터의 대역폭을 채울 수 있기 (예를 들어, 버퍼링된 비동기 입출력 프로세싱이 필요하지 않음) 때문에, 본 명세서에서 개시된 실시 예들은 유리하다. 일부 KV 스토어들과 비교하여, 본 명세서에서 개시된 대화형 트랜잭션 메커니즘은 트랜잭션 로깅(transaction logging)의 필요성을 제거함으로써 커밋(commit) 또는 롤백(rollback)을 선택할 수 있는 유연성(flexibility)을 제공할 수 있다.
도 1은 일부 실시 예들에 따른 KV 스토리지 시스템(100)의 블록도를 도시한다. KV 스토리지 시스템(100)은 호스트 디바이스(host device; 105)와 KV-SSD(110)를 포함할 수 있다. 사용자 애플리케이션(user application)(115)는 호스트 디바이스(105)에 의해 실행될 수 있다. 사용자 애플리케이션(115)는 KV-SSD(110)와 통신할 수 있다. KV-SSD(110)는 커맨드 핸들러 모듈(120), 트랜잭션 입출력 엔진(transaction input/output engine; 125), 메인 KV 인덱스 구조(main KV index structure; 130), 입출력 엔진(I/O engine; 135)를 포함할 수 있다. 트랜잭션 입출력 엔진(125)은 하나 이상의 트랜잭션별 인덱스 구조(per-transaction index structure; 140), 트랜잭션 입출력 관리자(transaction I/O manager; 145), 및 KV 인덱스 병합기(KV index merger; 150)을 포함할 수 있다.
동작 155에서, 사용자 애플리케이션(115)는 KV 트랜잭션(158)을 생성할 수 있다. 동작 160에서, 사용자 애플리케이션(115)는 트랜잭션 태그(transaction tag; 165)를 생성할 수 있다. 트랜잭션 태그(165)는 KV 트랜잭션(158)에 속하는 동작의 식별자일 수 있다. 트랜잭션 태그(165)와 KV 트랜잭션(158)은 커맨드 패킷(command packet; 178)에 포함될 수 있다. 트랜잭션 태그(165)는 사용자에 의하여 정의될 수 있다. 트랜잭션 태그(165)는 특정 KV 트랜잭션(158)에 고유한 사용자 정의 트랜잭션 ID (user-defined transaction-ID; 162), 특정 KV 입출력 요청(168)의 실행 순서(예를 들어, 순차적 증가)를 보존하기 위한 요청 인덱스(request index; 164), KV 트랜잭션(158)의 종료를 나타내는 종료 플래그(end flag; 166) 또는 이들의 조합을 포함할 수 있다. 동작 170에서, 하나 이상의 KV 쌍들(175)과 하나 이상의 트랜잭션 태그들(165)를 포함한 하나 이상의 KV 입출력 요청들(168)은 KV 트랜잭션(158)에 추가될 수 있다. 그 후에, 커맨드 패킷(178)이 KV-SSD(110)로 전송될 수 있다. 커맨드 패킷(178)은 KV 트랜잭션(158)을 포함할 수 있다. 트랜잭션 태그(165)는 일치성(coherency)을 유지하기 위하여 사용될 수 있다. 예를 들어, 트랜잭션 태그(165)에 액세스하는 사용자 애플리케이션(115)만 KV 트랜잭션(158)이 커맨드 핸들러 모듈(120)과 트랜잭션 입출력 엔진(125)에 의해 처리되도록 할 수 있다.
커맨드 핸들러 모듈(120)은 비휘발성 메모리 익스프레스 커맨드들 (non-volatile memory express (NVME) commands; 180), KV 커맨드들(185), KV 트랜잭션 커맨드들(190) 등과 같은 다양한 종류의 커맨드들을 핸들링할 수 있다. 커맨드 핸들러 모듈(120)은 호스트 디바이스(105)로부터 하나 이상의 KV 입출력 요청들을 받을 수 있다. 커맨드 핸들러 모듈(120)은 KV 트랜잭션들(예를 들어, 158)을 감지하고 그에 따른 액션을 취할 수 있다. 커맨드 핸들러 모듈(120)의 기능 중 하나는 KV 트랜잭션(158) (예를 들어, KV 입출력 읽기 요청, KV 입출력 쓰기 요청, 등)의 하나 이상의 KV 입출력 요청들을 식별하고 트랜잭션별 인덱스 구조(140)을 준비하고 읽기 검색을 핸들링하기 위한 것이다. 커맨드 핸들러 모듈(120)은 각 트랜잭션(158)에 대해 트랜잭션별 인덱스 구조(140)을 생성할 수 있다. 커맨드 핸들러 모듈(120)의 동작은 도 4를 참조하여 아래에서 상세히 설명될 것이다.
먼저, KV 트랜잭션(158)이 커맨드 패킷(178)을 포함하는지 여부를 결정하기 위해 커맨드 핸들러 모듈(120)은 트랜잭션 태그(165)를 확인할 수 있다. KV 트랜잭션(158)에 속하는 동작을 포함하는 커맨드 패킷(178)에 대응하여, 커맨드 핸들러 모듈(120)은 트랜잭션별 인덱스 구조(140)을 생성 및/또는 선택할지 여부를 확인할 수 있다. 커맨드 패킷(178)과 연결된 하나 이상의 KV 입출력 요청들(168) (예를 들어, KV 입출력 읽기 요청, KV 입출력 쓰기 요청 등)의 유형을 기반으로, 하나 이상의 KV 입출력 요청들(168)은 트랜잭션별 인덱스 구조(140)에 추가 및/또는 제거될 수 있다. 트랜잭션 입출력 엔진(125)은 트랜잭션별 인덱스 구조(140)에 추가된 KV 트랜잭션(158)을 추가로 처리하기 위해 통지될 수 있다.
KV 입출력 읽기 요청들을 위하여, 커맨드 핸들러 모듈(120)은 하나 이상의 KV 입출력 요청들(168)이 있는지를 트랜잭션별 인덱스 구조(140)에서 검색할 수 있다. 트랜잭션별 인덱스 구조(140)에서 발견되지 않는 하나 이상의 KV 입출력 요청들(168)에 응답하여, 상기 프로세싱은 KV-SSD(110)의 메인 KV 인덱스 구조(130)로 리디렉팅(re-directing)될 수 있다. 트랜잭션별 인덱스 구조(140)는 일부 또는 모든 KV 트랜잭션(158)에 대해 생성될 수 있으며, 트랜잭션 ID(162)로 식별될 수 있다. 트랜잭션 ID(162)는 사용자 애플리케이션(115)에 의해 제공될 수 있다. 트랜잭션별 인덱스 구조(140)는 트랜잭션 태그(165)(예를 들어, 요청 인덱스(164)) 내에 임베디드된 정보와 함께 KV 트랜잭션(158)에 속하는 하나 이상의 KV 입출력 요청들(168) (예를 들어, 개별 KV 쌍들(175) 및 관련 태그들(165)), 그리고 커맨드 핸들러 모듈(120)에 의해 분석된 각 KV 입출력 요청들(168) (예를 들어, KV 입출력 읽기 요청, KV 입출력 쓰기 요청, 등)의 타입을 포함할 수 있다. 트랜잭션별 인덱스 구조(140)에 대한 추가된 설명은 도 5를 참조하여 아래에 설명될 것이다. 트랜잭션별 인덱스 구조(140)는 트랜잭션 입출력 엔진(125)에 사용자 애플리케이션(115)가 전송하는 요청의 순차적 순서를 제공하는 것을 담당할 수 있고, 특히, 읽기 요청들에 대한 효율적인 검색을 위한 데이터 구조를 유지하기 위한 것을 담당할 수 있다. 트랜잭션별 인덱스 구조(140)는 종료 플래그(166)로 표시되며 종료된 KV 트랜잭션(158)에 응답하여 삭제될 수 있다.
트랜잭션 입출력 관리자(145)는 트랜잭션별 인덱스 구조(140)로부터 디바이스 입출력 엔진(135)로 하나 이상의 KV 입출력 요청들(168)을 구동(예를 들어, 전송)하고, 트랜잭션별 인덱스 구조(140)의 실행의 순서, 동작의 일관성, 및/또는 수명 주기 관리(life-cycle management)를 유지하는 것을 담당할 수 있다. 트랜잭션 입출력 관리자(145)는 KV-SSD(110)의 저장 매체에 하나 이상의 요청들을 할 수 있다. 아래에서 더 설명되겠지만, 트랜잭션 입출력 관리자(145)는 실행의 순서대로 트랜잭션별 인덱스 구조(140)의 입출력 큐 목록(예를 들어, 입출력_큐_리스트(IoQueueList))로부터 하나 이상의 KV 입출력 요청 항목들을 페치(fetch)할 수 있다. 아래에서 더 설명되겠지만, 트랜잭션 입출력 관리자(145)는 다음 KV 입출력 요청이 발행될 것인지를 확인할 수 있다. 게다가, 트랜잭션 입출력 관리자(145)는 KV 트랜잭션의 완료를 158로 핸들링할 수 있다.
트랜잭션 입출력 엔진(125)은 실패한 KV 입출력 요청들(168)을 확인할 수 있다. 아래에서 더 설명되겠지만, 실패한 KV 입출력 요청들(168)에 응답하여, KV 트랜잭션(158)의 상태 비트는 실패된 상태로 설정될 수 있고, 따라서, KV 트랜잭션(158)의 모든 추가 KV 입출력 요청들(168)이 실패한 상태를 나타낼 수 있다. 트랜잭션 입출력 엔진(125)은 알림(194)의 응답을 사용자 애플리케이션(115)으로 전송할 수 있다. 성공한 하나 이상의 KV 입출력 요청들(168)에 응답하여, 하나 이상의 KV 입출력 요청들(168)이 완료될 수 있다. 그것들이 완료됨에 따라 알림(194)이 사용자 애플리케이션(115)으로 전송될 수 있다. 일부 실시 예들에서, 트랜잭션 입출력 관리자(145)가 KV 입출력 요청 상태(192)를 포함하는 개별 알림(194)이 사용자 애플리케이션(115)로 전송되도록 할 수 있다. 이것은 종료 플래그(166)가 나타날 때까지 계속될 수 있다. 전체적으로, KV 트랜잭션(158)이 KV 인덱스 병합기(150)로 전송되도록 표시될 수 있다. 이후에, 트랜잭션별 인덱스 구조(140)는 삭제될 수 있다. 어떤 실시 예들에서, 트랜잭션 입출력 관리자(145)는 종료 플래그(166)을 감지하고, KV 트랜잭션(158)을 KV 인덱스 병합기(150)로 전송하고, 해당 KV 트랜잭션(158)에 대한 트랜잭션별 인덱스 구조(140)을 삭제한다. 트랜잭션 상태(195)인 알림(194)은 사용자 애플리케이션(115)으로 제공될 수 있고, 알림(198)은 호스트 디바이스(105), 다른 애플리케이션들, 또는 사용자들에게 제공될 수 있다.
도 2는 일부 실시 예들에 따른 KV 트랜잭션들을 프로세싱하는 기술을 도시하는 블록 및 흐름도(200)이다. 이제, 도 1 및 도 2를 참조한다.
동작 205에서, 호스트 디바이스(105)의 사용자 애플리케이션(115)는 KV 트랜잭션(158)을 생성할 수 있다 동작 210에서, 사용자 애플리케이션(115)는 KV 입출력 요청(168)을 발행할 수 있다. 동작 215에서, KV-SSD(110)는 트랜잭션별 인덱스 구조(140)를 업데이트할 수 있다. 동작 218에서, KV-SSD(110)는 하나 이상의 KV 입출력 요청들을 프로세싱할 수 있다. 동작 220에서, 사용자 애플리케이션(115)는 KV 트랜잭션(158)를 커밋(commit)할 수 있다. 동작 225에서, 사용자 애플리케이션(115)는 KV 트랜잭션(158)를 롤백(rollback)할 수 있다. 사용자 애플리케이션(115)이 KV 트랜잭션(158)을 동작 220에서 커밋하는 것에 응답하여, KV-SSD(110)는 KV 트랜잭션(158)과 관련된 변경 사항을 동작 230에서 병합할 수 있다. 사용자 애플리케이션(115)가 KV 트랜잭션(158)을 동작 220에서 커밋하는 것에 응답하여, KV 트랜잭션(158)은 사용자 애플리케이션(115)와 다른 애플리케이션들에 보일 수 있다. 동작 225에서, KV 입출력 요청(168)의 실패에 응답하여 사용자 애플리케이션(115)는 KV 트랜잭션(158)을 롤백할 것을 결정할 수 있다. 동작 225에서 KV 트랜잭션(158)의 롤백에 대응하여, 동작 235에서, KV-SSD(110)은 KV 트랜잭션(158)과 관련된 변경 사항을 폐기할 수 있다. 본 명세서에서 개시된 대화형 트랜잭션 메커니즘은 트랜잭션 로깅(transaction logging)의 필요성을 제거하여 커밋(commit) 또는 롤백(rollback)을 선택할 수 있는 유연성(flexibility)을 제공할 수 있다.
도 3은 일부 실시 예들에 따른 KV-SSD(110)를 사용하여 대화형 연속 인-디바이스 트랜잭션 프로세싱을 수행하는 기술을 보여주는 블록 및 흐름도(300)이다. 하드 디스크 드라이브와 같은 엔트로피-드리븐 슬로우 스토리지 디바이스들(entropy-driven slow storage devices)에 도움이 될 수 있는 wait-batch-submit 메커니즘을 수행하는 대신, 애플리케이션들(예를 들어, 115)에 유리하고 빠른 KV-SSD에 적합한 대화형 연속 프로세싱 방법이 개시된다. 범례(305)에 도시된 바와 같이, KV 쌍은 상자 모양의 증가형 정수로 표시되고 트랜잭션 태그는 상자 모양의 'T'로 표시된다.
시간 t0에서, KV 쌍과 트랜잭션 태그를 포함한 제1 KV 트랜잭션(158)이 호스트 디바이스(105)에서 실행되는 사용자 애플리케이션(115)에서 KV-SSD(110)로 전송된다. 시간 t1 이전에, 제1 KV 트랜잭션(158)의 상태(예를 들어, 도 1의 192)가 소유자(owner)(예를 들어, 사용자 애플리케이션(115)에 제공됨)에게 보일 수 있다. 시간 t1에서, KV 쌍과 트랜잭션 태그를 포함한 제2 KV 트랜잭션이 호스트 디바이스(105)에서 실행되는 사용자 애플리케이션(115)에서 KV-SSD(110)로 전송된다. 시간 t2 이전에, 제2 KV 트랜잭션의 상태(예를 들어, 도 1의 192)가 소유자(예를 들어, 사용자 애플리케이션(115)에 제공됨)에게 보일 수 있다. 시간 t2에서, KV 쌍과 트랜잭션 태그를 포함한 제3 KV 트랜잭션이 호스트 디바이스(105)에서 실행되는 사용자 애플리케이션(115)에서 KV-SSD(110)로 전송된다. 시간 t3 이전에, 제3 KV 트랜잭션의 상태(예를 들어, 도 1의 192)는 다른 사람들과 소유자(예를 들어, 사용자 애플리케이션(115), 다른 애플리케이션들, 또는 관련된 것들에게 제공됨)에게 제공될 수 있다. 전체 레이턴시는 참조 번호 310으로 표시되지만 각 KV 트랜잭션의 레이턴시는 전체 레이턴시(310)보다 작다.
본 개시는 KV-SSD(110)와 같은 KV 스토리지 디바이스 내에서 연속적이고 쌍방향적인 트랜잭션 프로세싱을 활용하는 장치 내 트랜잭션 관리 기술을 개시한다. 도 3은 일관성을 보장하면서, KV-SSD(110)로 직접 연결된 트랜잭션 태그의 도움으로 호스트 시스템에서 스테이징할 필요 없이, 일부 배치 트랜잭션 프로세싱과 달리 애플리케이션(예를 들어, 115)이 KV 트랜잭션(예를 들어, 도 1의 158)의 개별 KV 입출력 요청들(예를 들어, 도 1의 168)을 전송하도록 하는 실시 예를 도시한다. 일단 각 개별 KV 입출력 요청(예를 들어, 도 1의 168)의 상태(예를 들어, 도 1의 경우 192)가 KV-SSD(110)에 저장되면, KV 트랜잭션(예를 들어, 도 1의 158)의 소유자는 각 개별 KV 입출력 요청(예를 들어, 도 1의 168)의 상태(예를 들어, 도 1의 경우 192)를 가질 수 있으며, 따라서 시스템(300)에 KV 입출력 요청(예를 들어, 도 1의 168)을 추가하거나 제거하는 것과 같은 동적 결정(dynamic decision)을 내릴 수 있는 능력을 제공할 수 있다. 이것은 개별 KV 쌍의 결과를 알기 위해 전체 트랜잭션이 종료될 때까지 기다려야 하는 배치-드리븐 트랜잭션 메커니즘(batch-driven transaction mechanisms)과는 다르다. 또한, 개시된 대화형 트랜잭션 시스템과 함께, 상기 장치의 오토믹 쓰기 능력(atomic write capability)은 활용될 수 있고, 배치 트랜잭션의 경우에는 달성되지 않을 수 있다. 만약 배치가 길어지면 쓰기 동작은 더 이상 나누어져 수행될 수 없기 때문에 일관성을 보장하기 위해 저널 또는 WAL이 필요할 수 있다.
각 KV 트랜잭션들의 크기(예를 들어, 도 1의 158)는 어떤 배칭(batching)도 필요하지 않기 때문에 감소될 수 있다. KV-SSD 내에서 메모리의 크기를 결정할 때 큰 트랜잭션의 크기는 제한될 수 있다. 큰 사이즈의 KV 쌍은 페이로드(payload)로써 커맨드로 전송될 수 있지만, KV-SSD 내 하드웨어가 페이로드 내 모든 커맨드들을 가져오지 않을 수 있기 때문에 성능의 패널티(penalty)가 클 수 있다. 따라서, 대규모 트랜잭션들은 KV-SSD에 의해 비효율적으로 핸들링된다. 따라서, 본 명세서에서 개시된 트랜잭션의 크기를 줄이면 KV-SSD(110)의 효율성이 증가될 수 있다.
KV-SSD와 같은 고속 비휘발성 스토리지 디바이스(fast non-volatile storage device)가 제공하는 입출력 대역폭(I/O bandwidth) 및 동시성(concurrency)은 호스트 디바이스(105) 상의 트랜잭션에서 스테이징 요청 및 배치 요청으로 인해 활용도가 낮은 반면, KV-SSD(110)는 유휴 상태를 유지할 수 있다. 대화형 연속 인-디바이스 트랜잭션 프로세싱을 수행함으로써 KV-SSD의 입출력 대역폭이 더 잘 활용될 수 있다. 또한, 트랜잭션에서 발생할 수 있는 스테이징 및 플러싱의 요청들은 제거될 수 있다. 그렇지 않으면, 데이터를 처리하는 것보다는, 배치 트랜잭션을 KV-SSD로 푸시하기 위해, 상술한 스테이징 및 플러싱 요청들은 메모리와 같은 호스트측 리소스 및 전용 스레드를 소비할 수 있다. Wait-batch-push 메커니즘과 비교하면, 시스템은 사용자 애플리케이션(115)에 의해 제출되고, 함께 배치되고, 그리고 프로세싱을 위해 KV-SSD에 전송될 모든 요청들을 기다려야 하기 때문에, 본 명세서에서 개시된 바와 같이 개별 트랜잭션 레이턴시는 감소될 수 있다.
본 명세서에서 개시된 기기 내 대화형 KV 트랜잭션이 없다면, KV 트랜잭션의 범위들 사이에는 엄격하고 타이트한 결합이 있을 수 있고, 동적 설계 결정을 내릴 수 있는 경우는 거의 없다. 예를 들어, 사용자 애플리케이션(115)이 결정을 내리기 위해 배치 결과를 기다릴 필요가 있기 때문에, 본 명세서에서 개시된 장치 내 대화형 KV 트랜잭션이 없이, 개별 요청 출력에 기초하여 KV 트랜잭션에 KV 쌍을 추가할 수 없다. 이러한 역학성(dynamicity)의 부족과 트랜잭션 전에 모든 동작들을 제공하는 엄격한 제한사항들로 인해 일부 머신 러닝(machine learning; ML)/KV 애플리케이션은 어려울 수 있다.
기기 저활용, 호스트 리소스 소비, 및 전체 레이턴시의 배치-위주의 트랜잭션 메커니즘의 한계를 극복하면서, 상기 개시된 시스템은 일관성을 보장한다. 또한, 상기 개시된 시스템은 다이나믹 대화형 트랜잭션 지원을 제공한다.
도 4는 일부 실시 예들에 따른 커맨드 핸들러 모듈(120)이 수신한 커맨드들을 프로세싱하는 기술을 도시한 흐름도(400)이다. 이제, 도 1 및 도 4를 참조한다.
동작 405에서, 커맨드 패킷(178)을 수신할 수 있다. 동작 410에서, 커맨드 핸들러 모듈(120)은 트랜잭션 태그(165)가 커맨드 패킷(178)에 임베디드(embedded)되어 있는지 여부를 판단할 수 있다. 트랜잭션 태그(165)가 커맨드 패킷(178)에 임베디드되어 있지 않은 것으로 판단함에 기초하여 상기 플로우(flow)는 동작 445로 진행될 수 있다. 동작 445에서, KV 입출력 요청(168)은 메인 KV 인덱스 구조(130)을 사용하여 프로세싱될 수 있다. 그렇지 않으면, 트랜잭션 태그(165)가 커맨드 패킷(178)에 임베디드되어 있는 것으로 판단함에 기초하여 상기 플로우는 동작 415로 진행될 수 있고, 새로운 KV 트랜잭션이 커맨드 패킷(178)에 포함되어 있는지 여부는 판단될 수 있다. 새로운 KV 트랜잭션이 커맨드 패킷(178)에 임베디드되어 있는 것으로 판단함에 기초하여, 상기 플로우는 동작 420으로 진행될 수 있다. 동작 420에서, 새로운 트랜잭션별 인덱스 구조(140)가 생성될 수 있다. 그렇지 않으면, 새로운 KV 트랜잭션이 커맨드 패킷(178)(다시 말하면, 상기 KV트랜잭션 새로운 것이 아니다)에 포함되지 않는다고 판단함에 기초하여 상기 플로우는 동작 425로 진행할 수 있다. 동작 425에서, 트랜잭션별 인덱스 구조(예를 들어, 140)는 사용을 위해 선택될 수 있다. 트랜잭션 입출력 엔진(125)은 복수의 트랜잭션별 인덱스 구조들을 관리할 수 있다는 것은 이해될 것이다.
동작 430에서, 커맨드 핸들러 모듈(120)은 KV 트랜잭션(158)이 KV 입출력 읽기 요청을 포함하는지 여부를 판단할 수 있다. KV 트랜잭션에 KV 입출력 읽기 요청이 포함되어 있다고 판단함에 기초하여 상기 플로우는 동작 435로 진행될 수 있다. 동작 435에서, 트랜잭션별 인덱스 구조(140) 내 키(key)는 검색될 수 있다. 동작 440에서, 커맨드 핸들러 모듈(120)은 트랜잭션별 인덱스 구조(140) 내에서 키를 찾을 수 있는지 여부를 판단할 수 있다. 트랜잭션별 인덱스 구조(140) 내에서 키를 찾을 수 없다고 판단함에 기초하여 상기 플로우는 동작 445로 진행될 수 있다. 동작 445에서, KV 입출력 요청(168)은 메인 KV 인덱스 구조(130)을 사용하여 프로세싱될 수 있다.
동작 430에서 KV 트랜잭션이 KV 입출력 읽기 요청을 포함하지 않는 것으로 판단함에 기초하여 상기 플로우는 동작 450으로 진행될 수 있다. 또한, 트랜잭션별 인덱스 구조(140) 내에서 키가 동작 440에서 발견되었다고 판단함에 기초하여 상기 플로우는 동작 450으로 진행될 수 있다. 동작 450에서, KV 입출력 요청 항목은 트랜잭션별 인덱스 구조(140)에 추가될 수 있다. 동작 455에서, KV 입출력 요청 항목이 트랜잭션별 인덱스 구조(140)에 추가되었음이 트랜잭션 입출력 관리자(145)에게 통지될 수 있다.
도 5는 일부 실시 예들에 따른 트랜잭션별 인덱스 구조(140)의 블록도를 도시한다. 이제, 도 1 및 도 5를 참조한다.
트랜잭션별 인덱스 구조(140)는 각 트랜잭션(158)별로 생성될 수 있고, 사용자 애플리케이션(115)에 의해 제공되는 트랜잭션 ID(162)에 의하여 식별될 수 있다. 트랜잭션별 인덱스 구조(140)는 트랜잭션 태그(165)(예를 들어, 요청 인덱스(164)) 내에 임베디드된 정보와 함께 KV 트랜잭션(158)에 속하는 하나 이상의 KV 입출력 요청들(168) (예를 들어, 개별 KV 쌍들(175) 및 관련 태그들(165)), 그리고 커맨드 핸들러 모듈(120)에 의해 분석된 요청 (예를 들어, KV 입출력 읽기 요청, KV 입출력 쓰기 요청, 등)의 타입을 포함할 수 있다.
트랜잭션별 인덱스 구조(140)는 B+ 트리로써 구현 및/또는 시각화될 수 있다. 트랜잭션별 인덱스 구조(140)는 하나 이상의 개별 KV 쌍(175)의 정렬된 키들의 목록을 포함할 수 있는 정렬된 키리스트(sorted keylist; 505)를 포함할 수 있다. 정렬된 키리스트(505)는 키 검색에 도움을 주거나 속도를 높일 수 있다. 트랜잭션별 인덱스 구조(140)는 실행 순서를 보존하기 위한 요청 인덱스(164)에 기초하여 정렬된 KV 입출력 요청들(168)의 목록을 포함할 수 있는 입출력_큐_리스트(510)을 포함할 수 있다. 트랜잭션별 인덱스 구조(140)는 상기 순서를 유지하기 위한 트랜잭션 입출력 엔진(125)에 가장 최근에 발행된 요청 인덱스(164)를 나타낼 수 있는 라스트 ID(예를 들어, 5, 6, 7, 및 8)를 포함할 수 있다. 트랜잭션별 인덱스 구조(140)는 KV 트랜잭션(158)의 상태를 나타내는 STATUS 비트를 포함할 수 있다. 즉, 상기 STATUS 비트는 KV 트랜잭션에 속하는 하나 이상의 KV 입출력 요청들(168)이 실패했거나 성공했는지 여부를 나타낸다. 예를 들어, 1의 STATUS 비트는 해당 KV 트랜잭션에 속하는 하나 이상의 KV 입출력 요청들(168)이 실패했음을 나타낼 수 있고, 0의 STATUS 비트는 해당 KV 트랜잭션에 속하는 KV 입출력 요청들(168)이 성공했음을 나타낼 수 있다. 또는 그 반대일 수 있다.
“라스트 ID + 1”와 동일하고, 입출력_큐_리스트 (510)의 첫 번째 KV 입출력 요청 항목(515)의 현재 요청 인덱스(164)에 응답하여, 다음 KV 입출력 요청이 발행될 수 있다. 또는, 다음 KV 입출력 요청은 이전 KV 입출력 요청(168)이 완료된 후에 발행 될 수 있다. 완료되지 않은 라스트 ID와 동일하고, 입출력_큐_리스트 (510)의 KV 입출력 요청 항목 (예를 들어, 515)와 연관된 KV 입출력 요청 (168)에 응답하여, 시스템은 KV 입출력 요청(168)의 완료를 기다린 다음 추가적인 프로세싱을 위해 디바이스 입출력 엔진(135)에 다음 KV 입출력 요청을 해제하고, 라스트 ID를 증가시킬 수 있다. 이전에 발행된 KV 입출력 요청들이 실패함(예를 들어, STATUS 비트는 해당 KV 입출력 요청 항목에서 “FAILED”로 설정됨)에 응답하여 오류가 사용자 애플리케이션(115)으로 전송될 수 있다. 종료 플래그(166)가 KV 트랜잭션 (158)의 종료를 나타내는 것으로 설정되면 트랜잭션별 인덱스 구조(140)가 삭제될 수 있다. 요청 핸들링 메커니즘(request handling mechanism)은 도 5를 참조하여 아래에서 더 설명될 것이다.
도 6은 일부 실시 예에 따른 트랜잭션 입출력 엔진(125)에 의해 KV 입출력 요청(168)을 핸들링하기 위한 기술을 도시한 흐름도(600)이다. 이제, 도 1 및 도 6를 참조한다.
동작 605에서, 트랜잭션 입출력 엔진(125)은 KV 입출력 요청(168)을 수신할 수 있다. 동작 610에서, 트랜잭션 입출력 엔진(125)은 요청 인덱스(164)가 0과 동일한지를 판단할 수 있다. 요청 인덱스(164)가 0과 같다는 판단에 기초하여, 트랜잭션 입출력 엔진(125)은 동작 615에서 상태 비트(예를 들어, 도 5의 STATUS)를 실패하지 않음(“not failed”)으로 설정할 수 있다. 그렇지 않으면, 요청 인덱스(164)가 0과 같지 않다는 판단에 기초하여, 트랜잭션 입출력 엔진(125)은 동작 620에서 KV 트랜잭션(158)이 실패하였는가를 판단할 수 있다.
동작 620에서 KV 트랜잭션(158)이 실패했다는 판단에 기초하여, 상기 플로우는 동작 625로 진행될 수 있으며, 트랜잭션 입출력 엔진(125)은 종료 플래그(166)가 설정되었는가를 판단할 수 있다. 종료 플래그(166)가 설정되었다는 판단에 기초하여, 상기 플로우는 동작 630으로 진행될 수 있다. 동작 630에서, KV 트랜잭션에 대한 트랜잭션별 인덱스 구조(140)는 제거될 수 있고, 동작 635에서 사용자 애플리케이션(115)에 오류를 전송할 수 있다. 그렇지 않으면, 종료 플래그(166)가 설정되지 않았다는 판단에 기초하여, 상기 플로우는 직접 동작 635로 진행된다. 동작 635에서 오류를 사용자 애플리케이션(115)로 전송할 수 있다.
동작 620에서 KV 트랜잭션(158)이 실패하지 않았다는 판단에 기초하여, 상기 플로우는 동작 640으로 진행될 수 있다. 동작 640에서, 트랜잭션 입출력 엔진(125)은 입출력 큐(도 5의 입출력_큐_리스트(510))를 얻을 수 있다. 동작 645에서, 트랜잭션 입출력 엔진(125)은 입출력 큐(예를 들어, 510)에 KV 입출력 요청 항목(예를 들어, 515)을 추가할 수 있다. 동작 650에서, 트랜잭션 입출력 엔진(125)은 요청 인덱스(164)가 “라스트 ID + 1”와 동일한지 여부를 판단할 수 있다. 요청 인덱스(164)가 “라스트 ID + 1”와 동일하다는 판단에 기초하여, 상기 플로우는 동작 655로 진행될 수 있다. 동작 655에서, 트랜잭션 입출력 엔진(125)은 펜딩(pending) 중인 KV 입출력 요청들(예를 들어, 168)을 입출력 엔진(135)로 발행할 수 있다. 동작 660에서, 트랜잭션 입출력 엔진(125)은 라스트 ID(예를 들어, 도 5에서 도시됨)를 1씩 증가시킬 수 있다. 동작 650에서, 요청 인덱스(164)가 “라스트 ID + 1”와 같지 않다고 판단함에 기초하여 상기 플로우는 직접 종료(END)로 진행될 수 있다.
도 7은 일부 실시 예들에 따른 KV-SSD(110)로 전송된 KV 트랜잭션(158)을 완료하기 위한 기술을 도시하는 흐름도(700)이다. 이제, 도 1 및 도 7를 참조한다.
입출력 엔진(135)이 동작 705에서 하나 이상의 KV 입출력 요청들(168)을 포함하는 KV 트랜잭션(158)을 완료한 후, 입출력 엔진(135)이 응답을 제공할 수 있다. 그리고, 트랜잭션 입출력 엔진(125)가 입출력 엔진(135)로부터 응답을 받을 수 있다. 동작 710에서, 트랜잭션 입출력 엔진(125)은 입출력 큐(queue) (예를 들어, 도 5의 입출력_큐_리스트(510))을 얻을 수 있다. 동작 715에서, 트랜잭션 입출력 엔진(125)은 KV 입출력 요청(168)이 성공했는지와 KV 트랜잭션(158)이 실패하지 않았는지 여부를 판단할 수 있다. KV 입출력 요청(168)이 성공했고 KV 트랜잭션(158)이 실패하지 않았다고 판단함에 기초하여 상기 플로우는 동작 720으로 진행될 수 있다. 동작 720에서, 입출력 큐(예를 들어, 도 5의 입출력_큐_리스트(510)) 내의 KV 입출력 요청(168)은 완료된 것으로 표시될 수 있다. 그렇지 않으면, KV 입출력 요청(168)이 성공하지 못했거나 KV 트랜잭션(158)이 실패했다고 판단함에 기초하여 상기 플로우는 동작 725로 진행될 수 있다. 동작 725에서, 입출력 큐(예를 들어, 도 5의 입출력_큐_리스트(510)) 내의 모든 작성된(written) KV 쌍이 삭제될 수 있다. 그런 다음, 동작 730에서 상태 비트(예를 들어, 도 5의 STATUS)를 실패(예를 들어, 1)로 설정하고, 동작 750에서 상기 응답은 사용자 애플리케이션으로 전송될 수 있다.
입출력 큐(예를 들어, 도 5의 입출력_큐_리스트(510)) 내의 요청이 동작 720에서 완료된 것으로 표시된 후, 상기 플로우는 동작 735로 진행될 수 있다. 동작 735에서, 트랜잭션 입출력 엔진(125)은 종료 플래그(166)의 설정 여부를 판단할 수 있다. 종료 플래그(166)가 설정되지 않은 것으로 판단함에 기초하여, 상기 플로우는 동작 750으로 진행될 수 있다. 동작 750에서, 응답은 사용자 애플리케이션으로 전송될 수 있다. 그렇지 않으면, 종료 플래그(166)가 설정된 것으로 판단함에 기초하여, 상기 플로우는 동작 740으로 진행될 수 있다. 동작 740에서, 트랜잭션 ID(162)가 KV 인덱스 병합기(150)로 전송될 수 있다. 동작 745에서, 트랜잭션 ID(162)와 관련된 트랜잭션별 인덱스 구조(140)는 삭제될 수 있다. 동작 750에서, 응답이 사용자 애플리케이션으로 전송될 수 있다.
KV 트랜잭션(158) 내에서 모든 개별 KV 입출력 요청들(168)이 완료된 후, KV 인덱스 병합기(150)은 트랜잭션별 인덱스 구조(140)로부터 메인 KV 인덱스 구조(130)로 KV 쌍(175)의 성공적으로 작성된 키들을 병합할 수 있다. 키들이 병합된 후에, 트랜잭션별 인덱스 구조(140)는 삭제될 수 있고, 트랜잭션 상태(195)를 모든 관련된 것들(예를 들어, 사용자 애플리케이션 및/또는 다른 애플리케이션들)이 볼 수 있도록 할 수 있다. 일부 실시 예들에서, 트랜잭션 입출력 관리자(145)는 트랜잭션 상태(195)가 관련된 것을 이용 가능하도록 만들 수 있다.
상술한 방법의 다양한 동작들은 상기 동작들을 수행할 수 있는 적절한 수단을 통하여, 예를 들면, 다양한 하드웨어 및/또는 소프트웨어 구성 요소(들), 회로들 및/또는 모듈들, 수행될 수 있다.
일부 실시 예들은 대화형 연속 인-디바이스 키-값 트랜잭션 프로세싱 시스템을 포함할 수 있다. 상기 시스템은 커맨드 패킷을 생성하도록 구성된 호스트 디바이스와 KV-SSD를 포함할 수 있다. 상기 시스템은 상기 호스트 디바이스로부터 상기 커맨드 패킷을 수신하고, 상기 커맨드 패킷 내에서 KV 트랜잭션을 감지하고, 상기 KV 트랜잭션과 연관된 하나 이상의 KV 입출력 요청들을 식별하고, 그리고 i) 새로운 트랜잭션별 인덱스 구조를 준비하거나 ii) 상기 KV 트랜잭션과 연관된 기존 트랜잭션별 인덱스 구조를 선택하는 것 중 적어도 하나를 실행하도록 구성된 커맨드 핸들러 모듈을 포함하는 KV 솔리드 스테이트 드라이브 (KV-SSD)를 포함할 수 있다.
일부 실시 예들에서, 상기 커맨드 핸들러 모듈은 상기 트랜잭션별 인덱스 구조에 상기 하나 이상의 KV 입출력 요청들을 추가하도록 설정된다. 일부 실시 예들에서, 상기 커맨드 핸들러 모듈은 상기 트랜잭션별 인덱스 구조로부터 상기 하나 이상의 KV 입출력 요청들을 제거하도록 설정된다. 상기 시스템은 상기 트랜잭션별 인덱스 구조의 상기 하나 이상의 KV 입출력 요청들을 개별적으로 처리하도록 설정된 트랜잭션 입출력 엔진을 더 포함할 수 있다. 일부 실시 예들에서, 상기 트랜잭션 입출력 엔진은 상기 트랜잭션별 인덱스 구조로부터 상기 KV-SSD의 장치 입출력 엔진으로 상기 하나 이상의 KV 입출력 요청들을 전송하고 상기 하나 이상의 KV 입출력 요청들의 실행의 순서를 유지하도록 설정된 트랜잭션 입출력 관리자를 포함한다. 일부 실시 예들에서, 상기 하나 이상의 KV 입출력 요청들이 완료됨에 따라, 상기 트랜잭션 입출력 관리자는 상기 개별적인 하나 이상의 KV 입출력 요청들 각각의 완료의 개별 상태를 포함하는 개별 알림을 상기 호스트 디바이스로 더 전송하도록 설정된다. 일부 실시 예들에서, 상기 트랜잭션 입출력 엔진은 KV 인덱스 병합기를 포함한다. 상기 트랜잭션 입출력 엔진은 상기 하나 이상의 KV 입출력 요청들과 관련된 종료 플래그를 감지하도록 더 설정될 수 있다. 상기 트랜잭션 입출력 엔진은 상기 하나 이상의 KV 입출력 요청들의 상기 처리를 완료하도록 더 설정될 수 있다. 상기 트랜잭션 입출력 엔진은 상기 KV 트랜잭션과 관련된 트랜잭션 ID를 상기 KV 인덱스 병합기로 전송하도록 더 설정될 수 있다. 상기 트랜잭션 입출력 엔진은 상기 트랜잭션 ID를 기반으로 상기 트랜잭션별 인덱스 구조를 삭제하도록 더 설정될 수 있다.
상기 KV-SSD는 메인 KV 인덱스 구조를 더 포함할 수 있다. 일부 실시 예들에서, 상기 KV 인덱스 병합기는 상기 트랜잭션 ID에 기초하여 상기 KV 트랜잭션과 연관된 상기 하나 이상의 KV 입출력 요청들과 연관된 하나 이상의 KV 쌍들을 상기 메인 KV 인덱스 구조에 병합하도록 설정된다. 일부 실시 예들에서, 상기 호스트 디바이스는 상기 KV 트랜잭션을 i) 커밋(commit)하거나 ii) 롤백(rollback)하거나 중 적어도 하나를 실행하도록 설정된다.
일부 실시 예들은 대화형 연속 인-디바이스 KV 트랜잭션을 프로세싱하는 방법을 포함한다. 상기 방법은 KV-SSD의 커맨드 핸들러 모듈이 커맨드 패킷을 수신하는 단계를 포함할 수 있다. 상기 방법은 상기 커맨드 핸들러 모듈이 KV 트랜잭션과 관련된 트랜잭션 태그가 상기 커맨드 패킷에 임베디드되었는지 여부를 결정하는 단계를 포함할 수 있다. 상기 방법은 상기 트랜잭션 태그가 상기 커맨드 패킷에 포함되어 있지 않다는 판단에 기초하여, 메인 KV 인덱스 구조를 사용하여 상기 KV 트랜잭션과 관련된 하나 이상의 KV 입출력 요청들을 처리하는 단계를 포함할 수 있다. 상기 방법은 상기 트랜잭션 태그가 상기 커맨드 패킷에 임베디드되어 있는 것을 판단함에 기초하여 상기 KV 트랜잭션과 관련된 하나 이상의 KV 입출력 요청들을 처리하는 단계를 포함할 수 있다.
상기 방법은 상기 커맨드 핸들러 모듈에 의해, 상기 KV 트랜잭션이 새로운 KV 트랜잭션인지를 판단하는 단계를 포함할 수 있다. 상기 방법은 상기 KV 트랜잭션이 상기 새로운 KV 트랜잭션인지를 판단함에 기초하여 새로운 트랜잭션별 인덱스 구조를 생성하고, 상기 새로운 트랜잭션별 인덱스 구조를 사용하여 상기 KV 트랜잭션과 연관된 상기 하나 이상의 KV 입출력 요청들을 처리하는 단계를 포함할 수 있다. 상기 방법은 상기 KV 트랜잭션이 상기 새로운 KV 트랜잭션이 아니라는 판단에 기초하여 기존 트랜잭션별 인덱스 구조를 선택하고 상기 기존 트랜잭션별 인덱스를 사용하여 상기 KV 트랜잭션과 관련된 상기 하나 이상의 KV 입출력 요청들을 처리하는 단계를 포함할 수 있다.
상기 방법은 상기 커맨드 핸들러 모듈이 상기 KV 트랜잭션이 KV 입출력 읽기 요청을 포함하는지 여부를 판단하는 단계를 포함할 수 있다. 상기 방법은 상기 KV 트랜잭션이 상기 KV 입출력 읽기 요청을 포함한다는 판단에 기초하여 i) 상기 새로운 트랜잭션별 인덱스 구조 또는 ii) 기존 트랜잭션별 인덱스 구조 중 적어도 하나에서 키를 검색하는 단계를 포함할 수 있다. 상기 방법은 i) 상기 새로운 트랜잭션별 인덱스 구조 또는 ii) 상기 기존 트랜잭션별 인덱스 구조 중 적어도 하나에서 키를 찾지 못함에 응답하여, 상기 메인 KV 인덱스 구조를 사용하여 상기 KV 트랜잭션과 관련된 상기 하나 이상의 KV 입출력 요청들을 처리하는 단계를 포함할 수 있다. 상기 방법은 i) 새로운 트랜잭션별 인덱스 구조 또는 ii) 기존 트랜잭션별 인덱스 구조 중 적어도 하나에서 키를 찾는 것에 응답하여, 상기 하나 이상의 KV 입출력 요청들과 관련된 항목을 i) 상기 새로운 트랜잭션별 인덱스 구조 또는 ii) 상기 기존 트랜잭션별 인덱스 구조 중 적어도 하나에 추가하는 단계 및 상기 메인 KV 인덱스 구조를 사용하여 상기 KV 트랜잭션과 관련된 상기 하나 이상의 KV 입출력 요청들을 처리하는 단계를 포함할 수 있다.
상기 방법은 KV-SSD의 트랜잭션 입출력 엔진의 트랜잭션 입출력 관리자가 상기 하나 이상의 KV 입출력 요청들을 상기 KV-SSD의 입출력 엔진에 전송하는 단계를 포함할 수 있다. 상기 방법은 상기 트랜잭션 입출력 관리자가 상기 하나 이상의 KV 입출력 요청들의 실행의 순서를 유지하는 단계를 포함할 수 있다. 상기 방법은 상기 하나 이상의 KV 입출력 요청들이 완료됨에 따라, 상기 트랜잭션 입출력 관리자는 상기 개별적인 하나 이상의 KV 입출력 요청들 각각의 완료의 개별 상태를 포함하는 개별 알림을 호스트 디바이스로 전송하는 단계를 포함할 수 있다. 상기 방법은 상기 트랜잭션 입출력 관리자는 상기 하나 이상의 KV 입출력 요청들과 관련된 종료 플래그를 감지하는 단계를 포함할 수 있다. 상기 방법은 상기 하나 이상의 KV 입출력 요청들의 처리를 완료하는 단계를 포함할 수 있다. 상기 방법은 상기 KV 트랜잭션과 관련된 트랜잭션 ID를 상기 트랜잭션 입출력 엔진의 KV 인덱스 병합기에 전송하는 단계를 포함할 수 있다. 상기 방법은 상기 트랜잭션 ID에 기초하여 i) 상기 새로운 트랜잭션별 인덱스 구조 또는 ii) 상기 기존 트랜잭션별 인덱스 구조 중 상기 적어도 하나를 삭제하는 단계를 포함할 수 있다.
상기 방법은 상기 KV 인덱스 병합기는 상기 트랜잭션 ID에 기초하여 상기 KV 트랜잭션과 연관된 상기 하나 이상의 KV 입출력 요청들과 연관된 하나 이상의 KV 쌍들을 상기 메인 KV 인덱스 구조에 병합하는 단계를 포함할 수 있다. 상기 방법은 상기 KV 트랜잭션과 관련된 완료의 트랜잭션 상태를 포함하는 통지를 상기 호스트 디바이스에 제공하는 단계를 포함할 수 있다. 상기 방법은 상기 호스트 디바이스가 상기 KV 트랜잭션을 커밋하는 단계를 포함할 수 있다. 상기 방법은 상기 호스트 디바이스가 상기 KV 트랜잭션을 롤백하는 단계를 포함할 수 있다.
본 명세서에서 개시된 실시 예들과 관련하여 기술된 방법이나 알고리즘 및 기능들의 블록들이나 단계들은 하드웨어, 프로세서에 의해 실행되는 소프트웨어 모듈, 또는 상기 하드웨어와 상기 소프트웨어의 조합으로 직접 구현될 수 있다. 상기 기능들이 소프트웨어로 구현되는 경우 상기 기능들은 비일시적 컴퓨터 판독될 수 있는 유형 매체에 하나 이상의 인스트럭션들 또는 코드로써 저장되거나 전송될 수 있다. 소프트웨어 모듈은 random access memory (RAM), 플래시 메모리(flash memory), read only memory (ROM), electrically programmable ROM (EPROM), electrically erasable programmable ROM (EEPROM), 레지스터(register), 하드 디스크(hard disk), 착탈식 디스크(removable disk), CD ROM, 또는 기타 기술 분야에서 알려진 저장 매체 상에 상주할 수 있다.
다음 설명은 본 발명의 특정 측면이 구현될 수 있는 적절한 기계(machine)나 기계들(machines)에 대한 간략하고 일반적인 설명을 제공하기 위한 것이다. 일반적으로, 기계 또는 기계들은 프로세서, 메모리 (예를 들어, RAM, ROM, 또는 기타 상태 보유 매체), 스토리지 디바이스, 비디오 인터페이스, 및 입/출력 인터페이스 포트들이 연결된 시스템 버스를 포함한다. 상기 기계 또는 기계들은 적어도 부분적으로 키보드, 마우스 등과 같은 종래의 입력 장치로부터의 입력뿐만 아니라 다른 기계로부터 받은 지시, 가상현실(virtual reality: VR) 환경과의 상호작용, 생체 인식 피드백 또는 기타 입력 신호에 의해 제어될 수 있다. 본 명세서에서 사용되는 “기계(machine)”이라는 용어는 단일 머신, 가상 머신 또는 함께 작동하는 기계들, 가상 머신들 또는 디바이스와 통신적으로 결합된 시스템을 포괄하는 것을 의도한다. 예시적인 기계들은 개인용 교통 장치 또는 대중 교통과 같은 교통 장치(예를 들어, 자동차, 기차, 택시 등)뿐만 아니라 개인용 컴퓨터, 워크스테이션, 서버, 휴대용 컴퓨터, 휴대용 장치, 전화, 태블릿 등과 같은 컴퓨팅 장치를 포함한다.
상기 기계 또는 기계들은 프로그래밍 가능 또는 불가능한 논리 장치 또는 어레이, 주문형 집적 회로 (Application Specific Integrated Circuit: ASIC), 임베디드 컴퓨터(embedded computer), 스마트 카드(smart card) 등과 같은 임베디드 컨트롤러(embedded controller)를 포함할 수 있다. 상기 기계 또는 기계들은 예를 들면, 네트워크 인터페이스, 모뎀 또는 기타 통신 커플링을 통해 하나 이상의 원격 머신들에 연결되는 하나 이상의 연결들을 활용할 수 있다. 기계들은 인트라넷(intranet), 인터넷, 근거리 통신망(local area networks), 광역 통신망(wide area network) 등과 같은 물리적 및/또는 논리적 네트워크를 통해 상호 연결될 수 있다. 당업자는 네트워크 통신이 무선 주파수(radio frequency: RF), 위성(satellite), 마이크로파(microwave), Institute of Electrical and Electronics Engineers (IEEE) 545.11, Bluetooth®광학, 적외선, 케이블, 레이저 등을 포함한 다양한 유선 및/또는 무선 단거리 또는 장거리 캐리어 및 프로토콜을 활용할 수 있음을 인식할 수 있다.
본 개시의 실시 예들은 기능, 절차, 데이터 구조, 애플리케이션 프로그램 등을 포함하는 관련 데이터를 참조하거나 이와 관련하여 설명 될 수 있고, 이는 기계에 의해 액세스 될 때 기계가 태스크(task)을 수행하거나 추상 데이터 유형을 정의하거나 낮은 수준 하드웨어 컨텍스트를 유발할 수 있다. 예를 들면, 관련 데이터는 하드 드라이브, 플로피 디스크, 광학 스토리지, 테이프, 플래시 메모리, 메모리 스틱, 디지털 비디오 디스크, 생물학적 스토리지 등을 포함하는 휘발성 및/또는 비휘발성 메모리 (예를 들어, RAM, ROM 등) 또는 다른 스토리지 디바이스와 이와 관련된 스토리지 미디어에 저장할 수 있다. 관련 데이터는 물리적 및/또는 논리적 네트워크를 포함한 전송 환경을 통해 패킷, 직렬 데이터, 병렬 데이터, 전파된 신호 등의 형태로 전달될 수 있고, 압축 또는 암호화된 형식으로 사용될 수 있다. 관련 데이터를 분산된 환경(distributed environment)에서 사용할 수 있고, 머신 액세스를 위해 로컬 및/또는 원격으로 저장될 수 있다.
예시된 실시 예들과 관련하여 본 개시의 원칙을 기술하고 설명하기 때문에, 도시된 실시 예들은 그러한 원칙에서 벗어나지 않고 배치와 세부사항에서 수정될 수 있으며 원하는 방식으로 결합될 수 있음이 인식될 것이다. 앞에서 설명한 내용은 특정 실시 예들에 초점을 맞추고 있다. 그러나, 다른 구성들도 시도될 수 있다. 특히, “본 발명의 실시 예에 따른(according to an embodiment of the inventive concept)” 또는 “기타 등등”은 본 명세서에서 사용되더라도, 이러한 문구들은 일반적으로 실시 예의 가능성을 참조하기 위한 것이며, 본 발명을 특정 실시 예의 구성으로 제한하기 위한 것은 아니다. 여기서 사용되는 바와 같이, 이러한 용어들은 다른 실시 예들에 결합할 수 있는 동일하거나 다른 실시 예들을 참조할 수 있다.
본 개시의 실시 예들은 하나 이상의 프로세서가 실행할 수 있는 인스트럭션들(instructions)으로 구성된 비일시적으로 기계에서 판독될 수 있는 매체를 포함할 수 있고, 상기 인스트럭션들은 본 명세서에서 설명된 본 발명의 요소들을 수행하는 인스트럭션들을 포함할 수 있다.
전술한 실시 예들은 본 발명의 제한하는 것으로 해석되어서는 안 된다. 몇 가지 실시 예들이 설명되었지만, 당업자는 본 개시의 새로운 지침들과 장점으로부터 실질적으로 벗어나지 않으면서 그러한 실시 예들에 가능한 많은 수정들이 가능하다는 것을 쉽게 이해할 것이다. 따라서, 이러한 모든 변경 사항들은 청구항에 정의된 바와 같이 본 개시의 범위에 포함되도록 의도된다.

Claims (20)

  1. 대화형 연속 인-디바이스 키-값(key-value: KV) 트랜잭션 프로세싱 시스템에 있어서,
    커맨드 패킷을 생성하는 호스트 디바이스; 및
    상기 호스트 디바이스로부터 상기 커맨드 패킷을 수신하고, 상기 커맨드 패킷 내에서 KV 트랜잭션을 감지하고, 상기 KV 트랜잭션과 연관된 하나 이상의 KV 입출력 요청들을 식별하고, 및 i) 새로운 트랜잭션별 인덱스 구조를 준비하거나 ii) 상기 KV 트랜잭션과 연관된 기존 트랜잭션별 인덱스 구조를 선택하는 것 중 적어도 하나를 실행하도록 구성된 커맨드 핸들러 모듈을 포함하는 KV 솔리드 스테이트 드라이브(KV-SSD)를 포함하는 시스템.
  2. 제 1 항에 있어서,
    상기 커맨드 핸들러 모듈은 상기 트랜잭션별 인덱스 구조에 상기 하나 이상의 KV 입출력 요청들을 추가하도록 설정되는 시스템.
  3. 제 2 항에 있어서,
    상기 커맨드 핸들러 모듈은 상기 트랜잭션별 인덱스 구조로부터 상기 하나 이상의 KV 입출력 요청들을 제거하도록 설정되는 시스템.
  4. 제 2 항에 있어서,
    상기 트랜잭션별 인덱스 구조의 상기 하나 이상의 KV 입출력 요청들을 개별적으로 처리하도록 설정된 트랜잭션 입출력 엔진을 더 포함하는 시스템.
  5. 제 4 항에 있어서,
    상기 트랜잭션 입출력 엔진은 상기 트랜잭션별 인덱스 구조로부터 상기 KV-SSD의 장치 입출력 엔진으로 상기 하나 이상의 KV 입출력 요청들을 전송하고 상기 하나 이상의 KV 입출력 요청들의 실행의 순서를 유지하도록 설정된 트랜잭션 입출력 관리자를 포함하는 시스템.
  6. 제 5 항에 있어서,
    상기 하나 이상의 KV 입출력 요청들이 완료됨에 따라, 상기 트랜잭션 입출력 관리자는 상기 개별적인 하나 이상의 KV 입출력 요청들 각각의 완료의 개별 상태를 포함하는 개별 알림을 상기 호스트 디바이스로 전송하도록 더 설정되는 시스템.
  7. 제 4 항에 있어서,
    상기 트랜잭션 입출력 엔진은 KV 인덱스 병합기를 포함하며,
    트랜잭션 입출력 관리자는 상기 하나 이상의 KV 입출력 요청들과 관련된 종료 플래그를 감지하고, 상기 하나 이상의 KV 입출력 요청들의 상기 처리를 완료하고, 상기 KV 트랜잭션과 관련된 트랜잭션 ID를 상기 KV 인덱스 병합기로 전송하고, 그리고 상기 트랜잭션 ID를 기반으로 상기 트랜잭션별 인덱스 구조를 삭제하도록 더 설정되는 시스템.
  8. 제 7 항에 있어서,
    메인 KV 인덱스 구조를 더 포함하고,
    상기 KV 인덱스 병합기는 상기 트랜잭션 ID에 기초하여 상기 KV 트랜잭션과 연관된 상기 하나 이상의 KV 입출력 요청들과 연관된 하나 이상의 KV 쌍들을 상기 메인 KV 인덱스 구조에 병합하도록 설정되는 시스템.
  9. 제 1 항에 있어서,
    상기 호스트 디바이스는 상기 KV 트랜잭션을 i) 커밋(commit)하거나 ii) 롤백(rollback)하거나 중 적어도 하나를 실행하도록 설정되는 시스템.
  10. 대화형 연속 인-디바이스 KV 트랜잭션을 프로세싱하는 방법에 있어서,
    KV-SSD의 커맨드 핸들러 모듈이 커맨드 패킷을 수신하는 단계;
    상기 커맨드 핸들러 모듈이 KV 트랜잭션과 관련된 트랜잭션 태그가 상기 커맨드 패킷에 임베디드되었는지를 판단하는 단계; 및
    상기 트랜잭션 태그가 상기 커맨드 패킷에 임베디드된 것을 판단함에 기초하여 상기 KV 트랜잭션과 관련된 하나 이상의 KV 입출력 요청들을 처리하는 단계를 포함하는 방법.
  11. 제 10 항에 있어서,
    상기 커맨드 패킷은 제1 커맨드 패킷이고,
    상기 방법은,
    상기 커맨드 핸들러 모듈이 제2 커맨드 패킷을 수신하는 단계;
    상기 커맨드 핸들러 모듈이 상기 KV 트랜잭션과 연관된 상기 트랜잭션 태그가 상기 제2 커맨드 패킷에 임베디드되었는지 여부를 판단하는 단계; 및
    상기 트랜잭션 태그가 상기 제2 커맨드 패킷에 포함되어 있지 않다는 판단에 기초하여, 메인 KV 인덱스 구조를 사용하여 상기 KV 트랜잭션과 관련된 상기 하나 이상의 KV 입출력 요청들을 처리하는 단계를 더 포함하는 방법.
  12. 제 10 항에 있어서,
    상기 커맨드 핸들러 모듈이 상기 KV 트랜잭션이 새로운 KV 트랜잭션인지를 판단하는 단계;
    상기 KV 트랜잭션이 상기 새로운 KV 트랜잭션인지를 판단함에 기초하여 새로운 트랜잭션별 인덱스 구조를 생성하고, 상기 새로운 트랜잭션별 인덱스 구조를 사용하여 상기 KV 트랜잭션과 연관된 상기 하나 이상의 KV 입출력 요청들을 처리하는 단계; 및
    상기 KV 트랜잭션이 상기 새로운 KV 트랜잭션이 아니라는 판단에 기초하여 기존 트랜잭션별 인덱스 구조를 선택하고 상기 기존 트랜잭션별 인덱스 구조를 사용하여 상기 KV 트랜잭션과 관련된 상기 하나 이상의 KV 입출력 요청들을 처리하는 단계를 더 포함하는 방법.
  13. 제 12 항에 있어서,
    상기 커맨드 핸들러 모듈이 상기 KV 트랜잭션이 KV 입출력 읽기 요청을 포함하는지 여부를 판단하는 단계; 및
    상기 KV 트랜잭션이 상기 KV 입출력 읽기 요청을 포함한다는 판단에 기초하여 i) 상기 새로운 트랜잭션별 인덱스 구조 또는 ii) 상기 기존 트랜잭션별 인덱스 구조 중 적어도 하나에서 키를 검색하는 단계를 더 포함하는 방법.
  14. 제 13 항에 있어서,
    i) 상기 새로운 트랜잭션별 인덱스 구조 또는 ii) 상기 기존 트랜잭션별 인덱스 구조 중 상기 적어도 하나에서 상기 키를 찾지 못함에 응답하여, 메인 KV 인덱스 구조를 사용하여 상기 KV 트랜잭션과 관련된 상기 하나 이상의 KV 입출력 요청들을 처리하는 단계를 더 포함하는 방법.
  15. 제 13 항에 있어서,
    i) 상기 새로운 트랜잭션 별 인덱스 구조 또는 ii) 상기 기존 트랜잭션 별 인덱스 구조 중 상기 적어도 하나에서 키를 찾는 것에 응답하여, 상기 하나 이상의 KV 입출력 요청들과 관련된 항목을 i) 상기 새로운 트랜잭션별 인덱스 구조 또는 ii) 상기 기존 트랜잭션별 인덱스 구조 중 상기 적어도 하나에 추가하는 단계; 및
    메인 KV 인덱스 구조를 사용하여 상기 KV 트랜잭션과 관련된 상기 하나 이상의 KV 입출력 요청들을 처리하는 단계를 더 포함하는 방법.
  16. 제 13 항에 있어서,
    상기 KV-SSD의 트랜잭션 입출력 엔진의 트랜잭션 입출력 관리자가 상기 하나 이상의 KV 입출력 요청들을 상기 KV-SSD의 입출력 엔진에 전송하는 단계; 및
    상기 트랜잭션 입출력 관리자가 상기 하나 이상의 KV 입출력 요청들의 실행의 순서를 유지하는 단계를 더 포함하는 방법.
  17. 제 16 항에 있어서,
    상기 하나 이상의 KV 입출력 요청들이 완료됨에 따라, 상기 트랜잭션 입출력 관리자는 상기 개별적인 하나 이상의 KV 입출력 요청들 각각의 완료의 개별 상태를 포함하는 개별 알림을 호스트 디바이스로 전송하는 단계;
    상기 트랜잭션 입출력 관리자는 상기 하나 이상의 KV 입출력 요청들과 관련된 종료 플래그를 감지하는 단계;
    상기 하나 이상의 KV 입출력 요청들의 처리를 완료하는 단계;
    상기 KV 트랜잭션과 관련된 트랜잭션 ID를 상기 트랜잭션 입출력 엔진의 KV 인덱스 병합기에 전송하는 단계; 및
    상기 트랜잭션 ID에 기초하여 i) 상기 새로운 트랜잭션별 인덱스 구조 또는 ii) 상기 기존 트랜잭션별 인덱스 구조 중 상기 적어도 하나를 삭제하는 단계를 더 포함하는 방법.
  18. 제 17 항에 있어서,
    상기 KV 인덱스 병합기는 상기 트랜잭션 ID에 기초하여 상기 KV 트랜잭션과 연관된 상기 하나 이상의 KV 입출력 요청들과 연관된 하나 이상의 KV 쌍들을 메인 KV 인덱스 구조에 병합하는 단계를 더 포함하는 방법.
  19. 제 17 항에 있어서,
    상기 KV 트랜잭션과 관련된 완료의 트랜잭션 상태를 포함하는 통지를 상기 호스트 디바이스에 제공하는 단계를 더 포함하는 방법.
  20. 제 17 항에 있어서,
    상기 호스트 디바이스가 상기 KV 트랜잭션을 커밋하는 단계를 더 포함하는 방법.
KR1020210046985A 2020-06-16 2021-04-12 키-값 솔리드 스테이트 드라이브를 사용한 대화형 연속 인-디바이스 트랜잭션 프로세싱 KR20210155748A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202063039979P 2020-06-16 2020-06-16
US63/039,979 2020-06-16
US16/992,096 US20210390091A1 (en) 2020-06-16 2020-08-12 Interactive continuous in-device transaction processing using key-value (kv) solid state drives (ssds)
US16/992,096 2020-08-12

Publications (1)

Publication Number Publication Date
KR20210155748A true KR20210155748A (ko) 2021-12-23

Family

ID=78826569

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210046985A KR20210155748A (ko) 2020-06-16 2021-04-12 키-값 솔리드 스테이트 드라이브를 사용한 대화형 연속 인-디바이스 트랜잭션 프로세싱

Country Status (4)

Country Link
US (1) US20210390091A1 (ko)
KR (1) KR20210155748A (ko)
CN (1) CN113806023A (ko)
TW (1) TW202219786A (ko)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7328440B2 (en) * 2000-12-22 2008-02-05 Gxs, Inc. Interface between front-end systems and back-end systems
US10261972B2 (en) * 2016-09-07 2019-04-16 IntelligenceNODE Consulting Private Limited Methods and systems for similarity matching
US20200226011A1 (en) * 2019-01-14 2020-07-16 Fast River Technologies Inc. Policy-based distributed transactional processing in a distributed system

Also Published As

Publication number Publication date
TW202219786A (zh) 2022-05-16
CN113806023A (zh) 2021-12-17
US20210390091A1 (en) 2021-12-16

Similar Documents

Publication Publication Date Title
US11036540B2 (en) Transaction commit operations with thread decoupling and grouping of I/O requests
US10732836B2 (en) Remote one-sided persistent writes
US10802766B2 (en) Database with NVDIMM as persistent storage
US10268716B2 (en) Enhanced hadoop framework for big-data applications
US20100114824A1 (en) Replication for common availability substrate
US10270852B2 (en) Data migration apparatus and system
CN111078607A (zh) 面向rdma与非易失性内存的网络访问编程框架部署方法及系统
CN111488492A (zh) 用于检索图数据库的方法和装置
JP5331050B2 (ja) データ同期システム、データ同期方法、情報処理装置、情報処理方法、およびプログラム
US20200387412A1 (en) Method To Manage Database
Kasu et al. FTLADS: Object-logging based fault-tolerant big data transfer system using layout aware data scheduling
CN104834644B (zh) 一种自搜索存储装置
KR20210155748A (ko) 키-값 솔리드 스테이트 드라이브를 사용한 대화형 연속 인-디바이스 트랜잭션 프로세싱
KR20230117692A (ko) 하이브리드 데이터베이스 가속 장치, 시스템 및 방법
KR102280443B1 (ko) 셀렉트 쿼리 처리 시 네트워크 비용 절감을 위해 멀티 캐시를 구비한 클라우드 데이터베이스 시스템
Körner et al. Distributed model checking using ProB
KR20200078426A (ko) 복구 서버 및 컴퓨터 프로그램
US11269736B2 (en) Method to manage database failure
US10963186B2 (en) Latent multiplicity detection
US11593030B2 (en) Cross-stream transactions in a streaming data storage system
US20240045591A1 (en) Increasing oltp throughput by improving the performance of logging using persistent memory storage
US20220413940A1 (en) Cluster computing system and operating method thereof
KR20230114178A (ko) 낮은 레이턴시를 가지는 다중 저장 장치 시스템
CN116149803A (zh) 数据库的事务处理方法、装置、电子设备及存储介质
CN112486421A (zh) 一种数据存储方法、装置、电子设备及存储介质