KR101529651B1 - 메모리 저장 장치, 데이터베이스를 위한 트랜잭션 기능을 지원하는 방법 및 메모리 시스템 - Google Patents

메모리 저장 장치, 데이터베이스를 위한 트랜잭션 기능을 지원하는 방법 및 메모리 시스템 Download PDF

Info

Publication number
KR101529651B1
KR101529651B1 KR1020140113390A KR20140113390A KR101529651B1 KR 101529651 B1 KR101529651 B1 KR 101529651B1 KR 1020140113390 A KR1020140113390 A KR 1020140113390A KR 20140113390 A KR20140113390 A KR 20140113390A KR 101529651 B1 KR101529651 B1 KR 101529651B1
Authority
KR
South Korea
Prior art keywords
transaction
page
storage device
command
pages
Prior art date
Application number
KR1020140113390A
Other languages
English (en)
Other versions
KR20150003689A (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 성균관대학교산학협력단
Priority to KR1020140113390A priority Critical patent/KR101529651B1/ko
Publication of KR20150003689A publication Critical patent/KR20150003689A/ko
Application granted granted Critical
Publication of KR101529651B1 publication Critical patent/KR101529651B1/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
    • G06F9/467Transactional 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
    • 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

Abstract

본 발명의 데이터베이스 관리 시스템과 파일 시스템과 연동하는 메모리 저장 장치는 CoW(Copy-On-Write) 매커니즘을 활용하여 상기 데이터베이스 관리 시스템을 위한 트랜잭션(transaction)의 원자성을 보장하는 플래시 변환 계층(FTL:Flash Traslation Layer)을 포함한다.

Description

메모리 저장 장치, 데이터베이스를 위한 트랜잭션 기능을 지원하는 방법 및 메모리 시스템{MEMORY STORAGE APPARATUS, MEMORY SYSTEM AND TRANSACTION FUNCTION SUPPORT METHOD FOR DATABASE}
본 발명은 데이터베이스 시스템에 관한 것으로, 보다 상세하게는 데이터 베이스 시스템의 입출력 성능을 향상시키기 위한 장치 및 방법에 관한 것이다.
스마트폰과 같은 모바일 장치에서 동작하는 페이스북(Facebook), 트위터(twitter), 지메일(Gmail)과 같은 대부분의 애플리케이션들은 데이터의 관리에 SQLite를 사용하고 있다. 모바일 장치에서 SQLite를 사용하는 이유는 SQL 인터페이스를 통한 개발의 생산성 향상과 트랜잭션 기능을 제공하기 때문이다.
그러나 SQLite가 트랜잭션 기능을 제공하기 위해 도입하고 있는 페이지 기반의 저널링(journaling) 기법은 스마트폰의 IO 시스템에 많은 부담을 주고 있다.
도 1은 SQLite의 저널 모드를 설명하기 위한 개념도이다.
도 1을 참조하면, SQLite가 사용하는 기법은 갱신(update)을 수행할 때, 갱신되기 이전의 페이지 전체를 별도로 분리된 롤백 파일(rollback file)에 저장하거나(롤백 모드(rollback mode)), 갱신된 페이지를 WAL(write-ahed log)이라는 별도의 파일에 복사하였다가 나중에 원본 데이터베이스에 반영한다(WAL mode). 이러한 SQLite의 저널링 기법은 많은 IO를 유발하는 구조적 문제점을 지니고 있어, 상대적으로 느린 스마트폰의 저장장치에 많은 부담을 주는 것으로 알려져 있다. 특히, 안드로이드 플랫폼에서 발생하는 쓰기 IO 명령중 70% 정도가 SQLite의 데이터베이스와 연관되어 있다고 알려져 있다. 향후 안드로이드와 같은 스마트폰 플랫폼의 사용대수가 PC를 넘어설 것으로 예상되고 있기 때문에, SQLite의 IO 성능을 향상시키는 것은 매우 중요한 문제라고 할 수 있다.
결론적으로, SQLite는 트랜잭션 원자성과 영속성을 지원을 위해 롤백 저널 파일과 WAL파일로 많은 쓰기 연산을 유발하며, 특히 명시적으로 운영체제의 버퍼에서 저장장치로 완전히 쓰여지는 것을 보장하기 위해 sync call을 빈번하게 호출한다. 이러한 저널 기법의 IO 비효율성은 SQLite를 사용하는 응용프로그램들의 주요 원인으로 지목되고 있다.
상술한 문제점을 해결하기 위한 본 발명의 목적은 데이터베이스의 트랜잭션 개념을 지원하는 플래시메모리 기반 저장장치 수준에서 제공함으로써, SQLite와 같이 트랜잭션 기능이 필요한 응용프로그램의 트랜잭션 기능 구현에 따른 복잡도를 제거하고, IO를 효율적으로 제공하여 처리속도를 향상시키는 것이다.
특히, 이러한 문제점을 개선할 수 있는 본 발명의 플래시 메모리 기반 저장 장치의 FTL(Flash Translation Layer)을 X-FTL이라고 부를 수 있다.
상기한 목적을 달성하기 위한 본 발명의 데이터베이스 관리 시스템과 파일 시스템과 연동하는 메모리 저장 장치는 CoW(Copy-On-Write) 매커니즘을 활용하여 상기 데이터베이스 관리 시스템을 위한 트랜잭션(transaction)의 원자성을 보장하는 플래시 변환 계층(FTL:Flash Traslation Layer)을 포함할 수 있다.
상기 플래시 변환 계층은 트랜잭션을 관리하는 트랜잭션 테이블을 생성하는 트랜잭션 테이블 생성부를 포함하되, 상기 트랜잭션 테이블은 각각의 페이지에 대해, 트랜잭션을 식별하는 트랜잭션 아이디(ID), 논리적 페이지 위치, 물리적 페이지 위치 및 트랜잭션의 현재 상태 정보를 포함할 수 있다.
상기 플래시 변환 계층은 논리적 페이지 위치 및 물리적 페이지 위치의 매핑 관계를 나타내는 페이지 매핑 테이블과 상기 트랜잭션 테이블을 혼합하여 사용할 수 있다.
상기 트랜잭션의 현재 상태 정보는 해당 트랜잭션이 진행 중인 트랜잭션인지, 종료된 트랜잭션인지, 취소된 트랜잭션인지에 대한 정보를 포함할 수 있다.
상기 플래시 변환 계층은 상기 트랜잭션 테이블에서 업데이트된 페이지들의 이전 위치에 쓰인 페이지들은 트랜잭션이 종료되기 전까지 희생 페이지로 선택하지 않고, 트랜잭션이 취소되는 경우 롤백(rollback) 작업을 위해 사용할 수 있다.
상기 플래시 변환 계층은 활성화중인 트랜잭션이 성공적으로 종료되었을 경우, 상기 트랜잭션 테이블에서 유지되던 이전 위치의 페이지들을 관리 대상에서 제외하여 희생 페이지로 선택할 수 있도록 할 수 있다.
상기 플래시 변환 계층은 쓰기 요청을 수행하는 명령어, 읽기 요청을 수행하는 명령어, 트랜잭션의 상태를 완료(commit)로 변경하는 명령어 및 트랜잭션의 상태를 취소(abort)로 변경하는 명령어를 사용할 수 있다.
상기 트랜잭션 테이블에는 특정 페이지가 변경되어 쓰기 요청이 수신된 시점에만 트랜잭션 정보가 추가될 수 있다.
상기 트랜잭션 테이블의 각각의 엔트리는 가장 최신 페이지 번호와 가장 최근 종료되어 기록된 이전 버전의 페이지 번호를 유지하면서 각 트랜잭션 요청에 대응하는 페이지를 제공하는데 사용될 수 있다.
상기 플래시 변환 계층은 읽기 요청 명령어가 들어오는 경우, 상기 트랙잭션 아이디와 상기 논리적 페이지 번호가 모두 일치하는 엔트리가 상기 트랜잭션 테이블에 존재하는 경우에만 상기 최신 페이지를 전달하고, 그렇지 않은 경우, 상기 이전 버전의 페이지를 전달할 수 있다.
상기 플래시 변환 계층은 트랜잭션을 종료하라는 종료(commit) 명령어가 들어오는 경우, 종료 요청 관련 트랙잭션에 의해 업데이트된 모든 페이지가 물리적 낸드(nand) 페이지로 온전히 쓰여지길 기다리고, 이후 상기 트랜잭션 테이블 내의 상기 종료 요청 관련 트랜잭션에 대한 현재 상태 정보를 모두 종료(commit)로 변경하고, 해당 트랜잭션 테이블 정보를 상기 저장 장치에 영구적으로 기록한 뒤, 상기 트랜잭션 테이블에 변경된 매핑 정보를 반영할 수 있다.
상기 메모리 저장 장치는 eMMC(embedded Multi Media Card) 또는 플래시 메모리 기반 저장 장치일 수 있다.
상기한 목적을 달성하기 위한 본 발명의 데이터베이스 관리 시스템과 파일 시스템과 연동하는 메모리 저장 장치에서 트랜잭션을 지원하는 방법은 상기 메모리 저장 장치의 플래시 변환 계층이 CoW(Copy-On-Write) 매커니즘을 활용하여 상기 데이터베이스 관리 시스템을 위한 트랜잭션(transaction)의 원자성을 보장하는 단계를 포함할 수 있다.
상기 트랜잭션의 원자성 보장 단계는 트랜잭션을 관리하는 트랜잭션 테이블을 생성하는 단계를 포함하되, 상기 트랜잭션 테이블은 각각의 페이지에 대해, 트랜잭션 아이디(ID), 논리적 페이지 위치, 물리적 페이지 위치 및 트랜잭션의 현재 상태 정보를 포함할 수 있다.
상기한 목적을 달성하기 위한 본 발명의 메모리 시스템은 디바이스의 데이터 관리를 수행하는 데이터베이스 시스템, 상기 데이터베이스 관리 시스템과 메모리 저장 장치의 중간에서 트랜잭션 기능을 이용할 수 있도록 메신저 역할을 수행하는 파일 시스템 및 상기 데이터베이스 관리 시스템과 상기 파일 시스템과 연동하는 메모리 저장 장치를 포함하되, 상기 메모리 저장 장치는 CoW(Copy-On-Write) 매커니즘을 활용하여 상기 데이터베이스 관리 시스템을 위한 트랜잭션(transaction)의 원자성을 보장하는 플래시 변환 계층(FTL:Flash Traslation Layer)을 포함할 수 있다.
상기 플래시 변환 계층은 트랜잭션을 관리하는 트랜잭션 테이블을 생성하는 트랜잭션 테이블 생성부를 포함하되, 상기 트랜잭션 테이블은 각각의 페이지에 대해, 트랜잭션 아이디(ID), 논리적 페이지 위치, 물리적 페이지 위치 및 트랜잭션의 현재 상태 정보를 포함할 수 있다.
상기 데이터베이스 관리 시스템은 변경된 페이지를 다른 저널 파일이 아닌 데이터베이스 파일에 곧바로 적용하기 위해 저널 모드를 오프(off)시킬 수 있다.
상기 데이터베이스 관리 시스템은 상기 메모리 자장 장치에 트랜잭션의 취소(abort)와 관련된 작업을 수행하도록 지시하기 위해, 디바이스 제어 함수(ioctl)를 통해 취소(abort) 명령을 전달할 수 있다.
상기 파일 시스템은 트랜잭션에 의해 특정 페이지가 수정되었을 경우, 상기 메모리 저장 장치로 트랜잭션 아이디를 함께 전달할 수 있다.
상기 파일 시스템은 읽기 또는 쓰기 요청이 들어올 경우, 트랜잭션 아이디 및 읽기 또는 쓰기 요청을 할 놀리 페이지 번호를 포함하는 형태의 명령어로 변환하여 상기 메모리 저장 장치로 전달할 수 있다.
상기 파일 시스템은 트랜잭션의 종료 또는 취소 작업과 관련된 기능이 호출되는 경우, 이를 트랜잭션 아이디 및 트랜잭션의 현재 상태를 포함하는 형태의 명령어로 변환하여 상기 메모리 저장 장치로 전송하되, 트랜잭션의 취소 후에도 상기 파일 시스템 상의 버퍼에 남아 있을 수 있는 페이지는 삭제할 수 있다.
본 발명의 메모리 저장 장치, 데이터베이스를 위한 트랜잭션 기능을 지원하는 방법 및 메모리 시스템에 따르면, 다음과 같은 효과를 제공할 수 있다.
(1) 기존 SQLite의 롤백이나 WAL 같은 저널기법과 달리, 추가적인 부담 없이 스토리지 시스템에서 트랜잭션의 원자성과 영속성(durability)를 제공할 수 있다.
(2) SQLite의 트랜잭션 지원에 따른 저널링 부담과 저널링 파일시스템의 메타데이터를 쓰는 비용을 제거하여 데이터베이스 시스템과 파일시스템의 성능을 향상시킬 수 있다.
(3) 저널링 파일 시스템을 단독으로 본 발명에 따른 X-FTL상에서 구동할 경우 저널링 기법을 끄더라도 FULL 저널링과 동일한 수준의 일관성을 제공할 수 있으며, 이에 따라 저널링 파일 시스템의 중복된 데이터 쓰기와 데이터 블록-메타데이터 쓰기 순서 정렬(write ordering), 메타데이터 관리 부담을 제거할 수 있다.
즉, 발명자들은 OpenSSD라 불리는 SSD개발 HW/SW 플랫폼을 사용하여 본 발명에 따른 X-FTL을 구현하였으며, SQLite와 Linux EXT4 파일시스템이 본 발명에 따른 X-FTL의 트랜잭션 기능을 사용하도록 수정하였다.
도 1은 SQLite의 저널 모드를 설명하기 위한 개념도,
도 2는 일반적인 메모리 시스템을 설명하기 위한 개념도,
도 3은 본 발명의 일 실시예에 따른 메모리 시스템을 개략적으로 나타낸 블록도,
도 4는 본 발명의 일 실시예에 따른 메모리 저장 장치를 구체적으로 나타낸 상세블록도,
도 5a 내지 5c는 플래시 칩의 사용 정도를 조절하여 한 블록당 유효한 페이지 비율을 조절하면서 수행한 실험에 대한 SQLite의 수행 시간을 나타낸 그래프,
도 6은 트랜잭션당 업데이트하는 페이지의 개수가 5개인 경우에 대한 I/O 상황을 나타낸 표,
도 7a 및 7b는 "FTL-side" 열의 측정된 값들을 표현한 그래프,
도 8은 실제 4가지 안드로이드 스마트 폰의 트레이스를 분석한 표,
도 9는 실제 4가지의 안드로이드 스마트 폰 워크로드에 대한 수행 시간을 비교한 그래프,
도 10은 TPC-C의 5가지 트랜잭션 종류들의 비율을 조정하여 총 4가지의 워크 로드를 실험한 표,
도 11은 TPC-C 실험을 통해 얻어진 경롸를 분당 트랜잭션 수행 횟수로 나타낸 표,
도 12는 FIO 성능 평가 도구를 이용하여 X-FTL이 파일 시스템 자체에 미치는 영향을 나타낸 그래프,
도 13은 3가지 모드의 평균 복구 시간을 나타낸 표이다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 실시예를 가질 수 있는 바, 특정 실시예들을 도면에 예시하고 상세하게 설명하고자 한다.
그러나, 이는 본 발명을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
제 1, 제 2 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 본 발명의 권리 범위를 벗어나지 않으면서 제 1 구성요소는 제 2 구성요소로 명명될 수 있고, 유사하게 제 2 구성요소도 제 1 구성요소로 명명될 수 있다. 및/또는 이라는 용어는 복수의 관련된 기재된 항목들의 조합 또는 복수의 관련된 기재된 항목들 중의 어느 항목을 포함한다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다.
본 출원에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미를 가진 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
이하, 첨부한 도면들을 참조하여, 본 발명의 바람직한 실시예를 보다 상세하게 설명하고자 한다. 본 발명을 설명함에 있어 전체적인 이해를 용이하게 하기 위하여 도면상의 동일한 구성요소에 대해서는 동일한 참조부호를 사용하고 동일한 구성요소에 대해서 중복된 설명은 생략한다.
도 2는 일반적인 메모리 시스템을 설명하기 위한 개념도이다. 도 2에 도시된 바와 같이, 메모리 시스템은 애플리케이션 관련 구성(10), 파일 시스템(20) 및 메모리 저장 장치(30)를 포함할 수 있다.
도 2를 참조하면, 애플리케이션 관련 구성(10), 파일 시스템(20) 및 메모리 저장 장치(30)는 스마트 폰, PDA, 태블릿 PC 등과 같은 휴대용 단말에 포함될 수 있다. 여기서, 애플리케이션 관련 구성(10)은 애플리케이션 계층(layer)과 관련된 구성으로서, 애플리케이션을 실행 및 애플리케이션에서 생성되는 데이터를 저장 및 관리할 수 있다. 이때, 전술한 바와 같이, 대부분의 애플리케이션은 SQLite(12)를 사용하여 데이터를 관리한다. 이렇게 데이터를 관리하는 SQLite(12)를 데이터베이스 관리 시스템 또는 데이터베이스 시스템 또는 데이터베이스 시스템 소프트웨어라 부를 수 있다. SQLite(12)의 롤백 모드와 WAL 모드, 저널링 파일 시스템의 데이터 저널과 메타데이터 저널은 업데이트 연산의 긴 대기시간 동안 업데이트된 페이지의 쓰기 요청에 대한 원자성을 보장하기 위해 사용될 수 있다. 다만, 저널링은 페이지 쓰기 시에 많은 양의 중복적인 데이터 쓰기가 유발되는 단점이 있다.
파일 시스템(20)은 SQLite(12)와 메모리 저장 장치(30)의 플래시 변환 계층(FTL: Flash Translation Layer) 중간에서 SQLite(12)가 데이터베이스에 접근할 때 메모리 저장 장치(30)의 플래시 변환 계층의 트랜잭션 기능을 이용할 수 있도록 메신저 역할을 한다. 또한, 애플리케이션 관련 구성(10)의 SQLite(12)로부터 쓰기, 읽기 등의 요청을 fsync 시스템 콜 또는 ioctl을 통해 수신하는 경우, 이를 메모리 저장 장치(30)의 인터페이스에 적절한 명령어 형태로 변환하여 전달한다. 예컨대, 읽기 또는 쓰기 요청이 들어오는 경우, 이를 read(t,p) 또는 write(t,p)의 형태로 변환하여 상기 인터페이스로 전달할 수 있다.
메모리 저장 장치(30)는 파일 시스템(20)으로부터 명령을 받아 트랜잭션을 수행할 수 있다. 메모리 저장 장치(30)는 저장 장치 인터페이스를 통해 읽기 또는 쓰기 명령어를 파일 시스템(20)으로부터 수신할 수 있다. 여기서, 메모리 저장 장치(30)는 eMMC(embedded Multi Media Card) 또는 플래시 메모리 기반의 SSD(Solid State Drive)일 수 있다. 다만, 반드시 이에 한정되는 것은 아니다.
메모리 저장 장치(30)는 저장 장치 인터페이스를 포함할 수 있다. 또한, 메모리 저장 장치(30)는 펌웨어(firmware)로 사용되는 플래시 변환 계층(FTL)을 포함할 수 있다. 플래시 변환 계층은 논리적-물리적 페이지 매핑 테이블(40)을 통해 플래시 칩(50)에 페이지를 저장할 수 있다. 논리적-물리적 페이지 매칭 테이블(40)은 각각의 페이지에 대한 논리적 위치와 상기 논리적 위치에 대응되는, 실제 페이지가 저장되는 물리적 페이지의 매칭 관계를 설명한다. 다만, 이러한 논리적-물리적 페이지 매핑 테이블(40)은 현재 저장 장치(30)로 전달되는 페이지들의 트랜잭션 정보를 제공하지 못해 트랜잭션 기능 활용에 제한이 있다.
대부분의 모바일 장치들은 플래시메모리 기반의 저장 장치(30)를 기본 내장 저장장치로 사용한다. 플래시 메모리 기반의 저장 장치(30)는 특성상 덮어쓰기를 허용하지 않으므로, 기존의 페이지는 그냥 두고 갱신된 페이지를 다른 빈 위치에 쓴다. 이러한 기법을 copy-on-write(CoW)라고 부른다. CoW는 데이터베이스 시스템의 저널링 기법과 유사한 측면이 있으며, CoW를 이용하여 데이터베이스 시스템의 갱신 원자성을 지원할 수 있다.
본 발명은 eMMC와 플래시메모리 기반의 SSD의 펌웨어(firmware)로 사용되는 플래시 변환 계층(FTL) 중 CoW의 특성을 가지는 페이지 매핑 FTL을 개선하여 데이터베이스 시스템의 트랜잭션 개념을 이해하여 트랜잭션의 원자성을 보장하는 FTL과 이러한 원자성을 이용하는 파일시스템(20: 에컨대, Linux EXT4) 및 데이터베이스 시스템(예컨대, SQLite(12))과 그 방법이다.
전술한 바와 같이, 본 발명의 FTL을 X-FTL이라고 명명하였으며, X-FTL은 다음과 같은 기능을 가질 수 있다.
(1) 데이터베이스의 트랜잭션 개념을 인지하여 트랜잭션 갱신의 원자성을 보장한다.
(2) SQLite와 같은 데이터베이스 시스템과 Linux EXT4와 같은 파일시스템에서 사용할 수 있는 확장된 API를 제공한다.
본 발명의 일 실시예에 따른 X-FTL은 플래시메모리 스토리지에서 사용되는 copy-on-write의 장점을 취함으로써, 갱신 트랜잭션에 의해 변형된 모든 페이지들의 반영을 효과적으로 처리하여 트랜잭션 원자성을 보장할 수 있다. 즉, 트랜잭션이 정상적으로 종료되면, 변경된 모든 페이지가 플래시메모리 스토리지에 반영되거나, 변경도중 오류로 인해 트랜잭션이 중단되면, 갱신된 페이지들은 모두 데이터베이스에 반영되지 않는다.
위와 같은 관점에서 X-FTL은 3가지 종류의 기술과 연관되어 있다. 그 기술들은 다음과 같다.
(1) Shadow Paging 기법
Shadow paging 방법에서는 트랜잭션에 의해 갱신된 페이지들은 원본 데이터베이스에 직접 덮어쓰는 대신, 각각 새로운 버전으로 생성된다. 그리고 페이지 갱신의 원자성을 보장하기 위해, 이전 페이지의 위치 정보를 새로운 버전의 페이지로 변경한다. 따라서 데이터베이스 시스템은 갱신 트랜잭션에 따라 2개의 페이지(이전 페이지와 갱신된 새로운 페이지)를 유지하게 된다. SQLite의 롤백 저널과 WAL 저널 기법은 shadow paging 기법의 변형이라고 할 수 있다. 이러한 관점에서, 본 발명의 일 실시예에 따른 X-FTL은 개념적으로 shadow paging 기술을 데이터베이스 시스템엔진에서 플래시 메모리 저장 장치 시스템으로 전이한(offloading) 것이라 할 수 있다.
종래 FTL에서는 copy-on-write를 쓰기 성능의 향상을 위해 사용하고 있었으나, 단순한 기술의 전이를 통해 효과적으로 트랜잭션의 원자성을 플래시메모리 스토리지 내부에서 지원할 수 있게 된다. 즉, 기존의 페이지 매핑 FTL들은 이미 갱신된 페이지들을 덮어쓰지 않기 때문에, 이러한 FTL을 확장하여 여러 페이지들을 갱신한 트랜잭션의 원자쓰기(atomic write)를 플래시메모리 저장 장치 수준에서 추가적인 비용 없이 지원할 수 있다.
따라서, 일반적인 shadow paging 기법과 달리, 본 발명의 일 실시예에 따른 X-FTL을 사용하면 SQLite의 저널링 기법의 사용에 따른 갱신된 페이지 매핑의 관리와 이전 페이지가 사용하는 공간을 회수하는 부담(overhead)을 줄일 수 있다.
(2) 저널링 파일 시스템( Journaling File Systems )
현재 운영체제에서 사용되는 파일 시스템은 데이터 블록과 메타데이터의 일관성을 유지하기 위해 저널링(journaling) 기법을 구현하고 있다. 최근 JFFS와 YAFFS 같은 플래시메모리용 저널링 파일 시스템이 발표되었다. 파일 시스템에 의해 쓰여진 데이터는 먼저 운영체제의 버퍼에 저장되며 애플리케이션의 sync call이나 주기적으로 동작하는 커널의 flush 데몬에 의해 운영체제 버퍼에서 스토리지로 전달된다. JFFS와 YAFFS와 같은 저널링 파일 시스템은 이때, 데이터 블록과 메타데이터를 곧장 원본이 위치한 영역에 반영하지 않고 저널 영역(journal area)이라고 알려진 분리된 공간에 저장한다. 저널 영역에 모든 페이지들이 저장되면 일반적으로 체크포인트(checkpoint)라는 프로세스로 원본영역의 위치로 반영한다. 따라서 저널링 파일 시스템들은 저널 영역으로의 추가적인 IO를 통해 데이터의 일관성을 유지할 수 있다.
하지만, 본 발명의 일 실시예에 따른 X-FTL은 이와 달리, 플래시메모리 스토리지에서 원자성을 이미 보장하기 때문에, 파일시스템의 저널영역을 사용하지 않는다. 따라서 저널링 파일시스템이 중복적으로 데이터블록을 저널 영역에 쓰는 부담이 제거할 수 있으며, 저널링 파일시스템에서 제공하는 것과 동일한 수준의 일관성을 유지할 수 있다. 이러한 이유로 인해, 트랜잭션의 성능을 크게 향상 시킬 수 있다. 일반적으로 저널링 파일 시스템의 데이터 일관성은 고정된 페이지의 집합을 대상으로 하며, 이는 SQLite와 같은 데이터베이스 시스템의 트랜잭션과는 의미적으로 일치하지 않는다. 이러한 이유로, SQLite는 저널링 파일 시스템의 일관성 유지 시스템과는 별개로 롤백 저널이나 WAL같은 저널 모드를 구현하고 있다.
(3) 쓰기 원자성을 지원하는 플래시메모리 변환 계층( FTL )이 적용된 새로운 스토리지
최근 원자쓰기(atomic write)를 지원하는 플래시메모리 기반의 저장장치 기법들이 제안되고 있다. 그러나 대부분의 기법들은 저널링 파일시스템과 유사하게 고정된 페이지 집합의 원자성만을 고려하고 있기 때문에 트랜잭션 개념을 지원하기에는 부족한 점이 있다.
1) Sunhwa Park, Ji Hyun Yu, and Seong Yong Ohm. Atomic Write FTL for Robust Flash File System. In Proceedings of the Ninth International Symposium on Consumer Electronics (ISCE 2005), pages 155 160, Jun 2005.
위의 논문에서는 플래시메모리 저장장치의 copy-on-write 특성을 활용하여 여러 페이지의 집합을 원자적으로 갱신하려고 시도하였다. 그러나 본 발명의 일 실시예에 따른 X-FTL과 달리, 다음과 같이 write(p1,p2,...,pn) 여러 페이지를 하나의 쓰기 연산으로 처리하여 원자 쓰기를 보장하는데 초점을 맞추고 있다. 따라서 이 기법에서는 플래시메모리 저장장치가 여러 페이지의 쓰기 명령을 전달받으면, 먼저 모든 페이지를 플래시메모리 칩에 쓴 후, 완료 레코드(commit record)를 남긴다. 만약 페이지들을 플래시메모리 칩에 쓰는 도중이나 완료 레코드가 완전히 쓰여지기 이전에 시스템 오류가 발생하면, 저장 장치의 재부팅시 완료 레코드가 없는 쓰기 명령에 의해 변경된 페이지들은 모두 이전 페이지 정보로 되돌린다(undo).
이 기법의 중요한 목표는 ext4와 같은 저널링 파일 시스템의 데이터 블록과 해당 블록의 메타데이터들이 하나의 트랜잭션으로 인식되어 자동적으로 원자성을 보장하는 것이다.
2) Xiangyong Ouyang, David W. Nellans, Robert Wipfel, David Flynn, and Dhabaleswar K. Panda. Beyond Block I/O: Rethinking Traditional Storage Primitives. In Proceedings of International Conference on High-Performance Computer Architecture (HPCA 11), pages 301311, 2011.
위의 논문에서는 여러 페이지의 원자적 갱신을 지원하는 FTL을 FusionIO의 상용 SSD에 구현하였다. 특히, 플래시메모리 저장 장치의 copy-on-write 특성을 이용하여 MySQL의 이중쓰기 영역(double-write area)를 대체할 수 있다고 제안하였다. MySQL 데이터베이스의 이중쓰기 영역은 여러 섹터에 걸친 데이터페이지를 쓰는 도중 시스템 오류로 인한 부분 쓰기(partial write) 문제를 해결하기 위해 사용되는 영역이다.
그러나 이 기법은 다음과 같은 문제점을 지니고 있다. 여러 페이지를 하나의 쓰기 연산으로 수행하기 위해서는 쓰기 명령(write system call)의 수행 이전에 모두 알고 있어야 한다. 따라서 SQLite와 같이 한 트랜잭션에 의해 갱신된 페이지들이 한 개 이상의 쓰기 연산으로 수행되는 buffer steal 교체 정책을 구현한 데이터베이스 시스템들에서는 트랜잭션의 원자성을 보장할 수 없다. 또, 하나 이상의 트랜잭션에 의해 쓰여지는 여러 페이지들이 교차될 수 없다.
3) Vijayan Prabhakaran, Thomas L. Rodeheffer, and Lidong Zhou. Transactional Flash. In Proceedings of Symposium on Operating Systems Design and Implementation (OSDI), 2008.
위의 논문에서는 저널링 파일시스템의 트랜잭션 개념을 지원하는 FTL을 제안하고 이를 TxFlash라고 명명하였다. TxFlash는 여러 페이지의 원자쓰기를 지원하면서 동일한 페이지가 여러 트랜잭션에 의해 갱신되는 것을 허용하지 않도록 하는 독립성(isolation) 기능을 추가로 지원하였다. 특히, TxFlash의 주된 목적은 데이터 페이지의 쓰기와 완료 레코드(commit record)가 분리되어있는 저널링 파일 시스템에서 페이지 쓰기 명령이 완료되기 위해서는 반드시 완료 레코드를 먼저 쓴 뒤 다른 트랜잭션에 의한 쓰기를 허용해야한다는 제약을 제거하기 위해 단순 순환 완료(SCC, simple cyclic commit)라는 기법을 제안하였다. SCC는 완료 레코드를 제거하여 트랜잭션에 완료에 의해 다른 쓰기 연산들이 막히지 않도록 하였다. 그러나 이 기법도 이전 기법들과 마찬가지로, 데이터베이스 시스템의 트랜잭션 원자성을 지원할 수 없다.
본 발명은 상기 기술들을 개선하기 위한 목적 달성을 위해, 플래시메모리 저장 장치(30) 계층에서 트랜잭션 기능을 지원하도록 하는 X-FTL을 제공하고, 애플리케이션 계층의 데이터베이스 관리 시스템(예컨대, SQLite)와 저널링 파일시스템(예컨대, EXT4)를 일부 수정할 수 있다.
(1) 본 발명의 일 실시예에 따른 X-FTL 디자인
본 발명의 일 실시예에 따른 X-FTL의 디자인 목표는 총 3가지로 요약된다.
1) 본 발명의 일 실시예에 따른 X-FTL은 플래시 변환 계층에서 사용중인 CoW(copy-on-write) 기법의 장점을 활용하여 트랜잭션 원자성과 영속성을 적은 비용을 추가하여 지원한다. 특히, copy-on-write 기법의 구현에 필요한 중복적인 쓰기 연산을 제거한다. 이는 SQLite에서 채택 중인 트랜잭션 완료시 변경 버퍼쓰기(Force-at-commit)에 매우 효과적일 수 있다.
2) 본 발명의 일 실시예에 따른 X-FTL은 SQLite에 국한되지 않고 트랜잭션 원자성(즉, 여러 페이지를 트랜잭션 개념으로 갱신시키기 위해 필요한 원자성) 기능이 필요한 어떠한 응용프로그램도 지원하는 것을 목표로 한다. 따라서 SATA 표준과 같이 일반적인 응용프로그램이 동작하는데 필요한 기능을 최대한 유연하게 지원하도록 인터페이스를 구현하였다.
3) 본 발명의 일 실시예에 따른 X-FTL은 SQLite와 기타 응용프로그램 계층의 소프트웨어의 변경을 최소화할 수 있도록 지원한다. 기존 응용프로그램의 변경은 X-FTL이 제공하는 트랜잭션 기능을 사용할 수 있도록 확장 인터페이스 부분만 요구된다.
(2) 본 발명의 일 실시예에 따른 X-FTL 구조와 인터페이스
본 발명의 일 실시예에 따른 X-FTL의 핵심 부분은 기존 플래시 변환 계층이 제공하는 논리적-물리적 페이지 매핑 테이블 이외에 트랜잭션 정보를 관리하는 트랜잭션 테이블이다. 이는 도 3의 X-L2P(42)로 표시된 부분이다. 트랜잭션 테이블은 일반적인 플래시 변환 계층에서 제공하는 논리적-물리적 페이지 매핑 테이블(40: 도 2 참조)과 현재 저장 장치로 전달된 페이지들의 트랜잭션 정보를 동작중/완료됨으로 표현하는 트랜잭션 상태 표시 정보의 조합으로 이루어져 있다. 도 3 하단의 L2P 테이블의 기존 플래시 변환 계층에서 관리하는 것과 동일한 논리적-물리적 매핑 테이블을 나타낸다.
저장 장치 계층에서 트랜잭션 기능을 제공하기 위해 트랜잭션 테이블은 트랜잭션 ID, 새로운 페이지가 저장된 위치, 트랜잭션 상태 정보 같은 추가적인 정보를 담고 있다. 트랜잭션 테이블을 통해 아직 트랜잭션이 완료(commit)되지 않은 트랜잭션에 속한 페이지들을 플래시 메모리 쓰레기 수거(garbage collection) 프로세스에 의해 소거되는 것을 막을 수 있다. 이는 아직 완료되지 않은 트랜잭션에 속한 페이지들은 상위 계층에서 트랜잭션을 취소(abort/rollback)할 경우 이전 페이지 데이터로 되돌려야 하기 때문이다. 만일 상위 계층에서 트랜잭션을 완료(commit)할 경우, 본 발명의 일 실시예에 따른 X-L2P 트랜잭션 테이블의 페이지들 중 해당 트랜잭션에 속한 페이지들을 논리적-물리적 매핑 테이블로 갱신시키고, 이전의 오래된 페이지들을 쓰레기 수거의 대상이 되도록 표시한다.
(3) 응용프로그램과 파일시스템 수정(예컨대, SQLite와 Linux EXT4)
응용프로그램계층과 파일시스템 계층에서 본 발명의 일 실시예에 따른 X-FTL이 제공하는 트랜잭션 기능을 사용하기 위해서, 확장 SATA 명령을 사용해야한다.
먼저 파일시스템 계층은 확장 SATA 명령을 직접적으로 호출한다. 기존의 SATA 표준으로는 트랜잭션 완료 정보를 저장 장치로 전달할 수 없으므로, 이를 위해 현재 SATA 표준을 확장하였다. 확장된 SATA 표준을 통해 데이터의 읽기/쓰기시 파일시스템에서 할당된 트랜잭션 정보를 추가하여 저장장치로 전달하며, 트랜잭션의 완료/취소 정보는 별도의 확장 SATA 명령으로 구현하였다. 확장된 SATA명령의 형태는 다음과 같다.
write(tid t, page p) : 호스트로부터 데이터를 저장장치로 쓰는 명령으로, 기존의 SATA 명령에 트랜잭션 정보를 추가한다.
read(tid t, page p) : 저장 장치로부터 호스트로 데이터를 읽어오는 명령으로, 기존의 SATA명령에 트랜잭션 정보를 추가하였다. 읽어야할 데이터가 1개 이상 존재할 경우 트랜잭션의 정보에 따라 정확한 데이터를 전송한다.
commit(tid t) : 완료된 트랜잭션 정보를 저장장치에 알린다. 이는 기존 SATA표준 명령에는 존재하지 않는 것으로 본 발명의 일 실시예에 따른 X-FTL의 트랜잭션 기능을 위해 추가된다.
abort(tid t) : 취소된 트랜잭션 정보를 저장장치에 알린다. 이는 기존 SATA표준 명령에는 존재하지 않는 것으로 본 발명의 일 실시예에 따른 X-FTL의 트랜잭션 기능을 위해 추가된다.
SQLite와 같은 응용프로그램 계층에서는 SATA 명령을 직접 호출할 수 없으므로, SQLite과 같은 응용프로그램이 SATA 명령을 호출할 수 있도록 파일시스템의 디바이스 제어 함수(ioctl())명령을 확장하였다. ioctl()로 확장된 SATA 명령을 파일시스템에 호출하도록 요청하는 부분은 확장된 SATA 명령인 commit()과 abort()이다. 이외에 읽기/쓰기 명령은 기존과 동일하게 사용할 수 있으며, 트랜잭션 ID의 관리는 파일시스템에서 수행하므로 응용프로그램 계층에서는 트랜잭션 ID를 전달하지 않는다.
더욱이, 업데이트 연산의 긴 대기시간 동안 업데이트된 페이지의 쓰기 요청에 대한 원자성을 보장하기 위해 사용하는 SQLite의 rollback 모드와 WAL(write-ahed log) 모드, 저널링 파일시스템의 데이터 저널(data journal)과 메타데이터 저널(metadata journal)은 페이지 쓰기 시에 많은 양의 중복적인 데이터 쓰기가 유발될 수 있다. 따라서, 본 발명의 메모리 저장 장치에서는 플래시 저장 장치 내에서 페이지의 원자적 업데이트를 보장하여 SQLite나 파일 시스템 같은 상위 단계의 애플리케이션에서 발생해 왔던 불필요한 중복 데이터 쓰기를 없앨 수 있는 X-FTL을 제공할 수 있다.
발명의 목적을 3가지로 보면, 첫째로, 대부분의 플래시 기반 저장 장치의 특징적인 copy-on-write 메커니즘을 활용하여 불필요한 중복적인 페이지 쓰기를 제거하여 적은 비용으로 트랜잭션의 원자성과 내구성을 보존하는 것이다. 특히 트랜잭션의 커밋 시점에 force 정책을 사용하는 SQLite의 버퍼 관리 특성상 매우 중요하다.
둘째, SQLite나 다른 애플리케이션의 도움 없이 개별 페이지 단위 혹은 페이지 그룹 단위의 업데이트에 대한 원자적 쓰기를 지원하는 것이다. 또한 본 발명의 일 실시예에 따른 X-FTL의 인터페이스는 SATA와 같은 표준 인터페이스를 따라서 사용하기 편리해야 한다.
셋째, SQLite와 같은 상윈 단계의 애플리케이션 들이 본 발명의 일 실시예에 따른 X-FTL을 시용하기 위해서 코드의 수정이 필요해서는 안 된다. 또한, 본 발명의 일 실시예에 따른 X-FTL 추가로 지원하는 기능을 위한 코드 수정 외에는 최소한의 수정만이 필요해야 한다.
이러한 방식은 플래시 기반 저장장치가 덮어쓰기를 하지 못해서 일어나는 약점을 이용해 강점을 바꾸는 방식으로서, 추가적인 비용없이 트랜잭션 기능을 지원하고 쓰기 연산에 대한 성능의 최적화와 저장장치의 수명을 연장시킬 수 있다.
도 3은 본 발명의 일 실시예에 따른 메모리 시스템을 개략적으로 나타낸 블록도이다. 도 3에 도시된 바와 같이, 본 발명의 일 실시예에 따른 메모리 시스템은 애플리케이션 관련 구성(10), 파일시스템(20) 및 메모리 저장 장치(30)를 포함할 수 있다. 여기서, 애플리케이션 관련 구성(10)은 데이터베이스 관리 시스템(12)을 포함하고, 메모리 저장 장치(30)는 저장 장치 인터페이스(storage interface)를 포함하고, 또한, 메모리 저장 장치(30)는 페이지 매핑 테이블(40) 및 트랜잭션 페이지 매핑 테이블(또는 주소 매핑 테이블)(42)을 생성하고 상기 주소 매핑 테이블을 통해 트랜잭션을 제어하는 플래시 변환 계층(46) 및 플래쉬 칩(50)을 포함할 수 있다.
도 3을 참조하면, 애플리케이션 관련 구성(10)은 데이터베이스 관리 시스템(12: 예컨대 SQLite)을 포함할 수 있다. 종래 SQLite(12)는 롤백(rollback) 혹은 WAL(write-ahead log) 모드로 동작하여 원자성을 보장하도록 되어 있었으나, 본 발명의 일 실시예에 따른 X-FTL을 통해서 트랜잭션의 원자성과 영속성을 보장할 수 있기 때문에 SQLite(12)의 저널 모드를 off로 설정할 수 있다. 여기서, off 저널 모드는 변경된 페이지를 다른 저널 파일이 아닌 데이터베이스 파일에 곧바로 적용하는 방식이다. SQLite(12)의 버퍼 관리 정책인 steal/force 정책에 의한 아직 commit 되지 않은 페이지가 강제적으로 데이터베이스 파일에 쓰이는 경우, off mode에서는 곧바로 데이터베이스 파일에 해당 페이지 정보가 적용되기 때문에 트랜잭션이 취소되었을 경우 롤백(rollback) 작업을 할 수 없는 문제가 있다.
하지만, 본 발명의 일 실시예에 따른 X-FTL이 취소(abort)에 대한 명령을 지원할 수 있기 때문에 SQLite(12) 내에서 abort 작업이 필요한 상황에서 본 발명의 일 실시예에 따른 X-FTL의 abort 기능을 호출하기 위해 ioctl을 통해 메모리 저장 장치(30)로 abort 명령을 전달하는 부분을 SQLite(12)의 코드 상에 추가할 수 있다.
파일 시스템(20)은 전술한 바와 같이, SQLite(12)와 본 발명의 일 실시예에 따른 X-FTL의 중간에서 SQLite(12)가 데이터베이스에 접근할 때 X-FTL의 트랜잭션 기능을 이용할 수 있도록 메신저의 역할을 한다. 트랜잭션에 의해 어떠한 페이지가 수정되었을 경우 본 발명의 일 실시예에 따른 X-FTL로 트랜잭션 아이디를 함께 전달하여 본 발명의 일 실시예에 따른 X-FTL이 어떤 트랜잭션에 의해 수정된 페이지인지를 알 수 있도록 한다. 읽기 쓰기 요청이 들어올 경우 read(t,p), write(t,p) 형태로 변환하여 본 발명의 일 실시예에 따른 X-FTL에 전달하는 역할을 수행한다.
Commit이나 abort 작업 또한 이와 유사하게 fsync 시스템 콜 혹은 ioctl(abort)이 호출될 경우 파일 시스템(20)이 이를 commit(t), abort(t) 형태의 커맨드로 변환하여 본 발명의 일 실시예에 따른 X-FTL에 전달하게 된다. abort 후에도 파일 시스템(20) 상의 버퍼에 남아 있을 수 있는 페이지는 삭제함으로써 간단히 없앨 수 있다. 본 발명과 관련된 시뮬레이션 수행을 위해서 commit 과 abort 는 Trim 커맨드를 확장하여 구현한다.
또한, 다중 파일 처리를 위해 txopen, txcommit, txabort, txclose 에 대한 시스템 콜을 추가할 수 있다. 이는 이하 설명하기로 한다.
메모리 저장 장치(30)는 저장 장치 인터페이스(storage interface)를 포함한다. 저장 장치 인터페이스는 파일 시스템(20)으로부터 명령어를 수신할 수 있다. 메모리 저장 장치(30)는 플래시 변환 계층(본 발명에서는 X-FTL)을 포함할 수 있다. 플래시 변환 계층은 기존 페이지 매핑 테이블(40: L2P) 이외에 트랜잭션 페이지 매핑 테이블(42)을 생성하여 페이지를 관리하고 트랜잭션을 제어할 수 있다. 메모리 저장 장치(30)는 실제 페이지가 저장되는 플래시 칩(50)을 포함할 수 있다.
본 발명의 일 실시예에 따른 X-FTL의 가장 중요한 부분은 트랜잭션을 관리하는 트랜잭션 테이블(42: 주소 매핑 테이블(X-L2P))이다. X-L2P 테이블(42)은 대부분의 FTL에서 사용하는 페이지 매핑 테이블(40: L2P)과 혼합하여 사용될 수 있다. L2P 테이블(40)은 도 3에서 좌측, X-L2P 테이블(42)은 도 3에서 우측에 위치해 있다. 저장 장치(30) 내에서 트랜잭션 기능을 지원하기 위해, 기존의 L2P 정보 이외에 트랜잭션 아이디(TID), 페이지가 실제로 쓰여진 물리적 페이지 위치(PPNnew), 트랜잭션의 현재 상태(status)와 같은 추가적인 정보를 X-L2P 테이블(42)에서 관리한다. 이러한 정보들을 관리함으로써 쓰레기 수거(garbage collection) 또한 완벽하게 제어할 수 있다. 트랜잭션 기능 내에서 업데이트된 페이지들의 이전 위치에 쓰인 페이지들은 트랜잭션이 끝나기 전까지 희생 페이지로 선택되지 않고, 트랜잭션이 취소되었을 경우 롤백(rollback) 작업을 위해 사용될 수 있다. 활성화되어 있던 트랜잭션이 성공적으로 종료되었을 경우 X-L2P 테이블(42)에서 유지되던 이전 위치의 페이지들은 관리 대상에서 제외되어 희생 페이지도 선택될 수 있다.
이를 구체적으로 살펴보면, 본 발명의 일 실시예에 따른 X-FTL은 OpenSSd 상에 구현될 수 있다. OpenSSD는 SSD 개발 플랫폼으로 OenSSD Project를 통해 공개된 것이다. OpenSSD 플랫폼은 barefoot 컨트롤러를 기반으로 Barfoot 컨트롤러가 부착된 상업용 SSD와 비슷한 성능 특성을 가지고 있으며, 플래시를 관리하는 FTL은 대부분의 SSD와 eMMC 플래시 메모리가 채택하여 사용하는 페이지 매핑 플래시 메모리 관리 정책을 채택한다.
본 발명에 따른 X-L2P 테이블(42)은 OpenSSD 플랫폼의 SDRAM 상에서 관리될 수 있다. 또한, 각각의 페이지에 대해서 트랜잭션 id(tid), 논리적 페이지 번호(lpn), 물리적 페이지 번호(ppn), 트랜잭션의 상태 정보(status)를 저장한다. 물리적 페이지 정보는 특정 페이지에 대한 새로운 쓰기 요청이 들어올 때마다 FTL이 지정하는 비어있는 페이지 번호이다. 트랜잭션 상태 정보는 해당하는 트랜잭션이 아직 진행중인 트랜잭션 인지, 종료(commit)된 트랜잭션인지, 취소(abort)된 트랜잭션 인지에 대한 정보를 담고 있다. 또한, X-L2P 테이블(42)에는 오로지 특정 페이지가 변경되어 쓰기 요청이 들어온 시점에만 트랜잭션 정보가 추가될 수 있다.
X-L2P 테이블(42)의 각 엔트리는 가장 최신의 페이지 번호와 가장 최근에 commit되어 기록된 이전 버전의 페이지 번호 2가지를 유지하면서 각 트랜잭션의 요청에 대해 알맞은 버전의 페이지를 제공하는데 사용될 수 있다.
본 발명의 일 실시예에 따른 X-FTL은 읽기/쓰기 명령어(44-1), 종료/취소 명령어(44-2) 및 복구 명령어(44-3)를 사용할 수 있다. 트랜잭션에 대한 정보가 저장장치(30)로 전달될 때 기존의 SATA 인터페이스를 통해서는 트랜잭션 아이디에 대한 정보를 전달할 수 없기 때문에 인터페이스를 새로 확장하였다. 또한 트랜잭션의 상태 정보(active, commit, abort)를 변경하기 위한 두 가지의 새로운 명령어를 추가하였다. 각각의 인터페이스에 대한 설명은 아래와 같다.
write(tid t, page p) : 쓰기 요청을 수행하는 명령어로 첫 번째 인자는 트랜잭션의 아이디를 의미하고 두 번째 인자는 쓰기 요청을 할 논리 페이지 번호를 의미한다. 이 명령은 쓰기 요청에 페이지 p를 저장장치(30)에 기록하고 트랜잭션 아이디와 매핑 관련 정보를 X-L2P 테이블(42)에 저장하도록 요청한다. 매핑 정보는 실제 물리적 페이지 주소와 요청이 들어온 논리적 페이지 주소로 이루어진다.
read(tid t, page p) : 읽기요청을 수행하는 명령어로 첫 번째 인자는 트랜잭션의 아이디를 의미하고 두 번째 인자는 쓰기 요청을 할 논리 페이지 번호를 의미한다. 이 명령은 X-L2P 테이블(42)을 통해서 트랜잭션 id가 t인 논리적 페이지 p에 대한 최신의 페이지를 읽어오도록 요청한다. 요청한 트랜잭션의 아이디에 따라서 서로 다른 버전의 페이지가 전달된다.
commit(tid t) : 이 명령어는 트랜잭션 기능의 지원을 위해 새로 추가한 명령어로 트랜잭션의 상태를 commit으로 변경하는 명령어이다. 트랜잭션의 아이디 t를 함께 전달한다. 이 명령이 전달된 경우 본 발명의 일 실시예에 따른 X-FTL은 X-L2P 테이블(42)에서 관리하고 있던 트랜잭션 t의 모든 상태를 완료 상태로 처리하고 업데이트된 페이지 매핑 정보들을 L2P 테이블(40)에 반영하여 영구적으로 유지되도록 한다. 트랜잭션 t에 의해 관리되던 업데이트 이전에 쓰인 페이지들은 모두 해제 되어 희생 페이지가 될 수 있도록 한다.
abort(tid t) : 이 명령어는 트랜잭션 기능의 지원을 위해 새로 추가한 명령어로 트랜잭션의 상태를 abort로 변경하는 명령어이다. 인자로 트랜잭션의 아이디 t를 함께 전달한다. 이 명령이 전달된 경우 본 발명의 일 실시예에 따른 X-FTL은 X-L2P 테이블(42)에서 관리하고 있던 트랜잭션 t의 모든 정보를 폐기한다. 업데이트 이후에 새로 쓰인 페이지들을 희생 페이지로 선정될 수 있도록 한다.
먼저, 읽기 명령어 read(t,p)의 커맨드가 들어올 경우, 본 발명의 일 실시예에 따른 X-FTL은 트랜잭션 id와 논리적 페이지 번호 p 가 모두 일치하는 엔트리가 X-L2P(42)에 존재하는 경우에만 최신의 페이지를 전달하고 그렇지 않은 경우에는 이전 버전의 페이지를 전달한다. 또한 이전 버전의 페이지 번호를 유지하여 쓰레기 수거(garbage collection)가 필요한 상황일 경우 이전 버전의 페이지가 희생 페이지로 선정되지 않도록 할 수 있다.
또한, commit(t) 명령이 들어올 경우, 트랜잭션 t에 의해 업데이트된 모든 페이지가 실제 물리적 낸드(nand) 페이지로 온전히 쓰여지길 기다릴 수 있다. 이후 X-L2P 테이블(42) 내의 트랜잭션 t에 대한 상태 정보를 모두 commit으로 변경하고 해당하는 X-L2P 정보를 플래시 메모리에 영구적으로 기록한 뒤 L2P 테이블(40)에 변경된 매핑 정보를 반영한다. 이 상황이 모든 끝난 시점을 commit이 끝난 것으로 간주한다. 이는 종래 FTL이 crash 상황에서 복구를 하기 위해 L2P 테이블(40)을 모두 플래시 메모리에 기록하는 작업과 유사한 작업이다.
복구(recovery)
데이터베이스의 복구를 위해 두 가지 종류의 오류 상황을 가정할 수 있다. 첫째, SQLite가 비정상적으로 종료되었을 경우, 둘째, 시스템의 전원 공급이 갑자기 중단되는 등의 시스템 자체가 종료된 경우이다.
1) 첫 번째 경우는 파일 시스템(20)이나 본 발명의 일 실시예에 따른 X-FTL에는 아무 문제없이 정상적인 경우이므로 abort(t) 명령을 통해 간단히 복구할 수 있다.
2) 두 번째 오류 상황의 경우 FTL 내에서 가장 최근에 기록된 L2P 테이블(40)과 X-L2P 테이블(42)을 모두 읽어온 후, 트랜잭션의 상태에 따라서 추가 작업을 진행할 수 있다. commit 상태로 기록된 트랜잭션은 X-L2P의 매핑 정보를 L2P 테이블(40)에 반영하고 나머지 정보는 모두 abort 처리를 한다. 이 단순한 작업을 통해서 commit 된 트랜잭션에 대한 영구성을 보장할 수 있다.
더욱이, SATA 명령 인터페이스가 SQLite(12)와 같이 파일 시스템(20)을 통해서 파일을 제어하는 애플리케이션에서 직접적으로 사용 가능하지 않을 수도 있기 때문에, SATA 커맨드를 SQLite(12)에서 직접 사용하는 방식이 아닌 ioctl 함수와 fsync 함수를 확장하여 추가적인 트랜잭션 정보들을 파일 시스템(20)을 통해 관리하도록 구현할 수 있다.
추가적으로, SQLite(12) 상에서 하나의 트랜잭션이 여러 개의 파일에 접근할 때 다중 파일에 대한 트랜잭션 처리를 하기 위한 인터페이스를 추가할 수 있다. 이를 통해서 한 트랜잭션 내에서 다중파일에 접근하는 문제에 대한 해결도 가능하다.
이와 관련된 명령어는 다음과 같다.
txopen(n, fp1, fp2, fp3, ... , fpN) - 다중 파일에 대한 트랜잭션 처리 디스크립터를 오픈하는 명령어로 첫 번째 인자는 다중 파일의 개수, 뒤의 인자들은 fopen을 통해 얻어진 파일 디스크립터들이다. txopen 함수 실행 이후에 파일 시스템은 다중 파일에 대한 하나의 트랜잭션 디스크립터를 유지하면서 다중파일에 접근하는 트랜잭션에 대한 트랜잭션 아이디 관리와, 트랜잭션 처리를 가능하게 한다.
txclose(tx) - txopen을 통해 얻어진 트랜잭션 디스크립터를 해제한다. 다중 파일에 대한 트랜잭션 디스크립터를 해제하고 하나로 관리되던 트랜잭션 아이디도 해제한다.
txcommit(tx) - txopen에 의해서 얻어진 트랜잭션 디스크립터에 묶여있는 모든 파일에 대한 commit 명령을 수행한다. 트랜잭션 디스크립터에 묶여있는 파일들은 하나의 트랜잭션 아이디로 관리되므로 내부적으로 트랜잭션 디스크립터 tx가 관리하는 하나의 트랜잭션 아이디(tid)에 대해서 본 발명의 일 실시예에 따른 X-FTL에 commit(tid) 명령을 전달한다. 본 발명의 일 실시예에 따른 X-FTL이 이 명령을 전달 받을 경우 일반 commit 처리와 동일하게 전달되어 온 트랜잭션 아이디 tid에 대해 commit 작업을 진행한다.
txabort(tx) - txopen에 의해서 얻어진 트랜잭션 디스크립터에 묶여있는 모든 파일에 대한 abort 명령을 수행한다. 트랜잭션 디스크립터에 묶여있는 파일들은 하나의 트랜잭션 아이디로 관리되므로 내부적으로 트랜잭션 디스크립터 tx가 관리하는 하나의 트랜잭션 아이디(tid)에 대해서 본 발명의 일 실시예에 따른 X-FTL에 abort(tid) 명령을 전달한다. 본 발명의 일 실시예에 따른 X-FTL이 이 명령을 전달받을 경우 일반 abort 처리와 동일하게 전달되어 온 트랜잭션 아이디 tid에 대해 abort 작업을 진행한다.
도 4는 본 발명의 일 실시예에 따른 메모리 저장 장치(30)를 구체적으로 나타낸 상세블록도이다. 도 4에 도시된 바와 같이, 본 발명의 일 실시예에 따른 메모리 저장 장치(30)는 명령어 수신부(410), 테이블 생성부(420), 제어부(430) 및 저장부(440)를 포함할 수 있다.
명령어 수신부(410)는 저장 장치 인터페이스일 수 있고, 파일 시스템(20)으로부터 명령어를 수신할 수 있다. 명령어 수신부(410)는 read(tid t, page p), write(tid t, page p), commit(tid t) 및 abort(tid t) 형태의 명령어를 수신할 수 있다.
테이블 생성부(420)는 논리적-물리적 매핑 테이블뿐만 아니라 트랜잭션 테이블을 생성할 수 있다. 논리적-물리적 매핑 테이블은 각 페이지에 대한 논리적 매핑 테이블과 그에 매칭되는 물리적 매핑 테이블의 위치 정보를 포함한다. 트랜잭션 테이블은 각각의 페이지에 대해 트랜잭션 아이디(tid), 논리적 페이지 위치, 물리적 페이지 위치 및 트랜잭션의 현재 상태 정보를 포함할 수 있다. 이때, 물리적 페이지 위치 정보는 새로운 페이지가 저장된 위치 정보를 포함할 수 있다. 또한, 현재 상태 정보는 트랜잭션이 진행 중인지, 종료되었는지, 취소되었는지에 관한 정보를 포함한다. 테이블 생성부(420)는 각각의 페이지의 저장 상태를 기반으로 논리적-물리적 매핑 테이블 및 트랜잭션 테이블을 생성하고, 명령어 수신부(410) 및 제어부(430)로부터 명령어 신호 및 제어 신호를 받아 상기 테이블들의 정보를 조정할 수 있다.
제어부(430)는 테이블 생성부(420) 및 저장부(440)를 제어할 수 있다. 제어부(430)는 명령어 수신부(410)로부터 수신된 명령어를 파싱하여 해당 명령을 수행할 수 있다. 이때, 테이블 생성부(420)에서 생성한 상기 논리적-물리적 매핑 테이블 및 트랜잭션 테이블의 정보를 활용할 수 있고, 테이블의 해당 페이지의 정보의 변경이 필요한 경우, 정보 변경을 요청할 수 있다. 또한, 저장부(440)에 해당 페이지의 읽기, 쓰기, 트랜잭션의 진행, 종료 및 취소 등의 작업을 제어할 수 있다.
저장부(440)는 실제 페이지가 저장되는 구성요소이다. 저장부(440)는 플래쉬 칩일 수 있다.
시뮬레이션 결과 분석
SQLite와 파일시스템 상에서 본 발명의 일 실시예에 따른 X-FTL의 효과를 알아보기 위해 실험을 진행하였다. 실험 대상은 SQLite의 기본 모드인 rollback, wal 모드와 X-FTL 모드 이며 OpenSSD 보드 상에서 실험이 진행되었다. 실험은 SQLite 실험뿐만이 아닌 파일 시스템에 미치는 영향을 확인하기 위해 ext4 파일 시스템 성능 측정도 진행하였다.
Experimental Setup
OpenSSD 보드는 삼성(Samsung) K0LCG08U1M 플래시 칩이 장착된 개발용 보드이다. 플래시 칩은 MLC NAND 타입이고 128개의 페이지가 1개의 블록을 이루며 각각의 페이지 크기는 8KB이다. OpenSSD의 컨트롤러는 barefoot controller 이며 87.5MHz Arm 프로세서로 구성 되어 있으며 펌웨어를 저장할 96KB의 SRAM 공간을 가지고 있다. SDRAM의 크기는 64MB 이며 매핑 테이블과 같은 메타 데이터 저장을 위한 용도로 사용되고 SATA 인터페이스의 버전은 2.0이다.
실험에 사용된 PC는 다음과 같다.
OS : Ubuntu 12.04, Linux kernel 3.5.2
CPU : Intel core i7-860 2.8GHZ processor
Memory : 2GB DRAM
File systme : ext4 (ordered mode, full mode, off mode)
SQLite version : 3.7.10 rollback 모드, wal 모드 지원
Database page size : 8KB
Workloads
본 발명의 일 실시예에 따른 X-FTL의 효과를 확인하기 위해 인위적으로 만든 워크로드, 실제 안드로이드 환경에서 자주 사용하는 애플리케이션들의 트레이스, TPC-C 워크로드까지 총 3가지의 실험 데이터를 사용하였다. Flexible I/O(FIO)는 파일 시스템 성능 평가를 위해 사용하였다.
Synthetic - 이 워크로드는 dbgen을 통해 만들어진 TPC-H 벤치마크의 partsupply 테이블로 구성되있다. 이 테이블은 각 220바이트 크기의 60000개 튜플을 가지고 있다. 실험에 사용된 트랜잭션은 임의숫자와 partkey의 값이 일치하는 튜플들을 읽어온후 supplycost열을 변경하고 commit 하는 쿼리로 구성되어 있다.
Android Smartphone - 이 워크로드는 실제로 안드로이드 4.1.2 젤리빈 에뮬레이터에서 RL benchmark, Gmail, Facebook, Web browser 같은 유명한 애플리케이션들을 구동하면서 트레이스를 한 것이다. RL Benchmark는 안드로이드 플랫폼에서 SQLite의 성능 측정을 위해 사용되는 유명한 성능평가 애플리케이션이다. 이러한 트레이스는 SQLite의 코드를 수정하여 모든 트랜잭션의 SQL 문을 수집하였다.
TPC -C - DBT2 도구를 이용하여 10개의 warehouse를 포함한 TPC-C 데이터베이스를 생성하였다. 5가지의 트랜잭션 종류들의 비율을 조정하여 혼합형 워크로드와 읽기 집중적인 워크로드 두 개를 만들어 실험 하였다. SQLite의 잠금 단위가 데이터베이스 파일단위이기 때문에 데이터베이스는 한 개의 클라이언트에서만 연결하였다.
File System Benchmark - Flexible I/O(FIO) 성능평가 툴은 파일시스템과 저장장치의 성능평가에 사용되는 툴이다. 사용자가 정한 매개 변수에 따라서 해당 I/O 연산을 수행하는 여러개의 쓰레드를 생성한다. 이 성능평가는 X-FTL을 이용시 임의 쓰기 워크로드에 어떠한 영향을 미치는지 파일시스템의 자체의 성능을 측정하기 위해 진행하였다.
기존 SQLite와의 비교를 위해 rollback, wal 저널모드와 본 발명의 일 실시예에 따른 X-FTL을 사용한 SQLite의 성능을 측정하였다.
Synthetic workload
도 5a 내지 5c는 플래시 칩의 사용 정도를 조절하여 한 블록당 유효한 페이지 비율을 조절하면서 수행한 실험에 대한 SQLite의 수행 시간을 나타낸 그래프이다.
도 5a 내지 도 5c를 참조하면, Synthetic workload에서는 1000개의 트랜잭션을 수행하면서 트랜잭션 하나당 업데이트 요청의 개수를 1~20까지 다양하게 변화시켜 실험하였다. FTL 내에서 수행하는 쓰레기 수거(garbage collection)의 영향을 측정하기 위해서 OpenSSD내부의 플래시 칩의 사용 정도를 조절하여 한 블록당 유효한 페이지의 비율을 30%(도 5a 참조), 50%(도 5b 참조), 70%(도 5c 참조)에 대한 실험을 수행하였다.
도 5a 내지 도 5c에 도시된 바와 같이, 본 발명의 일 실시예에 따른 X-FTL을 사용할 경우 SQLite가 트랜잭션을 수행하는 속도가 rollback이나 wal 저널 모드보다 각각 11.7배 3.2배 빠른 것을 볼 수 있다. 중복된 쓰기 연산과 fsync 시스템 콜의 감소로 인한 효과가 곧바로 상당한 성능향상을 가져옴을 볼 수 있다.
도 6은 트랜잭션당 업데이트하는 페이지의 개수가 5개인 경우에 대한 I/O 상황을 나타낸 표이다.
도 6을 참조하면, Host-side 열은 SQLite에서 쓰기 요청하는 페이지수, 파일 시스템 저널이 쓰기 요청하는 메타데이터 페이지 수, 총 fsync 시스템 콜 횟수를 기록한 열이고, FTL-side 열은 플래시 칩 내에서 실제로 읽기/쓰기를 수행한 페이지수, garbage-collection 수를 기록한 열이다. 즉, 도 6은 rollback, wal 저널 모드와 X-FTL의 실제 쓰기와 fsync 호출 횟수를 비교해 놓은 표이다. rollback 모드 같은 경우에는 두 값이 모두 높은 것을 볼 수 있다. 이는 SQLite에서 트랜잭션들이 실행되고 종료될 때마다 저널 파일을 생성하고 삭제해야 하는데 이때에 fsync를 호출하게 되기 때문이다. wal 모드에서는 업데이트된 페이지를 로그 파일과 실제 데이터베이스 파일에 중복적으로 쓰게 되어 결과적으로 2배의 페이지를 쓰게 된다.
도 7a 및 7b는 "FTL-side" 열의 측정된 값들을 표현한 그래프이다. 여기서, 도 7a는 쓰기 페이지 수, 도 7b는 쓰레기 수거(Garbage collection) 횟수를 표현한 그래프이다. 도 7a 및 7b에 도시된 바와 같이, 실제 I/O 양상이 성능평가 수행시간과 일관성있게 유지되는 것을 볼 수 있다.
이를 보다 상세히 살펴보면, Rollback 모드에서는 각 트랜잭션은 저널 파일로 5개의 페이지 쓰기와 1개의 저널 헤더 페이지 쓰기를 요청하여 데이터 페이지에 대한 fsync, 저널 헤더 페이지에 대한 fsync, 총 2번의 fsync 시스템 콜 호출이 발생한다. 트랜잭션이 commit을 통해 정상적으로 종료되는 시점에는 5개의 데이터페이지와 헤더 페이지를 데이터베이스에 쓰는 작업을 진행하고 fsync 콜은 1번만 호출 된다. 이와 비슷하게 wal 모드도 각 트랜잭션은 로그파일로 5개의 페이지 쓰기와 1개의 로그 헤더 페이지 쓰기를 요청하고 이에 대해 1번의 fsync를 호출한다. 업데이트된 페이지가 실제 데이터베이스 파일로 반영되는 시점은 로그 파일에 대한 체크포인트 연산이 진행될 때이다. 체크포인트는 로그 파일에 1000개의 페이지가 쓰일 때마다 발생하는 게 SQLite의 기본 정책이며, 도 5에 도시한 실험에서는 총 5번의 체크포인트가 발생했다. 로그 파일에 기록되는 동안 중복된 페이지에 대한 업데이트는 체크포인트 시에 가장 최근의 업데이트만 데이터베이스 파일에 적용하고 이전의 업데이트들은 무시가 되므로 데이터베이스 파일에 실제로 쓰기 요청을 하는 데이터 페이지 수는 5000개보다 작다.
본 발명의 일 실시예에 따른 X-FTL을 이용하는 SQLite 실험의 경우에는 어떠한 로그 파일도 사용하지 않고 곧바로 데이터베이스 파일에 쓰기 요청을 하므로 wal 모드보다 절반의 페이지 쓰기 요청을 한다.
Android Smartphone Workload
총 4가지의 실제 스마트폰 워크로드를 OpenSSD 보드 상에서 SQLite를 통해 실험하였다. 마찬가지로 rollback, wal 모드, X-FTL을 이용한 off 모드에서 실험하였다.
도 8은 실제 4가지 안드로이드 스마트 폰의 트레이스를 분석한 표이다. rollback 모드와 wal 모드 간의 차이는 synthetic 워크로드에서 보았던 결과와 유사하므로 이후의 실험 결과들에는 넣지 않았다.
도 9는 실제 4가지의 안드로이드 스마트 폰 워크로드에 대한 수행 시간을 비교한 그래프이다. 도 9에 도시된 바와 같이, 4가지 트레이스에서 모두 본 발명의 일 실시예에 따른 X-FTL을 이용한 off 모드가 wal 모드에 비해 2.4배에서 3배까지 빠른 것을 볼 수 있다. 이 결과는 이전의 synthetic 워크로드 실험 결과와 일치한다. 각 실험들의 특성은 다음과 같다.
도 8을 참조하면, RL Benchmark는 쓰기 집중적인 워크로드로 총 13개의 테스트를 하나의 테이블에 대해 수행한다. 50,000개의 insert, 5000개의 select, 25000개의 updates 그리고 인덱스 생성, 테이블 삭제 테스트가 포함이 되어있다.
Gmail 트레이스는 메일함 안의 메시지를 저장하거나, 메일함 안에서 메시지를 찾는 등의 일반적인 연산들을 포함하고 있다. Gmail은 메일과 관련된 모든 것들을 SQLite에 저장을 하고 사용하기 때문에 대부분의 쿼리가 insert 구문으로 이루어져 있다. 읽기와 쓰기의 비율은 3:7로 쓰기 비율이 더 크다.
Facebook은 facebook 애플리케이션을 통해 새로운 글을 읽거나, 메시지를 보내거나, 사진을 업로드 하는 등의 작업들을 포함하고 있다. 총 11개의 데이터베이스 파일들이 생성되지만, fb.db 파일에 가장 많이 접근된다. Gmail 워크로드와 비슷하게 facebook 또한 화면에 보이는 대부분의 정보를 SQLite에 저장하고 관리하기 때문에 많은 양의 insert 구문을 포함하고 있다. Facebook은 심지어 사진 파일들 까지도 blob 형태로 SQLite를 통해 저장하고 관리하며, 트랜잭션당 업데이트 비율이 gmail보다 높다. 읽기와 쓰기의 비율은 3:7로 gmail과 유사하다.
Browser 트레이스는 실제 안드로이드 웹 브라우저를 통해 웹 신문 읽기, 포털 사이트 검색, 쇼핑 사이트 검색, SNS 사이트 이용과 같은 일반적인 작업을 포함하고 있다. 웹 브라우저는 지난 목록, 즐겨찾기, 사이트 제목, 사진의 썸네일 등과 같은 정보를 SQLite를 통해 저장하고 관리한다. 방문한 모든 페이지에 대한 웹 주소를 저장하기 때문에 history 테이블에 많은 업데이트 요청을 한다. 게다가, 웹페이지에 접근할 때마다 쿠키 정보를 삽입하고 삭제하는 작업을 진행하기 때문에 cookie 테이블에 대해서도 많은 업데이트 작업을 진행한다. 총 6개의 데이터베이스 파일이 생성되고 그 중에서 browser2.db 파일이 가장 많이 사용되는 데이터베이스 파일이다. 웹브라우져 트레이스에서 특이한 점은 많은 양의 조인 쿼리가 포함이 되어있다는 점이다. 읽기와 쓰기의 비율은 4:6이다.
TPC-C Benchmark
TPC-C 의 5가지 트랜잭션 종류들의 비율을 조정해서 쓰기 집중적인 워크로드, 읽기 집중적인 워크로드, selection 워크로드, join 워크로드의 총 4가지의 워크로드를 실험하였다.
도 10은 TPC-C의 5가지 트랜잭션 종류들의 비율을 조정하여 총 4가지의 워크 로드를 실험한 표이다. 즉, 5가지 트랜잭션 종류들의 비율을 조정하여 쓰기 집중적인 워크로드, 읽기 집중적인 워크로드, selection 집중적인 워크로드, join 집중적인 워크로드의 4가지 워크로드를 실험한 것이다.
도 11은 TPC-C 실험을 통해 얻어진 경롸를 분당 트랜잭션 수행 횟수로 나타낸 표이다.
도 10 및 11을 참조하면, 쓰기 집중적인 워크로드의 경우에 각 트랜잭션은 평균 2페이지의 업데이트를 수행한다. 수행 결과 X-FTL을 이용한 모드와 wal 모드간의 성능차이가 synthetic 워크로드에서 보았던 결과만큼 나지 않는데 그 이유는, 모든 트랜잭션이 업데이트로만 이루어진 것이 아니기 때문이다. 그럼에도 불구하고 여전히 둘 사이의 성능차이는 매우 주목할만하다. X-FTL을 사용한 경우가 wal 모드에 비해 130% 가량의 트랜잭션 처리량이 많다.
읽기 집중적인 워크로드의 경우에는 오히려 둘 간의 성능차이가 더 많이 벌어진 것을 볼 수 있다. 본 발명의 일 실시예에 따른 X-FTL을 이용할 경우가 트랜잭션 처리량이 137% 가량 더 많은 것을 볼 수 있다. 이것은 SQLite가 읽기 요청된 페이지에 대한 가장 최신의 페이지를 가져오는데 드는 추가비용에 의한 차이가 있기 때문이다. wal 모드에서 동작하는 경우에는 읽기 요청에 대해 최신 페이지를 얻어오기 위해서 wal 파일에 대해 탐색을 하고 없을 경우는 database 파일에 대해 탐색을 하는 두 번의 연산이 필요하다. 본 발명의 일 실시예에 따른 X-FTL을 이용할 경우 wal 파일을 탐색하는 추가 비용이 줄어들게 된다.
Select 와 Join만을 수행한 워크로드에서는 둘 사이의 성능차이가 거의 없음을 볼 수 있다. 이는 트랜잭션 내에서 업데이트를 하는 구문이 없기 때문에 실제 페이지 쓰기 요청이 일어나지 않고, wal 파일에 데이터가 존재하지 않게 되기 때문이다. join의 경우에는 SQLite의 구현상 오로지 nested-loop 조인만을 사용하기 때문에 추가적인 임시 파일 생성 비용도 들지 않는다.
File System Benchmark
본 발명의 일 실시예에 따른 X-FTL의 부수적인 효과로 SQLite를 이용하는 경우에 대한 원자적 쓰기 보장 뿐만 아닌 파일 시스템을 통해 디스크 입출력을 하는 애플리케이션에 대해서도 원자적 쓰기를 보장 할 수 있다. 따라서 FIO 성능평가 도구를 이용하여 본 발명의 일 실시예에 따른 X-FTL이 파일시스템 자체에는 어떠한 영향을 미치는지 실험하였다. 실험은 4GB 영역에 대해 하나의 쓰레드가 10분간 임의 쓰기를 진행하도록 한뒤 초당 입출력 횟수(IOPS)를 측정하였다. 페이지의 사이즈는 8KB로 고정하였고, fysnc 시스템 콜 호출은 매 1페이지, 5페이지, 10페이지, 15페이지, 20페이지 쓰기를 주기로 하였다. 기본 실험은 ext4 파일 시스템의 ordered 저널링 모드와, full 저널링 모드에 대해서 진행하였고 본 발명의 일 실시예에 따른 X-FTL은 off 모드에서 진행하였다.
도 12는 FIO 성능 평가 도구를 이용하여 X-FTL이 파일 시스템 자체에 미치는 영향을 나타낸 그래프이다.
도 12를 참조하면, fsync주기에 따라 입출력 처리량의 확연히 증가함을 확인 할 수 있다. 또한 본 발명의 일 실시예에 따른 X-FTL을 이용할 경우 기존의 ordered 혹은 full 저널링 모드에 비해 성능이 약 63%, 110% 좋은 것을 확인할 수 있다. 결론적으로, 본 발명의 일 실시예에 따른 X-FTL은 파일시스템이 보장해왔던 원자적 쓰기와 일관성을 보장할 뿐만 아니라 성능또한 더 높다는 것을 알 수 있다.
Recovery Performance
SQLite 상에서 rollback, wal 모드, 본 발명의 일 실시예에 따른 X-FTL 각 3가지의 복구 성능을 측정하기 위해서 synthetic 워크로드 실험을 수행중에 OpenSSD의 전원을 끈뒤 다시 켜서 복구를 진행하는 동안의 시간을 측정하였다. 각각의 실험은 5번 실험의 평균값이며 SQLite가 데이터베이스를 복구하는 시간이 포함되어 있다. 원래 기존의 OpenSSD가 L2P 테이블과 같은 기본 FTL을 복구하는 시간과 파일 시스템을 마운트 하는 시간은 공통적인 부분이기 때문에 제외하였다. 각각의 수행 시간은 OpenSSD에 디버깅 도구를 연결하여 측정하였다.
도 13은 3가지 모드의 평균 복구 시간을 나타낸 표이다.
도 13을 참조하면, Rollback 모드의 경우에 복구하는데 걸리는 시간에는 이전 버전의 페이지를 원래의 데이터베이스 파일로 복사하는 undo 작업 시간이 포함되고, 실험에서 측정된 평균 복사 페이지 개수는 10개였다.
wal 모드의 경우에 복구하는데 걸리는 시간에는 commit을 통해 wal 파일에 기록된 가장 최신의 파일을 원래의 데이터베이스 파일에 복사하는 시간이 포함되고, 기본 wal 파일의 크기가 1000개이기 때문에 rollback 에 비해서 많은 시간이 걸리게 된다. 실험에서는 1개의 데이터베이스 파일에 대한 복구 시간을 측정하였기 때문에, 데이터베이스 파일이 여러 개일 경우에는 각각의 파일에 대해 실험에서 측정된 복구 시간이 추가로 들게 된다.
본 발명의 일 실시예에 따른 X-FTL 모드의 경우에 복구 시간에는 X-L2P 테이블을 읽어 오고 X-L2P 테이블에서 종료(commit)된 최신 페이지들에 대한 매핑 정보를 L2P 테이블로 반영하는 시간이 포함되어 있으며, 3.5 밀리세컨드(ms) 의 시간을 소요한다. 즉, 본 발명의 일 실시예에 따른 X-FTL의 복구에는 추가적인 페이지의 읽기/쓰기 작업이 필요하지 않기 때문에 복구 시간이 훨씬 짧다.
이상 도면 및 실시예를 참조하여 설명하였지만, 본 발명의 보호범위가 상기 도면 또는 실시예에 의해 한정되는 것을 의미하지는 않으며 해당 기술 분야의 숙련된 당업자는 하기의 특허 청구의 범위에 기재된 본 발명의 사상 및 영역으로부터 벗어나지 않는 범위 내에서 본 발명을 다양하게 수정 및 변경시킬 수 있음을 이해할 수 있을 것이다.

