[go: up one dir, main page]

KR102442118B1 - 유니커널을 이용하는 원격 직접 메모리 접근 기반 파일 입출력 오프로드 방법 및 장치 - Google Patents

유니커널을 이용하는 원격 직접 메모리 접근 기반 파일 입출력 오프로드 방법 및 장치 Download PDF

Info

Publication number
KR102442118B1
KR102442118B1 KR1020190086140A KR20190086140A KR102442118B1 KR 102442118 B1 KR102442118 B1 KR 102442118B1 KR 1020190086140 A KR1020190086140 A KR 1020190086140A KR 20190086140 A KR20190086140 A KR 20190086140A KR 102442118 B1 KR102442118 B1 KR 102442118B1
Authority
KR
South Korea
Prior art keywords
file
output
input
file input
unikernel
Prior art date
Legal status (The legal status 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 status listed.)
Active
Application number
KR1020190086140A
Other languages
English (en)
Other versions
KR20200054854A (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 US16/582,597 priority Critical patent/US20200151118A1/en
Publication of KR20200054854A publication Critical patent/KR20200054854A/ko
Application granted granted Critical
Publication of KR102442118B1 publication Critical patent/KR102442118B1/ko
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files

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)
  • Multi Processors (AREA)

Abstract

본 발명에 따른 유니커널을 이용하는 원격 직접 메모리 접근(Remote Direct Memory Access, RDMA) 기반 파일 입출력 오프로드 장치의 동작 방법은, 상기 유니커널의 응용 프로그램에서 파일 입출력 커널 함수를 호출하는 단계, 상기 파일 입출력 커널 함수에서 파일 입출력 정보를 생성하는 단계, 상기 유니커널에서 상기 파일 입출력 정보를 리눅스로 전송하는 단계, 상기 리눅스에서 상기 파일 입출력 정보를 이용하여 파일 입출력 함수를 구성 및 호출하는 단계, 및 상기 파일 입출력 함수에서 상기 파일 입출력 정보에 대응하는 파일 입출력 요청을 파일 서버로 전송하는 단계를 포함할 수 있다.

Description

