KR102668521B1 - 가상 코어 자동 스케일링을 지원하는 병렬 처리 방법 및 이를 위한 장치 - Google Patents

가상 코어 자동 스케일링을 지원하는 병렬 처리 방법 및 이를 위한 장치 Download PDF

Info

Publication number
KR102668521B1
KR102668521B1 KR1020160162458A KR20160162458A KR102668521B1 KR 102668521 B1 KR102668521 B1 KR 102668521B1 KR 1020160162458 A KR1020160162458 A KR 1020160162458A KR 20160162458 A KR20160162458 A KR 20160162458A KR 102668521 B1 KR102668521 B1 KR 102668521B1
Authority
KR
South Korea
Prior art keywords
virtual
traffic
virtual core
queue
flow
Prior art date
Application number
KR1020160162458A
Other languages
English (en)
Other versions
KR20180062607A (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 KR1020160162458A priority Critical patent/KR102668521B1/ko
Priority to US15/821,259 priority patent/US10635478B2/en
Publication of KR20180062607A publication Critical patent/KR20180062607A/ko
Application granted granted Critical
Publication of KR102668521B1 publication Critical patent/KR102668521B1/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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/70Virtual switches
    • 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/4557Distribution of virtual machine instances; Migration and load balancing
    • 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/45575Starting, stopping, suspending or resuming virtual machine instances
    • 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/45583Memory management, e.g. access or allocation
    • 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)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

가상 코어 자동 스케일링을 지원하는 병렬 처리 방법 및 이를 위한 장치가 개시된다. 적어도 하나 이상의 가상 머신과 각 가상 머신 별로 적어도 하나 이상의 가상 코어 큐를 가진 가상화 환경에서, 순차적인 트래픽에 대한 병렬 처리 방법은, 입력되는 트래픽의 속성에 따라서 트래픽의 플로우를 식별하는 단계; 식별된 플로우에 따라, 트래픽이 매핑될 가상 코어 큐를 결정하고, 트래픽을 결정된 가상 코어 큐에 큐잉하는 단계; 및 가상 스위치를 통해서 결정된 가상 코어 큐로부터 결정된 가상 코어 큐에 대응되는 가상 머신으로 트래픽을 전달하는 단계를 포함한다. 따라서, 멀티 코어 가상화 환경에서, 트래픽의 재순서화 문제없이 병렬 처리가 가능해지며, 네트워크 트래픽의 상황에 따른 가상 코어의 자동 스케일링 또한 가능해진다.

Description