Claims (21)

  1. 데이터베이스 관리 시스템과 파일 시스템과 연동하는 메모리 저장 장치에 있어서,
    CoW(Copy-On-Write) 매커니즘을 활용하여 상기 데이터베이스 관리 시스템을 위한 트랜잭션(transaction)의 원자성을 보장하는 플래시 변환 계층(FTL:Flash Traslation Layer)을 포함하되,
    상기 플래시 변환 계층은 트랜잭션을 관리하는 트랜잭션 테이블을 생성하고,
    상기 트랜잭션 테이블은 각각의 페이지에 대해, 트랜잭션을 식별하는 트랜잭션 아이디(ID), 논리적 페이지 위치, 물리적 페이지 위치 및 트랜잭션의 현재 상태 정보를 포함하는 것을 특징으로 하는 메모리 저장 장치.
  2. 삭제
  3. 제 1 항에 있어서, 상기 플래시 변환 계층은
    논리적 페이지 위치 및 물리적 페이지 위치의 매핑 관계를 나타내는 페이지 매핑 테이블과 상기 트랜잭션 테이블을 혼합하여 사용하는 것을 특징으로 하는 메모리 저장 장치.
  4. 제 1 항에 있어서,
    상기 트랜잭션의 현재 상태 정보는 해당 트랜잭션이 진행 중인 트랜잭션인지, 종료된 트랜잭션인지, 취소된 트랜잭션인지에 대한 정보를 포함하는 것을 특징으로 하는 메모리 저장 장치.
  5. 제 1 항에 있어서, 상기 플래시 변환 계층은
    상기 트랜잭션 테이블에서 업데이트된 페이지들의 이전 위치에 쓰인 페이지들은 트랜잭션이 종료되기 전까지 희생 페이지로 선택하지 않고, 트랜잭션이 취소되는 경우 롤백(rollback) 작업을 위해 사용하는 것을 특징으로 하는 메모리 저장 장치.
  6. 제 1 항에 있어서, 상기 플래시 변환 계층은
    활성화중인 트랜잭션이 성공적으로 종료되었을 경우, 상기 트랜잭션 테이블에서 유지되던 이전 위치의 페이지들을 관리 대상에서 제외하여 희생 페이지로 선택할 수 있도록 하는 것을 특징으로 하는 메모리 저장 장치.
  7. 제 1 항에 있어서, 상기 플래시 변환 계층은
    쓰기 요청을 수행하는 명령어, 읽기 요청을 수행하는 명령어, 트랜잭션의 상태를 완료(commit)로 변경하는 명령어 및 트랜잭션의 상태를 취소(abort)로 변경하는 명령어를 사용하는 것을 특징으로 하는 메모리 저장 장치.
  8. 제 1 항에 있어서,
    상기 트랜잭션 테이블에는 특정 페이지가 변경되어 쓰기 요청이 수신된 시점에만 트랜잭션 정보가 추가되는 것을 특징으로 하는 메모리 저장 장치.
  9. 제 1 항에 있어서,
    상기 트랜잭션 테이블의 각각의 엔트리는 가장 최신 페이지 번호와 가장 최근 종료되어 기록된 이전 버전의 페이지 번호를 유지하면서 각 트랜잭션 요청에 대응하는 페이지를 제공하는데 사용되는 것을 특징으로 하는 메모리 저장 장치.
  10. 제 9 항에 있어서, 상기 플래시 변환 계층은
    읽기 요청 명령어가 들어오는 경우, 상기 트랜잭션 아이디와 상기 논리적 페이지 번호가 모두 일치하는 엔트리가 상기 트랜잭션 테이블에 존재하는 경우에만 상기 최신 페이지를 전달하고, 그렇지 않은 경우, 상기 이전 버전의 페이지를 전달하는 것을 특징으로 하는 메모리 저장 장치.
  11. 제 9 항에 있어서, 상기 플래시 변환 계층은
    트랜잭션을 종료하라는 종료(commit) 명령어가 들어오는 경우, 종료 요청 관련 트랙잭션에 의해 업데이트된 모든 페이지가 물리적 낸드(nand) 페이지로 온전히 쓰여지길 기다리고, 이후 상기 트랜잭션 테이블 내의 상기 종료 요청 관련 트랜잭션에 대한 현재 상태 정보를 모두 종료(commit)로 변경하고, 해당 트랜잭션 테이블 정보를 상기 저장 장치에 영구적으로 기록한 뒤, 상기 트랜잭션 테이블에 변경된 매핑 정보를 반영하는 것을 특징으로 하는 메모리 저장 장치.
  12. 제 1 항에 있어서,
    상기 메모리 저장 장치는 eMMC(embedded Multi Media Card) 또는 플래시 메모리 기반 저장 장치인 것을 특징으로 하는 메모리 저장 장치.
  13. 데이터베이스 관리 시스템과 파일 시스템과 연동하는 메모리 저장 장치에서 트랜잭션을 지원하는 방법에 있어서,
    상기 메모리 저장 장치의 플래시 변환 계층이 CoW(Copy-On-Write) 매커니즘을 활용하여 상기 데이터베이스 관리 시스템을 위한 트랜잭션(transaction)의 원자성을 보장하는 단계를 포함하되,
    상기 트랜잭션의 원자성 보장 단계는 트랜잭션을 관리하는 트랜잭션 테이블을 생성하는 단계를 포함하고,
    상기 트랜잭션 테이블은 각각의 페이지에 대해, 트랜잭션 아이디(ID), 논리적 페이지 위치, 물리적 페이지 위치 및 트랜잭션의 현재 상태 정보를 포함하는 것을 특징으로 하는 메모리 저장 장치에서 트랜잭션을 지원하는 방법.
  14. 삭제
  15. 디바이스의 데이터 관리를 수행하는 데이터베이스 시스템;
    상기 데이터베이스 관리 시스템과 메모리 저장 장치의 중간에서 트랜잭션 기능을 이용할 수 있도록 메신저 역할을 수행하는 파일 시스템; 및
    상기 데이터베이스 관리 시스템과 상기 파일 시스템과 연동하는 메모리 저장 장치를 포함하되, 상기 메모리 저장 장치는
    CoW(Copy-On-Write) 매커니즘을 활용하여 상기 데이터베이스 관리 시스템을 위한 트랜잭션(transaction)의 원자성을 보장하는 플래시 변환 계층(FTL:Flash Traslation Layer)을 포함하고,
    상기 플래시 변환 계층은 트랜잭션을 관리하는 트랜잭션 테이블을 생성하고,
    상기 트랜잭션 테이블은 각각의 페이지에 대해, 트랜잭션을 식별하는 트랜잭션 아이디(ID), 논리적 페이지 위치, 물리적 페이지 위치 및 트랜잭션의 현재 상태 정보를 포함하는 것을 특징으로 하는 메모리 시스템.
  16. 삭제
  17. 제 15 항에 있어서, 상기 데이터베이스 관리 시스템은
    변경된 페이지를 다른 저널 파일이 아닌 데이터베이스 파일에 곧바로 적용하기 위해 저널 모드를 오프(off)시키는 것을 특징으로 하는 메모리 시스템.
  18. 제 15 항에 있어서, 상기 데이터베이스 관리 시스템은
    상기 메모리 자장 장치에 트랜잭션의 취소(abort)와 관련된 작업을 수행하도록 지시하기 위해, 디바이스 제어 함수(ioctl)를 통해 취소(abort) 명령을 전달하는 것을 특징으로 하는 메모리 시스템.
  19. 제 15 항에 있어서, 상기 파일 시스템은
    트랜잭션에 의해 특정 페이지가 수정되었을 경우, 상기 메모리 저장 장치로 트랜잭션 아이디를 함께 전달하는 것을 특징으로 하는 메모리 시스템.
  20. 제 15 항에 있어서, 상기 파일 시스템은
    읽기 또는 쓰기 요청이 들어올 경우, 트랜잭션 아이디 및 읽기 또는 쓰기 요청을 할 놀리 페이지 번호를 포함하는 형태의 명령어로 변환하여 상기 메모리 저장 장치로 전달하는 것을 특징으로 하는 메모리 시스템.
  21. 제 15 항에 있어서, 상기 파일 시스템은
    트랜잭션의 종료 또는 취소 작업과 관련된 기능이 호출되는 경우, 이를 트랜잭션 아이디 및 트랜잭션의 현재 상태를 포함하는 형태의 명령어로 변환하여 상기 메모리 저장 장치로 전송하되,
    트랜잭션의 취소 후에도 상기 파일 시스템 상의 버퍼에 남아 있을 수 있는 페이지는 삭제하는 것을 특징으로 하는 메모리 시스템.

