KR102504274B1 - 유니커널을 위한 파일 입출력 오프로드 가속 장치, 서버 및 방법 - Google Patents

유니커널을 위한 파일 입출력 오프로드 가속 장치, 서버 및 방법 Download PDF

Info

Publication number
KR102504274B1
KR102504274B1 KR1020210057436A KR20210057436A KR102504274B1 KR 102504274 B1 KR102504274 B1 KR 102504274B1 KR 1020210057436 A KR1020210057436 A KR 1020210057436A KR 20210057436 A KR20210057436 A KR 20210057436A KR 102504274 B1 KR102504274 B1 KR 102504274B1
Authority
KR
South Korea
Prior art keywords
offload
output
file input
unikernel
file
Prior art date
Application number
KR1020210057436A
Other languages
English (en)
Other versions
KR20210152382A (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 US17/340,986 priority Critical patent/US20210382752A1/en
Publication of KR20210152382A publication Critical patent/KR20210152382A/ko
Application granted granted Critical
Publication of KR102504274B1 publication Critical patent/KR102504274B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45579I/O management, e.g. providing access to device drivers or storage
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45595Network integration; Enabling network access in virtual machine instances

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

유니커널을 위한 파일 입출력 오프로드 가속 장치 및 방법이 개시된다. 본 발명의 일실시예에 따른 유니커널을 위한 파일 입출력 오프로드 가속 방법은 유니커널을 위한 파일 입출력 오프로드 가속 장치와 서버의 유니커널을 위한 파일 입출력 오프로드 가속 방법에 있어서, 상기 파일 입출력 오프로드 가속 장치가, 유니커널에서 응용 프로그램을 실행하여 상기 응용 프로그램의 쓰레드가 파일 입출력 함수를 호출하는 단계; 상기 유니커널이, 상기 파일 입출력 함수를 이용하여 파일 입출력 오프로드 요청을 생성하는 단계; 상기 유니커널이, 상기 서버의 리눅스에게 파일 입출력 오프로드 요청을 송신하는 단계; 상기 리눅스가, 상기 유니커널의 쓰레드로부터 상기 파일 입출력 오프로드 요청을 수신하고, 상기 파일 입출력 오프로드 요청을 처리하는 단계; 상기 리눅스가, 상기 유니커널에게 상기 파일 입출력 오프로드 요청에 대한 파일 입출력 오프로드 결과를 송신하는 단계 및 상기 파일 입출력 오프로드 결과를 상기 응용 프로그램의 쓰레드로 전달하는 단계를 포함한다.

Description

유니커널을 위한 파일 입출력 오프로드 가속 장치, 서버 및 방법 {SERVER, APPARATUS AND METHOD FOR ACCELATING FILE INPUT-OUTPUT OFFLOAD FOR UNIKERNEL}
본 발명은 유니커널 기술에 관한 것으로, 보다 상세하게는 유니커널에서 발생하는 파일 입출력을 리눅스에 오프로드(Offload)하고 고속으로 파일 입출력을 처리하는 기술에 관한 것이다.
유니커널은 별도의 운영체제 없이 실행할 수 있는 실행 가능한 이미지이다. 이미지에는 응용 프로그램 코드와 해당 응용 프로그램에 필요한 모든 운영 체제 기능이 들어 있다. 유니커널은 애플리케이션 코드를 해당 애플리케이션 구동에 필요한 최소한의 운영체제 요소와 결합함으로써 부팅 시간과 용량 및 공격 표면을 크게 줄인 장점을 가지고 있다.
유니커널은 기존 운영 체제보다 크기가 작아 훨씬 신속하고 안전하게 시작하고 종료 할 수 있다. 유니커널은 크기 줄이기 위해 파일시스템과 같은 크기가 큰 모듈을 자신의 라이브러리에 포함하지 않기 때문에 파일 입출력(Input-Output, IO)을 처리하기 위해 오프로드하는 방식을 택하는 것이 일반적이다.
하지만, 이러한 유니커널의 파일 입출력 오프로드(file IO offload)의 처리는 유니커널이 호스트 서버의 IO 오프로드 프록시(IO offload proxy)에 파일 입출력 요청(IO offload request)을 전달하고, IO 오프로드 프록시가 IO를 수행한 후 파일 입출력 결과(IO offload result)를 유니커널에 전달하는 순차적 처리 때문에 유니커널의 장점인 신속한 처리를 상쇄시키는 결과를 초래할 수 있다.
따라서, 유니커널의 운영 환경에서 파일 입출력을 필요로 하는 응용프로그램의 성능을 높이기 위해 리눅스의 IO 오프로드 프록시와 유니커널 간 기존의 느린 IO 오프로드를 고속으로 처리할 수 있도록 하는 IO 오프로드 가속 기능이 필요하다. 이를 위해 본 발명에서는 유니커널과 리눅스의 IO 오프로드 프록시 간 IO 오프로드를 고속으로 파일 입출력 할 수 있는 가속 방법을 제시한다.
한편, 한국공개특허 제 10-2016-0123370 호“파일 액세스 방법 및 관련 기기”는 파일 시스템이 메모리에 상주하는 시나리오에서의 파일 액세스 수행에 적용하기 위한, 파일 액세스 방법 및 관련 기기에 관하여 개시하고 있다.
본 발명은 유니커널에서 발생하는 파일 입출력 오프로드를 가속화하는 것을 목적으로 한다.
또한, 본 발명은 저속의 파일 입출력 성능을 개선하여 유니커널의 응용 프로그램의 활용성을 증대시키는 것을 목적으로 한다.
또한, 본 발명은 유니커널 환경에서는 구축하기 어려운 범용 운영체제의 소프트웨어 스택(File system 및 Network file system 등)을 활용하여 유니커널의 IO 시스템 구축을 용이하게 하는 것을 목적으로 한다.
또한, 본 발명은 다수의 유니커널 응용 프로그램이 구동되어도 각각의 유니커널에서 파일 시스템을 구축할 필요 없이 다수의 유니커널을 경량의 크기와 최적의 수행을 지원하는 것을 목적으로 한다.
상기한 목적을 달성하기 위한 본 발명의 일실시예에 따른 유니커널을 위한 파일 입출력 오프로드 가속 장치는 하나 이상의 프로세서; 및 상기 하나 이상의 프로세서에 의해 실행되는 적어도 하나 이상의 프로그램을 저장하는 실행메모리를 포함하고, 상기 적어도 하나 이상의 프로그램은 유니커널에서 응용 프로그램을 실행하고, 응용 프로그램의 쓰레드가 파일 입출력 함수를 호출하고, 상기 파일 입출력 함수를 이용하여 파일 입출력 오프로드 요청을 생성하고, 호스트 서버의 리눅스에게 파일 입출력 오프로드 요청을 송신하고, 상기 호스트 서버의 리눅스로부터 상기 파일 입출력 오프로드 요청을 처리한 결과인 파일 입출력 오프로드 결과를 수신하고, 상기 파일 입출력 오프로드 결과를 상기 응용 프로그램의 쓰레드로 전달한다.
이 때, 상기 적어도 하나 이상의 프로그램은 상기 유니커널의 쓰레드가 상기 파일 입출력 오프로드 결과를 전달받을 수 있도록 파일 입출력 오프로드를 스케쥴링하여 상기 파일 입출력 오프로드를 처리할 수 있다.
이 때, 적어도 하나 이상의 프로그램은 공유 메모리 영역을 생성하고, 상기 공유 메모리 영역을 기반으로 원형 큐 방식을 이용하여 상기 리눅스와 상기 유니커널 간 파일 입출력 오프로드 통신을 수행할 수 있다.
이 때, 상기 호스트 서버의 리눅스는 상기 원형 큐에 상기 유니커널과 상기 리눅스 간 복수의 파일 입출력 오프로드 통신 채널들을 상기 유니커널의 각 CPU 코어 별로 하나씩 할당할 수 있다.
이 때, 상기 적어도 하나 이상의 프로그램은 상기 원형 큐에 할당된 파일 입출력 오프로드 결과가 상기 파일 입출력 오프로드 요청에 상응하는지 검사하여 상기 파일 입출력 오프로드 요청을 확인할 수 있다.
이 때, 상기 적어도 하나 이상의 프로그램은 상기 파일 입출력 오프로드 결과가 상기 파일 입출력 오프로드 요청에 상응하지 않는 경우, 상기 쓰레드를 상기 파일 입출력 오프로드 요청에 상응하는 쓰레드로 스케쥴링 하여 파일 입출력 오프로드를 가속화할 수 있다.
이 때, 상기 적어도 하나 이상의 프로그램은 상기 원형 큐가 가용 상태인 경우, 상기 파일 입출력 오프로드 요청을 상기 원형 큐에 전달하고, 상기 원형 큐가 풀 상태인 경우, 상기 원형 큐에 할당하려는 파일 입출력 오프로드 요청에 상응하는 쓰레드를 다른 쓰레드로 스케쥴링하여 파일 입출력 오프로드를 가속화할 수 있다.
또한, 상기의 목적을 달성하기 위한 본 발명의 일실시예에 따른 유니커널을 위한 파일 입출력 오프로드 가속 서버는 하나 이상의 프로세서; 및 상기 하나 이상의 프로세서에 의해 실행되는 적어도 하나 이상의 프로그램을 저장하는 실행메모리를 포함하고, 상기 적어도 하나 이상의 프로그램은 유니커널의 쓰레드로부터 파일 입출력 오프로드 요청을 수신하고, 리눅스에서 상기 파일 입출력 오프로드 요청을 처리하고, 상기 리눅스에서 상기 유니커널로 파일 입출력 오프로드 결과를 송신한다.
이 때, 상기 적어도 하나 이상의 프로그램은 공유 메모리 영역을 생성하고, 상기 공유 메모리 영역을 기반으로 원형 큐 방식을 이용하여 상기 유니커널과 파일 입출력 오프로드 통신을 수행할 수 있다.
이 때, 상기 적어도 하나 이상의 프로그램은 상기 원형 큐에 할당된 상기 복수의 파일 입출력 오프로드 통신 채널들을 검사하여, 상기 파일 입출력 오프로드 요청을 확인할 수 있다.
이 때, 상기 적어도 하나 이상의 프로그램은 상기 파일 입출력 오프로드 요청에 포함된 파일 입출력 오프로드 정보를 이용하여 상기 파일 입출력 함수와 상기 파일 입출력 함수를 수행하는데 필요한 파라미터를 인자로 하는 상기 쓰레드 풀의 쓰레드를 호출하여 파일 입출력 오프로드를 가속화할 수 있다.
이 때, 상기 쓰레드 풀의 쓰레드들은 쓰레드들 간에 파일 입출력 수행을 병렬로 처리하여 상기 파일 입출력 오프로드를 가속화할 수 있다.
이 때, 상기 적어도 하나 이상의 프로그램은 상기 호출된 쓰레드에서 처리된 상기 파일 입출력 오프로드 결과를 상기 원형 큐에 할당하고, 상기 원형 큐를 통해 상기 유니커널에 상기 파일 입출력 오프로드 결과를 전달할 수 있다.
또한, 상기한 목적을 달성하기 위한 본 발명의 일실시예에 따른 유니커널을 위한 파일 입출력 오프로드 가속 방법은 유니커널을 위한 파일 입출력 오프로드 가속 장치와 서버의 유니커널을 위한 파일 입출력 오프로드 가속 방법에 있어서, 상기 파일 입출력 오프로드 가속 장치가, 유니커널에서 응용 프로그램을 실행하여 파일 입출력 함수를 호출하는 단계; 상기 유니커널이, 상기 파일 입출력 함수를 이용하여 파일 입출력 오프로드 요청을 생성하는 단계; 상기 유니커널이, 상기 서버의 리눅스에게 파일 입출력 오프로드 요청을 송신하는 단계; 상기 리눅스가, 상기 유니커널의 쓰레드로부터 상기 파일 입출력 오프로드 요청을 수신하고, 상기 파일 입출력 오프로드 요청을 처리하는 단계; 상기 리눅스가, 상기 유니커널의 쓰레드로부터 상기 파일 입출력 오프로드 요청에 대한 파일 입출력 오프로드 결과를 송신하는 단계 및 상기 파일 입출력 오프로드 결과를 상기 응용 프로그램의 쓰레드로 전달하는 단계를 포함한다.
이 때, 상기 파일 입출력 오프로드 요청을 송신하는 단계는 상기 유니커널과 상기 리눅스가, 공유 메모리 영역을 생성하고, 상기 공유 메모리 영역을 기반으로 원형 큐 방식을 이용하여 상기 유니커널과 상기 리눅스가, 파일 입출력 오프로드 통신을 수행할 수 있다.
이 때, 상기 파일 입출력 오프로드 요청을 송신하는 단계는 상기 리눅스가, 상기 원형 큐에 상기 유니커널과 상기 리눅스 간 복수의 파일 입출력 오프로드 통신 채널들을 상기 유니커널의 각 CPU 코어 별로 하나씩 할당할 수 있다.
이 때, 상기 파일 입출력 오프로드 요청을 송신하는 단계는 상기 원형 큐가 가용 상태인 경우 상기 파일 입출력 오프로드 요청을 전달하고, 상기 원형 큐가 풀 상태인 경우 상기 원형 큐에 할당하려는 파일 입출력 오프로드 요청에 상응하는 쓰레드을 다른 쓰레드로 스케쥴링하여 상기 파일 입출력 오프로드를 가속화 할 수 있다.
이 때, 상기 파일 입출력 오프로드 요청을 처리하는 단계는 상기 리눅스가, 상기 원형 큐에 할당된 상기 복수의 파일 입출력 오프로드 통신 채널들을 검사하여, 상기 파일 입출력 오프로드 요청을 확인할 수 있다.
이 때, 상기 파일 입출력 오프로드 요청을 처리하는 단계는 상기 파일 입출력 오프로드 요청에 포함된 파일 입출력 오프로드 정보를 이용하여 상기 파일 입출력 함수와 상기 파일 입출력 함수를 수행하는데 필요한 파라미터를 인자로 이용하여 상기 쓰레드 풀의 쓰레드를 호출하여 파일 입출력 오프로드를 가속화할 수 있다.
이 때, 상기 쓰레드 풀의 쓰레드들은 쓰레드들 간에 파일 입출력 수행을 병렬로 처리하여 상기 파일 입출력 오프로드를 가속화할 수 있다.
이 때, 상기 파일 입출력 오프로드 결과를 상기 응용 프로그램의 쓰레드로 전달하는 단계는 상기 파일 입출력 오프로드 결과가 상기 파일 입출력 오프로드 요청에 상응하지 않는 경우, 상기 쓰레드를 상기 파일 입출력 오프로드 요청에 상응하는 쓰레드로 스케쥴링 하여 파일 입출력 오프로드를 가속화할 수 있다.
본 발명은 유니커널에서 발생하는 파일 입출력을 가속화할 수 있다.
또한, 본 발명은 저속의 파일 입출력 성능을 개선하여 유니커널의 응용 프로그램의 활용성을 증대시킬 수 있다.
또한, 본 발명은 유니커널 환경에서는 구축하기 어려운 범용 운영체제의 소프트웨어 스택(File system 및 Network file system 등)을 활용하여 유니커널의 IO 시스템 구축을 용이하게 할 수 있다.
또한, 본 발명은 다수의 유니커널 응용 프로그램이 구동되어도 각각의 유니커널에서 파일 시스템을 구축할 필요 없이 다수의 유니커널을 경량의 크기와 최적의 수행을 지원할 수 있다.
도 1은 본 발명의 일실시예에 따른 유니커널에서 호스트 서버로 파일 입출력 오프로드를 수행하는 과정을 나타낸 도면이다.
도 2는 본 발명의 일실시예에 따른 유니커널을 위한 파일 입출력 오프로드 가속 시스템을 나타낸 블록도이다.
도 3 및 도 4는 본 발명의 일실시예에 따른 파일 입출력 오프로드 프록시의 입출력 오프로드 가속화 과정을 나타낸 도면이다.
도 5는 본 발명의 일실시예에 따른 파일 입출력 오프로드 프록시 및 유니커널의 파일 입출력 오프로드 가속화를 통한 파일 입출력 오프로드 처리 과정을 나타낸 도면이다.
도 6은 본 발명의 일실시예에 따른 유니커널을 위한 파일 입출력 오프로드 가속 방법을 나타낸 시퀀스 다이어그램이다.
도 7은는 본 발명의 일실시예에 따른 컴퓨터 시스템을 나타낸 도면이다.
본 발명을 첨부된 도면을 참조하여 상세히 설명하면 다음과 같다. 여기서, 반복되는 설명, 본 발명의 요지를 불필요하게 흐릴 수 있는 공지 기능, 및 구성에 대한 상세한 설명은 생략한다. 본 발명의 실시형태는 당 업계에서 평균적인 지식을 가진 자에게 본 발명을 보다 완전하게 설명하기 위해서 제공되는 것이다. 따라서, 도면에서의 요소들의 형상 및 크기 등은 보다 명확한 설명을 위해 과장될 수 있다.
명세서 전체에서, 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있는 것을 의미한다.
이하, 첨부한 도면들을 참조하여, 본 발명의 바람직한 실시예를 보다 상세하게 설명한다.
도 1은 본 발명의 일실시예에 따른 유니커널에서 호스트 서버로 파일 입출력 오프로드를 수행하는 과정을 나타낸 도면이다.
도 1을 참조하면, 본 발명의 일실시예에 따른 유니커널을 위한 파일 입출력 오프로드 가속 장치(100)는 유니커널에서 파일 입출력을 수행하기 위해 일부 자원을 호스트 서버(10)의 리눅스에 설치하여 파일 시스템처럼 활용하는 것을 알 수 있다.
도 1에서 T는 IO 스레드, Rq는 IO 오프로드 요청, J는 IO job, Rt는 IO 오프로드 결과, D는 데이터, CQ는 원형 큐(Circular Queue))를 나타낸 것을 알 수 있다.
본 발명의 일실시예에 따른 유니커널을 위한 파일 입출력 오프로드 가속 장치 및 방법은 유니커널과 리눅스간 파일 입출력 오프로드 처리시 호스트 서버(10)인 리눅스 상의 데이터를 고속으로 파일 입출력 할 수 있도록 가속할 수 있다.
유니커널은 리눅스에 설치된 입출력(Input-Output, IO) 오프로드 프록시(11)에 파일 입출력을 위한 IO 오프로드 요청을 전달하면, 리눅스의 IO 오프로드 프록시(11)는 유니커널로부터 전달받은 IO 오프로드 요청을 병렬로 처리하여 가속화 하는 것을 알 수 있다.
즉, 리눅스의 IO 오프로드 프록시(11)는 IO 오프로드 요청에 대한 IO를 수행할 다수의 쓰레드를 생성하여 쓰레드 풀을 생성할 수 있다.
이 때, IO 오프로드 프록시(11)는 미리 생성된 쓰레드를 이용하여 쓰레드 생성 및 종료 시간과 같은 대기 시간 없이 즉시 IO 오프로드 요청에 대한 IO를 수행할 수 있다.
또한, IO 오프로드 프록시(11)는 유니커널로부터 연속적으로 전달되어 오는 다수의 IO 오프로드 요청들을 처리할 때, 미리 생성된 쓰레드 풀의 다른 쓰레드를 이용하여 현재 수행 중인 IO 오프로드 요청에 대한 IO 수행이 종료되기를 기다리지 않고, 다음 IO 오프로드 요청에 대한 IO를 병렬로 수행하여 IO 오프로드 처리를 가속화할 수 있다.
한편, IO 오프로드 프록시(11)는 유니커널의 IO 오프로드 요청에 대한 IO를 병렬로 처리하여 가속화하는 것에 대응하여, 유니커널의 어플리케이션(110)은 리눅스의 IO 오프로드 프록시(11)에서 보낸 IO 오프로드 결과를 해당 쓰레드로 즉시 전달될 수 있도록 하여 IO 오프로드를 처리할 수 있다.
즉, 유니커널의 어플리케이션(110)은 리눅스의 IO 오프로드 프록시(11)에서 보낸 IO 오프로드 결과를 받으면 해당 쓰레드가 즉시 수행될 수 있도록 스케쥴링하여, 해당 쓰레드가 스케쥴링 될 때까지 기다려야 하는 대기시간 없이 그 결과를 받을 수 있도록 IO 오프로드 수행을 가속화 할 수 있다.
따라서, 본 발명은 유니커널에서 파일 입출력을 위해 추가적인 파일 시스템 소프트웨어 스택을 구축할 필요가 없을 뿐만 아니라, 파일 입출력 오프로드시의 문제점인 파일 입출력 성능 저하를 개선하여 고속의 파일 입출력 성능을 제공할 수 있어 파일 입출력을 포함하는 유니커널 응용 프로그램의 활용성을 증대시킬 수 있다.
도 2는 본 발명의 일실시예에 따른 유니커널을 위한 파일 입출력 오프로드 가속 시스템을 나타낸 블록도이다.
도 2를 참조하면, 본 발명의 일실시예에 따른 유니커널을 위한 파일 입출력 오프로드 가속 장치(100)는 유니커널에서 발생하는 파일 입출력을 호스트 서버(10)인 리눅스에 오프로드 하여 리눅스에 저장되어 있는 파일의 데이터를 유니커널의 메모리로 입출력 할 수 있다.
도 2에서 T는 IO 스레드, Rq는 IO 오프로드 요청, J는 IO job, Rt는 IO 오프로드 결과, D는 데이터, CQ는 원형 큐(Circular Queue))를 나타낸 것을 알 수 있다.
유니커널을 위한 파일 입출력 오프로드 가속 장치(100)는 리눅스의 IO 오프로드 프록시(11)에서 유니커널로부터 전달받은 IO 오프로드 요청에 대한 IO를 병렬로 처리하여 IO 오프로드를 가속화 할 수 있다.
이 때, 유니커널을 위한 파일 입출력 오프로드 가속 장치(100)는 리눅스로부터 유니커널에 IO 오프로드 결과가 통신 채널을 통하여 도착하면 해당 쓰레드가 즉시 그 결과를 받아 처리할 수 있도록 스케쥴링(scheduling)하여 IO 오프로드를 가속화 할 수 있다.
유니커널을 위한 파일 입출력 오프로드 가속 장치(100)는 유니커널에서 IO 오프로드 요청을 리눅스의 IO 오프로드 프록시(11)에 전달할 수 있다.
IO 오프로드 프록시(11)는 IO 오프로드 요청에 대한 파일 입출력을 처리하고, IO 입출력 오프로드 결과를 유니커널에 전달할 수 있다.
IO 오프로드 프록시(11)는 유니커널과 IO 오프로드 프록시 사이에 공유 메모리 영역을 생성하고, 공유된 메모리를 기반으로 하는 원형 큐(Circular Queue, CQ) 방식을 이용하여 데이터를 전달할 수 있다.
유니커널과 리눅스간 IO 오프로드 통신 채널은 각 CPU 코어 별로 하나의 통신 채널(CQ)이 할당되어, 전체 통신 채널 개수는 유니커널을 위한 전체 코어 개수로 구성될 수 있다.
또한, IO 오프로드 프록시(11)는 통신채널(CQ)에 IO 오프로드 요청이 존재하는지 검사하는 CQ 와처(Circular Queue watcher, CQ watcher)와 CQ watcher로부터 IO 오프로드 요청 내에 포함된 IO을 수행하는 쓰레드 풀(Thread pool)을 포함할 수 있다.
쓰레드 풀은 각 통신채널 별 또는 유니커널 별로 생성될 수 있으며, 각 쓰레드 풀은 IO을 수행하기 위해 미리 생성된 다수의 쓰레드들을 포함할 수 있다.
예를 들어, 쓰레드 풀의 쓰레드 개수는 쓰레드 풀을 통신 채널 별로 만들 경우 CQ element의 개수로 구성될 수 있고, 유니커널 별로 만들 경우, CQ element의 개수와 유니커널에 할당된 채널 개수를 곱하여 구성될 수 있다.
CQ watcher는 자신이 담당하는 통신 채널들을 검사하고 쓰레드 풀에 IO job을 전달하여 쓰레드 풀이 쓰레드를 수행할 수 있다.
즉, CQ watcher는 자신이 담당하는 통신 채널들을 검사하여 특정 통신 채널에 IO 오프로드 요청이 존재하는 경우, 쓰레드 풀로 IO 오프로드 요청 내 포함된 IO job을 전달할 수 있다.
한편, 쓰레드 풀은 CQ watcher로 부터 전달받은 IO job을 처리하기 위해 다수의 쓰레드를 미리 생성하여 대기 상태로 준비할 수 있다. 쓰레드 풀은 CQ watcher로 부터 전달받은 IO job을 대기하고 있는 쓰레드들 중에 하나를 선택하여 IO job을 수행할 수 있다.
도 3 및 도 4는 본 발명의 일실시예에 따른 파일 입출력 오프로드 프록시의 입출력 오프로드 가속화 과정을 나타낸 도면이다.
도 3 및 도 4에서, T는 IO 스레드, Rq는 IO 오프로드 요청, J는 IO job, Rt는 IO 오프로드 결과, D는 데이터, CQ는 원형 큐(Circular Queue))를 나타낸 것을 알 수 있다.
도 3을 참조하면, 유니커널은 IO 오프로드 요청을 IO 오프로드 프록시(11)에 전달하고, IO 오프로드 프록시(11)는 IO 오프로드 요청을 처리하고, IO 오프로드 결과를 유니커널에게 전달되는 과정을 나타낸 것을 알 수 있다.
유니커널의 응용 프로그램이 IO 함수를 수행하면, 해당 IO 오프로드 요청(IO offload request)은 유니커널 라이브러리(130)를 통하여 해당 코어의 CQ에 입력될 수 있다.
IO 오프로드 프록시(11)의 CQ watcher는 CQ를 검사하여 유니커널의 IO 오프로드 요청이 입력된 것을 확인할 수 있다.
CQ watcher는 IO 오프로드 요청에 대한 IO job을 파라미터로 하여 쓰레드 풀에 존재하는 쓰레드를 수행할 수 있다. 이 때, 쓰레드 풀에는 IO 오프로드 프록시 구동 시 생성된 쓰레드들이 수행 대기 상태로 존재할 수 있다.
이 때, 쓰레드는 IO job에서 해당하는 입출력 함수와 그 함수의 파라미터를 이용하여 IO 오프로드를 수행할 수 있다.
이 때, 쓰레드는 IO 함수를 수행하여 파일 시스템 처리부(120)의 디스크로부터 데이터를 읽거나 쓰기 등과 같은 IO 오프로드를 수행할 수 있다.
이 때, 쓰레드의 IO 오프로드 결과가 유니커널의 주소에 파일 시스템 처리부(120)의 디스크로부터 데이터를 읽거나 쓰기 등과 같은 수행 결과로 반영될 수 있다.
파일 시스템 처리부(120)의 디스크로부터 데이터를 읽거나 쓰기 등과 같은 IO 오프로드 수행과 IO 오프로드 결과 생성은 동시에 일어 날 수 있고, 즉, IO 함수에서 수행되는 버퍼의 주소가 유니커널의 물리주소에 매핑되는 리눅스의 가상주소이기 때문에 리눅스에서의 IO 함수의 수행이 유니커널의 메모리로 반영될 수 있다.
이 때, 쓰레드는 IO 오프로드 결과를 CQ에 입력할 수 있다. 이 때, IO 오프로드 결과는 IO 함수의 수행에 대한 결과 값인 return 값에 상응할 수 있다. 예를 들어, read의 경우는 성공하였을 경우 읽은 데이터 크기이며 실패하였을 경우 -1이 될 수 있다.
이 때, 유니커널은 IO 오프로드 프록시(11)로부터 IO 오프로드 결과를 전달받아 IO 오프로드 결과를 확인하고 응용 프로그램이 수행한 IO 함수의 return 값으로 전달할 수 있다.
한편, 유니커널은 리눅스의 IO 오프로드 프록시(11)가 다수의 파일 입출력 오프로드 요청을 병렬로 처리하는 것에 대응하여, IO 오프로드 요청을 동시에 병렬로 처리할 수 있다.
이 때, 유니커널은 리눅스의 IO 오프로드 프록시(11)에서 최대한 많은 IO 오프로드 요청을 처리할 수 있도록 통신 채널의 가용 상태까지 IO 오프로드 요청을 입력할 수 있다.
또한, 유니커널은 IO 오프로드 프록시(11)에서 보낸 IO 오프로드 결과를 신속하게 처리하기 위해, 통신 채널을 통하여 IO 오프로드 결과를 수신하면, IO 오프로드 결과를 스케쥴링하여 IO 오프로드를 가속화 할 수 있다.
이 때, IO 오프로드 결과에 대응하는 쓰레드가 즉시 IO 오프로드 결과를 받을 수 있다.
도 4를 참조하면, IO 오프로드 가속을 위해 유니커널은 어플리케이션 처리부(110)의 응용 프로그램에서 read나 write와 같은 IO 함수가 수행되면 해당 함수에 대한 시스템 콜이 호출될 수 있다.
이 때, 유니커널 라이브러리(130)는 IO 요청을 전달 받으면, IO 오프로드 프록시(11)에 IO 오프로드 요청을 송신하고 IO 오프로드 결과를 수신할 수 있다.
이 때, 유니커널 라이브러리(130)는 IO 오프로드 요청 센더(IO offload request sender, 131) 및 IO 오프로드 결과 리시버(IO offload result receiver, 132)를 포함할 수 있다.
IO 오프로드 요청 센더(131)는 IO 오프로드 요청을 해당 코어의 CQ에 입력하기 위해 CQ를 검사할 수 있다.
이 때, IO 오프로드 요청 센더(131)는 CQ가 가용 상태(available status)이면 해당 IO 오프로드 요청을 해당 코어의 CQ에 입력(Push)하고, IO 오프로드 프록시(11)로부터 IO 수행 결과를 받기 위하여 IO 오프로드 결과 리시버(IO offload result receiver)로 결과를 전달할 수 있다.
이 때, IO 오프로드 요청 센더(131)는 CQ 풀(full) 상태이면 해당 IO 오프로드 요청을 CQ에 입력할 수 없는 상태이므로 다른 쓰레드가 수행될 수 있도록 스케쥴링 할 수 있다.
또한, IO 오프로드 결과 리시버(132)는 IO 오프로드 프록시로부터 IO 수행 결과를 확인하기 위하여 CQ를 검사하고 쓰레드를 스케쥴링 할 수 있다.
이 때, IO 오프로드 결과 리시버(131)는 CQ에 입력된 데이터가 존재하는지 검사하여 CQ에 데이터가 존재하지 않는 경우, 다른 쓰레드가 수행될 수 있도록 스케쥴링을 수행할 수 있다.
또한, IO 오프로드 결과 리시버(131)는 CQ에 입력된 데이터가 존재하고, CQ에 입력된 데이터가 자신의 IO 오프로드 결과인지를 검사할 수 있다.
이 때, IO 오프로드 결과 리시버(131)는 자신의 IO 오프로드 결과가 아닌 다른 쓰레드의 IO 오프로드 결과인 경우, 다른 쓰레드가 CQ의 IO 오프로드 결과를 액세스할 수 있도록 다른 쓰레드로 스케쥴링 할 수 있다.
또한, IO 오프로드 결과 리시버(131)는 자신의 IO 오프로드 결과인 경우, CQ를 읽어서(Pop) IO 오프로드 결과를 수신하고, 어플리케이션 처리부(110)의 응용 프로그램으로 IO 오프로드 결과를 전달할 수 있다.
즉, IO 오프로드 결과 리시버(131)는 쓰레드의 스케쥴링을 수행하여 유니커널의 파일 입출력 및 CPU 가용 효율성을 높일 수 있다.
도 5는 본 발명의 일실시예에 따른 파일 입출력 오프로드 프록시 및 유니커널의 파일 입출력 오프로드 가속화를 통한 파일 입출력 오프로드 처리 과정을 나타낸 도면이다.
도 5를 참조하면, IO 오프로드 프록시 및 유니커널의 IO 오프로드 가속화를 통한 IO 오프로드 처리 과정을 나타낸 것을 알 수 있다.
도 5에서, T는 IO 스레드, Rq는 IO 오프로드 요청, J는 IO job, Rt는 IO 오프로드 결과, D는 데이터, CQ는 원형 큐(Circular Queue))를 나타낸 것을 알 수 있다.
먼저 유니커널에서 쓰레드(Thread7)가 IO 오프로드 요청(Rq7)을 CQ에 입력하는 것을 알 수 있다.
이 때, 리눅스의 CQ 와처가 CQ에 IO 오프로드 요청(Rq5)을 전달받아 쓰레드 풀의 쓰레드(T-J5)에 IO 수행(J5)을 요청하여 쓰레드(T-J5)가 시작되는 것을 알 수 있다.
기존에 쓰레드들(T-J3, T-J4)은 IO를 동시에 수행하고, IO 수행을 마친 쓰레드(T-J2)가 CQ에 IO 오프로드 결과(Rt2)를 CQ에 입력하는 것을 알 수 있다.
유니커널의 쓰레드(Thread1)는 CQ에서 IO 오프로드 결과(Rt1)를 읽는 것을 알 수 있다.
이를 통해 유니커널과 리눅스의 IO 오프로드 프록시간 CQ를 이용한 IO 오프로드를 통하여 파일 입출력이 가속되는 것을 알 수 있다.
도 6은 본 발명의 일실시예에 따른 유니커널을 위한 파일 입출력 오프로드 가속 방법을 나타낸 시퀀스 다이어그램이다.
도 6을 참조하면, 본 발명의 일실시예에 따른 유니커널을 위한 파일 입출력 오프로드 가속 방법은 먼저, 호스트 서버(10)의 리눅스에서 IO 오프로드 프록시를 구동할 수 있다(S210).
이 때, 호스트 서버(10)의 리눅스는 CQ 와처 및 쓰레드 풀을 구성할 수 있다(S220).
또한, 본 발명의 일실시예에 따른 유니커널을 위한 파일 입출력 오프로드 가속 방법은 유니커널을 위한 파일 입출력 오프로드 가속 장치(100)의 유니커널에서 응용 프로그램을 시작할 수 있다(S230).
이 때, 유니커널은 응용 프로그램을 실행하여 쓰레드에서 파일 입출력 함수를 호출할 수 있다(S240).
이 때, 유니커널은 파일 입출력 함수를 이용하여 파일 입출력 오프로드 요청을 생성할 수 있다(S250).
이 때, 유니커널은 호스트 서버(10)의 리눅스에게 파일 입출력 오프로드 요청을 송신할 수 있다(S260).
이 때, 호스트 서버(10)의 리눅스는 CQ 와처를 통해 파일 입출력 오프로드 요청을 수신할 수 있다(S270).
이 때, 단계(S270)는 상기 호스트 서버(10)의 리눅스와 유니커널이, 공유 메모리 영역을 생성하고, 상기 공유 메모리 영역을 기반으로 원형 큐 방식을 이용하여 상기 유니커널과 파일 입출력 오프로드 통신을 수행할 수 있다.
이 때, 단계(S270)는 상기 원형 큐에 상기 유니커널과 상기 리눅스 간 복수의 파일 입출력 오프로드 통신 채널들을 유니커널의 각 CPU 코어 별로 하나씩 할당할 수 있다.
이 때, 호스트 서버(10)의 리눅스는 CQ 와처에서 IO 오프로드 정보를 이용하여 쓰레드 풀의 쓰레드를 호출할 수 있다(S280).
이 때, 단계(S280)는 상기 호스트 서버(10)의 리눅스가, 상기 원형 큐에 할당된 상기 복수의 파일 입출력 오프로드 통신 채널들을 검사하여, 상기 파일 입출력 오프로드 요청을 확인하고, 상기 파일 입출력 오프로드 요청에 포함된 파일 입출력 오프로드 정보를 이용하여 상기 파일 입출력 함수와 상기 파일 입출력 함수를 수행하는데 필요한 파라미터를 인자로 이용하여 상기 쓰레드 풀의 쓰레드를 호출할 수 있다.
이 때, 호스트 서버(10)의 리눅스는 쓰레드 풀의 쓰레드를 이용하여 파일 입출력 오프로드를 처리할 수 있다(S290).
이 때, 상기 쓰레드 풀의 쓰레드들은 쓰레드들 간에 순서에 상관없이 파일 입출력 수행을 병렬로 처리할 수 있다.
이 때, 호스트 서버(10)의 리눅스는 쓰레드 풀의 쓰레드를 이용하여 파일 입출력 오프로드 결과를 유니커널에 송신할 수 있다(S300).
이 때, 단계(S300)는 상기 호스트 서버(10)의 리눅스가, 상기 호출된 쓰레드에서 처리된 상기 파일 입출력 오프로드 결과를 상기 원형 큐에 할당하고, 상기 원형 큐를 통해 상기 유니커널에 상기 파일 입출력 오프로드 결과를 전달할 수 있다.
또한, 유니커널은 파일 입출력 오프로드 결과를 수신할 수 있다(S310).
이 때, 유니커널은 파일 입출력 오프로드 결과를 해당하는 쓰레드로 전달하고, 스케쥴링을 수행 할 수 있다(S320).
이 때, 단계(S320)는 상기 원형 큐에 할당된 파일 입출력 오프로드 결과가 상기 파일 입출력 오프로드 요청에 상응하는지 검사하고, 상기 파일 입출력 오프로드 요청에 상응하지 않는 경우, 상기 파일 입출력 오프로드 요청에 상응하는 다른 쓰레드로 스케쥴링 할 수 있다.
이 때, 단계(S320)는 상기 파일 입출력 오프로드 요청을 상기 원형 큐에 전달하여 파일 입출력 오프로드 요청을 스케쥴링할 수 있다.
이 때, 유니커널은 해당 쓰레드를 이용하여 파일 입출력 오프로드 결과에 대한 파일 입출력 오프로드를 처리할 수 있다(S330).
즉, 단계(S330)는 상기 원형 큐가 가용 상태인 경우, 상기 파일 입출력 오프로드 요청을 상기 원형 큐에 전달하고, 상기 원형 큐가 풀 상태인 경우, 상기 원형 큐에 할당된 파일 입출력 오프로드 결과에 상응하는 쓰레드를 다른 쓰레드로 스케쥴링하여 파일 입출력 오프로드를 가속화할 수 있다.
도 7은 본 발명의 일실시예에 따른 컴퓨터 시스템을 나타낸 도면이다.
도 7을 참조하면, 본 발명의 일실시예에 따른 유니커널을 위한 파일 입출력 오프로드 가속 장치(100) 및 파일 입출력 오프로드 가속 서버에 상응하는 호스트 서버(10)는 컴퓨터로 읽을 수 있는 기록매체와 같은 컴퓨터 시스템(1100)에서 구현될 수 있다. 도 7에 도시된 바와 같이, 컴퓨터 시스템(1100)은 버스(1120)를 통하여 서로 통신하는 하나 이상의 프로세서(1110), 메모리(1130), 사용자 인터페이스 입력 장치(1140), 사용자 인터페이스 출력 장치(1150) 및 스토리지(1160)를 포함할 수 있다. 또한, 컴퓨터 시스템(1100)은 네트워크(1180)에 연결되는 네트워크 인터페이스(1170)를 더 포함할 수 있다. 프로세서(1110)는 중앙 처리 장치 또는 메모리(1130)나 스토리지(1160)에 저장된 프로세싱 인스트럭션들을 실행하는 반도체 장치일 수 있다. 메모리(1130) 및 스토리지(1160)는 다양한 형태의 휘발성 또는 비휘발성 저장 매체일 수 있다. 예를 들어, 메모리는 ROM(1131)이나 RAM(1132)을 포함할 수 있다.
본 발명의 일실시예에 따른 유니커널을 위한 파일 입출력 오프로드 가속 장치는 하나 이상의 프로세서(1110); 및 상기 하나 이상의 프로세서(1110)에 의해 실행되는 적어도 하나 이상의 프로그램을 저장하는 실행메모리(1130)를 포함하고, 상기 적어도 하나 이상의 프로그램은 유니커널에서 응용 프로그램을 실행하여 상기 응용 프로그램의 쓰레드가 파일 입출력 함수를 호출하고, 상기 파일 입출력 함수를 이용하여 파일 입출력 오프로드 요청을 생성하고, 호스트 서버의 리눅스에게 파일 입출력 오프로드 요청을 송신하고, 상기 유니커널이 상기 호스트 서버의 리눅스로부터 상기 파일 입출력 오프로드 요청을 처리한 결과인 파일 입출력 오프로드 결과를 수신하고, 상기 파일 입출력 오프로드 결과를 상기 응용 프로그램의 쓰레드로 전달한다.
이 때, 상기 적어도 하나 이상의 프로그램은 상기 유니커널의 쓰레드가 상기 파일 입출력 오프로드 결과를 전달받을 수 있도록 파일 입출력 오프로드를 스케쥴링하여 상기 파일 입출력 오프로드를 가속화 할 수 있다.
이 때, 상기 적어도 하나 이상의 프로그램은 공유 메모리 영역을 생성하고, 상기 공유 메모리 영역을 기반으로 원형 큐 방식을 이용하여 상기 리눅스와 상기 유니커널간 파일 입출력 오프로드 통신을 수행할 수 있다.
이 때, 상기 적어도 하나 이상의 프로그램은 상기 원형 큐에 할당된 파일 입출력 오프로드 결과가 상기 파일 입출력 오프로드 요청에 상응하는지 검사할 수 있다.
이 ‹š, 상기 적어도 하나 이상의 프로그램은 상기 파일 입출력 오프로드 결과가 상기 파일 입출력 오프로드 요청에 상응하지 않는 경우, 상기 쓰레드를 상기 파일 입출력 오프로드 요청에 상응하는 쓰레드로 스케쥴링 하여 파일 입출력 오프로드를 가속화할 수 있다.
이 때, 상기 적어도 하나 이상의 프로그램은 상기 원형 큐가 가용 상태인 경우, 상기 파일 입출력 오프로드 요청을 상기 원형 큐에 전달하고, 상기 원형 큐가 풀 상태인 경우, 상기 원형 큐에 할당하려는 파일 입출력 오프로드 요청에 상응하는 쓰레드를 다른 쓰레드로 스케쥴링하여 상기 파일 입출력 오프로드를 가속화할 수 있다.
또한, 본 발명의 일실시예에 따른 유니커널을 위한 파일 입출력 오프로드 가속 장치는 하나 이상의 프로세서(1110); 및 상기 하나 이상의 프로세서(1110)에 의해 실행되는 적어도 하나 이상의 프로그램을 저장하는 실행메모리(1130)를 포함하고, 상기 적어도 하나 이상의 프로그램은 유니커널의 쓰레드로부터 파일 입출력 오프로드 요청을 수신하고, 리눅스에서 상기 파일 입출력 오프로드 요청을 처리하고, 상기 리눅스에서 상기 유니커널로 파일 입출력 오프로드 결과를 송신할 수 있다.
이 때, 상기 적어도 하나 이상의 프로그램은 공유 메모리 영역을 생성하고, 상기 공유 메모리 영역을 기반으로 원형 큐 방식을 이용하여 상기 유니커널과 파일 입출력 오프로드 통신을 수행할 수 있다.
이 때, 상기 적어도 하나 이상의 프로그램은상기 원형 큐에 상기 유니커널과 상기 리눅스 간 복수의 파일 입출력 오프로드 통신 채널들을 상기 유니커널의 각 CPU 코어 별로 하나씩 할당할 수 있다.
이 때, 상기 적어도 하나 이상의 프로그램은 상기 원형 큐에 할당된 상기 복수의 파일 입출력 오프로드 통신 채널들을 검사하여, 상기 파일 입출력 오프로드 요청을 확인할 수 있다.
이 때, 적어도 하나 이상의 프로그램은상기 파일 입출력 오프로드 요청에 포함된 파일 입출력 오프로드 정보를 이용하여 상기 파일 입출력 함수와 상기 파일 입출력 함수를 수행하는데 필요한 파라미터를 인자로 하는 쓰레드 풀의 쓰레드를 호출하여 파일 입출력 오프로드를 가속화 할 수 있다.
이 때, 상기 쓰레드 풀의 쓰레드들은 쓰레드들 간에 파일 입출력 수행을 병렬로 처리하여 상기 파일 입출력 오프로드를 가속화 할 수 있다.
이 때, 적어도 하나 이상의 프로그램은 상기 호출된 쓰레드에서 처리된 상기 파일 입출력 오프로드 결과를 상기 원형 큐에 할당하고, 상기 원형 큐를 통해 상기 유니커널에 상기 파일 입출력 오프로드 결과를 전달할 수 있다.
이상에서와 같이 본 발명의 일실시예에 따른 유니커널을 위한 파일 입출력 오프로드 가속 장치, 서버 및 방법은 상기한 바와 같이 설명된 실시예들의 구성과 방법이 한정되게 적용될 수 있는 것이 아니라, 상기 실시예들은 다양한 변형이 이루어질 수 있도록 각 실시예들의 전부 또는 일부가 선택적으로 조합되어 구성될 수도 있다.
10: 호스트 서버 11: IO 오프로드 프록시
12: 파일 시스템 처리부 13: 저장부
100: 유니커널을 위한 파일 입출력 오프로드 가속 장치
110: 어플리케이션 처리부 120: 런타임 라이브러리
130: 유니커널 라이브러리
1100: 컴퓨터 시스템 1110: 프로세서
1120: 버스 1130: 메모리
1131: 롬 1132: 램
1140: 사용자 인터페이스 입력 장치
1150: 사용자 인터페이스 출력 장치
1160: 스토리지 1170: 네트워크 인터페이스
1180: 네트워크