가상 코어 자동 스케일링을 지원하는 병렬 처리 방법 및 이를 위한 장치 {Parallel processing method supporting virtual core automatic scaling, and apparatus for the same}
본 발명은 멀티 코어 가상화 환경에서의 병렬 처리 기술에 관한 것으로, 더욱 상세하게는, 멀티 코어 가상화 환경에서, 트래픽의 순서를 유지하면서 트래픽의 상황에 따른 가상 코어 자동 스케일링이 수행될 수 있도록 하는, 병렬 처리 방법 및 이를 위한 장치에 관한 것이다.
멀티 코어 가상화 환경에서, 트래픽을 수신하는 네트워크 인터페이스 카드(NIC: Network Interface Card)와 해당 네트워크 인터페이스 카드에서 수신된 트래픽들을 가상 머신(VM, Virtual Machine)들로 스위칭하는 가상 스위치(VS, Virtual Switch)와 다수개의 가상 코어(Virtual Core)가 할당되어 연산 처리 및 트래픽 처리를 수행하는 가상 머신들로 구성된 시스템을 통해, 순서를 가지는 트래픽의 병렬 처리를 수행할 수 있다.
이러한 멀티 코어 가상화 환경에서, 순서를 가지는 트래픽의 병렬 처리를 위해, 네트워크 인터페이스 카드(NIC)에서 각각의 트래픽 패킷의 헤더의 일부에 대한 해시함수(hash function) 값을 계산(RSS Tag, Receive Side Scaling Tag)하여, 해당 트래픽 패킷에 대한 트래픽 패킷 기술자(Packet Descriptor)에 실어서 가상 스위치로 전달하고, 가상 스위치는 가상 스위칭을 수행하면서 가상 머신까지 해당 RSS Tag 값을 전달한다. 그리고 다수개의 가상 코어들이 할당되어 연산 처리 및 트래픽 처리를 수행하는 가상 머신에서는 트래픽에 대해, 동일한 RSS Tag 값을 가지는 트래픽들을 동일한 가상 코어에 전달하게 하여, 순서를 가지는 트래픽 트래픽에 대해 병렬 처리가 가능하게 한다.
그러나, 이러한 시스템은 가상 머신들이 트래픽을 병렬 처리함에 있어, 트래픽에 대한 가상 머신 내의 가상 코어에 대한 부하 분배 기능은 수행하지만, 네트워크 트래픽의 양의 증감에 따른 가상 머신의 가상 코어에 대한 스케일링은 제공하지 못하는 문제점을 가지고 있다.
따라서, 멀티 코어 가상화 환경에서 순서를 가지는 트래픽의 병렬 처리 기술을 제공할 뿐만 아니라, 트래픽의 순서화(re-ordering) 문제를 제기하지 않으면서 네트워크 트래픽의 상황에 따른 가상 머신의 오토 코어 스케일링을 제공해 주는 방법이 필요하다.
상기와 같은 문제점을 해결하기 위한 본 발명의 목적은, 멀티 코어 환경의 가상 스위치 시스템에서, 트래픽의 순서를 유지하면서 트래픽의 상황에 따른 가상 코어 자동 스케일링이 수행될 수 있도록 하는, 병렬 처리 방법을 제공하는데 있다.
상기와 같은 문제점을 해결하기 위한 본 발명의 다른 목적은, 멀티 코어 환경의 가상 스위치 시스템에서, 트래픽의 순서를 유지하면서 트래픽의 상황에 따른 가상 코어 자동 스케일링이 수행될 수 있도록 하는, 병렬 처리 장치를 제공하는데 있다.
상기 목적을 달성하기 위한 본 발명은, 적어도 하나 이상의 가상 머신과 각 가상 머신 별로 적어도 하나 이상의 가상 코어 큐를 가진 가상화 환경에서, 가상 코어 자동 스케일링을 지원하는, 순차적인 트래픽에 대한 병렬 처리 방법을 제공한다. 병렬 처리 방법은 입력되는 트래픽의 속성에 따라서 상기 트래픽의 플로우를 식별하는 단계; 상기 식별된 플로우에 따라, 상기 트래픽이 매핑될 가상 코어 큐를 결정하고, 상기 트래픽을 상기 결정된 가상 코어 큐에 큐잉하는 단계; 및 가상 스위치를 통해서 상기 결정된 가상 코어 큐로부터 상기 결정된 가상 코어 큐에 대응되는 가상 머신으로 상기 트래픽을 전달하는 단계를 포함할 수 있다. 이때, 동일한 플로우에 속한 트래픽은 동일한 가상 코어 큐에 큐잉되어 동일한 가상 코어에 의해서 처리될 수 있다.
상기 트래픽의 플로우를 식별하는 단계에서, 상기 트래픽에 속한 패킷의 특정 헤더 정보에 대한 해시 함수 값에 기초하여 상기 트래픽의 플로우가 식별될 수 있다.
또한, 상기 트래픽에 속한 패킷의 특정 헤더 정보는 SIP(Source IP address), DIP(Destination IP address), SPORT(Source Port), DPORT(Destination Port), 및 PROTOCOL 중 적어도 하나 이상의 필드 값의 조합으로 이루어질 수 있다.
상기 결정된 가상 코어 큐에 큐잉하는 단계에서, 상기 트래픽은 데이터 버퍼에 저장되고, 상기 트래픽이 상기 데이터 버퍼에 저장된 위치를 지시하는 포인터가 상기 결정된 가상 코어 큐에 큐잉될 수 있다.
상기 결정된 가상 코어 큐에 큐잉하는 단계에서, 상기 식별된 플로우에 할당된 가상 코어 큐가 존재할 경우, 상기 식별된 플로우에 할당된 가상 코어 큐에 상기 트래픽을 큐잉하고, 상기 식별된 플로우에 할당된 가상 코어 큐가 존재하지 않을 경우, 상기 식별된 플로우에 할당된 가상 머신에 속한 가상 코어 큐들 중 하나를 선택하거나, 새로운 가상 코어 큐를 생성하여 상기 트래픽을 큐잉할 수 있다.
이때, 상기 식별된 플로우에 할당된 가상 머신에 속한 가상 코어 큐들 중 하나를 선택하는 단계는 파워 절약 정책 또는 공정 스위칭 정책 중 적어도 하나에 기초하여 수행될 수 있다.
상기 트래픽을 전달하는 단계에서, 상기 트래픽은 상기 결정된 가상 코어 큐가 속한 가상 머신 내에서 상기 결정된 가상 코어 큐에 대응되는 가상 코어로 전달될 수 있다.
이때, 상기 트래픽은 상기 트래픽에 포함된 메타 정보에 기초하여 상기 결정된 가상 코어 큐가 속한 가상 머신 내에서 상기 결정된 가상 코어 큐에 대응되는 가상 코어로 전달될 수 있다.
상기 다른 목적을 달성하기 위한 본 발명은, 가상 코어 자동 스케일링을 지원하는, 순차적인 트래픽에 대한 병렬 처리 장치를 제공한다. 병렬 처리 장치는 적어도 하나 이상의 가상 머신을 생성하고 관리하는 가상 머신 관리자; 상기 가상 머신 별로 적어도 하나 이상의 가상 코어 큐를 생성하고 관리하는 가상 코어 큐 관리자; 입력되는 트래픽의 속성에 따라서 상기 트래픽의 플로우를 식별하고, 상기 식별된 플로우에 따라, 상기 트래픽이 매핑될 가상 코어 큐를 결정하고, 상기 트래픽을 상기 결정된 가상 코어 큐에 큐잉하는 가상 코어 큐 매퍼; 및 상기 결정된 가상 코어 큐로부터 상기 결정된 가상 코어 큐에 대응되는 가상 머신으로 상기 트래픽을 전달하는 적어도 하나의 가상 스위치를 포함할 수 있다. 이때, 동일한 플로우에 속한 트래픽은 동일한 가상 코어 큐에 큐잉되어 동일한 가상 코어에 의해서 처리될 수 있다.
상기 가상 코어 큐 매퍼는 상기 트래픽에 속한 패킷의 특정 헤더 정보에 대한 해시 함수 값에 기초하여 상기 트래픽의 플로우를 식별할 수 있다.
또한, 상기 트래픽에 속한 패킷의 특정 헤더 정보는 SIP(Source IP address), DIP(Destination IP address), SPORT(Source Port), DPORT(Destination Port), 및 PROTOCOL 중 적어도 하나 이상의 필드 값의 조합으로 이루어질 수 있다.
여기에서, 상기 병렬 처리 장치는 트래픽과 플로우의 관계를 정의하는 플로우 테이블을 추가로 포함하고, 상기 가상 코어 큐 매퍼는 상기 플로우 테이블을 참조하여 상기 트래픽의 플로우를 식별할 수 있다.
여기에서, 상기 병렬 처리 장치는 상기 적어도 하나의 가상 스위치를 관리하는 가상 스위치 관리자를 추가로 포함하고, 상기 가상 스위치 관리자는 상기 적어도 하나의 가상 스위치의 처리 부하에 따라 새로운 가상 스위치를 추가하거나 상기 적어도 하나의 가상 스위치의 일부를 비활성화시킬 수 있다.
여기에서, 상기 가상 코어 큐 매퍼는 상기 트래픽을 데이터 버퍼에 저장하고, 상기 트래픽이 상기 데이터 버퍼에 저장된 위치를 지시하는 포인터를 상기 결정된 가상 코어 큐에 큐잉할 수 있다.
여기에서, 상기 가상 코어 큐 매퍼는, 상기 식별된 플로우에 할당된 가상 코어 큐가 존재할 경우, 상기 식별된 플로우에 할당된 가상 코어 큐에 상기 트래픽을 큐잉하고, 상기 식별된 플로우에 할당된 가상 코어 큐가 존재하지 않을 경우, 상기 식별된 플로우에 할당된 가상 머신에 속한 가상 코어 큐들 중 하나를 선택하거나, 새로운 가상 코어 큐를 생성하여 상기 트래픽을 큐잉할 수 있다.
또한, 상기 식별된 플로우에 할당된 가상 머신에 속한 가상 코어 큐들 중 하나는 파워 절약 정책 또는 공정 스위칭 정책 중 적어도 하나에 기초하여 선택될 수 있다.
여기에서, 상기 결정된 가상 코어 큐에 대응된 가상 머신은, 상기 가상 스위치로부터 전달된 트래픽을 상기 결정된 가상 코어 큐로 전달하는 가상 네트워크 인터페이스(vNIC: Virtual Network Interface Card) 및 가상 분배기(vDistributor)를 포함할 수 있다.
또한, 상기 트래픽은 상기 트래픽에 포함된 메타 정보에 기초하여 상기 결정된 가상 코어 큐가 속한 가상 머신 내에서 상기 결정된 가상 코어 큐에 대응되는 가상 코어로 전달될 수 있다.
상술한 바와 같은 본 발명의 구성에 따르면, 멀티 코어 가상화 환경에서 순서를 가지는 트래픽의 병렬 처리 기술이 제공될 수 있다. 또한, 트래픽의 재순서화 문제없이 네트워크 트래픽의 상황에 따른 가상 코어의 자동 스케일링이 가능해진다.
도 1은 본 발명의 일 실시예에 따른 가상 코어 자동 스케일링을 지원하는 병렬 처리 장치의 구성을 개시한 블록도이다.
도 2는 본 발명의 일 실시예에 따른 가상 코어 자동 스케일링을 지원하는 병렬 처리 방법을 설명하기 위한 흐름도이다.
도 3은 본 발명의 일 실시예에 따른 가상 코어 자동 스케일링을 지원하는 병렬 처리 장치에서 가상 코어 큐 매퍼의 동작을 설명하기 위한 상세 블록도이다.
도 4는 본 발명의 일 실시예에 따른 가상 코어 자동 스케일링을 지원하는 병렬 처리 장치에서 가상 스위치의 동작을 설명하기 위한 상세 블록도이다.
도 5는 본 발명의 일 실시예에 따른 가상 코어 자동 스케일링을 지원하는 병렬 처리 방법을 설명하기 위한 상세한 흐름도이다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 실시예를 가질 수 있는 바, 특정 실시예들을 도면에 예시하고 상세한 설명에 상세하게 설명하고자 한다. 그러나, 이는 본 발명을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 각 도면을 설명하면서 유사한 참조부호를 유사한 구성요소에 대해 사용하였다.
제1, 제2, A, B 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 본 발명의 권리 범위를 벗어나지 않으면서 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소도 제1 구성요소로 명명될 수 있다. 및/또는 이라는 용어는 복수의 관련된 기재된 항목들의 조합 또는 복수의 관련된 기재된 항목들 중의 어느 항목을 포함한다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다.
본 출원에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
이하, 본 발명에 따른 바람직한 실시예를 첨부된 도면을 참조하여 상세하게 설명한다.
도 1은 본 발명의 일 실시예에 따른 가상 코어 자동 스케일링을 지원하는 병렬 처리 장치의 구성을 개시한 블록도이다.
도 1을 참조하면, 본 발명의 일 실시예에 따른 가상 코어 자동 스케일링을 지원하는 병렬 처리 장치(100)는 가상 코어 큐 매퍼(virtual core queue mapper; 110), 적어도 하나의 가상 머신 큐(virtual machine queue; 120-1, ..., 120-N), 가상 스위칭부(virtual switching part; 130), 및 적어도 하나의 가상 머신(virtual machine; 140-1, ..., 140-N)을 포함하여 구성될 수 있다.
이때, 적어도 하나의 가상 머신 큐(120-1, ..., 120-N)는 가상 코어 큐 관리자(150)에 의해서 관리될 수 있고, 적어도 하나의 가상 머신(140-1, ..., 140-N)은 가상 머신 관리자(170)에 의해서 관리될 수 있다. 즉, 어느 일 시점에서 장치(100) 내에 존재하는 가상 코어 큐와 가상 머신의 숫자는 처리 부하 량에 따라서 동적으로 변화하며, 이들은 상기 관리자들(150, 170)에 의해서 관리된다.
한편, 병렬 처리 장치(100) 내에 존재하는 가상 머신 큐의 숫자(예컨대, N)는 병렬 처리 장치(100) 내에 존재하는 가상 머신의 숫자(예컨대, N)에 대응된다. 또한, 하나의 가상 머신 내에는 적어도 하나(예컨대, x개 또는 y개)의 가상 코어가 존재하며, 가상 머신에 대응되는 가상 머신 큐에는 해당 가상 머신에 존재하는 가상 코어의 숫자(예컨대, x개 또는 y개) 만큼의 가상 코어 큐(virtual core queue)들이 존재할 수 있다. 즉, 본 발명의 일 실시예에 따른 병렬 처리 장치(100)에서는 가상 머신 별로 독립된 하나 이상의 가상 코어 큐가 존재할 수 있다. 또한, 가상 머신 별로 서로 다른 개수의 가상 코어 큐들을 가질 수 있다.
가상 스위칭부(130)는 적어도 하나의 가상 스위치(virtual switch)로 구성된다. 구성에 따라서, 상기 가상 스위칭부(130)내에 존재하는 가상 스위치의 숫자 또한 동적으로 가변될 수 있다. 이 경우, 상기 가상 스위칭부(130)와 가상 스위칭부(130)내에 존재하는 가상 스위치들을 관리하는 가상 스위치 관리자(160)가 상기 장치(170)에 추가로 포함될 수 있다.
또한, 가상 코어 자동 스케일링을 지원하는 병렬 처리 장치(100)는 플로우 테이블(flow table; 111), 가상 코어 큐 테이블(virtual core queue table; 112), 및 데이터 버퍼(data buffer; 180) 중 적어도 하나를 추가로 포함할 수 있다.
상술된 병렬 처리 장치(100)를 구성하는 각 구성요소의 역할과 기능은 도 3 및 도 4를 통하여 상세히 설명된다.
도 2는 본 발명의 일 실시예에 따른 가상 코어 자동 스케일링을 지원하는 병렬 처리 방법을 설명하기 위한 흐름도이다.
도 2를 참조하면, 본 발명의 일 실시예에 따른 가상 코어 자동 스케일링을 지원하는 병렬 처리 방법은, 입력된 트래픽의 플로우(flow)를 식별하는 단계(S210), 가상 코어 큐 매핑 단계(220), 및 트래픽을 가상 머신으로 전달하는 단계(S230)를 포함하여 구성될 수 있다. 이때, 본 발명의 일 실시예에서는, 순서가 있는 트래픽에 대한 재순서화(re-ordering) 문제를 발생시키지 않기 위해서, 동일한 플로우에 속한 트래픽은 동일한 가상 코어 큐에 전달되는 것을 특징으로 한다.
먼저, 플로우를 식별하는 단계(S210)에서는, 입력된 트래픽의 속성에 따라서 입력된 트래픽이 속한 플로우가 식별될 수 있다.
단계(S210)에서는, 입력된 트래픽 패킷 헤더의 특정 정보를 해시 함수(hash function)를 사용하여 일정한 크기의 값으로 매핑한 값((예컨대, RSS Tag, Receive Side Scaling Tag)에 기초하여 상기 입력된 트래픽이 속한 플로우가 식별될 수 있다. 또한, 상기 트래픽 패킷 헤더의 특정 정보를 해시 함수를 사용하여 일정한 크기의 값으로 매핑한 값과 해당 트래픽이 처리되는 가상 머신(VM: Virtual Machine)의 식별 정보를 결합한 값을 이용하여 해당 트래픽이 속한 플로우가 식별될 수도 있다. 예를 들면, 상기 트래픽 패킷 헤더의 특정 정보에 기초한 해시 함수 값과 해당 트래픽이 처리되는 가상 머신의 식별 정보를 결합한 값이 동일한 패킷들로 구성된 트래픽이 하나의 플로우로 정의될 수 있다.
이때, 각각의 플로우에 대한 정보는 도 1에서 예시된 플로우 테이블(111)에 저장될 수 있다. 플로우 테이블(111)은 해당 플로우가 매핑되는 가상 머신과 해당 가상 머신에 속한 가상 코어 큐에 대한 정보를 포함할 수 있고, 지속적으로 업데이트 될 수 있다. 플로우 테이블(111)에 대한 업데이트는 일반적으로 가상 코어 큐 매퍼(1110)에 의해서 이루어질 수 있다. 그러나, 상기 플로우 테이블(111)에 대한 업데이트는 가상 코어 큐 관리자(150) 및 가상 머신 관리자(170) 중 적어도 하나에 의해서도 이루어질 수 있다.
한편, 해시 함수의 입력 대상이 되는 트래픽 패킷 헤더의 특정 정보는 예컨대, SIP(Source IP address), DIP(Destination IP address), SPORT(Source Port), DPORT(Destination Port), 및 PROTOCOL 중 적어도 하나 이상의 필드 값의 조합으로 이루어질 수 있다.
다음으로, 가상 코어 큐 매핑 단계(S220)에서는, 식별된 플로우에 따라서, 상기 입력된 트래픽을 처리할 가상 머신과 해당 가상 머신의 가상 코어 큐가 결정되고, 결정된 가상 코어 큐에 입력된 트래픽이 큐잉(queueing) 된다.
상술된 바와 같이, 본 발명에 따른 일 실시예에서는, 단계(S210)를 거쳐 입력된 트래픽이 속한 플로우를 식별한 후, 플로우 테이블을 확인하여, 해당 플로우가 어떤 가상 코어 큐에 의해 처리될 지를 결정할 수 있다.
이때, 플로우 테이블을 확인한 결과, 해당 플로우에 매핑 된 가상 코어 큐가 존재하지 않는 것으로 확인된다면, 해당 플로우는 새로운 플로우이므로, 가상 코어 큐 테이블(112)의 상태를 확인하여, 해당 가상 머신에 속한 모든 가상 코어 큐가 임계치(threshold) 값을 초과하고 있는지 확인할 수 있다. 만약 해당 가상 머신에 속하는 가상 코어 큐들 중에서 임계치 값을 초과하지 않는 가상 코어 큐가 적어도 하나 존재한다면, 새로운 플로우를 임계치 값을 초과하지 않는 가상 코어 큐들 중 하나에 매핑하고 해당 가상 코어 큐에 큐잉 할 수 있다.
만약, 해당 가상 머신에 속한 모든 가상 코어 큐가 임계치 값을 초과하고 있다면, 해당 가상 머신에 속하는 새로운 가상 코어 큐를 활성화하고, 해당 플로우를 활성화된 새로운 가상 코어 큐에 매핑하여 새로운 가상 코어 큐에 큐잉할 수 있다.
한편, 해당 트래픽을 가상 코어 큐에 큐잉 할 때, 트래픽 데이터 전체를 큐잉하는 것이 아니라, 트래픽 데이터는 데이터 버퍼(180)에 저장하고, 트래픽이 저장된 위치(주소)를 나타내는 포인터(pointer)만을 가상 코어 큐에 큐잉 하게 할 수 있다.
한편, 상술된 단계(S220)에서 해당 가상 머신에 속한 가상 코어 큐들이 임계치 값을 초과하였는지를 판단하는 과정에서, 해당 가상 코어 큐들의 길이에 대한 임계치가 설정될 수 있다.
또한, 단계(S220)에서 새로운 플로우를 임계치를 넘지 않은 기존의 가상 코어 큐에 매핑 할 때에는, 파워 절약(power saving) 정책, 공정 스위칭(operation switching) 정책 등과 같은 동적으로 설정 가능한 정책이 사용될 수 있다. 예컨대, 파워 절약 정책을 따를 경우, 임계치 값을 넘지 않는 기존의 가상 코어 큐 가운데 가장 많은 트래픽이 큐잉 되어 있는 가상 코어 큐에 새로운 플로우가 매핑될 수 있다. 예컨대, 공정 스위칭 정책을 따를 경우, 임계치 값을 넘지 않는 기존의 가상 코어 큐 가운데 가장 적은 트래픽이 큐잉 되어 있는 가상 코어 큐에 새로운 플로우가 매핑될 수 있다.
한편, 새로운 플로우에 대한 매핑이 이루어지면, 이 후에 도착하는 동일 플로우에 속하는 트래픽들이 동일한 가상 코어 큐에 큐잉될 수 있도록 해당 플로우에 대해 플로우 테이블(111)이 업데이트될 수 있다. 앞서 언급된 바와 같이, 플로우 테이블(111)에 대한 업데이트는 가상 코어 큐 매퍼(110), 가상 코어 큐 관리자(150) 및 가상 머신 관리자(170) 중 적어도 하나에 의해서 이루어질 수 있다.
본 발명의 실시예들에서는 동일 플로우에 속하는 순서를 가지는 트래픽을 동일 가상 머신의 동일 가상 코어가 처리하게 된다. 둘 이상의 가상 코어가 둘 이상의 플로우를 각각 동시에 병렬 처리할 수 있으나, 처리되는 트래픽의 순서를 유지하기 위해, 동일한 플로우의 트래픽은 둘 이상의 가상 코어 처리기가 나누어 처리하지 않는다.
다음으로, 트래픽을 가상 머신으로 전달하는 단계(S230)에서는, 상기 결정된 가상 코어 큐로부터 상기 결정된 가상 코어 큐에 대응되는 가상 코어가 속한 가상 머신으로 가상 스위치를 통해서 상기 트래픽이 전달된다. 상기 결정된 가상 코어 큐에 대응되는 가상 코어는 가상 스위치를 통해 전달 받은 트래픽을 처리한다.
상술된 단계(S220)에서 결정된, 트래픽이 배정된 가상 머신과 가상 코어 큐에 대한 정보는 해당 트래픽에 메타 정보(meta information)로서 포함되어 가상 스위칭부(130)로 전달되며, 가상 스위칭부(130)에 속한 가상 스위치는 메타 정보를 참조하여, 해당 트래픽을 해당 가상 머신의 가상 네트워크 인터페이스 카드(vNIC; virtual Network Interface Card)에 전달될 수 있다.
본 발명의 일 실시예에 따라, 가상 머신의 가상 네트워크 인터페이스 카드 내의 가상 분배기(vDistributor)에서는 상기 트래픽에 포함된 메타 정보를 바탕으로 트래픽을 대응되는 가상 코어에 할당할 수 있다. 가상 네트워크 인터페이스 카드 내의 가상 분배기는 동일 가상 코어 큐에 할당된 트래픽에 대해 동일 가상 코어에 할당하여, 가상 머신 내에서 트래픽의 양에 따른 자동 코어 스케일링을 가능하게 한다.
한편, 본 발명에서는, 가상 코어 큐 매퍼(110)가 플로우 테이블을 주기적으로 확인하여, 비활성화된 플로우에 대해서 해당 플로우의 플로우 테이블 내용을 초기화 시킬 수 있다. 또한, 가상 코어 큐 매퍼(110) 또는 가상 코어 큐 관리자(150)가 플로우 테이블(111)과 가상 코어 큐 테이블(112)을 주기적으로 확인하여, 비활성화 가능한 가상 코어 큐를 동적으로 비활성화 시킬 수 있다. 비활성화된 가상 코어 큐에 대한 정보는 가상 코어 큐 테이블(112)에 반영될 수 있다. 또한, 가상 코어 큐가 비활성화 될 때, 해당 가상 코어 큐를 처리하는 가상 코어도 동시에 비활성화될 수 있다. 또한, 가상 머신 관리자(170)가 가상 머신이 생성되거나 소멸될 때, 해당 가상 머신의 코어에 대한 정보를 제공할 수 있다.
한편, 가상 스위치 관리자(160)는 가상 스위칭부(130) 내의 가상 스위치의 상태 또한 주기적으로 확인하여, 비활성화 가능한 가상 스위치를 동적으로 비활성화 시킬 수 있다.
도 3은 본 발명의 일 실시예에 따른 가상 코어 자동 스케일링을 지원하는 병렬 처리 장치에서 가상 코어 큐 매퍼의 동작을 설명하기 위한 상세 블록도이다.
도 3을 참조하면, 가상 머신 큐(120-1)은 제1 가상 머신에 대한 큐로서 제1 가상 머신에 속한 x개의 가상 코어(vCPU1, vCPU2, ..., vCPUx)에 대한 가상 코어 큐들(VM1vCPUQ1, VM1vCPUQ2, ..., VM1vCPUQx)을 포함하고 있다.
또한, 가상 머신 큐(120-N)은 제N 가상 머신에 대한 큐로서 제N 가상 머신에 속한 y개의 가상 코어(vCPU1, vCPU2, ..., vCPUy)에 대한 가상 코어 큐들(VMNvCPUQ1, VMNvCPUQ2, ..., VMNvCPUQy)을 포함하고 있다.
도 1 및 도 2를 통해서 설명된 바와 같이, 가상 코어 큐 매퍼(110)는 입력된 트래픽의 속성에 기초하여 해당 입력 트래픽이 속한 플로우를 식별할 수 있다.
이때, 앞서 설명된 바와 같이, 입력된 트래픽 패킷 헤더의 SIP, DIP, SPORT, DPORT, PROTOCOL 등과 같은 특정 필드 값들 중 하나 이상의 필드 조합에 대해 해시 함수를 사용하여 일정한 크기의 값으로 매핑 한 값(RSS tag)과 해당 트래픽이 처리되는 가상 머신의 식별자 정보를 결합한 값을 사용하여 플로우를 식별할 수 있다.
본 발명에서는 순서를 가지는 트래픽을 속성에 따라 분류할 때, 동일 속성으로 분류되고 순서를 가지는 트래픽을 플로우로 정의하는 방식으로 플로우 테이블(111)을 유지할 수 있다. 플로우 테이블은 해당 플로우가 하나 이상의 가상 머신과 가상 코어 큐들 중, 어떤 가상 머신과 어떤 가상 코어 큐에 매핑 되는지에 대한 정보를 포함할 수 있다.
따라서, 가상 코어 큐 매퍼(110)는 입력 트래픽이 속한 플로우를 식별한 후, 플로우 테이블(111)을 확인하여, 해당 플로우가 매핑될 가상 머신과 가상 코어 큐를 결정할 수 있다.
플로우 테이블(111)을 확인한 결과, 해당 플로우에 매핑된 가상 코어 큐가 없다면 가상 코어 큐 매퍼(110)는 해당 플로우를 새로운 플로우로 인식할 수 있다. 이 경우, 가상 코어 큐 매퍼(110)는 가상 코어 큐 테이블(112)의 정보를 확인하여, 해당 플로우에 대응되는 가상 머신에 속한 가상 코어 큐들이 임계치를 초과하고 있는지를 확인할 수 있다.
만약 해당 플로우에 대응되는 가상 머신에 속한 가상 코어 큐들 중 임계치 값을 초과하지 않은 적어도 하나의 가상 코어 큐가 존재한다면, 새로운 플로우를 해당 가상 코어 큐 중 하나에 매핑하여 큐잉할 수 있다.
반면, 해당 플로우에 대응되는 가상 머신에 속한 모든 가상 코어 큐들이 임계치를 초과하고 있다면, 새로운 가상 코어 큐를 생성하고, 해당 플로우를 생성된 가상 코어 큐에 매핑하여 큐잉할 수 있다.
한편, 가상 코어 큐 매퍼에서 입력된 트래픽에 대한 플로우를 식별하여 대응되는 가상 머신의 가상 코어 큐에 큐잉 할 때, 트래픽의 데이터 전체를 가상 코어 큐에 큐잉하는 것이 아니라, 트래픽의 데이터(181, 182, 183)는 데이터 버퍼(180)에 저장하고, 트래픽 데이터가 저장된 위치를 나타내는 포인터(pointer) 만을 가상 코어 큐에 큐잉 하게 할 수 있다. 이를 통해서, 가상 코어 큐에 할당되어야 하는 메모리의 크기를 줄일 수 있고, 빈번한 데이터 이동에 따른 메모리 액세스 시간을 줄일 수 있다.
입력된 트래픽의 새로운 가상 코어 큐에 대한 매핑은 동적으로 이루어질 수 있다. 예컨대, 가상 코어 큐 매퍼(110)에서 새로운 플로우를 새로운 가상 코어 큐에 매핑해야 할 경우, 가상 코어 큐 매퍼(110)에서 가상 코어 큐 관리자(150)로 새로운 가상 코어 큐의 활성화를 요청하고, 가상 코어 큐 관리자(150)는 새로운 가상 코어 큐를 활성화하고 난 후, 가상 코어 큐 테이블(112)을 업데이트 할 수 있다.
다음으로, 가상 코어 큐 관리자(150)는 가상 스위치 관리자(160)에게 새로운 가상 코어 큐의 활성화를 알려줄 수 있다. 가상 스위치 관리자(160)는 가상 코어 큐 관리자(150)에 의해 가상 코어 큐로부터 출력되는 트래픽을 대응되는 가상 머신으로 스위칭 할 수 있도록 기존 가상 스위치의 설정을 변경해줄 수 있다. 가상 코어 큐 관리자(150)는 가상 코어 큐 매퍼(110)에게 새로 활성화된 가상 코어 큐에 대한 정보를 알려 준다. 가상 코어 큐 매퍼(110)는 가상 코어 큐 관리자가 알려준 가상 코어 큐 정보를 사용하여 새로운 플로우를 매핑할 수 있다.
가상 코어 큐 매퍼(110)에서 가상 코어 큐 테이블(112)에 존재하는 대응되는 가상 머신에 속한 가상 코어 큐들이 임계치를 초과하였는지 확인할 때, 해당 가상 머신에 속한 가상 코어 큐들의 길이에 대한 임계치를 설정할 수 있다.
또한, 가상 코어 큐 매퍼(110)에서 새로운 플로우를 기존의 가상 코어 큐에 매핑 할 때, 파워 절약 정책, 공정 스위칭 정책등과 같은 동적으로 설정 가능한 정책을 사용할 수 있다.
예컨대, 가상 코어 큐 매퍼(110)가 파워 절약 정책에 따른 가상 코어 큐 매핑을 수행할 경우는, 임계치 값을 넘지 않는 기존의 가상 코어 큐 가운데 가장 많은 트래픽이 큐잉 되어 있는 가상 코어 큐에 새로운 플로우를 매핑 할 수 있다. 예컨대, 가상 코어 큐 매퍼(110)가 공정 스위칭 정책에 따른 가상 코어 큐 매핑을 수행할 경우는, 가상 코어 큐 테이블에서 임계치 값을 넘지 않는 기존의 가상 코어 큐 가운데 가장 적은 트래픽이 큐잉 되어 있는 가상 코어 큐에 새로운 플로우를 매핑 할 수 있다. 또한, 본 발명에서 가상 코어 큐 매퍼(110)는 해당 트래픽에 대해 매핑된 가상 코어 큐 및 해당 가상 코어 큐가 속한 가상 머신에 대한 정보를 메타 정보로서 해당 트래픽에 저장할 수 있다.
가상 코어 큐 매퍼(110)는 새로운 플로우에 대한 가상 코어 큐 매핑이 이루어지면, 이 후에 도착하는 동일 플로우에 속하는 트래픽들이 동일한 가상 머신과 동일한 가상 코어 큐에 큐잉 될 수 있도록, 해당 플로우에 대해 플로우 테이블(111)을 업데이트 할 수 있다.
또한, 본 발명에서는 가상 코어 큐 매퍼(110)는 플로우 테이블을 주기적으로 확인하여, 비활성화된 플로우에 대해서 해당 플로우의 플로우 테이블 내용을 초기화 시킬 수 있다.
도 4는 본 발명의 일 실시예에 따른 가상 코어 자동 스케일링을 지원하는 병렬 처리 장치에서 가상 스위치의 동작을 설명하기 위한 상세 블록도이다.
본 발명에서 가상 코어 큐로부터 출력되는 트래픽을 해당 트래픽에 매핑된 가상 머신과 가상 코어로 전달하기 위한 가상 스위치의 동작이 설명된다.
본 발명의 일 실시예에서, 가상 코어에 대한 동적 스케일링을 지원하기 위해 가상 스위칭부(130)에는 한 개의 가상 스위치(즉, 제1 가상 스위치; vSwitch1)가 활성화될 수 있다.
제1 가상 스위치(vSwitch1)가 하나 이상의 가상 코어 큐에 큐잉 되어 있는 트래픽을 가상 머신으로 스위칭 처리하다가, 처리 임계치 값을 초과하게 되면, 가상 스위치 관리자(160)에서 새로운 가상 스위치(예컨대, 제2 가상 스위치; vSwitch2)를 동적으로 추가하여, 둘 이상의 가상 스위치가 가상 코어 큐에 큐잉 되어 있는 트래픽을 동시에 병렬적으로 스위칭 처리하게 할 수 있다. 이때, 해당 가상 스위치의 처리 임계치 값은 가상 스위치 관리자(160)에서 동적으로 설정 가능하다.
가상 스위치(vSwitch1 또는 vSwitch2)는 가상 코어 큐에 큐잉 되어 있는 트래픽을 라운드 로빈(RR: round robin), 가중치 라운드 로빈(WRR: weighted round robin) 등과 같은 스위칭 정책에 따라 처리할 수 있다. 또한, 가상 스위치 관리자(160)는 각각의 가상 스위치에 동적으로 스위칭 정책을 설정할 수 있다.
또한, 동일 플로우에 속한 트래픽의 순서를 보장하기 위해, 서로 다른 가상 스위치가 하나의 가상 코어 큐에 큐잉 되어 있는 트래픽을 동시에 스위칭 처리하지 않는다.
가상 스위치는 트래픽에 포함된 해당 트래픽에 매핑된 가상 머신과 가상 코어 큐를 지정하는 메타 정보를 참조하며 해당 트래픽을 지정된 가상 머신의 가상 네트워크 인터페이스 카드(vNIC)에 전달할 수 있다.
가상 코어 큐 매퍼(110)는 플로우 테이블(111)과 가상 코어 큐 테이블(112)을 주기적으로 확인하여, 비활성화 가능한 가상 코어 큐를 동적으로 비활성화 시킬 수 있다. 또한, 가상 코어 큐 매퍼(110)는 비활성화가 가능한 가상 코어 큐에 대한 정보를 가상 코어 큐 관리자(150)에게 알려줄 수 있다. 또한, 가상 코어 큐 관리자(150)는 가상 스위치 관리자(160)에 비활성화가 가능한 가상 코어 큐에 대한 정보를 알려 줄 수 있다. 이때, 가상 스위치 관리자(160)는 가상 스위치에 설정된 가상 코어 큐에 대한 정보를 비활성화 시킬 수 있다. 또한, 가상 스위치 관리자(160)는 가상 스위치들의 상태를 주기적으로 확인하여, 비활성화 가능한 가상 스위치를 동적으로 비활성화 시킬 수 있다.
한편, 가상 머신 관리자(170)는 적어도 하나의 가상 머신들에 대한 라이프 사이클 관리(LCM: Life Cycle Management)를 수행할 수 있고, 가상 머신이 생성/소멸 될 때 마다, 해당 가상 머신의 가상 코어 정보를 가상 코어 큐 매퍼(110)에 직접 통지하거나 가상 코어 큐 테이블(112)에 기록할 수 있다.
가상 머신의 가상 네트워크 인터페이스 카드 내의 가상 분배기는 트래픽에 포함된 메타 정보를 바탕으로 트래픽을 가상 코어에 할당할 수 있다. 본 발명에서 가상 머신의 가상 네트워크 인터페이스 카드 내의 가상 분배기는 동일 가상 코어 큐에 할당된 트래픽에 대해 동일 가상 코어에 할당하여, 가상 머신 내에서 트래픽의 양에 따른 오토 코어 스케일링을 가능하게 한다.
도 5는 본 발명의 일 실시예에 따른 가상 코어 자동 스케일링을 지원하는 병렬 처리 방법을 설명하기 위한 상세 흐름도이다.
도 5를 참조하면, 가상 머신 관리자(170)는 가상 머신이 생성/소멸될 때 마다, 해당 가상 머신에 대한 정보와 해당 가상 머신에 속한 가상 코어들에 대한 정보를 가상 코어 큐 매퍼(110)에 통보하거나, 가상 코어 큐 테이블(112)에 기록하여 가상 머신 및 가상 코어들에 대한 정보를 갱신할 수 있다(S510). 단계(S510)는 이후에 설명되는 단계들과는 독립적으로 수행될 수 있다.
다음으로, 가상 코어 큐 매퍼(110)는 입력되는 트래픽을 수신할 수 있다(S520). 또한, 가상 코어 큐 매퍼(110)는 입력된 트래픽의 속성에 따라서 입력된 트래픽이 속한 플로우를 식별할 수 있다(S530).
이때, 가상 코어 큐 매퍼(110)는 트래픽에 대해서 식별된 플로우 정보를 기반으로 플로우 테이블(111)을 검색하여 대응되는 가상 머신과 가상 코어 큐를 결정할 수 있다.
가상 코어 큐 매퍼(110)는 플로우 테이블(111)에서 식별된 플로우에 대한 정보를 검색하여, 해당 트래픽이 속한 플로우가 새로운 플로우인지 또는 기존에 이미 생성된 플로우인지를 확인할 수 있다(S540).
입력된 트래픽에 대해서 식별된 플로우가 이미 존재하는 플로우라면, 가상 코어 큐 매퍼(110)는 플로우 테이블(111)의 정보에 기초하여 해당 플로우에 할당된 가상 코어 큐의 정보를 추출하고, 해당 트래픽을 해당 가상 코어 큐에 매핑하여 해당 가상 코어 큐에 큐잉할 수 있다(S541). 이때, 가상 코어 큐 매퍼(110)는 플로우가 식별된 트래픽의 데이터를 데이터 버퍼(180)에 저장하고, 트래픽 데이터가 저장된 데이터 버퍼(180) 상의 위치(주소)를 지시하는 포인터를 대응되는 가상 머신 큐(120-1, ..., 120-N)에 속한 가상 코어 큐에 큐잉할 수 있다. 또한, 가상 스위치는 해당 가상 코어 큐에 큐잉된 트래픽을 대응되는 가상 머신으로 스위칭 처리한다.
만약, 입력된 트래픽이 새로운 플로우에 속한다면, 가상 코어 큐 매퍼(110)는 가상 코어 큐 테이블(111)의 정보에 기초하여 해당 플로우에 대응되는 가상머신에 속한 모든 가상 코어 큐들의 상태를 확인한다(S542). 즉, 가상 코어 큐 매퍼(111)는 해당 가상 머신에 속한 가상 코어 큐들이 각각 임계치 값을 초과하였는지를 확인한다.
이때, 해당 가상 머신에 속한 모든 가상 코어 큐가 임계치 값을 초과하였다면, 새로운 가상 코어 큐가 생성(활성화)되고 입력된 트래픽이 속한 새로운 플로우는 새로운 가상 코어 큐에 매핑된다(S543). 즉, 가상 코어 큐 매퍼(110)는 가상 코어 큐 관리자(150)에게 새로운 가상 코어 큐의 활성화를 요청할 수 있다. 이때, 필요한 경우 가상 머신 관리자(170)는 새로 활성화된 가상 코어 큐를 처리할 수 있는 가상 머신과 가상 코어를 활성화할 수 있다. 가상 코어 큐 관리자(150)는 가상 코어 큐 매퍼(110)에게 새로 활성화된 가상 코어 큐에 대한 정보를 알려줄 수 있다. 가상 코어 큐 매퍼(110)는 가상 코어 큐 관리자(150)가 알려준 가상 코어 큐 의 정보를 사용하여 새로운 플로우를 새로운 가상 코어 큐에 매핑 한다. 수신된 가상 코어 큐에 대한 정보에 기초하여 가상 코어 큐 매퍼(110)는 플로우 테이블(111)의 정보를 업데이트할 수 있다. 앞서 언급된 대로, 가상 코어 큐 매퍼(110)는 해당 트래픽의 데이터를 데이터 버퍼(180)에 저정하고, 트래픽 데이터가 저장된 데이터 버퍼(180) 상의 위치(주소)를 지시하는 포인터를 새롭게 활성화된 가상 코어 큐에 큐잉할 수 있다.
또한, 가상 코어 큐 관리자(150)는 가상 스위치 관리자(160)에게 새로운 가상 코어 큐가 활성화되었음을 알려줄 수 있다. 이때, 가상 스위치 관리자(160)는 새롭게 활성화 된 가상 코어 큐에 큐잉된 트래픽을 스위칭할 수 있도록 대응되는 가상 스위치의 설정을 변경할 수 있다(S544). 가상 스위치는 해당 가상 코어 큐의 트래픽을 대응되는 가상 머신에 스위칭 처리하고, 대응되는 가상 머신은 해당 트래픽을 처리할 수 있다. 가상 코어 큐 관리자(150) 또는 가상 코어 큐 매퍼(110)는 새로운 가상 코어 큐를 활성화 하고 난 후, 활성화된 가상 코어 큐에 대한 정보를 가상 코어 큐 테이블(112)에 업데이트할 수 있다(S545).
만약, 기존에 존재하는 가상 코어 큐들 중 적어도 하나가 설정된 임계치 값을 초과하지 않는 경우, 새로운 플로우는 임계치 값을 초과하지 않은 가상 코어 큐들 중 하나에 매핑될 수 있다(S546). 이때, 새로운 플로우의 가상 코어 큐에 대한 매핑은 파워 절약 정책 및 공정 스위칭 정책과 같은 동적으로 설정 가능한 정책에 기반하여 이루어질 수 있다.
가상 코어 큐에 대한 매핑 정책이 파워 절약 정책이라면, 가상 코어 큐 매퍼(110)는 새로운 플로우를 임계치 값을 넘지 않는 기존의 가상 코어 큐들 중 가장 많은 트래픽이 큐잉 되어 있는 가상 코어 큐에 매핑할 수 있고, 매핑 정보를 플로우 테이블(111)에 업데이트할 수 있다. 가상 코어 큐 매퍼(110)는 매핑된 정보에 따라서 해당 트래픽을 해당 가상 코어 큐에 큐잉할 수 있고, 대응되는 가상 스위치는 해당 가상 코어 큐의 트래픽을 대응되는 가상 머신에 스위칭 처리하여 대응되는 가상 머신이 해당 트래픽을 처리하도록 할 수 있다.
가상 코어 큐에 대한 매핑 정책이 공정 스위칭 정책이라면, 가상 코어 큐 매퍼(110)는 새로운 플로우를 임계치 값을 넘지 않는 기존의 가상 코어 큐들 중 가장 적은 트래픽이 큐잉 되어 있는 가상 코어 큐에 새로운 플로우를 매핑할 수 있다. 또한, 가상 코어 큐 매퍼(111)는 상기 과정에 의해서 생성된 매핑 정보를 플로우 테이블(111)에 업데이트할 수 있다(S547).
가상 코어 큐 매퍼(110)는 상기 단계(S543 내지 S545) 또는 단계(S546 및 S546)에 의해서 결정된 매핑 정보에 따라서 해당 트래픽을 해당 가상 코어 큐에 큐잉할 수 있다(S550). 이때, 가상 코어 큐 매퍼(110)는 해당 트래픽에 할당된 가상 머신과 가상 코어 큐를 지정하는 정보를 해당 트래픽의 메타 정보로서 포함시켜 가상 스위치에 전달할 수 있다(S560).
가상 스위치는, 상기 트래픽의 메타 정보를 토대로, 상기 트래픽을 해당 가상 코어 큐에 대응되는 가상 머신으로 전달할 수 있다. 또한, 가상 머신의 가상 분배기는 해당 트래픽을 수신하고 해당 트래픽에 대응되는 가상 머신과 가상 코어를 지정하는 매핑 정보에 기초하여, 해당 트래픽을 대응되는 가상 코어로 전달할 수 있다(S570). 마지막으로, 대응되는 가상 코어는 해당 트래픽을 처리한다(S580).
본 발명에 따른 방법들은 다양한 컴퓨터 수단을 통해 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 컴퓨터 판독 가능 매체에 기록되는 프로그램 명령은 본 발명을 위해 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다.
컴퓨터 판독 가능 매체의 예에는 롬(rom), 램(ram), 플래시 메모리(flash memory) 등과 같이 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러(compiler)에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터(interpreter) 등을 사용해서 컴퓨터에 의해 실행될 수 있는 고급 언어 코드를 포함한다. 상술한 하드웨어 장치는 본 발명의 동작을 수행하기 위해 적어도 하나의 소프트웨어 모듈로 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상 실시예를 참조하여 설명하였지만, 해당 기술 분야의 숙련된 당업자는 하기의 특허 청구의 범위에 기재된 본 발명의 사상 및 영역으로부터 벗어나지 않는 범위 내에서 본 발명을 다양하게 수정 및 변경시킬 수 있음을 이해할 수 있을 것이다. 상기에서는 본 발명의 바람직한 실시예를 참조하여 설명하였지만, 해당 기술 분야의 숙련된 당업자는 하기의 특허 청구의 범위에 기재된 본 발명의 사상 및 영역으로부터 벗어나지 않는 범위 내에서 본 발명을 다양하게 수정 및 변경시킬 수 있음을 이해할 수 있을 것이다.
100: 멀티 코어 가상화 환경 병렬 처리 장치
110: 가상 코어 큐 매퍼 111: 플로우 테이블
112: 가상 코어 큐 테이블 120-1, ..., 120-N: 가상머신 큐
130: 가상 스위칭 부 140-1, ..., 140-N: 가상머신
150: 가상 코어 큐 관리자 160: 가상 스위치 관리자
170: 가상 머신 관리자 180: 데이터 버퍼
181, 182, 183: 트래픽 데이터

Claims (18)

  1. 적어도 하나 이상의 가상 머신과 각 가상 머신 별로 적어도 하나 이상의 가상 코어 큐를 가진 가상화 환경에서, 가상 코어 자동 스케일링을 지원하는, 순차적인 트래픽에 대한 병렬 처리 방법으로서,
    입력되는 트래픽의 속성에 따라서 상기 트래픽의 플로우를 식별하는 단계;
    상기 식별된 플로우에 따라, 상기 트래픽이 매핑될 가상 코어 큐를 결정하고, 상기 트래픽을 상기 결정된 가상 코어 큐에 큐잉하는 단계; 및
    가상 스위치를 통해서 상기 결정된 가상 코어 큐로부터 상기 결정된 가상 코어 큐에 대응되는 가상 머신으로 상기 트래픽을 전달하는 단계를 포함하고,
    상기 순차적인 트래픽의 순서를 유지하여 상기 순차적인 트래픽의 리-오더링(re-ordering) 문제가 발생되지 않도록 하기 위하여, 동일한 플로우에 속한 트래픽은 동일한 가상 코어 큐에 큐잉되어 동일한 가상 코어에 의해서 처리되며, 상기 트래픽이 큐잉되는 상기 가상 코어 큐는 상기 식별된 플로우에 할당된 가상 머신에 속한 가상 코어 큐들 중에서 파워 절약 정책 또는 공정 스위칭 정책 중 적어도 하나에 기초하여 선택되는 것을 특징으로 하는,
    가상 코어 자동 스케일링을 지원하는 병렬 처리 방법.
  2. 청구항 1에 있어서,
    상기 트래픽의 플로우를 식별하는 단계에서, 상기 트래픽에 속한 패킷의 특정 헤더 정보에 대한 해시 함수 값에 기초하여 상기 트래픽의 플로우가 식별되는 것을 특징으로 하는,
    가상 코어 자동 스케일링을 지원하는 병렬 처리 방법.
  3. 청구항 2에 있어서,
    상기 트래픽에 속한 패킷의 특정 헤더 정보는 SIP(Source IP address), DIP(Destination IP address), SPORT(Source Port), DPORT(Destination Port), 및 PROTOCOL 중 적어도 하나 이상의 필드 값의 조합을 사용하는 것을 특징으로 하는,
    가상 코어 자동 스케일링을 지원하는 병렬 처리 방법.
  4. 청구항 1에 있어서,
    상기 결정된 가상 코어 큐에 큐잉하는 단계에서, 상기 트래픽은 데이터 버퍼에 저장되고, 상기 트래픽이 상기 데이터 버퍼에 저장된 위치를 지시하는 포인터가 상기 결정된 가상 코어 큐에 큐잉하는 것을 특징으로 하는,
    가상 코어 자동 스케일링을 지원하는 병렬 처리 방법.
  5. 청구항 1에 있어서,
    상기 결정된 가상 코어 큐에 큐잉하는 단계에서,
    상기 식별된 플로우에 할당된 가상 코어 큐가 존재할 경우, 상기 식별된 플로우에 할당된 가상 코어 큐에 상기 트래픽을 큐잉하고,
    상기 식별된 플로우에 할당된 가상 코어 큐가 존재하지 않을 경우, 상기 식별된 플로우에 할당된 가상 머신에 속한 가상 코어 큐들 중 하나를 선택하거나, 새로운 가상 코어 큐를 생성하여 상기 트래픽을 큐잉하는 것을 특징으로 하는,
    가상 코어 자동 스케일링을 지원하는 병렬 처리 방법.
  6. 청구항 1에 있어서,
    상기 파워 절약 정책을 따를 경우, 상기 트래픽의 상기 플로우는 임계값을 초과하지 않는 길이를 가지는 기존 가상 코어 큐들 중에서 가장 많은 양의 트래픽이 큐잉된 가상 코어 큐에 매핑되며, 상기 공정 스위칭 정책을 따를 경우, 상기 트래픽의 상기 플로우는 임계값을 초과하지 않는 길이를 가지는 기존 가상 코어 큐들 중에서 가장 적은 양의 트래픽이 큐잉된 가상 코어 큐에 매핑되는 것을 특징으로 하는,
    가상 코어 자동 스케일링을 지원하는 병렬 처리 방법.
  7. 청구항 1에 있어서,
    상기 트래픽을 전달하는 단계에서, 상기 트래픽은 상기 결정된 가상 코어 큐가 속한 가상 머신 내에서 상기 결정된 가상 코어 큐에 대응되는 가상 코어로 전달되는 것을 특징으로 하는,
    가상 코어 자동 스케일링을 지원하는 병렬 처리 방법.
  8. 청구항 7에 있어서,
    상기 트래픽은 상기 트래픽에 포함된 메타 정보에 기초하여 상기 결정된 가상 코어 큐가 속한 가상 머신 내에서 상기 결정된 가상 코어 큐에 대응되는 가상 코어로 전달되는 것을 특징으로 하는,
    가상 코어 자동 스케일링을 지원하는 병렬 처리 방법.
  9. 가상 코어 자동 스케일링을 지원하는, 순차적인 트래픽에 대한 병렬 처리 장치로서,
    적어도 하나 이상의 가상 머신을 생성하고 관리하는 가상 머신 관리자;
    상기 가상 머신 별로 적어도 하나 이상의 가상 코어 큐를 생성하고 관리하는 가상 코어 큐 관리자;
    입력되는 트래픽의 속성에 따라서 상기 트래픽의 플로우를 식별하고, 상기 식별된 플로우에 따라, 상기 트래픽이 매핑될 가상 코어 큐를 결정하고, 상기 트래픽을 상기 결정된 가상 코어 큐에 큐잉하는 가상 코어 큐 매퍼; 및
    상기 결정된 가상 코어 큐로부터 상기 결정된 가상 코어 큐에 대응되는 가상 머신으로 상기 트래픽을 전달하는 적어도 하나의 가상 스위치를 포함하고,
    상기 순차적인 트래픽의 순서를 유지하여 상기 순차적인 트래픽의 리-오더링(re-ordering) 문제가 발생되지 않도록 하기 위하여, 동일한 플로우에 속한 트래픽은 동일한 가상 코어 큐에 큐잉되어 동일한 가상 코어에 의해서 처리되며, 상기 식별된 플로우에 할당된 가상 머신에 속한 가상 코어 큐들 중 하나는 파워 절약 정책 또는 공정 스위칭 정책 중 적어도 하나에 기초하여 선택되는 것을 특징으로 하는,
    가상 코어 자동 스케일링을 지원하는 병렬 처리 장치.
  10. 청구항 9에 있어서,
    상기 가상 코어 큐 매퍼는 상기 트래픽에 속한 패킷의 특정 헤더 정보에 대한 해시 함수 값에 기초하여 상기 트래픽의 플로우를 식별하는 것을 특징으로 하는,
    가상 코어 자동 스케일링을 지원하는 병렬 처리 장치.
  11. 청구항 10에 있어서,
    상기 트래픽에 속한 패킷의 특정 헤더 정보는 SIP(Source IP address), DIP(Destination IP address), SPORT(Source Port), DPORT(Destination Port), 및 PROTOCOL 중 적어도 하나 이상의 필드 값의 조합인 것을 특징으로 하는,
    가상 코어 자동 스케일링을 지원하는 병렬 처리 장치.
  12. 청구항 10에 있어서,
    트래픽과 플로우의 관계를 정의하는 플로우 테이블을 추가로 포함하고, 상기 가상 코어 큐 매퍼는 상기 플로우 테이블을 참조하여 상기 트래픽의 플로우를 식별하는 것을 특징으로 하는,
    가상 코어 자동 스케일링을 지원하는 병렬 처리 장치.
  13. 청구항 9에 있어서,
    상기 적어도 하나의 가상 스위치를 관리하는 가상 스위치 관리자를 추가로 포함하고, 상기 가상 스위치 관리자는 상기 적어도 하나의 가상 스위치의 처리 부하에 따라 새로운 가상 스위치를 추가하거나 상기 적어도 하나의 가상 스위치의 일부를 비활성화시키는 것을 특징으로 하는,
    가상 코어 자동 스케일링을 지원하는 병렬 처리 장치.
  14. 청구항 9에 있어서,
    상기 가상 코어 큐 매퍼는 상기 트래픽을 데이터 버퍼에 저장하고, 상기 트래픽이 상기 데이터 버퍼에 저장된 위치를 지시하는 포인터를 상기 결정된 가상 코어 큐에 큐잉하는 것을 특징으로 하는,
    가상 코어 자동 스케일링을 지원하는 병렬 처리 장치.
  15. 청구항 9에 있어서,
    상기 가상 코어 큐 매퍼는,
    상기 식별된 플로우에 할당된 가상 코어 큐가 존재할 경우, 상기 식별된 플로우에 할당된 가상 코어 큐에 상기 트래픽을 큐잉하고,
    상기 식별된 플로우에 할당된 가상 코어 큐가 존재하지 않을 경우, 상기 식별된 플로우에 할당된 가상 머신에 속한 가상 코어 큐들 중 하나를 선택하거나, 새로운 가상 코어 큐를 생성하여 상기 트래픽을 큐잉하는 것을 특징으로 하는,
    가상 코어 자동 스케일링을 지원하는 병렬 처리 장치.
  16. 청구항 9에 있어서,
    상기 파워 절약 정책을 따를 경우, 상기 트래픽의 상기 플로우는 임계값을 초과하지 않는 길이를 가지는 기존 가상 코어 큐들 중에서 가장 많은 양의 트래픽이 큐잉된 가상 코어 큐에 매핑되며, 상기 공정 스위칭 정책을 따를 경우, 상기 트래픽의 상기 플로우는 임계값을 초과하지 않는 길이를 가지는 기존 가상 코어 큐들 중에서 가장 적은 양의 트래픽이 큐잉된 가상 코어 큐에 매핑되는 것을 특징으로 하는,
    가상 코어 자동 스케일링을 지원하는 병렬 처리 장치.
  17. 청구항 9에 있어서,
    상기 결정된 가상 코어 큐에 대응된 가상 머신은, 상기 가상 스위치로부터 전달된 트래픽을 상기 결정된 가상 코어 큐로 전달하는 가상 네트워크 인터페이스(vNIC: Virtual Network Interface Card) 및 가상 분배기(vDistributor)를 포함하는 것을 특징으로 하는,
    가상 코어 자동 스케일링을 지원하는 병렬 처리 장치.
  18. 청구항 17에 있어서,
    상기 트래픽은 상기 트래픽에 포함된 메타 정보에 기초하여 상기 결정된 가상 코어 큐가 속한 가상 머신 내에서 상기 결정된 가상 코어 큐에 대응되는 가상 코어로 전달되는 것을 특징으로 하는,
    가상 코어 자동 스케일링을 지원하는 병렬 처리 장치.
KR1020160162458A 2016-12-01 2016-12-01 가상 코어 자동 스케일링을 지원하는 병렬 처리 방법 및 이를 위한 장치 KR102668521B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020160162458A KR102668521B1 (ko) 2016-12-01 2016-12-01 가상 코어 자동 스케일링을 지원하는 병렬 처리 방법 및 이를 위한 장치
US15/821,259 US10635478B2 (en) 2016-12-01 2017-11-22 Parallel processing method supporting virtual core automatic scaling and apparatus therefor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020160162458A KR102668521B1 (ko) 2016-12-01 2016-12-01 가상 코어 자동 스케일링을 지원하는 병렬 처리 방법 및 이를 위한 장치

Publications (2)

Publication Number Publication Date
KR20180062607A KR20180062607A (ko) 2018-06-11
KR102668521B1 true KR102668521B1 (ko) 2024-05-23

Family

ID=62243093

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160162458A KR102668521B1 (ko) 2016-12-01 2016-12-01 가상 코어 자동 스케일링을 지원하는 병렬 처리 방법 및 이를 위한 장치

Country Status (2)

Country Link
US (1) US10635478B2 (ko)
KR (1) KR102668521B1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180285294A1 (en) * 2017-04-01 2018-10-04 Anjaneya R. Chagam Reddy Quality of service based handling of input/output requests method and apparatus
US11494212B2 (en) * 2018-09-27 2022-11-08 Intel Corporation Technologies for adaptive platform resource assignment
US20190044892A1 (en) * 2018-09-27 2019-02-07 Intel Corporation Technologies for using a hardware queue manager as a virtual guest to host networking interface

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130239119A1 (en) 2012-03-09 2013-09-12 Microsoft Corporation Dynamic Processor Mapping for Virtual Machine Network Traffic Queues
JP2015043196A (ja) 2013-08-26 2015-03-05 ヴィーエムウェア, インコーポレイテッドVMware, Inc. トラフィック及び負荷を認識する動的なキュー管理

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6854117B1 (en) 2000-10-31 2005-02-08 Caspian Networks, Inc. Parallel network processor array
US7058010B2 (en) * 2001-03-29 2006-06-06 Lucent Technologies Inc. Controlled switchover of unicast and multicast data flows in a packet based switching system
US7765405B2 (en) * 2005-02-25 2010-07-27 Microsoft Corporation Receive side scaling with cryptographically secure hashing
US7836195B2 (en) * 2008-02-27 2010-11-16 Intel Corporation Preserving packet order when migrating network flows between cores
US8346999B2 (en) * 2009-12-15 2013-01-01 Intel Corporation Dynamic receive queue balancing with high and low thresholds
JP5673233B2 (ja) 2011-03-09 2015-02-18 富士通株式会社 情報処理装置、仮想マシン管理方法および仮想マシン管理プログラム
KR102020049B1 (ko) * 2013-01-11 2019-11-04 한국전자통신연구원 멀티 테넌트 클라우드 서비스의 서비스 품질을 보장하기 위한 스위치, 방법 및 상기 스위치를 포함하는 시스템
US9594584B2 (en) * 2014-03-31 2017-03-14 Electronics And Telecommunications Research Institute Apparatus and method for mapping of tenant based dynamic processor
KR102126213B1 (ko) * 2014-03-31 2020-06-24 한국전자통신연구원 테넌트 기반의 동적 프로세서 할당 장치 및 방법

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130239119A1 (en) 2012-03-09 2013-09-12 Microsoft Corporation Dynamic Processor Mapping for Virtual Machine Network Traffic Queues
JP2015043196A (ja) 2013-08-26 2015-03-05 ヴィーエムウェア, インコーポレイテッドVMware, Inc. トラフィック及び負荷を認識する動的なキュー管理

Also Published As

Publication number Publication date
US10635478B2 (en) 2020-04-28
US20180157520A1 (en) 2018-06-07
KR20180062607A (ko) 2018-06-11

Similar Documents

Publication Publication Date Title
US9590914B2 (en) Randomized per-packet port channel load balancing
US8984178B2 (en) Network devices with multiple direct memory access channels and methods thereof
US8446824B2 (en) NUMA-aware scaling for network devices
US20150244804A1 (en) Methods, systems and devices for parallel network interface data structures with differential data storage service capabilities
US10897428B2 (en) Method, server system and computer program product for managing resources
CN105408879A (zh) 快捷***部件互连域的资源管理
KR102668521B1 (ko) 가상 코어 자동 스케일링을 지원하는 병렬 처리 방법 및 이를 위한 장치
US10263809B2 (en) Selecting an optimal network device for reporting flow table misses upon expiry of a flow in a software defined network
US11157336B2 (en) Technologies for extending triggered operations
US11563830B2 (en) Method and system for processing network packets
EP3672172B1 (en) Allocation of processors for processing packets
EP3588879A1 (en) Technologies for buffering received network packet data
US8199764B2 (en) Scalable approach to large scale queuing through dynamic resource allocation
US9594584B2 (en) Apparatus and method for mapping of tenant based dynamic processor
US8170042B2 (en) Transmit-side scaler and method for processing outgoing information packets using thread-based queues
US7245616B1 (en) Dynamic allocation of packets to tasks
CN115509644B (zh) 算力卸载方法、装置、电子设备和存储介质
US10708193B2 (en) State synchronization for global control in a distributed security system
CN111970213A (zh) 排队***
US9846658B2 (en) Dynamic temporary use of packet memory as resource memory
US20220131811A1 (en) Adaptive buffering in a distributed system with latency / adaptive tail drop
US9922000B2 (en) Packet buffer with dynamic bypass
US10142245B2 (en) Apparatus and method for parallel processing
KR20160073867A (ko) 네트워크 인터페이스 가상화 장치, 방법 및 이를 실행하기 위한 컴퓨터 프로그램
CN104796413A (zh) 一种面向Web防火墙的分组动态存储方法

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
GRNT Written decision to grant