KR1020140113390A 2014-08-28 2014-08-28 메모리 저장 장치, 데이터베이스를 위한 트랜잭션 기능을 지원하는 방법 및 메모리 시스템 KR101529651B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020140113390A KR101529651B1 (ko) 2014-08-28 2014-08-28 메모리 저장 장치, 데이터베이스를 위한 트랜잭션 기능을 지원하는 방법 및 메모리 시스템

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020140113390A KR101529651B1 (ko) 2014-08-28 2014-08-28 메모리 저장 장치, 데이터베이스를 위한 트랜잭션 기능을 지원하는 방법 및 메모리 시스템

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020130076665A Division KR101491626B1 (ko) 2013-07-01 2013-07-01 메모리 저장 장치, 데이터베이스를 위한 트랜잭션 기능을 지원하는 방법 및 메모리 시스템

Publications (2)

Publication Number Publication Date
KR20150003689A KR20150003689A (ko) 2015-01-09
KR101529651B1 true KR101529651B1 (ko) 2015-06-19

Family

ID=52476316

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140113390A KR101529651B1 (ko) 2014-08-28 2014-08-28 메모리 저장 장치, 데이터베이스를 위한 트랜잭션 기능을 지원하는 방법 및 메모리 시스템

Country Status (1)

Country Link
KR (1) KR101529651B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190003091A (ko) 2017-06-30 2019-01-09 단국대학교 산학협력단 원자적 연산을 이용한 파일 시스템 저널링 장치 및 방법

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101533042B1 (ko) * 2015-02-11 2015-07-09 성균관대학교산학협력단 데이터 일관성을 보장하기 위한 컴퓨팅 장치 및 방법
KR101881038B1 (ko) * 2016-11-29 2018-08-17 성균관대학교 산학협력단 비휘발성 메모리에 저장된 메모리 매핑 파일의 원자적 업데이트 방법 및 제어 장치
KR101881039B1 (ko) * 2017-01-17 2018-07-23 성균관대학교 산학협력단 비휘발성 메모리에 저장된 메모리 매핑 파일의 비동기식 원자적 업데이트 방법 및 제어 장치
KR20190046169A (ko) 2017-10-25 2019-05-07 에스케이하이닉스 주식회사 데이터 처리 시스템 및 데이터 처리 시스템의 동작방법
CN113806314B (zh) * 2020-06-15 2024-01-26 中移(苏州)软件技术有限公司 一种数据存储方法、装置、计算机存储介质及系统

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20090021063A (ko) * 2007-08-24 2009-02-27 삼성전자주식회사 플래시 메모리를 스토리지로 사용하는 장치 및 그 동작방법

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20090021063A (ko) * 2007-08-24 2009-02-27 삼성전자주식회사 플래시 메모리를 스토리지로 사용하는 장치 및 그 동작방법

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190003091A (ko) 2017-06-30 2019-01-09 단국대학교 산학협력단 원자적 연산을 이용한 파일 시스템 저널링 장치 및 방법
KR101966399B1 (ko) 2017-06-30 2019-04-08 단국대학교 산학협력단 원자적 연산을 이용한 파일 시스템 저널링 장치 및 방법

