KR102346601B1 - 운영체제 내 쓰기 순서 보장이 필요한 여러 쓰기 입출력의 처리 속도 향상 방법 - Google Patents

운영체제 내 쓰기 순서 보장이 필요한 여러 쓰기 입출력의 처리 속도 향상 방법 Download PDF

Info

Publication number
KR102346601B1
KR102346601B1 KR1020200023816A KR20200023816A KR102346601B1 KR 102346601 B1 KR102346601 B1 KR 102346601B1 KR 1020200023816 A KR1020200023816 A KR 1020200023816A KR 20200023816 A KR20200023816 A KR 20200023816A KR 102346601 B1 KR102346601 B1 KR 102346601B1
Authority
KR
South Korea
Prior art keywords
block
write
journal
output
thread
Prior art date
Application number
KR1020200023816A
Other languages
English (en)
Other versions
KR20210108778A (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 KR1020200023816A priority Critical patent/KR102346601B1/ko
Priority to US17/186,154 priority patent/US11436064B2/en
Publication of KR20210108778A publication Critical patent/KR20210108778A/ko
Application granted granted Critical
Publication of KR102346601B1 publication Critical patent/KR102346601B1/ko

Links

Images

Classifications

    • 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/24Sorting, i.e. extracting data from one or more carriers, rearranging the data in numerical or other ordered sequence, and rerecording the sorted data on the original carrier or on a different carrier or set of carriers sorting methods in general
    • 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/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • 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/54Interprogram communication
    • G06F9/545Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
    • 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
    • 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/22Microcontrol or microprogram arrangements
    • G06F9/28Enhancement of operational speed, e.g. by using several microcontrol devices operating in parallel
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Computer Hardware Design (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

본 발명에 따른 운영체제 내 쓰기 순서 보장이 필요한 여러 쓰기 입출력의 처리 속도 향상 방법은 입출력 스레드에서, 데이터 블록에 대한 I/O 준비과정 및 I/O 요청을 수행하는 단계; 응용 프로그램 스레드가 저널링 스레드를 활성화하는 단계; 상기 데이터 블록에 대한 I/O 완료 대기 및 상기 저널링 스레드의 커밋 대기 단계; 상기 저널링 스레드에서, 상기 3)단계와 동시에 저널 블록에 대한 I/O 준비과정 및 I/O 요청하는 단계; 상기 저널 블록에 대한 I/O 요청 후, 상기 저널 블록에 대한 I/O 완료 대기 중 저널 커밋 블록에 대한 I/O 준비하는 단계; 상기 저널 블록에 대한 I/O 완료 대기 후, 상기 저널 커밋 블록에 대한 I/O 요청하는 단계; 상기 저널 커밋 블록에 대한 I/O 완료 대기하는 단계; 를 포함하여 쓰기 입출력 간 순서가 보장되어야 하는 요청에서의 지연 감소 및 대역폭 성능이 향상되고, fsync 시스템 콜을 빈번하게 수행하는 관련 어플리케이션에서의 성능이 향상되는 효과가 있다.

Description

운영체제 내 쓰기 순서 보장이 필요한 여러 쓰기 입출력의 처리 속도 향상 방법{METHOD FOR IMPROVING PROCESSING SPEED OF INPUT AND OUTPUT RELATED TO A PLURALITY OF WRITING FOR GUARANTING A SEQUENCE OF WRITING IN AN OPERATING SYSTEM}
본 발명은 운영체제 내 쓰기 순서 보장이 필요한 여러 쓰기 입출력의 처리 속도 향상 방법에 관한 것으로써, 더욱 상세하게는 운영체제에서 제공하는 연속된 쓰기 입출력 과정에서, 이전 쓰기 입출력 동작이 완료되기 전에 다음 번 쓰기 입출력 동작의 준비 과정을 수행함으로써, 연속된 쓰기 입출력 과정의 전체 수행 시간을 감소시킬 수 있는 운영체제 내 쓰기 순서 보장이 필요한 여러 쓰기 입출력의 처리 속도 향상 방법에 관한 것이다.
플래시 메모리 및 상 변화 메모리와 같은 비휘발성 메모리 기술의 발달로 극도로 낮은 대기시간 및 높은 대역폭 I/O 성능을 제공하는 초저 대기시간 SSD(솔리드 스테이트 드라이브)가 출현했다.
최신 삼성 zSSD, Intel Optane SSD, Toshiba XLFlash와 같은 최첨단 비휘발성 메모리 익스프레스(NVMe) SSD는 10 마이크로 초 미만의 I/O 대기시간과 3.0 GB/s의 I/O 대역폭을 제공한다.
이러한 초저 대기시간 SSD를 사용하면 운영 체제 I/O 스택이 총 I/O 대기시간의 상당 부분을 차지하고 스토리지 액세스의 병목현상이 되고 있다. I/O 스택 오버 헤드를 완화하는 한 가지 방법은 사용자 프로세스가 스토리지 장치에 직접 액세스할 수 있도록 허용하는 것이다. 이 접근법은 I/O 스택 오버 헤드를 제거하는 데 효과적이지만 응용 프로그램에 대한 많은 부담을 주는 문제점이 있다.
예를 들어, 애플리케이션은 간단한 블록 레벨 인터페이스(예: SPDK의 BlobFS) 위에 유용한 I/O 프리미티브를 구축하기 위해 자체 블록 관리 레이어 또는 파일 시스템을 가져야 한다. 여러 응용 프로그램이나 사용자에게 보호 기능을 제공하는 것도 어렵다는 문제점이 있다. 이러한 문제점은 저장 장치에 대한 사용자 수준에서 직접 접근의 적용 가능성을 제한하게 되는 또 다른 문제점이 있다.
전통적으로 운영 체제는 저장소 관리 및 응용 프로그램에 파일 추상화를 제공한다. 운영 체제를 고속 저장 장치에 더 적합하게 만들기 위해 I/O 스택 오버 헤드를 줄이는 많은 제안이 있다. 몇 가지 예를 들자면, 문맥상 스위칭 오버 헤드를 없애기 위해 폴링 사용, 인터럽트 처리에서 하단 반을 제거, 분산/ 분산 I/O 명령, 간단한 블록 I/O 스케줄링 계층 등이 있다.
이러한 제안은 I/O 스택 오버 헤드를 줄이는데 효과적이며, 그 중 일부는 주류 운영체제(예: Linux의 NVMe SSD 용 I/O 스택)에서 채택되었다. 그러나 스토리지 액세스에서 I/O 대기시간을 최적화하기 위한 새로운 방법이 필요한 실정이다.
현재 I/O 스택을 구현하려면 단일 I/O 요청을 처리하는데 많은 작업이 필요하다. 예를 들어, 응용 프로그램이 읽기 I/O 요청을 발행하면 페이지가 할당되고, 페이지 캐시에 색인화되며, 페이지에 대한 DMA 매핑이 만들어지고 여러 가지 보조 데이터 구조들(예: Linux의 bio, request, iod)이 할당되고 조작된다.
현재 I/O 스택을 구현하려면 단일 I/O 요청을 처리하는데 많은 작업이 필요하다. 예를 들어, 응용 프로그램이 쓰기 I/O 및 fsync 요청을 발행하면 파일 시스템의 저널링 정책에 따라 추가적인 쓰기 I/O가 요청되며 각 쓰기 I/O 요청을 처리하기 위한 I/O 준비 작업이 동기적으로 발생한다.초저 대기시간 SSD를 사용하면 이러한 작업을 실행하는 데 걸리는 시간이 실제 I/O 데이터 전송 시간보다 길어진다. 초고성능 SSD 내부 입출력 처리 시간이 매우 짧아 운영체제가 차지하는 오버헤드보다 작아졌기 때문이다.
따라서 이러한 작업들을 저장장치 입출력 처리 시간과 겹침으로써 종단 간 여러 쓰기 입출력 지연을 크게 줄일 필요가 있다.
대한민국 공개특허공보 10-2015-0080217호(2015.06.05)
상술한 문제점들과 필에 따라 본 발명은 운영체제에서 제공하는 연속된 쓰기 입출력 과정에서, 이전 쓰기 입출력 동작이 완료되기 전에 다음 번 쓰기 입출력 동작의 준비 과정을 수행함으로써, 연속된 쓰기 입출력 과정의 전체 수행 시간을 감소시킬 수 있는 운영체제 내 쓰기 순서 보장이 필요한 여러 쓰기 입출력의 처리 속도 향상 방법을 제공하는데 목적이 있다.
상술한 목적을 달성하기 위한 본 발명에 따른 운영체제 내 쓰기 순서 보장이 필요한 여러 쓰기 입출력의 처리 속도 향상 방법은 입출력 스레드에서, 데이터 블록에 대한 I/O 준비과정 및 I/O 요청을 수행하는 단계; 응용 프로그램 스레드가 저널링 스레드를 활성화하는 단계; 상기 데이터 블록에 대한 I/O 완료 대기 및 상기 저널링 스레드의 커밋 대기 단계; 상기 저널링 스레드에서, 상기 3)단계와 동시에 저널 블록에 대한 I/O 준비과정 및 I/O 요청하는 단계; 상기 저널 블록에 대한 I/O 요청 후, 상기 저널 블록에 대한 I/O 완료 대기 중 저널 커밋 블록에 대한 I/O 준비하는 단계; 상기 저널 블록에 대한 I/O 완료 대기 후, 상기 저널 커밋 블록에 대한 I/O 요청하는 단계; 상기 저널 커밋 블록에 대한 I/O 완료 대기하는 단계; 를 포함하는 것을 특징으로 한다.
상술한 목적을 달성하기 위한 본 발명에 따른 운영체제 내 쓰기 순서 보장이 필요한 여러 쓰기 입출력의 처리 속도 향상 방법에서 저널 블록 및 커밋 블록의 I/O 준비 동작은 저널 영역 할당, 버퍼 페이지 할당, 블록 I/O 관련 데이터 구조체 할당과 조작, 및 I/O디스패치 때까지 블록 계층 요청 어느 하나의 동작인 것을 특징으로 한다.
상술한 목적을 달성하기 위한 본 발명에 따른 운영체제 내 쓰기 순서 보장이 필요한 여러 쓰기 입출력의 처리 속도 향상 방법에서 저널 블록 및 커밋 블록의 I/O 준비 동작은 상기 데이터 블록의 장치 입출력 작업 및 상기 저널 블록의 장치 입출력 작업은 중첩되는 것을 특징으로 한다.
상술한 목적을 달성하기 위한 본 발명에 따른 운영체제 내 쓰기 순서 보장이 필요한 여러 쓰기 입출력의 처리 속도 향상 방법에서 저널링 스레드는 상기 저널 블록에 대한 I/O 준비를 상기 데이터 블록의 I/O와 중첩되도록 하기 위해 상기 데이터 블록의 I/O이 완료되기 전에 작동되는 것을 특징으로 한다.
상술한 목적을 달성하기 위한 본 발명에 따른 운영체제 내 쓰기 순서 보장이 필요한 여러 쓰기 입출력의 처리 속도 향상 방법에서 저널링 스레드는 상기 데이터 블록의 I/O가 발생하는 동안 상기 저널 블록 쓰기를 준비하기 시작하는 것을 특징으로 한다.
상술한 목적을 달성하기 위한 본 발명에 따른 운영체제 내 쓰기 순서 보장이 필요한 여러 쓰기 입출력의 처리 속도 향상 방법에서 상기 저널링 스레드는 상기 저널 블록 쓰기를 준비 후 상기 저널 커밋 블록에 대한 I/O 준비를 시작하는 것을 특징으로 하는 한다.
상술한 목적을 달성하기 위한 본 발명에 따른 운영체제 내 쓰기 순서 보장이 필요한 여러 쓰기 입출력의 처리 속도 향상 방법에서 저널링 스레드는 상기 커밋 블록 준비 완료 직후 상기 저널 커밋 블록에 대한 I/O을 즉시 발행하지 않고, 저장 매체에 쓰기의 순서를 유지하기 위해 저널 블록 쓰기에 대한 완료까지 대기한 후 flush 명령을 사용하여 flush가 완료된 후에 커밋 블록 쓰기가 전달되는 것을 특징으로 한다.
본 발명에 따른 운영체제 내 쓰기 순서 보장이 필요한 여러 쓰기 입출력의 처리 속도 향상 방법은 쓰기 입출력 간 순서가 보장되어야 하는 요청에서의 지연 감소 및 대역폭 성능이 향상되고, fsync 시스템 콜을 빈번하게 수행하는 관련 어플리케이션에서의 성능이 향상되는 효과가 있다.
도 1은 다양한 SSD에서 4KB 임의 읽기 및 임의 쓰기 +fsync 작업 부하에 대한 I/O 대기시간 및 고장을 보여주는 도면이다.
도 2는 NVMe SSD의 기본 블록 계층인 Linux의 다중 대기열 블록 계층의 개요를 보여주는 도면이다.
도 3(a)은 파일 시스템 저널링을 사용하는 fsync 시스템 호출의 일반적인 동작, 도 3(b)은 본 발명에서 제안하는 fsync 시스템 호출의동작을 보여주는 도면이다.
도 4는 FIO fsync 기반 4KB 임의 쓰기 작업 부하에 대한 AIOS의 성능 영향을 보여주는 도면이다.
도 5는 Rockb DB에서 DBbench의 성능 결과 그래프 도면이다.
도 6은 각 작업 부하에 대한 표준화 된 CPU 런타임 분석을 보여주는 그래프도면이다.
도 7 및 도 8는 다양한 저장장치 및 스레드 수에서 Filebenchvarmail(기본 구성)과 Sysbench-OLTP-insert(10GB DB 테이블 크기)성능을 보여주는 도면이다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 실시예를 가질 수 있다. 운영체제 내 쓰기 순서 보장을 필요로 하는 파일 시스템 전반에 적용이 가능한 바, 본 발명에서는 리눅스 ext4 파일 시스템 환경에 대해 발명 내용을 적용하였다. 이는 본 발명을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 특정 실시예들을 도면을 참조하여 상세하게 설명하며, 각 도면을 설명하면서 유사한 참조부호를 유사한 구성요소에 대해 사용하였다.
제1, 제2, A, B 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 본 발명의 권리범위를 벗어나지 않으면서 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소도 제1 구성요소로 명명될 수 있다. 및/또는 이라는 용어는 복수의 관련된 기재 항목들의 조합 또는 복수의 관련된 기재 항목들 중의 어느 항목을 포함한다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급될 때에는 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다.
본 출원에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
명세서 및 청구범위 전체에서, 어떤 부분이 어떤 구성 요소를 포함한다고 할때, 이는 특별히 반대되는 기재가 없는 한 다른 구성 요소를 제외하는 것이 아니라 다른 구성 요소를 더 포함할 수 있다는 것을 의미한다.
이하, 첨부된 도면을 참조하여 본 발명에 따른 운영체제 내 쓰기 순서 보장이 필요한 여러 쓰기 입출력의 처리 속도 향상 방법에 대해 설명한다.
파이프 라인을 멈추게 하기 위해 데이터를 CPU에 지속적으로 공급해야 하기 때문에 저장 성능은 컴퓨터 시스템에서 중요하다. 저장 장치는 CPU보다 훨씬 느리며, 수십 년 동안이 넓은 성능 격차가 있었다.
그러나, 현대의 저장 장치의 최근 도입은 이러한 격차를 급격히 좁혀주고 있다. 예를 들어, 최신 삼성 zSSD, Intel Optane SSD, Toshiba XLFlash와 같은 최첨단 비휘발성 메모리 익스프레스(NVMe) SSD는 10 마이크로 초 미만의 I/O 대기시간과 3.0 GB/s의 I/O 대역폭인 것으로 나타나 기존 디스크보다 훨씬 빠르다.
이러한 초저 대기시간 SSD를 활용하는 경우, 커널 I/O 스택은 더 이상 I/O 대기시간에서 무시할 수 있는 부분이 아니다.
도 1은 다양한 SSD에서 4KB 임의 읽기 및 임의 쓰기 +fsync 작업 부하 (동기식 FIO엔진으로 구현됨)에 있어 I/O latency 및 CPU utilization에 대한 그래프이다.
도면에 도시된 바와 같이 더 빠른 디바이스는 더 낮은 I/O 대기시간을 나타내는 것을 알 수 있다.
그러나 OS 커널이 소비하는 시간은 읽기 및 쓰기 작업 부하에서 각각 38% 및 51% 증가한다. 수축된 장치 I/O 시간으로 인해 OS 커널이 소비한 절대 시간은 다른 저장 장치간에 유사하지만 커널의 상대적 부분은 증가한다.
Amdahl의 법칙에 따르면, 커널 I/O 스택을 상당히 최적화할 필요가 있다.
I/O 스택은 여러 개의 레이어로 구성된다. 가상 파일 시스템(VFS) 계층은 기본 파일 시스템의 추상화를 제공한다. 페이지 캐시 계층은 파일 데이터의 캐싱을 제공한다. 파일 시스템 계층은 블록 저장소에 파일 시스템별 구현을 제공한다.
블록 계층은 OS 레벨 블록 요청/응답 관리 및 블록 I/O 스케줄링을 제공한다. 마지막으로 장치 드라이버는 장치별 I/O 제출 및 I/O 완료를 처리한다.
본 발명에서는 Linux 커널과 NVMe 기반 SSD가 있는 Ext4 파일 시스템에서 대기시간에 민감한 쓰기(+fsync) I/O 경로를 대상으로 한다.
그것들은 모바일에서 기업까지 널리 채택된 시스템 구성이기 때문이다.
도 2는 NVMe SSD의 기본 블록 계층인 Linux의 다중 대기열 블록 계층의 개요를 보여준다. alloc_bio(33행)는 LBA, I/O 길이 및 복사할 페이지가 포함된 블록 요청(bio)을 생성한다. submit_bio(34행)가 호출되면, 바이오(bio)와 관련된 요청 구조가 만들어지며 요청 큐에 대기하게 된다.
블럭 플러깅이나 플러그를 뽑지 않으면, 요청은 요청 대기열에 삽입된다.
요청 병합과 요청 스케줄링은 요청 큐에서 수행된다. 블록 계층은 멀티 코어 확장성을 위한 코어 당 소프트웨어 대기열과, 각 장치 측 대기열에 대한 하드웨어 대기열이라는 두 개의 대기열을 유지 관리한다.
요청이 저장 장치에 전달되면 nvme_queue_rq가 호출되고, 분산/수집 목록을 갖는 DMA 매핑 관련 구조인 iod를 할당하며, 디스패치된 요청의 페이지에 대해 DMA 매핑이 수행된다. 다음 단계에서는 NVMe 프로토콜의 물리적 영역 페이지가 포함된 목록인 prp_list가 할당되어 대상 DMA 주소로 채워진다.
마지막으로 NVMe 명령이 NVMe 제출 큐로 발행된다. 완료되면 인터럽트 처리기는 페이지의 DMA 주소를 매핑 해제하고 unlock_page를 호출하여 차단된 스레드를 깨우는 완료 함수를 호출한다.
fsync는 쓰기 경로에서 응용 프로그램 성능에 가장 큰 영향을 미치는 차단 의미론 기능이다. fsync에 의해 발행된 쓰기 I/O는 페이지 캐시에 버퍼링된 쓰기와 관련된다.
그러나 버퍼링 된 쓰기 경로는 장치 I/O 작업을 수행하지 않으므로 I/O와 계산을 겹칠 기회가 없다.
반면 fsync는 파일 시스템 충돌 일관성 메커니즘(즉, 파일 시스템 저널링)으로 인해 여러 장치 I/O 작업을 수반할 수 있다.
도 3(a)은 정렬 모드에서 실행되는 Ext4 파일 시스템에서 파일 시스템 저널링을 사용하는 fsync 시스템 호출의 일반적인 동작을 보여준다.
첫째, 응용 프로그램 스레드가 더티 데이터 페이지를 작성하고 해당 페이지의 완료를 기다린다. 그런 다음 응용 프로그램 스레드는 파일 시스템 트랜잭션을 커밋하기 위해 저널링 스레드(Ext4의 JBD2)를 활성화한다.
그런 다음 저널링 스레드 (JBD2)는 메타 데이터 변경 사항 (도면에서 저널 블록)을 저널링 영역에 기록하고 완료를 기다린 다음 마지막으로 커밋 블록을 작성한다.
저널 블록과 커밋 블록 쓰기 사이에 플러시 명령이 적용되어 쓰기 순서를 적용한다. 따라서 단일 fsync 시스템 호출에 대해 총 3개의 장치 쓰기 작업이 발생한다. 읽기 경로의 경우와 마찬가지로 fsync 경로와 관련된 fsync 및 계산 부분과 관련된 I/O 장치 작업을 오버랩할 수 있다.
도 3(b)에 도시된 바와 같이, 저널 블록 및 커밋 블록 준비 동작 (예: 저널 영역 할당, 버퍼 페이지 할당, 데이터 구조체 관련 블록 I/O 할당 및 조작, I/O디스패치 때까지 블록 계층 요청 및 요청)는 각각 데이터 블록 입출력 작업 및 저널 블록 장치 입출력 작업과 겹칠 수 있다.
이렇게 하면 해당 블록 준비에 소요되는 시간을 효과적으로 줄일 수 있으므로 fsync 시스템 호출의 중요한 경로가 줄어 든다.
상술한 바와 같이 fsync 시스템 호출은 다중 I/O 작업을 수반한다.
그러나 본 발명에서 읽기 경로에 대해 제안한 동일한 체계를 재사용 할 수는 없다. 예를 들어 fsync가 발생하면 페이지가 이미 할당되고 페이지 캐시에서 색인된다. I/O 관련 계산 작업을 장치 I/O 작업과 겹치는 것에 초점을 맞추는 대신 파일 I/O 관련 계산을 장치 I/O 작업과 겹치게 하는 데 중점을 둔다. 특히, 저널 쓰기를 준비하거나 데이터 블록 입출력 시간 및 저널 블록 입출력 시간으로 블록 쓰기를 준비하는 시간을 겹치게 한다.
또한, 데이터 블록 I/O 작업과 저널 블록 준비 또는 저널 블록 I/O와 커밋 블록 준비 간에는 종속성이 없다. 이러한 이유 때문에 파일 시스템을 겹치게 하는 것은 완벽하게 안전하며 파일 시스템 충돌 일관성에 영향을 미치지 않는다. 이를 위해 fsync 경로를 도 3(b)와 같이 변경했다.
저널 블록 준비를 데이터 블록 입출력과 겹치기 위해 저널링 스레드는 데이터 블록 입출력이 완료되기 전에 작동된다. 그런 다음 데이터 블록 I/O가 발생하는 동안 저널 블록 쓰기를 준비하기 시작한다.
저널 블록 준비 직후, 저널링 스레드는 커밋 블록 준비를 시작한다. 저널링 스레드는 커밋 블록 준비 완료 직후 커밋 블록 입출력을 즉시 발행하지 않는다.
대신에 저장 매체에 쓰기의 순서를 유지하기 위해 flush 명령이 사용되며 flush가 완료된 후에 커밋 블록 쓰기가 전달된다.
본 발명에서 제안된 방법은 리눅스 커널 5.0.5에서 구현되었다. 제안된 I/O 스택을 선택적으로 사용하기 위해 새로운 파일 열기 플래그를 사용하였다.
현재 구현은 read, pread, fsync 및 fdatasync 시스템 호출을 지원하며 다른 비동기 I/O 인터페이스는 아직 지원되지 않는다. 배경 쓰기 백 스레드는 inode에 플래그가 있는 경우 쓰기 경로를 사용한다. 플래그가 없는 파일 액세스는 원본 I/O 스택을 통과한다.
Intel Xeon E5-2640 CPU와 32GB DDR4 메모리가 장착된 Dell R730 Server 컴퓨터를 사용하여 실험을 진행했다. 초저 대기시간 저장 장치의 경우 삼성 zSSD 및 Intel Optane SSD를 모두 평가한다. 본 발명의 제안한 기법을 Linux 커널 5.0.5에 구현되었다. 표 1에는 실험 설정이 요약되어 있다.
Figure 112020020484228-pat00001
평가를 위해 합성 마이크로 벤치 마크와 실제 작업 부하를 모두 사용한다.
합성 마이크로 벤치 마크의 경우 다양한 매개 변수(예: I/O 요청 크기, 읽기 부분, 스레드 수 등)를 사용하여 다양한 I/O 패턴을 생성할 수 있는 FIO를 사용한다.
실제 워크로드의 경우, 본 발명은 데이터베이스 응용 프로그램 (RocksDB의 DBbench), 파일 시스템 벤치 마크(Filebench-varmail), MySQL에서 실행되는 OLTP 작업 부하(Sysbench OLTP 삽입)와 같은 다양한 응용 프로그램을 사용한다.
특히 본 발명에서는 RocksDB DBbench의 fillsync 작업을 실행하는데, fsync 집중적인 경우(use_fsync 플래그 사용)를 나타낸다. Filebench-varmail과 Sysbench OLTP-insert는 모두 fsync를 많이 사용하는 작업 부하이다.
도 4는 FIO 4KB 임의 쓰기(fsync가 뒤 따르는) 작업에 대한 AIOS의 성능 영향을 보여준다. 여기서는 두 가지 저널링 모드 즉, 주문형 저널링 모드(즉, 오직 저널 메타 데이터 및 순서화된 데이터 쓰기 수행) 및 데이터 저널링 모드(즉, 저널 모두 메타 데이터 및 데이터)를 평가한다.
단일 스레드(주문형 모드 및 데이터 저널링 모드에서 각각 19.7% 및 33.9% IOPS 증가)를 사용하면 성능 향상이 극대화된다. 서로 경쟁하는 스레드가 더 많으면 저널링 시간이 겹칠 가능성이 적다.
데이터 저널링 모드에서 중첩된 부분의 대기시간은 정렬된 저널링 모드의 대기시간보다 크므로 대기시간 이점은 정렬된 저널링 모드보다 약간 크다.
본 발명인 AIOS는 단일 스레드를 사용할 때 최대 11.3%의 IOPS를 제공한다.
서로 다른 블록 크기에 대한 단일 스레드 대기시간 비교는 4KB 임의 쓰기를 발행할 때 대기시간이 최대 12.2% 단축된다.
I/O장치 작동 및 CPU 작동을 중첩하는 이점은 블록 크기가 커질수록 증가한다. 도 5는 Rockb DB DBbench의 성능 결과를 보여준다.
특히 DBbench 작업에서 fillsync (16GB 데이터 세트, 16 바이트 키 및 1000 바이트 값)를 평가한다.
AIOS는 전체 동기화 작업량 (최대 29.8%)에서 눈에 띄는 속도 향상을 보여준다. 이 결과는 AIOS가 마이크로 벤치 마크에서 효과적 일뿐만 아니라 실제 작업 부하에서도 효과적임을 나타낸다.
도 6은 각 작업 부하에 대한 표준화 된 CPU 런타임 분석을 보여준다.
전반적으로 AIOS는 I/O 대기에 소비되는 CPU 시간을 줄이면서 커널 일관성을 유지하는 시간을 유지한다. 이는 AIOS가 여분의 오버 헤드없이 효과적으로 커널 작업과 입출력 작업을 겹칠 수 있음을 나타낸다. 또한, 짧은 랜덤 읽기 및 쓰기 대기시간을 제공함으로써 AIOS는 전반적인 런타임을 감소시킨다. 추세는 zSSD와 Optane에서 비슷하다.
도 7과 도 8은 다양한 스레드 수에서 Filebenchvarmail(기본 구성)과 Sysbench-OLTP-insert(10GB DB 테이블 크기)성능을 보여준다. Filebench-vailail의 단일 스레드에서 AIOS를 사용하면 zSSD 및 Optane 각각 29% 및 22.3% 더 많은 처리량을 얻을 수 있다.
마찬가지로 Sysbench-OLTP-insert의 단일 스레드 케이스에서 AIOS는 zSSD 및 Optane에서 각각 14.3% 및 20.1%의 성능 향상을 달성한다. 일반적으로 스레드 수가 많으면(8 이상) 멀티 쓰레딩 때문에 I/O와 계산이 자연스럽게 겹치기 때문에 이 방법의 이점이 줄어든다.
이상의 설명은 본 발명의 기술 사상을 예시적으로 설명한 것에 불과한 것으로, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 사람이라면 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 다양한 수정 및 변형이 가능할 것이다. 따라서, 본 발명에 실행된 실시예들은 본 발명의 기술 사상을 한정하기 위한 것이 아니라 설명하기 위한 것이고, 이러한 실시예에 의하여 본 발명의 기술 사상의 범위가 한정되는 것은 아니다. 본 발명의 보호 범위는 아래의 청구범위에 의하여 해석되어야 하며, 그와 동등한 범위 내에 있는 모든 기술 사상은 본 발명의 권리범위에 포함되는 것으로 해석되어야 할 것이다.

