KR102251869B1 - 파일 시스템 및 이를 이용한 단일 파일 쓰기 병렬화 방법 - Google Patents
파일 시스템 및 이를 이용한 단일 파일 쓰기 병렬화 방법 Download PDFInfo
- Publication number
- KR102251869B1 KR102251869B1 KR1020190061340A KR20190061340A KR102251869B1 KR 102251869 B1 KR102251869 B1 KR 102251869B1 KR 1020190061340 A KR1020190061340 A KR 1020190061340A KR 20190061340 A KR20190061340 A KR 20190061340A KR 102251869 B1 KR102251869 B1 KR 102251869B1
- Authority
- KR
- South Korea
- Prior art keywords
- thread
- data
- file
- information
- write
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1858—Parallel file systems, i.e. file systems supporting multiple processors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/176—Support for shared access to files; File sharing support
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
파일 시스템이 복수의 스레드가 단일 파일에 데이터를 쓰도록 제어하는 방법으로서, 데이터 쓰기 함수를 호출한 함수 호출 스레드에 대하여, 데이터를 쓸 파일의 파일 정보, 파일을 구성하는 복수의 블록들 중 데이터를 쓰기 시작할 블록 시작점 정보, 및 데이터 길이 정보를 포함하는 스레드 정보를 확인한다. 파일 정보를 토대로 동일한 파일에 데이터를 쓰고 있는 이전 스레드가 존재하는지 확인하고, 이전 스레드가 존재하면, 함수 호출 스레드의 블록 시작점 정보와 데이터 길이 정보를 토대로, 이전 스레드의 블록들과 중복되는 블록이 있는지 확인한다. 함수 호출 스레드가 이전 스레드의 블록들과 서로 다른 블록에 데이터를 쓰고자 한다면, 파일에 데이터를 쓰도록 함수 호출 스레드를 제어한다.
Description
본 발명은 파일 시스템 및 단일 파일 쓰기 병렬화 방법에 관한 것이다.
매니 코어 환경은 높은 병렬성을 활용하여 I/O 성능을 향상시킬 수 있기 때문에, 많은 고성능 시스템에서 사용되고 있다. 데이터베이스 시스템은 다수의 질의를 동시에 처리할 수 있으며 그 결과를 저장장치에 저장하기 때문에, I/O 병렬화를 이용하기에 적합하다.
데이터베이스 시스템에서는 빠른 I/O 처리를 위하여 SSD(Solid-State Drive)를 주로 사용한다. F2FS(Flash-Friendly File System)는 SSD에 최적화된 로그 구조 파일 시스템으로, 임의 쓰기 성능이 순차 쓰기 성능보다 비교적 낮은 SSD에서 좋은 성능을 보인다. 또한, 멀티 헤드 로깅 기법을 적용하여, SSD의 내부 병렬성을 극대화한다.
그러나 데이터베이스 시스템은 매니 코어 환경의 I/O 성능을 제대로 활용하지 못한다. 그 예로, 온라인 트랜잭션 처리를 시뮬레이션하는 워크로드인 TPC-C 워크로드를 처리할 때 발생하는, 쓰기 명령들의 직렬화가 있다.
TPC-C 워크로드를 사용한 데이터베이스의 I/O 패턴은, 여러 스레드(Thread)가 같은 파일에 다른 영역을 쓰는 병렬 단일 파일 쓰기가 대부분을 차지한다. 그러나 현재 파일 시스템에서는 병렬 단일 파일 쓰기가 발생했을 때, 파일 단위의 아이노드 락(Inode Lock)을 걸기 때문에 여러 쓰기 명령이 직렬화된다. 따라서 매니코어 환경에서의 I/O 병렬화를 저해하여 성능을 향상 시키지 못한다.
따라서, 본 발명은 파일 시스템에서 범위 락을 사용하여 단일 파일 쓰기를 병렬화하는 방법을 제공한다.
상기 본 발명의 기술적 과제를 달성하기 위한 본 발명의 하나의 특징인 파일 시스템이 복수의 스레드가 단일 파일에 데이터를 쓰도록 제어하는 방법으로서,
데이터 쓰기 함수를 호출한 함수 호출 스레드에 대하여, 데이터를 쓸 파일의 파일 정보, 상기 파일을 구성하는 복수의 블록들 중 데이터를 쓰기 시작할 블록 시작점 정보, 및 데이터 길이 정보를 포함하는 스레드 정보를 확인하는 단계, 상기 파일 정보를 토대로 동일한 파일에 데이터를 쓰고 있는 이전 스레드가 존재하는지 확인하는 단계, 상기 이전 스레드가 존재하면, 상기 함수 호출 스레드의 블록 시작점 정보와 데이터 길이 정보를 토대로, 상기 이전 스레드의 블록들과 중복되는 블록이 있는지 확인하는 단계, 그리고 상기 함수 호출 스레드가 상기 이전 스레드의 블록들과 서로 다른 블록에 데이터를 쓰고자 한다면, 상기 파일에 데이터를 쓰도록 상기 함수 호출 스레드를 제어하는 단계를 포함한다.
상기 스레드 정보를 확인하는 단계는, 상기 블록 시작점 정보와 데이터 길이 정보를 토대로, 상기 함수 호출 스레드에 대한 노드들 생성하는 단계, 그리고 상기 생성한 노드를 상기 이전 스레드에 대한 노드가 삽입되어 있는 인터벌 트리에 삽입하고, 상기 인터벌 트리를 갱신하는 단계를 포함할 수 있다.
상기 중복되는 블록이 있는지 확인하는 단계는, 상기 이전 스레드의 스레드 정보에 포함된 블록 시작점 정보와 데이터 길이 정보를 토대로 생성된 노드와 상기 함수 호출 스레드의 노드를 토대로, 겹쳐지는 블록 구간이 있는지 확인할 수 있다.
상기 중복되는 블록이 있는지 확인하는 단계는, 상기 이전 스레드의 블록들 중 일부 또는 전체 블록들과 중복되는 블록이 존재하면, 상기 이전 스레드에 의해 선점된 블록들에 락을 설정하는 단계를 더 포함할 수 있다.
상기 함수 호출 스레드를 제어하는 단계는, 상기 함수 호출 스레드의 레퍼런스 카운터를 설정하는 단계를 더 포함하고, 상기 레퍼런스 카운터는 동일한 블록에 데이터를 쓰고자 하는 스레드들의 수로 설정될 수 있다.
상기 함수 호출 스레드를 제어하는 단계 이후에, 상기 동일한 파일에 데이터를 쓰고 있는 복수의 스레드들 중 어느 하나의 스레드가 호출한 언락 함수를 인지하는 단계, 그리고 상기 언락 함수를 호출한 스레드에 대응하는 노드를 상기 인터벌 트리로부터 삭제하는 단계를 포함할 수 있다.
상기 삭제하는 단계 이후에, 상기 인터벌 트리에서 삭제된 스레드에 의해, 데이터 쓰기를 대기하고 있는 스레드가 존재하는지 확인하는 단계, 그리고 데이터 쓰기를 대기하는 스레드가 있으면, 상기 대기중인 스레드가 파일에 데이터 쓰기를 실행하도록 제어하는 단계를 포함할 수 있다.
상기 본 발명의 기술적 과제를 달성하기 위한 본 발명의 또 다른 특징인 파일 시스템으로서,
데이터 쓰기 함수를 호출한 복수의 스레드들이 각각 쓰기를 실행한 데이터를 블록 단위로 분할하여 저장하는 파일 시스템 모듈, 그리고 제1 스레드가 상기 데이터 쓰기 함수를 호출하면, 상기 제1 스레드에 대한 스레드 정보를 확인하고, 확인한 스레드 정보를 토대로 상기 제1 스레드가 데이터를 쓸 블록들 중 적어도 하나의 블록이 데이터를 쓰고 있는 제2 스레드에 의해 사용되고 있으면 상기 제2 스레드가 사용하고 있는 블록에 락을 설정하며, 상기 제1 스레드가 데이터를 쓸 블록들이 상기 제2 스레드에 의해 사용되고 있지 않으면 상기 제1 스레드가 상기 파일 시스템 모듈에 데이터를 쓰도록 제어하는 제어 모듈을 포함한다.
상기 제어 모듈은, 상기 제1 스레드로부터 호출된 함수가 상기 데이터 쓰기 함수 또는 언락 함수 중 어느 하나의 함수인지 확인하는 호출 함수 확인 모듈, 상기 데이터 쓰기 함수가 호출되면, 상기 제1 스레드가 생성한 상기 스레드 정보를 토대로 인터벌 트리에 삽입할 노드를 생성하는 노드 생성 모듈, 상기 인터벌 트리 생성 모듈이 생성한 인터벌 트리를 토대로 상기 제1 스레드가 데이터를 쓸 블록들이 상기 제2 스레드에 의해 사용되고 있는지 확인하는 스레드 정보 확인 모듈, 그리고 상기 스레드 정보 확인 모듈이 상기 제1 스레드가 데이터를 쓸 블록들이 상기 제2 스레드에 의해 사용되고 있는 것으로 확인하면, 상기 제2 스레드가 사용하는 블록들에 락을 설정하는 범위 락 설정 모듈을 포함할 수 있다.
상기 스레드 정보는 상기 제1 스레드가 데이터를 쓸 파일의 파일 정보, 상기 파일을 구성하는 복수의 블록들 중 데이터를 쓰기 시작할 블록 시작점 정보, 및 데이터 길이 정보를 포함하고, 상기 노드 생성 모듈은, 상기 블록 시작점 정보와 데이터 길이 정보를 토대로 상기 제1 스레드에 대한 블록 시작점과 블록 끝점을 포함할 수 있다.
상기 범위 락 설정 모듈은, 상기 제1 스레드가 데이터를 쓸 블록들이 상기 제2 스레드에 의해 사용되고 있으면, 상기 제1 스레드의 레퍼런스 카운터를 상기 블록들을 사용할 스레드의 수만큼 설정할 수 있다.
상기 노드 생성 모듈이 생성한 노드를 상기 인터벌 트리에 삽입하는 인터벌 트리 생성 모듈을 더 포함할 수 있다.
본 발명에 따르면 범위 락(Range Lock)은 파일 전체가 아닌 접근 하고자 하는 일부분 만을 Lock함으로써, 매니 코어 환경에서의 병렬성을 극대화 할 수 있다.
또한, 병렬 단일 파일 쓰기의 경우, 파일에 데이터를 쓰기 위한 범위가 다르기 때문에 동시에 수행 할 수 있어 I/O 병렬성을 활용할 수 있다.
도 1은 일반적인 F2FS 파일 시스템의 구조도이다.
도 2는 본 발명의 실시예에 따른 범위 락을 이용한 파일의 접근을 나타낸 예시도이다.
도 3은 본 발명의 실시예에 따른 파일 시스템의 구조도이다.
도 4는 본 발명의 실시예에 따른 제어 모듈의 구조도이다.
도 5는 본 발명의 실시예에 따른 단일 파일 쓰기 병렬화 방법에 대한 흐름도이다.
도 6은 본 발명의 실시예에 따른 평균 지연 시간을 측정한 실험치의 예시도이다.
도 7은 본 발명의 실시예에 따른 인터벌 트리의 예시도이다.
도 2는 본 발명의 실시예에 따른 범위 락을 이용한 파일의 접근을 나타낸 예시도이다.
도 3은 본 발명의 실시예에 따른 파일 시스템의 구조도이다.
도 4는 본 발명의 실시예에 따른 제어 모듈의 구조도이다.
도 5는 본 발명의 실시예에 따른 단일 파일 쓰기 병렬화 방법에 대한 흐름도이다.
도 6은 본 발명의 실시예에 따른 평균 지연 시간을 측정한 실험치의 예시도이다.
도 7은 본 발명의 실시예에 따른 인터벌 트리의 예시도이다.
아래에서는 첨부한 도면을 참고로 하여 본 발명의 실시예에 대하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
명세서 전체에서, 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있는 것을 의미한다.
이하 도면을 참조로 하여 본 발명의 실시예에 따른 매니코어 파일 시스템 및 단일 파일 쓰기 병렬화 방법에 대해 설명한다. 본 발명의 실시예에 대해 설명하기 앞서, 일반적인 F2FS 파일 시스템의 구조에 대해 도 1을 참조로 설명한다.
도 1은 일반적인 F2FS 파일 시스템의 구조도이다.
F2FS는 모든 데이터를 로그 형식으로 기록하는 로그 구조 파일 시스템이다. 로그 구조 파일 시스템에서는 데이터가 로그에 순차적으로 저장되며, 임의 쓰기의 속도가 느린 SSD(Solid State Drive)에서 좋은 성능을 보여, 플래시 저장 장치에 사용된다.
도 1에 도시된 바와 같이, 파일 시스템(10)은 F2FS의 온 디스크(On-disk) 자료 구조로, 노드 어드레스 테이블(NAT: Node Address Table)(11), 슈퍼블록(SB: Super Block)(12), 체크포인트 영역(CP: Checkpoint)(13), 세그먼트 정보 테이블(SIT: Segment Information Table)(14), 세그먼트 요약 영역(SSA: Segment Summary Table)(15)로 구성된다.
슈퍼블록(12)에는 파일 시스템(10)의 디폴트 정보가 저장된다. 예를 들어, 블록의 크기, 블록의 개수, 파일 시스템(10)의 상태 플래그 등이 저장된다.
체크포인트 영역(13)은 논리적인 중단점인 체크포인트를 저장하기 때문에, 중단점까지의 상태가 완전하게 보존된다. 컴퓨팅 시스템의 동작 중에 파워 오프와 같은 사고가 발생하면, 파일 시스템(10)은 체크포인트 영역(13)에 저장된 체크포인트를 이용하여 데이터를 복구할 수 있다.
노드 어드레스 테이블(11)은 노드 각각에 대응되는 다수의 노드 식별자(NODE ID)와, 다수의 노드 식별자 각각에 대응되는 다수의 가상 어드레스를 관리한다.
세그먼트 정보 테이블(14)은 각 세그먼트의 유효한 페이지의 개수와, 다수의 페이지의 비트맵을 관리한다.
세그먼트 요약 영역(15)은 각 세그먼트의 요약 정보를 모아둔 영역으로, 각 세그먼트의 다수의 블록이 속하는 노드의 정보를 기술한다.
이상에서 설명한 파일 시스템(10)의 구조들은 이미 알려진 사항으로, 본 발명의 실시예에서는 상세한 설명은 생략한다.
기존의 로그 구조의 파일 시스템(10)에서는 블록이 업데이트 되면, 블록을 가리키는 다이렉트 블록(18), 다이렉트 블록(18)을 가리키는 인다이렉트 블록(17), 인다이렉트 블록(17)을 가리키는 아이노드(16)가 순차적으로 업데이트 되는 wandering tree 문제가 발생한다. F2FS에서는 이러한 문제를 해결하기 위해서 노드의 주소를 저장하는 NAT(11)라는 자료구조를 구성하였다.
F2FS는 멀티 헤드 로깅을 사용하여 성능을 높인다. 그리고 로깅을 할 때, 여러 개의 로그에 동시에 로깅해서 병렬성을 높였다. 또한 데이터를 쓸 때 해당 데이터의 업데이트 빈도를 예상하여 Hot/Cold로 데이터를 구분하여, 각자 다른 로그에 할당한다. 이는 SSD의 가비지 콜렉션(Garbage Collection) 성능 향상에 큰 도움이 된다.
F2FS에서는 로깅 할 때 두 가지 방법을 사용한다. 클린 세그먼트에 로깅하는 방법(Append-only logging)과 더티 세그먼트의 무효화된 블록에 로깅(Threaded logging)하는 방법이다. 그리고 F2FS에서는 갑작스러운 시스템 장애 발생시 일관성 있는 회복을 위하여 체크포인트 기법을 사용한다.
또한, 시스템 오류 발생시 롤 포워드(Roll-forward)와 롤 백(Roll-back)의 두 가지 회복 기법을 사용한다. 롤 백 회복 기법은 시스템 오류 발생시, 가장 최근 버전의 체크포인트로 회복한다. 작은 크기의 쓰기와 fsync가 자주 호출되는 경우 데이터 블록과 다이렉트 노드만 기록한 후 시스템 오류 발생시 롤 포워드 기법으로 회복할 수 있다.
이러한 F2FS에서 병렬 단일 파일 쓰기의 실행 과정을 설명하면, 스레드 2개가 같은 파일에 동시에 쓰기를 시작한다(①). 먼저 도착한 스레드 1은 쓰려는 파일의 아이노드(16)에 락이 걸려 있지 않기 때문에, 파일의 아이노드에 락(grant lock)을 걸고 쓰기를 진행한다. 이후 아이노드에 락이 걸려있기 때문에 같은 파일에 대한 쓰기가 불가능하게 되고, 스레드 2는 쓰기를 일시 정지한다.
스레드 1은 데이터를 해당 위치의 블록에 쓰고 메타데이터를 수정한 후, 파일의 락을 해제하고 쓰기를 종료한다(②). 스레드 1이 쓰기를 종료하면 스레드 2가 파일의 아이노드에 락을 걸고 쓰기 명령을 재개한다(③). 스레드 2가 쓰기를 수행 후, 파일의 락을 풀고 종료된다(④). 결국 F2FS에서 여러 스레드의 병렬 단일 파일 쓰기는 순차적으로 실행된다.
F2FS에서 병렬 단일 파일 쓰기는 아이노드 락 때문에 동시에 실행되지 않는다. 만약 병렬 단일 파일 쓰기에서 각 스레드들이 파일의 다른 위치에 쓴다면 파일 단위 아이노드 락은 필요하지 않는다. 이 경우 쓰기를 하는 범위에만 락을 사용하여 여러 스레드가 데이터를 동시에 쓸 수 있다.
이러한 세밀한 락을 범위 락(Range-lock)이라고 한다. 범위 락을 사용하면 병렬 단일 파일 쓰기의 병렬성을 높여서, 파일 시스템의 I/O 성능을 향상시킬 수 있다. 이에 대해 도 2를 참조로 설명한다. 본 발명의 실시예에서는 파일 시스템이 플래시 메모리에 최적화된 파일 시스템인 F2FS인 것을 예로 하여 설명한다.
도 2는 본 발명의 실시예에 따른 범위 락을 이용한 파일의 접근을 나타낸 예시도이다.
도 2에 도시된 바와 같이, 범위 락은 인터벌 트리로 구현을 할 수 있다. 인터벌 트리는 구간을 가지는 노드들로 구성된 트리형 자료구조이다. 인터벌 트리는 겹치는 구간을 가지는 다른 노드를 감지할 수 있으며, 각 노드들은 자신의 노드의 구간과 겹치는 구간을 가지는 노드의 개수를 나타내는 레퍼런스 카운터(Reference counter)를 가진다.
범위 락은 범위에 락을 걸 때 인터벌 트리에 노드를 삽입하고 노드의 레퍼런스 카운터가 0일 때 락을 풀어준다. 언락 함수가 호출되면 트리에서 노드를 제거한다.
즉, 도 2에서 병렬 단일 파일 쓰기를 실행하는 스레드 A, B, C가 순서대로 실행된다. 'ref'는 레퍼런스 카운터를 의미한다. 스레드 A가 파일에 쓸 때 A와 구간이 겹치는 다른 노드가 없기 때문에 레퍼런스 카운터는 0이 되고 노드는 트리에 삽입된다. A의 레퍼런스 카운터가 0이기 때문에 락이 걸리지 않고 실행된다.
그 다음 실행되는 스레드 B 또한 구간이 겹치는 다른 노드가 없기 때문에 레퍼런스 카운터는 0이 되고, 노드는 트리에 삽입된 후 락이 걸리지 않고 바로 실행된다. 스레드 C의 구간은 B의 구간과 겹치기 때문에, 노드가 트리에 삽입된 후 락이 걸리고 쓰기는 실행되지 않는다. B의 쓰기가 끝나면 B는 노드에서 제거되고 C의 레퍼런스 카운터는 0이 되어서 쓰기가 시작된다.
이상에서 설명한 파일 접근이 가능하도록 하는 파일 시스템 및 파일 시스템과 연동한 제어 모듈의 구조에 대해 도 3을 참조로 설명한다.
도 3은 본 발명의 실시예에 따른 파일 시스템의 구조도이다.
도 3에 도시된 바와 같이, 파일 시스템(100)은 파일 시스템 모듈(110)과 제어 모듈(120)으로 구성된다.
복수의 스레드들(스레드 1 ~ 스레드 N)이 각각 처리하고자 하는 데이터들(A~N)은 파일 시스템 모듈(110)에 의해 블록 단위로 분할되어 저장된다. 파일 시스템 모듈(110)은 스토리지 장치와 같은 물리적인 저장 매체에 데이터를 쓰거나 읽기 처리할 경우, 논리적 단위인 블록(block)으로 처리한다. 파일 시스템 모듈(110)의 구조는 상기 도 1에서 설명한 F2FS 파일 시스템의 구조와 동일하며, 파일 시스템 모듈(110)의 각 기능에 대한 설명은 생략한다.
복수의 스레드들이 동시에 동일한 파일에 데이터 쓰기를 실행할 경우, 제어 모듈(120)은 데이터 쓰기를 시도하는 모든 스레드들을 인터벌 트리의 노드로 생성한다. 제어 모듈(120)은 각각의 스레드들이 전송한 데이터들에서 각각의 데이터를 쓸 파일의 정보, 파일에서 데이터가 작성될 시작점, 그리고 길이 정보를 확인한다.
제어 모듈(120)은 확인한 스레드 정보들을 토대로, 하나의 파일에서 같은 블록에 데이터 쓰기를 시도하는 적어도 둘 이상의 스레드들이 있는지 확인한다. 동일한 블록에 둘 이상의 스레드들이 데이터 쓰기를 시도하고 있다면, 먼저 데이터 쓰기를 시도한 스레드부터 데이터 쓰기가 실행되도록 제어한다. 그리고, 다른 스레드의 레퍼런스 카운터를 동일한 블록에 데이터 쓰기를 시도하는 스레드들의 수만큼 갱신한다.
제어 모듈(120)은 복수의 스레드들이 하나의 파일에서 다른 블록에 데이터 쓰기를 시도하고 있다면, 해당 스레드들에 데이터를 쓰도록 제어한다.
제어 모듈(120)은 데이터 쓰기를 완료한 스레드로부터 언락 함수가 호출되면, 인터벌 트리에서 해당 스레드를 삭제한다. 그리고 해당 스레드에 의해 데이터 쓰기를 대기하고 있는 다른 스레드들이 있는지 확인한다. 제어 모듈(120)은 대기중인 다른 스레드들이 있으면, 해당 스레드들의 레퍼런스 카운터를 하나 줄어든 값으로 갱신한다.
여기서, 제어 모듈(120)의 구조에 대해 도 4를 참조로 설명한다.
도 4는 본 발명의 실시예에 따른 제어 모듈의 구조도이다.
도 4에 도시된 바와 같이, 제어 모듈(120)은 호출 함수 확인 모듈(121), 노드 생성 모듈(122), 범위 락 설정 모듈(123), 그리고 인터벌 트리 생성 모듈(124)을 포함한다.
호출 함수 확인 모듈(121)은 스레드로부터 호출된 함수가 어떤 함수인지 확인한다. 본 발명의 실시예에서는 설명의 편의를 위하여 스레드가 데이터 쓰기 함수와 언락 함수를 호출하는 것을 예로 하여 설명하나, 반드시 이와 같이 한정되는 것은 아니다. 또한, 스레드가 함수를 호출하는 방법, 그리고 호출된 함수가 어떤 함수인지 확인하는 방법은 다양한 방법을 통해 실행될 수 있으므로, 본 발명의 실시예에서는 어느 하나의 방법으로 한정하지 않는다.
노드 생성 모듈(122)은 데이터 쓰기 함수를 호출한 스레드(이하, 설명의 편의를 위하여 '함수 호출 스레드'라 지칭함)가 생성한 스레드 정보를 확인한다. 스레드 정보에는 스레드 식별 정보, 데이터 쓰기 할 파일 식별 정보, 데이터를 파일에 쓸 시작점 정보 그리고 데이터 길이 정보가 포함된다. 여기서 시작점 정보는, 복수의 블록으로 구성된 하나의 파일에서, 데이터가 처음 쓰일 블록에 부여된 식별 정보를 의미한다.
노드 생성 모듈(122)은 확인한 스레드 정보에서 시작점 정보와 데이터 길이 정보를 이용하여 스레드에 대한 노드를 생성한다. 생성한 노드는 인터벌 트리 생성 모듈(124)로 전달되고, 미리 생성되어 있는 인터벌 트리에 삽입된다.
노드 생성 모듈(122)은 호출 함수 확인 모듈(121)로부터 수신한 스레드 정보를 범위 락 설정 모듈(123)로 전달한다.
범위 락 설정 모듈(123)은 스레드 정보의 파일 정보를 토대로, 동일한 파일에 데이터 쓰기를 시도하거나 데이터를 쓰고 있는 복수의 스레드들이 있는지 확인한다. 스레드들이 있으면, 범위 락 설정 모듈(123)은 인터벌 트리 생성 모듈(125)이 생성한 인터벌 트리를 토대로, 동일한 블록에 데이터 쓰기를 시도하거나 데이터를 쓰고 있는 복수의 스레드들이 있는지 확인한다.
범위 락 설정 모듈(123)은 함수 호출 스레드가 데이터를 파일에 쓰기를 실행할 때, 현재 쓰기를 실행하고 있는 다른 스레드(이하, 설명의 편의를 위하여 '이전 스레드'라 지칭함)가 데이터를 쓰고 있는 블록이 함수 호출 스레드가 데이터를 쓸 블록과 겹쳐지는 것으로 확인하면, 현재 호출된 스레드에 락을 설정한다. 그리고 함수 호출 스레드의 레퍼런스 카운터를 겹쳐지는 블록을 사용하는 스레드 수로 설정한다.
여기서 레퍼런스 카운터는 동일한 블록을 사용하고자 하는 스레드들의 개수를 의미한다. 예를 들어, 임의의 블록을 이전 스레드가 데이터 쓰기에 사용하고 있고, 함수 호출 스레드가 해당 블록에 데이터를 쓰고자 한다면, 범위 락 설정 모듈(123)은 이전 스레드의 레퍼런스 카운터는 0으로, 함수 호출 스레드의 레퍼런스 카운터는 1로 설정한다.
그러나, 동일한 블록이 둘 이상의 스레드에 의해 겹쳐지지 않는다면, 범위 락 설정 모듈(123)은 락을 설정하지 않는다. 범위 락 설정 모듈(123)은 레퍼런스 카운터를 0으로 설정한다.
범위 락 설정 모듈(123)은 이전 스레드가 데이터 쓰기를 완료하여 언락 함수를 호출하면, 함수 호출 스레드의 레퍼런스 카운터를 0으로 재설정한다. 이에 대해서는 이후 상세히 설명한다.
인터벌 트리 생성 모듈(124)은 노드 생성 모듈(122)로부터 데이터 쓰기 함수를 호출한 스레드에 대응하는 노드를 수신하여, 미리 생성되어 있는 인터벌 트리에 삽입한다. 인터벌 트리 생성 모듈(124)이 인터벌 트리를 생성하거나 갱신하는 방법은 다양하므로, 본 발명의 실시예에서는 어느 하나의 방법으로 한정하지 않는다.
이상에서 설명한 파일 시스템(100)을 이용하여 단일 파일 쓰기를 병렬화하는 방법에 대해 도 5를 참조로 설명한다.
도 5는 본 발명의 실시예에 따른 단일 파일 쓰기 병렬화 방법에 대한 흐름도이다.
도 5에 도시된 바와 같이, 파일 시스템(100)에 포함된 제어 모듈(120)은 파일에 데이터를 쓰기 위해 데이터 쓰기 함수를 호출한 함수 호출 스레드가 있음을 인지한다(S100). 여기서, 제어 모듈(120)이 스레드가 데이터 쓰기 함수를 호출하였음을 인지하는 방법은 다양하므로, 본 발명의 실시예에서는 어느 하나의 방법으로 한정하지 않는다.
제어 모듈(120)은 함수 호출 스레드가 데이터 쓰기 함수를 호출할 때 사용한 스레드 정보를 확인한다. 그리고 스레드 정보로부터 스레드가 데이터를 쓰기 위해 호출한 파일의 적어도 하나 이상의 블록을 확인한다(S101). 여기서, 스레드 정보는 스레드 식별 정보, 데이터 쓰기 할 파일 식별 정보, 데이터를 파일에 쓸 시작점 정보 그리고 데이터 길이 정보를 포함한다.
제어 모듈(120)은 S101 단계에서 확인한 스레드 정보를 토대로 함수 호출 스레드에 대응하는 노드를 생성한다. 그리고 생성한 노드를 이미 생성되어 있는 인터벌 트리에 삽입하여 인터벌 트리(interval tree)를 갱신한다(S102). 인터벌 트리는 BST(Binary Search Tree)의 변형으로, 트리를 구성하는 노드에 범위(range) 형태의 숫자가 들어간다.
따라서, 제어 모듈(120)이 갱신한 인터벌 트리에는 함수 호출 스레드가 데이터 쓰기를 위해 사용하고자 하는 파일의 블록 범위가 삽입된다. 이를 위해, 제어 모듈(120)은 함수 호출 스레드의 스레드 정보에서 시작점 정보와 데이터 길이 정보를 토대로 블록 범위를 확인하고, 블록 범위의 숫자를 노드로 생성하여 이미 생성되어 있는 인터벌 트리에 노드를 삽입한다.
예를 들어, 함수 호출 스레드가 10번 시작점에 데이터 길이가 20인 데이터를 파일에 쓰고자 한다고 가정한다. 이때, 하나의 블록에는 길이가 1인 데이터가 쓰인다고 가정한다. 그러면, 제어 모듈(120)은 인터벌 트리에 함수 호출 스레드에 대한 노드로 [시작점, 끝점]인 [10, 30]을 삽입하는 것을 예로 하나, 반드시 이와 같이 한정되는 것은 아니다.
제어 모듈(120)은 갱신한 인터벌 트리를 토대로, 함수 호출 스레드가 데이터를 쓸 블록들 중 일부 또는 전부가 이전 스레드가 선점하여 데이터를 쓰고 있는 블록과 겹쳐지는지 확인한다(S103). 만약 블록들 중 일부 또는 전부에 이전 스레드가 데이터를 쓰고 있다면, 제어 모듈(120)은 함수 호출 스레드의 레퍼런스 카운터를 겹치는 블록들에 대해 대기중이거나 동작중인 스레드의 개수로 변경한 후, 해당 블록에 블록 락을 설정한다(S104).
제어 모듈(120)은 함수 호출 스레드를 포함하도록 인터벌 트리를 갱신한 후, 함수 호출 스레드가 데이터 쓰기를 실행할 수 있을 때까지 대기 상태가 되도록 제어한다(S105). 여기서 제어 모듈(120)이 블록에 블록 락을 설정하는 방법과 제어 모듈(120)이 스레드를 제어하는 방법은 다양하므로, 본 발명의 실시예에서는 어느 하나의 방법으로 한정하지 않는다.
S103 단계에서 확인한 결과, 함수 호출 스레드가 사용하고자 하는 블록이 이전 스레드가 사용하고 있는 블록과 겹쳐지지 않다면, 제어 모듈(120)은 함수 호출 스레드에 대한 레퍼런스 카운터를 0으로 설정한다. 그리고 함수 호출 스레드가 파일 쓰기를 실행할 수 있도록 제어한다(S106).
제어 모듈(120)은 데이터 쓰기를 완료한 임의의 스레드로부터 언락 함수 호출이 있는지 확인한다(S107). 언락 함수 호출이 있는지 확인하는 단계는, 스레드가 쓰기를 완료한 후 실행된다.
언락 함수 호출이 발생하지 않았다면, 제어 모듈(120)은 대기 상태를 유지한다. 그러나, 언락 함수를 호출한 임의의 스레드가 존재하면, S102 단계에서 갱신한 인터벌 트리에서 해당 스레드에 대한 노드를 삭제하여 인터벌 트리를 갱신한다(S108). 그리고 제어 모듈(120)은 레퍼런스 카운터를 확인하여 노드가 삭제된 스레드에 의해 데이터 쓰기가 대기중인 스레드가 존재하는지 확인한다(S109).
만약 대기중인 스레드가 존재하지 않으면, 제어 모듈(120)은 데이터 쓰기 절차를 종료한다. 그러나 대기중인 스레드 중 렌퍼런스 카운터 값이 0인 스레드가 존재한다면, 제어 모듈(120)은 대기중인 스레드의 레퍼런스 카운터를 변경한 뒤, 데이터 쓰기를 실행할 수 있도록 대기중인 스레드를 깨운다(S110).
이상에서 설명한 파일 시스템(100)을 이용하여 범위 락 기법을 통한 성능 향상에 대해 도 6을 참조로 설명한다.
도 6은 본 발명의 실시예에 따른 평균 지연 시간을 측정한 실험치의 예시도이다.
도 6에 도시된 바와 같이, 본 발명의 실시예에 따른 범위 락 기법을 이용한 병렬 단일 파일 쓰기 환경과 일반적인 파일 시스템의 성능 비교를 위하여, DWOM 워크로드와 병렬 다른 파일 쓰기인 DWOL 워크로드의 성능을 비교한다.
도 6의 (a)는 일반적인 병렬 단일 파일 쓰기(DWOM)와 본 발명의 실시예에 따른 범위 락 기법을 이용한 병렬 단일 파일 쓰기의 성능을 비교한 그래프이다. 도 6의 (b)는 DWON 워크로드에 대한 처리율과 본 발명의 실시예에 따른 범위 락 기법을 이용한 병렬 단일 파일 쓰기의 성능을 비교한 그래프이다. 그리고 도 6의 (c)는 일반적인 병렬 단일 파일 쓰기 워크로드(DWOM)에 대해 기본 F2FS 및 범위 락을 적용한 F2FS가 한 페이지를 쓸 때 걸리는 평균 지연 시간을 측정하여 비교한 실험치이다.
본 발명의 실시예에 따라 범위 락 기법의 성능을 비교하기 위하여 설정된 실험 환경은 표 1과 같다.
CPU | Intel Xeon E7-8870 v2 2.3GHz*15cores) * 8 |
RAM | 740GB |
SSD | Intel Optane SSD 900p. Intel 750 SSD |
Kernel | Linux 4.14.11 |
OS | Ubuntu 16.04 |
도 6에서는 두 가지 워크로드를 사용하여 기존 F2FS와 본 발명의 실시예에 따른 범위 락을 적용한 F2FS의 확장성을 비교하였다. 도 6의 (a)는 DWOM 워크로드로 기존 F2FS는 코어의 개수에 관계없이 성능에 변화가 거의 없음을 볼 수 있다. 이는 동작하는 코어의 개수를 늘려서 병렬적으로 처리할 수 있는 I/O를 증가시켜도 아이노드 락 때문에 쓰기 요청이 동시에 실행되지 않고 순차적으로 실행되기 때문이다. 반면, 본 발명의 실시예에 따라 범위 락을 적용한 F2FS에서는 기존 F2FS보다 최대 13.6배의 성능 증가를 보임을 알 수 있다.
도 6의 (b)는 DWOL 워크로드의 실험 결과로, 기존 F2FS와 본 발명의 실시예에 따른 범위 락을 적용한 F2FS가 비슷한 성능을 보였다. 두 경우 모두 성능의 확장성을 보였다. 이는 DWOL 워크로드의 경우 여러 스레드가 각각 다른 파일에 쓰기를 수행하기 때문에, 아이노드 락에 의해 블록 되는 스레드가 없다. 즉, 여러 쓰기가 동시에 수행될 수 있기 때문에 성능의 확장성을 볼 수 있었다.
본 발명의 실시예에 따른 범위 락을 적용한 F2FS의 경우 28 코어까지 기존 F2FS보다 좋은 성능이 나왔다. 이는 범위 락을 수행할 때 발생하는 오버헤드와 아이노드 락을 수행할 때 발생하는 오버헤드가 다르기 때문에 성능의 차이가 발생한다.
도 6의 (c)는 DWOM 워크로드에서 한 페이지에 쓰기를 할 때 발생하는 지연 시간을 비교한 결과이다. 모든 경우에서 범위 락을 적용한 F2FS가 기존 F2FS보다 한 페이지를 쓸 때 걸리는 지연 시간이 평균 14% 감소하였고 120 코어에서 최대 17% 감소하였다.
다음은 본 발명의 실시예에 따라 제어 모듈(120)의 인터벌 트리 생성 모듈(124)이 데이터 쓰기 함수를 호출한 스레드들을 이용하여 생성한 인터벌 트리의 예에 대해 도 7을 참조로 설명한다.
도 7은 본 발명의 실시예에 따른 인터벌 트리의 예시도이다.
도 7에 도시된 바와 같이, 6개의 스레드들(A~F)이 동일한 파일에 데이터 쓰기 함수를 호출하였다고 가정한다. 각각의 스레드들은 데이터가 작성될 시작점과 데이터의 길이 정보를 포함하여 데이터 쓰기 함수를 호출하기 때문에, 인터벌 트리 생성 모듈(124)은 도 7에 도시한 바와 같이 각 스레드들에 대한 시작점과 종료점을 확인할 수 있다.
예를 들어, A 스레드의 경우, 파일의 3번째 블록부터 길이가 9인 데이터 쓰기를 한다고 가정한다. 그러면, 인터벌 트리 생성 모듈(124)은 A 스레드에 대한 데이터 쓰기 시작점 3과, 종료점 12를 확인할 수 있다([3, 12]). A 스레드는 데이터 쓰기 함수를 호출한 첫 번째 스레드이기 때문에, 레퍼런스 카운터(Ref)는 0으로 설정된다.
다음, B 스레드가 파일의 5번째 블록부터 길이가 8인 데이터 쓰기를 한다고 가정한다. 그러면, 인터벌 트리 생성 모듈(124)은 B 스레드에 대한 데이터 쓰기 시작점 5과, 종료점 13을 확인할 수 있다([5, 13]). 이때, B 스레드는 5번째 블록부터 12번째 블록까지가 A 스레드와 동일한 블록에 데이터 쓰기를 시도하는 것을 알 수 있다.
따라서, 범위 락 설정 모듈(123)은 B 스레드에 락을 설정한 후, B 스레드를 인터벌 트리의 노드로 생성한다. 여기서, B 스레드에 대한 노드를 인터벌 트리의 노드로 삽입하는 방법은 이진 탐색 트리(binary search tree)의 삽입 방법과 같다. 다만, 노드 삽입을 위해 비교하는 값은 확인한 값 들 중 low 값이다.
삽입할 노드의 low 값이 트리에 삽입되어 있는 노드의 low 값보다 작으면 왼쪽자식 노드(left child)에 삽입한다. 그러나 삽입할 노드의 low 값이 트리에 삽입되어 있는 노드의 low 값보다 크면, 오른쪽 자식 노드(right child)로 삽입한다.
즉, B 스레드의 경우 low 값이 5로, A 스레드의 low 값인 3보다 크기 때문에 오른쪽 자식 노드에 삽입된다. 그리고 이미 A 스레드에 의해 점유되어 사용중인 블록들 중 일부 동일한 블록을 사용하고자 하기 때문에, 인터벌 트리 생성 모듈(124)은 레퍼런스 카운터(Ref)로 1을 설정한다.
다음, C 스레드가 파일의 2번째 블록부터 길이가 12인 데이터 쓰기를 한다고 가정한다. 그러면, 인터벌 트리 생성 모듈(124)은 C 스레드에 대한 데이터 쓰기 시작점 2과, 종료점 14를 확인할 수 있다([2, 14]). 이때, C 스레드는 A 스레드 및 B 스레드와 일부 동일한 블록에 데이터 쓰기를 시도하는 것을 알 수 있다.
따라서, 범위 락 설정 모듈(123)은 C 스레드에 락을 설정한 후, C 스레드를 인터벌 트리의 노드로 생성한다. 이때, C 스레드의 low 값인 2는 A 스레드의 low 값인 3보다 작기 때문에, A 스레드의 노드에서 왼쪽 자식 노드에 삽입된다. 그리고 C 스레드가 사용하고자 하는 블록이 이미 A 스레드와 B 스레드가 사용하고자 하기 때문에, 인터벌 트리 생성 모듈(124)은 레퍼런스 카운터(Ref)로 2를 설정한다. 이와 같은 방법으로 인터벌 트리 생성 모듈(124)은 스레드들에 대한 인터벌 트리를 생성하게 된다.
이상에서 본 발명의 실시예에 대하여 상세하게 설명하였지만 본 발명의 권리범위는 이에 한정되는 것은 아니고 다음의 청구범위에서 정의하고 있는 본 발명의 기본 개념을 이용한 당업자의 여러 변형 및 개량 형태 또한 본 발명의 권리범위에 속하는 것이다.
Claims (12)
- 파일 시스템이 복수의 스레드가 단일 파일에 데이터를 쓰도록 제어하는 방법으로서,
데이터 쓰기 함수를 호출한 함수 호출 스레드에 대하여, 데이터를 쓸 파일의 파일 정보, 상기 파일을 구성하는 복수의 블록들 중 데이터를 쓰기 시작할 블록 시작점 정보, 및 데이터 길이 정보를 포함하는 스레드 정보를 확인하는 단계,
상기 파일 정보를 토대로 동일한 파일에 데이터를 쓰고 있는 이전 스레드가 존재하는지 확인하는 단계,
상기 이전 스레드가 존재하면, 상기 함수 호출 스레드의 블록 시작점 정보와 데이터 길이 정보를 토대로, 상기 이전 스레드의 블록들과 중복되는 블록이 있는지 확인하는 단계, 그리고
상기 함수 호출 스레드가 상기 이전 스레드의 블록들과 서로 다른 블록에 데이터를 쓰고자 한다면, 상기 파일에 데이터를 쓰도록 상기 함수 호출 스레드를 제어하는 단계
를 포함하는 단일 파일 데이터 쓰기 병렬화 방법. - 제1항에 있어서,
상기 스레드 정보를 확인하는 단계는,
상기 블록 시작점 정보와 데이터 길이 정보를 토대로, 상기 함수 호출 스레드에 대한 노드들 생성하는 단계, 그리고
상기 생성한 노드를 상기 이전 스레드에 대한 노드가 삽입되어 있는 인터벌 트리에 삽입하고, 상기 인터벌 트리를 갱신하는 단계
를 포함하는 단일 파일 데이터 쓰기 병렬화 방법. - 제2항에 있어서,
상기 중복되는 블록이 있는지 확인하는 단계는,
상기 이전 스레드의 스레드 정보에 포함된 블록 시작점 정보와 데이터 길이 정보를 토대로 생성된 노드와 상기 함수 호출 스레드의 노드를 토대로, 겹쳐지는 블록 구간이 있는지 확인하는 단일 파일 데이터 쓰기 병렬화 방법. - 제3항에 있어서,
상기 중복되는 블록이 있는지 확인하는 단계는,
상기 이전 스레드의 블록들 중 일부 또는 전체 블록들과 중복되는 블록이 존재하면, 상기 이전 스레드에 의해 선점된 블록들에 락을 설정하는 단계
를 포함하는 단일 파일 데이터 쓰기 병렬화 방법. - 제4항에 있어서,
상기 함수 호출 스레드를 제어하는 단계는,
상기 함수 호출 스레드의 레퍼런스 카운터를 설정하는 단계
를 더 포함하고,
상기 레퍼런스 카운터는 동일한 블록에 데이터를 쓰고자 하는 스레드들의 수로 설정되는 단일 파일 데이터 쓰기 병렬화 방법. - 제5항에 있어서,
상기 함수 호출 스레드를 제어하는 단계 이후에,
상기 동일한 파일에 데이터를 쓰고 있는 복수의 스레드들 중 어느 하나의 스레드가 호출한 언락 함수를 인지하는 단계, 그리고
상기 언락 함수를 호출한 스레드에 대응하는 노드를 상기 인터벌 트리로부터 삭제하는 단계
를 포함하는 단일 파일 데이터 쓰기 병렬화 방법. - 제6항에 있어서,
상기 삭제하는 단계 이후에,
상기 인터벌 트리에서 삭제된 스레드에 의해, 데이터 쓰기를 대기하고 있는 스레드가 존재하는지 확인하는 단계, 그리고
데이터 쓰기를 대기하는 스레드가 있으면, 상기 대기중인 스레드가 파일에 데이터 쓰기를 실행하도록 제어하는 단계
를 포함하는 단일 파일 데이터 쓰기 병렬화 방법. - 파일 시스템으로서,
데이터 쓰기 함수를 호출한 복수의 스레드들이 각각 쓰기를 실행한 데이터를 블록 단위로 분할하여 저장하는 파일 시스템 모듈, 그리고
제1 스레드가 상기 데이터 쓰기 함수를 호출하면, 상기 제1 스레드에 대한 스레드 정보를 확인하고, 확인한 스레드 정보를 토대로 상기 제1 스레드가 데이터를 쓸 블록들 중 적어도 하나의 블록이 데이터를 쓰고 있는 제2 스레드에 의해 사용되고 있으면 상기 제2 스레드가 사용하고 있는 블록에 락을 설정하며, 상기 제1 스레드가 데이터를 쓸 블록들이 상기 제2 스레드에 의해 사용되고 있지 않으면 상기 제1 스레드가 상기 파일 시스템 모듈에 데이터를 쓰도록 제어하는 제어 모듈
을 포함하는 파일 시스템. - 제8항에 있어서,
상기 제어 모듈은,
상기 제1 스레드로부터 호출된 함수가 상기 데이터 쓰기 함수 또는 언락 함수 중 어느 하나의 함수인지 확인하는 호출 함수 확인 모듈,
상기 데이터 쓰기 함수가 호출되면, 상기 제1 스레드가 생성한 상기 스레드 정보를 토대로 인터벌 트리에 삽입할 노드를 생성하는 노드 생성 모듈,
인터벌 트리 생성 모듈이 생성한 인터벌 트리를 토대로 상기 제1 스레드가 데이터를 쓸 블록들이 상기 제2 스레드에 의해 사용되고 있는지 확인하는 스레드 정보 확인 모듈, 그리고
상기 스레드 정보 확인 모듈이 상기 제1 스레드가 데이터를 쓸 블록들이 상기 제2 스레드에 의해 사용되고 있는 것으로 확인하면, 상기 제2 스레드가 사용하는 블록들에 락을 설정하는 범위 락 설정 모듈
을 포함하는 파일 시스템. - 제9항에 있어서,
상기 스레드 정보는 상기 제1 스레드가 데이터를 쓸 파일의 파일 정보, 상기 파일을 구성하는 복수의 블록들 중 데이터를 쓰기 시작할 블록 시작점 정보, 및 데이터 길이 정보를 포함하고,
상기 노드 생성 모듈은,
상기 블록 시작점 정보와 데이터 길이 정보를 토대로 상기 제1 스레드에 대한 블록 시작점과 블록 끝점을 포함하는 노드를 생성하는 파일 시스템. - 제10항에 있어서,
상기 범위 락 설정 모듈은,
상기 제1 스레드가 데이터를 쓸 블록들이 상기 제2 스레드에 의해 사용되고 있으면, 상기 제1 스레드의 레퍼런스 카운터를 상기 블록들을 사용할 스레드의 수만큼 설정하는 파일 시스템. - 제10항에 있어서,
상기 노드 생성 모듈이 생성한 노드를 상기 인터벌 트리에 삽입하는 상기 인터벌 트리 생성 모듈
을 더 포함하는 파일 시스템.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020190061340A KR102251869B1 (ko) | 2019-05-24 | 2019-05-24 | 파일 시스템 및 이를 이용한 단일 파일 쓰기 병렬화 방법 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020190061340A KR102251869B1 (ko) | 2019-05-24 | 2019-05-24 | 파일 시스템 및 이를 이용한 단일 파일 쓰기 병렬화 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20200135005A KR20200135005A (ko) | 2020-12-02 |
KR102251869B1 true KR102251869B1 (ko) | 2021-05-12 |
Family
ID=73791837
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020190061340A KR102251869B1 (ko) | 2019-05-24 | 2019-05-24 | 파일 시스템 및 이를 이용한 단일 파일 쓰기 병렬화 방법 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR102251869B1 (ko) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101638136B1 (ko) | 2015-05-14 | 2016-07-08 | 주식회사 티맥스 소프트 | 멀티 스레드 구조에서 작업 분배 시 스레드 간 락 경쟁을 최소화하는 방법 및 이를 사용한 장치 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101257848B1 (ko) | 2005-07-13 | 2013-04-24 | 삼성전자주식회사 | 복합 메모리를 구비하는 데이터 저장 시스템 및 그 동작방법 |
US7836226B2 (en) * | 2007-12-06 | 2010-11-16 | Fusion-Io, Inc. | Apparatus, system, and method for coordinating storage requests in a multi-processor/multi-thread environment |
KR20140147318A (ko) * | 2013-06-19 | 2014-12-30 | 한국전자통신연구원 | 멀티코어용 병렬 프로그램의 동시성 오류 검출 장치 및 방법 |
GB2521155B (en) * | 2013-12-10 | 2021-06-02 | Advanced Risc Mach Ltd | Configuring thread scheduling on a multi-threaded data processing apparatus |
US9792294B2 (en) | 2014-07-02 | 2017-10-17 | Panzura, Inc | Using byte-range locks to manage multiple concurrent accesses to a file in a distributed filesystem |
-
2019
- 2019-05-24 KR KR1020190061340A patent/KR102251869B1/ko active IP Right Grant
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101638136B1 (ko) | 2015-05-14 | 2016-07-08 | 주식회사 티맥스 소프트 | 멀티 스레드 구조에서 작업 분배 시 스레드 간 락 경쟁을 최소화하는 방법 및 이를 사용한 장치 |
Non-Patent Citations (1)
Title |
---|
노성현 등, "로그 기반 파일 시스템의 매니 코어 성능 및 확장성 분석", 2018 한국소프트웨어종합학술대회논문집 (2018.12.19.) |
Also Published As
Publication number | Publication date |
---|---|
KR20200135005A (ko) | 2020-12-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Wu et al. | An empirical evaluation of in-memory multi-version concurrency control | |
US8909610B2 (en) | Shared log-structured multi-version transactional datastore with metadata to enable melding trees | |
US10599485B2 (en) | Index structure using atomic multiword update operations | |
US8386421B2 (en) | Concurrency control for confluent trees | |
JP3441807B2 (ja) | B木インデクスの管理方法およびシステム | |
JP4603546B2 (ja) | 効率的なバージョン制御を有するデータベース管理システム | |
US8671076B2 (en) | Database recovery using logs applied to consistent copies | |
Levandoski et al. | High performance transactions in deuteronomy | |
US11023453B2 (en) | Hash index | |
EP2378420B1 (en) | Ownership reassignment in a shared-nothing database system | |
Levandoski et al. | LLAMA: A cache/storage subsystem for modern hardware | |
CN113220490A (zh) | 异步写回持久化内存的事务持久化方法及系统 | |
Lee et al. | Write optimization of log-structured flash file system for parallel I/O on manycore servers | |
Ma et al. | Hiengine: How to architect a cloud-native memory-optimized database engine | |
Lakshman et al. | Nitro: a fast, scalable in-memory storage engine for nosql global secondary index | |
Dong et al. | Optimistic transaction processing in deterministic database | |
Sauer et al. | Instant restore after a media failure | |
KR102251869B1 (ko) | 파일 시스템 및 이를 이용한 단일 파일 쓰기 병렬화 방법 | |
CN111858503B (zh) | 一种基于日志解析同步的并行执行方法和数据同步系统 | |
Lee et al. | Concurrent file metadata structure using readers-writer lock | |
Jin et al. | SAL-hashing: a self-adaptive linear hashing index for SSDs | |
Cai et al. | Garbage collection and data recovery for N2DB | |
Nakazono et al. | Griffin: Fast Transactional Database Index with Hash and B+-Tree | |
Kumar et al. | Performance measurement of some main memory database recovery algorithms | |
Alhajri et al. | OCC2T: An Early-Read Dual-Track OCC Algorithm For Mixed Mode Systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |