KR20150101244A - 분산 파일시스템에서의 읽기 동작 수행 방법 및 장치 - Google Patents
분산 파일시스템에서의 읽기 동작 수행 방법 및 장치 Download PDFInfo
- Publication number
- KR20150101244A KR20150101244A KR1020140022718A KR20140022718A KR20150101244A KR 20150101244 A KR20150101244 A KR 20150101244A KR 1020140022718 A KR1020140022718 A KR 1020140022718A KR 20140022718 A KR20140022718 A KR 20140022718A KR 20150101244 A KR20150101244 A KR 20150101244A
- Authority
- KR
- South Korea
- Prior art keywords
- request
- context
- read
- server
- ahead
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
-
- 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
- G06F16/1767—Concurrency control, e.g. optimistic or pessimistic approaches
-
- 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/182—Distributed file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Abstract
본 발명은 클라이언트와 서버가 분리된 분산 파일시스템에서의 읽기 동작을 수행하는 방법 및 장치에 관한 것으로서, 구체적으로는 클라이언트의 응용 프로그램이 파일(또는 청크)에 대해 연속 읽기 요청시에, 클라이언트내 지역 파일시스템의 최적의 연속 읽기 기능을 효과적으로 지원할 수 있도록 분산 파일시스템에서도 고성능 연속 읽기 기능을 제공하기 위해 미리 읽기(prefetching)을 수행하는 방법 및 장치에 관한 것이다.
Description
본 발명은 클라이언트와 서버가 분리된 분산 파일시스템에서의 읽기 동작을 수행하는 방법 및 장치에 관한 것으로서, 구체적으로는 클라이언트의 응용 프로그램이 파일(또는 청크)에 대해 연속 읽기 요청시에, 클라이언트내 지역 파일시스템의 최적의 연속 읽기 기능을 효과적으로 지원할 수 있도록 분산 파일시스템에서도 고성능 연속 읽기 기능을 제공하기 위해 미리 읽기(prefetching)을 수행하는 방법 및 장치에 관한 것이다.
일반적으로, 파일시스템에서 응용 프로그램의 파일 연속 읽기를 효과적으로 처리하기 위해서 미리 읽기(prefetching)를 수행한다. 미리 읽기는 사용자의 읽기 요청과 다음 연속 읽기를 대비하여 연속된 다음 블록의 읽기를 함께 수행하는 기능으로서, 다음 읽기에 대해 짧은 응답 내에 읽기 요청을 처리할 수 있다. 이를 위해, 파일시스템은 개방된 파일 별로 미리 읽기 윈도우(readahead window) 구조를 유지한다. 이 구조 내에 응용 프로그램의 최근 읽기 요청한 위치 정보인 오프셋(offset)과 미리 읽기 크기(size) 정보를 유지한다.
지역 파일시스템의 미리 읽기 동작과 다르게, 분산 파일시스템은 클라이언트 파일시스템에서 미리 읽기 동작을 수행함과 동시에 서버에서도 미리 읽기 동작을 수행하여야 한다. 이로 인하여, 분산 파일시스템에서 다음과 같은 문제가 발생할 수 있다.
1. 순서바뀜(reordering)
클라이언트의 미리 읽기 동작에 의해 발생된 연속된 미리 읽기 요청은 서버의 요청 처리기에서 실행 순서가 바뀌어 실행될 수 있다. 이에 따라, 서버의 지역 파일시스템의 미리 읽기 윈도우 크기가 축소되어 미리 읽기 동작의 효율성이 저하될 수 있다.
2. 미리 읽기 윈도우 불일치(mismatch)
분산 파일시스템에서는 클라이언트와 서버가 동시에 미리 읽기 동작을 수행함에 따라 클라이언트와 서버의 미리 읽기 기법이 상이할 경우에는 비효율적인 연속 읽기가 수행될 수 있다. 가령, 클라이언트의 미리 읽기 크기가 서버의 미리 읽기 보다 클 경우 또는 클라이언트 미리 읽기 크기가 서버의 미리 읽기 크기 보다 작을 경우에 이와 같은 문제가 발생할 수 있다.
따라서, 본 발명은 분산 파일 시스템에서 최적화된 연속 읽기 성능을 보장하기 위해 전술한 순서바뀜 및 미리 읽기 윈도우 불일치 문제를 해결하는 것을 목적으로 한다.
또한, 본 발명은 미리 읽기 동작을 파이프라인(pipeline) 방식으로 수행하고 디스크 IO와 네트워크 IO를 인터리빙(interleaving) 방식으로 수행함으로써 분산 파일 시스템이 지역 파일시스템의 연속 읽기와 유사한 성능을 낼 수 있도록 하는 것을 목적으로 한다.
전술한 목적을 달성하기 위해, 본 발명의 일실시예에 따라 분산파일 시스템에서 읽기 동작을 수행하는 방법이 제공된다. 상기 방법은, 클라이언트로부터 읽기 대상 파일에 대한 문맥 생성 요청이 수신되면, 서버가 상기 파일에 대한 문맥 식별자 및 파일 디스크립터(file descriptor: fd)를 포함하는 문맥 구조체를 생성하고, 상기 문맥 식별자를 상기 클라이언트에 전송하는 단계; 및 상기 파일에 대한 복수의 읽기 요청- 상기 읽기 요청 각각은 상기 파일에 대응하는 문맥 식별자, 최신 문맥 요청 일련 번호, 요청된 읽기 위치를 나타내는 오프셋 및 읽기 크기 정보를 포함함-이 수신되면, 서버가 상기 읽기 요청 각각에 포함된 문맥 요청 일련 번호를 참조하여 상기 복수의 읽기 요청을 순차적으로 처리하는 단계를 포함한다. 하는 분산파일 시스템에서의 읽기 동작 수행 방법.
일실시예에서, 상기 서버에 의해 생성된 문맥 구조체는 상기 문맥에 대한 요청 처리의 동시성 제어를 위한 문맥 잠금 항목을 더 포함할 수 있다.
일실시예에서, 상기 서버에 의해 생성된 문맥 구조체는 상기 문맥에 대해 최근 처리된 요청 번호를 나타내는 최신 문맥 처리 번호를 더 포함하고, 상기 최신 문맥 처리 번호는 초기에 0으로 설정된 후에 상기 문맥에 연관된 파일에 대한 요청이 처리될 때마다 1씩 증가될 수 있다.
일실시예에서, 상기 서버로부터 수신된 문맥 식별자를 포함하는 문맥 구조체가 상기 클라이언트에도 생성 및 유지되며, 상기 클라이언트의 문맥 구조체는 상기 문맥 식별자에 부가하여 상기 문맥에 대한 요청이 동시성 제어를 위한 문맥 잠금 및 최신 문맥 요청 일련 번호를 더 포함하고, 상기 최신 문맥 요청 일련 번호는 초기에 0으로 설정된 후에 상기 문맥에 연관된 파일에 대한 요청이 생성될 때마다 1씩 증가될 수 있다.
일실시예에서, 상기 복수의 읽기 요청을 순차적으로 처리하는 단계는, 상기 읽기 요청에 포함된 문맥 처리 요청 일련 번호와 상기 서버의 문맥 구조체에 포함된 최신 문맥 처리 번호를 비교함으로써 상기 읽기 요청이 순서 바뀐(reordered) 요청인지 여부를 판단하는 단계; 및 순서 바뀐 요청인 것으로 판단되면, 상기 읽기 요청보다 앞선 요청에 대한 처리가 완료될 때까지 상기 읽기 요청을 대기시킨 후에 처리하는 단계를 포함할 수 있다.
일실시예에서, 상기 클라이언트로부터 상기 생성된 문맥에 대한 삭제 요청이 수신되면, 상기 삭제 요청에 포함된 문맥 처리 요청 일련번호와 상기 서버의 문맥 구조체에 포함된 최신 문맥 처리 번호를 비교함으로써 상기 삭제 요청이 순서 바뀐(reordered) 요청인지 여부를 판단하는 단계; 순서 바뀐 요청인 것으로 판단되면 상기 삭제 요청보다 앞선 요청에 대한 처리가 완료될 때까지 대기하는 단계; 및 상기 앞선 요청에 대한 처리가 완료된 후에 상기 삭제 요청된 문맥 구조체를 삭제하는 단계를 더 포함할 수 있다.
본 발명의 일실시예에 따라 분산파일 시스템에서 읽기 동작을 수행하는 방법이 제공된다. 상기 방법은, 클라이언트로부터 읽기 대상 파일에 대하여 오프셋 및 미리 읽기 크기 정보를 포함하는 문맥 생성 요청이 수신되면, 서버가 상기 파일에 대한 문맥 식별자 및 fd를 포함하는 문맥 구조체를 생성하고, 상기 문맥 식별자를 상기 클라이언트에 전송하는 단계; 및 상기 문맥 생성 요청에 포함된 오프셋 및 미리 읽기 크기 정보에 근거하여 상기 파일에 대한 미리 읽기(readahead)를 수행하고 미리 읽은 데이터를 상기 클라이언트에 전송하는 단계를 포함한다.
일실시예에서, 상기 서버에서 생성되는 문맥 구조체는, 상기 문맥 식별자 및 상기 fd에 부가하여, 상기 문맥에 대한 요청 처리의 동시성 제어를 위한 문맥 잠금, 상기 서버의 최대 미리 읽기 크기, 문맥 버전 번호, 상기 문맥에 대해 최근 처리된 요청 번호를 나타내는 최신 문맥 처리 번호, 미리 읽기 크기 및 메모리 버퍼 주소중 적어도 하나를 더 포함하고, 상기 최신 문맥 처리 번호는 초기에 0으로 설정된 후에 상기 문맥에 연관된 파일에 대한 요청이 처리될 때마다 1씩 증가될 수 있다.
일실시예에서, 상기 서버로부터 수신된 문맥 식별자를 포함하는 문맥 구조체가 상기 클라이언트에도 생성 및 유지되며, 상기 클라이언트의 문맥 구조체는 상기 문맥 식별자에 부가하여, 문맥 잠금, 상기 서버의 최대 미리 읽기 크기, 문맥 버전 번호, 최신 문맥 요청 일련 번호, 미리 읽기 시작 위치, 미리 읽기 요청 크기 및 비동기 미리 읽기 요청 크기 정보중 적어도 하나를 더 포함하고, 상기 최신 문맥 요청 일련번호는 초기에 0으로 설정된 후에 상기 문맥에 연관된 파일에 대한 요청이 생성될 때마다 1씩 증가될 수 있다.
일실시예에서, 상기 클라이언트에 전송된 상기 미리 읽은 데이터는 상기 클라이언트의 미리 읽기 버퍼에 저장되며, 상기 클라이언트의 미리 읽기 버퍼 크기는 상기 서버의 최대 미리 읽기 크기의 2배일 수 있다.
일실시예에서, 상기 클라이언트에서 수행되는 응용 프로그램으로부터 상기 파일에 대한 연속 읽기가 요청되는 경우에, 상기 응용 프로그램에 의해 아직 판독되지 않은 미리 읽기 버퍼의 잔여 데이터 크기가 기설정된 비동기 미리 읽기 요청 크기보다 작아지면 상기 클라이언트가 상기 서버에 비동기 미리 읽기 요청 크기 정보를 포함하는 미리 읽기 요청을 전송하는 단계; 상기 미리 읽기 요청을 수신한 서버가 상기 비동기 미리 읽기 요청 크기만큼 상기 파일에 대한 비동기 미리 읽기 동작을 수행하는 단계; 및 상기 미리 읽은 데이터를 상기 클라이언트에 전송하는 단계를 더 포함할 수 있다.
일실시예에서, 상기 비동기 미리 읽기 요청 크기는 상기 서버의 최대 미리 읽기 크기까지 증가될 수 있다.
일실시예에서, 상기 미리 읽기 요청은 문맥 처리 요청 일련번호를 더 포함하고, 상기 미리 읽기 동작을 수행하는 단계는, 상기 미리 읽기 요청에 포함된 문맥 처리 요청 일련번호와 상기 서버의 문맥 구조체에 포함된 최신 문맥 처리 번호를 비교함으로써 상기 미리 읽기 요청이 순서 바뀐(reordered) 요청인지 여부를 판단하는 단계; 및 순서 바뀐 요청인 것으로 판단되면 상기 미리 읽기 요청보다 앞선 요청에 대한 처리가 완료될 때가지 대기시킨 후에 처리하는 단계를 포함할 수 있다.
일실시예에서, 상기 클라이언트에서 수행되는 응용 프로그램으로부터 상기 파일에 대한 랜덤 읽기가 요청되는 경우에, 상기 클라이언트가 상기 파일에 연관된 문맥 구조체내 문맥 버전 번호를 증가시키고 상기 증가된 버전 번호, 문맥 식별자, 오프셋 및 미리 읽기 크기 정보를 포함하는 문맥 변경 요청을 상기 서버에 전송하는 단계; 및 상기 문맥 변경 요청을 수신한 서버가 상기 변경 요청된 문맥 구조체의 문맥 버전 번호를 상기 변경 요청에 포함된 버전 번호로 변경하고, 상기 변경 요청에 포함된 오프셋 및 미리 읽기 크기 정보를 이용하여 상기 파일에 대한 미리 읽기 동작을 수행하고 미리 읽은 데이터를 상기 클라이언트에게 전송하는 단계를 더 포함할 수 있다.
일실시예에서, 상기 클라이언트로부터 상기 생성된 문맥에 대한 삭제 요청이 수신되면, 상기 삭제 요청에 포함된 문맥 처리 요청 일련번호와 상기 서버의 문맥 구조체에 포함된 최신 문맥 처리 번호를 비교함으로써 상기 삭제 요청이 순서 바뀐(reordered) 요청인지 여부를 판단하는 단계; 순서 바뀐 요청인 것으로 판단되면 상기 삭제 요청보다 앞선 요청에 대한 처리가 완료될 때까지 대기하는 단계; 및 상기 앞선 요청에 대한 처리가 완료된 후에 상기 삭제 요청된 문맥 구조체를 삭제하는 단계를 더 포함할 수 있다.
본 발명의 일실시예에 따라 분산파일 시스템에서 읽기 동작을 수행하는 방법이 제공된다. 상기 방법은, 응용 프로그램으로부터 파일에 대한 읽기 요청 ?? 상기 읽기 요청은 오프셋 및 읽기 크기 정보를 포함함-이 수신되면, 클라이언트는 상기 파일에 대한 문맥 구조체가 존재하는지 판단하는 단계; 상기 파일에 대한 문맥 구조체가 존재하는 경우에 상기 읽기 요청에 포함된 오프셋과 상기 문맥 구조체에 포함된 읽기 시작 위치를 비교하여 상기 읽기 요청이 연속 읽기 요청인지 랜덤 읽기 요청인지 판단하는 단계; 상기 읽기 요청이 연속 읽기 요청인 것으로 판단되면, 서버에 상기 파일에 대한 비동기 미리 읽기를 요청하는 단계; 및 상기 읽기 요청이 랜덤 읽기 요청인 것으로 판단되면, 상기 서버에 상기 문맥에 대한 변경을 요청하는 단계를 포함한다.
일실시예에서, 상기 파일에 대한 문맥 구조체가 존재하는지 않는 경우에, 상기 서버에 상기 파일에 대한 문맥 생성을 요청하는 단계를 더 포함할 수 있다.
일실시예에서, 상기 문맥에 대한 변경을 요청하는 단계는, 요청큐에 상기 문맥에 대해 대기중인 비동기 미리 읽기 요청이 존재하는지 판단하는 단계; 및 상기 요청큐에 대기중인 비동기 미리 읽기 요청이 존재하는 경우에, 상기 요청이 처리되어 상기 요청큐가 비워질 때까지 대기한 후에 상기 서버에 상기 문맥에 대한 변경 요청을 전송하는 단계를 포함할 수 있다.
일실시예에서, 상기 응용 프로그램으로부터 상기 파일에 대한 쓰기 요청이 수신되면, 상기 파일의 쓰기 요청 영역이 미리 읽기 윈도우에 포함되는지 판단하는 단계; 상기 미리 읽기 윈도우에 포함되는 경우 상기 미리 읽기 버퍼를 무효화는 단계; 및 상기 문맥에 대한 삭제를 상기 서버에 요청하는 단계를 더 포함할 수 있다.
본발명에 따르면, 분산파일 시스템에서 최적화된 연속 읽기 성능을 보장할 수 있다.
본 발명은 일반적으로 사용되는 분산 파일시스템에 적용될 뿐만 아니라 복수개의 다양한 서버들로 이루어진 대용량 비대칭 분산파일시스템에도 적용 가능하다. 하나의 파일이 최대 고정 길이(예, 64MB)의 청크로 분할되어 비대칭 분산 파일 시스템의 여러 서버에 저장되는 경우에도 최대 읽기 성능을 보장할 수 있다.
또한, 스토리지 디바이스의 특성에 따라 계층적으로 구성한 하이브리드(hybrid) 스토리지에도 각 특성 별로 최적화된 연속 읽기 성능을 보장할 수 있다.
도 1은 본 발명의 일실시예에 따른 읽기 동작을 수행하는 과정을 도시한 도면이다.
도 2a 및 2b는 본 발명의 일실시예에 따른 읽기 동작에 이용되는 클라이언트 문맥 구조체 및 서버 문맥 구조체를 도시한 도면이다.
도 3은 본 발명의 일실시예에 따라 문맥 기반 읽기 동작을 수행하는 서버의 구성을 도시한 블록도이다.
도 4는 본 발명의 일실시예에 따른 문맥 생성 요청 처리 과정을 도시한 흐름도이다.
도 5는 본 발명의 일실시예에 따른 문맥 삭제 요청 처리 과정을 도시한 흐름도이다.
도 6은 본 발명의 일실시예에 따른 문맥 기반 읽기 요청 처리 과정을 도시한 흐름도이다.
도 7은 본 발명의 일실시예에 따른 서버 주도의 미리 읽기 동작을 수행하는 과정을 도시한 도면이다.
도 8a 및 8b는 본 발명의 일실시예에 따른 서버 주도의 미리 읽기 동작 수행에 이용되는 클라이언트 문맥 구조체 및 서버 문맥 구조체를 도시한 도면이다.
도 9는 본 발명의 일실시예에 따른 미리 읽기 처리 과정을 개념적으로 도시한 도면이다.
도 10은 본 발명의 일실시예에 따라 서버 주도의 미리 읽기를 요청하는 클라이언트의 구성을 도시한 블록도이다.
도 11은 본 발명의 일실시예에 따른 서버 주도의 미리 읽기에 이용되는 문맥의 생성 요청 처리 과정을 도시한 흐름도이다.
도 12는 발명의 일실시예에 따른 서버 주도의 미리 읽기에 이용되는 문맥의 변경 요청 처리 과정을 도시한 흐름도이다.
도 13은 발명의 일실시예에 따른 서버 주도의 미리 읽기에 이용되는 문맥의 삭제 요청 처리 과정을 도시한 흐름도이다.
도 14는 응용 프로그램이 연속 읽기를 요청한 경우에 본 발명의 일실시예에 따른 미리 읽기 요청 처리 과정을 도시한 흐름도이다.
도 15는 본 발명의 일실시예에 따라 클라이언트가 미리 읽기를 요청하는 과정을 도시한 흐름도이다.
도 16은 본 발명의 일실시예에 따라 클라이언트가 서버로부터 수신된 미리 읽기 응답을 처리하는 과정을 도시한 흐름도이다.
도 17은 본 발명의 일실시예에 따라 클라이언트가 응용 프로그램의 쓰기 요청을 처리하는 과정을 도시한 흐름도이다.
도 2a 및 2b는 본 발명의 일실시예에 따른 읽기 동작에 이용되는 클라이언트 문맥 구조체 및 서버 문맥 구조체를 도시한 도면이다.
도 3은 본 발명의 일실시예에 따라 문맥 기반 읽기 동작을 수행하는 서버의 구성을 도시한 블록도이다.
도 4는 본 발명의 일실시예에 따른 문맥 생성 요청 처리 과정을 도시한 흐름도이다.
도 5는 본 발명의 일실시예에 따른 문맥 삭제 요청 처리 과정을 도시한 흐름도이다.
도 6은 본 발명의 일실시예에 따른 문맥 기반 읽기 요청 처리 과정을 도시한 흐름도이다.
도 7은 본 발명의 일실시예에 따른 서버 주도의 미리 읽기 동작을 수행하는 과정을 도시한 도면이다.
도 8a 및 8b는 본 발명의 일실시예에 따른 서버 주도의 미리 읽기 동작 수행에 이용되는 클라이언트 문맥 구조체 및 서버 문맥 구조체를 도시한 도면이다.
도 9는 본 발명의 일실시예에 따른 미리 읽기 처리 과정을 개념적으로 도시한 도면이다.
도 10은 본 발명의 일실시예에 따라 서버 주도의 미리 읽기를 요청하는 클라이언트의 구성을 도시한 블록도이다.
도 11은 본 발명의 일실시예에 따른 서버 주도의 미리 읽기에 이용되는 문맥의 생성 요청 처리 과정을 도시한 흐름도이다.
도 12는 발명의 일실시예에 따른 서버 주도의 미리 읽기에 이용되는 문맥의 변경 요청 처리 과정을 도시한 흐름도이다.
도 13은 발명의 일실시예에 따른 서버 주도의 미리 읽기에 이용되는 문맥의 삭제 요청 처리 과정을 도시한 흐름도이다.
도 14는 응용 프로그램이 연속 읽기를 요청한 경우에 본 발명의 일실시예에 따른 미리 읽기 요청 처리 과정을 도시한 흐름도이다.
도 15는 본 발명의 일실시예에 따라 클라이언트가 미리 읽기를 요청하는 과정을 도시한 흐름도이다.
도 16은 본 발명의 일실시예에 따라 클라이언트가 서버로부터 수신된 미리 읽기 응답을 처리하는 과정을 도시한 흐름도이다.
도 17은 본 발명의 일실시예에 따라 클라이언트가 응용 프로그램의 쓰기 요청을 처리하는 과정을 도시한 흐름도이다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 실시예를 가질 수 있는 바, 특정 실시예들을 도면에 예시하고 이를 상세한 설명을 통해 상세히 설명하고자 한다. 그러나, 이는 본 발명을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
본 발명을 설명함에 있어서, 관련된 공지 기술에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략한다.
또한, 본 명세서 및 청구항에서 사용되는 단수 표현은, 달리 언급하지 않는 한 일반적으로 "하나 이상"을 의미하는 것으로 해석되어야 한다.
또한, 본 명세서에서 사용되는 용어들중 "모듈", "부", "인터페이스"등은 일반적으로 컴퓨터 관련 객체를 의미하며, 예를 들어, 하드웨어, 소프트웨어 및 이들의 조합을 의미할 수 있다.
또한, 본 명세서에서 "클라이언트 파일 시스템"을 "클라이언트"로 간략하게 지칭한다.
또한, 본 명세서에서 파일은 파일 전체 또는 하나의 파일을 최대 고정 길이(예, 64MB)로 분할한 청크(chunk)를 통칭하는 것으로 사용된다.
분산 파일시스템에서는 클라이언트와 서버 각각의 지역 파일시스템에서 동시에 미리 읽기가 수행된다. 클라이언트와 서버 각각의 미리 읽기 크기가 동일한 경우에는 서버의 순서바뀜(reorder) 문제를 해결하면 효과적으로 순차적인 읽기가 가능해진다.
본 발명은 순서바뀜 문제를 해결하기 위해 응용 프로그램(또는 하나의 프로세스 혹은 쓰레드)가 연속 읽기를 요청하는 경우에 문맥(context)에 최신 요청 번호를 기재함으로써 서버가 읽기 요청을 순서대로 처리하도록 한다. 즉, 클라이언트가 파일에 대한 문맥 구조체에 해당 문맥에 대한 최신 요청 번호를 유지 및 관리하고 읽기 요청시에 요청 번호를 서버에 함께 전송하도록 한다. 서버는 사용자의 읽기 요청에 포함된 요청 번호와 자신이 최근 처리한 요청 번호를 비교함으로써 해당 요청이 순서 바뀐(reordered) 요청인지 여부를 판단하고 순서 바뀐 요청인 경우에는 해당 읽기 요청에 앞선 요청에 대한 처리가 끝날 때까지 대기시킨 후에 처리한다.
이하, 도 1 내지 도 6을 참조하여, 클라이언트와 서버간 미리 읽기 크기가 동일한 경우에 본 발명의 일실시예에 따라 문맥 기반 연속 읽기를 수행하는 과정을 설명한다.
도 1은 본 발명의 일실시예에 따른 읽기 동작을 수행하는 과정을 도시한 도면이다.
우선, 클라이언트(클라이언트 파일 시스템)는 파일(또는 청크)에 접근하기 위해 서버측에 해당 파일에 대한 문맥 생성 요청을 전송한다(S110).
클라이언트로부터 문맥 생성 요청이 수신되면, 서버는 해당 파일에 문맥 식별자를 할당하고 상기 할당된 문맥 식별자 및 상기 파일에 대한 파일 디스크립터(file descriptor: fd)를 포함하는 서버 문맥 구조체를 생성하고, 문맥 식별자를 클라이언트에 전송한다(S120). 서버의 문맥 생성 과정에 대하여는 도 4를 참조하여 후술한다.
이후, 클라이언트는 서버로부터 수신된 해당 파일에 대한 문맥 식별자를 이용하여 복수의 읽기 요청을 전송할 수 있다(S130, S140). 이 때, 클라이언트는 해당 파일에 연관된 문맥 구조체에 최신 문맥 요청 일련 번호를 유지하고, 읽기 요청시에 문맥 식별자, 요청된 읽기 위치를 나타내는 오프셋 및 읽기 크기 정보와 함께 최신 문맥 요청 일련 번호를 전송한다. 서버는 읽기 요청에 포함된 최신 문맥 요청 일련 번호를 검사하여 해당 읽기 요청이 순서바뀐 요청인 경우에 앞선 읽기 요청이 완료될 때까지 기다린 후에 처리함으로써 읽기 요청이 순차적으로 처리됨을 보장한다. 읽기 요청 처리 과정은 도 6을 참조하여 좀더 상세히 설명하겠다.
한편, 해당 파일에 대한 접근이 더 이상 없을 경우에, 클라이언트는 서버에 상기 파일에 대한 문맥 삭제 요청을 전송할 수 있다(S150). 문맥 삭제 요청을 수신한 서버는 삭제 요청된 문맥 구조체를 삭제할 것이다. 문맥 삭제 과정에 대해서는 도 5를 참조하여 후술한다.
도 2a는 본 발명의 일실시예에 따라 클라이언트에서 생성 및 유지되는 클라이언트 문맥 구조체를 도시한 도면이고, 도 2b는 서버에서 생성 및 유지되는 서버 문맥 구조체를 도시한 도면이다. 도시된 바와 같이, 클라이언트 문맥 구조체(200a)는 파일 시스템 내 파일 객체에 대응하여 생성 및 유지되며, 문맥 잠금(201a), 문맥 식별자(202a) 및 최신 문맥 요청 일련 번호(203a)를 포함할 수 있다.
문맥 잠금(201a)은 해당 파일에 대한 동시 요청을 제어하기 위한 항목으로서, 특정 파일에 대한 읽기 요청을 하고자 할 경우에 해당 파일에 대한 문맥 구조체의 잠금을 획득함으로써 해당 파일에 대한 동시 요청을 방지할 수 있다.
문맥 식별자(202a)는 파일(또는 청크)에 대해 서버에 의해 할당된 식별자로서, 이후 해당 파일에 대한 읽기 요청에 포함될 것이다.
최신 문맥 요청 일련 번호(203a)는 문맥 구조체 생성시에 '0'으로 설정된 후에 초기화되며, 상기 문맥에 연관된 파일에 대한 요청이 생성될 때마다 '1' 씩 증가된다. 증가된 일련 번호는 문맥 식별자와 함께 읽기 요청에 포함될 것이다.
한편, 클라이어트의 문맥 생성 요청에 따라 서버에서 생성 및 유지되는 서버의 문맥 구조체(200b)는 클라이언트의 문맥 구조체(200a)와 유사하게 문맥 잠금(201b), 문맥 식별자(202b) 및 최근 처리된 요청 번호를 나타내는 최신 문맥 처리 번호(203b)를 포함하고, 이에 부가하여 문맥에 대한 파일객체 파일 디스크립터(file descriptor: fd)를 더 포함할 수 있다.
도 3은 본 발명의 일실시예에 따라 문맥 기반 읽기 동작을 수행하는 서버의 구성을 도시한 도면이다.
도 3에 도시된 바와 같이, 서버는 요청큐(310), 요청 처리부(320), 문맥 관리부(330) 및 데이터 저장소(또는 지역 파일 시스템, 340)을 포함할 수 있다.
요청큐(310)는 클라이언트로부터 수신되는 요청들을 순차적으로 처리하기 위해 대기시키는 요청 저장소이다. 일실시예에서, 클라이언트로부터 수신되는 요청은, 문맥 생성 요청, 문맥 읽기 요청 및 문맥 삭제 요청을 포함할 수 있다.
요청 처리부(320)는 요청큐(310)로부터 요청을 순차적으로 판독하여 처리하고 클라이언트에 처리 결과를 회신한다.
일실시예에서, 요청큐(310)로부터 판독된 요청이 문맥 생성 요청인 경우, 요청 처리부(320)는 문맥 생성 요청된 파일에 대한 문맥 구조체를 생성하여 문맥 관리부(330)에 등록한다. 요청처리부(320)는 생성된 문맥 구조체에 해당 파일에 할당된 문맥 식별자를 저장하고 최신 문맥 요청 일련번호는 0으로 초기화한다.
일실시예에서, 요청큐(320)로부터 판독된 요청이 문맥 읽기 요청인 경우, 요청 처리부(320)는 읽기 요청된 파일에 대한 문맥 구조체를 문맥 관리부(330)로부터 판독한다. 요청 처리부(320)는 읽기 요청에 포함된 최신 문맥 요청 일련번호와 상기 문맥 구조체에 저장된 최신 문맥 처리 번호 + 1의 값이 동일한지 검사하고, 동일하지 않은 경우 해당 요청이 순서바뀐 요청인 것으로 인식하고 해당 읽기 요청을 요청 큐(310)에 다시 저장하여 대기시킨다. 반면, 읽기 요청에 포함된 최신 문맥 요청 일련번호와 상기 문맥 구조체에 저장된 최신 문맥 처리번호 + 1의 값이 동일한 경우에, 읽기 요청된 파일 데이터를 데이터 저장소(350)로부터 판독하여 클라이언트에 전송하고, 문맥 구조체의 최신 문맥 처리 번호를 1 증가시킨다.
일실시예에서, 요청큐(320)로부터 판독된 요청이 문맥 삭제 요청인 경우, 요청 처리부(320)는 해당 문맥에 대한 문맥 구조체를 문맥 관리부(340)에서 삭제한다.
문맥 관리부(340)는 클라이언트의 요청에 따라 생성된 문맥 구조체를 저장 및 관리한다.
도 4는 본 발명의 일실시예에 따른 문맥 생성 요청 처리 과정을 도시한 흐름도이다.
먼저, 클라이언트 파일시스템은 응용 프로그램이 요청한 파일에 대한 문맥 구조체를 생성하고, 문맥 구조체의 최신 문맥 요청 일련번호를 0으로 초기화한 후에, 서버에 해당 파일에 대한 문맥 생성을 요청한다 (S401 내지 S403).
클라이언트로부터 수신되는 요청들은 순차적으로 서버의 요청 큐에 저장되고, 서버는 요청 큐에서 문맥 생성 요청을 판독한다(S410).
서버는 문맥 생성 요청에 응답하여 해당 파일에 새로운 문맥 번호를 할당하여 서버 문맥 구조체를 생성하고 이를 초기화하여 문맥 관리부에 등록한다 (S411 ~ S414). 문맥 구조체의 생성 및 등록이 완료되면, 문맥 식별자를 포함하는 문맥 생성 결과를 클라이언트 파일시스템에게 전송한다(S415).
문맥 생성 결과를 수신한 클라이언트 파일시스템은 자신의 문맥 구조체에 서버로부터 수신된 문맥 식별자를 저장한다(S420).
도 5는 본 발명의 일실시예에 따른 문맥 삭제 요청 처리 과정을 도시한 흐름도이다.
클라이언트 파일 시스템은 파일에 대해 더 이상의 접근이 발생하지 않을 경우에 해당 파일에 대한 문맥 삭제를 서버에 요청할 수 있다. 문맥 삭제 요청 처리 흐름은 도 4에 도시된 문맥 생성 과정과 유사하게 처리되며, 클라이언트와 서버 각각이 자신이 유지하는 문맥 구조체를 해제한다. 다만, 문맥 삭제 요청에 포함되는 최신 문맥 요청 일련 번호가 서버의 문맥 구조체의 최신 문맥 처리번호 + 1 값과 상이한 경우에, 앞선 요청이 처리될 때까지 대기시키기 위해 삭제 요청을 요청 큐에 다시 저장할 수 있다.
먼저, 클라이언트 파일시스템은 문맥 삭제를 요청하고자 하는 문맥 구조체의 잠금을 획득하고 문맥 삭제를 서버에 요청한다 (S501, S502).
클라이언트로부터 수신된 문맥 삭제 요청은 서버의 요청 큐에 저장되고, 서버는 요청 큐에서 문맥 삭제 요청을 판독한다(S510, S511).
서버는 삭제 대상 문맥 구조체를 문맥 관리부로부터 판독하여 문맥 구조체의 잠금을 획득하고, 삭제 요청에 포함된 최신 문맥 요청 일련번호와 서버 문맥 구조에 저장된 최신 문맥 처리번호 +1의 값이 동일한지 판단한다(S513~S530).
동일한 경우에 문맥 구조체의 잠금을 해제하고, 해당 문맥 구조체를 문맥 관리부에서 제거하며, 문맥의 fd를 클로즈(close)하고 문맥의 메모리를 해제한 후, 수행 결과를 클라이언트에 전송한다(S540 ~ S543).
반면에, 동일하지 않은 경우에는, 삭제 요청이 순서바뀐 요청인 것으로 인식하여, 해당 문맥 구조체에 대한 잠금을 해제한 후에, 삭제 요청보다 앞선 요청이 처리 완료될 때까지 대기시키기 위해 삭제 요청을 다시 요청 큐에 저장한다. (S530, S510)
한편, 삭제 요청에 대한 수행 결과를 수신한 클라이언트는 이에 대응하는 클라이언트 문맥 구조체의 잠금을 해제하고 해당 문맥 구조체를 제거한다(S550, S551).
도 6은 본 발명의 일실시예에 따른 문맥 기반 읽기 요청 처리 과정을 도시한 흐름도이다.
사용자(또는 응용 프로그램)의 파일에 대한 읽기 요청시에, 파일시스템에 읽기 요청된 파일에 대한 문맥 구조체가 존재하는지 검사한다(S610). 문맥 구조체가 존재하지 않을 경우에는 서버측에 문맥 생성을 요청하여 도 4에 도시된 문맥 생성 요청 처리 과정이 선행될 것이다(S611).
클라이언트는 해당 문맥 구조체에 대한 잠금을 획득하고, 문맥 구조체에 저장된 최신 문맥 요청 일련 번호를 "1" 증가시킨 후에, 문맥 구조체에 대한 잠금 해제후에 읽기 요청을 서버에 전송한다(S620 ~ S624).
일실시예에서, 읽기 요청에는 문맥 식별자, 최신 문맥 요청 일련번호, 읽기 요청된 위치를 나타내는 오프셋, 읽기 크기 정보 및 데이터가 저장될 버퍼 주소가 포함될 수 있다
문맥 기반 읽기 요청을 수신한 서버는 요청 큐에서 해당 요청을 가져온 후에 문맥 관리부로부터 해당 문맥 구조체를 판독하고 잠금 획득한다(S630~S633).
연속 읽기 요청의 순서 바뀜을 방지하기 위해, 읽기 요청에 포함된 최신 문맥 요청 일련번호와 서버의 문맥 구조체의 최신 문맥 처리번호 + 1이 동일한지 검사한다 (S640).
동일하지 않다면, 해당 요청이 순서화되지 않은 요청인 것으로 인식하고, 문맥 구조체 잠금을 해제한 후에 해당 읽기 요청을 요청 큐에 다시 삽입한다 (S650, S630).
반면, 읽기 요청에 포함된 최신 문맥 요청 일련 번호와 서버 문맥 구조체의 최신 문맥 처리 번호 +1 이 동일할 경우, 즉 순서화된 요청인 것으로 확인된 때에는 해당 읽기 요청을 처리하고 서버의 최신 문맥 처리 번호를 "1" 증가시키고 클라이언트에게 결과를 회신한다(S660 ~ S663).
읽기 요청에 대한 결과를 수신한 클라이언트는 상기 결과를 응용 프로그램에 전달할 것이다(S670).
이제까지 도 1 내지 도 6을 참조하여 설명한 실시예는 분산 파일시스템에서 클라이언트와 서버의 파일시스템의 미리 읽기 크기가 동일한 경우에 순서 바뀜 문제를 해결하기 위한 것이다.
그러나, 분산 파일시스템에서 클라이언트와 서버의 미리 읽기 크기가 불일치하는 경우가 발생한다. 예를 들어, 서버는 다양한 형태(즉, 미리 읽기 정책이 다른)의 복수개의 블록 디바이스를 이용하여 서비스할 수 있다. 또한, 비대칭 분산 파일시스템은 하나의 파일을 고정 크기(예, 64MB)로 나누어 여러 서버의 스토리지 디바이스에 저장 및 관리할 수 있다. 이러한 경우에 하나의 고정된 클라이언트의 미리 읽기 정책은 다양한 서버의 스토리지에 대한 미리 읽기 정책들과 불일치하는 경우가 흔히 발생할 것이다.
본 발명은, 이러한 분산 파일시스템에서의 클라이언트와 서버간의 미리 읽기 정책 불일치를 해결하기 위해, 클라이언트는 미리 읽기를 수행하지 않는 대신에 서버가 주도적으로 미리 읽기를 수행하는 방안을 제시한다.
도 7은 본 발명의 일실시예에 따른 서버 주도의 미리 읽기 동작을 수행하는 과정을 도시한 도면이다.
응용 프로그램이 특정 파일(또는 청크)에 대한 읽기를 요청할 경우에, 클라이언트는 서버에 해당 파일(또는 청크)에 대한 문맥 생성 요청을 전송한다(S710). 이때, 문맥 생성 요청은 읽기 대상 파일에 대한 오프셋 및 미리 읽기 크기 정보를 포함할 수 있다.
이에 응답하여, 서버는 상기 파일에 대한 문맥 식별자 및 fd를 포함하는 문맥 구조체를 생성하고 해당 파일로부터 최대 미리 읽기 크기만큼 미리 읽기를 수행하여 클라이언트에 전송한다. 서버로부터 수신된 데이터는 클라이언트의 미리 읽기 버퍼에 저장된다.
응용 프로그램에 의해 미리 읽기 버퍼가 일정량 소모될 경우에, 클라이언트는 서버에 확인(ack)을 전송함으로써 미리 읽기를 요청할 수 있다(S720, S730). 이에 응답하여, 서버는 미리 읽기 윈도우 크기를 늘리고 미리 읽기를 수행함과 동시에 이미 읽은 데이터를 클라이언트에 전송할 것이다.
이후, 클라이언트가 해당 파일에 대한 더 이상 문맥 유지가 필요하지 않다고 판단하면, 서버에 문맥 삭제 요청을 전송할 수 있다(S740).
즉, 본 발명은 네트워크 프로토콜 수준에서 서버가 미리 읽기 동작을 수행하도록 하여 미리 읽은 데이터를 클라이언트의 미리 읽기 버퍼(또는 파일시스템 캐시)에 저장하도록 한다. 이를 위해, 클라이언트는 서버의 최대 미리 읽기 크기의 2배에 해당하는 미리 읽기 버퍼를 유지하고, 응용 프로그램에 의해서 미리 읽기 버퍼의 1/2이 소모될 경우에 미리 읽기 요청을 서버에 전송한다. 서버는 미리 읽기 윈도우 크기를 확대하여 미리 읽기를 비동기로 수행함으로써 연속 읽기 성능을 극대화한다.
도 8a 및 8b는 본 발명의 일실시예에 따른 서버 주도의 미리 읽기 동작 수행에 이용되는 클라이언트 문맥 구조체 및 서버 문맥 구조체를 도시한 도면이다.
도 8a에 도시된 바와 같이, 클라이언트 문맥 구조체는, 서버로부터 수신된 문맥 식별자(ra_id), 문맥 잠금(ra_mutex), 서버의 최대 미리 읽기 크기(max_ra_size), 문맥 버전 번호(ra_ver), 최신 문맥 요청 일련 번호(ra_seq), 미리 읽기 시작 위치(ra_start), 미리 읽기 요청 크기(ra_size) 및 비동기 미리 읽기 요청 크기 정보(ra_async_size)를 포함할 수 있다.
일실시예에서, 비동기 미리 읽기 요청 크기(ra_async_size)는 지역 파일시스템의 미리 읽기와 유사하게 응용 프로그램이 연속 읽기가 감지될 때 마다, 서버의 최대 미리 읽기 크기까지 2배까지 늘릴 수 있다.
도 8b에 도시된 바와 같이, 서버 문맥 구조체는, 문맥 식별자(ra_id) 및 파일 디스크립터(fd)에 부가하여, 상기 문맥에 대한 요청 처리의 동시성 제어를 위한 문맥 잠금(ra_mutex), 서버의 최대 미리 읽기 크기(max_ra_size), 문맥 버전 번호(ra_ver), 문맥에 대해 최근 처리된 요청 번호를 나타내는 최신 문맥 처리 번호(ra_seq), 미리 읽기 크기(ra_size) 및 메모리 버퍼 주소(buf)를 포함할 수 있다.
도 9는 본 발명의 일실시예에 따른 네트워크 프로토콜 수준의 서버 주도 미리 읽기 과정을 개념적으로 도시한 도면이다.
클라이언트는 특정 파일에 대한 미리 읽기를 지원하기 위해 서버로부터 획득한 해당 파일에 대한 최대 미리 읽기 크기 X 2의 미리 읽기 버퍼 (또는 파일시스템 캐시, 910)을 구비하고, 응용 프로그램의 연속 읽기 요청에 대응하여 서버의 비동기 미리 읽기를 통해 읽은 데이터를 상기 버퍼(910)에 저장할 수 있다.
응용 프로그램의 연속 읽기를 통해 미리 읽기 버퍼 (910)의 1/2이 소모되면, 즉, 응용 프로그램에 의해 아직 판독되지 않은 미리 읽기 버퍼의 잔여 데이터 크기가 비동기 미리 읽기 요청 크기(async_size)보다 작아지면, 이를 인지하여 서버에게 ACKnowledge를 전송함으로써 async_size만큼 미리 읽기를 요청한다.
ACK를 수신한 서버는 해당 문맥에 대해 미리 읽기 윈도우 크기를 async_size 만큼 늘리고, 그 크기만큼 디스크 읽기와 네트워크 전송을 계속해서 수행한다.
이를 수행하는 서버의 지역 파일시스템에서는 연속 읽기를 수행하면 해당 요청에 대한 읽기뿐만 아니라 그 다음 위치에 대해 비동기식으로 미리 읽기를 수행한다. 서버의 이러한 미리 읽기 수행 방식은 디스크 읽기와 네트워크 전송을 인터리빙 방식으로 수행함으로써 효과적인 연속 읽기를 수행할 수 있다.
도 10은 본 발명의 일실시예에 따른 서버 주도의 미리 읽기를 요청하는 클라이언트의 구성을 도시한 블록도이다.
일실시예에서, 클라이언트는 미리 읽기 문맥 관리부(1010), 미리 읽기 버퍼(1020), 문맥 요청 제어부(1030) 및 문맥 요청큐(1040)를 포함할 수 있다.
문맥 관리부(1010)는 서버의 미리 읽기를 위한 클라이언트 문맥 구조체를 생성 및 관리한다. 클라이언트 문맥 구조체에 대해서는 도 8a를 참조하여 이미 설명한 바와 같다.
미리 읽기 버퍼(1020)는 서버로부터 미리 읽기를 통해 읽어 들인 데이터를 유지 및 관리하는 메모리 버퍼이다.
일실시예에서, 미리 읽기 버퍼(1020)의 크기는 서버로부터 수신된 최대 미리 읽기 크기의 2배이다.
일실시예에서, 미리 읽기 버퍼(1020)의 데이터 구조(1021)는 순환 형태로 사용하기 위해서 버퍼(1020)에 실제 미리 읽은 데이터가 시작하는 주소(rbuf_offset), 미리 읽기 버퍼 크기 (rbuf_size), 동시성 제어를 위한 미리 읽기 버퍼 잠금 (rbuf_mutex) 필드를 포함할 수 있다. 데이터 시작 주소(rbuf_offset)는 버퍼의 순환 사용을 위해 rbuf_offset = (rbuf_offset + size) % (2 * max_readahead_size) 에 따라 산출된다.
또한, 미리 읽기 버퍼(1020의 데이터 구조(1021)는 미리 읽기를 수행한 후에 서버로부터 수신된 에러(error) 값을 저장하기 위한 에러 필드를 더 포함할 수 있다.
문맥 요청 제어부(1030)는 응용 프로그램으로부터 연속 읽기 요청된 데이터가 미리 읽기 버퍼에 없을 경우 (미리 읽기를 수행하지 않았거나 미리 읽기 요청을 하였으나 버퍼에 없을 경우)에 미리 읽기 요청을 생성하여 요청 큐(1040)에 삽입하고 미리 읽기 버퍼에 데이터가 저장될 때까지 기다린다.
일실시예에서, 요청 큐(1040)의 데이터 구조(1041)의 'empty_wakeup_all' 필드는 요청 큐(104)에 대기중인 모든 요청들의 처리가 완료된 후에 웨이크업 대상 프로세스 또는 스레드를 등록하기 위한 필드이고, 'req_queue_mutex'는 요청큐의 동시성 제어를 위한 필드이다.
도 11은 본 발명의 일실시예에 따른 서버 주도의 미리 읽기를 위한 문맥 생성 요청 처리 흐름도이다. 전술한 도 4의 문맥 생성 처리 흐름도와 유사하나, 클라이언트의 특정 파일에 대한 문맥 생성 요청에 따라 생성되는 문맥 구조체에 미리 읽기 윈도우(readahead window) 정보가 추가적으로 포함되며, 해당 파일로부터 미리 읽기 윈도우의 최대 읽기 크기만큼 데이터를 판독하여 클라이언트에 미리 전송한다는데 그 특징이 있다. 또한, 클라이언트는 서버로부터 해당 파일의 최대 미리 읽기 크기 정보를 획득하여 서버의 최대 미리 읽기 크기보다 2배의 미리 읽기 버퍼를 유지하고, 미리 읽기 문맥 구조체 정보를 유지 및 관리한다.
구체적으로 살펴보면, 클라이언트는 사용자(또는 응용 프로그램)이 요청한 파일에 대한 문맥 구조체를 생성하고, 문맥 구조체의 최신 문맥 요청 일련 번호를 '0'으로 초기화한 후에, 서버에 해당 파일에 대한 문맥 생성을 요청한다 (S1101 내지 S1103). 이 때, 문맥 생성 요청은, 문맥 생성 대상 파일 식별자와 함께, 오프셋 및 미리 읽기 크기 정보를 포함할 수 있다.
클라이언트로부터 수신되는 요청들은 순차적으로 서버의 요청 큐에 저장되고, 서버는 요청 큐로부터 문맥 생성 요청을 판독한다(S1110).
서버는 문맥 생성 요청에 응답하여 해당 파일에 대한 새로운 문맥 번호를 할당한 후 서버 문맥 구조체를 생성하고, 해당 문맥 구조체에 포함되는 파일 디스크립터(fd), 미리 읽기 크기 및 최신 문맥 처리 번호를 설정한 후에 해당 문맥 구조체 정보를 클라이언트에 전송한다(S1111 ~ S1130).
구체적으로, 해당 파일명을 오픈하고 파일 디스크립터(fd)를 문맥 구조체의 fd 필드에 설정하고(S1112), fd의 읽기 위치를 오프셋만큼 이동시키고(S1113), 문맥 구조의 미리 읽기 크기(ra_size)를 문맥 생성 요청에 포함된 미리 읽기 크기 정보로 설정하고(S1114), 최신 문맥 처리번호를 0으로 설정하고(S1115), 해당 fd에 대한 최대 미리 읽기 크기를 가져온다(S1116).
이와 같이 생성된 문맥 정보가 클라이언트에 전송되면(S1130), 클라이언트는 수신된 문맥정보를 단계(S1101)에서 생성된 문맥 구조체에 저장하여 문맥 관리부에 등록한다(S1150-S1151).
한편, 서버는 상기 생성된 문맥 구조체의 잠금을 획득하고(S1120), 문맥 구조에 설정된 미리 읽기 크기(ra_size)만큼 해당 파일로부터 데이터를 판독하여 클라이언트에 전송한다(S1121). 다음, 문맥 구조의 미리 읽기 크기(ra_size)를 0으로 설정하고(S1122), 잠금을 해제한다(S1123).
도 12는 발명의 일실시예에 따른 서버 주도의 미리 읽기를 위한 문맥에 대한 변경 요청 처리 과정을 도시한 흐름도이다.
문맥 변경 과정은 응용 프로그램이 랜덤 읽기를 요청한 경우에 발생할 수 있다. 문맥 변경 과정은 11에 도시된 문맥 생성 처리 과정과 유사하나, 클라이언트가 문맥 구조체의 버전 번호를 증가시킨다는 점에서 차이점이 있다. 문맥 변경 요청을 수신한 서버는 문맥 구조체의 fd의 읽기 위치를 오프셋만큼 변경하며, 문맥 변경 후에 클라이언트에게 변경된 문맥 정보를 전송함과 동시에 변경된 문맥에 대해 ra_size만큼 미리 읽기를 수행하여 클라이언트에게 전송한다.
구체적으로, 클라이언트가 문맥 구조에 문맥 변경을 표현하기 위해 버전 번호를 증가시킨 후에(S1201), 서버에 문맥 변경 요청을 전송한다(S1202). 이 때, 문맥 변경 요청은 변경 대상 문맥 식별자, 문맥 버전번호, 오프셋 및 미리 읽기 크기 정보를 포함할 수 있다.
클라이언트로부터 수신되는 요청들은 순차적으로 서버의 요청 큐에 저장되고, 서버는 요청 큐로부터 문맥 변경 요청을 판독한다(S1210).
서버는 문맥 관리부로부터 해당 문맥 구조체를 판독하고(S1211), 문맥 구조체의 잠금을 획득한다(S1212). 다음, 해당 파일에 대한 파일 디스크립터(fd)의 미리 읽기 위치를 오프셋만큼 이동시키고(S1213), 문맥 구조체의 미리 읽기 크기(ra_size)를 문맥 변경 요청에 포함된 미리 읽기 크기 정보로 설정하고(S1214), 문맥 구조체의 버전 번호를 클라이언트로부터 수신된 버전 번호로 설정한 후에(S1215), 문맥 구조체의 잠금을 해제한다(S1216).
이와 같이 변경된 문맥 정보가 클라이언트에 전송되면, 클라이언트는 수신된 문맥정보에 기반하여 이에 대응하는 문맥 구조체의 정보를 변경한다(S1240). 한편, 서버는 상기 변경된 문맥 구조체의 잠금을 획득하고(S1220), 문맥 구조에 설정된 미리 읽기 크기(ra_size) 만큼 해당 파일로부터 데이터를 판독하여 클라이언트에 전송한다(S1221). 다음, 문맥 구조의 미리 읽기 크기(ra_size)를 0으로 설정하고(S1222), 잠금을 해제한다(S1223).
도 13은 발명의 일실시예에 따른 서버 주도의 미리 읽기를 위한 문맥에 대한 삭제 요청 처리 과정을 도시한 흐름도이다.
클라이언트는 더 이상 미리 읽기를 위한 문맥 유지가 필요하지 않다고 판단되면 서버에 해당 문맥에 대한 삭제를 요청할 수 있다.
구체적으로, 클라이언트는 삭제하고자 하는 문맥 구조의 최신 문맥 요청 일련 번호를 1 증가시키고(S1301), 문맥 삭제를 서버에 요청한다 (S1302). 이 때, 문맥 삭제 요청은 삭제 대상 문맥 식별자, 문맥 버전번호 및 최신 문맥 요청 일련 번호를 포함할 수 있다.
클라이언트로부터 수신된 문맥 삭제 요청은 서버의 요청 큐에 저장되고(S1310), 서버는 요청 큐에서 문맥 삭제 요청을 판독한다(S1311).
서버는 삭제 대상 문맥 구조체를 문맥 관리부로부터 판독하여 문맥 구조체의 잠금을 획득하고, 삭제 요청에 포함된 최신 문맥 요청 일련 번호가 서버 문맥 구조에 저장된 (최신 문맥 처리번호 + 1)와 동일한지 판단한다(S1311~S1313).
최신 문맥 요청 일련 번호와 서버 문맥 구조체에 저장된 최신 문맥 처리번호가 동일하지 않다면, 해당 요청이 순서바뀐 요청인 것으로 인식하여, 해당 문맥 구조체에 대한 잠금을 해제한 후에, 삭제 요청보다 앞선 요청이 처리 완료될 때까지 대기하기 위해 해당 삭제 요청은 다시 요청 큐에 저장된다. (S1330, S1310)
한편, 동일한 경우에, 삭제 요청에 포함된 문맥 버전 번호와 서버 문맥 구조에 저장된 버전 번호가 동일한지 문맥 구조체의 잠금을 해제하고, 해당 문맥 구조체를 문맥 관리부에서 제거하며, 수행 결과를 클라이언트에 전송한다(S1350 ~ S1352).
반면에, 삭제 요청에 포함된 문맥 버전 번호와 서버 문맥 구조에 저장된 버전 번호가 동일한지 않은 경우에는 단계(S1352)로 진행할 것이다.
도 14는 응용 프로그램이 연속 읽기를 요청한 경우에 본 발명의 일실시예에 따른 비동기 미리 읽기 요청 처리 과정을 도시한 흐름도이다.
단계(S1401)에서 미리 읽기 버퍼내 응용 프로그램에 의해 아직 판독되지 않은 잔여 데이터 크기를 검사한다(S1401). 잔여 데이터 크기가 클라이언트의 문맥 구조체에 설정된 비동기 요청 크기(ra_async_size)보다 작은 경우에, 대응 문맥 구조체의 최신 문맥 요청 일련 번호를 1 증가시키고(S1410), 서버에 미리 읽기를 요청하는 ack를 전송한다(S1411). 이때, 미리 읽기 요청은, 문맥 식별자, 문맥 버전 번호, 최신 문맥 요청 일련 번호 및 비동기 요청 크기 정보를 포함할 수 있다.
또한, 클라이어트는 필요시 클라이언트의 비동기 요청 크기(ra_async_size)를 갱신할 수 있다. ra_async_size와 최대 미리 읽기 크기(max_ra_size)/16 값을 비교하여(S1461), ra_async_size가 작은 경우에 ra_async_size*4를 하고(S1462), 그렇지 않은 경우에는 ra_async_size*2를 하여(S1463), 이들 중에서 작은 값으로 ra_async_size를 갱신할 수 있다(S1470).
한편, 비동기 미리 읽기 요청은 서버의 요청 큐에 저장되고(S1420), 서버는 이를 판독한다(S1421).
서버는 문맥 관리부로부터 해당 요청에 포함된 문맥 식별자에 대응하는 문맥 구조체를 판독하여 잠금을 획득한다(S1422, S1423)
서버는 비동기 미리 읽기 요청에 포함된 최신 문맥 요청 일련 번호와 상기 판독된 문맥 구조체의 최신 문맥 처리 번호 + 1을 비교하고(S1424), 이들 값이 동일하지 않은 경우에는 순서 바뀐 요청으로 인식하여 문맥 구조체의 잠금을 획득하고(S1430), 해당 요청을 요청 큐에 다시 삽입한다(S1420).
반면, 최신 문맥 요청 일련번호와 상기 판독된 문맥 구조체의 최신 문맥 처리 번호 + 1의 값이 동일한 경우에, 버전 번호를 또한 비교하고(S1440), 버전 번호가 동일한 경우에 문맥 구조체의 최신 문맥 처리 번호를 1 증가시키고(S1441), 문맥 구조체의 ra_size를 요청 받은 ra_async_size로 설정하고 문맥 구조체의 ra_ _size만큼 문맥 구조체의 fd를 통해 데이터를 판독하여 미리 읽기 버퍼에 저장한다(S1442). 다음, 문맥 구조체의 ra_size를 다시 0으로 설정하고(S1443), 문맥 구조체의 잠금을 해제한 후에(S1444), 상기 미리 읽기 버퍼에 저장된 데이터를 포함하는 응답 메시지를 클라이언트에게 전송한다(S1445).
도 15는 본 발명의 일실시예에 따라 클라이어트가 서버 주도의 비동기 미리 읽기를 통해 응용 프로그램의 읽기 요청을 처리하는 과정을 도시한 흐름도이다.
먼저, 응용 프로그램으로부터 읽기 요청을 수신한 클라이언트 파일 시스템은 읽기 요청된 파일에 대한 문맥 구조체가 있는지 검사한다(S1501). 해당 문맥 구조체가 없다면 도 11에 도시된 바에 따라 서버에 문맥 생성을 요청하여 문맥 구조체를 생성하고 초기화한다(S1502).
한편, 해당 문맥 구조체가 존재하는 경우, 문맥 구조체에 대한 잠금을 획득하고(S1503), 문맥 구조체에 저장된 값을 검사하여 해당 문맥 구조체가 초기화된 상태인지 판단한다(S1504). 초기화 상태인 경우에 서버에 문맥 생성 요청을 수행한다(S1505).
반면, 해당 문맥 구조체에 문맥 정보가 기저장되어 있는 경우에, 클라이언트는 상기 문맥 구조체에 포함된 미리 읽기 시작위치(ra_start)와 읽기 요청에 포함된 오프셋을 비교하여 연속 읽기 요청인지 랜덤 읽기 요청이지를 판단한다(S1510).
미리 읽기 시작위치(ra_start)와 읽기 요청의 오프셋이 동일한 경우에, 연속 읽기 요청으로 인식하여, 클라이언트는 서버에 비동기 미리 읽기를 요청한다(S1511). 다음, 문맥 구조체의 잠금을 해제하고(S1512), 미리 읽기 버퍼의 잠금(rbuf_mutex)을 획득한다(S1513).
클라이언트는 읽기 요청된 데이터가 미리 읽기 버퍼에 존재하는지 판단한다(S1514).
미리 읽기 버퍼에 존재하는 경우에, 해당 데이터를 사용자 버퍼에 복사하고 미리 읽기 버퍼의 rbuf_offset과 rbuf_size를 갱신한다(S1540~S1544 및 S1550~S1551). 여기서, 미리 읽기 버퍼의 rbuf_offset과 rbuf_size 갱신은 순환 방식의 버퍼로 사용하기 위함이다.
읽기 요청된 데이터가 미리 읽기 버퍼에 아직 없다면, 미리 읽기 요청을 생성하여 미리 읽기 요청 큐에 삽입하고 대기한다 (S1515 내지 S1519).
한편, 미리 읽기 시작위치(ra_start)와 읽기 요청의 오프셋이 상이할 경우에, 랜덤 읽기가 발생한 것으로 인식하여 이전의 미리 읽기 요청이 모두 완료할 때까지 기다렸다가 서버에 문맥 변경을 요청한다(S1520~S1525).
구체적으로, 미리 읽기 요청큐의 잠금(req_queue_mutex)을 획득한 후에(S1520), 미리 읽기 요청 큐가 비워있는지 여부를 판단한다(S1521). 미리 읽기 요청큐가 비워있다면, 이전의 미리 읽기 요청이 모두 완료된 것으로 인식하여 미리 읽기 요청큐의 잠금(req_queue_mutex)을 해제하고(S1530), 서버에 문맥 변경을 요청할 수 있다(S1525).
그러나, 미리 읽기 요청 큐가 비어있지 않으면, 이들의 수행이 끝날 때까지 기다려야 하므로, 요청 큐의 empty_wakeup_all 필드에 문맥 변경 요청을 등록하고(S1522), 미리 읽기 요청큐의 잠금(req_queue_mutex)을 해제하고(S1523), 대기하다가(S1524), 앞선 미리 읽기 요청이 모두 처리된 후에 서버에 문맥 변경을 요청할 것이다(S1526). 이후, 변경된 문맥 정보를 이용하여 비동기식 미리 읽기 요청을 수행할 것이다(S1511).
도16은 본 발명의 일실시예에 따라 서버로부터 수신된 미리 읽기 응답 처리에 대한 흐름도이다.
서버로부터 미리 읽기에 대한 응답이 수신되는 경우(S1601), 상기 응답에 수신된 미리 읽기 식별자(ra_id)에 해당하는 문맥 구조체를 미리 읽기 문맥 관리부로부터 가져와서, 문맥 구조체의 잠금을 획득한다(S1611, S1612).
응답에 포함된 문맥 버전 번호(ra_ver)와 문맥 구조체의 버전 번호(w.ra_ver)를 비교하고(S1620), 상이하면 서버로부터 다른 응답 메시지가 수신될 때까지 다시 대기한다(S1601).
문맥 버전 번호가 동일할 경우에는 미리 읽기 버퍼에 해당 데이터를 기록한다. 미리 읽기 버퍼에 데이터를 기록하는 방식은, 순환 버퍼에 데이터를 삽입하는 방식이다 (S1630, S1640, S1650, S1651, S1660, S1661, S1662, S1663).
미리 읽기 버퍼에 데이터 삽입을 완료한 후에 미리 읽기 요청 큐에 요청 결과를 기다리는 요청을 찾아 요청 큐에서 제거하고 해당 요청의 완료를 기다리는 요청을 깨운다 (S1664). 요청 큐에서 요청이 제거되어 요청큐가 공백으로 되면 empty_wakeup_all에 등록된 모든 프로세스 및 쓰레드를 깨운다(S1670, S1671).
한편, 미리 읽기 버퍼를 파일시스템 페이지 캐시가 아닌 독립적인 버퍼로 구현할 경우에, 일관성 문제가 발생하므로 이에 대한 처리가 필요하다. 이러한 문제를 해결하기 위해 본 발명의 일실시예에 따라 사용자의 쓰기 요청을 처리하는 과정을 도시한 흐름도가 도 17에 도시되어 있다.
응용프로그램의 쓰기 요청 영역이 미리 읽기 윈도우 영역 내에 있으면 미리 읽기 버퍼를 무효화시켜야 한다. 앞선 미리 읽기 요청이 미리 읽기 요청큐에 존재하는 경우에는 앞선 요청에 대한 처리가 완료될 때까지 대기한 후에 미리 읽기 버퍼를 무효화시킨다. 미리 읽기 버퍼를 무효화한 후에 문맥 삭제 요청을 서버에게 전송하고 해당 문맥 구조체를 초기화한다.
구체적으로, 쓰기 요청된 파일의 문맥 구조체가 존재하는지 판단하고, 존재하지 않는 경우에는 문맥 구조체를 생성 및 초기화한다(S1701, S1702).
문맥 구조체가 존재하는 경우에, 잠금을 획득하고 문맥 구조체가 초기화된 상태인지 판단한다(S1720).
초기화된 상태라면, 해당 문맥 구조체의 잠금을 해제하고(S1756), 종료한다.
반면에, 초기화된 상태가 아니라면, 문맥 구조체에 포함된 미리 읽기 시작 위치 및 미리 읽기 크기 정보를 이용하여 쓰기 요청된 위치가 미리 읽기 윈도우 영역 내인지 판단한다(S1730).
쓰기 요청된 영역이 미리 읽기 윈도우 영역 내로 판단된 경우, 문맥 구조체의 최신 문맥 요청 일련번호를 1 증가시키고, 요청 큐를 잠금하고, 미리 읽기 버퍼를 무효화하고(즉, 미리 읽기 버퍼 내용을 버리고), 서버에 해당 문맥의 삭제를 요청한다(S1751~S1755).
다음, 문맥 구조체를 초기화하고 잠금 해제한다(S1755, S1756).
응용 프로그램의 파일 사용 후 파일 클로즈(close)가 호출될 경우에도 전술한 과정에 따라 처리될 수 있다.
본 발명의 전술한 실시예에 따른 장치 및 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다.
컴퓨터 판독 가능 매체에 기록되는 프로그램 명령은 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 분야 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media) 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 또한 상술한 매체는 프로그램 명령, 데이터 구조 등을 지정하는 신호를 전송하는 반송파를 포함하는 광 또는 금속선, 도파관 등의 전송 매체일 수도 있다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다.
상술한 하드웨어 장치는 본 발명의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이제까지 본 발명에 대하여 그 실시예들을 중심으로 살펴보았다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다.
Claims (20)
- 분산파일 시스템에서 읽기 동작을 수행하는 방법에 있어서, 상기 방법은,
클라이언트로부터 읽기 대상 파일에 대한 문맥 생성 요청이 수신되면, 서버가 상기 파일에 대한 문맥 식별자 및 파일 디스크립터(file descriptor: fd)를 포함하는 문맥 구조체를 생성하고, 상기 문맥 식별자를 상기 클라이언트에 전송하는 단계; 및
상기 파일에 대한 복수의 읽기 요청 - 상기 읽기 요청 각각은 상기 파일에 대응하는 문맥 식별자, 최신 문맥 요청 일련 번호, 요청된 읽기 위치를 나타내는 오프셋 및 읽기 크기 정보를 포함함-이 수신되면, 서버가 상기 읽기 요청 각각에 포함된 문맥 요청 일련 번호를 참조하여 상기 복수의 읽기 요청을 순차적으로 처리하는 단계
를 포함하는 분산파일 시스템에서의 읽기 동작 수행 방법. - 제1항에 있어서, 상기 서버에 의해 생성된 문맥 구조체는 상기 문맥에 대한 요청 처리의 동시성 제어를 위한 문맥 잠금 항목을 더 포함하는 분산파일 시스템에서의 읽기 동작 수행 방법.
- 제1항에 있어서, 상기 서버에 의해 생성된 문맥 구조체는 상기 문맥에 대해 최근 처리된 요청 번호를 나타내는 최신 문맥 처리 번호를 더 포함하고, 상기 최신 문맥 처리 번호는 초기에 0으로 설정된 후에 상기 문맥에 연관된 파일에 대한 요청이 처리될 때마다 1씩 증가하는 분산파일 시스템에서의 읽기 동작 수행 방법.
- 제1항에 있어서, 상기 서버로부터 수신된 문맥 식별자를 포함하는 문맥 구조체가 상기 클라이언트에도 생성 및 유지되며, 상기 클라이언트의 문맥 구조체는 상기 문맥 식별자에 부가하여 상기 문맥에 대한 요청이 동시성 제어를 위한 문맥 잠금 및 최신 문맥 요청 일련 번호를 더 포함하고, 상기 최신 문맥 요청 일련 번호는 초기에 0으로 설정된 후에 상기 문맥에 연관된 파일에 대한 요청이 생성될 때마다 1씩 증가하는 분산파일 시스템에서의 읽기 동작 수행 방법.
- 제1항에 있어서,
상기 복수의 읽기 요청을 순차적으로 처리하는 단계는,
상기 읽기 요청에 포함된 문맥 처리 요청 일련 번호와 상기 서버의 문맥 구조체에 포함된 최신 문맥 처리 번호를 비교함으로써 상기 읽기 요청이 순서 바뀐(reordered) 요청인지 여부를 판단하는 단계; 및
순서 바뀐 요청인 것으로 판단되면, 상기 읽기 요청보다 앞선 요청에 대한 처리가 완료될 때까지 상기 읽기 요청을 대기시킨 후에 처리하는 단계
를 포함하는 분산파일 시스템에서의 읽기 동작 수행 방법. - 제1항에 있어서, 상기 클라이언트로부터 상기 생성된 문맥에 대한 삭제 요청이 수신되면,
상기 삭제 요청에 포함된 문맥 처리 요청 일련번호와 상기 서버의 문맥 구조체에 포함된 최신 문맥 처리 번호를 비교함으로써 상기 삭제 요청이 순서 바뀐(reordered) 요청인지 여부를 판단하는 단계;
순서 바뀐 요청인 것으로 판단되면 상기 삭제 요청보다 앞선 요청에 대한 처리가 완료될 때까지 대기하는 단계; 및
상기 앞선 요청에 대한 처리가 완료된 후에 상기 삭제 요청된 문맥 구조체를 삭제하는 단계
를 더 포함하는 분산파일 시스템에서의 읽기 동작 수행 방법. - 분산파일 시스템에서 읽기 동작을 수행하는 방법에 있어서, 상기 방법은,
클라이언트로부터 읽기 대상 파일에 대하여 오프셋 및 미리 읽기 크기 정보를 포함하는 문맥 생성 요청이 수신되면,
서버가 상기 파일에 대한 문맥 식별자 및 fd를 포함하는 문맥 구조체를 생성하고, 상기 문맥 식별자를 상기 클라이언트에 전송하는 단계; 및
상기 문맥 생성 요청에 포함된 오프셋 및 미리 읽기 크기 정보에 근거하여 상기 파일에 대한 미리 읽기(readahead)를 수행하고 미리 읽은 데이터를 상기 클라이언트에 전송하는 단계
를 포함하는 분산파일 시스템에서의 읽기 동작 수행 방법. - 제7항에 있어서, 상기 서버에서 생성되는 문맥 구조체는, 상기 문맥 식별자 및 상기 fd에 부가하여, 상기 문맥에 대한 요청 처리의 동시성 제어를 위한 문맥 잠금, 상기 서버의 최대 미리 읽기 크기, 문맥 버전 번호, 상기 문맥에 대해 최근 처리된 요청 번호를 나타내는 최신 문맥 처리 번호, 미리 읽기 크기 및 메모리 버퍼 주소중 적어도 하나를 더 포함하고, 상기 최신 문맥 처리 번호는 초기에 0으로 설정된 후에 상기 문맥에 연관된 파일에 대한 요청이 처리될 때마다 1씩 증가하는 분산파일 시스템에서의 읽기 동작 수행 방법.
- 제8항에 있어서, 상기 서버로부터 수신된 문맥 식별자를 포함하는 문맥 구조체가 상기 클라이언트에도 생성 및 유지되며, 상기 클라이언트의 문맥 구조체는 상기 문맥 식별자에 부가하여, 문맥 잠금, 상기 서버의 최대 미리 읽기 크기, 문맥 버전 번호, 최신 문맥 요청 일련 번호, 미리 읽기 시작 위치, 미리 읽기 요청 크기 및 비동기 미리 읽기 요청 크기 정보중 적어도 하나를 더 포함하고, 상기 최신 문맥 요청 일련번호는 초기에 0으로 설정된 후에 상기 문맥에 연관된 파일에 대한 요청이 생성될 때마다 1씩 증가하는 분산파일 시스템에서의 읽기 동작 수행 방법.
- 제7항에 있어서, 상기 클라이언트에 전송된 상기 미리 읽은 데이터는 상기 클라이언트의 미리 읽기 버퍼에 저장되며, 상기 클라이언트의 미리 읽기 버퍼 크기는 상기 서버의 최대 미리 읽기 크기의 2배인 분산파일 시스템에서의 읽기 동작 수행 방법.
- 제10항에 있어서, 상기 미리 읽기 버퍼는 순환 버퍼인 분산파일 시스템에서의 읽기 동작 수행 방법.
- 제7항에 있어서, 상기 클라이언트에서 수행되는 응용 프로그램으로부터 상기 파일에 대한 연속 읽기가 요청되는 경우에,
상기 응용 프로그램에 의해 아직 판독되지 않은 미리 읽기 버퍼의 잔여 데이터 크기가 기설정된 비동기 미리 읽기 요청 크기보다 작아지면 상기 클라이언트가 상기 서버에 비동기 미리 읽기 요청 크기 정보를 포함하는 미리 읽기 요청을 전송하는 단계;
상기 미리 읽기 요청을 수신한 서버가 상기 비동기 미리 읽기 요청 크기만큼 상기 파일에 대한 비동기 미리 읽기 동작을 수행하는 단계; 및
상기 미리 읽은 데이터를 상기 클라이언트에 전송하는 단계
를 더 포함하는 분산파일 시스템에서의 읽기 동작 수행 방법. - 제12항에 있어서, 상기 비동기 미리 읽기 요청 크기는 상기 서버의 최대 미리 읽기 크기까지 증가될 수 있는 분산파일 시스템에서의 읽기 동작 수행 방법.
- 제12항에 있어서, 상기 미리 읽기 요청은 문맥 처리 요청 일련번호를 더 포함하고,
상기 미리 읽기 동작을 수행하는 단계는,
상기 미리 읽기 요청에 포함된 문맥 처리 요청 일련번호와 상기 서버의 문맥 구조체에 포함된 최신 문맥 처리 번호를 비교함으로써 상기 미리 읽기 요청이 순서 바뀐(reordered) 요청인지 여부를 판단하는 단계; 및
순서 바뀐 요청인 것으로 판단되면 상기 미리 읽기 요청보다 앞선 요청에 대한 처리가 완료될 때가지 대기시킨 후에 처리하는 단계
를 포함하는 분산파일 시스템에서의 읽기 동작 수행 방법. - 제7항에 있어서, 상기 클라이언트에서 수행되는 응용 프로그램으로부터 상기 파일에 대한 랜덤 읽기가 요청되는 경우에,
상기 클라이언트가 상기 파일에 연관된 문맥 구조체내 문맥 버전 번호를 증가시키고 상기 증가된 버전 번호, 문맥 식별자, 오프셋 및 미리 읽기 크기 정보를 포함하는 문맥 변경 요청을 상기 서버에 전송하는 단계; 및
상기 문맥 변경 요청을 수신한 서버가 상기 변경 요청된 문맥 구조체의 문맥 버전 번호를 상기 변경 요청에 포함된 버전 번호로 변경하고, 상기 변경 요청에 포함된 오프셋 및 미리 읽기 크기 정보를 이용하여 상기 파일에 대한 미리 읽기 동작을 수행하고 미리 읽은 데이터를 상기 클라이언트에게 전송하는 단계
를 더 포함하는 분산파일 시스템에서의 읽기 동작 수행 방법. - 제7항에 있어서, 상기 클라이언트로부터 상기 생성된 문맥에 대한 삭제 요청이 수신되면,
상기 삭제 요청에 포함된 문맥 처리 요청 일련번호와 상기 서버의 문맥 구조체에 포함된 최신 문맥 처리 번호를 비교함으로써 상기 삭제 요청이 순서 바뀐(reordered) 요청인지 여부를 판단하는 단계;
순서 바뀐 요청인 것으로 판단되면 상기 삭제 요청보다 앞선 요청에 대한 처리가 완료될 때까지 대기하는 단계; 및
상기 앞선 요청에 대한 처리가 완료된 후에 상기 삭제 요청된 문맥 구조체를 삭제하는 단계
를 더 포함하는 분산파일 시스템에서의 읽기 동작 수행 방법. - 분산파일 시스템에서 읽기 동작을 수행하는 방법에 있어서, 상기 방법은,
응용 프로그램으로부터 파일에 대한 읽기 요청 ?? 상기 읽기 요청은 오프셋 및 읽기 크기 정보를 포함함-이 수신되면, 클라이언트는 상기 파일에 대한 문맥 구조체가 존재하는지 판단하는 단계;
상기 파일에 대한 문맥 구조체가 존재하는 경우에 상기 읽기 요청에 포함된 오프셋과 상기 문맥 구조체에 포함된 읽기 시작 위치를 비교하여 상기 읽기 요청이 연속 읽기 요청인지 랜덤 읽기 요청인지 판단하는 단계;
상기 읽기 요청이 연속 읽기 요청인 것으로 판단되면, 서버에 상기 파일에 대한 비동기 미리 읽기를 요청하는 단계; 및
상기 읽기 요청이 랜덤 읽기 요청인 것으로 판단되면, 상기 서버에 상기 문맥에 대한 변경을 요청하는 단계
를 포함하는 분산파일 시스템에서 읽기 동작을 수행하는 방법. - 제17항에 있어서, 상기 파일에 대한 문맥 구조체가 존재하는지 않는 경우에, 상기 서버에 상기 파일에 대한 문맥 생성을 요청하는 단계를 더 포함하는 분산파일 시스템에서의 읽기 동작 수행 방법.
- 제17항에 있어서, 상기 문맥에 대한 변경을 요청하는 단계는,
요청큐에 상기 문맥에 대해 대기중인 비동기 미리 읽기 요청이 존재하는지 판단하는 단계; 및
상기 요청큐에 대기중인 비동기 미리 읽기 요청이 존재하는 경우에, 상기 요청이 처리되어 상기 요청큐가 비워질 때까지 대기한 후에 상기 서버에 상기 문맥에 대한 변경 요청을 전송하는 단계
를 포함하는 분산파일 시스템에서의 읽기 동작 수행 방법. - 제17항에 있어서, 상기 응용 프로그램으로부터 상기 파일에 대한 쓰기 요청이 수신되면,
상기 파일의 쓰기 요청 영역이 미리 읽기 윈도우에 포함되는지 판단하는 단계;
상기 미리 읽기 윈도우에 포함되는 경우 상기 미리 읽기 버퍼를 무효화는 단계; 및
상기 문맥에 대한 삭제를 상기 서버에 요청하는 단계
를 더 포함하는 분산파일 시스템에서의 읽기 동작 수행 방법.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020140022718A KR101694988B1 (ko) | 2014-02-26 | 2014-02-26 | 분산 파일시스템에서의 읽기 동작 수행 방법 및 장치 |
US14/629,513 US9805055B2 (en) | 2014-02-26 | 2015-02-24 | Method and apparatus for reading data in distributed file system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020140022718A KR101694988B1 (ko) | 2014-02-26 | 2014-02-26 | 분산 파일시스템에서의 읽기 동작 수행 방법 및 장치 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20150101244A true KR20150101244A (ko) | 2015-09-03 |
KR101694988B1 KR101694988B1 (ko) | 2017-01-11 |
Family
ID=53882406
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020140022718A KR101694988B1 (ko) | 2014-02-26 | 2014-02-26 | 분산 파일시스템에서의 읽기 동작 수행 방법 및 장치 |
Country Status (2)
Country | Link |
---|---|
US (1) | US9805055B2 (ko) |
KR (1) | KR101694988B1 (ko) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20180074114A (ko) | 2016-12-23 | 2018-07-03 | 서울대학교산학협력단 | 가상 파일 기반의 클라우드 서비스 방법 및 장치 |
KR20180117377A (ko) * | 2017-04-19 | 2018-10-29 | 한국전자통신연구원 | 분산 파일시스템 환경에서 사용자 수준 dma i/o를 지원하는 시스템 및 그 방법 |
KR20230071381A (ko) * | 2021-11-16 | 2023-05-23 | 건국대학교 산학협력단 | I/o 프로세스의 스케줄링 방법 및 장치 |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106570097B (zh) * | 2016-10-31 | 2020-09-08 | 华为技术有限公司 | 序列生成方法及装置 |
KR20190072229A (ko) | 2017-12-15 | 2019-06-25 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그것의 동작 방법 |
KR102551601B1 (ko) | 2018-02-05 | 2023-07-06 | 한국전자통신연구원 | 스토리지 서버 및 분산 파일 시스템에서 스토리지 서버에 의해 수행되는 적응형 프리페칭 방법 |
US10657068B2 (en) * | 2018-03-22 | 2020-05-19 | Intel Corporation | Techniques for an all persistent memory file system |
CN110602026B (zh) * | 2018-06-13 | 2021-12-14 | 阿里巴巴集团控股有限公司 | 文件访问方法、控制节点、客户端和电子设备 |
CN109246221A (zh) * | 2018-09-21 | 2019-01-18 | 上海勋立信息科技有限公司 | 一种多文件的数据分段高速上传方法、客户端及服务器 |
CN109951541A (zh) * | 2019-03-11 | 2019-06-28 | 中国银联股份有限公司 | 一种流水号生成方法及服务器 |
CN113609093B (zh) * | 2021-06-30 | 2023-12-22 | 济南浪潮数据技术有限公司 | 一种分布式文件系统的逆序读方法、系统及相关装置 |
CN113377725B (zh) * | 2021-08-13 | 2021-11-12 | 苏州浪潮智能科技有限公司 | 一种内核客户端的预读方法、系统及计算机可读存储介质 |
CN114327299B (zh) * | 2022-03-01 | 2022-06-03 | 苏州浪潮智能科技有限公司 | 一种顺序读预读的方法、装置、设备及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5970229A (en) * | 1996-09-12 | 1999-10-19 | Cabletron Systems, Inc. | Apparatus and method for performing look-ahead scheduling of DMA transfers of data from a host memory to a transmit buffer memory |
KR20100015860A (ko) * | 2007-04-26 | 2010-02-12 | 바이엘 머티리얼사이언스 아게 | 염화수소를 함유하는 기상 스트림으로부터 유기 성분을 제거하기 위한 응축흡착 방법 |
KR20120064576A (ko) * | 2010-12-09 | 2012-06-19 | 한국전자통신연구원 | 비대칭 스토리지 시스템에서 연속적인 읽기/쓰기를 제공하기 위한 장치 및 그 방법 |
US20120163394A1 (en) * | 2009-09-02 | 2012-06-28 | Zte Corporation | Route Switching Device and Data Cashing Method Thereof |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120144123A1 (en) | 2010-12-01 | 2012-06-07 | International Business Machines Corporation | Read-ahead processing in networked client-server architecture |
-
2014
- 2014-02-26 KR KR1020140022718A patent/KR101694988B1/ko active IP Right Grant
-
2015
- 2015-02-24 US US14/629,513 patent/US9805055B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5970229A (en) * | 1996-09-12 | 1999-10-19 | Cabletron Systems, Inc. | Apparatus and method for performing look-ahead scheduling of DMA transfers of data from a host memory to a transmit buffer memory |
KR20100015860A (ko) * | 2007-04-26 | 2010-02-12 | 바이엘 머티리얼사이언스 아게 | 염화수소를 함유하는 기상 스트림으로부터 유기 성분을 제거하기 위한 응축흡착 방법 |
US20120163394A1 (en) * | 2009-09-02 | 2012-06-28 | Zte Corporation | Route Switching Device and Data Cashing Method Thereof |
KR20120064576A (ko) * | 2010-12-09 | 2012-06-19 | 한국전자통신연구원 | 비대칭 스토리지 시스템에서 연속적인 읽기/쓰기를 제공하기 위한 장치 및 그 방법 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20180074114A (ko) | 2016-12-23 | 2018-07-03 | 서울대학교산학협력단 | 가상 파일 기반의 클라우드 서비스 방법 및 장치 |
KR20180117377A (ko) * | 2017-04-19 | 2018-10-29 | 한국전자통신연구원 | 분산 파일시스템 환경에서 사용자 수준 dma i/o를 지원하는 시스템 및 그 방법 |
US10565142B2 (en) | 2017-04-19 | 2020-02-18 | Electronics And Telecommunications Research Institute | System and method for supporting user-level direct memory access input/output in distributed file system environment |
KR20230071381A (ko) * | 2021-11-16 | 2023-05-23 | 건국대학교 산학협력단 | I/o 프로세스의 스케줄링 방법 및 장치 |
Also Published As
Publication number | Publication date |
---|---|
US9805055B2 (en) | 2017-10-31 |
KR101694988B1 (ko) | 2017-01-11 |
US20150242437A1 (en) | 2015-08-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101694988B1 (ko) | 분산 파일시스템에서의 읽기 동작 수행 방법 및 장치 | |
US10678614B2 (en) | Messages with delayed delivery in an in-database sharded queue | |
US7797357B1 (en) | File system and methods for performing file create and open operations with efficient storage allocation | |
US9424314B2 (en) | Method and apparatus for joining read requests | |
TWI610187B (zh) | 用於自主記憶體搜尋之方法及系統 | |
US8832385B2 (en) | Read-ahead processing in networked client-server architecture | |
JPH10326262A (ja) | コンピュータ使用可能媒体を含む製造品 | |
US10503693B1 (en) | Method and system for parallel file operation in distributed data storage system with mixed types of storage media | |
US10803006B1 (en) | Persistent memory key-value store in a distributed memory architecture | |
US11392545B1 (en) | Tracking access pattern of inodes and pre-fetching inodes | |
CN108540510B (zh) | 一种云主机创建方法、装置及云服务系统 | |
CN106936931B (zh) | 分布式锁的实现方法、相关设备及系统 | |
JP2017191599A (ja) | ゼロ競合並列データスタックを提供するデータ格納システムのデータ格納方法 | |
US10719240B2 (en) | Method and device for managing a storage system having a multi-layer storage structure | |
CN113138859A (zh) | 一种基于共享内存池的通用数据存储方法 | |
WO2018176397A1 (zh) | 一种锁分配的方法、装置和计算设备 | |
US10055139B1 (en) | Optimized layout in a two tier storage | |
WO2018064319A9 (en) | FOLLOW-UP OF INODES ACCESS SCHEMES AND INOX PREXTRACTION | |
EP4031986B1 (en) | Rdma-enabled key-value store | |
US11726788B2 (en) | Tuple checkout with notify in coordination namespace system | |
CN114281765A (zh) | 分布式文件系统中的元数据处理方法及设备 | |
JPH10301796A (ja) | システム間データ・パイピング方法 | |
CN116561358A (zh) | 一种基于hbase的3D场景数据文件统一存储与检索方法 | |
US10235293B2 (en) | Tracking access pattern of inodes and pre-fetching inodes | |
CN104333803B (zh) | 防止视频编辑时丢帧的方法、设备及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20191223 Year of fee payment: 4 |