Claims (7)

  1. 저장 장치의 쓰기 입출력 처리 속도 향상 방법으로서,
    (a) 응용 프로그램 스레드가, 데이터 블록에 대한 쓰기 입출력을 준비하고 상기 데이터 블록에 쓰기 입출력을 요청하는 단계;
    (b) 상기 응용 프로그램 스레드가 파일 시스템 트랜잭션을 커밋하기 위해 저널링 스레드를 활성화하는 단계;
    (c) 상기 응용 프로그램 스레드가 상기 데이터 블록에 대한 쓰기 입출력의 완료를 대기하는 단계;
    (d) 상기 저널링 스레드가, 상기 (c)단계와 동시에 저널 블록에 대한 쓰기 입출력을 준비하고 상기 저널 블록에 쓰기 입출력을 요청하는 단계;
    (e) 상기 저널링 스레드가 저널 커밋 블록에 대한 쓰기 입출력을 준비하고, 상기 저널 블록에 대한 쓰기 입출력의 완료를 대기하는 단계;
    (f) 상기 저널링 스레드가 상기 저널 블록에 대한 쓰기 입출력이 완료되면 상기 저널 커밋 블록에 대한 쓰기 입출력을 요청하는 단계;
    (g) 상기 저널링 스레드가 상기 저널 커밋 블록에 대한 쓰기 입출력의 완료를 대기한 후, 상기 저널 커밋 블록으로부터 쓰기 입출력의 완료를 확인받는 단계;를 포함하는 저장 장치의 쓰기 입출력 처리 속도 향상 방법.
  2. 제 1항에 있어서,
    상기 저널 블록에 대한 쓰기 입출력의 준비 및 커밋 블록에 대한 쓰기 입출력의 준비 동작은
    저널 영역 할당, 버퍼 페이지 할당 및 블록 I/O 관련 데이터 구조체 할당과 조작 어느 하나의 동작인 것을 특징으로 하는 저장 장치의 쓰기 입출력 처리 속도 향상 방법.
  3. 제 2항에 있어서,
    상기 저널 블록에 쓰기 입출력을 요청하는 단계에서,
    상기 저널링 스레드가 저널 블록에 대한 쓰기 입출력을 준비하는 기간은 상기 데이터 블록에서 쓰기 작업이 수행되는 작업 기간과 적어도 일부가 중첩되는 것을 특징으로 하는 저장 장치의 쓰기 입출력 처리 속도 향상 방법.
  4. 제 3항에 있어서,
    상기 저널링 스레드는
    상기 저널 블록에 대한 쓰기 입출력 준비를 상기 데이터 블록의 쓰기 입출력과 중첩되도록 하기 위해 상기 데이터 블록의 쓰기 입출력이 완료되기 전에 작동되는 것을 특징으로 하는 저장 장치의 쓰기 입출력 처리 속도 향상 방법.
  5. 제 4항에 있어서,
    상기 저널링 스레드는
    상기 데이터 블록에서 쓰기 입출력이 진행되는 동안 상기 저널 블록의 쓰기 입출력을 준비하기 시작하는 것을 특징으로 하는 저장 장치의 쓰기 입출력 처리 속도 향상 방법.
  6. 제 4항에 있어서,
    상기 저널링 스레드는
    상기 저널 블록의 쓰기 입출력의 준비가 완료된 후 상기 저널 커밋 블록에 대한 쓰기 입출력의 준비를 시작하는 것을 특징으로 하는 저장 장치의 쓰기 입출력 처리 속도 향상 방법.
  7. 제 6항에 있어서,
    상기 저널링 스레드는
    상기 저널 커밋 블록에 대한 쓰기 입출력의 준비를 완료한 직후 상기 저널 커밋 블록에 대한 쓰기 입출력을 즉시 발행하지 않고, 저장 매체에 쓰기의 순서를 유지하기 위해 저널 블록에 대한 쓰기 입출력이 완료될 때 까지 대기한 후 저널 블록에 대한 쓰기 입출력이 완료되면 flush 명령을 사용하여 flush가 완료된 후에 상기 커밋 블록에 대한 쓰기 입출력 명령이 전달되는 것을 특징으로 하는 저장 장치의 쓰기 입출력 처리 속도 향상 방법.