Claims (20)

  1. 하나 이상의 프로세서; 및
    상기 하나 이상의 프로세서에 의해 실행되는 적어도 하나 이상의 프로그램을 저장하는 실행메모리를 포함하고,
    상기 적어도 하나 이상의 프로그램은
    유니커널에서 응용 프로그램을 실행하여 상기 응용 프로그램의 쓰레드가 파일 입출력 함수를 호출하고,
    상기 파일 입출력 함수를 이용하여 파일 입출력 오프로드 요청을 생성하고,
    호스트 서버의 리눅스에게 파일 입출력 오프로드 요청을 송신하고,
    상기 유니커널이 상기 호스트 서버의 리눅스로부터 상기 파일 입출력 오프로드 요청을 처리한 결과인 파일 입출력 오프로드 결과를 수신하고,
    상기 파일 입출력 오프로드 결과를 상기 응용 프로그램의 쓰레드로 전달하고,
    상기 적어도 하나 이상의 프로그램은
    상기 유니커널의 쓰레드가 상기 파일 입출력 오프로드 결과를 전달받을 수 있도록 파일 입출력 오프로드를 스케쥴링하여 상기 파일 입출력 오프로드를 처리하고,
    공유 메모리 영역을 생성하고, 상기 공유 메모리 영역을 기반으로 원형 큐 방식을 이용하여 상기 리눅스와 상기 유니커널 간 파일 입출력 오프로드 통신을 수행하고,
    상기 원형 큐에 할당된 파일 입출력 오프로드 결과가 상기 파일 입출력 오프로드 요청에 상응하는지 검사하여 상기 파일 입출력 오프로드 요청을 확인하고,
    상기 파일 입출력 오프로드 결과가 상기 파일 입출력 오프로드 요청에 상응하지 않는 경우, 상기 쓰레드를 상기 파일 입출력 오프로드 요청에 상응하는 쓰레드로 스케쥴링 하여 파일 입출력 오프로드를 가속화하는 것을 특징으로 하는 유니커널을 위한 파일 입출력 오프로드 가속 장치.
  2. 삭제
  3. 삭제
  4. 삭제
  5. 삭제
  6. 청구항 1에 있어서,
    상기 적어도 하나 이상의 프로그램은
    상기 원형 큐가 가용 상태인 경우, 상기 파일 입출력 오프로드 요청을 상기 원형 큐에 전달하고, 상기 원형 큐가 풀 상태인 경우, 상기 원형 큐에 할당하려는 파일 입출력 오프로드 요청에 상응하는 쓰레드를 다른 쓰레드로 스케쥴링하여 상기 파일 입출력 오프로드를 가속화 것을 특징으로 하는 유니커널을 위한 파일 입출력 오프로드 가속 장치.
  7. 하나 이상의 프로세서; 및
    상기 하나 이상의 프로세서에 의해 실행되는 적어도 하나 이상의 프로그램을 저장하는 실행메모리를 포함하고,
    상기 적어도 하나 이상의 프로그램은
    유니커널의 쓰레드로부터 파일 입출력 오프로드 요청을 수신하고,
    리눅스에서 상기 파일 입출력 오프로드 요청을 처리하고,
    상기 리눅스에서 상기 유니커널로 파일 입출력 오프로드 결과를 송신하고,
    상기 적어도 하나 이상의 프로그램은
    공유 메모리 영역을 생성하고, 상기 공유 메모리 영역을 기반으로 원형 큐 방식을 이용하여 상기 유니커널과 파일 입출력 오프로드 통신을 수행하고,
    상기 원형 큐에 할당된 상기 복수의 파일 입출력 오프로드 통신 채널들을 검사하여, 상기 파일 입출력 오프로드 요청을 확인하고,
    상기 원형 큐에 상기 유니커널과 상기 리눅스 간 복수의 파일 입출력 오프로드 통신 채널들을 상기 유니커널의 각 CPU 코어 별로 하나 씩 할당하는 것을 특징으로 하는 유니커널을 위한 파일 입출력 오프로드 가속 서버.
  8. 삭제
  9. 삭제
  10. 삭제
  11. 청구항 7에 있어서,
    상기 적어도 하나 이상의 프로그램은
    상기 파일 입출력 오프로드 요청에 포함된 파일 입출력 오프로드 정보를 이용하여 상기 유니커널이 응용 프로그램을 실행하여 쓰레드에서 호출된 파일 입출력 함수와 상기 파일 입출력 함수를 수행하는데 필요한 파라미터를 인자로 하는 쓰레드 풀의 쓰레드를 호출하여 파일 입출력 오프로드를 가속화 하는 것을 특징으로 하는 유니커널을 위한 파일 입출력 오프로드 가속 서버.
  12. 청구항 11에 있어서,
    상기 쓰레드 풀의 쓰레드들은
    쓰레드들 간에 파일 입출력 수행을 병렬로 처리하여 상기 파일 입출력 오프로드를 가속화 하는 것을 특징으로 하는 유니커널을 위한 파일 입출력 오프로드 가속 서버.
  13. 청구항 12에 있어서,
    상기 적어도 하나 이상의 프로그램은
    상기 호출된 쓰레드에서 처리된 상기 파일 입출력 오프로드 결과를 상기 원형 큐에 할당하고, 상기 원형 큐를 통해 상기 유니커널에 상기 파일 입출력 오프로드 결과를 전달하는 것을 특징으로 하는 유니커널을 위한 파일 입출력 오프로드 가속 서버.
  14. 유니커널을 위한 파일 입출력 오프로드 가속 장치와 서버의 유니커널을 위한 파일 입출력 오프로드 가속 방법에 있어서,
    상기 파일 입출력 오프로드 가속 장치가, 유니커널에서 응용 프로그램을 실행하여 상기 응용 프로그램의 쓰레드가 파일 입출력 함수를 호출하는 단계;
    상기 유니커널이, 상기 파일 입출력 함수를 이용하여 파일 입출력 오프로드 요청을 생성하는 단계;
    상기 유니커널이, 상기 서버의 리눅스에게 파일 입출력 오프로드 요청을 송신하는 단계;
    상기 리눅스가, 상기 유니커널의 쓰레드로부터 상기 파일 입출력 오프로드 요청을 수신하고, 상기 파일 입출력 오프로드 요청을 처리하는 단계;
    상기 리눅스가, 상기 유니커널에게 상기 파일 입출력 오프로드 요청에 대한 파일 입출력 오프로드 결과를 송신하는 단계; 및
    상기 파일 입출력 오프로드 결과를 상기 응용 프로그램의 쓰레드로 전달하는 단계;
    를 포함하고,
    상기 파일 입출력 오프로드 요청을 송신하는 단계는
    상기 유니커널과 상기 리눅스가, 공유 메모리 영역을 생성하고, 상기 공유 메모리 영역을 기반으로 원형 큐 방식을 이용하여 상기 유니커널과 상기 리눅스가, 파일 입출력 오프로드 통신을 수행하고,
    상기 리눅스가, 상기 원형 큐에 상기 유니커널과 상기 리눅스 간 복수의 파일 입출력 오프로드 통신 채널들을 상기 유니커널의 각 CPU 코어 별로 하나 씩 할당하는 것을 특징으로 하는 유니커널을 위한 파일 입출력 오프로드 가속 방법.
  15. 삭제
  16. 삭제
  17. 청구항 14에 있어서,
    상기 파일 입출력 오프로드 요청을 송신하는 단계는
    상기 유니커널이, 상기 원형 큐가 가용 상태인 경우, 상기 파일 입출력 오프로드 요청을 상기 원형 큐에 전달하고, 상기 원형 큐가 풀 상태인 경우 상기 원형 큐에 할당하려는 파일 입출력 오프로드 요청에 상응하는 쓰레드를 다른 쓰레드로 스케쥴링하여 상기 파일 입출력 오프로드를 가속화 하는 것을 특징으로 하는 유니커널을 위한 파일 입출력 오프로드 가속 방법.
  18. 청구항 14에 있어서,
    상기 파일 입출력 오프로드 요청을 처리하는 단계는
    상기 리눅스가, 상기 파일 입출력 오프로드 요청에 포함된 파일 입출력 오프로드 정보를 이용하여 상기 파일 입출력 함수와 상기 파일 입출력 함수를 수행하는데 필요한 파라미터를 인자로 이용하여 쓰레드 풀의 쓰레드를 호출하여 파일 입출력 오프로드를 가속화 하는 것을 특징으로 하는 유니커널을 위한 파일 입출력 오프로드 가속 방법.
  19. 청구항 18에 있어서,
    상기 쓰레드 풀의 쓰레드들은
    쓰레드들 간에 파일 입출력 수행을 병렬로 처리하여 상기 파일 입출력 오프로드를 가속화 하는 것을 특징으로 하는 유니커널을 위한 파일 입출력 오프로드 가속 방법.
  20. 청구항 14에 있어서,
    상기 파일 입출력 오프로드 결과를 상기 응용 프로그램의 쓰레드로 전달하는 단계는
    상기 파일 입출력 오프로드 결과가 상기 파일 입출력 오프로드 요청에 상응하지 않는 경우, 상기 쓰레드를 상기 파일 입출력 오프로드 요청에 상응하는 쓰레드로 스케쥴링 하여 파일 입출력 오프로드를 가속화하는 것을 특징으로 하는 유니커널을 위한 파일 입출력 오프로드 가속 방법.
