KR20170042217A - 키-벨류 장치를 포함하는 컴퓨터 시스템 및 그것의 인터럽트 처리 제공 방법 - Google Patents

키-벨류 장치를 포함하는 컴퓨터 시스템 및 그것의 인터럽트 처리 제공 방법 Download PDF

Info

Publication number
KR20170042217A
KR20170042217A KR1020160079525A KR20160079525A KR20170042217A KR 20170042217 A KR20170042217 A KR 20170042217A KR 1020160079525 A KR1020160079525 A KR 1020160079525A KR 20160079525 A KR20160079525 A KR 20160079525A KR 20170042217 A KR20170042217 A KR 20170042217A
Authority
KR
South Korea
Prior art keywords
interrupt
user space
cpu
device driver
host computer
Prior art date
Application number
KR1020160079525A
Other languages
English (en)
Other versions
KR102386174B1 (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 삼성전자주식회사
Publication of KR20170042217A publication Critical patent/KR20170042217A/ko
Application granted granted Critical
Publication of KR102386174B1 publication Critical patent/KR102386174B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/545Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/22Handling requests for interconnection or transfer for access to input/output bus using successive scanning, e.g. polling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4022Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F17/30587
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • 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, look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F2003/0697Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers device management, e.g. handlers, drivers, I/O schedulers

Abstract

본 발명의 실시 예에 따른 컴퓨터 시스템은 호스트 컴퓨터와 스토리지 장치를 포함할 수 있다. 스토리지 장치는 호스트 컴퓨터와 연결될 수 있다. 호스트 컴퓨터는 호스트 운영 체제(OS: Operating System)의 사용자 공간 내에 스토리지 장치의 사용자 공간 장치 드라이버를 포함할 수 있다. 사용자 공간 장치 드라이버는 호스트 컴퓨터 상에서 실행되는 어플리케이션에 기초하여 스토리지 장치로의 스토리지 장치로부터의 I/O 동작들을 처리하도록 구성될 수 있다.

Description

키-벨류 장치를 포함하는 컴퓨터 시스템 및 그것의 인터럽트 처리 제공 방법{COMPUTER SYSTEM COMPRISING KEY-VALUE DEVICE AND METHOD FOR PROVIDING INTERRUPT HANDLING}
본 발명은 컴퓨터 시스템에 관한 것으로, 좀 더 상세하게는 키-벨류 장치 드라이버를 포함하는 컴퓨터 시스템 및 그것의 인터럽트 처리 제공 방법에 관한 것이다.
관계 형(Relational) 데이터 베이스는 데이터의 관계 모델에 기초하여 데이터를 구성한다. 대부분의 관계 형 데이터 베이스 시스템은 관계 형 데이터 베이스를 쿼링(Querying)하고 유지하기 위해 SQL(Structured Query Language)를 사용한다. 반면에, NoSQL(Non SQL) 데이터 베이스는 다른 타입의 데이터 베이스를 의미한다. 이러한 타입은 관계 형 데이터 베이스들에서 사용되는 표로 나타낸(Tabular) 관계를 사용하여 데이터를 저장하거나 검색하지 않는다. 키 벨류(KV: Key-Value) 데이터 베이스는 키 벨류 쌍들의 집합으로서 데이터를 표현하기 위해 연관 배열(예를 들어, 맵이나 사전)을 저장하는 NoSQL의 한 예이다.
NoSQL 데이터 베이스들의 산업상의 사용은 높은 처리량과 I/O 성능을 요구하는 빅 데이터와 리얼-타임 웹 어플리케이션들 내에서 중요해지고 있고, 또한 성장하고 있다. 그들의 향상된 성능과 동적인 확장성 때문에, KV 데이터 베이스를 구현하는 데이터 스토리지 장치들(또는, KV 장치라고도 칭함)은 빅 데이터와 리얼 타임 어플리케이션들에 적합하다. KV 장치들의 향상된 성능과 동적인 확장성이라는 장점을 이용하기 위해서, 호스트 컴퓨터는 KV 장치들의 성능에 최적화되도록 구성되어야 한다. 높은 성능의 데이터 베이스 어플리케이션들은 스토리지 장치들과 데이터를 교환함에 있어 복잡한 I/O 방식(예를 들어, MSI(Message Signaled Interrupts) 및 CPU 어피니티(Affinity))을 요구할 수 있다.
본 발명은 위에서 설명한 기술적 과제를 해결하기 위한 것으로, 본 발명은 KV 장치 드라이버를 포함하는 컴퓨터 시스템 및 그것의 인터럽트 처리 제공 방법을 제공할 수 있다.
본 발명의 실시 예에 따른 컴퓨터 시스템은 호스트 컴퓨터와 스토리지 장치를 포함할 수 있다. 스토리지 장치는 호스트 컴퓨터와 연결될 수 있다. 호스트 컴퓨터는 호스트 운영 체제(OS: Operating System)의 사용자 공간 내에 스토리지 장치의 사용자 공간 장치 드라이버를 포함할 수 있다. 사용자 공간 장치 드라이버는 호스트 컴퓨터 상에서 실행되는 어플리케이션에 기초하여 스토리지 장치로의 스토리지 장치로부터의 I/O 동작들을 처리하도록 구성될 수 있다.
본 발명의 다른 실시 예에 따른 인터럽트 처리 제공 방법은 호스트 컴퓨터의 호스트 운영 체제의 사용자 공간 내에 호스트 컴퓨터와 연결된 스토리지 장치를 위해 사용자 공간 장치 드라이버를 제공하는 단계, 사용자 공간 장치 드라이버를 호스트 컴퓨터 상에서 실행되는 어플리케이션에 기초하여 스토리지 장치로의 또는 스토리지 장치로부터의 I/O 동작들을 처리하도록 구성하는 단계를 포함할 수 있다.
본 발명의 실시 예에 따르면, KV 장치에 대한 IOPS(I/O Operations Per Second) 및 레이턴시(Latency)의 관점에서 I/O 성능을 향상시킬 수 있다. 이에, 컴퓨터 시스템은 높은 처리량을 달성하고 성능을 향상시킬 수 있다.
도 1은 본 발명의 실시 예에 따른 데이터 베이스 시스템을 예시적으로 보여주는 그림이다.
도 2는 CPU 어피니티를 예시적으로 보여주는 그림이다.
도 3은 본 발명의 실시 예에 따른 이중 레이어의 CPU 어피니티를 예시적으로 보여주는 그림이다.
도 4는 본 발명의 실시 예에 따른 CPU 레이어 어피니티를 위한 워크 플로우를 예시적으로 보여주는 그림이다.
도 5는 본 발명의 실시 예에 따른 인터럽트 로드 제어의 워크 플로우를 예시적으로 보여주는 그림이다.
도 6은 본 발명의 실시 예에 따른 이중 레벨의 완료 병합을 예시적으로 보여주는 그림이다.
도 7은 본 발명의 실시 예에 따른 인터럽트와 로컬(Local) 집계 사이의 완료 처리를 전환하기 위한 워크 플로우를 예시적으로 보여주는 순서도이다.
도 8은 본 발명의 실시 예에 따른 인터럽트와 글로벌(Global) 집계 사이의 완료 처리를 전환하기 위한 워크 플로우를 예시적으로 보여주는 순서도이다.
아래에서는, 본 발명의 기술 분야에서 통상의 지식을 가진 자가 본 발명을 용이하게 실시할 수 있을 정도로, 본 발명의 실시 예들이 명확하고 상세하게 기재될 것이다.
여기서 기재된 일부분은 컴퓨터 메모리 내의 데이터 비트들에 대한 연산의 알고리즘 및 상징적인 표현의 측면에서 기재되었다. 이러한 알고리즘적 기재 및 표현들은 데이터 프로세싱 분야의 당업자 들에 의해 사용될 수 있다. 여기서, 알고리즘은 일반적으로 원하는 결과를 얻기 위한 일관성 있는 단계들의 시퀀스인 것으로 여겨진다. 이러한 단계들은 물리적인 양의 물리적인 조작을 요구한다. 일반적으로, 하지만 반드시, 이러한 양들은 저장되고, 전달되고, 결합되고, 비교되고, 또는 조작될 수 있는 전자 신호 또는 자기 신호의 형태를 가질 수 있다. 주로 일반적으로 사용된다는 이유에서, 이러한 신호들을 비트들, 벨류들, 엘리먼트들, 심볼들, 캐릭터들, 용어들, 숫자들 등으로 나타내는 것이 때로는 편리하다는 것이 증명되어 왔다.
이러한 모든 용어들 및 유사한 용어들이 적합한 물리 량들과 연관되며, 단순히 이러한 양들에 적용되는 편리한 용어들이란 것을 명심해야 한다. 이하에서 만약 구체적으로 설명되지 않는 경우에, “프로세싱하는”, “컴퓨팅하는”, “계산하는”, “디스플레이하는”, “결정하는” 등의 용어를 사용하는 전반적인 기재 들은 컴퓨터 시스템 또는 유사한 전자 컴퓨팅 장치의 동작 및 프로세스 등으로 여겨질 수 있다. 이러한 컴퓨터 시스템 또는 유사한 전자 컴퓨팅 장치들은 컴퓨터 시스템의 레지스터들 및 메모리들 내의 물리적(전자적) 량으로 표현되는 데이터를 컴퓨터 시스템 메모리들 및 레지스터들 혹은 다른 정보 스토리지, 전송 장치 또는 디스플레이 장치들 내의 물리 량으로 유사하게 표현되는 다른 데이터들로 조작하고 변환할 수 있다.
이러한 다양한 시스템들에 대해 요구되는 구조는 이하에서 설명될 것이다. 다양한 프로그램 언어들이 본 명세서에 기재된 실시 예들을 구현하기 위해서 사용될 수 있다.
나아가, 본 발명의 추가적인 유용한 실시 예들을 제공하기 위해, 대표적인 실시 예 및 종속항의 다양한 특징들은 구체적이고 명시적으로 열거되지 않은 다양한 방법으로 결합될 수 있다. 원래의 개시된 목적이나 본 발명을 제한하기 위한 목적을 위해, 모든 값의 범위 또는 개체들의 그룹 표시들은 모든 가능한 중간 값 또는 중간 개체를 개시할 수 있음은 명백하다. 또한, 도면에 도시된 크기들 및 구성 요소의 형태는 본 발명을 실행하는 방법에 대한 이해를 돕기 위해 도시되었을 뿐이고, 이는 본 발명을 제한하기 위한 것이 아님은 명백하다.
전통적으로, 인터럽트 라인(또는 핀)은 호스트 프로세서에 인터럽트 신호를 어설트(Assert)하기 위해 사용되어 왔다. 제어 신호의 대역 외 형태로도 지칭되는 이러한 인터럽트 시그널링 형태는 전용 인터럽트 라인 또는 핀을 필요로 한다. 대역 외 인터럽트 시그널링 방식과 대조적으로, PCI 2.2에서 정의된 MSI(Message Signaled Interrupt)와 PCI 3.0에서 정의된 MSI-x는 대역 내 인터럽트 시그널링 형태이다. MSI 및 MIS-x는 본 명세서에서 총칭하여 MSI로서 칭한다. 전용 인터럽트 라인을 통한 대역 외 어설트를 대체하기 위해, MSI는 특별한 대역 내 메세지들을 이용한다. 예를 들어, PCI-e(Peripheral Component Interconnect- express)는 구분된 인터럽트 라인을 갖지 않는 반면에, 인터럽트를 어설트하기 위한 특별한 대역 내 메세지들을 이용할 수 있다.
MSI는 핀 기반의 대역 외 인터럽트 시그널링 방식에 비하여 의미 있는 장점들을 갖고 있다. 기계적인 측면에서, 핀을 사용하지 않음으로써, 좀 더 간단하고, 좀 더 싸고, 좀 더 신뢰성 있는 커넥터가 만들어질 수 있다. 또한, 전통적인 대역 외 인터럽트들이 물리적인 인터럽트 핀들의 수에 의해 제한되는 반면에, MSI는 인터럽트의 수를 증가시킬 수 있다. 나아가, 인터럽트는 메모리 쓰기 동작이 완료되기 전에 도착할 수 있기 때문에, 핀 기반의 인터럽트는 메모리 장치에의 쓰기 동작과의 경쟁 조건을 발생시킬 수 있다. 경쟁 조건을 방지하기 위해서, 인터럽트 핸들러(Handler)는 메모리 쓰기 동작의 완료를 보장하기 위해 메모리 장치로부터 읽어올 필요가 있다. 반면에, MSI 쓰기는 DMA 쓰기를 통과할 수 없으므로, 이러한 경쟁 조건이 제거될 수 있다.
CPU 어피니티(Affinity)(또는, 프로세서 어피니티(Affinity)로도 칭해짐)는 프로세서 또는 어플리케이션의 쓰레드(Thread)를 CPU(Central Processing Unit) 또는 CPU들의 그룹에 결합 및 결합 해제를 할 수 있다. 이는 프로세서 또는 쓰레드가 지정된 CPU 또는 CPU들에서 실행될 수 있게 한다. CPU 어피니티(Affinity)는 특정 CPU에 존재할 수 있는 프로세스의 남은 결과물(Remnant)을 활용할 수 있다. 예를 들면, 프로세스의 남은 결과물은 CPU 캐시에 남아있는 데이터일 수 있다. 특정 프로세스 또는 동일한 프로세서 상에서 수행되는 쓰레드에 대한 스케쥴링은 효율을 향상시키고, 캐시 미스와 같은 성능 저하 상황을 줄일 수 있다. CPU 어피니티의 일 예로서 한 번에 복수의 인스턴스(Instance)를 수행하는 그래픽-랜더링 어플리케이션(Graphics-rendering Application)가 있다.
본 명세서는 호스트 컴퓨터의 사용자 공간 내에 구현되는 KV 장치의 장치 드라이버를 제공한다. KV 장치는 플래시 메모리, PCM(Phase-Change Memory), STT-MRAM(Spin-Transfer Torque Magnetic RAM) 등과 같은 불휘발성 메모리를 포함할 수 있다. 호스트 컴퓨터는 하나 또는 하나 이상의 소켓들에 배치된 하나 또는 하나 이상의 CPU들을 포함할 수 있다. 각각의 CPU는 하나 또는 하나 이상의 CPU 코어들을 포함할 수 있다. 호스트 컴퓨터는 KV 장치에 저장된 데이터에 동기적 또는 비 동기적으로 액세스하기 위해 I/O 동작(예를 들어, 읽기, 쓰기, 변경)을 수행할 수 있다. 일 실시 예로서, 호스트 컴퓨터는 I/O 큐(Queue)들 및 MSI(Message Signaled Interrupts)들을 통해 KV 장치와 통신할 수 있다. KV 장치로부터의 메세지 응답들은 인터럽트들을 포함할 수 있다. KV 장치의 장치 드라이버는 KV 장치로부터의 메세지 응답들을 효과적으로 처리할 수 있다. 이는 KV 장치에 대한 IOPS(I/O Operations Per Second) 및 레이턴시(Latency)의 관점에서 I/O 성능을 향상시키기 위함이다.
호스트 컴퓨터의 운영 체제는 호스트 컴퓨터의 가상 메모리를 커널(Kernel) 공간과 사용자 공간으로 분리할 수 있다. 커널 공간과 사용자 공간의 분리는 오류로부터의 메모리 보호 기능을 제공할 수 있다. 커널 공간은 일반적으로 운영 체제 커널, 커널 확장들, 그리고 대부분의 장치 드라이버들을 실행하기 위해 예약된다. 반면에, 사용자 공간은 운영 체제가 사용하는 어플리케이션 소프트웨어, 프로그램들, 그리고 라이브러리(Library)들이 유지될 수 있는 메모리 공간을 제공한다. 또한, 사용자 공간은 특정 장치 드라이버들을 포함할 수 있다. 어플리케이션 프로그램들이 I/O를 수행하거나 운영 체제가 호스트 컴퓨터의 파일 시스템을 조작하는 것과 같이, 사용자 공간은 커널 공간과 상호 작용할 수 있다. 각각의 프로세스는 일반적으로 자체적인 가상 메모리 공간(사용자 공간) 내에서 동작한다. 또한, 명시적으로 허용되지 않는 경우에, 각각의 프로세스는 다른 프로세스들의 메모리에 액세스하지 못한다.
일 실시 예에 따라, 호스트 컴퓨터는 사용자 공간 내 KV 장치를 포함할 수 있다. 이는 높은 처리량을 달성하고 성능을 향상시키기 위함이다. KV 장치는 KV 장치에 대해 특별히 최적화된 다양한 타입의 메모리들을 포함할 수 있다. 예를 들어, KV 장치는 KV 장치에 최적화된 플래시 메모리를 포함할 수 있다. KV 장치 드라이버는 다양한 성능 특성을 구현하여 높은 처리량을 달성하고 성능을 향상시킬 수 있다. 예를 들어, 다양한 성능 특성은 멀티-레벨 CPU 어피니티(Affinity), 멀티-레벨 완료 병합(Completion Coalescing), 그리고 인터럽트부터 집계까지 처리하는 전환 완료(Switching Completion) 등을 포함할 수 있다. 이는 이하에서 자세히 설명될 것이다. KV 장치 드라이버는 호스트 컴퓨터의 부팅-업(Booting-up) 시간 동안 로드(Load)될 수 있다. 또는, KV 장치 드라이버는 호스트 컴퓨터가 부트 업 된 후에 호스트 운영 체제의 사용자 공간 내의 어플리케이션 프로그램의 실행 시간 동안 로드될 수 있다.
호스트 컴퓨터는 멀티-코어 CPU 들과 하나 또는 하나 이상의 KV 장치들을 포함할 수 있다. 일 실시 예에 따라, KV 장치(들)에 대한 KV 장치 드라이버는 호스트 컴퓨터의 운영 체제의 사용자 공간 내에 구현될 수 있다. KV 장치 드라이버는 호스트 컴퓨터 상에서 실행되는 목표 어플리케이션에 기초하여 KV 장치로부터의 응답들을 다르게 처리할 수 있다. 일 실시 예로서, KV 장치 드라이버는 이중 레벨의 CPU 어피니티를 제공할 수 있다. KV 장치 드라이버는 각각의 인터럽트 메세지 처리기를 위한 CPU 어피니티와 함께 MSI(Message Signaled Interrupt) 엔트리를 설정할 수 있다. 사용자 공간 내에서 실행되는 목표 어플리케이션은 실행된 I/O 커맨드의 큐(Queue)에 기초하여 CPU 어피니티를 설정하거나 변경할 수 있다.
도 1은 본 발명의 실시 예에 따른 데이터 베이스 시스템을 예시적으로 보여주는 그림이다. 시스템(100)의 운영 체제는 사용자 공간(110) 내의 KV 스토어(Store) API(101) 및 KV 장치, 그리고 커널 공간(120) 내의 커널을 포함할 수 있다. KV 스토어 API(101)는 KV 장치(150)를 위해 API(Application Programming Interface)를 제공한다. KV 장치(150)는 플래시 메모리와 같은 불휘발성 메모리를 포함할 수 있다. KV 장치 드라이버(102)는 KV 장치(150)에 대한 장치 드라이버이다.
또한, 시스템(100)은 데이터(111), 설명(Description)(112), 구성 정보(113)에 대한 스토리지를 포함할 수 있다. 구성 정보(113)는 CPU 어피니티, 인터럽트 병합, 그리고 인터럽트 모드 전환 등을 처리하고 인터럽트를 관리하기 위한 정보이다. 운영 체제의 커널 공간(120) 내에서, 해당 커널은 시스템 콜들(Calls)(103), 스토리지 스택(Storage Stack)(104), 그리고 VFIO(Virtual Function I/O) 드라이버 및 UIO(User Space I/O) 드라이버(105)를 포함할 수 있다. VFIO/UIO 드라이버(105)는 사용자 공간(110) 내의 KV 장치 드라이버(102)와 KV 장치(150) 사이의 I/O 동작들을 처리한다.
KV 장치(150)로부터의 읽기 또는 쓰기 완료 각각이 호스트 컴퓨터에의 인터럽트를 발생시킬 수 있는 경우에, 호스트 컴퓨터는 인터럽트들을 처리할 여유가 없을 수 있다. 효율적인 인터럽트 처리 및 관리 방법을 제공하기 위해서, 본 발명의 시스템(100)은 I/O 성능을 향상시키기 위해 KV 장치 드라이버를 호스트 운영 체제의 사용자 공간 내의 KV 장치(150)를 위해 제공할 수 있다.
장치 인터럽트가 발생하는 경우, 장치 인터럽트는 일반적으로 라운드 로빈(Round Robin) 방식으로 시스템 내의 프로세서(또는, CPU)에 전달된다. 이에 따라, 원래의 프로세서가 여전히 목표 어플리케이션을 실행할 때, 장치 인터럽트가 다른 프로세서에 전달될 수 있는 가능성이 있다. 이러한 상황은 캐시-쓰래싱(Cach-Thrashing) 현상을 발생시킨다. 캐시-쓰래싱 현상은 인터럽트가 전달된 CPU와 인터럽트 목표 CPU 사이의 내부 프로세서 라킹(Locking) 및 내부 프로세서 인터럽트들을 야기한다. 캐시-쓰래싱의 빈번한 발생은 시스템의 I/O 성능에 중요한 영향을 미친다. 캐시-쓰래싱 상황들을 완화시키기 위해, 본 발명의 KV 장치 드라이버는 I/O 성능을 향상시키기 위한 멀티 레이어(예를 들어, 이중 레이어)의 CPU 어피니티를 제공한다.
도 2는 CPU 어피니티를 예시적으로 보여주는 그림이다. 호스트 컴퓨터는 CPU 코어 인터럽트들(203)들에 CPU 어피니티를 제공하는 커널 인터럽트 핸들러(202)를 포함할 수 있다. KV 장치와 호스트 컴퓨터 사이의 CPU 어피니티는 커널 단계에서 설정될 수 있다. 호스트 컴퓨터의 커널은 벌크 내의 CPU 코어 인터럽트들(203)들을 처리할 수 있다. 이에 따라, 호스트 컴퓨터 상에서 실행되는 어플리케이션(201) 또는 어플리케이션(201)의 쓰레드가 특정 CPU 코어 인터럽트(203)를 호스트 컴퓨터의 전용 CPU에 겹합한다는 것이 보장되지 않을 수 있다. 이는 커널 인터럽트 핸들러(202)가 CPU 코어 인터럽트들(203) 당(Per) 장치 레벨과 어플리케이션(201) 사이의 연관 정보를 갖지 않기 때문이다. 결과적으로, 기존의 CPU 어피니티는 내부 프로세서 라킹(Locking)과 같은 원하지 않는 캐시-쓰래싱 상황 및 인터럽트가 전달된 CPU와 인터럽트 목표 CPU 사이의 내부 프로세서 인터럽트들을 발생시킬 수 있다.
일 실시 예로서, 본 명세서는 이중 레이어의 CPU 어피니티를 제공한다.
도 3은 본 발명의 실시 예에 따른 이중 레이어의 CPU 어피니티를 예시적으로 보여주는 그림이다. 호스트 컴퓨터의 사용자 공간 인터럽트 핸들러(311)는 어플리케이션(301)의 쓰레드와 호스트 컴퓨터의 전용 CPU 코어 사이의 이중-레이어 CPU 어피니티를 설정한다. 일 실시 예로서, 본 발명의 KV 장치 드라이버는 사용자 공간 인터럽트 핸들러(311)를 포함할 수 있다. 이중-레이어 CPU 어피니티는 사용자 공간 내에 설정된 어플리케이션 쓰레드 CPU 어피니티(351) 및 커널 공간 내에 설정된 인터럽트 CPU 어피니티(352)를 포함할 수 있다. 커널 인터럽트 핸들러(302)는 중요한 인터럽트 핸들링 기능을 제공한다는 점에서 도 2의 커널 인터럽트 핸들러(202)와 유사하다. 즉, 중요한 인터럽트 핸들링 기능은 KV 장치와 호스트 컴퓨터 사이의 I/O 큐들 및 CPU 코어 인터럽트들(303)을 교환하는 기능을 포함할 수 있다. 어플리케이션 쓰레드 CPU 어피니티(351)는 호스트 컴퓨터 상에서 실행되는 어플리케이션(301) 또는 어플리케이션(301)의 쓰레드 각각이 전용 CPU 코어에 겹합하는 것을 보장할 수 있다. 어플리케이션(301)은 고속의 SSD 장치의 I/O 동작들을 포화시키기에 충분한 I/O 동작들을 실행할 수 있다. 이러한 경우, 인터럽트 CPU 어피니티(352)는 인터럽트가 특정 I/O 동작에 대한 목표 CPU 코어에 전달되도록 보장할 수 있다. 비록 본 실시 예는 이중-레이어 CPU 어피니티를 기술하고 있지만, 본 발명의 범위를 벗어나지 않는 다른 숫자의 레이어들을 갖는 CPU 어피니티가 구현될 수 있다.
도 4는 본 발명의 실시 예에 따른 CPU 레이어 어피니티를 위한 워크 플로우를 예시적으로 보여주는 그림이다. 먼저, 호스트 컴퓨터의 사용자 공간 인터럽트 핸들러(예를 들어, 도 3의 사용자 공간 인터럽트 핸들러(311))는 쓰레드(411)과 CPU 코어(412) 사이에 겹합(Binding)을 할당하여 호스트 컴퓨터의 CPU 코어(412)와의 쓰레드 CPU 어피니티(451)를 설정한다. 쓰레드 CPU 어피니티(451)는 어플리케이션(401)의 쓰레드(411)에 대한 어피니티이다. 쓰레드(411)와 CPU 코어(412) 사이의 쓰레드 CPU 어피니티(451)의 결합 정보는 사용자 공간 인터럽트 핸들러의 메모리(미도시) 내에 저장될 수 있다. 사용자 공간 인터럽트 핸들러는 쓰레드 CPU 어피니티(451)와 관련된 I/O 큐(413)를 실행하고, 나아가 I/O 큐(413)와 인터럽트 메세지 핸들러(414) 사이의 인터럽트 CPU 어피니티(452)를 설정한다. 인터럽트 메세지 핸들러(414)는 인터럽트 메세지를 결합된 KV 장치(402)에 전송한다.
호스트 컴퓨터로부터 KV 장치(402)로의 인터럽트 메세지는 인터럽트 CPU 어피니티 정보를 포함할 수 있다. 호스트 컴퓨터로부터 수신된 인터럽트 CPU 어피니티 정보를 이용하여, KV 장치(402)는 실행 시에 전용 인터럽트 메세지 핸들러(414)에 인터럽트 메세지를 전송할 수 있다. 인터럽트 메세지 핸들러(414)에 의해 수신된 인터럽트 메세지는 이중-레이어 CPU 어피니티에 의해 목표 쓰레드(411)에 대한 관련 CPU 코어(412)에 전달될 수 있다. 이중-레이어 CPU 어피니티는 인터럽트 메세지 핸들러(414)에 의해 구현되는 인터럽트 CPU 어피니티(452) 및 사용자 공간 인터럽트 핸들러에 의해 구현된 쓰레드 CPU 어피니티(451)를 포함할 수 있다.
어플리케이션(401)에 의해 실행된 I/O 큐 각각은 전용 인터럽트 메세지 핸들러(414)와 관련된다. 전용 인터럽트 메세지 핸들러(414)는 I/O 큐(413)와 그것과 한 쌍인 호스트 컴퓨터의 CPU 코어(412)의 식별 정보를 포함할 수 있다. 인터럽트가 KV 장치(402)로부터 발생되면, 호스트 컴퓨터는 CPU의 인터럽트 벡터를 인식하여 목표 CPU 코어(412)를 효과적으로 찾을 수 있다. 어플리케이션(401)의 쓰레드 각각이 쓰레드 CPU 어피니티(451)를 통해 CPU 코어(412)와 연관되고 인터럽트 CPU 어피니티(452)를 통해 전용 인터럽트 메세지 핸들러(414)와 연관되기 때문에, 호스트 컴퓨터는 특히 목표 어플리케이션(401)을 위한 KV 장치(402)에 의해 발생된 인터럽트를 처리할 수 있다.
도 5는 본 발명의 실시 예에 따른 인터럽트 로드 제어의 워크 플로우를 예시적으로 보여주는 그림이다. 호스트 컴퓨터의 KV 장치 드라이버가 KV 장치(502)와 연결된 목표 CPU 코어(512)의 사용량이 KV 장치(502)부터의 추가적인 인터럽트들을 처리하기에 너무 높다고 판단한 경우, KV 장치 드라이버는 I/O 성능을 향상시키기 위해 호스트 컴퓨터의 CPU들 사이에 인터럽트 로드(Load)를 제어할 수 있다. 예를 들어, KV 장치 드라이버는 목표 CPU 코어(512)가 위치한 동일한 소켓 내의 낮은 CPU 사용량을 갖는 다른 CPU 코어를 찾도록 시도할 수 있다. 일 실시 예로서, 다른 소켓들 내의 CPU 코어들이 메모리를 통해 통신하거나 캐시 일관성(Coherency) 프로토콜을 사용하여 캐시 간 상호 작용과 통신하는 반면에, 동일 소켓 내부의 CPU 코어들은 L2 또는 L3 캐시를 공유할 수 있다. 따라서, 동일 소켓 내의 CPU 사이의 통신은 다른 소켓들 내의 CPU 코어들 사이의 CPU 통신보다 속도가 빠를 수 있다. KV 장치 드라이버가 동일 소켓 내에 위치한 후보 CPU 코어들 역시 추가적인 인터럽트들을 수신하기에 여유가 없다고 판단하는 경우, KV 장치 드라이버는 다른 소켓 내에 위치한 낮은 CPU 사용량을 갖는 CPU를 찾도록 시도한다.
인터럽트 병합 또는 완료 병합은 일반적으로 인터럽트를 발생시키는 I/O 이벤트들이 딜레이되는 테크닉을 의미한다. I/O 이벤트들은 특정 양의 일이 대기될 때까지 혹은 타임 아웃 타이머가 트리거(Trigger)할 때까지 지연된다. 인터럽트 병합은 상대적으로 작은 레이턴시 패널티만을 발생시키는 반면에 인터럽트 워크로드를 줄일 수 있다.
일 실시 예에 따른 본 발명의 KV 장치 드라이버는 멀티-레벨의 인터럽트 병합을 제공할 수 있다. 예를 들어, 멀티-레벨의 인터럽트 병합은 이중-레벨일 수 있다. 완료들이 제 1 레벨에서 병합되면, 본 발명의 KV 장치 드라이버는 제 2 레벨의 병합 역시 수행할 수 있다. 완료들은 KV 장치 완료 큐로부터 인출되어 어플리케이션의 완료 큐 내에 넣어질 수 있다. 또한, 제 2 레벨의 완료 큐는 병합 기능을 가질 수 있다. 병합의 임계(Threshold) 값은 어플리케이션 워크로드에 기초하여 조정될 수 있다.
도 6은 본 발명의 실시 예에 따른 이 단계의 완료 병합을 예시적으로 보여주는 그림이다. 일 실시 예로서, 이중-레벨의 완료 병합은 제 1 장치 레벨의 병합 및 호스트 컴퓨터 상의 장치 드라이버 레벨 내의 제 2 레벨 병합을 포함할 수 있다. 제 1 레벨의 인터럽트 병합(651)은 KV 장치(602) 내에서 장치 레벨로서 수행된다. KV 장치(602)는 제 1 레벨의 인터럽트 병합(651)에 기초하여 연결된 인터럽트 메세지 핸들러들(614)에 인터럽트 메세지를 이슈(Issue)한다. 제 1 레벨의 인터럽트 병합(651) 외에, 호스트 컴퓨터의 본 발명에 따른 KV 장치 드라이버는 호스트 컴퓨터의 장치 드라이버 레벨에서 제 2 레벨의 인터럽트 병합(652)를 실행할 수 있다. 이중 레벨의 완료 병합은 KV 장치 드라이버가 사용자 공간 내에서의 인터럽트 병합을 수행하는 데에도 KV 장치(602)로부터 수신된 인터럽트 메세지를 사용할 수 있도록 한다. 사용자 공간 내에서의 인터럽트 병합 능력은 어플리케이션에 기초하여 드라이버 측에서의 좀 더 유연한 인터럽트 병합을 제공할 수 있다. 이에 따라, 어플리케이션-인식(Application-Aware) 인터럽트 관리 및 처리가 가능해진다. 도 1을 참조하면, 본 발명의 시스템은 커널 공간(120)이 아닌 사용자 공간(110) 내의 호스트 측의 KV 장치(150)를 위한 KV 장치 드라이버(102)를 포함할 수 있다. KV 장치 드라이버(102)가 사용자 공간(110)에 위치하기 때문에, KV 장치 드라이버는 드라이버 측에서의 좀 더 유연한 인터럽트 병합을 구현할 수 있다.
특정 CPU 코어(612)를 목표로 하는 KV 장치(602)에 의해 생성된 인터럽트 메세지들은 먼저 제 1 레벨의 인터럽트 병합(651)를 통해 연결된 인터럽트 메세지 핸들러들(614)에 송신된다. 인터럽트 메세지들은 인터럽트 메세지 핸들러들(614)의 완료 큐(미도시) 내에 저장된다. 일 실시 예로서, 완료 큐는 인터럽트 메세지 핸들러들(614) 사이에서 공유될 수 있다. 다른 실시 예로서, 인터럽트 메세지 핸들러들(614) 각각은 자체적인 완료 큐를 포함할 수 있다. 인터럽트 메세지 핸들러들(614)은 소정의 간격(Predetermined Interval)에 기초하여 완료 큐(들) 내의 인터럽트 메세지들을 한 번에 일괄적으로 처리하고, I/O 큐들(613)을 생성한다.
일 실시 예로서, KV 장치 드라이버(102)는 호스트 측면의 집계 시간 및 사용자 공간 내의 집계 임계 값을 통해 제 2 레벨의 인터럽트 병합(652)을 수행한다. 어플리케이션 워크 로드에 기초하여, KV 장치 드라이버(102)는 동적으로 이들 두 값(호스트 측면의 집계 시간 및 사용자 공간 내의 집계 임계 값)들을 조정할 수 있다. 일단 콜백 함수를 입력하면, KV 장치 드라이버(102)는 인터럽트 간격을 완전히 활용하기 위하여 완료된 인터럽트 커맨드들을 모두 치우기 위해 전용 I/O 완료 큐를 가로질러 갈 수 있다.
일 실시 예에 따라, 본 발명의 KV 장치 드라이버는 인터럽트 모드와 집계 모드 간에 또는 반대의 경우에도 모드 변환기를 사용하여 완료 처리를 전환할 수 있다. 모드 변환기는 IOPS, I/O 큐 뎁스(Depth), 그리고 시스템 레이턴시(Latency)와 같은 호스트 시스템으로부터의 입력들을 수신하고, 시스템의 워크로드에 기초하여 동작 모드를 전환할 수 있다. 집계 모드는 인터럽트 모드의 코너 케이스(Corner Case)로 간주된다. 집계에 의한 완료 처리는 과도하게 CPU 리소스들을 소비할 수 있지만, 높은 IOPS 워크로드에 유용하다. 본 발명의 시스템은 워크 로드에 따라 완료 처리기를 집계 모드와 인터럽트 모드 사이에서 동적으로 전환하는 사용자 공간 내에서의 매커니즘을 제공한다.
기본적으로, 본 발명의 KV 장치 드라이버는 인터럽트 모드에서 상술한 이중 레이어의 CPU 어피니티에서 완료 처리 및 완료 병합을 위해 인터럽트들을 이용할 수 있다. 인터럽트들이 인터럽트 로드 평균의 임계 값을 초과하는 경우, 본 발명의 KV 장치 드라이버는 인터럽트 모드에서 집계 모드로 전환할 수 있다.
본 발명의 KV 장치는 주기적으로 인터럽트 로드를 로컬 및 글로벌 측면에서 모니터할 수 있다. 예를 들어, 로컬 인터럽트 로드는 매 초마다 계산될 수 있고, 글로벌 로드 평균 값은 60 개의 샘플들을 평균하여 매 분마다 계산될 수 있다. 로컬 인터럽트 로드 평균은 특정 CPU 코어가 대기 중인 다수의 인터럽트들을 갖고 있는지 여부를 판단하기 위해 사용될 수 있다. 글로벌 인터럽트 로드 평균은 시스템 전체적으로 대기중인 다수의 인터럽트들을 갖고 있는지 여부를 판단하기 위해 사용될 수 있다.
일 실시 예에 따르면, 완료 처리를 위한 구성은 글로벌 또는 로컬 측면에서 전환하도록 설정될 수 있다. 집계 모드에서 실행될 때, 만약 인터럽트 로드 평균이 임계 값 이하로 감소하는 경우에, 호스트 컴퓨터의 CPU 사용량을 절약하기 위해, 본 발명의 KV 장치 드라이버는 인터럽트 모드로 다시 전환할 수 있다. 본 발명의 KV 장치 드라이버는 초기 임계 값을 설정할 수 있다. 또한, 본 발명의 KV 장치 드라이버는 어플리케이션이 전환 옵션들을 글로벌 또는 로컬 측면에서 설정하거나 임계 값을 설정하는 옵션을 갖도록 할 수 있다.
이하에서, 본 발명의 실시 예에 따른 속도 임계 값(Rate Threshold)를 계산하기 위한 슈도 코드(Psuedo-code)의 하나의 예가 설명될 것이다. 인터럽트 로드 평균의 실시간 값은 현재 처리되고 있는 인터럽트들과 처리 대기 중인 인터럽트들의 총 합을 현재 처리되고 있는 인터럽트들의 수로 나눈 값으로 계산된다. 인터럽트 로드 평균은 인터럽트 로드 평균 실시간 값을 과거 시간 윈도우(예를 들어, 1분)로 평균하여 계산된다.
즉, 인터럽트 로드 평균의 실시간 값(Interrupt Load Average Real Time value) = [현재 처리되고 있는 인터럽트들의 수(number of interrupts currently processing) + 처리 대기 중인 인터럽트들의 수(number of interrupts waiting to process)] / [현재 처리되고 있는 인터럽트들의 수(umber of interrupts currently processing)]가 되고,
인터럽트 로드 평균(Interrupt Load Average) = 인터럽트 로드 평균 실시간 값을 소정의 시간으로 평균한 값(Average of Interrupt Load Average Real Time value for a predetermined time period)이 된다.
아래의 예는 인터럽트 모드와 집계 모드 사이에서 완료 처리를 전환하기 위한 슈도 코드(Psuedo-code)의 하나의 예이다.
Figure pat00001
도 7은 본 발명의 실시 예에 따른 인터럽트와 로컬(Local) 집계 사이의 종료 처리를 전환하기 위한 워크 플로우를 예시적으로 보여주는 순서도이다. S701 단계에서, 사용자 공간 내의 본 발명의 KV 장치 드라이버는 기본적으로 인터럽트 모드에서 실행된다. KV 장치 드라이버는 호스트 컴퓨터의 CPU 코어들 각각의 로컬 I/O 워크로드를 모니터할 수 있다.
S702 단계에서, 로드 평균이 상단 임계 값 이상인지 확인한다. 상단 임계 값 이상인 경우(Yes 방향), 절차는 S703 단계로 진행된다. 상단 임계 값보다 작은 경우(No 방향), 절차는 S704 단계로 진행된다.
S703 단계에서, 만약, I/O 워크 로드 중 하나라도 로컬 임계 값(또는, S702 단계에서의 로컬 상단 임계 워크로드)보다 큰 경우, 높은 처리량을 달성하기 위해, KV 장치 드라이버는 CPU 코어를 인터럽트 모드에서 집계 모드로 전환할 수 있다. KV 장치 드라이버는 I/O 워크로드를 계속적으로 모니터한다.
S704 단계에서, KV 장치 드라이버가 I/O 워크로드가 로컬 임계 값(여기서, 로컬 하단 임계 워크로드)보다 낮은지를 판단한다. 하단 임계 워크로드보다 작은 경우(Yes 방향), 절차는 S705 단계로 진행된다. 하단 임계 워크로드보다 큰 경우(No 방향), 절차는 S701 단계로 진행된다. S705 단계에서, 레이턴시(Latency)를 줄이기 위해서, KV 장치 드라이버는 CPU 코어를 집계 모드에서 인터럽트 모드로 전환할 수 있다.
도 8은 본 발명의 실시 예에 따른 인터럽트와 글로벌(Global) 집계 사이의 종료 처리를 전환하기 위한 워크 플로우를 예시적으로 보여주는 순서도이다. 사용자 공간 내의 본 발명의 KV 장치 드라이버는 기본적으로 인터럽트 모드로 실행될 수 있다.
S801 단계에서, KV 장치 드라이버는 호스트 컴퓨터의 모든 CPU 코어들의 I/O 워크로드를 글로벌하게 모니터할 수 있다. 예를 들어, 글로벌 워크로드는 모든 CPU 코어들의 평균 인터럽트 로드에 의해 결정될 수 있다.
S802 단계에서, 인터럽트 로드 평균이 글로벌 임계값(또는 글로벌 상한 임계 워크로드)보다 큰지 비교한다. 큰 경우(Yes 방향), 절차는 S803 단계로 진행된다. 작은 경우(No 방향), 절차는 S801 단계로 진행된다.
S803 단계에서, KV 장치 드라이버는 CPU 코어들 모두를 인터럽트 모드에서 집계 모드로 전환할 수 있다. S804 단계에서, 집계 단계로 전환한 후, CPU 코어 각각은 자체적인 관련 I/O 큐들을 집계할 수 있다. KV 장치 드라이버는 I/O 워크로드를 계속적으로 모니터한다.
S805 단계에서, KV 장치 드라이버는 인터럽트 과부하가 회복되었는지 판단한다. 회복된 경우(Yes 방향), 절차는 S806 단계로 진행된다. 회복되지 않은 경우(No 방향), 절차는 S804 단계로 진행된다. S806 단계에서, KV 장치 드라이버는 CPU 코어를 집계 모드에서 인터럽트 모드로 전환한다.
일 실시 예에 따라, 컴퓨터 시스템은 호스트 컴퓨터, 호스트 컴퓨터와 연결된 스토리지 장치를 포함할 수 있다. 호스트 컴퓨터는 호스트 운영 체제의 사용자 공간 내에 스토리지 장치의 사용자 공간 장치 드라이버를 포함할 수 있다. 사용자 공간 장치 드라이버는 호스트 컴퓨터 상에서 실행되는 어플리케이션에 기초하여 스토리지 장치와의 사이에서 I/O 동작들을 처리하도록 구성될 수 있다.
컴퓨터 시스템은 데이터 스토리지, 설명(Description) 스토리지, 구성 스토리지를 더 포함할 수 있다. 스토리지 장치는 KV 장치일 수 있다. 사용자 공간 장치 드라이버는 사용자 공간 내에서 실행되도록 구성된 KV 장치 드라이버일 수 있다.
컴퓨터 시스템은 복수의 CPU 코어를 더 포함할 수 있다. 사용자 공간 장치 드라이버는 사용자 공간 인터럽트 핸들러를 포함할 수 있다. 사용자 공간 인터럽트 핸들러는 사용자 공간 내에서 실행되는 어플리케이션의 쓰레드와 제 1 CPU 코어 사이에 쓰레드 CPU 어피니티를 제공하도록 구성된다.
호스트 운영 체제는 커널 인터럽트 핸들러를 더 포함할 수 있다. 커널 인터럽트 핸들러는 I/O 큐와 인터럽트 메세지 핸들러 사이에 인터럽트 CPU 어피니티를 제공하도록 구성된다.
사용자 공간 장치 드라이버는 KV 장치로부터 인터럽트를 수신하도록 구성될 수 있다. 또한, 사용자 공간 장치 드라이버는 인터럽트가 인터럽트 CPU 어피니티 및 쓰레드 CPU 어피니티를 통해 제 1 CPU 코어와 사용자 공간 내에서 실행되는 어플리케이션의 쓰레드에 전용되고 있는지 확인하도록 구성될 수 있다. 어플리케이션은 사용자 공간 내, 제 1 CPU 코어 내에서 실행된다. 제 1 CPU 코어와 같이, 동일 소켓 내의 제 2 cpu 코어에 인터럽트를 전환하도록 구성될 수 있다. 사용자 공간 장치 드라이버는 스토리지 장치 내의 제 1 레벨의 인터럽트 병합, 제 1 CPU 코어와 사용자 공간 내의 I/O 큐 사이의 제 2 레벨의 인터럽트 병합을 제공하도록 구성될 수 있다.
사용자 공간 장치 드라이버는 인터럽트 처리 모드를 인터럽트 모드와 집계 모드 사이에서 전환하도록 구성될 수 있다. 사용자 공간 장치 드라이버는 CPU의 로컬 워크로드를 모니터하고, CPU 코어의 로컬 워크로드에 기초하여 인터럽트 처리 모드를 전환하도록 구성될 수 있다. 사용자 공간 장치 드라이버는 복수의 CPU 코어의 글로벌 워크로드를 모니터하고, 복수의 CPU 코어들의 글로벌 워크로드에 기초하여 인터럽트 처리 모드를 전환하도록 구성될 수 있다.
다른 실시 예에 따른 인터럽트 처리 제공 방법은:
호스트 컴퓨터의 호스트 운영 체제의 사용자 공간 내에 호스트 컴퓨터와 연결된 스토리지 장치를 위해 사용자 공간 장치 드라이버를 제공하는 단계; 그리고 사용자 공간 장치 드라이버를 호스트 컴퓨터 상에서 실행되는 어플리케이션에 기초하여 스토리지 장치로의 또는 스토리지 장치로부터의 I/O 동작들을 처리하도록 구성하는 단계를 포함한다.
스토리지 장치는 KV 장치일 수 있다. 또한, 사용자 공간 장치 드라이버는 사용자 공간 내에서 실행하도록 구성된 KV 장치 드라이버일 수 있다.
호스트 컴퓨터는 복수의 CPU 코어를 포함할 수 있다. 인터럽트 처리 제공 방법은:
사용자 공간 장치 드라이버의 사용자 공간 인터럽트 핸들러를 구성하는 단계와 제 1 CPU 코어와 사용자 공간 내에서 실행되는 어플리케이션의 쓰레드 사이에 쓰레드 CPU 어피니티를 제공하는 단계를 더 포함할 수 있다.
인터럽트 처리 제공하는 방법은:
호스트 운영 체제의 커널 인터럽트 핸들러를 구성하는 단계와 인터럽트 메세지 핸들러와 I/O 큐 사이에 인터럽트 CPU 어피니티를 제공하는 단계를 더 포함할 수 있다.
인터럽트 처리 제공하는 방법은:
KV 장치로부터 인터럽트를 수신하는 단계와 인터럽트가 인터럽트 CPU 어피니티 및 쓰레드 CPU 어피니티를 통해 제 1 CPU 코어에 전용되고 사용자 공간 내에서 실행되는 어플리케이션의 쓰레드에 전용되고 있는지 확인하는 단계를 더 포함할 수 있다.
인터럽트 처리 제공하는 방법은 제 1 CPU 코어처럼 동일 소켓 내의 제 2 CPU 코어에 인터럽트를 전환하는 단계를 더 포함할 수 있다.
인터럽트 처리 제공하는 방법은 스토리지 장치 내의 제 1 레벨의 인터럽트 병합을 제공하고 제 1 CPU 코어와 사용자 공간 내의 I/O 큐 사이에 제 2 레벨의 인터럽트 병합을 제공하는 단계를 더 포함할 수 있다.
인터럽트 처리 제공하는 방법은 인터럽트 처리 모드를 인터럽트 모드와 집계 모드 사이에서 전환하는 단계를 더 포함할 수 있다. 인터럽트 처리 제공하는 방법은 하나 또는 하나 이상의 CPU 코어들의 워크 로드를 모니터링하는 단계와 하나 또는 하나 이상의 CPU 코어들의 워크 로드에 기반하여 인터럽트 처리 모드를 전환하는 단계를 더 포함할 수 있다.
위에서 설명한 내용은 본 발명을 실시하기 위한 구체적인 예들이다. 본 발명에는 위에서 설명한 실시 예들뿐만 아니라, 단순하게 설계 변경하거나 용이하게 변경할 수 있는 실시 예들도 포함될 것이다. 또한, 본 발명에는 위에서 설명한 실시 예들을 이용하여 앞으로 용이하게 변형하여 실시할 수 있는 기술들도 포함될 것이다.
100 : 시스템 101 : API
102 : KV 장치 드라이버 103 : 시스템 콜들
104 : 스토리지 스택 105 : VFIO/UIO
111 : 데이터 스토리지 112 : 설명 스토리지
113 : 구성 스토리지 110 : 사용자 공간
120 : 커널 공간 150, 502 : KV 장치
201, 301, 401, 501 : 어플리케이션
202, 302, 402 : 커널 인터럽트 핸들러
203, 303 : CPU 코어 인터럽트들
311 : 사용자 공간 인터럽트 핸들러
351, 451, 551 : 쓰레드 CPU 어피니티
352, 452, 552 : 인터럽트 CPU 어피니티
411, 511 : 쓰레드 412, 512, 612 : CPU 코어
413, 613 : I/O 큐
414, 514, 614 : 인터럽트 메세지 핸들러
415 : 장치 I/O 큐
651 : 제 1 레벨 인터럽트 병향
652 : 제 2 레벨 인터럽트 병합

Claims (10)

  1. 호스트 컴퓨터; 그리고
    상기 호스트 컴퓨터와 연결된 스토리지 장치를 포함하되,
    상기 호스트 컴퓨터는 호스트 운영 체제(OS: Operating System)의 사용자 공간 내에 상기 스토리지 장치의 사용자 공간 장치 드라이버(User-Space Device Driver)를 포함하고,
    상기 사용자 공간 장치 드라이버는 상기 호스트 컴퓨터 상에서 실행되는 어플리케이션에 기초하여 상기 스토리지 장치로의 또는 상기 스토리지 장치로부터의 I/O 동작들을 처리하도록 구성되는 컴퓨터 시스템.
  2. 제 1 항에 있어,
    데이터 스토리지, 설명(Description) 스토리지, 그리고 구성(Configuration) 스토리지를 더 포함하는 컴퓨터 시스템.
  3. 제 1 항에 있어,
    상기 스토리지 장치는 KV(Key-Value) 장치이고, 상기 사용자 공간 장치 드라이버는 상기 사용자 공간 내에서 실행되도록 구성된 KV 장치 드라이버인 컴퓨터 시스템.
  4. 제 1 항에 있어,
    복수의 CPU(Central Processing Unit) 코어를 더 포함하되,
    상기 사용자 공간 장치 드라이버는 사용자 공간 인터럽트 핸들러(Handler)를 포함하고,
    상기 사용자 공간 인터럽트 핸들러는 상기 사용자 공간 내에서 실행되는 어플리케이션의 쓰레드(Thread)와 제 1 CPU 코어 사이에 쓰레드 CPU 어피니티(Affinity)를 제공하도록 구성되는 컴퓨터 시스템.
  5. 제 4 항에 있어,
    상기 호스트 운영 체제는 호스트 운영 체제는 커널(Kernel) 인터럽트 핸들러를 더 포함하되,
    상기 커널 인터럽트 핸들러는 I/O 큐(Queue)와 인터럽트 메세지 핸들러 사이에 인터럽트 CPU 어피니티를 제공하도록 구성되는 컴퓨터 시스템
  6. 제 5 항에 있어,
    상기 사용자 공간 장치 드라이버는 KV 장치로부터 인터럽트를 수신하고,
    상기 인터럽트가 상기 사용자 공간 내에서 실행되는 상기 어플리케이션의 상기 쓰레드에 전용(Dedicate)되는지, 그리고 상기 인터럽트가 상기 인터럽트 CPU 어피니티 및 상기 쓰레드 CPU 어피니티를 통해 상기 제 1 CPU 코어에 전용되는지 여부를 확인하도록 구성되는 컴퓨터 시스템.
  7. 인터럽트 처리 제공 방법에 있어,
    호스트 컴퓨터의 호스트 운영 체제의 사용자 공간 내에 상기 호스트 컴퓨터와 연결된 스토리지 장치를 위해 사용자 공간 장치 드라이버를 제공하는 단계; 그리고
    상기 사용자 공간 장치 드라이버를 상기 호스트 컴퓨터 상에서 실행되는 어플리케이션에 기초하여 상기 스토리지 장치로의 또는 상기 스토리지 장치로부터의 I/O 동작들을 처리하도록 구성하는 단계를 포함하는 방법.
  8. 제 7 항에 있어,
    상기 스토리지 장치는 KV 장치이고,
    상기 사용자 공간 장치 드라이버는 상기 사용자 공간 내에서 실행하도록 구성된 KV 장치 드라이버인 방법.
  9. 제 7 항에 있어,
    인터럽트 처리 제공 방법은,
    상기 사용자 공간 장치 드라이버의 사용자 공간 인터럽트 핸들러를 구성하는 단계; 그리고
    상기 사용자 공간 내에서 실행되는 어플리케이션의 쓰레드와 제 1 CPU 코어 사이에 쓰레드 CPU 어피니티를 제공하는 단계를 더 포함하되,
    상기 호스트 컴퓨터는 복수의 CPU 코어를 포함하는 방법.
  10. 제 9 항에 있어,
    상기 호스트 운영 체제의 커널 인터럽트 핸들러를 구성하는 단계; 그리고
    인터럽트 메세지 핸들러와 I/O 큐 사이에 인터럽트 CPU 어피니티를 제공하는 단계를 더 포함하는 방법.
KR1020160079525A 2015-10-08 2016-06-24 키-벨류 장치를 포함하는 컴퓨터 시스템 및 그것의 인터럽트 처리 제공 방법 KR102386174B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201562239193P 2015-10-08 2015-10-08
US62/239,193 2015-10-08
US14/970,293 2015-12-15
US14/970,293 US9965412B2 (en) 2015-10-08 2015-12-15 Method for application-aware interrupts management

Publications (2)

Publication Number Publication Date
KR20170042217A true KR20170042217A (ko) 2017-04-18
KR102386174B1 KR102386174B1 (ko) 2022-04-13

Family

ID=58499560

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160079525A KR102386174B1 (ko) 2015-10-08 2016-06-24 키-벨류 장치를 포함하는 컴퓨터 시스템 및 그것의 인터럽트 처리 제공 방법

Country Status (2)

Country Link
US (1) US9965412B2 (ko)
KR (1) KR102386174B1 (ko)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10346048B2 (en) * 2015-04-10 2019-07-09 Samsung Electronics Co., Ltd. Electronic system with storage management mechanism and method of operation thereof
US10146583B2 (en) * 2016-08-11 2018-12-04 Samsung Electronics Co., Ltd. System and method for dynamically managing compute and I/O resources in data processing systems
US11126474B1 (en) * 2017-06-14 2021-09-21 Amazon Technologies, Inc. Reducing resource lock time for a virtual processing unit
CN107479826B (zh) * 2017-07-06 2020-08-28 北京北信源软件股份有限公司 一种数据写入方法及装置
US10592281B1 (en) 2017-09-28 2020-03-17 Amazon Technologies, Inc. Wait optimizer for recording an order of first entry into a wait mode by a virtual central processing unit
US10949367B2 (en) * 2018-10-18 2021-03-16 Samsung Electronics Co., Ltd. Method for handling kernel service request for interrupt routines in multi-core environment and electronic device thereof
US20200241927A1 (en) * 2020-04-15 2020-07-30 Intel Corporation Storage transactions with predictable latency
US11595472B2 (en) 2021-01-19 2023-02-28 Mellanox Technologies, Ltd. Controlling packet delivery based on application level information
US11934890B2 (en) * 2021-07-16 2024-03-19 VMware LLC Opportunistic exclusive affinity for threads in a virtualized computing system
US11792139B2 (en) 2022-01-24 2023-10-17 Mellanox Technologies, Ltd. Efficient packet reordering using hints

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20090095634A (ko) * 2006-12-06 2009-09-09 마이크로소프트 코포레이션 가상화된 환경에서의 최적화된 인터럽트 전달
US20110087814A1 (en) * 2009-10-09 2011-04-14 Emulex Design & Manufacturing Corporation Enhanced I/O Performance in a Multi-Processor System Via Interrupt Affinity Schemes
US20120017213A1 (en) * 2010-07-13 2012-01-19 Microsoft Corporation Ultra-low cost sandboxing for application appliances
US20140189701A1 (en) * 2012-12-27 2014-07-03 Andrey Semin Methods, systems and apparatuses for processor selection in multi-processor systems

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6418517B1 (en) 1997-08-29 2002-07-09 International Business Machines Corporation Optimized function execution for a multiprocessor computer system
US7178145B2 (en) 2001-06-29 2007-02-13 Emc Corporation Queues for soft affinity code threads and hard affinity code threads for allocation of processors to execute the threads in a multi-processor system
US6754738B2 (en) 2001-09-28 2004-06-22 International Business Machines Corporation Low overhead I/O interrupt
GB0404696D0 (en) 2004-03-02 2004-04-07 Level 5 Networks Ltd Dual driver interface
US7149832B2 (en) 2004-11-10 2006-12-12 Microsoft Corporation System and method for interrupt handling
DE602005018549D1 (de) 2005-05-04 2010-02-04 Telecom Italia Spa Verfahren und system zum verarbeiten von paketflüssen und computerprogrammprodukt dafür
US20080155571A1 (en) 2006-12-21 2008-06-26 Yuval Kenan Method and System for Host Software Concurrent Processing of a Network Connection Using Multiple Central Processing Units
US7788435B2 (en) * 2008-01-09 2010-08-31 Microsoft Corporation Interrupt redirection with coalescing
US8180973B1 (en) 2009-12-23 2012-05-15 Emc Corporation Servicing interrupts and scheduling code thread execution in a multi-CPU network file server
US9152468B2 (en) 2010-10-25 2015-10-06 Samsung Electronics Co., Ltd. NUMA aware system task management
WO2013016299A1 (en) 2011-07-22 2013-01-31 Yilin Wang Event system and methods for using same
US9378059B2 (en) * 2012-10-19 2016-06-28 Argyle Data, Inc. Multi-threaded, lockless data parallelization
US9164935B2 (en) 2013-01-04 2015-10-20 International Business Machines Corporation Determining when to throttle interrupts to limit interrupt processing to an interrupt processing time period
KR102114453B1 (ko) * 2013-07-19 2020-06-05 삼성전자주식회사 모바일 장치 및 그것의 제어 방법
US9946607B2 (en) * 2015-03-04 2018-04-17 Sandisk Technologies Llc Systems and methods for storage error management

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20090095634A (ko) * 2006-12-06 2009-09-09 마이크로소프트 코포레이션 가상화된 환경에서의 최적화된 인터럽트 전달
US20110087814A1 (en) * 2009-10-09 2011-04-14 Emulex Design & Manufacturing Corporation Enhanced I/O Performance in a Multi-Processor System Via Interrupt Affinity Schemes
US20120017213A1 (en) * 2010-07-13 2012-01-19 Microsoft Corporation Ultra-low cost sandboxing for application appliances
US20140189701A1 (en) * 2012-12-27 2014-07-03 Andrey Semin Methods, systems and apparatuses for processor selection in multi-processor systems

Also Published As

Publication number Publication date
US20170103031A1 (en) 2017-04-13
US9965412B2 (en) 2018-05-08
KR102386174B1 (ko) 2022-04-13

Similar Documents

Publication Publication Date Title
KR102386174B1 (ko) 키-벨류 장치를 포함하는 컴퓨터 시스템 및 그것의 인터럽트 처리 제공 방법
JP7313381B2 (ja) ハードウェアアクセラレーションのためのハードウェアリソースの埋込みスケジューリング
JP5963282B2 (ja) 割り込み分配スキーム
US8495267B2 (en) Managing shared computer memory using multiple interrupts
JP5180373B2 (ja) 仮想化環境における割り込みメッセージ終了のレイジー処理
KR101572079B1 (ko) 시스템 관리 모드의 프로세서에 상태 스토리지를 제공하기 위한 장치, 방법 및 시스템
US11061841B2 (en) System and method for implementing a multi-threaded device driver in a computer system
US10614004B2 (en) Memory transaction prioritization
US20140129751A1 (en) Hybrid interface to improve semiconductor memory based ssd performance
US10289418B2 (en) Cooperative thread array granularity context switch during trap handling
US11640305B2 (en) Wake-up and timer for scheduling of functions with context hints
US20200310690A1 (en) Dynamic near-data processing control mechanism based on computer resource availability on solid-state disk platforms
US10127076B1 (en) Low latency thread context caching
KR20160061726A (ko) 인터럽트 핸들링 방법
US11409673B2 (en) Triggered operations for collective communication
US10073723B2 (en) Dynamic range-based messaging
US10051087B2 (en) Dynamic cache-efficient event suppression for network function virtualization
US20230112420A1 (en) Kernel optimization and delayed execution
오명원 Enhancing the I/O System for Virtual Machines Using High Performance SSDs

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right