KR1020200023816A 2020-02-26 2020-02-26 운영체제 내 쓰기 순서 보장이 필요한 여러 쓰기 입출력의 처리 속도 향상 방법 KR102346601B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020200023816A KR102346601B1 (ko) 2020-02-26 2020-02-26 운영체제 내 쓰기 순서 보장이 필요한 여러 쓰기 입출력의 처리 속도 향상 방법
US17/186,154 US11436064B2 (en) 2020-02-26 2021-02-26 Method for improving processing speed of input and output related to writing in operating system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020200023816A KR102346601B1 (ko) 2020-02-26 2020-02-26 운영체제 내 쓰기 순서 보장이 필요한 여러 쓰기 입출력의 처리 속도 향상 방법

Publications (2)

Publication Number Publication Date
KR20210108778A KR20210108778A (ko) 2021-09-03
KR102346601B1 true KR102346601B1 (ko) 2022-01-03

Family

ID=77366041

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200023816A KR102346601B1 (ko) 2020-02-26 2020-02-26 운영체제 내 쓰기 순서 보장이 필요한 여러 쓰기 입출력의 처리 속도 향상 방법

Country Status (2)

Country Link
US (1) US11436064B2 (ko)
KR (1) KR102346601B1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114138200B (zh) * 2021-12-01 2023-10-13 上海沄熹科技有限公司 一种基于RocksDB的预写日志方法及系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070220309A1 (en) 2006-02-10 2007-09-20 Andre Jeffrey A Continuous data protection of block-level volumes
JP2008217154A (ja) 2007-02-28 2008-09-18 Nara Institute Of Science & Technology データ処理装置、データ処理方法
JP2009064178A (ja) 2007-09-05 2009-03-26 Hitachi Ltd ストレージ装置及びデータの管理方法
JP2014106715A (ja) * 2012-11-27 2014-06-09 Fujitsu Ltd 演算処理装置の制御プログラム、演算処理装置の制御方法および演算処理装置

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7752402B2 (en) * 2006-08-18 2010-07-06 Isilon Systems, Inc. Systems and methods for allowing incremental journaling
US8949835B2 (en) * 2010-11-30 2015-02-03 Red Hat, Inc. Yielding input/output scheduler to increase overall system throughput
KR101567134B1 (ko) * 2013-03-29 2015-11-09 이화여자대학교 산학협력단 비휘발성 메모리에 기반하여 저널링 기능을 통합한 버퍼 캐시 장치, 저널링 파일 시스템 및 저널링 방법
US9652284B2 (en) * 2013-10-01 2017-05-16 Qualcomm Incorporated GPU divergence barrier
KR102203774B1 (ko) 2013-12-31 2021-01-18 엘지디스플레이 주식회사 백색 유기 발광 소자
US9384142B2 (en) * 2014-09-16 2016-07-05 International Business Machines Corporation Efficient and consistent para-virtual I/O system
US9734157B1 (en) * 2014-12-30 2017-08-15 EMC IP Holding Company LLC Method for sub-block operations on a journal block using ranged locking
KR102586628B1 (ko) 2015-06-05 2023-10-11 삼성전자 주식회사 전자 장치 및 전자 장치의 메모리 관리 방법

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070220309A1 (en) 2006-02-10 2007-09-20 Andre Jeffrey A Continuous data protection of block-level volumes
JP2008217154A (ja) 2007-02-28 2008-09-18 Nara Institute Of Science & Technology データ処理装置、データ処理方法
JP2009064178A (ja) 2007-09-05 2009-03-26 Hitachi Ltd ストレージ装置及びデータの管理方法
JP2014106715A (ja) * 2012-11-27 2014-06-09 Fujitsu Ltd 演算処理装置の制御プログラム、演算処理装置の制御方法および演算処理装置