KR1020210057436A 2020-06-08 2021-05-03 유니커널을 위한 파일 입출력 오프로드 가속 장치, 서버 및 방법 KR102504274B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US17/340,986 US20210382752A1 (en) 2020-06-08 2021-06-07 Server, apparatus, and method for accelerating file input-output offload for unikernel

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR1020200069214 2020-06-08
KR20200069214 2020-06-08

Publications (2)

Publication Number Publication Date
KR20210152382A KR20210152382A (ko) 2021-12-15
KR102504274B1 true KR102504274B1 (ko) 2023-02-28

Family

ID=78865808

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210057436A KR102504274B1 (ko) 2020-06-08 2021-05-03 유니커널을 위한 파일 입출력 오프로드 가속 장치, 서버 및 방법

Country Status (1)

Country Link
KR (1) KR102504274B1 (ko)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102244682A (zh) 2011-07-19 2011-11-16 中国科学院软件研究所 一种云计算环境下的隐蔽通信方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6832266B1 (en) * 2000-02-07 2004-12-14 Sun Microsystems, Inc. Simplified microkernel application programming interface
KR101134464B1 (ko) * 2009-05-19 2012-04-13 한국전자통신연구원 네트워크 비동기 입출력 방법 및 장치
KR101499890B1 (ko) * 2013-05-15 2015-03-06 주식회사 코스콤 Low Latency 프레임워크 시스템
KR102442118B1 (ko) * 2018-11-12 2022-09-13 한국전자통신연구원 유니커널을 이용하는 원격 직접 메모리 접근 기반 파일 입출력 오프로드 방법 및 장치

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102244682A (zh) 2011-07-19 2011-11-16 中国科学院软件研究所 一种云计算环境下的隐蔽通信方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
차승준 외 5명. 유니커널의 동향과 매니코어 시스템에 적용. 2018년