유니커널을 이용하는 원격 직접 메모리 접근 기반 파일 입출력 오프로드 방법 및 장치{METHOD AND APPARATUS FOR OFFLOADING FILE I/O BASED ON REMOTE DIRET MEMORY ACCESS USING UNIKERNEL}
본 발명은 유니커널(Unikernel)을 이용하는 RDMA(Remote Direct Memory Access) 기반 파일 입출력 오프로드 방법 및 장치에 관한 것이다.
일반적으로, 유니커널은 별도의 운영 체제없이 실행할 수 있는 실행 가능한 이미지이다. 이러한 이미지는 응용 프로그램 코드와 대응하는 응용 프로그램에 필요한 모든 운영 체제 기능을 포함한다. 유니커널은 애플리케이션 코드를 대응하는 애플리케이션 구동에 필요한 최소한의 운영체제 요소와 결합함으로써, 부팅 시간과 용량 및 공격 표면을 크게 줄일 수 있다. 유니커널은 기존 운영 체제보다 크기가 작아 훨씬 신속하고 안전하게 시작 및 종료 할 수 있다. 유니커널은 파일시스템과 같은 크기가 큰 모듈을 자신의 라이브러리에 포함하지 않기 때문에 파일 입출력을 처리하기 위해 오프로드하는 방식을 채택한다. 하지만, 이러한 유니커널의 IO(Input/Output) 오프로드의 처리는, 호스트 서버의 프록시에 파일 입출력 명령을 전송하고 프록시가 수행한 파일 입출력 결과를 프록시로부터 복사 받아 사용하기 때문에 유니커널의 장점인 신속한 처리를 상쇄시키는 결과를 초래할 수 있다.
한국공개특허: 10-2016-0142681, 공개일: 2016년 12월 13일, 제목: 근접 소형셀 파일 클라우드를 이용하는 오프로딩 장치 및 방법. 미국공개특허: US 2010-0161855, 공개일: 2010년 6월 24일, 제목: LIGHWEIGHT INPUT/OUTPUT PROTOCOL. 미국공개특허: US 2019/0114193, 공개일: 2019년 4월 18일, 제목: METHOD FOR PROCESSING INPUT AND OUTPUT ON MULTI KERNEL SYSTEM AND APPARATUS FOR THE SAME.
본 발명의 목적은 유니커널에서 고속으로 파일 입출력을 수행할 수 있는 파일 입출력 오프로드 방법 및 장치를 제공하는데 있다.
본 발명의 목적은 유니커널 응용 프로그램에 파일 입출력을 지원하기 위해 리눅스에 파일 입출력을 오프로드함으로써 파일 서버의 NVMe 디바이스상의 데이터를 RDMA를 통하여 유니커널 응용 프로그램의 버퍼로 고속 입출력하는 파일 입출력 오프로드 방법 및 장치를 제공하는데 있다.
본 발명의 기술적 과제들은 이상에서 언급한 기술적 과제들로 제한되지 않으며, 언급되지 않은 또 다른 기술적 과제들은 아래의 기재들로부터 당업자에게 명확하게 이해될 수 있을 것이다
본 발명의 실시 예에 따른 유니커널을 이용하는 원격 직접 메모리 접근(Remote Direct Memory Access; RDMA) 기반 파일 입출력 오프로드 장치의 동작 방법은, 상기 유니커널의 응용 프로그램에서 파일 입출력 커널 함수를 호출하는 단계; 상기 파일 입출력 커널 함수에서 파일 입출력 정보를 생성하는 단계; 상기 유니커널에서 상기 파일 입출력 정보를 리눅스로 전송하는 단계; 상기 리눅스에서 상기 파일 입출력 정보를 이용하여 파일 입출력 함수를 구성 및 호출하는 단계; 및 상기 파일 입출력 함수에서 상기 파일 입출력 정보에 대응하는 파일 입출력 요청을 파일 서버로 전송하는 단계를 포함할 수 있다.
실시 예에 있어서, 상기 파일 입출력 정보를 생성하는 단계는, 파일 입출력 버퍼에 대한 연속적인 물리 주소 구간을 추출하는 단계; 및 상기 추출된 물리 주소 구간에 대응하는 IO 벡터를 생성하는 단계를 포함할 수 있다.
실시 예에 있어서, 상기 리눅스의 파일 입출력 프록시를 구동하는 단계를 더 포함할 수 있다.
실시 예에 있어서, 상기 파일 입출력 프록시에서 상기 유니커널로부터 상기 파일 입출력 정보를 수신하는 단계를 더 포함할 수 있다.
실시 예에 있어서, 상기 파일 입출력 정보는 파일 입출력 명령, 파일 디스크립터, IO 벡터, 벡터 카운트를 포함하는 것을 특징으로 한다.
실시 예에 있어서, 상기 파일 입출력 요청을 파일 서버로 전송하는 단계는, 상기 리눅스의 파일 시스템 스텁에서 상기 IO 벡터의 개수에 대응하는 상기 입출력 요청을 상기 파일 서버로 전송하는 단계를 포함할 수 있다.
실시 예에 있어서, 상기 리눅스에서 상기 파일 서버로부터 상기 파일 입출력 요청에 대한 결과를 수신하는 단계를 더 포함할 수 있다.
실시 예에 있어서, 상기 파일 입출력 요청에 대한 결과가 성공일 때, 상기 리눅스에서 상기 유니커널로 상기 입출력 요청에 대한 결과를 전송하는 단계를 더 포함할 수 있다.
실시 예에 있어서, 상기 파일 입출력 요청에 응답하여 상기 파일 서버의 데이터를 RDMA(Remote Direct Memory Access) 방식으로 상기 유니커널의 메모리로 입출력시키는 단계를 포함할 수 있다.
본 발명의 실시 예에 따른 유니커널을 이용하는 원격 직접 메모리 접근(Remote Direct Memory Access; RDMA) 기반 파일 입출력 오프로드 장치의 동작 방법은, 파일 서버에서 유니커널 시스템의 리눅스로부터 파일 입출력 요청을 수신하는 단계; 파일 서버에서 상기 파일 입출력 요청에 대응하는 파일 정보를 파일시스템에서 추출하는 단계; 상기 파일 정보를 이용하여 비휘발성 메모리에서 데이터를 입출력하는 단계; 및 상기 입출력된 데이터를 RDMA 엔진을 통하여 상기 유니커널 시스템으로 전송하는 단계를 포함할 수 있다.
실시 예에 있어서, 상기 파일 서버에서 상기 유니커널 시스템의 리눅스로 상기 파일 입출력 요청에 대한 파일 입출력 결과를 전송하는 단계를 더 포함할 수 있다.
실시 예에 있어서, 상기 파일 정보를 상기 파일 시스템에서 추출하는 단계는, 상기 파일 입출력 요청에 포함된 파일 디스크럽터에 대응하는 파일로부터 파일 명령을 수행하기 위한 상기 파일 정보를 추출하는 단계를 포함할 수 있다.
실시 예에 있어서, 상기 파일 서버에서 상기 비휘발성 메모리의 상기 입출력된 데이터를 RDMA NIC(Network Interface Card)로 복사를 명령하는 단계를 더 포함할 수 있다.
실시 예에 있어서, 상기 RDMA 엔진은 상기 입출력된 데이터를 상기 유니커널 시스템의 유니커널의 물리 메모리로 RDMA 방식으로 전송하는 것을 특징으로 한다.
본 발명의 실시 예에 따른 원격 직접 메모리 접근(Remote Direct Memory Access; RDMA) 기반 파일 입출력 오프로드 장치는: 적어도 하나의 프로세서; 및 상기 적어도 하나의 프로세서에 실행되는 유니커널 및 리눅스를 저장하는 메모리를 포함하고, 상기 유니커널은, 응용 프로그램에서 파일 입출력 커널 함수를 호출하고, 상기 파일 입출력 커널 함수에서 파일 입출력 정보를 생성하고; 상기 유니커널에서 상기 파일 입출력 정보를 리눅스로 전송하고, 상기 리눅스는 상기 파일 입출력 정보를 이용하여 파일 입출력 함수를 구성 및 호출하고; 및 상기 파일 입출력 함수에서 상기 파일 입출력 정보에 대응하는 파일 입출력 요청을 파일 서버로 전송하는 것을 특징으로 한다.
실시 예에 있어서, 상기 리눅스는 파일 입출력 프록시를 구동하여 상기 파일 입출력 정보를 상기 유니커널로부터 수신하는 것을 특징으로 한다.
실시 예에 있어서, 상기 리눅스는 상기 파일 입출력 정보를 이용하여 파일 디스크립터에 대응하는 파일에 대하여 IO 벡터 크기만큼 IO 벡터의 물리 주소로 입출력 명령을 상기 파일 서버로 전송하는 것을 특징으로 한다.
실시 예에 있어서, 상기 리눅스는 입출력 명령에 대응하는 결과는 상기 파일 서버로부터 수신하는 것을 특징으로 한다.
실시 예에 있어서, 상기 파일 서버로부터 상기 입출력 명령에 대응하는 데이터를 RDMA 방식으로 입출력하는 RDMA NIC를 더 포함하는 것을 특징으로 한다.
실시 예에 있어서, 상기 리눅스는 상기 파일 서버의 저장 장치에 대한 디바이스 드라이버로 이용되는 것을 특징으로 한다.
본 발명의 실시 예에 따른 파일 입출력 오프로드 방법 및 장치는, 유니커널에서 고속으로 입출력을 수행하기 위해 유니커널에서 발생하는 입출력을 리눅스에 오프로드하며, 오프로드된 파일 입출력은 리눅스와 파일 서버를 통해 NVMe에 저장되어 있는 파일의 데이터를 RDMA 방식으로 유니커널의 메모리에 입출력될 수 있다.
본 발명의 실시 예에 파일 입출력 오프로드 방법 및 장치는, 유니커널 IO는 RDMA를 통하여 네트워크 상의 NVMe 디바이스 데이터 스토리지(Storage)로 접근하기 위해 리눅스에 유니커널의 IO를 오프로드하여 구현된다.
본 발명의 실시 예에 파일 입출력 오프로드 방법 및 장치는, 사용자로 하여금 네트워크 상에서 원격으로 디바이스를 접근하고, 로컬 머신에 접속된 것처럼 모든 디스크 오퍼레이션을 수행하게 할 수 있다.
본 발명의 실시 예에 따른 파일 입출력 오프로드 방법 및 장치는, 유니커널에서 응용 프로그램이 리눅스 및 파일 서버에 파일 입출력 오프로드하고 RDMA 기반으로 고속의 파일 입출력을 수행할 수 있다.
본 발명의 실시 예에 따른 파일 입출력 오프로드 방법 및 장치는, 유니커널에서 파일 입출력 환경을 구축하는데 있어서, 유니커널 환경에서는 구축하기 어려운 범용 운영체제의 소프트웨어 스택(File system, Network File System)을 이용한 것으로 유니커널 측면에서 리눅스로 파일 입출력을 오프로드하고, RDMA(Remote Direct Memory Access)를 통하여 고속으로 파일을 입출력할 수 있다.
본 발명의 실시 예에 따른 파일 입출력 오프로드 방법 및 장치는, 유니커널에서 고속의 파일 입출력을 수행하기 위해 범용 운영체제에 입출력을 오프로드함으로써 파일시스템과 같이 무거운 소프트웨어 스택을 유니커널에서 구성하지 않을 수 있다.
본 발명의 실시 예에 따른 파일 입출력 오프로드 방법 및 장치는, 한 시스템 내에서 다수의 유니커널 응용 프로그램이 구동되어도 각각의 유니커널에서 파일 시스템을 구축할 필요 없이 다수의 유니커널을 경량의 크기와 최적의 수행을 지원하도록 커널 라이브러리를 구성할 수 있다.
이하에 첨부되는 도면들은 본 실시 예에 관한 이해를 돕기 위한 것으로, 상세한 설명과 함께 실시 예들을 제공한다. 다만, 본 실시예의 기술적 특징이 특정 도면에 한정되는 것은 아니며, 각 도면에서 개시하는 특징들은 서로 조합되어 새로운 실시 예로 구성될 수 있다.
도 1은 본 발명의 실시 예에 따른 파일 입출력 오프로드 장치(10)를 예시적으로 보여주는 도면이다.
도 2는 본 발명의 실시 예에 따른 입출력 오프로드 장치(10)의 유니커널에서 리눅스 및 파일 서버(200)로 파일 입출력 오프로드(IO Offload)하는 과정을 예시적으로 보여주는 래더 다이어그램이다.
도 3은 본 발명의 실시 예에 따른 유니커널 시스템(100)의 유니커널(110)에서 리눅스(120)로 파일 입출력 오프로드 정보를 전송하는 과정을 예시적으로 보여주는 도면이다.
도 4는 본 발명의 실시 예에 따른 유니커널의 응용 프로그램에 의한 읽기 동작에 대한 파일 입출력 오프로드 과정을 예시적으로 보여주는 도면이다.
도 5는 본 발명의 실시 예에 따른 유니커널의 응용 프로그램에서 리눅스에 파일 입출력을 오프로드하고 파일 서버를 통하여 파일 입출력하는 과정을 예시적으로 보여주는 흐름도이다.
도 6은 본 발명의 실시 예에 따른 유니커널과 리눅스/파일 서버에 파일 입출력 오프로드를 수행하기 위한 파일 입출력 오프로드 장치(10)를 좀 더 자세하게 보여주는 도면이다.
도 7은 본 발명의 실시 예에 따른 전자 장치(1000)를 예시적으로 보여주는 도면이다.
아래에서는 도면들을 이용하여 본 발명의 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있을 정도로 본 발명의 내용을 명확하고 상세하게 기재할 것이다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 형태를 가질 수 있는바, 특정 실시 예들을 도면에 예시하고 본문에 상세하게 설명하고자 한다. 그러나 이는 본 발명을 특정한 개시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 제 1, 제 2 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로 사용될 수 있다. 예를 들어, 본 발명의 권리 범위로부터 이탈되지 않은 채 제 1 구성요소는 제 2 구성요소로 명명될 수 있고, 유사하게 제 2 구성요소도 제 1 구성요소로 명명될 수 있다. 어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 혹은 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다.
본 출원에서 사용한 용어는 단지 특정한 실시 예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 혹은 "가지다" 등의 용어는 실시된 특징, 숫자, 단계, 동작, 구성요소, 부분품 혹은 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 혹은 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부분품 혹은 이들을 조합한 것들의 존재 혹은 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다. 다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미이다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미인 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
일반적으로, 유니커널 내에서 존재하는 응용 프로그램의 버퍼에 대해 할당된 가상 주소(Virtual Address)와 물리 주소(Physical Address)의 매핑 관계는, 운영체제의 고유한 방법으로써 리눅스에서 유니커널 내 버퍼에 대한 가상 주소를 이용하여 물리 메모리에 접근할 수 없다. 또한, 리눅스에서 유니커널 내 버퍼의 시작 지점에 대한 가상 주소에 대응하는 물리 주소를 알더라도, 버퍼의 가상 주소에서 물리 주소로의 매핑이 연속적으로 되지 않는 한 버퍼 내 임의의 물리 주소가 획득될수 없다. 즉, 버퍼가 일반적으로 불연속적인 물리 페이지들로 구성되기 때문에, 버퍼 내 임의의 지점에서 대응하는 연속적인 가상 주소에 매핑되는 물리 주소를 획득하는 것은 보장되지 않는다. 따라서, 기존 유니커널은 파일 입출력을 수행하기 위해서 호스트 OS(Operating System) 혹은 파일 서버로부터 입출력 결과를 복사 받고 있다.
파일 입출력을 수행하기 위해서 데이터를 입출력할 메모리 주소가 필요하다.
본 발명은 유니커널에서 입출력 버퍼의 가상 주소에 매핑되는 물리 페이지들 중 연속되는 물리 페이지의 주소와 크기를 하나의 엘리먼트로 하는 집합과 그 집합의 엘리먼트 개수를 리눅스에 전송할 수 있다. 즉, 유니커널에서 리눅스로 전송되는 파일 입출력 명령은, 유니커널의 데이터에 대한 물리 주소와 크기를 포함하는 IO(Input/Output) 벡터를 전송할 수 있다. 이는 유니커널과 리눅스는 하나의 물리 주소에 대해 자신의 가상 주소를 가지는데, 상대의 가상 주소를 가지고 메모리에 대한 물리 주소를 추출할 수 없기 때문이다.
또한, RDMA(Remote Direct Memory Access)나 DMA(Direct Memory Access)로 데이터를 입출력하는 이유는, 운영체제의 가상 주소가 아닌 실제 메모리의 물리 주소가 필요하기 때문이다. 리눅스는 이러한 물리 주소를 이용하여 파일 서버에서 대응하는 물리 주소로 그 크기만큼 NVMe(Non-Volatile Memory Express) 디바이스 상의 데이터를 RDMA를 통하여 유니커널의 입출력 버퍼에 고속 입출력할 수 있다.
또한, 유니커널의 운영 환경에서 파일 입출력을 필요로 하는 응용프로그램의 성능을 높이기 위해서 고속의 파일 입출력 기능이 필요하다. 본 발명은 시스템의 일부 자원(코어, 메모리)에 리눅스를 설치하고, 설치된 리눅스에 파일 입출력을 오프로드하고, 파일 서버상의 NVMe 디바이스 내 데이터를 RDMA 통하여 고속으로 파일 입출력할 수 있다.
예를 들어, 본 발명은 유니커널에서 파일 입출력을 수행하기 위해 시스템의 일부 자원에 리눅스를 설치하여 디바이스 드라이버처럼 이용할 수 있다. 유니커널은 설치된 리눅스로 파일 입출력 오프로드(I/O offload)할 파일 입출력 명령을 전송할 수 있다. 이후 리눅스는 전송받은 파일 입출력 명령 내에 존재하는 유니커널의 물리 주소가 가리키는 메모리에 대해 파일 서버에 파일 입출력을 요청할 수 있다. 파일 서버는 파일 시스템으로부터 NVMe(Non-volatile Memory Express) 디바이스에 저장되어 있는 파일을 접근하기 위한 정보를 추출하고, NVMe의 데이터에 접근하여 입출력을 수행하고, RDMA를 통해 고속으로 유니커널의 물리 주소가 가리키는 메모리로 데이터를 전송할 수 있다.
또한, 본 발명은 유니커널 내에 고속의 파일 입출력을 위해 추가적인 파일 시스템 소프트웨어 스택을 구축할 필요가 없을 뿐만 아니라, 파일 입출력 처리시 커널에서 간섭을 최소화 시킬 수 있다.
도 1은 본 발명의 실시 예에 따른 파일 입출력 오프로드 장치(10)를 예시적으로 보여주는 도면이다. 도 1을 참조하면, 파일 입출력 오프로드 장치(10)는 유니커널 시스템(100) 및 파일 서버(200)를 포함할 수 있다.
유니커널 시스템(100)은 유니커널(110), 리눅스(120), 및 공유 메모리(130)를 포함할 수 있다.
유니커널(110)은 라이브러리 운영 체제로 구현된 단일 주소 공간을 가진 이미지다. 즉, 응용 프로그램은 필요한 운영 체제의 기능을 라이브러리 형태로 포함하고, 그 이미지 자체가 대응하는 응용 프로그램 만의 특별한 커널이 된다. 유니커널(110)은 사용자 공간과 커널 공간이 단일 주소 공간인 소프트웨어 스택을 갖는다. 유니커널(110)은 단일 공간 주소를 이용하여 커널과 사용자 간의 모드 전환을 제거하고, 데이터 복사를 최소화함으로써 응용 프로그램 성능을 극대화시킬 수 있다. 예를 들어, 유니커널(110)은 MirageOS, POSIX 호환 SW(Software)를 위한 Rump, C++ 용 IncludeOS, HPC(High Performance Computing) 용 Hermitcore 등 일 수 있다.
리눅스(120; '제 1 리눅스')는 모놀리식 커널로써, 파일 서버(200)와의 입출력 동작을 수행할 수 있다.
공유 메모리(130)는 유니커널 메모리(132) 및 RDMA NIC(Remote Direct Memory Access Network Interface Card; 134)를 포함할 수 있다.
파일 서버(200)는 리눅스(220; '제 2 리눅스') 및 메모리(230)를 포함할 수 있다. 여기서 메모리(230)는 비휘발성 메모리(NVMe; 232), RDMA NIC(234)를 포함할 수 있다. 한편, 비휘발성 메모리는 NVMe(Non-Volatile Memory Express) 외에도 다양한 종류의 비휘발성 메모리로 구현될 수 있다고 이해되어야 할 것이다.
본 발명의 실시 예에 따른 파일 입출력 오프로드 장치(10)는 유니커널(110)에서 고속으로 파일 입출력을 수행할 수 있다.
파일 입출력 오프로드 장치(10)는 유니커널(110)에서 고속으로 입출력을 수행하기 위해 유니커널(110)에서 발생하는 입출력을 제 1 리눅스(120)에 오프로드할 수 있다. 여기서, 오프로드된 파일 입출력은 제 1 리눅스(120)와 파일 서버(200)를 통해 NVMe(232)에 저장되어 있는 파일의 데이터를 RDMA 방식으로 유니커널(110)의 메모리(132)에 입출력될 수 있다. 실시 예에 있어서, 유니커널 입출력(IO)이 RDMA NIC(134, 234)를 통하여 네트워크 상의 NVMe(232)를 접근하기 위해, 리눅스(120)에 유니커널(110)의 IO를 오프로드할 수 있다. 실시 예에 있어서, 유니커널(110)은 사용자로 하여금 네트워크 상에서 원격으로 NVMe(232)를 접근하고, 로컬 머신에 접속된 것처럼 모든 디스크 오퍼레이션(읽기, 쓰기 등)을 수행할 수 있다.
정리하면, 본 발명의 실시 예에 따른 파일 입출력 오프로드 장치(10)는 유니커널(110)에서 고속으로 입출력을 수행하기 위하여 유니커널(110)에서 발생하는 입출력을 유니커널 시스템(100) 내부의 리눅스(120)에 오프로드하고, 오프로드된 파일 입출력을 리눅스(120)와 파일 서버(200)를 통해 NVMe(232)에 저장되어 있는 파일의 데이터를 RDMA 방식으로 유니커널 메모리(132)에 입출력할 수 있다.
본 발명의 실시 예에 따른 파일 입출력 오프로드 장치(10)는, 유니커널(110)에서 응용 프로그램이 리눅스(120) 및 파일 서버(200)에 파일 입출력 오프로드하고 RDMA 기반으로 고속의 파일 입출력을 수행할 수 있다.
본 발명의 실시 예에 따른 파일 입출력 오프로드 장치(10)는, 유니커널 환경에서 구축하기 어려운 범용 운영체제의 소프트웨어 스택(File system, Network File System)을 이용하여 유니커널 측면에서 리눅스로 파일 입출력을 오프로드하고, RDMA를 통하여 고속으로 파일을 입출력할 수 있다.
본 발명의 실시 예에 따른 파일 입출력 오프로드 장치(10)는, 유니커널(110)에서 고속의 파일 입출력을 수행하기 위해 범용 운영체제에 입출력을 오프로드함으로써 파일시스템과 같이 무거운 소프트웨어 스택을 유니커널(110)에서 구성하지 않을 수 있다.
본 발명의 실시 예에 따른 파일 입출력 오프로드 장치(10)는, 한 시스템 내에서 다수의 유니커널 응용 프로그램을 구동하더라도 각각의 유니커널에서 파일 시스템을 구축할 필요 없이 다수의 유니커널을 경량의 크기와 최적의 수행을 지원하도록 커널 라이브러리를 구성할 수 있다.
도 2는 본 발명의 실시 예에 따른 입출력 오프로드 장치(10)의 유니커널에서 리눅스 및 파일 서버(200)로 파일 입출력 오프로드(IO offload)하는 과정을 예시적으로 보여주는 래더 다이어그램이다. 도 2를 참조하면, 파일 입출력 오프로드 과정은 다음과 같이 진행될 수 있다.
유니커널(110)은 다음과 같이 동작할 수 있다. 유니커널(110)은 유니커널의 응용 프로그램을 시작할 수 있다(S111). 유니커널 응용 프로그램은 파일 입출력 함수를 호출할 수 있다(S112). 유니커널(110)은 파일 입출력 버퍼에 대한 연속 물리 주소 구간을 추출하고, 파일 입출력 정보(예를 들어, 파일 입출력 명령 및 IO 벡터)를 생성할 수 있다(S113). 유니커널의 응용 프로그램이 시작되고 수행 중 파일 입출력 함수가 호출되면, 유니커널(110)은 리눅스(120)에 파일 입출력을 오프로드하기 위하여 유니커널(110)의 파일 입출력 명령, 파일 디스크립터, IO 벡터, 벡터 카운트와 같은 파일 입출력 정보를 생성할 수 있다. 파일 입출력 명령은 read와 write같은 입출력 명령이다. 파일 디스크립터는 시스템으로부터 할당 받은 파일을 대표하는 값이다. IO 벡터는 입출력 버퍼(Buffer)의 가상 주소에 매핑되는 물리 페이지들 중 연속되는 물리 페이지의 주소와 크기를 하나의 엘리먼트로 하는 집합이다. 벡터 카운트는 IO 벡터를 구성하는 엘리먼트 개수이다.
유니커널(110)은 파일 입출력 정보(파일 입출력 명령 및 IO 벡터)를 리눅스(120)로 전송할 수 있다(S114). 유니커널(111)에서 리눅스(120)로 전송되는 파일 입출력 정보에 유니커널의 버퍼에 대한 물리 주소와 크기를 포함하는 IO 벡터를 전송하는 이유는, 유니커널(110)과 리눅스(120)는 하나의 물리 주소에 대해 자신의 가상 주소를 각각 가지는데 상대의 가상 주소를 가지고 메모리에 대한 물리 주소를 추출할 수 없기 때문이다. 또한, RDMA나 DMA로 데이터를 입출력하는 이유는, 운영체제의 가상 주소가 아닌 실제 메모리의 물리 주소가 필요하기 때문이다. 이상과 갈이 생성된 유니커널의 파일 입출력 정보는 리눅스(120)의 입출력 오프로드 프록시에 전송될 수 있다. 이후에, 유니커널(110)은 리눅스(120)로부터 IO 벡터 개수만큼 파일 입출력 함수 결과를 수신할 수 있다(S115).
리눅스(120)의 동작은 다음과 같이 진행될 수 있다. 리눅스(120)는 파일 입출력 오프르도 프록시를 구동할 수 있다(S121). 리눅스(120)는 파일 입출력 정보(파일 입출력 명령 및 IO 벡터)를 유니커널(110)로부터 수신할 수 있다(S122). 리눅스(120)는 파일 입출력 정보(파일 입출력 명령 및 IO 벡터)를 이용하여 파일 입출력 함수 구성 및 호출할 수 있다(S123). 리눅스(120)의 파일 입출력 오프로드 프록시는 전송받은 파일 입출력 정보를 이용하여 파일시스템 서텁에 전송할 파일 입출력 함수를 구성할 수 있다. 리눅스(120)에서 대응하는 파일 입출력 함수를 수행하면, 리눅스의 파일시스템 스텁을 통해 파일 서버(200)로 파일 입출력 명령이 전송될 수 있다. 리눅스(120)는 파일 디스크립터에 대응하는 파일에 대해 IO 벡터 크기만큼 IO 벡터의 물리 주소로 입출력 명령을 파일 서버(200)에 요청할 수 있다(S124). 이때 파일시스템 스텁은 IO 벡터 개수만큼 IO 벡터 엘리먼트 하나에 대해 파일 서버에 파일 입출력을 요구할 수 있다. 즉, 연속적인 물리 주소를 하나의 단위로 하여 입출력 수행을 처리할 수 있다. 이때 전송되는 파일 입출력 정보는 파일 입출력 명령, 파일 디스크립터, IO 벡터의 물리 주소, IO 벡터의 입출력 크기이다.
이후에, 리눅스(120)는 파일 서버(200)로부터 NVMe(232)/RDMA NIC(234)로부터 IO 벡터 개수만큼 파일 입출력 함수 결과를 수신할 수 있다(125). 이후 리눅스(120)는 IO 벡터 개수만큼 파일 입출력 함수 결과를 유니커널(110)의 유니커널 메모리(134)로 전송할 수 있다.
파일 서버(200)의 동작은 다음과 같이 진행될 수 있다. 파일 서버(200)는 리눅스(220)에서 파일 서버 데몬을 구동할 수 있다(S131). 파일 서버(200)의 리눅스(220)는 유니커널 시스템(100)의 리눅스(120)로부터 파일 입출력 요청을 수신할 수 있다(S132). 파일 서버(200)의 리눅스(220)는 파일 디스크립터에 대응하는 NVMe 파일에 대해 입출력 명령을 수행하기 위해 파일시스템에서 파일 정보를 추출할 수 있다(S133). 파일 서버(200)은 유니커널 시스템(100)의 리눅스(120)로부터 파일 입출력을 요청을 수신할 때, 파일 디스크립터에 대응하는 파일에 대해 입출력 명령을 수행하기 위해 파일 시스템으로부터 NVMe에서 입출력하기 위한 정보를 추출할 수 있다. 파일 서버(200)는 NVMe에서 입출력 크기만큼의 데이터를 입출력시키고, RDMA로 전송하고 RDMA 엔진을 통해 입출력해야 할 물리 주소에 크기만큼 데이터를 전송할 수 있다. 파일 서버(200)의 리눅스(220)는 NVMe 및 RDMA에 입출력 명령을 수행할 수 있다(S134). 파일 서버(200)의 리눅스(220)는 물리 주소로 대응하는 크기로 데이터를 전송하고, 파일 입출력 결과를 유니커널 시스템(100)의 리눅스(120)로 전송할 수 있다(S135).
도 3은 본 발명의 실시 예에 따른 유니커널 시스템(100)의 유니커널(110)에서 리눅스(120)로 파일 입출력 오프로드 정보를 전송하는 과정을 예시적으로 보여주는 도면이다. 도 3을 참조하면, 유니커널 시스템(100)의 내부에서 유니커널(110)에서 리눅스(120)로 파일 입출력 오프로드 정보가 전송되는 과정은 다음과 같이 진행될 수 있다.
유니커널(110)은 리눅스(120)에 파일 입출력(IO)을 오프로드(Offload) 하기 위한 파일 입출력 오프로드 정보로써, 유니커널(110)의 입출력 명령, 파일 디스크립터, IO 벡터, 벡터 카운트를 리눅스의 입출력 오프로드 프록시에 전송할 수 있다. 여기서, 입출력 명령은 read(읽기)와 write(쓰기)와 같은 입출력 명령이다. 파일 디스크립터는 시스템으로부터 할당 받은 파일을 대표하는 값이다. IO 벡터는 입출력 버퍼(Buffer)의 가상 주소(VA; Virtual Address)에 매핑되는 물리 페이지들(Physical Pages) 중 연속되는 물리 페이지의 주소와 크기를 하나의 엘리먼트로 하는 집합이다. 벡터 카운트는 IO 벡터를 구성하는 엘리먼트 개수이다.
도 3에서 도시된, 파일 입출력 명령은 read 이며, 파일 디스크립터는 fd이다. 입출력 버퍼의 가상 주소가 va이고 크기가 sz 일 때, IO 벡터는 가상 주소(va)에서 sz(= sz1 + sz2) 크기 구간에 매칭되는 연속인 물리 주소와 그 크기의 집합인 {{pa1, sz1}, {pa2, sz2}}으로 표현될 수 있다. 벡터 카운트는 IO 벡터의 엘리먼트 개수인 iov_cnt = 2이다. 즉, 유니커널 메모리(130)의 버퍼가 3개의 페이지로 이루어 질 때, 이에 매칭되는 물리 페이지 3개 중 연속인 물리 페이지 들로 구성되는 집합의 엘리먼트는 2개이다.
도 4는 본 발명의 실시 예에 따른 유니커널(110)의 응용 프로그램에 의한 읽기 동작에 대한 파일 입출력 오프로드 과정을 예시적으로 보여주는 도면이다. 도 5는 본 발명의 실시 예에 따른 유니커널(110)의 응용 프로그램에서 리눅스(120)에 파일 입출력을 오프로드하고 파일 서버를 통하여 파일 입출력하는 과정을 예시적으로 보여주는 흐름도이다. 도 4 및 도 5를 참조하면, 유니커널(110)의 응용 프로그램은 다음과 같이 읽기 동작에 대한 파일 입출력 오프로드 동작을 진행할 수 있다.
유니커널(110)의 응용 프로그램은 입출력 함수(예, read(fd, va, count)을 수행할 수 있다(S210). 유니커널(110)은 입출력 버퍼의 가상 주소(va)에서 count 크기 구간에 매칭되는 연속인 물리 주소(pa)와 그 크기의 집합인 IO 벡터(= iov[])를 계산할 수 있다(S220). IO 벡터 카운트는 IO 벡터의 엘리먼트 개수인 iov_cnt이다. 유니커널(110)은 파일 입출력 정보에 관련된 파라미터(예, read, fd, iov[], iov_cnt)를 가지는 파일 입출력 정보 메시지를 리눅스(120)로 전송할 수 있다(S230).
리눅스(120)에서 대기 중인 입출력 오프로드 프록시는 파일 입출력 정보 메시지를 수신하고, 파일 입출력 함수(read(fd, iov[], iov_cnt)를 구성하고 수행할 수 있다(S240).
리눅스(120)의 파일시스템 스텁이 파일 서버(200)에 요청할 i 번째(0 <= i < iov_cnt) 파일 입출력 함수(예, write_io(fd, iov[i]. pa, iov[i].iov_cnt))를 구성할 수 있다(S250). 리눅스(120)의 파일시스템 스텁은 파일 서버에 i번째 파일 입출력 메시지(예, read, fd, iov[i]. pa, iov[i].iov_cnt)를 파일 서버(200)로 전송할 수 있다(S260).
파일 서버(200)의 리눅스(220)는 수신된 파일 디스크립터에 대응하는 파일로부터 파일 명령을 수행하기 위한 정보를 파일 시스템으로부터 추출할 수 있다. 예를 들어, 파일 디스크립터(fd)를 가지는 파일에 대해 NVMe(232)에 저장된 파일을 입출력하기 위한 정보를 추출할 수 있다. 파일 서버(200는 NVMe(232)내에 입출력할 파일 데이터를 RDMA NIC(234)으로 복사를 명령할 수 있다. NVMe(232)에서 RDMA NIC(234)로 파일 입출력 데이터가 복사될 수 있다(S270). RDMA 엔진은 파일 입출력 데이터를 유니커널(110)의 물리 메모리(예, iov[i].pa)로 RDMA 방식으로 전송할 수 있다.
도 6은 본 발명의 실시 예에 따른 유니커널과 리눅스/파일 서버에 파일 입출력 오프로드를 수행하기 위한 파일 입출력 오프로드 장치(10)를 좀 더 자세하게 보여주는 도면이다. 도 6을 참조하면, 파일 입출력 오프로드 장치(10)는 유니커널 시스템(100) 및 파일 서버(200)를 포함할 수 있다.
유니커널 시스템(100)은 제 1 커널 시스템(101) 및 제 2 커널 시스템(102)을 포함할 수 있다.
제 1 커널 시스템(101)은 유니커널(110) 및 유니커널 메모리(130)를 포함할 수 있다. 유니커널(110)은 응용 프로그램(111), IO 벡터 생성부(112), 파일 입출력 정보 생성부(113), 파일 입출력 오프로드 요청 송신부(114), 파일 입출력 오프로드 수신부(115)를 포함할 수 있다.
유니커널(110)의 응용 프로그램은 응용 프로그램 코드와 대응하는 응용 프로그램에 필요한 모든 운영 체제 기능이 들어 있어 별도의 운영 체제없이 실행할 수 있다. IO 벡터 생성부(112)는 입출력 버퍼(Buffer)의 가상 주소(Virtual Address; va)에 매핑되는 물리 페이지들 중 연속되는 물리 페이지의 주소와 크기를 하나의 엘리먼트로 하는 집합인 IO 벡터를 생성할 수 있다.
파일 입출력 정보 생성부(113)는 리눅스(1에 파일 입출력을 오프로드하기 위해 필요한 파일 입출력 오프로드 정보를 생성할 수 있다. 여기서 파일 입출력 정보는 유니커널의 입출력 명령, 파일 디스크립터, IO 벡터, 벡터 카운트 등이 있다.
파일 입출력 오프로드 요청 송신부(114)는 리눅스(120)에 파일 입출력 정보를 전송할 수 있다.
파일 입출력 오프로드 결과 수신부(115)는 리눅스(120)의 파일 입출력 ?늡족琯? 결과 송신부(125)로부터 파일 입출력 오프로드 결과를 수신할 수 있다.
제 2 커널 시스템(102)은 리눅스(120) 및 RDMA NIC(140)를 포함할 수 있다. 리눅스(120)는 파일 입출력 오프로드 요청 수신부(121), 입출력 오프로드 함수 구성 및 호출부(122), IO 벡터 요청 송신부(123), IO 벡터 결과 수신부(124), 및 파일 입출력 오프로드 결과 송신부(125)를 포함할 수 있다.
파일 입출력 오프로드 요청 수신부(121)는 유니커널(110)로부터 파일 입출력 정보를 수신할 수 있다.
파일 입출력 함수 구성 및 호출부(122)는 수신한 파일 입출력 정보를 이용하여 파일 입출력 함수를 구성하고, 파일 입출력을 실행할 수 있다.
IO 벡터 요청 송신부(123)는 IO 벡터의 엘리먼트 하나에 대한 IO 요청을 파일 서버(200)에 전송할 수 있다. 여기서 IO 벡터 요청은 IO 벡터의 엘리먼트 개수만큼 전송될 수 있다.
IO 벡터 결과 수신부(124)는 파일 서버(200)로부터 IO 벡터 요청에 대응하는 결과를 수신할 수 있다. 즉, IO 벡터 결과 수신부(124)는 NVMe/RDMA를 통하여 IO 벡터의 엘리먼트 하나에 대한 파일 입출력한 결과를 파일 서버로부터 수신할 수 있다. 실시 예에 있어서, IO 벡터 요청이 성공이면, IO 벡터의 다음 엘리먼트에 대한 IO를 수행하기 위해 IO 벡터 요청 송신부(123)로 제어를 분기할 수 있다. 반면에, IO 벡터 요청이 실패이면, 파일 입출력 오프로드 결과 송신부(125)로 제어를 분기할 수 있다.
파일 입출력 오프로드 결과 송신부(125)는 수신된 IO 벡터 결과에 대응하는 파일 입출력 오프로드 결과를 유니커널(110)의 파일 입출력 오프로드 결과 수신부(115)에 전송할 수 있다.
파일 서버(200)는 리눅스(220), NVMe(230), 및 RDMA NIC(240)를 포함할 수 있다. 리눅스(220)는 IO 벡터 요청 수신부(221), 파일 정보 추출부(222), NVMe/RDMA IO 처리 수행부(223), 및 IO 벡터 결과 송신부(224)를 포함할 수 있다.
IO 벡터 요청 수신부(221)는 IO 벡터의 엘리먼트 하나에 대한 IO 요청을 유니커널 시스템(100)의 리눅스(120)로부터 수신할 수 있다.
파일정보 추출부(222)는 수신된 파일 디스크립터에 대응하는 파일로부터 파일 명령을 수행하기 위한 정보를 파일 시스템으로부터 추출할 수 있다.
NVMe/RDMA IO 처리 수행부(223)는 NVMe(232)내에 입출력할 파일 데이터를 RDMA NIC(234)으로 복사하고, 복사된 파일 데이터를 RDMA NIC(234)에서 유니커널 시스템(100)의 리눅스(120)에 대응하는 RDMA NIC(134)를 통하여 유니커널(110)의 물리 메모리로 전송할 수 있다.
IO 벡터 결과 송신부(224)는 NVMe/RDMA를 통하여 IO 벡터의 엘리먼트 하나에 대한 파일 입출력한 결과를 유니커널 시스템(100)의 리눅스(120)로 전송할 수 있다.
본 발명의 실시 예에 따른 파일 입출력 오프로드 장치(10)는, 유니커널(110)에 구동되는 응용 프로그램에 의해 리눅스(120) 및 파일 서버(200)에 파일 입출력 오프로드하고 RDMA 기반으로 고속의 파일 입출력을 수행할 수 있다.
본 발명의 실시 예에 따른 파일 입출력 오프로드 장치(10)는, 유니커널(110)에서 파일 입출력 환경을 구축할 때, 범용 운영체제의 소프트웨어 스택(File system, Network file system)을 이용함으로써 유니커널 측면에서는 리눅스로 파일 입출력을 오프로드하고, RDMA를 통하여 고속으로 파일을 입출력할 수 있다.
본 발명의 실시 예에 따른 파일 입출력 오프로드 장치(10)는, 유니커널(110)에서 고속의 파일 입출력을 수행하기 위해 범용 운영체제에 입출력을 오프로드함으로써, 파일시스템과 같이 무거운 소프트웨어 스택을 유니커널(110)에 구성하지 않을 수 있다.
본 발명의 실시 예에 따른 파일 입출력 오프로드 장치(10)는, 한 시스템 내에서 다수의 유니커널 응용 프로그램을 구동하더라도 각각의 유니커널에서 파일 시스템을 구축할 필요 없이 다수의 유니커널을 경량의 크기와 최적의 수행을 지원할 수 있도록 커널 라이브러리를 구성할 수 있다.
도 7은 본 발명의 실시 예에 따른 전자 장치(1000)를 예시적으로 보여주는 도면이다. 도 7을 참조하면, 전자 장치(1000)는 적어도 하나의 프로세서(1100), 네트워크 인터페이스(1200), 메모리(1300), 디스플레이(1400), 및 입출력 장치(1500)를 포함할 수 있다. 도 7에 도시된 전자 장치(1000)는 상술된 유니커널 시스템(100)를 포함할 수 있다.
프로세서(1100)는 도 1 내지 도 6을 통하여 적어도 하나의 장치를 포함하거나, 도 1 내지 도 6을 통하여 전술한 적어도 하나의 방법으로 구현될 수 있다. 프로세서(1100)는, 상술된 바와 같이, 유니커널의 응용 프로그램을 시작하고; 유니커널 응용 프로그램에서 파일 입출력 함수를 호출하고; 유니커널에서 파일 입출력 정보를 생성하고; 유니커널에서 파일 입출력 정보를 리눅스로 전송하고; 리눅스에서 파일 입출력 프록시를 구동하고, 리눅스에서 파일 입출력 정보를 유니커널로 부터 수신하고; 리눅스에서 파일 입출력 정보를 이용하여 파일 입출력 함수 구성 및 호출하고; 리눅스에서 파일 디스크립터에 대응하는 파일에 대해 IO 벡터 크기 만큼 IO 벡터의 물리 주소로 입출력 명령을 파일 서버에 요청하고; 리눅스에서 파일 입출력 정보내의 IO 벡터 개수 만큼 수행 후 그 결과를 유니커널에 전송하고; 유니커널에서 파일 입출력 결과를 리눅스로부터 수신하도록, 인스트럭션들(instructions)을 실행할 수 있다.
프로세서(1100)는 프로그램을 실행하고, 전자 장치(1000)를 제어할 수 있다. 전자 장치(1000)는 입출력 장치(1500)를 통하여 외부 장치(예를 들어, 퍼스널 컴퓨터 혹은 네트워크)에 연결되고, 데이터를 교환할 수 있다.
네트워크 인터페이스(1200)는 외부의 네트워크와 다양한 유/무선 방식에 의해 통신을 수행하도록 구현될 수 있다.
메모리(1300)는 컴퓨터에서 읽을 수 있는 명령어(Instruction)를 포함할 수 있다. 프로세서(1100)는 메모리(1300)에 저장된 명령어가 프로세서(1100)에서 실행됨에 따라 앞서 언급된 동작들을 수행할 수 있다. 메모리(1300)는 휘발성 메모리 혹은 비휘발성 메모리일 수 있다. 메모리(1300)는 사용자의 데이터를 저장하도록 저장 장치를 포함할 수 있다. 저장 장치는 eMMC(embedded Multimedia Card), SSD(Solid State Drive), UFS(Universal Flash Storage) 등 일 수 있다. 저장 장치는 적어도 하나의 비휘발성 메모리 장치를 포함할 수 있다. 비휘발성 메모리 장치는, 낸드 플래시 메모리(NAND Flash Memory), 수직형 낸드 플래시 메모리(Vertical NAND; VNAND), 노아 플래시 메모리(NOR Flash Memory), 저항성 램(Resistive Random Access Memory: RRAM), 상변화 메모리(Phase-Change Memory: PRAM), 자기저항 메모리(Magnetoresistive Random Access Memory: MRAM), 강유전체 메모리(Ferroelectric Random Access Memory: FRAM), 스핀주입 자화반전 메모리(Spin Transfer Torque Random Access Memory: STT-RAM) 등이 될 수 있다.
이상에서 설명된 실시 예들은 하드웨어 구성요소, 소프트웨어 구성요소, 및/혹은 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치, 방법 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(Arithmetic Logic Unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPGA(Field Programmable Gate Array), PLU(Programmable Logic Unit), 마이크로프로세서, 혹은 명령(Instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 혹은 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(Operating System; OS) 및 상기 운영 체제 상에서 수행되는 하나 이상의 소프트웨어 애플리케이션을 수행할 수 있다.
또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 대응하는 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(Processing Element) 및/혹은 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수의 프로세서 혹은 하나의 프로세서 및 하나의 제어기(Controller)를 포함할 수 있다. 또한, 병렬 프로세서(Parallel Processor)와 같은, 다른 처리 구성(Processing Configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(Computer Program), 코드(Code), 명령(Instruction), 혹은 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 혹은 결합적으로(Collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/혹은 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 혹은 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(Component), 물리적 장치, 가상 장치(Virtual Equipment), 컴퓨터 저장 매체 혹은 장치, 혹은 전송되는 신호파(Signal Wave)에 영구적으로, 혹은 일시적으로 구체화(Embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시 예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 혹은 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시 예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(Magnetic Media), CD-ROM, DVD와 같은 광기록 매체(Optical Media), 플롭티컬 디스크(Floptical Disk)와 같은 자기-광 매체(Magneto Optical media), 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
유니커널의 파일 입출력 명령을 리눅스 및 파일 서버에 파일 입출력 오프로드함에 있어서,
유니커널의 응용 프로그램이 시작되고 수행 중 파일 입출력 함수가 호출되면, 유니커널은 리눅스에 파일 입출력을 오프로드하기 위하여 유니커널의 파일 입출력 명령, 파일 디스크립터, IO 벡터, 벡터 카운트와 같은 파일 입출력 정보를 생성한다. 파일 입출력 정보에 유니커널의 버퍼에 대한 물리 주소와 크기를 포함하는 IO 벡터를 생성하는 이유는 유니커널과 리눅스는 하나의 같은 물리 주소라 하여도 자신의 가상 주소를 각각 가지지기 때문 상대의 가상 주소를 가지고 메모리에 대한 물리 주소를 추출할 수 없기 때문이다. 또한, 파일 서버에서 유니커널로 파일 입출력을 수행하기 위해서는 RDMA나 DMA 로 데이터를 입출력할 경우에는 운영체제의 가상 주소가 아닌 실제 메모리의 물리 주소가 필요하기 때문이다.
이에 본 발명은 입출력 버퍼(Buffer)의 가상 주소에 매핑되는 물리 페이지들 중 연속되는 물리 페이지의 주소와 크기를 하나의 엘리먼트로 하는 집합인 IO 벡터를 구성하고 IO 벡터를 구성하는 엘리먼트 개수인 벡터 카운트를 리눅스에 파일 입출력 정보로 전송함으로써, 리눅스는 IO 벡터의 엘리먼트 단위로 파일 서버에 파일 입출력을 요청하게 되고 물리 주소로 시작하는 연속적인 영역에 대해 크기만큼 파일 데이터를 RDMA 기반으로 고속의 입출력을 할 수 있게 된다.
본 발명은 유니커널에서 구축하기 어려운 범용 운영체제의 소프트웨어 스택(File system, Network File System)을 이용하게 되는 것으로, 유니커널 측면에서 시스템 내 일부 자원을 이용하여 리눅스를 디바이스 드라이버처럼 이용한 것이다.
본 발명은 유니커널에서 리눅스로 파일 입출력을 오프로드하는데 있어서 NVMe와 RDMA를 통하여 고속으로 파일을 입출력할 수 있다. 본 발명은 데이터 센트릭 HPC(High Performance Computing) 용 커널의 입/출력 기술로 이용하여 이미지 프로세싱, graph 프로세싱, 딥러닝과 같은 데이터 센트릭 컴퓨팅을 수행하는 데 적용 가능하다. 본 발명은 대규모/빈번한 데이터를 기반으로 빠르고 많은 처리를 요구하는 인메모리 DB 및 100G를 지원하는 NIC의 커널 입/출력 기술로 이용할 수 있다.
한편, 본 발명이 유니커널에서 리눅스로 파일 입출력을 오프로드하는 데에 제한되지 않을 것이다. 본 발명은 유니커널에서 모놀리식 커널(Monolothic Kernel)의 어떠한 종류의 운영 체제(유닉스 커널, 솔라니스 커널, 윈도우즈 NT 커널, 벨로나2 커널, AIX 커널 등)로도 파일 입출력을 오프로드 할 수 있다고 이해되어야 할 것이다.
한편, 상술 된 본 발명의 내용은 발명을 실시하기 위한 구체적인 실시 예들에 불과하다. 본 발명은 구체적이고 실제로 이용할 수 있는 수단 자체뿐 아니라, 장차 기술로 이용할 수 있는 추상적이고 개념적인 아이디어인 기술적 사상을 포함할 것이다.
10: 파일 입출력 오프로드 시스템
100: 유니커널 시스템
110: 유니커널
111: 응용 프로그램
112: IO 벡터 생성부
113: 파일 입출력 정보 생성부
114: 파일 입출력 오프로드 요청 송신부
115: 파일 입출력 오프로드 결과 수신부
120, 220: 리눅스
121: 파일 입출력 오프로드 요청 수신부
122: 파일 입출력 함수 구성 및 호출부
123: IO 벡터 요청 송신부
124: IO 벡터 결과 수신부
125: 파일 입출력 오프로드 결과 송신부
200: 파일 서버
1000: 전자 장치

Claims (20)

  1. 유니커널을 이용하는 원격 직접 메모리 접근(Remote Direct Memory Access; RDMA) 기반 파일 입출력 오프로드 장치의 동작 방법에 있어서,
    상기 유니커널의 응용 프로그램에서 파일 입출력 커널 함수를 호출하는 단계;
    상기 파일 입출력 커널 함수에서 파일 입출력 정보를 생성하는 단계;
    상기 유니커널에서 상기 파일 입출력 정보를 리눅스로 전송하는 단계;
    상기 리눅스에서 상기 파일 입출력 정보를 이용하여 파일 입출력 함수를 구성 및 호출하는 단계; 및
    상기 파일 입출력 함수에서 상기 파일 입출력 정보에 대응하는 파일 입출력 요청을 파일 서버로 전송하는 단계를 포함하고,
    상기 파일 입출력 정보를 생성하는 단계는,
    파일 입출력 버퍼에 대한 연속적인 물리 주소 구간을 추출하는 단계; 및
    상기 추출된 물리 주소 구간에 대응하는 주소와 크기를 하나의 엘리먼트로 하는 집합인 IO 벡터를 생성하는 단계를 포함하고,
    상기 파일 입출력 정보는 파일 입출력 명령, 파일 디스크립터, 상기 IO 벡터, 상기 IO 벡터의 엘리먼트 개수를 의미하는 벡터 카운트를 포함하는 것을 특징으로 하는 방법.
  2. 삭제
  3. 제 1 항에 있어서,
    상기 리눅스의 파일 입출력 프록시를 구동하는 단계를 더 포함하는 방법.
  4. 제 3 항에 있어서,
    상기 파일 입출력 프록시에서 상기 유니커널로부터 상기 파일 입출력 정보를 수신하는 단계를 더 포함하는 방법.
  5. 삭제
  6. 제 1 항에 있어서,
    상기 파일 입출력 요청을 파일 서버로 전송하는 단계는,
    상기 리눅스의 파일 시스템 스텁에서 상기 IO 벡터의 개수에 대응하는 상기 입출력 요청을 상기 파일 서버로 전송하는 단계를 포함하는 방법.
  7. 제 1 항에 있어서,
    상기 리눅스에서 상기 파일 서버로부터 상기 파일 입출력 요청에 대한 결과를 수신하는 단계를 더 포함하는 방법.
  8. 제 7 항에 있어서,
    상기 파일 입출력 요청에 대한 결과가 성공일 때, 상기 리눅스에서 상기 유니커널로 상기 입출력 요청에 대한 결과를 전송하는 단계를 더 포함하는 방법.
  9. 제 1 항에 있어서,
    상기 파일 입출력 요청에 응답하여 상기 파일 서버의 데이터를 RDMA(Remote Direct Memory Access) 방식으로 상기 유니커널의 메모리로 입출력시키는 단계를 포함하는 방법.
  10. 유니커널을 이용하는 원격 직접 메모리 접근(Remote Direct Memory Access; RDMA) 기반 파일 입출력 오프로드 장치의 동작 방법에 있어서,
    파일 서버에서 유니커널 시스템의 리눅스로부터 파일 입출력 요청을 수신하는 단계;
    파일 서버에서 상기 파일 입출력 요청에 대응하는 파일 정보를 파일시스템에서 추출하는 단계;
    상기 파일 정보를 이용하여 비휘발성 메모리에서 데이터를 입출력하는 단계; 및
    상기 입출력된 데이터를 RDMA 엔진을 통하여 상기 유니커널 시스템으로 전송하는 단계를 포함하고,
    상기 리눅스는
    상기 유니커널 시스템의 유니커널로부터 수신된 파일 입출력 정보에 대응하게 파일 입출력 요청을 전송하고,
    상기 파일 입출력 정보는
    파일 입출력 명령, 파일 디스크립터, 상기 유니커널의 파일 입출력 버퍼에 대한 연속적인 물리 주소 구간에 대응하는 물리 주소와 크기를 하나의 엘리먼트로 하는 집합인 IO 벡터, 상기 IO 벡터의 엘리먼트의 개수를 의미하는 벡터 카운트를 포함하는 것을 특징으로 하는 방법.
  11. 제 10 항에 있어서,
    상기 파일 서버에서 상기 유니커널 시스템의 리눅스로 상기 파일 입출력 요청에 대한 파일 입출력 결과를 전송하는 단계를 더 포함하는 방법.
  12. 제 10 항에 있어서,
    상기 파일 정보를 상기 파일 시스템에서 추출하는 단계는,
    상기 파일 입출력 요청에 포함된 파일 디스크럽터에 대응하는 파일로부터 파일 명령을 수행하기 위한 상기 파일 정보를 추출하는 단계를 포함하는 방법.
  13. 제 10 항에 있어서,
    상기 파일 서버에서 상기 비휘발성 메모리의 상기 입출력된 데이터를 RDMA NIC로 복사를 명령하는 단계를 더 포함하는 방법.
  14. 제 10 항에 있어서,
    상기 RDMA 엔진은 상기 입출력된 데이터를 상기 유니커널 시스템의 유니커널의 물리 메모리로 RDMA 방식으로 전송하는 것을 특징으로 하는 방법.
  15. 원격 직접 메모리 접근(Remote Direct Memory Access; RDMA) 기반 파일 입출력 오프로드 장치에 있어서:
    적어도 하나의 프로세서; 및
    상기 적어도 하나의 프로세서에 실행되는 유니커널 및 리눅스를 저장하는 메모리를 포함하고,
    상기 유니커널은, 응용 프로그램에서 파일 입출력 커널 함수를 호출하고, 상기 파일 입출력 커널 함수에서 파일 입출력 정보를 생성하고; 상기 유니커널에서 상기 파일 입출력 정보를 리눅스로 전송하고,
    상기 리눅스는 상기 파일 입출력 정보를 이용하여 파일 입출력 함수를 구성 및 호출하고; 및 상기 파일 입출력 함수에서 상기 파일 입출력 정보에 대응하는 파일 입출력 요청을 파일 서버로 전송하고,
    상기 유니커널은,
    파일 입출력 버퍼에 대한 연속적인 물리 주소 구간을 추출하고, 상기 추출된 물리 주소 구간에 대응하는 주소와 크기를 하나의 엘리먼트로 하는 집합인 IO 벡터를 생성하되,
    상기 파일 입출력 정보는 파일 입출력 명령, 파일 디스크립터, 상기 IO 벡터, 상기 IO 벡터의 엘리먼트 개수를 의미하는 벡터 카운트를 포함하는 것을 특징으로 하는 파일 입출력 오프로드 장치.
  16. 제 15 항에 있어서,
    상기 리눅스는 파일 입출력 프록시를 구동하여 상기 파일 입출력 정보를 상기 유니커널로부터 수신하는 것을 특징으로 하는 파일 입출력 오프로드 장치.
  17. 제 15 항에 있어서,
    상기 리눅스는 상기 파일 입출력 정보를 이용하여 파일 디스크립터에 대응하는 파일에 대하여 IO 벡터 크기만큼 IO 벡터의 물리 주소로 입출력 명령을 상기 파일 서버로 전송하는 것을 특징으로 하는 파일 입출력 오프로드 장치.
  18. 제 17 항에 있어서,
    상기 리눅스는 입출력 명령에 대응하는 결과는 상기 파일 서버로부터 수신하는 것을 특징으로 하는 파일 입출력 오프로드 장치.
  19. 제 17 항에 있어서,
    상기 파일 서버로부터 상기 입출력 명령에 대응하는 데이터를 RDMA 방식으로 입출력하는 RDMA NIC(Network Interface Card)를 더 포함하는 것을 특징으로 하는 파일 입출력 오프로드 장치.
  20. 제 15 항에 있어서,
    상기 리눅스는 상기 파일 서버의 저장 장치에 대한 디바이스 드라이버로 이용되는 것을 특징으로 하는 파일 입출력 오프로드 장치.


KR1020190086140A 2018-11-12 2019-07-17 유니커널을 이용하는 원격 직접 메모리 접근 기반 파일 입출력 오프로드 방법 및 장치 Active KR102442118B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US16/582,597 US20200151118A1 (en) 2018-11-12 2019-09-25 Method and apparatus for offloading file i/o based on remote direct memory access using unikernel

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR1020180138453 2018-11-12
KR20180138453 2018-11-12

Publications (2)

Publication Number Publication Date
KR20200054854A KR20200054854A (ko) 2020-05-20
KR102442118B1 true KR102442118B1 (ko) 2022-09-13

Family

ID=70919764

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190086140A Active KR102442118B1 (ko) 2018-11-12 2019-07-17 유니커널을 이용하는 원격 직접 메모리 접근 기반 파일 입출력 오프로드 방법 및 장치

Country Status (1)

Country Link
KR (1) KR102442118B1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102504274B1 (ko) * 2020-06-08 2023-02-28 한국전자통신연구원 유니커널을 위한 파일 입출력 오프로드 가속 장치, 서버 및 방법
CN112667416B (zh) * 2020-12-25 2024-02-27 华中科技大学 一种基于rdma的非易失内存系统的通信方法及服务器
KR102753900B1 (ko) 2022-03-11 2025-01-14 성한 주식회사 Ip 카메라 기반 원격점검 제어시스템 및 방법

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060294234A1 (en) 2005-06-22 2006-12-28 Cisco Technology, Inc. Zero-copy network and file offload for web and application servers
JP5482230B2 (ja) 2010-01-25 2014-05-07 富士通株式会社 通信装置、情報処理装置、通信装置の制御方法及び制御プログラム
US20150006663A1 (en) 2013-06-26 2015-01-01 Cnex Labs, Inc. NVM Express Controller for Remote Access of Memory and I/O Over Ethernet-Type Networks
US20180027074A1 (en) * 2016-07-22 2018-01-25 6Wind System and method for storage access input/output operations in a virtualized environment

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100759816B1 (ko) * 2005-12-08 2007-09-20 한국전자통신연구원 임베디드 리눅스 커널 및 응용 프로그램의 통합 설정을위한 웹 기반의 개발환경 제공 시스템 및 방법
KR20160142681A (ko) 2015-06-03 2016-12-13 한국전자통신연구원 근접 소형셀 파일 클라우드를 이용하는 데이터 오프로딩 장치 및 방법

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060294234A1 (en) 2005-06-22 2006-12-28 Cisco Technology, Inc. Zero-copy network and file offload for web and application servers
JP5482230B2 (ja) 2010-01-25 2014-05-07 富士通株式会社 通信装置、情報処理装置、通信装置の制御方法及び制御プログラム
US20150006663A1 (en) 2013-06-26 2015-01-01 Cnex Labs, Inc. NVM Express Controller for Remote Access of Memory and I/O Over Ethernet-Type Networks
US20180027074A1 (en) * 2016-07-22 2018-01-25 6Wind System and method for storage access input/output operations in a virtualized environment

Also Published As

Publication number Publication date
KR20200054854A (ko) 2020-05-20

Similar Documents

Publication Publication Date Title
US11005934B2 (en) Efficient live-migration of remotely accessed data
JP5180373B2 (ja) 仮想化環境における割り込みメッセージ終了のレイジー処理
US9998558B2 (en) Method to implement RDMA NVME device
US11379374B2 (en) Systems and methods for streaming storage device content
KR102442118B1 (ko) 유니커널을 이용하는 원격 직접 메모리 접근 기반 파일 입출력 오프로드 방법 및 장치
US8897573B2 (en) Virtual machine image access de-duplication
US10817440B2 (en) Storage device including reconfigurable logic and method of operating the storage device
US20210004165A1 (en) Dummy Host Command Generation For Supporting Higher Maximum Data Transfer Sizes (MDTS)
US20190007483A1 (en) Server architecture having dedicated compute resources for processing infrastructure-related workloads
TW202117550A (zh) 儲存裝置及用於儲存裝置特性自監控的方法
CN107113231B (zh) 将基于图形的计算卸载到后端设备
WO2016195624A1 (en) Transferring an image file over a network
CN114397999B (zh) 基于非易失内存接口-远程处理消息传递的通信方法、装置及设备
US20200151118A1 (en) Method and apparatus for offloading file i/o based on remote direct memory access using unikernel
US20120066676A1 (en) Disabling circuitry from initiating modification, at least in part, of state-associated information
US12056072B1 (en) Low latency memory notification
US11550736B1 (en) Tensorized direct memory access descriptors
KR102426416B1 (ko) 멀티 커널 시스템의 입출력 처리 방법 및 장치
CN110837482A (zh) 分布式块存储低延迟控制方法、系统及设备
US11689621B2 (en) Computing device and storage card
JP7090080B2 (ja) ハイパーバイザプログラム
US10430220B1 (en) Virtual devices as protocol neutral communications mediators
KR102695726B1 (ko) 컴퓨팅 장치 및 스토리지 카드
KR20240098553A (ko) 저장 장치
KR20210130992A (ko) 컴퓨팅 시스템

Legal Events

Date Code Title Description
PA0109 Patent application

Patent event code: PA01091R01D

Comment text: Patent Application

Patent event date: 20190717

PG1501 Laying open of application
PA0201 Request for examination

Patent event code: PA02012R01D

Patent event date: 20200917

Comment text: Request for Examination of Application

Patent event code: PA02011R01I

Patent event date: 20190717

Comment text: Patent Application

E902 Notification of reason for refusal
PE0902 Notice of grounds for rejection

Comment text: Notification of reason for refusal

Patent event date: 20220203

Patent event code: PE09021S01D

E701 Decision to grant or registration of patent right
PE0701 Decision of registration

Patent event code: PE07011S01D

Comment text: Decision to Grant Registration

Patent event date: 20220714

GRNT Written decision to grant
PR0701 Registration of establishment

Comment text: Registration of Establishment

Patent event date: 20220905

Patent event code: PR07011E01D

PR1002 Payment of registration fee

Payment date: 20220906

End annual number: 3

Start annual number: 1

PG1601 Publication of registration