Also Published As

Publication number Publication date
KR20150003689A (ko) 2015-01-09

Similar Documents

Publication Publication Date Title
KR101491626B1 (ko) 메모리 저장 장치, 데이터베이스를 위한 트랜잭션 기능을 지원하는 방법 및 메모리 시스템
Xu et al. Finding and fixing performance pathologies in persistent memory software stacks
KR101529651B1 (ko) 메모리 저장 장치, 데이터베이스를 위한 트랜잭션 기능을 지원하는 방법 및 메모리 시스템
Kang et al. X-FTL: transactional FTL for SQLite databases
Zhang et al. De-indirection for flash-based SSDs with nameless writes.
US9075758B2 (en) Removable storage device with transactional operation support and system including same
US7383290B2 (en) Transaction processing systems and methods utilizing non-disk persistent memory
EP3531292B1 (en) Methods and apparatus for supporting persistent memory
Oh et al. SHARE interface in flash storage for relational and NoSQL databases
US10423532B2 (en) Guest ordering of host file system writes
US9489226B2 (en) Systems and methods to manage write commands in a cache
US9778860B2 (en) Re-TRIM of free space within VHDX
CN103348331A (zh) 具数据管理的层级式数据储存系统及其操作方法
US20130111103A1 (en) High-speed synchronous writes to persistent storage
US10019193B2 (en) Checkpointing a journal by virtualization of non-volatile random access memory
Son et al. SSD-assisted backup and recovery for database systems
Do et al. Better database cost/performance via batched I/O on programmable SSD
Zhang et al. Persistent state machines for recoverable in-memory storage systems with {NVRam}
Purandare et al. Append is near: Log-based data management on ZNS SSDs
JP6198992B2 (ja) 計算機システム、及び、データベース管理方法
WO2014061068A1 (en) Storage system and method for controlling storage system
KR100981064B1 (ko) 저널링 파일 시스템을 이용한 소프트웨어 레이드에서의 일관성 유지방법
Lee et al. VM-aware flush mechanism for mitigating inter-VM I/O interference
KR101966399B1 (ko) 원자적 연산을 이용한 파일 시스템 저널링 장치 및 방법
Kang et al. When address remapping techniques meet consistency guarantee mechanisms

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20180508

Year of fee payment: 4