Also Published As

Publication number Publication date
KR20210152382A (ko) 2021-12-15

Similar Documents

Publication Publication Date Title
KR102450528B1 (ko) 애플리케이션을 인식하는 효율적인 io 스케줄러 시스템 및 방법
US9710310B2 (en) Dynamically configurable hardware queues for dispatching jobs to a plurality of hardware acceleration engines
US5276879A (en) Portable, resource sharing file server using co-routines
US8478926B1 (en) Co-processing acceleration method, apparatus, and system
WO2017070900A1 (zh) 多核数字信号处理系统中处理任务的方法和装置
US6629124B1 (en) Multimedia data transferring method
JP2009265963A (ja) 情報処理システム及びタスクの実行制御方法
CN115167996A (zh) 调度方法及装置、芯片、电子设备及存储介质
CN111240813A (zh) 一种dma调度方法、装置和计算机可读存储介质
US10877790B2 (en) Information processing apparatus, control method and storage medium
CN114168302A (zh) 任务调度方法、装置、设备及存储介质
KR102504274B1 (ko) 유니커널을 위한 파일 입출력 오프로드 가속 장치, 서버 및 방법
CN116841936B (zh) 一种多设备的数据处理方法、装置、系统和计算机设备
US20150121376A1 (en) Managing data transfer
CN116048756A (zh) 一种队列调度方法、装置及相关设备
US7130936B1 (en) System, methods, and computer program product for shared memory queue
CN113407357A (zh) 进程间数据搬移的方法及装置
US20210382752A1 (en) Server, apparatus, and method for accelerating file input-output offload for unikernel
WO2022151766A1 (zh) 一种io请求流水线处理设备、方法、系统及存储介质
CN117632392A (zh) 任务调度的方法和电子设备
US20210392117A1 (en) Tunnel Portals Between Isolated Partitions
US11915041B1 (en) Method and system for sequencing artificial intelligence (AI) jobs for execution at AI accelerators
JP5540799B2 (ja) データ入出力制御方法,データ入出力制御プログラムおよびデータ入出力制御装置
US7320044B1 (en) System, method, and computer program product for interrupt scheduling in processing communication
Jeong et al. Azalea unikernel IO offload acceleration

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