Also Published As

Publication number Publication date
KR20210108778A (ko) 2021-09-03
US11436064B2 (en) 2022-09-06
US20210263789A1 (en) 2021-08-26

Similar Documents

Publication Publication Date Title
US11868628B2 (en) On-chip atomic transaction engine
Zhang et al. {FlashShare}: Punching Through Server Storage Stack from Kernel to Firmware for {Ultra-Low} Latency {SSDs}
Seshadri et al. Willow: A {User-Programmable}{SSD}
JP5636109B2 (ja) コンテキスト切り替え
US8032716B2 (en) System, method and computer program product for providing a new quiesce state
Lee et al. Improving read performance by isolating multiple queues in NVMe SSDs
Didona et al. Understanding modern storage APIs: a systematic study of libaio, SPDK, and io_uring
US10289306B1 (en) Data storage system with core-affined thread processing of data movement requests
GB2545058A (en) Flash memory management
KR102346601B1 (ko) 운영체제 내 쓰기 순서 보장이 필요한 여러 쓰기 입출력의 처리 속도 향상 방법
Kim et al. FAST I/O: QoS supports for urgent I/Os in NVMe SSDs
Zou et al. DirectNVM: Hardware-accelerated NVMe SSDs for high-performance embedded computing
Vogel et al. Data Pipes: Declarative Control over Data Movement.
US10901691B2 (en) System, method and apparatus for inter-process communication
US9442859B1 (en) Method for asynchronous population of data caches used with mass storage devices
Mavridis et al. Jericho: Achieving scalability through optimal data placement on multicore systems
Choi et al. Towards high-performance san with fast storage devices
Xu et al. I/O Transit Caching for PMem-based Block Device
Kang et al. ISP Agent: A Generalized In-storage-processing Workload Offloading Framework by Providing Multiple Optimization Opportunities
Zhu et al. Exploring the Asynchrony of Slow Memory Filesystem with EasyIO
Jang et al. AutoBahn: accelerating concurrent, durable file I/O via a non-volatile buffer
Min et al. Polling Based Per-core Workqueue Management in XFS Journaling
Xu et al. Caiti: I/O transit caching for persistent memory-based block device
Wong et al. Improving linux block i/o for enterprise workloads
Jang et al. AutoBahn: a concurrency control framework for non-volatile file buffer

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant