KR20190108038A - 가상 환경에서의 물리적 스토리지 장치 자원을 동적으로 할당하는 메커니즘 - Google Patents

가상 환경에서의 물리적 스토리지 장치 자원을 동적으로 할당하는 메커니즘 Download PDF

Info

Publication number
KR20190108038A
KR20190108038A KR1020190006432A KR20190006432A KR20190108038A KR 20190108038 A KR20190108038 A KR 20190108038A KR 1020190006432 A KR1020190006432 A KR 1020190006432A KR 20190006432 A KR20190006432 A KR 20190006432A KR 20190108038 A KR20190108038 A KR 20190108038A
Authority
KR
South Korea
Prior art keywords
queue
output
input
storage device
virtual
Prior art date
Application number
KR1020190006432A
Other languages
English (en)
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
Priority claimed from US15/959,108 external-priority patent/US11036533B2/en
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Publication of KR20190108038A publication Critical patent/KR20190108038A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45579I/O management, e.g. providing access to device drivers or storage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

스토리지 장치가 개시된다. 스토리지 장치는 호스트 장치 상의 적어도 하나의 가상 머신(VM)으로부터의 요청에 대한 데이터 및 적어도 하나의 입출력(I/O) 큐를 저장하기 위한 스토리지를 포함할 수 있다. 스토리지 장치는 가상 머신(VM)에 대한 입출력(I/O) 큐의 할당을 요청하기 위해 입출력(I/O) 큐 생성 명령어를 지원할 수 있다. 입출력(I/O) 큐 생성 명령어는 입출력(I/O) 큐와 연관된 논리 블록 어드레스(LBA)의 범위에 대응하는 LBA 범위 속성을 포함할 수 있다. 스토리지 장치는 LBA의 범위를 스토리지의 물리적 블록 어드레스(PBA) 범위로 맵핑할 수 있다.

Description

가상 환경에서의 물리적 스토리지 장치 자원을 동적으로 할당하는 메커니즘{MECHANISM TO DYNAMICALLY ALLOCATE PHYSICAL STORAGE DEVICE RESOURCES IN VIRTUALIZED ENVIRONMENTS}
본 발명은 일반적으로 스토리지 장치에 관한 것으로, 특히 서로 분리될 수 있는 가상 머신에 의한 스토리지 장치에 대한 접근을 지원하는 것이다.
단일 루트 입출력 가상화(SR-IOV)는 하나의 물리적 PCIe(Peripheral Component Interconnect Express) 장치가 여러 개의 개별 물리적 PCIe 장치로 보일 수 있게 하는 사양-지원 인터페이스 메커니즘이다. SR-IOV는 성능 및 관리 측면에서 PCIe 리소스를 공유하고 분리하는 동시에 상호 운용성을 향상시키는 데 도움을 준다.
SR-IOV는 네트워크 어댑터 용도로 10년 동안 존재해 왔다. 아주 최근에, SR-IOV는 스토리지를 포함하기 시작했다. 중앙 처리 장치(CPU) 처리는 이미 하이퍼바이저를 기본 장치로, 가상 머신(VM)을 보조 장치로 사용하여 가상화 채택 속도를 높이는 데 도움이 되는 리소스 분리를 제공한다. SR-IOV를 통해 네트워크 및 스토리지 장치는 물리적 기능 장치(PF) 및 가상 기능 장치(VF)를 제공한다. 이들은 물리적 서버를 여러 개의 가상 서버로 변환하기에 충분한 장치 분리를 공동으로 제공하여 전체 응용 프로그램이 각각 분리된 공간에서 실행될 수 있도록 한다.
컴퓨팅 처리, 네트워크 및 스토리지가 3 가지 가상화 기둥을 형성하지만 스토리지 장치 및 스토리지 장치 벤더는 SR-IOV를 따라가는 데 뒤처져 있다. 네트워킹과 달리 스토리지는 논리 블록 어드레스(LBA) 범위에서 참조하는 데이터 어드레스 공간을 정의하기 때문에 이러한 현상이 발생할 수 있다. 이 LBA 범위는 유한한 단위의 수로만 세분화될 수 있다. 또한, 가상 기능 장치(VF)는 가상 머신(VM)의 PCI(Peripheral Component Interconnect) 공간에 직접 노출되는 하드웨어 기능이기 때문에, 스토리지 장치는 추가 가상 기능 장치(VF)를 지원하기 위해 물리적 하드웨어 게이트를 필요로 한다. 스토리지/네트워크 장치에 SR-IOV를 추가하면, 게이트 수와 칩 크기가 증가하고 더 많은 전력이 소모된다.
SR-IOV는 반-가상화 장치와 달리 입출력 장치(I/O)가 하이퍼바이저를 거칠 필요가 없기 때문에 베어-메탈 성능을 제공하면서 하드웨어 분리 문제를 해결한다. NVMe(Non-Volatile Memory Express) 스토리지 장치는 SR-IOV를 채택한 최신 상품이다. 그러나 저장을 위해 복수의 가상 머신(VM)에 분리된 접근을 제공하는 다른 메커니즘이 있을 수 있다.
SR-IOV에서 제공하는 것과 같은 기능을 제공할 수 있는 방법이 필요하지만, SR-IOV에 의한 하드웨어 요구 사항 및 제한 사항은 없다.
본 발명의 목적은 서로 분리될 수 있는 가상 머신에 의한 스토리지 장치에 대한 접근을 지원하는데 있다.
본 발명의 실시 예에 따른 스토리지 장치는, 데이터를 저장하기 위한 스토리지, 그리고 호스트 장치의 하나 이상의 가상 머신(VM)으로부터의 요청들을 위한 적어도 하나의 입출력(I/O) 큐를 포함하되, 상기 스토리지 장치는 상기 적어도 하나의 가상 머신(VM) 중 하나의 가상 머신(VM)을 위해 상기 적어도 하나의 입출력(I/O) 큐 중 하나의 입출력(I/O) 큐의 할당을 요청하기 위한 입출력(I/O) 큐 생성 명령어를 지원하고, 상기 입출력(I/O) 큐 생성 명령어는 상기 하나의 입출력(I/O) 큐에 관련된 논리 블록 어드레스(LBA) 범위에 대한 LBA 범위 속성을 포함하고, 상기 스토리지 장치는 상기 논리 블록 어드레스(LBA) 범위를 데이터를 저장하기 위한 상기 스토리지의 물리 블록 어드레스(PBA) 범위로 맵핑한다.
본 발명의 실시 예에 따른 필드 프로그래머블 게이트 어레이(FPGA)는, 호스트 장치에서 적어도 하나의 가상 머신(VM)으로부터의 요청을 위한 적어도 하나의 가상 입출력(I/O) 큐, 그리고 상기 적어도 하나의 가상 입출력(I/O) 큐 중에서 가상 입출력(I/O) 큐를 스토리지 장치의 입출력(I/O) 큐에 맵핑시켜, 상기 가상 입출력(I/O) 큐의 가상 머신(VM)으로부터 수신된 입출력(I/O) 요청들이 상기 입출력(I/O) 큐를 사용하여 상기 스토리지 장치에 전달되도록, 그리고 상기 입출력(I/O) 큐의 스토리지 장치로부터 수신된 결과가 상기 가상 입출력(I/O) 큐를 통하여 상기 가상 머신(VM)에 전달되도록 하는 맵핑 로직을 포함하되, 상기 FPGA는 상기 적어도 하나의 가상 머신(VM)의 가상 머신(VM)을 위한 상기 적어도 하나의 가상 입출력(I/O) 큐 중에서 상기 가상 입출력(I/O) 큐의 할당을 요청하기 위한 가상 입출력(I/O) 큐 생성 명령어를 지원하고, 상기 가상 입출력(I/O) 큐 생성 명령어는 상기 가상 입출력(I/O) 큐와 관련된 논리 블록 어드레스(LBA)의 범위에 대한 논리 블록 어드레스(LBA) 범위 속성을 포함하고, 상기 스토리지 장치는 상기 FPGA와 별도로 연결되어 있지만, 상기 논리 블록 어드레스(LBA)의 범위를 상기 스토리지 장치 내의 물리적 블록 어드레스(PBA)의 범위로 맵핑한다.
본 발명의 실시 예에 따른 머신에 의해 실행될 때, 아래의 단계들을 수행하는 명령어들이 저장되는 비일시적인 저장 매체를 포함하는 상품에 있어서, 상기 단계들은, 호스트 장치 상의 가상 머신(VM)으로부터 스토리지 장치를 목적지로 하는 제 1 요청을 수신하는 단계, 상기 제 1 요청이 상기 스토리지 장치에 도달하는 것을 트랩하는 단계, 상기 제 1 요청을 시뮬레이팅하는 제 2 요청을 필드 프로그래머블 게이트 어레이(FPGA)에 전송하는 단계, 상기 필드 프로그래머블 게이트 어레이(FPGA)로부터 상기 제 2 요청의 결과를 수신하는 단계, 그리고 상기 제 2 요청의 결과를 상기 가상 머신(VM)에 전송하는 단계를 포함한다.
상술한 특징에 따른 본 발명에 따르면, 서로 분리될 수 있는 가상 머신에 의한 스토리지 장치에 대한 접근을 제공하는 스토리지 시스템을 구현할 수 있다.
도 1은 본 발명의 실시 예에 따른 스토리지 장치에 분리된 가상 머신(VM) 접근을 지원하는 장치를 보여준다.
도 2는 도 1의 장치의 추가적인 세부 사항을 보여준다.
도 3은 도 1의 가상 머신(VM)과 단지 하나의 물리적 기능만을 보여주는 스토리지 장치 간의 통신 경로를 보여준다.
도 4는 도 1의 가상 머신(VM)과 복수의 물리적 기능을 보여주는 스토리지 장치 간의 통신 경로를 보여준다.
도 5는 도 1의 스토리지 장치를 상세히 보여준다.
도 6은 도 1의 스토리지 장치에 대한 확장된 입출력(I/O) 큐 생성 명령어를 보여준다.
도 7은 도 1의 스토리지 장치의 복수의 네임 스페이스로 분리된 물리적 스토리지를 보여준다.
도 8은 도 1의 스토리지 장치에서 가상 머신(VM)의 분리를 지원하기 위한 도어벨들의 메모리 맵핑을 보여준다.
도 9는 도 3의 필드 프로그래머블 게이트 어레이(FPGA)에 대한 확장된 가상 입출력(I/O) 큐 생성 명령어를 나타낸다.
도 10은 도 1의 스토리지 장치의 입출력(I/O) 큐에 맵핑되는 3 개의 가상 입출력(I/O) 큐를 지원하는 도 3의 FPGA를 보여준다.
도 11은 본 발명의 일 실시 예에 따른 가성 머신(VM)의 입출력(I/O) 큐를 할당하는 도 1의 스토리지 장치의 예시적인 동작 절차를 보여주는 순서도이다.
도 12는 본 발명의 일 실시 예에 따른 가성 머신(VM)의 가상 입출력(I/O) 큐를 할당하는 도 3의 FPGA의 예시적인 동작 절차를 보여주는 순서도이다.
도 13은 본 발명의 일 실시 예에 따른 도 3의 가상 머신(VM)들로부터의 관리 요청들을 처리하기 위한 도 3의 하이퍼바이저에 대한 예시적인 동작 절차를 보여주는 순서도이다.
도 14는 본 발명의 일 실시 예에 따른 가상 머신(VM)의 분리를 지원하기 위해 도어벨의 메모리 어드레스를 다른 운영 체제 페이지에 맵핑하기 위한 도 1의 스토리지 장치 또는 도 3의 FPGA의 예시적인 동작 절차를 보여주는 순서도이다.
본 발명의 기술적 사상의 실시 예들이 참조되며, 이들의 예들이 첨부된 도면들에 도시된다. 후술되는 상세한 설명에서, 다양한 특정한 상세들이 본 발명의 기술적 사상의 충분한 이해를 돕기 위하여 제공된다. 그러나 이 분야에 통상적인 기술을 가진 자들은 이러한 특정한 상세들 없이도 본 발명의 기술적 사상을 구현할 수 있다. 다른 예들로서, 잘 알려진 방법들, 절차들, 구성 요소들, 회로들, 그리고 네트워크들은 실시 예들의 측면들을 불필요하게 모호하게 하지 않기 위해 상세하게 설명되지 않는다.
여기에서 제1, 제2 등과 같은 용어들이 다양한 원소들을 설명하기 위하여 사용되지만, 이러한 원소들은 이러한 용어들에 의해 한정되지 않는다. 이러한 용어들은 하나의 원소를 다른 하나의 원소와 구별하기 위해서만 사용된다. 예를 들어, 본 발명의 기술적 사상의 범위로부터 멀어지지 않으면서 제1 모듈은 제2 모듈로 명명될 수 있다. 마찬가지로, 제2 모듈은 제1 모듈로 명명될 수 있다.
본 발명의 기술적 사상의 설명에서 사용되는 용어들은 특정한 실시 예들을 설명하기 위한 목적으로만 사용되며, 본 발명의 기술적 사상을 한정하는 것으로 의도되지 않는다. 본 발명의 기술적 사상의 설명 및 첨부된 청구항들에서 사용되는 바와 같이, 맥락에서 명확하게 명시되지 않으면 단수 표현들은 복수 표현들 또한 포함하는 것으로 의도된다. "그리고/또는"의 용어는 하나 또는 그보다 많은 연관된 항목들의 임의의 그리고 가능한 모든 조합들을 포함하는 것으로 참조된다. "포함한다" 그리고/또는 "포함하는"의 용어들은 상세한 설명에서 사용된 때에 언급된 특성들, 정수들, 단계들, 동작들, 원소들, 그리고/또는 구성 요소들의 존재를 명시하며, 하나 또는 그보다 많은 다른 특성들, 정수들, 단계들, 동작들, 원소들, 구성 요소들, 그리고/또는 그것들의 그룹들의 존재 또는 추가를 배제하지 않는다. 도면들의 구성 요소들 및 특성들은 실제 비율에 필수적으로 비례하지 않는다.
현재 NVMe(Non-Volatile Memory Express) 스토리지 장치를 위한 SR-IOV (Single-Root Input / Output Virtualization)의 얼리-어답터(early adopter)는 물리적 기능(PF)당 유한한 수의 가상 기능(VF)과 관련 네임 스페이스를 제공하는 방식으로 사용해 왔다. 논리 어드레스 공간 범위의 할당은 네임 스페이스 할당에 의존하지만, 가성 머신(VM)에 대한 베어-메탈 직접 액세스는 지원되는 가상 기능(VF)의 수에 따라 다르다. 이 구현은 여러 가상 머신(VM)을 직접 지원하는 성능 요구를 충족시키기 위해 전력 및 다이 사이즈의 비용으로 추가 하드웨어를 지원해야 하기 때문에, 대용량을 지원하는 스토리지 장치에 문제를 야기한다. 최소한 SR-IOV 기능을 지원하려면 장치가 각각의 가성 기능(VF)에 별도의 PCI 설정 공간, 입출력(I/O) 바(bar), 제출 및 완료 큐를 위한 입출력(I/O) 큐, 메시지 신호 인터럽트(MSI-X), 그리고 지원되는 큐에 대한 도어벨 어드레스가 요구된다.
최초 SR-IOV 스토리지 장치에서의 고정 할당 접근 방식의 결핍으로 인해, NVMe위원회는 고정 자원 할당을 동적 자원 할당 및 관리로 변경하는 것과 같은, 구현 제한을 제거한 또 다른 사양(Specification)을 개발하게 되었다. 현재도 열려 있고 활발히 제안된 수많은 변경 사항은 자원 할당 문제의 해결을 위해 시도되고 있다. 그러나 필연적으로 나타나는 사양 복잡성을 추가하는 방식으로 지원되는 가상 기능(VF)과 같은 물리적 장치 제한에 구속된다.
VMWare, Microsoft, Citrix XenServer, KVM, Qemu, 그리고 Oracle VM과 같은 시장에서 소수의 선도적인 하이퍼바이저가 있지만, 이들 세트 중 일부만 현재 시장 변화에 적극적으로 적응하고 있다. 그렇게 함으로써 다수 시장 점유율을 확보하게 되었다. 프로그래밍 환경의 특성상, 각각의 하이퍼바이저 환경은 사용자 지정 구현으로 간주될 수 있다. 따라서 그러한 변화를 지원하는 것이 중요할 수 있다.
본 발명의 실시 예는 가상 머신(VM) 분리 및 성능을 제공하기 위해 SR-IOV 스토리지 장치를 프로그램하는 더 간단한 메커니즘을 정의한다. 본 발명의 실시 예는 리소스를 맵핑하기 위해 하이퍼바이저에 의존함으로써보다 간단한 접근법을 따른다. 본 발명의 특징에 따른 실시 예는 다음의 정책을 포함할 수 있다:
1) 가상 머신(VM)의 입출력(I/O) 큐(제출 및 완료 큐 쌍)에 직접 응용 프로그램 접근을 제공하여 성능을 가상 머신(VM)에 확장.
2) 입출력(I/O) 큐(제출 및 완료 큐) 기능을 가상 머신(VM)에 직접 맵핑.
3) 관리 경로에 대해 하이퍼바이저에서 컨트롤러 세부 사항을 캡슐화.
4) 개별 가상 머신(VM)의 요청당 물리적 리소스를 동적으로 분리.
본 발명의 실시 예는 새로운 NVMe 스토리지 장치 지원을 특징으로 추가함으로써 SR-IOV방식의 기능을 효과적으로 제공할 수 있다.
본 발명의 실시 예는 다음과 같은 새로운 특징을 정의한다:
1) 성능 향상을 위해 NVMe 입출력(I/O) 제출 큐 및 입출력(I/O) 완료 큐 (입출력(I/O) 큐 쌍이라고도 함)를 가상 머신(VM)에 직접 맵핑하는 고급 관리 메커니즘.
2) 하이퍼바이저에서 하드웨어 입출력(I/O) 큐를 가상화된 컨트롤러 집합으로 가상 머신(VM)에 동적으로 맵핑하는 가상화된 컨트롤러를 구현하는 메커니즘.
3) 논리 어드레스 공간을 논리 단위 또는 네임 스페이스로 맵핑하는 메커니즘.
4) 추가적인 방법을 사용하여 스토리지 장치에서 사용할 수 없는 추가 입출력(I/O) 큐를 맵핑하는 메커니즘.
5) 공유 자원에 대해 가상 머신(VM) 특정 분리를 제공하는 방법.
본 발명의 실시 예는 종래 기술에 비해 다음과 같은 이점을 제공한다:
1) 값 비싼 SR-IOV 하드웨어 요구 사항없이 SR-IOV와 유사한 기능 제공.
2) 가상 머신(VM)에 추가 입출력(I/O) 자원 분리 및 성능 향상을 제공하여 장치 사양을 능가.
3) 운영 체제(O/S)의 장치내 드라이버 변경을 피하기 위해 완전히 가상화할 수 있는 하드웨어 기능을 제공.
4) 스토리지 장치와 하이퍼바이저 간에 QoS(Quality of Service) 채널을 생성.
5) 스토리지 가상화를 위한 하드웨어 요구 사항을 간소화.
본 발명의 실시 예는 스토리지 장치 입출력(I/O) 자원을 가상 머신(VM)에 직접 재맵핑하는 메커니즘을 제공한다. 본 발명의 실시 예는 x86 아키텍처를 위한 입출력 메모리 관리 유닛 (IOMMU) 및 저장 장치가 정상적으로 지원하지 않는 다수의 VM에 맵핑하기 위한 추가적인 하드웨어 자원을 포함하는 메모리 및 인터럽트를 위한 기존의 재맵핑 자원을 사용한다.
이러한 이점을 얻으려면 솔리드 스테이트 드라이브(SSD)가 포함될 수 있는 스토리지 장치는 아래의 기능을 수행해야 한다:
1) 확장된 입출력(I/O) 큐 생성 속성을 지원한다.
2) 입출력(I/O) 큐 레벨에서 간단한 논리 어드레스 재맵핑을 지원한다.
3) 가상 머신(VM) 보안을 위한 운영체제(O/S) 페이지 경계에서 도어벨을 지원한다.
4) NVMe 사양 표준에 따라 하나 이상의 필드를 통해 이러한 확장 속성을 알린다.
5) 선택적으로 서비스 품질(QoS)을 적용하기 위해 기본값보다 추가 큐 우선순위 클래스 조정 메커니즘을 제공한다.
NVMe 입출력(I/O) 큐 쌍을 가상 머신(VM)에 직접 맵핑
입출력(I/O) 제출 큐와 입출력(I/O) 완료 큐는 함께 작동하므로 입출력(I/O) 큐 쌍이라고도 하며 자원(Resource)이 제한되어 있으면 자동으로 1:1 맵핑이 적용된다. 대부분의 장치내 NVMe 드라이버는 모든 큐가 1:1 맵핑을 생성한다. 본 발명의 실시 예는 이들이 가상 머신(VM)에서 실행되는 장치 드라이버 구현이기 때문에 이 사용을 목표로 한다.
본 발명의 실시 예를 지원하는 스토리지 장치는 제출 및 완료 큐에 대한 확장된 입출력(I/O) 생성 명령어를 제공할 수 있다. 이 명령어는 옵션 사항으로 표시되거나 또는 벤더 특정 명령어로 정의될 수 있는 별도의 운영 코드를 통해 적용될 수 있다. 확장된 명령어는 큐 사이즈, 큐 식별자, 큐 우선순위 클래스, 큐 버퍼가 물리적으로 인접해 있는지 여부, 인터럽트 벡터 및 인터럽트 가능 필드와 같은 NVMe 사양이 정의하는 기본 NVMe 큐 생성 명령어 특성을 지원할 수 있다. 그러나 이 외에도 확장 명령어는 장치의 어드레스 공간 내에서 논리 블록 어드레스 지정 오프셋을 지원할 수도 있다. 이 메커니즘은 다음과 같이 동작한다:
1) 가상 머신(VM)이 생성되면 하이퍼바이저는 가상화된 NVMe 스토리지 장치를 가상 머신(VM)의 PCI 공간에 노출한다. 이 장치는 초기에 완전히 가상화되어 PCI 설정 및 입출력(I/O) 메모리 맵핑된 영역에 대한 접근시 게스트의 탈출을 가져올 수 있다. 인터럽트의 경우, 하이퍼바이저는 특정 MSI-X 인터럽트를 설정하여 하이퍼바이저의 구현에 따라 게스트 가상 머신(VM)을 직접 인터럽트할 수 있다.
2) 입출력(I/O) 메모리 맵핑된 공간에서 하이퍼바이저는 NVMe 설정 공간 변경을 트랩하고, 접근 요청을 적절하게 가상화할 수 있다. 하이퍼바이저는 운영 체제(O/S) 페이지 레벨 단위로 입출력(I/O) 메모리의 일부로 도어벨을 노출 시켜서 하이퍼바이저가 각각의 도어벨들을 가상 머신(VM) 레벨에 맵핑할 수 있다. 스토리지 장치가 이 기능을 지원할 수도 있다.
3) 가상 머신(VM)이 입출력(I/O) 제출 큐를 만들면 하이퍼바이저는 요청을 트랩하고 "확장 생성 입출력(I/O) 제출 큐" 명령어를 사용하여 스토리지 장치의 물리적 입출력(I/O) 제출 큐에 맵핑한다. 하이퍼바이저 및 스토리지 장치는 가상 머신(VM)에서 제공한 값을 사용하고 다음을 변경/추가할 수 있다.
a) 스토리지 장치가 직접 접근할 수 있도록 큐 메모리를 물리적 페이지로 맵핑한다. 이 메커니즘은 Intel x86 기반 아키텍처의 IOMMU에서 제공할 수 있다.
b) 지원되는 경우, 다른 가상 머신(VM)과 관련하여 이 큐의 우선순위를 지정하는 큐 우선순위를 추가한다.
c) 가상 머신(VM)의 공간에 있는 이전에 작성된 입출력(I/O) 완료 큐 ID를 스토리지 장치 입출력(I/O) 큐와 관련하여 이 제출 큐에 바인드한다.
d) 물리적 어드레스 공간의 일부를 가상 머신(VM)에 맵핑하는 논리 블록 어드레스의 시작 및 끝값을 추가한다.
e) 최소 또는 최대 입출력(I/O) 작업 또는 초당 전송되는 최소 또는 최대 바이트에 대해 적절한 QoS 요구 사항을 적용한다.
f) 추가적으로, 가상 머신(VM)이 필요로 하는 경우, 스토리지 장치가 글로벌 네임 스페이스 접근 권한을 제공할 수 있다. 이러한 글로벌 네임 스페이스 접근 권한은 네임 스페이스 ID를 나열하는 배열에 지정할 수 있다.
g) 추가적으로, 스토리지 장치가 이러한 지원을 제공하면, 스토리지 장치는 읽기 전용, 읽기 쓰기, 배타적 접근과 같은 네임 스페이스 접근 유형 권한을 제공할 수 있다.
4) 하이퍼바이저가 입출력(I/O) 완료 큐 생성 요청을 트랩할 수 있으며 대신 다음을 수행할 수 있다.
a) 스토리지 장치가 직접 접근할 수 있도록 큐 메모리를 물리적 페이지로 맵핑. Intel x86 기반 아키텍처에서 IOMMU는 이 메커니즘을 제공할 수 있다.
b) 실제 스토리지 장치 벡터와 가상 머신(VM) 간에 제공되는 인터럽트 벡터를 이미 IOMMU와 같은 가상화를 위한 시스템 아키텍처 메커니즘을 통해 맵핑한다.
5) 관리된 VM 복잡성 및 하이퍼바이저 구현에 따라, 본 발명의 실시 예는 다수의 입출력(I/O) 생성 요청을 단일 물리적 큐에 맵핑할 수 있다. 구현된 경우, FPGA는 입출력(I/O) 완료 큐를 처리할 수 있으며 가상 머신(VM) 게스트에게 다시 인터럽트할 수 있다. 이 메커니즘은 동적 큐 할당 메커니즘을 어드레싱할 수 있다.
6) 동적 큐 할당 메커니즘의 또 다른 사용법에서 하이퍼바이저는 가상 머신(VM) SLA(Service Level Agreements)를 기반으로 하는 필수 입출력(I/O) 큐만 표시할 수 있다.
설치가 완료되면, 하드웨어 입출력(I/O) 큐를 가상 머신(VM)에 동적으로 맵핑할 수 있는 하이퍼바이저 지원 메커니즘이 SR-IOV가 제공하는 것과 유사한 요구되는 분리 및 성능 이점을 제공할 수 있지만 제조, 테스트 및 디버깅 비용은 낮다. 또한, 하이퍼바이저는 일부 변경이 필요할 수 있지만 이러한 변경 사항은 자체 포함되어 있으며 사용 가능한 하이퍼바이저로 제한되어 전체적인 충격은 줄일 수 있다. 스토리지 장치가 가상화를 지원하지 않는 시스템에 설치되어 있으면, 스토리지 장치는 일반 NVMe 스토리지 장치처럼 동작해야 한다.
어드레스 공간 분리의 관리
NVMe는 SCSI(Small Computer Systems Interface) 논리 단위 번호(LUN)처럼 작동하는 네임 스페이스를 사용하여 단일의 고유한 논리 어드레스 공간을 공유할 수 있다. 네임 스페이스 ID가 주어지면 논리 어드레스 블록은 전체 논리 어드레스 맵에서 네임 스페이스가 시작되는 어드레스로 오프셋될 수 있다.
종래의 스토리지 장치에서, 물리적 어드레스 공간은 그들의 좌표로 네임 스페이스를 생성함으로써 논리 유닛들로 세분화(subdivide)될 수 있다. 종래의 스토리지 장치에서, 이 세분화는 다수의 네임 스페이스를 생성하기 위해 추가적인 네임 스페이스 지원을 요구할 수 있다. 본 발명의 실시 예는 생성된 입출력(I/O) 큐를 논리 유닛 공간에 직접 부착함으로써 이 요구를 우회한다. 예를 들어, 확장된 속성은 입출력(I/O) 큐의 논리적으로 어드레스 지정 가능한 공간의 일부로 정의될 수 있으므로, 기본 네임 스페이스가 이 공간에 맵핑된다. 이 변경은 각 입출력(I/O) 큐를 정렬하여 가상 머신(VM)이 해당 공간에 직접 접근할 수 있도록 한다. 일반적으로 가상 머신(VM)은 개인 네임 스페이스 또는 공유 네임 스페이스에만 접근을 요청한다. 입출력(I/O) 큐 생성의 확장된 속성은 글로벌 물리적 어드레스 공간에 대한 기본 네임 스페이스의 시작 및 종료 LBA를 지정할 수 있다. 이 메커니즘은 하드웨어 네임 스페이스 관리 요구 사항을 처리한다. 입력되는 입출력(I/O) 요청은 입출력(I/O) 큐를 통과해야 한다. 입출력(I/O) 큐는 이미 기본 네임 스페이스 맵핑 오프셋을 보유하고 있으므로 이 프로그래밍된 오프셋을 사용하여 LBA 어드레스를 직접 변환할 수 있다.
복수의 네임 스페이스에 대한 접근이 필요한 경우 확장 입출력(I/O) 큐 생성시 글로벌 네임 스페이스 접근을 지원하기 위한 추가 정의가 있을 수 있다. 예를 들어, "입출력(I/O) 큐23: 접근된 글로벌 네임 스페이스: 3"과 같다.
스토리지 장치에서 사용할 수 없는 추가 입출력(I/O) 큐를 맵핑하는 메커니즘
이 메커니즘에는 별도의 공간에 입출력(I/O) 큐를 제공하는 필드 프로그래머블 게이트 어레이(Field Programmable Gate Array: FPGA) 로직을 사용하는 것이 포함된다. 이 메커니즘을 사용하여, 본 발명의 실시 예는 가상 머신(VM)에 직접 맵핑될 수 있는 상당히 많은 입출력(I/O) 큐를 지원할 수 있다. FPGA는 NVMe 사양 또는 이 메커니즘이 중재되는 사양의 하위 집합을 지원할 수 있다.
전체 사양 지원 : 이 메커니즘에서 FPGA는 NVMe 사양을 완전히 모방하고 완전한 사양 수준의 기능을 제공한다. FPGA는 운영 체제(O/S) 페이지 단위로 관련 입출력(I/O) 큐 도어벨에 대한 메모리 맵을 제공하고, 장치에서 사용할 수 없는 추가 입출력(I/O) 큐에 대한 지원, 지원되는 입출력(I/O) 큐에 대한 전체 MSI-X 인터럽트 지원 및 입출력(I/O) 큐당 논리 어드레스 공간 맵핑을 지원한다. 이 메카니즘에서, 스토리지 장치는 확장된 입출력(I/O) 큐 기능을 전혀 지원할 필요가 없고, 부가적인 프로그램 가능 하드웨어에서 완전히 구현될 수 있다.
부분 사양 지원 : 가상 머신(VM)의 수가 스토리지 장치에 의해 지원되는 입출력(I/O) 큐의 수보다 많지 않을 것으로 예상되는 경우, 기능의 일부 또는 전부가 스토리지 장치 내에서 구현될 수 있다. 그런 다음 FPGA는 가상 머신(VM)에 의한 입출력(I/O) 요청에 대한 "통과(pass-through)"장치로 기능하거나 가상 입출력(I/O) 큐와 스토리지 장치 입출력(I/O) 큐의 일대일 맵핑을 사용할 수 있다. FPGA는 스토리지 장치에 기능을 구현하는 데 사용되는 하드웨어의 양을 줄이기 위해 여전히 사용될 수 있다.
두 경우 모두에 있어서, FPGA 로직이 가상 머신(VM) 각각에 필요한 분리의 세밀도(granularity)를 제공할 수 있다. 다수의 입출력(I/O) 큐를 제공하기 위해 FPGA는 노출된 많은 입출력(I/O) 큐를 단일 스토리지 장치 입출력(I/O) 큐에 맵핑할 수 있다.
FPGA는 논리 어드레스 공간 맵핑 구조와 연관된 네임 스페이스와 같은 분리를 제공할 수 있다. FPGA는 이 장치가 완벽하게 동작하기 위해 필요한 MSI-X 인터럽트 맵핑 기능을 제공할 수도 있다.
서비스 품질(Quality of Service)
여러 가상 머신(VM)이 단일 스토리지 장치에 액세스하는 입출력(I/O) 작업을 수행하면 블렌더 효과(blender effect)로 인해 성능이 저하된다. 장치가 가상 머신(VM) 레벨에서 분리없이 공유될 때 스토리지 장치는 특정 가상 머신(VM)에 접근할 수 없다. SR-IOV를 사용하면 분리(Isolation)는 PF 맵핑 수준에서 제공되지만 이점은 알려지지 않았거나 알 수 없다. 본 발명의 실시 예는 자원(Resource) 레벨뿐만 아니라 플로우 내의 가상 머신 입출력(VM I/O) 요청들에 대해서 자연 분리를 제공하는 가상 머신(VM)에 입출력(I/O) 큐 자원을 바인딩하는 것을 지원할 수 있다. 스토리지 장치는 설정 입출력(I/O) 큐 식별을 통해 완전한 가상 머신(VM)에 대한 정보를 갖는다. 스토리지 장치는 (NVMe 사양 또는 벤더 특정 명령어의 일부로 정의된) 추가 우선순위 클래스 조정 메커니즘을 지원하는 경우, 하이퍼바이저는 생성시 입출력(I/O) 큐에 적용할 수 있다. 하이퍼바이저는 가상 머신(VM)의 요청 사항에 따라 이러한 서로 다른 우선순위 클래스 지원을 적용하도록 선택할 수 있다.
제공된 스토리지 장치 기능성에 기초하여, 본 발명의 실시 예는 또한 스토리지 장치에 적용하기 위해 요구되는 성능 제한 또는 최소 서비스를 제공하는 확장된 입출력(I/O) 큐 생성 명령어의 추가 필드를 노출시킬 수 있다. 성능 제한 또는 필요한 최소 서비스는 읽기 및 쓰기 입출력(I/O)카운트 또는 전송된 바이트로 계량화될 수 있다. 이러한 성능 제한 또는 필요한 최소 서비스는 장치 지원을 기반으로 하고 가상 머신(VM)에 적용할 하이퍼바이저에 따라 설정 가능한 옵션이 될 수도 있다.
본 발명의 전형적인 사용법은 가상 머신(VM)을 많이 사용하는 엔터프라이즈 세그먼트의 스토리지 가상화에 직접 적용될 수 있다.
도 1은 본 발명의 실시 예에 따라 분리된 가상 머신(VM)의 스토리지 장치로의 접근을 지원하는 장치를 보여준다. 도 1에서, 호스트 컴퓨터 또는 호스트 장치라고도 칭할 수 있는 장치(105)가 도시되어 있다. 장치(105)는 프로세서(110)를 포함할 수 있다. 프로세서(110)는 예를 들어, 인텔의 제온(Intel Xeon), 셀러론(Celeron), 아이타니엄(Itanium) 또는 아톰(Atom) 프로세서, AMD의 옵테론(Opteron) 프로세서, ARM 프로세서 등과 같은 임의의 다양한 프로세서일 수 있다. 도 1은 장치(105) 내의 단일 프로세서(110)를 도시하고 있지만, 장치(105)는 각각 단일 코어 또는 다중 코어 프로세서일 수 있는 임의의 수의 프로세서를 포함할 수 있고, 임의의 원하는 조합으로 결합될 수 있다. 프로세서(110)는 스토리지 장치(120)에 대한 접근을 지원할 수 있는 장치 드라이버(115, Device driver)를 실행할 수 있다: 상이한 장치 드라이브는 장치(105)의 다른 컴포넌트에 대한 접근을 지원할 수 있다.
장치(105)는 또한 주 메모리(130)에 대한 접근을 관리하는데 사용될 수 있는 메모리 제어기(125)를 포함할 수 있다. 메모리(130)는 플래시 메모리, DRAM(Dynamic Random Access Memory), SRAM(Static Random Access Memory), PRAM(Persistent Random Access Memory), FRAM(Ferroelectric Random Access Memory), MRAM(Magnetoresistive Random Access Memory) 등과 같은 비휘발성 랜덤 액세스 메모리(NVRAM)일 수 있다. 메모리(130)는 또한 상이한 메모리 유형의 원하는 조합일 수 있다.
도 1은 서버(독립형 또는 랙 서버 일 수 있는)로서 장치(105)를 도시하지만, 본 발명의 실시 예는 임의의 원하는 유형의 장치(105)를 제한없이 포함할 수 있다. 예를 들어, 장치(105)는 데스크탑 또는 랩탑 컴퓨터 또는 본 발명의 실시 예로부터 이익을 얻을 수 있는 임의의 다른 장치로 대체될 수 있다. 장치(105)는 또한 특화된 휴대용 컴퓨팅 장치, 태블릿 컴퓨터, 스마트 폰 그리고 다른 컴퓨팅 장치를 포함할 수 있다.
도 2는 도 1의 장치(105)의 부가적인 세부 사항을 보여준다. 도 2에서, 전형적으로, 장치(105)는 장치(105)의 컴포넌트의 동작을 조정하는데 사용될 수 있는 메모리 컨트롤러(125) 및 클록(205)을 포함할 수 있는 하나 이상의 프로세서(110)를 포함한다. 프로세서(110)는 또한 예를 들어, RAM(random access memory), ROM (read-only memory) 또는 다른 상태 보존 매체를 포함하는 메모리(130)에 연결될 수 있다. 프로세서(110)는 또한 스토리지 장치(120) 및 예를 들면, 이더넷 커넥터 또는 무선 커넥터일 수 있는 네트워크 커넥터(210)에 연결될 수 있다. 프로세서(110)는 또한 버스(215)에 연결될 수 있으며, 버스(215)는 부착된 사용자 인터페이스(220) 및 입출력 엔진(225)을 사용하여 관리될 수 있는 입력/출력 인터페이스 포트를 포함할 수 있다.
도 3은 도 1의 가상 머신(VM)과 오직 하나의 물리적 기능만을 노출하는 스토리지 장치(120) 간의 통신 경로를 보여준다. 도 3에서는 3개의 가상 머신들(305-1, 305-2, 305-3)이 도시되어 있으며, 이들은 도 1의 호스트 장치(105) 상에서 예시될 수 있다. 한편, 도 3은 3개의 가상 머신(305-1, 305-2, 305-3)을 도시하지만, 본 발명의 실시 예는 임의의 수의 가상 머신(VM)들을 지원할 수 있는 도 1의 호스트 장치(105)를 포함할 수 있다.
가상 머신들(305-1, 305-2, 305-3)은 하이퍼바이저(310)와 통신할 수 있다. 하이퍼바이저(310)는 가상 머신들(305-1, 305-2, 305-3)을 생성, 관리 및 실행할 수 있다. 하이퍼바이저(310)는 일반적으로 도 1의 호스트 장치(105)의 프로세서(110) 상에서 실행되는 소프트웨어로서 구현된다.
하드웨어 장치, 특히 단일 루트 입출력 가상화(SR-IOV)를 구현하는 하드웨어와의 상호 작용을 달성하기 위해, 이러한 하드웨어 장치는 다양한 물리적 기능을 수행할 수 있다. 예를 들어, 도 3은 하나의 물리 기능(320, 이하, PF)을 수행하는 FPGA(315)를 나타낸다.
가상 머신들(305-1, 305-2, 305-3)이 하드웨어 장치들과 상호 작용할 수 있게 하기 위해, 다양한 가상 기능들(VFs)이 또한 수행될 수 있다. 하드웨어와 직접 상호 작용할 필요없이 가상 머신들(305-1, 305-2, 305-3)은 가상 기능들(325-1, 325-2, 325-3)과 상호 작용할 수 있다. 가상 기능들(325-1, 325-2, 325-3)은 물리적 기능(PF, 320)의 가상화된 버전을 제공하므로 다른 운영 체제(O/S)를 사용하는 가상 머신(VM)이 기본 하드웨어 장치와 효율적으로 상호 작용할 수 있다(예를 들면, 기본 O/S 드라이버 사용). 한편, 도 3은 PF(320)에 대한 3개의 가상 기능(VF)을 도시하지만, 본 발명의 실시 예는 가상 기능(VF)당 임의의 수의 VF를 포함할 수 있고, FPGA(315)(또는, 스토리지 장치(120))가 하나보다 많은 물리 기능(PF)를 노출한다면, 물리 기능(PF)당 가변 개수의 가상 기능(VF)이 존재할 수 있다. 노출된 각 가상 기능(VF)은 기본 장치의 하드웨어 지원이 필요할 수 있다. 예를 들어, 스토리지 장치(120)에 노출된 각각의 가상 기능(VF)은 추가적인 엔드 트랩(end trap) 및 도어벨(doorbell)을 요구할 수 있으며, 이는 부가적인 하드웨어 구현을 요구한다.
상술한 바와 같이, PF(320)는 PF(320)를 구현하는 기본 하드웨어인 스토리지 장치(120)가 아닌 FPGA(315)에 의해 노출될 수 있다. FPGA(315)는 어떤 물리 기능(PF)이 스토리지 장치(120)에 의해 노출되는지를 결정하기 위해FPGA(315)를 통해 직접적으로 스토리지 장치(120)의 대응하는 PF에 맵핑될 수 있는 유사한 PF(들)을 노출시킬 수 있다.
더불어, PF(320)는 스토리지 장치(120)에 직접 노출될 수 있는 반면, VF(325-1, 325-2, 325-3)는 FPGA(315)에 의해 노출될 수 있다. 이러한 구현을 사용하여 동작하는 본 발명의 실시 예는 FPGA(315)가 스토리지 장치(120)에 의해 이미 구현된 하드웨어 PF 기능을 구현할 필요는 없지만, 스토리지 장치(120)가 제공할 수 있는 것보다 더 많은 수의 VF로 하드웨어 구현을 보완할 수 있다.
스토리지 장치(120) 또는 FPGA(315)가 PF(320)를 구현하는지 여부에 관계없이, FPGA(315)는 한편으로는 프로세서(110)(그리고 하이퍼바이저(310))와 다른 한편으로는 스토리지 장치(120) 사이에 삽입될 수 있다. 하이퍼바이저(310) (그리고 그에 따른 가상 머신들(305-1, 305-2, 305-3))와 스토리지 장치(120) 사이의 모든 통신은 FPGA(315)를 통과하여, FPGA(315)가 스토리지 장치(120)에 의해 제공되는 기능을 향상할 수 있게 한다(또는, 스토리지 장치(120) 자체가 SR-IOV형 구현을 제공하지 않을 때 스토리지 장치(120)에 대한 SR-IOV형 지원).
구현 측면에서, FPGA(315)는 스토리지 장치(120) 내의 하드웨어일 수 있거나(즉, 스토리지 장치(120)는 그 구조에 내부적으로 FPGA(315)를 포함할 수 있다) 또는, FPGA(315)는 스토리지 장치(120) 외부의 부가적인 하드웨어일 수 있지만, 프로세서(110)와 스토리지 장치(120) 사이의 통신 경로를 따른다. 예를 들면, FPGA(315)는 FPGA(315)로부터 스토리지 장치(120)로의 접속을 통해 PCIe 버스로부터 데이터를 수신하는 도 1의 호스트 장치(105) 내에 설치된 회로 기판으로서 구현될 수 있다. FPGA(315)의 구현 방식과는 관계없이, FPGA(315)는 하이퍼바이저(310)에 의해 전송된 정보를 캡처하고, FPGA(315)의 기능을 수행하기 위해 프로세서(110)와 스토리지 장치(120) 사이의 어딘가에 위치해야 한다.
하이퍼바이저(310)는 프로세싱을 관리하기 위해 가상 머신들(305-1, 305-2, 305-3)으로부터의 관리 요청을 트랩(Trap)할 수 있다. 예를 들어, 하이퍼바이저(310)는 PCI 설정 공간으로 전송된 정보 또는 스토리지 장치(120)의 관리 큐에 예정된 요청을 트랩하여 국부적으로 처리하거나, 요청을 FPGA(315)로 재전송(Redirect)하거나, 원래 요청과 유사한 새로운 요청을 생성할 수 있다(특정 요청에 의존하는 특정된 방식이 다르긴 하지만).
FPGA(315)는 설치 프로세스의 일부로서 현장에서 프로그램될 수 있다는 점에서 스토리지 장치(120) 내의 SR-IOV 기능을 구현하는 것보다 이점을 제공한다: 스토리지 장치(120)는 일반적으로 제조 공정 중에 프로그래밍된다. 예를 들어, FPGA(315)는 스토리지 장치에 대해 100개의 가상 기능(VF)을 지원할 수 있지만, 설치시에 고객은 단지 50개의 가상 기능(VF)만을 노출하기를 원할 수 있다(도 1의 호스트 장치(105)는 많은 가상 머신(VM)을 지원할 수 없을 수도 있다). 그런 다음 FPGA(315)는 종래의 기술을 사용하여 50 개의 가상 기능(VF)만을 노출시키도록 프로그램될 수 있고, 나머지 게이트는 사용되지 않고 (따라서, 전력을 소비하지 않음) 남겨둔다. 예를 들어, FPGA(315)는 NVMe 명령어를 사용하는 인터페이스를 제공하는 셸(Shell)로 제조시에 프로그램될 수 있다. 고객은 FPGA(315)를 도 1의 호스트 장치(105)에 설치한 후, 이들 NVMe 명령어들을 사용하여 원하는 대로 FPGA(315)를 사용자 정의할 수 있다.
FPGA(315)는 또한 어떤 파라미터가 지원될 수 있는지의 관점에서 원하는대로 프로그램될 수 있다. 예를 들어, 도 9를 참조하여 이하에서 논의되는 바와 같이, QoS 요구 사항에는 많은 상이한 변형이 있다. 그러나 FPGA(315)는 대역폭만 고려하고 초당 처리되는 입출력(I/O) 요청 수 또는 바이트 수와 관련된 매개 변수를 무시하도록 프로그램될 수 있다. 확장 입출력(I/O) 큐 생성 명령어의 다른 매개 변수와 관련하여 동일한 가능성이 있다.
도 4는 도 1의 가상 머신들(VM)과 복수의 물리적 기능들을 노출하는 스토리지 장치(120) 간의 통신 경로를 보여준다. 도 4는 하나의 PF(320)를 노출하는 대신에, 3개의 PF(320, 405, 410)가 노출되어 있고, 각 PF에 대해 하나의 가상 기능들(325-1, 325-2, 325-3)이 노출되어 있는 것을 제외하면 도 3과 동일하다. 도 4에서 3개의 PF(320, 405, 410)를 노출시키는 FPGA(315)를 도시하지만, 본 발명의 실시 예들은 임의의 수의 PF들의 노출을 지원할 수 있고, PF들 각각은 임의의 수의 VF들(325-1, 325-2, 325-3)을 노출할 수 있다. 다수의 PF는 여러 이유로 노출될 수 있다: 예를 들어, 스토리지 장치(120)에 의해 제공되는 스토리지의 크기가 단일 PF가 적절하게 지원하기에는 너무 클 수 있다. 각 PF에는 일반적으로 특정 하드웨어 지원이 필요하다. 따라서, 더 많은 PF가 수행될수록 일반적으로 기본 장치에 필요한 하드웨어가 증가하고 다이 사이즈 및 전력 소비가 증가하며, 단일 가상 머신(VM)에서 볼 때 성능이 저하될 수 있다. 각각의 PF는 다른 기능을 제공할 수도 있고, 또는 다수의 PF가 동일한 기능을 제공할 수도 있다(한 번에 하나의 장치가 둘 이상의 가상 머신(VM)에 대한 지원을 제공 가능).
도 3 내지 도 4에서, SR-IOV-형 지원을 제공하기 위해 본 명세서에서 설명 된 모든 기능들이 FPGA(315)에서 구현될 수 있거나, 또는 일부(또는 전부)가 스토리지 장치(120)에서 구현될 수 있다. 예를 들어, 스토리지 장치(120)는 모든 SR-IOV-형 기능을 담당하는 FPGA(315)와 함께 임의의 SR-IOV-형 기능을 위한 내장된 지원을 제공하지 않는 종래의 스토리지 장치일 수 있다. 본 발명의 다른 실시 예에서, 스토리지 장치(120)는 확장된 입출력(I/O) 큐 생성 명령어(도 5 내지 도 6을 참조하여 후술됨)에 대한 지원을 제공할 수 있고, 스토리지 장치(120)가 예상된 가상 머신(VM) 수의 가상 머신들(VM)을 지원하기에 충분한 입출력(I/O) 큐를 포함하는 경우, FPGA(315)는 단지 VF들(325-1, 325-2, 325-3)을 제공할 수 있고 가상 머신들(VM)로부터의 "입출력(I/O) 요청"을 "통과(pass-through)"장치로서 관리할 수 있다. 본 발명의 또 다른 실시 예에서, 스토리지 장치(120)는 확장된 입출력(I/O) 큐 생성 명령어에 대한 지원을 제공할 수 있지만, 가상 머신(VM)의 수가 스토리지 장치(120)의 입출력(I/O) 큐의 수를 초과할 것으로 예상되기 때문에, FPGA(315)는 내부적으로 입출력(I/O) 큐 생성을 관리할 수 있다: 스토리지 장치(120)는 확장된 입출력(I/O) 큐 생성 명령어를 지원함에도 불구하고 종래의 스토리지 장치로서 취급될 수 있다.
도 5는 도 1의 스토리지 장치(120)의 상세를 보여준다. 도 5에서, 스토리지 장치(120)는 도 1의 호스트 장치(105)와의 통신을 관리하는 호스트 인터페이스 (505)를 포함할 수 있다. 또한, 스토리지 장치(120)는 도 1의 VM(305-1, 305-2, 305-3)에 의해 액세스되는 실제 데이터를 저장하는 스토리지(510)를 포함할 수 있다. 스토리지(510)는 임의의 원하는 형태를 취할 수 있다: 예를 들어, 스토리지 장치(120)가 솔리드 스테이트 드라이브(SSD)라면, 스토리지(510)는 플래시 메모리의 형태를 취할 수 있는 반면, 스토리지 장치(120)가 하드 디스크 드라이브이면 스토리지(510)는 디스크 형태를 취할 수 있다. 스토리지 장치(120)는 또한 각각의 도어벨이 내부 메모리의 다른 페이지에 위치되도록 스토리지 장치(120)의 내부 메모리에 걸쳐 도어벨을 분배할 수 있는 도어벨 분배 로직(515)을 포함할 수 있다(여기서, 페이지의 크기는 도 1의 메모리(130)의 페이지 크기로부터 결정될 수 있다). 서로 다른 페이지에 도어벨을 배치하면 서로 다른 가상 머신(VM)이 서로 다른 페이지에 액세스하여 도어벨에 액세스하므로 여러 가상 머신(VM)이 도어벨에 접근할 때 동일한 메모리 페이지에 액세스해야 할 가능성을 피할 수 있다(이는 가상 머신(VM) 분리의 목적에 어긋난다). 그리고, 도 5는 스토리지 장치(120)의 일부로서 도어벨 분배 로직(515)을 도시하지만, 본 발명의 실시 예는 도 3의 FPGA(315)에 도어벨 분배 로직(515)을 배치할 수도 있다. 도어벨의 분배는 후술하는 도 8을 참조하여 상세히 설명될 것이다.
도 5는 플래시 변환 계층(Flash Translation Layer: FTL) 및 SSD의 읽기/쓰기 회로 또는 하드 디스크 드라이브의 읽기/쓰기 헤드와 같은 스토리지 장치(120)에 포함될 수 있는 다른 종래의 하드웨어 그리고/또는 회로를 도시하지 않는다. 도 5는 캐시와 같은 스토리지 장치(120)에 포함될 수 있는 추가적인 선택적인 구성 요소도 도시하지 않는다. 본 발명의 실시 예는 이러한 모든 종래의 구성 요소를 포함하도록 확장된다.
스토리지 장치(120)는 도 1의 호스트 장치(105)와 통신하기 위해 임의의 원하는 인터페이스를 사용할 수 있다. 예를 들어, 스토리지 장치(120)는 NVMe 인터페이스를 사용할 수 있거나, 또는 스토리지 장치(120)는 SATA(Serial AT Attachment) 인터페이스를 사용할 수 있다. 유사하게, 스토리지 장치(120)는 호스트 장치(105)에 연결되기 위해, 예를 들어, PCI 또는 PCIe(4, 8 또는 임의의 다른 수의 PCI 레인을 사용함), M.2 및 SATA를 포함하는 임의의 원하는 연결 메커니즘을 사용할 수 있다. 본 발명의 실시 예는 접속 및 인터페이스에 대한 모든 변형을 포함하도록 의도된다.
스토리지 장치(120)는 또한 요청 제출 및 응답 반환을 위해 사용될 수 있는 입출력(I/O) 큐(입출력(I/O) 큐쌍으로도 칭함)를 포함할 수 있다: 제출 큐는 도 3의 VM(305-1)에 의해 입출력(I/O) 요청(예를 들어, 읽기 또는 쓰기 요청)을 제출하고, 완료 큐는 스토리지 장치(120)에 의해 사용되어 도 3의 VM(305-1)에 결과를 반환할 수 있다. 도 5에서, 스토리지 장치(120)는 제출 큐들(525-1, 525-2, 525-3) 및 완료 큐들(530-1, 530-2, 530-3)을 갖는 3 개의 입출력(I/O) 큐들(520-1, 520-2, 520-3)을 포함한다. 한편, 도 5는 각 제출 큐들(520-1, 520-2, 520-3)이 대응하는 완료 큐(525-1, 525-2, 525-3)를 갖는 것을 제안하지만, 본 발명의 실시 예는 다수의 제출 큐로부터의 결과들을 포함하는 단일 완료 큐를 지원할 수 있다.
스토리지 장치(120)는 스토리지 장치(120)에 의해 제공될 수 있는 입출력(I/O) 큐 생성 명령어(535)를 지원하는 회로를 포함할 수 있다. 입출력(I/O) 큐 생성 명령어(535)를 사용하여, 도 3의 FPGA(315) 또는 하이퍼바이저(310)는 사용을 위해 입출력(I/O) 큐를 설정하도록 요청할 수 있다. 그러나 NVMe 인터페이스를 지원하는 것과 같은 종래의 스토리지 장치는 표준화된 형태의 입출력(I/O) 큐 생성 명령어(535)를 제공할 수 있지만, 도시된 바와 같이 입출력(I/O) 큐 생성 명령어(535)는 확장된 입출력(I/O) 큐 생성 명령어를 나타내며, 기존 입출력(I/O) 큐 생성 명령어에 의해 제공되거나 지원되지 않는다.
도 6은 도 1의 스토리지 장치(120)를 위한 도 5의 확장된 입출력(I/O) 큐 생성 명령어(535)를 보여준다. 도 6에서, 입출력(I/O) 큐 생성 명령어(535)가 도시되어 있다. 입출력(I/O) 큐 생성 명령어(535)는 큐 사이즈(603, 큐가 설정되는 동안 얼마나 많은 공간이 할당되어야 하는지), 큐 식별자(606), 완료 큐 식별자 식별자(609, 완료 큐에 대한 식별자), 큐 우선순위(612, 제출 큐의 상대 우선순위가 설정됨), 그리고 물리적으로 인접한 플래그(615, 완료 큐는 물리적으로 연속적이거나 그렇지 않아야 함)와 같은 기존 NVMe 사양에서 정의된 입출력(I/O) 큐 생성 명령어의 일부인 매개 변수 포함할 수 있다. 그러나 추가적으로, 입출력(I/O) 큐 생성 명령어(535)는 다른 속성들을 포함할 수 있다. 이들 속성은 논리 블록 어드레스(LBA) 범위 속성(618), 서비스 품질(QoS) 속성(621), 그리고 공유 네임스페이스 속성(624)을 포함한다. LBA 범위 속성(618)은 VM(305-1)과 관련된 LBA들의 범위를 지정할 수 있다. LBA 범위 속성(618)을 사용하여, 도 3의 FPGA(315) 또는 도 1의 스토리지 장치(120)는 해당 VM에서 사용하며 다른 VM에서는 사용되지 않도록 하기 위해 일부 물리 블록 어드레스(PBA)를 도 1의 스토리지 장치(120) 상에 할당할 수 있다(이 규칙에 대한 예외는 아래에서 설명될 것이다). LBA의 범위와 대응하는 PBA의 범위를 분리함으로써 가상 머신(VM) 분리가 제공될 수 있다.
도 7은 도 1의 스토리지 장치(120)의 물리적 스토리지가 어떻게 복수의 네임 스페이스로 분배되는지의 예를 보여준다. 도 7을 참조하면, 1 TB의 도 5의 스토리지(510)가 도시되어 있지만, 본 발명의 실시 예는 임의의 전체 용량을 갖는 스토리지 장치를 지원할 수 있다. 이 1 TB의 도 5의 스토리지(510)는 세 개의 네임 스페이스들(705-1, 705-2, 705-3)로 분할되어 도시되어 있지만, 본 발명의 실시 예들은 도 5의 스토리지(510)를 임의의 수의 네임 스페이스들로 분할될 수 있다.
각 네임 스페이스에는 관련된 LBA 범위가 있다. 따라서, 네임 스페이스(705-1)는 LBA 범위(710-1)를 포함하고, 네임 스페이스(705-2)는 LBA 범위(710-2)를 포함하고, 네임 스페이스(705-3)는 LBA 범위(710-3)를 포함한다. LBA들(710-1, 710-2, 710-3)의 각 범위에 대응하여, PBA들(715-1, 715-2, 715-3)의 범위는 도 5의 스토리지(510)에 설정될 수 있다. PBA들(715-1, 715-2, 715-3)의 각 범위는 LBA의 대응하는 범위와 적어도 동일해야 하고, LBA의 주어진 범위 내의 모든 LBA는 대응하는 PBA를 갖는다. LBA들 및 PBA들은 반드시 일치될 필요는 없다는 것을 알아야 한다: 예를 들어, LBA들(710-2)의 범위는 0의 시작 LBA로부터 134,217,727(예를 들어, 블록 어드레스 들일 수 있는, 각 블록은 4096 바이트의 데이터를 포함한다: 이 블록 어드레스는 바이트 어드레스 549,755,813,887에 대응)의 종료 LBA를 가질 수 있는 반면, PBA(715-2)의 범위는 시작 PBA가 67,108,864(바이트 어드레스는 274,877,906,944)에서 종료 PBA가 201,326,591(바이트 어드레스는 824,633,720,831)일 수 있다.
LBA 범위를 PBA에 맵핑하고 이러한 범위 중 하나(또는 둘 모두)를 입출력(I/O) 큐와 연관시키는 한 가지 이점은, 그러한 맵핑이 블렌더(Blender) 효과를 피할 수 있다는 것이다. 블렌더 효과는 기존 스토리지 장치가 입출력(I/O) 요청을 처리하는 방법의 결과이다. 입출력(I/O) 요청이 여전히 입출력(I/O) 큐 내에 있는 동안, 입출력(I/O) 요청에는 일부 잔여 컨텍스트가 존재한다. 그러나 일단 입출력(I/O) 요청이 FTL에 도달하면, 그러한 모든 컨텍스트가 손실된다: 모든 입출력(I/O) 요청은 그 시점에서 동일하게 보인다. 그 결과로, 도 1의 스토리지 장치(120)는 특정 가상 머신(VM)에 대한 QoS 요구 사항을 보장할 수 없다. 그러나 PBA가 LBA-PBA 맵핑(그 자체가 가역적)을 통해 특정 입출력(I/O) 큐에 묶여 있다면, 그 입출력(I/O) 큐의 QoS 요구 사항은 여전히 도 1의 스토리지 장치(120)에 의해 위치되고 충족될 수 있다.
각각의 네임 스페이스들(705-1, 705-2, 705-3)에는 자체 네임 스페이스 식별자(ID)가 있음을 인식하는 것이 중요하다. 본 발명의 일부 실시 예에서, 이들 네임 스페이스 식별자(ID)는 도 6의 큐 식별자(606)로 제공된 큐 식별자에 대응할 수 있다.
다시 도 6을 참조하면, LBA 범위 속성(618)은 다수의 방식으로 표현될 수 있다. 예를 들면, LBA 범위 속성(618)은 도 7의 LBA들(710-1, 710-2, 710-3)의 범위 내의 LBA들에 대한 시작 및 종료 어드레스를 제공하는 시작 LBA(627) 및 종료 LBA(630)를 포함할 수 있다. 선택적으로, 시작 LBA(627) 및 큐 사이즈(603)가 주어지면, 종료 LBA(630)를 추론하는 것이 가능하기에 종료 LBA(630)가 생략될 수 있다. 확장된 입출력(I/O) 큐 생성 명령어(535)의 구조는 LBA 범위 속성(618) 상의 임의의 변화가 요구되는 것을 지원할 수 있고, 그리고/또는 파라미터를 적절하게 생략하는 것을 지원하도록 설정될 수 있다.
QoS 속성(621)은 임의의 원하는 QoS 규정을 나타낼 수 있다. 예를 들어, 입출력(I/O) 큐 생성 명령어(535)에 의해 확립되는 큐는 SLA(Service Level Agreement)를 갖는 가상 머신(VM)과 관련될 수 있으며, 이는 가상 머신(VM) 사용자를 위한 특정 레벨의 서비스를 보장하려고 시도한다. QoS 속성(621)은 임의의 원하는 형태를 사용하여 표현될 수 있다. 도 6에 도시된 몇몇 예시적인 형태는, 최소 보증 대역(633), 최대 보증 대역(636), 초당 최소 읽기 요청 횟수(639), 초당 최대 읽기 요청 횟수(642), 초당 최소 독출 바이트 수(645), 초당 최대 독출 바이트 수(648), 초당 최소 쓰기 요청 횟수(651), 초당 최대 쓰기 요청 횟수(654), 초당 최소 쓰기 바이트 수(657), 그리고 초당 최대 쓰기 바이트 수(660)를 포함한다. 종래의 SR-IOV 솔루션은 QoS 요구를 관리하기 위해 도 3의 하이퍼바이저(310)에 의존한다: 본 발명의 실시 예는 이 관리를 도 3의 FPGA(315)나 도 1의 스토리지 장치(120)로 옮길 수 있고, 도 3의 하이퍼바이저(310) 및 호스트 CPU의 부하를 감소시키고, 따라서 전반적인 시스템 성능이 향상된다. 확장된 입출력(I/O) 큐 생성 명령어(535)의 구조는 QoS 속성(621) 상의 원하는 변경 그리고/또는 파라미터들을 적절하게 생략하는 것을 지원하도록 설정될 수 있다.
마지막으로, 공유 네임 스페이스 속성(624)은 입출력(I/O) 큐의 생성을 요청하는 가상 머신(VM)에 대한 물리적 스토리지에 대한 접근을 공유하기 위한 네임 스페이스의 리스트를 나타낼 수 있다. 공유 네임 스페이스 속성의 개념은 가상 머신(VM) 분리 개념의 예외를 나타낸다: 가상 머신은 공통 데이터 세트에 대한 접근을 공유하는 경우 분리되지 않을 수 있다. 그러나 여러 가상 머신(VM)이 정보를 공유해야 하는 상황이 발생할 수 있으며, 공유된 네임 스페이스 속성(624)이 가상 머신들(VM) 간의 메시지 데이터보다 공통 데이터 세트에 대한 접근을 공유하는 것이 더 효율적이므로 이 해결 방법을 제공한다. 공유 네임 스페이스 속성(624)은 임의의 바람직한 방식으로 구현될 수 있다: 하나의 예로, 입출력(I/O) 큐 생성 명령어(535)가 공유 네임 스페이스 ID 어레이(663)를 포함하는 것이며, 이는 데이터 세트에 공유 접근을 갖는 가상 머신(VM)의 네임 스페이스 ID를 열거한다.
도 8은 가상 머신(VM) 분리를 지원하기 위한 도 1의 스토리지 장치(120) 내의 도어벨들의 메모리 맵핑을 보여준다. 도 1의 호스트 장치(105)와 스토리지 장치(120) 사이에서 통신하기 위해 도어벨을 사용하는 종래의 스토리지 장치에서, 다수의 도어벨이 존재할 수 있다(예를 들어, 도 5의 입출력(I/O) 큐들(520-1, 520-2, 520-3) 각각에 대해 하나씩). 가상 머신들(305-1, 305-2, 305-3)에 의해 이들 도어벨에 대한 접근을 지원하기 위해, 도 1의 스토리지 장치(120)는 호스트 장치 (105)의 어드레스 공간의 일부분이 스토리지 장치(120)에 할당되도록 요청할 수 있다. 그 다음, 도 1의 호스트 장치(105)의 어드레스 공간에 있는 어드레스들은 스토리지 장치(105)의 메모리 어드레스에 맵핑될 수 있다. 그러면 도 3의 하이퍼바이저(310)는 도어벨을 위한 어드레스를 도 3의 가상 머신(305-1, 305-2, 305-3)에 제공하여 가상(305-1, 305-2, 305-3)이 도 1의 호스트 장치(105)의 어드레스 공간에 존재하는 어드레스를 사용하여 도어벨을 접근할 수 있게 한다.
그러나 도 1의 스토리지 장치(120)의 종래의 구현에서, 도 8에 도시된 바와 같이, 이러한 도어벨들은 연속적인 메모리 섹션에 상주할 수 있다. 도 8에서, 도 1의 스토리지 장치(120) 또는 도 3의 FPGA(315) 내의 메모리를 나타내는 메모리(805)가 도시되어 있다. 도 5의 입출력(I/O) 큐(520-1, 520-2, 520-3)의 도어벨을 위한 메모리 어드레스(810-1, 810-2 및 810-3)가 메모리의 연속적인 섹션을 점유하는 것으로 도시되어 있으며, 이들은 모두 메모리(805)의 단일 페이지 내에 걸쳐 있다. 도 8은 메모리 어드레스(810-1, 810-2 및 810-3)를 점유하는 3 개의 도어벨을 도시하지만, 본 발명의 실시 예는 임의의 수의 도어벨을 포함할 수 있다. 도 1의 호스트 장치(105)는 가상화없이 단일 장치로 작동하므로, 이 배열은 정상적으로 잘 동작한다. 그러나 도 1의 호스트 장치(105)는 분리가 필요한 여러 가상 시스템을 지원하며, 모든 도어벨은 메모리(805)의 동일한 페이지에 존재하는데, 이는 가상 머신(VM)이 메모리 분리 페이지를 공유해야 가상 머신(VM) 분리 요구를 충족시킬 수 있음을 의미한다.
이러한 어려움을 극복하기 위해, 도 1의 스토리지 장치(120) 또는 도 3의 FPGA(315)는 어떤 장치가 도어벨을 제공하는지에 따라, 메모리(815)에 도시된 바와 같이 도 1의 메모리(130)의 다른 페이지들에서 도어벨 메모리 어드레스를 찾을 수 있다. 도 1의 스토리지 장치(120) 또는 도 3의 FPGA(315)가 어떻게 도어벨 메모리 어드레스를 다른 페이지에 배치하는 지는, 현재 2015년 9월 22일자로 출원된 미국특허출원 제14/862,145호에 개시되어 있으며, 이는 미국특허공보 제2016/0306580호로 공개되었으며, 본 발명의 레퍼런스에 포함된다. 도어벨 스트라이드 값을 사용함으로써, 도어벨 메모리 어드레스는 각 도어벨이 도 1의 스토리지 장치(120) 또는 도 3의 FPGA(315)의 다른 페이지에 위치하도록 시프트될 수 있다(이 문맥에서, "다른 페이지"라는 용어는 도 1의 호스트 장치(105)의 어드레스 공간에서 대응하는 도어벨 어드레스가 운영체제 메모리의 페이지 크기에 기초하여 상이한 페이지에 위치하도록 간격을 기술하기 위한 것이다). 그 다음, 도어벨들이 도 1의 스토리지 장치(120)의 다른 페이지에 위치하기 때문에, 도 1의 스토리지 장치(120) 또는 도 3의 FPGA(315)의 어드레스 공간에서 도 1의 호스트 장치(105)의 어드레스 공간에 대응하는 어드레스는, 운영 체제(O/S) 메모리의 다른 페이지에도 있다. 따라서, 예를 들어, 메모리 어드레스(810-1)는 메모리 어드레스(820-1)에 맵핑될 수 있고, 메모리 어드레스(810-2)는 메모리 어드레스(820-2)에 맵핑될 수 있고, 메모리 어드레스(810-3)는 메모리 어드레스(820-3)에 맵핑되는 식이다. 페이지들(825-1, 825-2, 825-3, 825-4)은 상이한 메모리 페이지를 나타낼 수 있기 때문에, 이 맵핑 후에 각각의 도어벨은 메모리(815)의 다른 페이지에 상주할 수 있다. 결과적으로, 가상 머신(VM)은 도어벨에 접근하기 위해 도 1의 메모리(130)의 단일 페이지에 대한 접근을 공유하지 않으며, 가상 머신(VM) 분리가 지원된다.
도 5 내지 도 7에서, 도 5의 입출력(I/O) 큐 생성 명령어(535)를 제공하고 가상 머신(VM)의 분리를 가능케하는 도 1의 스토리지 장치(120)를 중심으로 발명이 설명될 것이. 도 1의 스토리지 장치(120)는 가상 머신(VM)의 분리를 지원하기 위한 하드웨어가 포함될 수 있지만, 모든 스토리지 장치가 반드시 이러한 하드웨어를 포함하지는 않는다. 그러나 도 3의 FPGA(315)를 시스템 내에 포함함으로써, 본 발명의 실시 예는 도 1의 스토리지 장치(120)에 SR-IOV를 위한 하드웨어가 포함되어 있지 않더라도, 도 1의 스토리지 장치(120)에 대한 가상 머신(VM) 분리 및 SR-IOV-형 접근을 지원할 수 있다. 게다가, 도 3의 FPGA(315)를 포함함으로써, 도 1의 스토리지 장치(120)는 기본적으로 SR-IOV를 지원하는 경우에도 도 1의 스토리지 장치(120)의 기능을 향상시킬 수 있다.
첫째, FPGA(315)는 가상 머신(VM)의 분리를 지원하기 위해 필요한 하드웨어를 포함할 수 있다. 다시 도 3을 참조하면, 도 1의 스토리지 장치(120)에 전송될 모든 요청은 도 3의 FPGA(315)를 통과하기 때문에, 도 3의 FPGA(315)는 도 1의 스토리지 장치(120)에 의해 수신되도록 의도된 요청들을 인터셉트할 수 있다. 예를 들어, 도 1의 스토리지 장치(120)는 도 5의 확장된 입출력(I/O) 큐 생성 명령어(535)를 지원하지 않는 경우에, 도 3의 FPGA(315)는 이러한 요청을 인터셉트하고 입출력(I/O) 큐 생성 자체를 처리할 수 있다.
VM 분리 자체를 관리하고 QoS 보장을 제공하며, 적절한 경우 네임 스페이스를 공유하는 동안, 도 3의 FPGA(315)는 도 1의 스토리지 장치(120)에 종래의 입출력(I/O) 큐 생성 명령어를 전송할 수 있다. 이를 위해, 도 3의 FPGA(315)는 도 1의 스토리지 장치(120)에 포함될 수 있는 것과 유사한 하드웨어를 포함할 수 있다. 도 3의 FPGA(315)는 입출력(I/O) 큐 내의 특정 입출력(I/O) 요청이 그 입출력(I/O) 큐와 연관된 LBA 범위(710) 내에 있는지(또는 공유 네임 스페이스의 일부인지) 판단할 수 있다. 도 3의 FPGA(315)는 도 1의 스토리지 장치(120)에 전송될 입출력(I/O) 요청을 구성하고 주문함으로써, QoS 보증을 제공한다.
입출력(I/O) 큐 생성 및 가상 머신(VM)의 분리를 지원하기 위해, 도 3의 FPGA(315)는 도 9에 도시한 바와 같이 가상 입출력(I/O) 큐 생성 명령어(903)를 포함할 수 있다. 가상 입출력(I/O) 큐 생성 명령어(903)는 도 6의 입출력(I/O) 큐 생성 명령어(535)와 매우 유사하며, 유사한 파라미터 및 속성을 포함한다. 주요한 차이점은, 도 6의 입출력(I/O) 큐 생성 명령어(535)는 도 1의 스토리지 장치(120)에 의해 처리되도록 의도되는 반면(도 3의 FPGA(315)는 도 6의 입출력(I/O) 큐 생성 명령어(535)를 인터셉트하고 내부적으로 이를 처리할 수 있지만), 가상 입출력(I/O) 큐 생성 명령어(903)는 도 3의 FPGA(315)로 제공되며, 도 1의 스토리지 장치(120)에 의해 처리되도록 의도되지는 않는다.
가상 입출력(I/O) 큐 생성 명령어(903)는 입출력(I/O) 큐 생성 명령어(535)와 유사한 결과를 달성하기 위한 것이기 때문에, 가상 입출력(I/O) 큐 생성 명령어(903)는 도 9의 입출력(I/O) 큐 생성 명령어(535)와 유사한 속성/파라미터를 포함할 수 있다. 따라서, 가상 입출력(I/O) 큐 생성 명령어는 큐 사이즈(906, 설정되는 큐에 대해 얼마나 많은 공간이 할당되어야 하는지), 큐 식별자(909, 제출 큐를 설정할 식별자), 완료 큐 식별자(912, 완료 큐에 대한 식별자), 큐 우선순위(915, 제출 큐의 상대적 우선순위가 설정됨), 그리고 물리적으로 인접한 플래그(918, 제출 큐 및 완료 큐가 물리적으로 인접하거나 그렇지 않은지를 지시)와 같은 종래의 입출력(I/O) 큐 생성 명령어의 일부인 파라미터들을 포함할 수 있다. 가상 입출력(I/O) 큐 생성 명령어(903)는 또한 LBA 범위 속성(921), QoS 속성(924) 및 공유 네임 스페이스 속성(927)과 같은 확장 속성을 포함할 수 있다.
도 5의 입출력(I/O) 큐 생성 명령어(535)와 마찬가지로, LBA 범위 속성(921)은 다양한 방식으로 표현될 수 있다. 예를 들어, LBA 범위 속성(921)은 도 7의 LBA들(710-1, 710-2, 710-3)의 범위 내의 LBA들에 대한 시작 및 종료 어드레스를 제공하는 시작 LBA(930) 및 종료 LBA(933)를 포함할 수 있다. 선택적으로, 시작 LBA(930) 및 큐 사이즈(906)가 주어지면, 종료 LBA(933)를 추론하는 것이 가능하므로 종료 LBA(933)는 생략될 수 있다. 확장된 가상 입출력(I/O) 큐 생성 명령어(903)의 구조는 LBA 범위 속성(921) 상의 원하는 변경과 그리고/또는 파라미터를 적절하게 생략하는 것을 지원하도록 설정될 수 있다.
유사하게, QoS 속성(924)은 임의의 원하는 QoS 규정을 나타낼 수 있다. 예를 들어, 가상 입출력(I/O) 큐 생성 명령어(903)에 의해 확립되는 큐는 가상 머신(VM)의 사용자에 대한 특정 서비스 레벨을 보장하려고 시도하는 SLA를 갖는 VM과 연관될 수 있다. QoS 속성(924)은 임의의 원하는 형태를 사용하여 표현될 수 있다. 도 9에 도시된 몇몇 예시적인 형태는, 최소 보증 대역(936), 최대 보증 대역(939), 초당 읽기 요청의 최소 개수(942), 초당 읽기 요청의 최대 개수(945), 초당 독출되는 최소 바이트 수(948), 초당 독출되는 최대 바이트 수(951), 초당 쓰기 요청의 최소 수(954), 초당 쓰기 요청의 최대 수(957), 초당 기록된 최소 바이트 수(960), 그리고 초당 기록된 최대 바이트 수(963)를 포함한다. 확장된 가상 입출력(I/O) 큐 생성 명령어(903)의 구조는 그리고/또는 적절하게 파라미터들이 생략되는 것을 포함하는 어떠한 QoS 속성(924)에 대한 변화가 요구되더라도 지원하도록 설정될 수 있다.
마지막으로, 공유 네임 스페이스 속성(927)은 입출력(I/O) 큐의 생성을 요청하는 가상 머신(VM)에 대한 물리적 스토리지에 대한 접근을 공유하기 위한 네임 스페이스 목록을 나타낼 수 있다. 공유 네임 스페이스 특성의 개념은 가상 머신(VM) 분리 개념의 예외를 나타낸다. 가상 머신은 공통 데이터 집합에 대한 접근을 공유하는 경우 분리되지 않을 수 있다. 그러나 다수의 가상 머신들(VM)이 정보를 공유해야 하는 상황이 발생할 수 있으며, 공유된 네임 스페이스 속성(927)은 가상 머신들(VM) 간의 메시지 데이터보다 일반적인 데이터 세트에 대한 접근을 공유하는 것이 더 효율적이다. 공유 네임 스페이스 속성(927)은 임의의 원하는 방식으로 구현될 수 있다: 하나의 예로, 가상 입출력(I/O) 큐 생성 명령어(903)가 데이터 세트에 공유 접근할 가상 머신(VM)의 네임 스페이스 ID를 열거하는 공유 네임 스페이스 ID 배열(966)을 포함하는 것이다.
본 발명의 일부 실시 예에서, 도 1의 스토리지 장치(120)는 도 6의 입출력(I/O) 큐 생성 명령어(535)를 포함할 수 있고, 따라서, 가상 머신들(305-1, 305-2, 305-3)에 의해서 생성되고 할당되는 입출력(I/O) 큐를 지원할 수 있다. 본 발명의 실시 예에서, 도 3의 FPGA(315)는 가상 입출력(I/O) 큐를 생성하기 위해 가상 입출력(I/O) 큐 생성 명령어(903)를 처리하는 대신에, 단순히 가상 입출력(I/O) 큐 생성 명령어(903)를 취하여도 도 5의 입출력(I/O) 큐 생성 명령어(535)로서 도 1의 스토리지 장치(120)로 보낼 수 있다.
그러나 도 3의 FPGA(315)는 SR-IOV-형 동작들을 지원하는 하드웨어를 단지 오프로드(offload)하는 것 이상의 동작(도 3의 FPGA(315)가 SR-IOV-형 하드웨어 자체를 포함하지 않는 스토리지 장치들과 함께 사용될 수 있게 허용함)을 수행할 수 있다. 도 3의 FPGA(315)는 또한 도 1의 스토리지 장치(120)에 의해 "제공되는" 입출력(I/O) 큐의 수를 확장할 수 있다. 도 7의 호스트 장치(105) 상의 각각의 가상 머신(VM)은 도 1의 스토리지 장치(120)에 대한 자신의 접근을 요구하고, 도 1의 호스트 장치(105) 상의 각각의 가상 머신(VM)은 도 1의 스토리지 장치(120) 상의 자신의 가상 기능(VF) 및 입출력(I/O) 큐에 대한 접근을 요구한다. 그러나 도 1의 스토리지 장치(120)에 의해 지원되는 가상 기능(VF) 및 입출력(I/O) 큐의 수는 도 1의 스토리지 장치(120)에 언제든지 접근할 수 있는 가상 머신(VM)의 수에 대한 상한을 나타낼 수 있다. 이 상한은 지원하는 도 3의 가상 머신들(VMs)의 하이퍼바이저(310)의 수(그리고 도 1의 프로세서(110))보다 훨씬 적을 것이며, 이는 가상 머신(VM)들이 도 1의 스토리지 장치(120)에 액세스하지 않고 남아있게 됨을 의미하거나, 도 1의 호스트 장치(105)의 자원이 사용되지 않고 남아있게 됨을 의미한다.
도 3의 FPGA(315)는 도 1의 스토리지 장치(120)에 의해 직접 제공되는 입출력(I/O) 큐(그리고 PF/VF)의 수보다 훨씬 더 많은 수의 추가 가상 입출력(I/O) 큐를 제공함으로써 이 문제를 해결할 수 있다. 도 10은 이러한 상황을 보여준다.
도 10에서, 입출력(I/O) 큐(520-1, 520-2, 520-3)는 도 1의 스토리지 장치(120)에 의해 제공되는 입출력(I/O) 큐만을 나타내는 것으로 가정하기로 한다(실제로는 입출력(I/O) 큐의 수가 3보다 크지만, 도 1의 호스트 장치(105)가 동시에 지원할 수 있는 가상 머신(VM)의 수보다 일반적으로 더 작다). 도 1의 호스트 장치(105)가 3 개 이상의 가상 머신(VM)을 실행하고 있다면, 도 1의 스토리지 장치(120)가 입출력(I/O) 큐의 유일한 소스인 사용 가능한 입출력(I/O) 큐가 없는 경우, 하나 이상의 가상 머신(VM)이 남아있게 된다. 그러나 가상 입출력(I/O) 큐를 지원하는 FPGA(315)에서, 이러한 추가적인 가상 머신(VM)은 도 1의 스토리지 장치(120)에 접근할 수 있다.
도 3의 하이퍼바이저(310)가 FPGA(315)에 의해 제공되는 가상 입출력(I/O) 큐 생성 명령어(903)를 발행하면, FPGA(315)는 새로운 가상 입출력(I/O) 큐를 설정할 수 있다. 도 10은 5개의 가상 입출력(I/O) 큐들(1005-1, 1005-2, 1005-3, 1005-4, 1005-5)를 도시하지만, FPGA(315)는 임의의 수의 가상 입출력(I/O) 큐를 지원할 수 있다(FPGA) (315)의 게이트 수에 의해 제한). 각 가상 입출력(I/O) 큐에는 자체 제출 및 완료 큐가 포함되어 있다. 따라서, 가상 입출력(I/O) 큐(1005-1, 1005-2, 1005-3, 1005-4, 1005-5)는 각각 완료 큐(1015-1, 1015-2, 1015-3, 1015-4, 1015-5)와 함께 제출 큐(1010-1, 1010-2, 1010-3, 1010-4, 1010-5)를 포함한다.
각각의 가상 입출력(I/O) 큐는 도 1의 스토리지 장치(120)의 (하드웨어) 입출력(I/O) 큐와 연관될 수 있다. FPGA(315)는 가상 입출력(I/O) 큐(1005-1 내지 1005-5)를 그룹으로 조직화하고 이들을 (하드웨어) 입출력(I/O) 큐(520-1, 520-2, 520-3)에 맵핑하기 위한 임의의 원하는 접근법을 사용할 수 있는 맵핑 로직(1020)을 사용할 수 있다. 예를 들어, 도 10에서 맵핑 로직(1020)은 가상 입출력(I/O) 큐(1005-1, 1005-2)를 선택하여 입출력(I/O) 큐(520-1)와 연관된 그룹(1205-1)을 구성하고, 가상 입출력(I/O) 큐(1005-3)를 선택하여 입출력(I/O) 큐(520-2)와 연관된 그룹(1025-2)을 구성하고, 가상 입출력(I/O) 큐(1005-4 및 1005-5)를 선택하여 입출력(I/O) 큐(520-2)와 연관된 그룹(1205-3)을 구성한다. 따라서, FPGA(315)가 수신하는 도 3의 가상 머신들(305-1, 305-2, 305-3)로부터의 임의의 입출력(I/O) 요청들은 적절한 가상 제출 큐에 "배치"될 수 있으며, 이후 도 1의 스토리지 장치(120)의 정확한 (하드웨어) 제출 큐로 전달될 수 있다. 유사하게, (하드웨어) 완료 큐로부터 수신된 응답은 정확한 가상 완료 큐에 "배치"되어 적절한 가상 머신(VM)에 "반환"될 수 있다.
맵핑 로직(1020)은 가상 입출력(I/O) 큐(1005-1 내지 1005-5)를 각각 특정 (하드웨어) 입출력(I/O) 큐와 연관된 그룹으로 구성하기 위한 임의의 원하는 접근법을 사용할 수 있다. 예를 들어, 맵핑 로직(1020)은 가상 입출력(I/O) 큐를 그룹에 무작위로 할당할 수 있다. 또는, 맵핑 로직(1020)은 가상 입출력(I/O) 큐들을 라운드-로빈 방식으로 그룹단위로 할당할 수 있다: 제 1 가상 입출력(I/O) 큐는 제 1 그룹에 할당되고, 제 2 가상 입출력(I/O) 큐는 제 2 그룹에 할당되는 방식으로 모든 그룹에 하나의 가상 입출력(I/O) 큐를 가질 때까지 할당하고, 이후 가상 입출력(I/O) 큐가 첫 번째 그룹에서 다시 할당될 수 있다. 또는, 맵핑 로직 (1020)은 그룹 전체의 입출력(I/O) 부하 밸런싱을 시도하기 위해 도 3의 가상 머신(305-1, 305-2, 305-3)의 예상된 입출력(I/O) 부하에 기초하여 그룹에 가상 입출력(I/O) 큐를 할당할 수 있다. 또는, 맵핑 로직(1020)은 도 3의 VM(305-1, 305-2, 305-3)에 대해 특정된 상대적 우선순위에 기초하여 그룹에 가상 입출력(I/O) 큐를 할당할 수 있다(도 6의 큐 우선순위(612)는 종래의 NVMe 사양에서 정의된 입출력(I/O) 큐 생성 명령어의 일부이고, 도 9의 큐 우선순위(915)는 도 9의 가상 입출력(I/O) 큐 생성 명령어(903)의 일부이다). 또는, 맵핑 로직(1020)은 VM (305-1, 305-2, 305-3)의 QoS 요구 사항을 만족시키기 위한 시도로 도 9의 QoS 속성(924)에 기초하여 그룹들에 가상 입출력(I/O) 큐를 할당할 수 있다. 본 발명의 실시 예는 어떤 가상 입출력(I/O) 큐를 어느 그룹에 할당할지를 결정할 때 다른 방법론을 사용할 수도 있다.
FPGA(315)는 어떤 LBA가 각각의 가상 입출력(I/O) 큐와 관련되는지를 알기 때문에(도 9의 LBA 범위 속성(921) 그리고/또는 도 9의 공유 네임 스페이스 속성(927)을 통해), FPGA(315)는 해당 가상 입출력(I/O) 큐에 적합하지 않은 입출력(I/O) 요청을 거절함으로써 가상 머신(VM) 분리를 수행할 수 있다. 유사하게, FPGA(315)는 가상 머신(VM)의 QoS 요구 사항을 알고 있기 때문에(도 9의 QoS 속성(924)을 통해), FPGA(315)는 각 가상 머신(VM)의 QoS 요구 사항을 충족시키는 방식으로 입출력(I/O) 요청을 입출력(I/O) 큐(520-1, 520-2, 520-3)에 전달한다. 예를 들어, 가상 머신(VM)이 초당 최소 10 개의 입출력(I/O) 요청의 QoS 요구 사항을 설정한 경우(입출력(I/O) 요청이 대기 중일 수 있다고 가정할 때), FPGA(315)는 다른 가상 입출력(I/O) 큐에서 입출력(I/O) 요청을 전달하기 전에 해당 가상 입출력(I/O) 큐로부터 입출력 요청에 우선순위를 지정할 수 있다. 다른 가상 입출력(I/O) 큐에서 입출력(I/O) 요청을 전달하기 전에 큐에 저장됩니다. (이 예제는 다른 가상 머신(VM)에 QoS 요구 사항이 없다는 것을 의미하므로 임의적이다: 즉, 여러 가상 머신(VM)에 QoS 요구 사항이 있는 경우 FPGA(315)는 모든 VM QoS 요구 사항을 충족시키는 방식으로 입출력(I/O) 요청을 관리할 수 있다). 대역폭 요구 사항과 같은 다른 QoS 요구 사항은 FPGA(315)를 통해 유사하게 관리될 수 있다.
도 11은 본 발명의 실시 예에 따른, 도 3의 VM(305)에서 도 5의 입출력(I/O) 큐(520)를 할당하는 도 1의 스토리지 장치(120)에 대한 예시적인 절차의 순서도를 보여준다. 도 11을 참조하면, 블록(1105)에서, 도 1의 스토리지 장치(120)는 도 3의 하이퍼바이저(310)로부터 도 5의 입출력(I/O) 큐 생성 명령어(535)를 수신할 수 있다. 선택적으로, 블록(1110)에서, 도 1의 스토리지 장치(120) 는 도 3의 FPGA(315)로부터 도 5의 입출력(I/O) 큐 생성 명령어(535)를 수신할 수 있다. 어느 경우에나, 도 5의 입출력(I/O) 큐 생성 명령어(535)는 도 7의 LBA (710)의 범위를 포함할 수 있다. 블록(1115)에서, 도 5의 입출력(I/O) 큐 생성 명령어(535)의 소스에 관계없이, 도 1의 스토리지 장치(120)는 도 5의 입출력(I/O) 큐(520)를 확립할 수 있다. 블록(1120)에서, 도 1의 스토리지 장치(120)는 도 7의 LBA (710)의 범위를 지원하기에 충분히 큰 도 7의 PBA (715)의 범위를 선택할 수 있다. 블록(1125)에서, 도 1의 스토리지 장치(120)는 도 7의 LBA (710)의 범위를 도 7의 PBA 범위(715)로 맵핑할 수 있다. 이러한 방식으로, 도 1의 스토리지 장치(120)는 접근될 도 3의 VM (305)에 대응하는 도 7의 PBA (715)의 범위만 수신하여, 가상 머신들(VM)을 상호 분리시킨다.
유사한 방식으로, 도 7의 LBA들(710)의 범위와 도 7의 PBA(715)범위는 가역적이기 때문에, 특정 물리 어드레스가 주어지면, 입출력(I/O) 요청에 대한 적절한 컨텍스트가 결정되어, 도 11의 블록(1130)에서 제시된 바와 같이, 입출력(I/O) 요청이 완료되었음을 도 3의 VM (305)에 통지하도록 적절한 완료 큐가 인에이블될 수 있다(입출력(I/O) 요청의 성공은 도 3의 VM (305)으로 리턴될 수 있다).
블록들(1105 및 1110)은 도 5의 입출력(I/O) 큐 생성 명령어(535)의 소스에 관계없이, 도 5의 확장된 입출력(I/O) 큐 생성 명령어(535)를 사용하는 것을 제안하고 있다. 본 발명의 실시 예가 이러한 가능성을 포함하지만, 본 발명의 다른 실시 예는 도 5의 확장된 입출력(I/O) 큐 생성 명령어(535)를 지원하지 않는 도 1의 스토리지 장치(120)를 포함할 수 있다. 본 발명의 이러한 실시 예들에서, 도 3의 FPGA(315)는 도 1의 스토리지 장치(120)에 대한 SR-IOV를 시뮬레이팅하는 모든 기능을 지원할 수 있고, 도 1의 스토리지 장치(120)는 입출력(I/O) 요청에 대한 컨텍스트없이 입출력(I/O) 요청을 처리한다. 달리 말하면, 도 3의 FPGA(315)는 도 1의 스토리지 장치(120)가 본 발명의 기능성을 구현하지 않고 종래의 스토리지 장치로서만 동작하도록 두고, 컨텍스트 관리와 가상 머신(VM) 분리 모두를 지원할 수 있다.
도 12는 본 발명의 실시 예에 따라, 도 3의 FPGA(315)가 도 3의 가상 머신(305)에 가상 입출력(I/O) 큐(1005)를 할당하기 위한 예시적인 절차를 보여주는 순서도이다. 도 12의 블록(1205)에서, 도 3의 FPGA(315)는 도 3의 하이퍼바이저(310)로부터 도 10의 가상 입출력(I/O) 큐 생성 명령어(903)를 수신할 수 있다. 블록(1210)에서, 도 3의 FPGA(315)는 도 3의 도 3의 가상 머신(305)을 위한 도 10의 가상 입출력(I/O) 큐 생성 명령어(903)를 생성한다. 블록(1215)에서, 도 3의 FPGA(315)는 도 1의 스토리지 장치(120)에 도 5의 입출력(I/O) 큐 생성 명령어(535)를 전송할 수 있다. 도 1의 스토리지 장치(120)에 전송된 도 5의 입출력(I/O) 큐 생성 명령어(535)는 1의 스토리지 장치(120)가 지원하거나 그렇지 않은 경우 종래의 입출력(I/O) 큐 생성 명령어를 지원하는 확장 버전의 명령어일 수 있다. 블록(1220)에서, 도 3의 FPGA(315)는 도 1의 스토리지 장치(120)로부터 도 5의 입출력(I/O) 큐 생성 명령어(535)의 결과를 수신할 수 있다.
블록(1225)에서, 도 10의 맵핑 로직(1020)은 도 10의 가상 입출력(I/O) 큐(1005)를 도 1의 스토리지 장치(120)에 의해 설정된 도 5의 입출력(I/O) 큐(520)에 맵핑한다. 블록(1230)에서, 도 3의 FPGA(315)는 도 7의 LBA (710)의 범위를 도 10의 가상 입출력(I/O) 큐(1005)와 연관 짓는다. 마지막으로, 블록(1235)에서, 도 3의 FPGA(315)는 도 3의 하이퍼바이저(310)에 성공 지시자를 되돌려준다.
위의 도 12에서의 몇 가지 노트는 순서대로 기술되었다. 먼저, 도 11의 블록들(1105 및 1110)에서, 도 1의 스토리지 장치(120)는 도 5의 확장된 입출력(I/O) 큐 생성 명령어(535)를 수신하지 않을 수 있지만(도 3의 FPGA(315)가 본 발명의 모든 기능을 구현하고, 도 1의 스토리지 장치(120)가 종래의 스토리지 장치인 실시 예에서), 도 3의 FPGA(315)는 동일하지 않다. 도 3의 하이퍼바이저(310)로부터 도 1의 스토리지 장치(120)로 전송되는 임의의 명령어나, 도 3의 VM(305)으로부터 도 1의 스토리지 장치(120)로 전송된 임의의 입출력(I/O) 요청은 도 3의 FPGA (315)를 통과한다. 이러한 명령어는 (실제 또는 가상의) 입출력(I/O) 큐 생성 명령어를 포함하기 때문에, 도 3의 FPGA(315)는 확장된 입출력(I/O) 큐 생성 명령어를 수신할 것으로 예상될 수 있다. 도 1의 스토리지 장치(120)는 도 5의 입출력(I/O) 큐 생성 명령어(535)를 구현할 수 있고, 이후 도 3의 FPGA(315)는 도 3의 가상 입출력(I/O) 큐 생성 명령어(903)를 반드시 수신할 필요는 없다(본 발명의 실시 예는, 비록 도 3의 FPGA(315)에 도 10의 가상 입출력(I/O) 큐 생성 명령어(903)를 전송하는 도 3의 하이퍼바이저(310)를 포함하지만, 도 3의 FPGA(315)가 큐-대-가상 머신(VM)의 할당과 컨텍스트 관리를 수행하고, 이후, 도 3의 FPGA(315)는 도 9의 가상 입출력(I/O) 큐 생성 명령어(903)을 수신하기 위해 대기할 것이다.
둘째, 블록(1215 및 1220)에서 도 5의 입출력(I/O) 큐(520)는 스토리지 장치(120) 상에 아직 구성되지 않은 것으로 가정하자. 만일, 도 5의 입출력(I/O) 큐(520)가 도 1의 스토리지 장치(120)에서 이미 구성된 경우(예를 들어, 도 3의 FPGA(315)는 도 10의 다수의 가상 입출력(I/O) 큐(1005)를 도 5의 스토리지 장치(120)상의 도 5의 개별 입출력(I/O) 큐(520)로 맵핑하는 경우), 그러면 블록(1215 및 1220)은 점선(1240)으로 도시된 바와 같이 생략될 수 있다.
셋째, 도 3의 FPGA(315)는 도 10의 가상 입출력(I/O) 큐(1005)에 대한 컨텍스트 정보를 저장할 필요가 없을 수도 있다. 예를 들어, 도 1의 스토리지 장치(120)는 도 7의 LBA(710)의 범위를 도 7의 PBA(715) 범위에 맵핑하고, 도 5의 입출력(I/O) 큐(520)를 위해 도 3의 VM (305)에 대한 컨텍스트 정보를 저장하며, 이후, 점선 (1245)으로 도시된 바와 같이 블록(1230)이 생략될 수 있다.
도 13은 본 발명의 실시 예에 따른, 도 3의 하이퍼바이저(310)에서 도 3의 VM (305-1, 305-2, 305-3)으로부터의 관리 요구를 처리하기 위한 처리하기 위한 절차를 예시적으로 보여주는 순서도이다. 도 13에서, 블록(1305)에서, 도 3의 하이퍼바이저(310)는 도 3의 VM(305)으로부터 관리 요청을 수신할 수 있다. 블록(1310)에서, 도 3의 하이퍼바이저(310) 는 관리 요청을 트랩할 수 있다. 그 다음, 블록(1315)에서, 도 3의 하이퍼바이저(310)는 도 3의 FPGA(315)는 다른 (유사하다면) 요청을 전송할 수 있다: 이 두 번째 요청은 원래 요청을 시뮬레이션할 수 있다. 블록(1320)에서, 도 3의 하이퍼바이저(310)는 도 3의 FPGA(315)로부터 결과를 수신할 수 있다. 도 3의 FPGA(315)는 제 2 요청을 내부적으로 처리했을 수도 있고, 또는 도 1의 스토리지 장치(120)에 자신의 요청을 전송했을 수 있다: 도3의 하이퍼바이저(310)는 도 3의 FPGA(315)가 어떻게 제 2 요청을 처리하는지는 관심이 없다. 마지막으로, 블록(1325)에서, 도 3의 하이퍼바이저(310)는 결과를 도 3의 VM(305)에 리턴할 수 있다.
도 14는 본 발명의 실시 예에 따라 도 1의 스토리지 장치(120) 또는 도 3의 FPGA(315)가 가상 장치(VM)의 분리를 위해 도 8의 도어벨의 메모리 어드레스(810)를 도 8의 다른 운영 체제 페이지들(825)에 맵핑하는 예시적인 절차의 순서도를 보여준다. 예시적인 절차는 예시적인 절차가 도 1의 스토리지 장치(120) 또는 도 3의 FPGA(315)에 의해 구현되는지 여부에 관계없이 동일하다. 설명의 목적으로, 도 3의 FPGA(315)는 예시적인 절차를 수행하는 것으로서 설명될 것이지만, 본 발명의 실시 예는 도 1의 스토리지 장치(120)에도 확장될 수 있으며, 예시적인 절차들도 수행한다.
도 14에서, 블록(1405)에서, 도 3의 FPGA(315)는 도 3의 FPGA(315)와 도 3의 VM(305)과의 통신을 관리하는데 사용되는 도어벨을 식별할 수 있다. 블록(1410)에서, 도 3의 FPGA(315)는 도 8의 메모리 어드레스(820)를 도 1의 호스트 장치(105) 내에 있는 도 1의 메모리(130)의 페이지 사이즈에 기초하여 상이한 메모리 어드레스에 걸쳐서 분배한다. 예를 들면, 도 3의 FPGA(315)는 도 8의 도어벨 메모리 어드레스(820)를 배치하기 위해 도어벨 스트라이드 값을 사용할 수 있다. 블록(1415)에서, 도 3의 FPGA(315)는 도 1의 호스트 장치(105)에 어드레스 공간을 요청할 수 있다. 블록(1420)에서, 도 3의 FPGA(315)는 도 8의 메모리 어드레스(820)를 요청된 어드레스 공간의 메모리 어드레스에 할당한다. 이러한 방식으로, 2 개의 VM(305)이 공통 메모리 페이지 상에서 그들의 도어벨에 접근할 수 없기 때문에, 가상 머신(VM) 분리가 유지될 수 있다. 블록(1425)에서, 도 3의 FPGA(315)는 도 8의 새로운 메모리 어드레스 (820)를 도 3의 가상 머신(305)에 제공한다.
블록(1430)에서, 도 3의 FPGA(315)는 맵핑된 메모리 어드레스에서 도어벨에 접근하기 위해 도 3의 VM (305)으로부터의 요청을 수신한다. 블록(1435)에서, 도 3의 FPGA(315)는 도 8의 오리지널 메모리 어드레스(820)를 복원함으로써 맵핑을 역전시킬 수 있다. 블록(1440)에서, 도 3의 FPGA(315)는 도 8의 오리지널 메모리 어드레스(820)에 요청을 전송할 수 있다.
도 11 내지 도 14에서, 본 발명의 일부 실시 예가 설명되었다. 그러나 본 발명의 기술에 익숙한 사람은 블록의 순서를 변경하거나, 블록을 생략하거나, 또는 도면에 도시되지 않은 링크를 포함함으로써 본 발명의 다른 실시 예도 가능하다는 것을 인식할 것이다. 순서도의 이러한 모든 변형은 명시적으로 기술되었든 아니든 간에 본 발명의 실시 예인 것으로 간주된다.
본 발명의 실시 예는 종래 기술에 비해 몇 가지 기술적 이점을 제공한다. 첫째, 가상 머신(VM) 분리를 지원하기 위해 도 1의 스토리지 장치(120)에서 하드웨어의 요구를 제거하고, 도 3의 FPGA(315)를 사용함으로써, 도 3의 FPGA(315)는 가상 머신 분리를 강제하기 때문에 도 3의 FPGA(315)는 SR-IOV-형 기능을 필요로 하는 시스템에서 이론적으로 사용될 수 있다. 둘째, 도 3의 FPGA(315)는 설치시에 프로그램될 수 있기에 시스템에 의해 제공될 특정의 원하는 기능은 스토리지 장치(120)의 제조 시점에서 고정되기보다는 설치시에 확립될 수 있다(이것은 모든 설치에 대해 최적의 솔루션을 제공하지 못할 수도 있다). 셋째, 도 3의 FPGA(315)는 도 1의 스토리지 장치(120)가 제공하는 것보다 많은 가상 기능(VF)을 제공할 수 있으며, 많은 수의 가상 머신들을 갖는 시스템에서 도 1의 스토리지 장치(120)의 사용을 가능하게 한다. 넷 째, 가상 머신(VM)의 분리가 도 3의 FPGA(315)에 의해 제공되지만, 각각의 가상 머신(VM)은 입출력 요청을 위해 여전히 도 1의 스토리지 장치(120)에 대한 "베어 메탈(bare-metal)" 접근을 가질 수 있다. 다섯째, 도어벨 메모리 어드레스를 다른 운영체제(O/S) 메모리 페이지로 다시 맵핑하여 가상 머신(VM) 분리를 향상시킬 수 있다. 그리고 여섯째 입출력(I/O) 요청에 대한 컨텍스트가 그 입출력(I/O) 큐로부터 제거된 후에도 특정 입출력(I/O) 큐에 추적될 수 있기 때문에, 도 1의 스토리지 장치(120)는 여전히 가상 머신(VM)의 QoS 요구 사항을 지원할 수 있어, 블렌더 효과를 피할 수 있다.
다음의 설명은 본 발명의 특정 양상이 구현될 수 있는 적합한 기계 또는 장치에 대한 간략하고 일반적인 설명을 제공하기 위한 것이다. 머신은 키보드, 마우스 등과 같은 종래의 입력 디바이스뿐만 아니라 다른 머신으로부터 수신된 지시들, 가상 현실(VR) 환경과의 상호 작용, 생체 인식(biometric) 피드백 또는 다른 입력 신호들에 의해 적어도 부분적으로 제어될 수 있다. 본 명세서에 사용된 바와 같이, "기계"라는 용어는 단일 기계, 가상 기계, 또는 함께 동작하는 통신 적으로 연결된 기계, 가상 기계 또는 장치의 시스템을 광범위하게 포함하는 것으로 의도된다. 예시적인 머신은 퍼스널 컴퓨터, 워크스테이션, 서버, 휴대용 컴퓨터, 핸드 헬드 장치, 전화, 태블릿 등과 같은 컴퓨팅 디바이스뿐만 아니라 자동차, 기차, 택시 등과 같은 사설 또는 대중 교통과 같은 운송 디바이스를 포함한다.
머신은 프로그램 가능 또는 프로그래밍 불가능 로직 디바이스 또는 어레이, ASIC(Application Specific Integrated Circuit), 임베디드 컴퓨터, 스마트 카드 등과 같은 내장형 컨트롤러를 포함할 수 있다. 기계 또는 머신은 네트워크 인터페이스, 모뎀 또는 다른 통신 커플링과 같은 하나 이상의 원격 기계에 대한 하나 이상의 연결을 활용할 수 있다. 기계는 인트라넷, 인터넷, 로컬 영역 네트워크, 광역 네트워크 등과 같은 물리적 그리고/또는 논리적 네트워크에 의해 상호 연결될 수 있다. 당업자는 네트워크 통신이 다양한 유선 그리고/또는 무선 주파수(RF), 위성, 마이크로 웨이브, IEEE (Institute of Electrical and Electronics Engineers) 802.11, Bluetooth®, 광학, 적외선, 케이블, 레이저 등을 포함하는 무선 근거리 통신망이나 장거리 통신 사업자 및 프로토콜을 사용하는 네트워크 통신을 잘 인식할 것이다.
본 발명의 실시 예는 머신에 의해 액세스될 때 머신이 태스크를 수행하거나 추상적인 데이터 타입을 정의하거나 로우 레벨 하드웨어 컨텍스트를 정의하는 기능, 절차, 데이터 구조, 애플리케이션 프로그램 등을 포함하는 관련 데이터를 참조하거나 또는 관련하여 기술될 수 있다. 관련 데이터는, 예를 들어, RAM, ROM 등과 같은 휘발성 그리고/또는 비휘발성 메모리, 또는 하드 드라이브, 플로피 디스크, 광학 스토리지, 테이프, 플래시 메모리, 메모리 스틱, 디지털 비디오 디스크, 생물학적 스토리지 장치 등에 연관된 저장 매체에 저장될 수 있다. 연관된 데이터는 물리적 그리고/또는 논리적 네트워크를 포함하는 전송 환경을 통해 패킷, 직렬 데이터, 병렬 데이터의 형태로 전달될 수 있고, 압축 또는 암호화된 포맷으로 사용될 수 있다. 연관된 데이터는 분산 환경에서 사용될 수 있으며 기계 접근을 위해 로컬 그리고/또는 원격으로 저장될 수 있다.
본 발명의 실시 예는 하나 이상의 프로세서에 의해 실행 가능한 명령어를 포함하는 유형의 비일시적 기계 판독 가능 매체를 포함할 수 있으며, 명령어는 본 명세서에서 설명된 바와 같은 발명 개념의 요소를 수행하기 위한 명령어를 포함한다.
전술한 방법의 다양한 동작은 다양한 하드웨어 그리고/또는 소프트웨어 컴포넌트(들), 회로, 그리고/또는 모듈(들)과 같은 동작을 수행할 수 있는 임의의 적절한 수단에 의해 수행될 수 있다. 소프트웨어는 논리적 기능을 구현하기 위한 실행 가능 명령어의 순서화된 목록을 포함할 수 있으며, 단일 또는 다중 코어 프로세서 또는 프로세서 포함하는 시스템과 같은 명령어 실행 시스템, 장치 또는 장치와 관련하여 또는 이들과 관련하여 임의의 "프로세서 판독 가능 매체"에서 구현될 수 있다.
본 명세서에 개시된 실시 예와 관련하여 설명된 방법 또는 알고리즘 및 기능의 블록 또는 단계는 하드웨어, 프로세서에 의해 실행되는 소프트웨어 모듈, 또는 이들의 조합으로 직접 구현될 수 있다. 소프트웨어로 구현되는 경우, 기능은 유형의 비일시적 컴퓨터 판독 가능 매체 상에 하나 이상의 명령 또는 코드로서 저장되거나 전송될 수 있다. 소프트웨어 모듈은 RAM(random access memory), 플래시 메모리, ROM, EPROM, EEPROM, 레지스터, 하드 디스크, 이동식 디스크, CD ROM, 또는 당업계에 잘 알려진 임의의 다른 형태의 저장 매체일 수 있다.
설명된 실시 예를 참조하여 본 발명의 원리를 설명하고 예시하였지만, 도시된 실시 예는 이러한 원리를 벗어나지 않고 배열 및 세부 사항을 수정할 수 있으며 임의의 바람직한 방식으로 결합될 수 있음을 알 것이다. 또한, 전술한 설명은 특정 실시 예에 초점을 맞추었지만, 다른 구성도 고려된다. 특히, "발명의 실시 예에 따른"등 과 같은 표현이 본 명세서에서 사용되더라도, 이러한 문구는 일반적으로 실시 가능성을 참조하는 것으로 의도되며, 본 발명의 개념을 특정 실시 예의 구성으로 제한하려는 것은 아니다. 본 명세서에 사용된 바와 같이, 이들 용어는 다른 실시 예와 조합 가능한 동일하거나 상이한 실시 예를 나타낼 수 있다.
전술 한 예시적인 실시 예는 본 발명의 개념을 제한하는 것으로 해석되어서는 안된다. 비록 일부 실시 예가 설명되었지만, 당업자는 본 개시의 신규한 교시 및 이점으로부터 실질적으로 벗어나지 않고도 이들 실시 예에 많은 수정이 가능하다는 것을 용이하게 이해할 것이다. 따라서, 이러한 모든 수정은 청구항에 정의된 본 발명의 범위 내에 포함되는 것으로 의도된다.
본 발명의 실시 예는 제한없이 다음의 진술로 확장될 수 있다.
진술 1.  본 발명의 실시 예는: 
데이터를 저장하기 위한 스토리지; 그리고
호스트 장치 에서 하나 이상의 가상 머신(VM)으로부터의 요청에 대한 적어도 하나의 입출력(I/O) 큐를 포함하는 스토리지 장치를 포함하되,
상기 스토리지 장치는 상기 적어도 하나의 가상 머신(VM) 중 하나의 가상 머신(VM)을 위해 상기 적어도 하나의 입출력(I/O) 큐 중 하나의 입출력(I/O) 큐의 할당을 요청하기 위한 입출력(I/O) 큐 생성 명령어를 지원하고, 상기 입출력(I/O) 큐 생성 명령어는 상기 하나의 입출력(I/O) 큐에 관련된 논리 블록 어드레스(LBA) 범위에 대한 LBA 범위 속성을 포함하고, 그리고
상기 스토리지 장치는 상기 논리 블록 어드레스(LBA) 범위를 데이터를 저장하기 위한 상기 스토리지의 물리 블록 어드레스(PBA) 범위로 맵핑한다.
진술 2. 진술 1에 따른 본 발명의 실시 예에 따른 스토리지 장치는,
상기 스토리지 장치는 솔리드 스테이트 드라이브(SSD) 스토리지 장치를 포함하고, 상기 솔리드 스테이트 드라이브(SSD) 스토리지 장치는 상기 호스트 장치의 NVMe 인터페이스를 사용한다.
진술 3. 진술 2에 따른 본 발명의 실시 예에 따른 스토리지 장치는,
상기 스토리지 장치는 상기 호스트 장치 상의 하이퍼바이저로부터 상기 입출력(I/O) 큐 생성 명령어를 수신한다.
진술 4. 진술 2에 따른 본 발명의 실시 예에 따른 스토리지 장치는,
상기 스토리지 장치는 호스트 장치 상의 하이퍼바이저로부터 입출력(I/O) 큐 생성 명령어를 수신한다.
진술 5. 진술 2에 따른 본 발명의 실시 예에 따른 스토리지 장치는,
상기 LBA 범위 속성은 시작 LBA 및 종료 LBA를 포함한다.
진술 6. 진술 2에 따른 본 발명의 실시 예에 따른 스토리지 장치는,
상기 LBA 범위 속성은 시작 LBA를 포함하고; 그리고
입출력(I/O) 큐 생성 명령어는 큐 사이즈를 더 포함한다.
진술 7. 진술 2에 따른 본 발명의 실시 예에 따른 스토리지 장치는,
상기 입출력(I/O) 큐 생성 명령어는 상기 가상 머신(VM)에 대한 서비스 품질 파라미터에 대한 서비스 품질(QOS) 속성을 포함한다.
진술 8. 진술 7에 따른 본 발명의 실시 예에 따른 스토리지 장치는,
상기 QoS 속성은 최소 대역폭, 최대 대역폭, 초당 최소 판독 요청 수, 초당 최대 판독 요청 수, 초당 판독된 최소 바이트 수, 초당 판독된 최대 바이트 수, 초당 최소 쓰기 요청 수, 초당 최대 쓰기 요청 수, 초당 기입된 최소 바이트 수 및 초당 기입된 최대 바이트 수를 포함하는 세트로부터 획득된다.
진술 9. 진술 2에 따른 본 발명의 실시 예에 따른 스토리지 장치는, 상기 입출력(I/O) 큐 생성 명령어는 상기 LBA 범위에 대한 접근을 공유하기 위한 네임 스페이스들의 어레이를 지정하는 공유 네임 스페이스 속성을 포함한다.
진술 10. 진술 2에 따른 본 발명의 실시 예에 따른 스토리지 장치는,
제 2 입출력(I/O) 큐를 위한 제 2 도어벨과는 다른 메모리 페이지에서 상기 입출력(I/O) 큐의 제 1 도어벨을 위치시키는 도어벨 분배 로직을 더 포함한다.
진술 11. 진술 2에 따른 본 발명의 실시 예에 따른 스토리지 장치는, 복수의 가상 입출력(I/O) 큐를 상기 입출력(I/O) 큐에 맵핑하는 FPGA (Field Programmable Gate Array)를 더 포함하고,
상기 FPGA는 복수의 가상 입출력(I/O) 큐들 중 제 1 가상 입출력(I/O) 큐의 할당을 요청하기 위한 가상 입출력(I/O) 큐 생성 명령어를 지원하며, 상기 가상 입출력(I/O) 큐 생성 명령어는 상기 입출력(I/O) 큐와 관련된 상기 제 1 가상 입출력(I/O) 큐와 관련된 제 2 LBA 범위의 제 2 LBA 범위 속성을 포함한다.
진술 12. 진술 11에 따른 본 발명의 실시 예에 따른 스토리지 장치에서,
상기 FPGA는 상기 제 1 가상 입출력(I/O) 큐에서 상기 가상 머신(VM)으로부터 수신된 입출력(I/O) 요청이 상기 스토리지로 전달되도록 상기 제 1 가상 입출력(I/O) 큐를 상기 스토리지 장치 상의 입출력(I/O) 큐에 맵핑하는 맵핑 로직을 포함하고, 상기 입출력(I/O) 큐를 통해 스토리지 장치로부터 수신된 결과는 상기 제 1 가상 입출력(I/O) 큐를 통해 상기 가상 머신(VM)에 전달된다.
진술 13. 진술 11에 따른 본 발명의 실시 예에 따른 스토리지 장치에서, 상기 FPGA의 상기 제 2 가상 입출력(I/O) 큐는 상기 입출력(I/O) 큐와 연관된다.
진술 14. 진술 11에 따른 본 발명의 실시 예에 따른 스토리지 장치에서,
상기 FPGA는 상기 스토리지 장치 상의 상기 입출력(I/O) 큐 생성 명령어를 호출하도록 동작한다.
진술 15. 진술 11에 따른 본 발명의 실시 예에 따른 스토리지 장치에서,
상기 FPGA는 상기 호스트 장치 상의 하이퍼바이저로부터 상기 가상 입출력(I/O) 큐 생성 명령어를 수신하도록 동작한다.
진술 16. 진술 15에 따른 본 발명의 실시 예에 따른 스토리지 장치에서,
상기 FPGA는 상기 호스트 장치 상의 상기 가상 머신(VM) 용 하이퍼바이저로부터 상기 가상 입출력(I/O) 큐 생성 명령어를 수신하도록 동작한다.
진술 17. 진술 11에 따른 본 발명의 실시 예에 따른 스토리지 장치에서,
상기 제 2 LBA 범위 속성은 제 2 시작 LBA 및 제 2 종료 LBA를 포함한다.
진술 18. 진술 11에 따른 본 발명의 실시 예에 따른 스토리지 장치에서,
상기 제 2 LBA 범위 속성은 제 2 시작 LBA를 포함하고; 그리고
상기 가상 입출력(I/O) 큐 생성 명령어는 제 2 큐 사이즈를 더 포함한다.
진술 19. 진술 11에 따른 본 발명의 실시 예에 따른 스토리지 장치에서,
상기 가상 입출력(I/O) 큐 생성 명령어는 상기 가상 머신(VM)에 대한 QoS 파라미터들에 대한 제 2 QoS 속성을 포함한다.
진술 20. 진술 19에 따른 본 발명의 실시 예에 따른 스토리지 장치에서,
상기 제 2 QoS 속성은 제 2 최소 대역폭, 제 2 최대 대역폭, 초당 제 2 최소 판독 요청 수, 초당 제 2 최대 판독 요청 수, 초당 판독된 제 2 최소 바이트 수, 초당 판독된 제 2 최대 바이트 수, 초당 제 2 최소 쓰기 요청 수, 초당 제 2 최대 쓰기 요청 수, 초당 기입된 제 2 최대 바이트 수, 초당 기입된 제 2 최소 바이트 수를 포함한다.
진술 21. 진술 11에 따른 본 발명의 실시 예에 따른 스토리지 장치에서,
상기 가상 입출력(I/O) 큐 생성 명령어는 상기 LBA들의 범위에 대한 접근을 공유하기 위해 네임 스페이스들의 제 2 어레이를 지정하는 제 2 공유 네임 스페이스 속성을 포함한다.
진술 22. 진술 2에 따른 본 발명의 실시 예에 따른 스토리지 장치에서,
상기 FPGA는 제 2 가상 입출력(I/O) 큐에 대한 제 2 도어벨과는 다른 메모리 페이지에서 상기 제 1 가상 입출력(I/O) 큐의 제 1 가상 도어벨을 위치시키는 도어벨 분배 로직을 더 포함한다.
진술 23. 본 발명의 실시 예에 따른 필드 프로그래머블 게이트 어레이(FPGA)는:
호스트 장치에서 적어도 하나의 가상 머신(VM)으로부터의 요청을 위한 적어도 하나의 가상 입출력(I/O) 큐; 그리고
상기 적어도 하나의 가상 입출력(I/O) 큐 중에서 가상 입출력(I/O) 큐를 스토리지 장치의 입출력(I/O) 큐에 맵핑시켜, 상기 가상 입출력(I/O) 큐의 가상 머신(VM)으로부터 수신된 입출력(I/O) 요청들이 상기 입출력(I/O) 큐를 사용하여 상기 스토리지 장치에 전달되도록, 그리고 상기 입출력(I/O) 큐의 스토리지 장치로부터 수신된 결과가 상기 가상 입출력(I/O) 큐를 통하여 상기 가상 머신(VM)에 전달되도록 하는 맵핑 로직을 포함하되,
상기 FPGA는 상기 적어도 하나의 가상 머신(VM)의 가상 머신(VM)을 위한 상기 적어도 하나의 가상 입출력(I/O) 큐 중에서 상기 가상 입출력(I/O) 큐의 할당을 요청하기 위한 가상 입출력(I/O) 큐 생성 명령어를 지원하고, 상기 가상 입출력(I/O) 큐 생성 명령어는 상기 가상 입출력(I/O) 큐와 관련된 논리 블록 어드레스(LBA)의 범위에 대한 논리 블록 어드레스(LBA) 범위 속성을 포함하고,
상기 스토리지 장치는 상기 FPGA와 별도로 연결되어 있지만, 상기 논리 블록 어드레스(LBA)의 범위를 상기 스토리지 장치 내의 물리적 블록 어드레스(PBA)의 범위로 맵핑한다.
진술 24. 진술 23에 따른 본 발명의 실시 예에 따른 FPGA에서,
상기 가상 입출력(I/O) 큐는 제출 큐와 완료 큐를 포함한다.
진술 25. 진술 23에 따른 본 발명의 실시 예에 따른 FPGA에서,
상기 FPGA는 상기 호스트 장치 상의 상기 가상 머신(VM)에 대한 하이퍼바이저로부터 상기 가상 입출력(I/O) 큐 생성 명령어를 수신한다.
진술 26. 진술 23에 따른 본 발명의 실시 예에 따른 FPGA에서,
상기 LBA 범위 속성은 시작 LBA와 종료 LBA를 포함한다.
진술 27. 진술 23에 따른 본 발명의 실시 예에 따른 FPGA에서,
상기 LBA 범위 속성은 시작 LBA를 포함하고,
상기 가상 입출력(I/O) 큐 생성 명령어는 큐 사이즈를 포함한다.
진술 28. 진술 23에 따른 본 발명의 실시 예에 따른 FPGA에서,
상기 가상 입출력(I/O) 큐 생성 명령어는 상기 VM에 대한 QoS 파라미터들에 대한 QoS(Quality of Service) 속성을 포함한다.
진술 29. 진술 23에 따른 본 발명의 실시 예에 따른 FPGA에서,
상기 QoS 속성은 최소 대역폭, 최대 대역폭, 초당 최소 판독 요청 수, 초당 최대 판독 요청 수, 초당 판독된 최소 바이트 수, 초당 판독된 최대 바이트 수, 초당 최소 쓰기 요청 수, 초당 최대 쓰기 요청 수, 초당 기입된 최소 바이트 수 및 초당 기입된 최대 바이트 수를 포함하는 세트로부터 획득된다.
진술 30. 진술 23에 따른 본 발명의 실시 예에 따른 FPGA에서,
상기 가상 입출력(I/O) 큐 생성 명령어는 상기 LBA들의 범위에 대한 접근을 공유하기 위한 네임 스페이스들의 어레이를 지정하는 공유 네임 스페이스 속성을 포함한다.
진술 31. 진술 23에 따른 본 발명의 실시 예에 따른 FPGA에서,
상기 FPGA는 복수의 가상 입출력(I/O) 큐를 상기 스토리지 장치 상의 상기 입출력(I/O) 큐에 맵핑한다.
진술 32. 진술 31에 따른 본 발명의 실시 예에 따른 FPGA에서,
상기 FPGA는 상기 스토리지 장치 상의 입출력(I/O) 큐 생성 명령어를 호출하여 상기 입출력(I/O) 큐를 생성하도록 동작한다.
진술 33. 진술 32에 따른 본 발명의 실시 예에 따른 FPGA에서,
상기 입출력(I/O) 큐 생성 명령어는 상기 입출력(I/O) 큐와 연관될 LBA들의 제 2 범위에 대한 제 2 LBA 속성을 포함한다.
진술 34. 진술 23에 따른 본 발명의 실시 예에 따른 FPGA에서,
제 2 가상 입출력(I/O) 큐를 위한 제 2 도어벨과는 다른 메모리 페이지에서 가상 입출력(I/O) 큐를 위한 제 1 가상 도어벨을 위치시키는 도어벨 분배 로직을 포함한다.
진술 35. 본 발명의 실시 예에 따른 방법에서,
호스트 장치 상의 제 1 가상 머신(VM)에 대한 스토리지 장치에서 입출력(I/O) 큐 생성 명령어를 수신하는 단계에 있어서, 상기 입출력(I/O) 큐 생성 명령어는 상기 스토리지 장치의 입출력(I/O) 큐와 연관된 논리 블록 어드레스(LBA) 범위에 대한 적어도 LBA 범위 속성을 포함하며;
상기 스토리지 장치 상에 상기 입출력(I/O) 큐를 설정하는 단계;
적어도 상기 LBA들의 범위만큼 큰 상기 스토리지 장치 상의 물리적 블록 어드레스들(PBAs)의 범위를 선택하는 단계;
상기 LBA의 범위를 상기 PBA의 범위에 맵핑하는 단계; 그리고
성공 지시자를 반환하는 단계를 포함하며,
상기 호스트 장치 상의 제 2 VM 은 상기 PBA들의 범위에 대한 액세스를 거절한다.
진술 36. 진술 35에 따른 본 발명의 실시 예의 방법에서,
상기 스토리지 장치는 솔리드 스테이트 드라이브(SSD) 스토리지 장치를 포함하고; 그리고
상기 SSD 스토리지 장치는 호스트 장치에 NVMe 인터페이스를 사용한다.
진술 37. 진술 36에 따른 본 발명의 실시 예의 방법에서,
상기 입출력(I/O) 큐는 제출 큐 및 완성 큐를 포함한다.
진술 38. 진술 36에 따른 본 발명의 실시 예의 방법에서,
진술 39. 진술 36에 따른 본 발명의 실시 예의 방법에서,
상기 호스트 장치 상의 제 1 가상 머신(VM)에 대한 입출력(I/O) 큐 생성 명령어를 수신하는 단계는, 상기 호스트 장치 상의 제 1 VM을 위한 하이퍼바이저로부터 입출력(I/O) 큐 생성 명령어를 수신하는 단계를 포함한다.
진술 40. 진술 39에 따른 본 발명의 실시 예의 방법에서,
상기 FPGA는 스토리지 장치에 포함된다.
진술 41. 진술 39에 따른 본 발명의 실시 예의 방법에서,
상기 FPGA는 스토리지 장치와 다른 장치에 분리되어 있지만 전기적으로 접속되어 있다.
진술 42. 진술 39에 따른 본 발명의 실시 예의 방법에서,
상기 LBA 범위 속성은 시작 LBA와 종료 LBA를 포함한다.
진술 43. 진술 36에 따른 본 발명의 실시 예의 방법에서,
상기 LBA 범위 속성은 시작 LBA를 포함하고, 그리고
상기 입출력(I/O) 큐 생성 명령어는 큐 사이즈를 더 포함한다.
진술 44. 진술 36에 따른 본 발명의 실시 예의 방법에서,
상기 입출력(I/O) 큐 생성 명령어는 상기 제 1 가상 머신(VM)에 대한 서비스 품질 파라미터에 대한 서비스 품질(QOS) 속성을 포함한다.
진술 45. 진술 44에 따른 본 발명의 실시 예의 방법에서,
상기 QoS 속성은 최소 대역폭, 최대 대역폭, 초당 최소 판독 요청 수, 초당 최대 판독 요청 수, 초당 판독된 최소 바이트 수, 초당 판독된 최대 바이트 수, 초당 최소 쓰기 요청 수, 초당 최대 쓰기 요청 수, 초당 기입된 최소 바이트 수 및 초당 기입된 최대 바이트 수를 포함하는 세트로부터 획득된다.
진술 46. 진술 36에 따른 본 발명의 실시 예의 방법에서,
상기 입출력(I/O) 큐 생성 명령어의 LBA 범위에 대한 접근을 공유하는 네임 스페이스의 배열을 지정하는 공유 네임 스페이스 속성을 포함한다.
진술 47. 진술 36에 따른 본 발명의 실시 예의 방법에서,
복수의 입출력(I/O) 큐와 연관된 복수의 도어벨을 식별하는 단계;
상기 복수의 도어벨들 각각을 상기 스토리지 장치 내의 제 1 복수의 메모리 어드레스의 메모리 어드레스에 할당하는 단계를 포함하되, 상기 제 1 복수의 메모리 어드레스는 복수의 메모리 페이지들에 걸쳐 분산되며;
상기 호스트 장치로부터 어드레스 공간을 요청하는 단계;
상기 제 1 복수의 메모리 어드레스를 상기 어드레스 공간에서 복수의 메모리 페이지에 걸쳐 분포된 제 2 복수의 메모리 어드레스에 맵핑하는 단계; 그리고
상기 제 2 복수의 메모리 어드레스 중 적어도 도어벨 어드레스를 상기 제 1 가상 머신(VM)에 제공하는 단계를 포함한다.
진술 48. 진술 47에 따른 본 발명의 실시 예의 방법에서,
상기 도어벨 어드레스에 접근하기 위한 도어벨 요청을 수신하는 단계;
상기 도어벨 어드레스를 상기 제 1 복수의 메모리 어드레스 내의 어드레스로 다시 맵핑하는 단계; 그리고
상기 도어벨 요청을 상기 제 1 복수의 메모리 어드레스 내의 상기 어드레스로 전송하는 단계를 더 포함한다.
진술 49. 본 발명의 실시 예에 따른 방법에서,
호스트 장치 상의 제 1 가상 머신(VM)에 대한 하이퍼바이저로부터 FPGA에서 가상 입출력(I/O) 큐 생성 명령어를 수신하는 단계로서, 상기 가상 입출력(I/O) 큐 생성 명령어는 적어도 스토리지 장치 상의 입출력(I/O) 큐와 연관된 LBA 범위에 대한 LBA 범위 속성을 포함하고;
상기 FPGA 상에 제 1 가상 입출력(I/O) 큐를 설정하는 단계;
상기 스토리지 장치 상에 입출력(I/O) 큐를 설정하기 위해 스토리지 장치에 입출력(I/O) 큐 생성 명령어를 전송하는 단계;
상기 스토리지 장치로부터 결과를 수신하는 단계;
상기 제 1 가상 입출력(I/O) 큐를 상기 입출력(I/O) 큐에 맵핑하는 단계;
상기 LBA 범위를 상기 제 1 가상 입출력(I/O) 큐와 연관시키는 단계; 그리고
성공 지시자를 하이퍼바이저로 반환하는 단계를 포함하며,
상기 LBA 범위는 상기 스토리지 장치 상의 물리적 블록 어드레스(PBAs)의 범위에 맵핑되고,
상기 호스트 장치 상의 제 2 VM 은 상기 PBA들의 범위에 대한 액세스가 거부된다.
진술 50. 진술 49에 따른 본 발명의 실시 예의 방법에서,
상기 가상 입출력(I/O) 큐는 제출 큐 및 완성 큐를 포함하다.
진술 51. 진술 49에 따른 본 발명의 실시 예의 방법에서,
상기 FPGA는 제 1 가상 입출력(I/O) 큐 및 제 2 가상 입출력(I/O) 큐를 상기 입출력 큐에 모두 맵핑한다.
진술 52. 진술 49에 따른 본 발명의 실시 예의 방법에서,
상기 입출력(I/O) 큐 생성 명령어는 상기 LBA 범위의 LBA 범위 속성을 포함한다.
진술 53. 진술 49에 따른 본 발명의 실시 예의 방법에서,
상기 LBA 범위 속성은 시작 LBA 및 종료 LBA를 포함한다.
진술 54. 진술 49에 따른 본 발명의 실시 예의 방법에서,
상기 LBA 범위 속성은 시작 LBA를 포함하고, 그리고
상기 가상 입출력(I/O) 큐 생성 명령어는 큐 사이즈를 더 포함한다.
진술 55. 진술 49에 따른 본 발명의 실시 예의 방법에서,
상기 가상 입출력(I/O) 큐 생성 명령어는 상기 제 1 가상 머신(VM)에 대한 QoS 파라미터들에 대한 서비스 품질(QoS) 속성을 포함한다.
진술 56. 진술 55에 따른 본 발명의 실시 예의 방법에서,
상기 QoS 속성은 최소 대역폭, 최대 대역폭, 초당 최소 판독 요청 수, 초당 최대 판독 요청 수, 초당 판독된 최소 바이트 수, 초당 판독된 최대 바이트 수, 초당 최소 쓰기 요청 수, 초당 최대 쓰기 요청 수, 초당 기입된 최소 바이트 수 및 초당 기입된 최대 바이트 수를 포함하는 세트로부터 획득된다.
진술 57. 진술 49에 따른 본 발명의 실시 예의 방법에서,
상기 가상 입출력(I/O) 큐 생성 명령어의 LBA 범위에 대한 접근을 공유하는 네임 스페이스의 어레이를 지정하는 공유 네임 스페이스 속성을 포함한다.
진술 58. 진술 49에 따른 본 발명의 실시 예의 방법에서,
복수의 입출력(I/O) 큐와 연관된 복수의 도어벨을 식별하는 단계;
상기 복수의 도어벨들 각각을 상기 FPGA 내의 제 1 복수의 메모리 어드레스들의 메모리 어드레스에 할당하는 단계를 포함하되, 상기 제 1 복수의 메모리 어드레스는 복수의 메모리 페이지들에 걸쳐 분산되며;
상기 호스트 장치로부터 어드레스 공간을 요청하는 단계;
상기 제 1 복수의 메모리 어드레스를 상기 어드레스 공간에서 복수의 메모리 페이지에 걸쳐 분포된 제 2 복수의 메모리 어드레스에 맵핑하는 단계; 그리고
상기 제 2 복수의 메모리 어드레스 중 적어도 도어벨 어드레스를 상기 제 1 가상 머신(VM)에 제공하는 단계를 포함한다.
진술 59. 진술 58에 따른 본 발명의 실시 예의 방법에서,
상기 도어벨 어드레스에 액세스하기 위한 도어벨 요청을 수신하는 단계;
상기 도어벨 어드레스를 상기 제 1 복수의 메모리 어드레스 내의 어드레스로 다시 맵핑하는 단계; 그리고
상기 도어벨 요청을 상기 제 1 복수의 메모리 어드레스 내의 상기 어드레스로 전송하는 단계를 더 포함한다.
진술 60. 본 발명의 실시 예에 따른 방법에서,
호스트 장치 상의 가상 머신(VM)으로부터 스토리지 장치에 대한 제 1 요청을 수신하는 단계;
상기 스토리지 장치에 도달하는 첫 번째 요청을 트랩하는 단계;
상기 제 1 요청을 시뮬레이팅하는 제 2 요청을 FPGA에 전송하는 단계;
상기 FPGA로부터 상기 제 2 요청의 결과를 수신하는 단계; 그리고
상기 제 2 요청의 결과를 상기 가상 머신(VM)에 전송하는 단계를 더 포함한다.
진술 61. 진술 60에 따른 본 발명의 실시 예에 따른 방법에서,
상기 제 1 요청은 제 1 PCI 설정 공간에 액세스하기 위한 제 1 PCI 설정 공간 요청을 포함하고; 그리고
상기 제 2 요청은 제 2 PCI 설정 공간에 액세스하기 위한 제 2 PCI 설정 공간 요청을 포함한다.
진술 62. 진술 60에 따른 본 발명의 실시 예에 따른 방법에서,
상기 제 1 요청은 상기 스토리지 장치가 입출력(I/O) 큐를 생성하기 위한 입출력(I/O) 큐 생성 요청을 포함하고; 그리고
상기 제 2 요청은 FPGA가 가상 입출력(I/O) 큐를 생성하기 위한 가상 입출력(I/O) 큐 생성 요청을 포함한다.
진술 63. 진술 62에 따른 본 발명의 실시 예에 따른 방법에서,
상기 제 2 요청이 상기의 LBA 범위에 대한 논리 블록 어드레스(LBA)의 속성을 포함하는 가상 입출력(I/O) 큐와 관련된다.
진술 64. 진술 63에 따른 본 발명의 실시 예에 따른 방법에서,
상기 가상 입출력(I/O) 큐 생성 요청이 상기 LBA 범위에 대한 접근을 공유하는 네임 스페이스의 배열을 지정하는 공유 네임 스페이스 속성을 포함한다.
진술 65. 진술 62에 따른 본 발명의 실시 예에 따른 방법에서,
상기 제 2 요청은 상기 가상 머신(VM)에 대한 QoS 파라미터에 대한 QoS 속성을 포함한다.
진술 66. 진술 65에 따른 본 발명의 실시 예에 따른 방법에서,
상기 QoS 속성은 최소 대역폭, 최대 대역폭, 초당 최소 판독 요청 수, 초당 최대 판독 요청 수, 초당 판독된 최소 바이트 수, 초당 판독된 최대 바이트 수, 초당 최소 쓰기 요청 수, 초당 최대 쓰기 요청 수, 초당 기입된 최소 바이트 수 및 초당 기입된 최대 바이트 수를 포함하는 세트로부터 획득된다.
진술 67. 본 발명의 일 실시 예는 비일시적 기억 매체를 포함하는 상품을 포함하고, 머신에 의해 실행될 때, 아래의 단계들을 수행하는 명령어들이 저장되는 상기 비일시적인 저장 매체를 포함하는 상품에 있어서, 상기 단계들은:
호스트 장치 상의 제 1 가상 머신(VM)에 대한 스토리지 장치에서 입출력(I/O) 큐 생성 명령어를 수신하는 단계로서, 상기 입출력(I/O) 큐 생성 명령어는 스토리지 장치의 입출력(I/O) 큐와 연관될 LBA 범위에 대한 적어도 LBA 범위 속성을 포함하고,
상기 스토리지 장치 상에 상기 입출력(I/O) 큐를 구성하는 단계;
적어도 상기 LBA 범위만큼 큰 상기 스토리지 장치 상의 PBA의 범위를 선택하는 단계;
상기 LBA의 범위를 상기 PBA의 범위에 맵핑하는 단계; 그리고
성공 지시자를 반환하는 단계를 포함하며,
상기 호스트 장치 상의 제 2 VM 은 따라서 상기 PBA 범위에 대한 액세스가 거부된다.
진술 68. 진술 67에 따른 본 발명의 실시 예에 따른 상품에서,
상기 스토리지 장치는 SSD 스토리지 장치를 포함하고; 그리고
상기 SSD 스토리지 장치는 호스트 장치와의 통신을 위해 NVMe 인터페이스를 사용한다.
진술 69. 진술 68에 따른 본 발명의 실시 예에 따른 상품에서,
상기 입출력(I/O) 큐는 제출 큐 및 완성 큐를 포함한다.
진술 70. 진술 68에 따른 본 발명의 실시 예에 따른 상품에서,
상기 호스트 장치에서 제 1 가상 머신(VM)을 위한 상기 입출력(I/O) 큐 생성 명령어를 수신하는 단계는, 상기 호스트 장치 상에서 하이퍼바이저로부터 상기 제 1 가상 머신(VM)에 대한 입출력(I/O) 큐 생성 명령어를 수신하는 단계를 포함한다.
진술 71. 진술 68에 따른 본 발명의 실시 예에 따른 상품에서,
상기 호스트 장치 상에서 제 1 VM에 대한 입출력(I/O) 큐 생성 명령어를 수신하는 단계는, 상기 호스트 장치 상의 제 1 VM에 대한 FPGA로부터 입출력(I/O) 큐 생성 명령어를 수신하는 단계를 포함한다.
진술 72. 진술 71에 따른 본 발명의 실시 예에 따른 상품에서,
상기 FPGA는 상기 스토리지 장치에 포함된다.
진술 73. 진술 71에 따른 본 발명의 실시 예에 따른 상품에서,
상기 FPGA는 상기 스토리지 장치와 분리되어 있지만 전기적으로는 연결된다.
진술 74. 진술 68에 따른 본 발명의 실시 예에 따른 상품에서,
상기 LBA 범위 속성은 시작 LBA와 종료 LBA를 포함한다.
진술 75. 진술 68에 따른 본 발명의 실시 예에 따른 상품에서,
상기 LBA 범위 속성은 시작 LBA를 포함하고, 그리고
상기 입출력(I/O) 큐 생성 명령어는 큐 사이즈를 더 포함한다.
진술 76. 진술 68에 따른 본 발명의 실시 예에 따른 상품에서,
상기 입출력(I/O) 큐 생성 명령어는 제 1 가상 머신(VM)에 대한 QoS 파라미터에 대한 QoS 속성을 포함한다.
진술 77. 진술 76에 따른 본 발명의 실시 예에 따른 상품에서,
상기 QoS 속성은 최소 대역폭, 최대 대역폭, 초당 최소 판독 요청 수, 초당 최대 판독 요청 수, 초당 판독된 최소 바이트 수, 초당 판독된 최대 바이트 수, 초당 최소 쓰기 요청 수, 초당 최대 쓰기 요청 수, 초당 기입된 최소 바이트 수 및 초당 기입된 최대 바이트 수를 포함하는 세트로부터 획득된다.
진술 78. 진술 68에 따른 본 발명의 실시 예에 따른 상품에서,
상기 입출력(I/O) 큐 생성 명령어는 LBA 범위에 대한 접근을 공유하는 네임 스페이스의 배열을 지정하는 공유 네임 스페이스 속성을 포함한다.
진술 79. 진술 68에 따른 본 발명의 실시 예에 따른 상품에서,
복수의 입출력(I/O) 큐와 연관된 복수의 도어벨을 식별하는 단계;
상기 복수의 도어벨들 각각을 상기 스토리지 장치 내의 제 1 복수의 메모리 어드레스들의 메모리 어드레스에 할당하는 단계를 포함하며, 상기 제 1 복수의 메모리 어드레스는 복수의 메모리 페이지들에 걸쳐 분산되고;
상기 호스트 장치로부터 어드레스 공간을 요청하는 단계;
상기 제 1 복수의 메모리 어드레스를 상기 어드레스 공간에서 복수의 메모리 페이지에 걸쳐 분포된 제 2 복수의 메모리 어드레스에 맵핑하는 단계; 그리고
상기 제 2 복수의 메모리 어드레스 중 적어도 도어벨 어드레스를 상기 제 1 가상 머신(VM)에 제공하는 단계를 포함한다.
진술 80. 진술 79에 따른 본 발명의 실시 예에 따른 상품에서,
상기 도어벨 어드레스에 액세스하기 위한 도어벨 요청을 수신하는 단계;
상기 도어벨 어드레스를 상기 제 1 복수의 메모리 어드레스 내의 어드레스로 다시 맵핑하는 단계; 그리고
상기 도어벨 요청을 상기 제 1 복수의 메모리 어드레스들 내의 상기 어드레스로 전송하는 단계를 더 포함한다.
진술 81. 본 발명의 일 실시 예는 비일시적 기억 매체를 포함하는 상품을 포함하고, 머신에 의해 실행될 때, 아래의 단계들을 수행하는 명령어들이 저장되는 상기 비일시적인 저장 매체를 포함하는 상품에 있어서, 상기 단계들은:
호스트 장치 상의 제 1 가상 머신(VM)을 위한 하이퍼바이저로부터 FPGA에서 가상 입출력(I/O) 큐 생성 명령어를 수신하는 단계로서, 상기 가상 입출력(I/O) 큐 생성 명령어는 상기 스토리지 장치 상의 입출력(I/O) 큐와 연관된 LBA 범위에 대한 LBA 범위 속성을 적어도 포함하고;
상기 FPGA 상에 제 1 가상 입출력(I/O) 큐를 설정하는 단계;
상기 스토리지 장치 상에 입출력(I/O) 큐를 설정하기 위해 스토리지 장치에 입출력(I/O) 큐 생성 명령어를 전송하는 단계;
상기 스토리지 장치로부터 결과를 수신하는 단계;
상기 제 1 가상 입출력(I/O) 큐를 상기 입출력(I/O) 큐에 맵핑하는 단계;
상기 LBA 범위를 상기 제 1 가상 입출력(I/O) 큐와 연관시키는 단계; 그리고
성공 지시자를 상기 하이퍼바이저로 반환하는 단계를 포함하며,
상기 LBA 범위는 상기 스토리지 장치 상의 PBA 범위에 맵핑되고,
상기 호스트 장치 상의 제 2 VM 은 상기 PBA 범위에 대한 액세스가 거부된다.
진술 82. 진술 81에 따른 본 발명의 실시 예에 따른 상품에서,
상기 제 1 가상 입출력(I/O) 큐는 제출 큐 및 완성 큐를 포함한다.
진술 83. 진술 81에 따른 본 발명의 실시 예에 따른 상품에서,
상기 FPGA는 제 1 가상 입출력(I/O) 큐 및 제 2 가상 입출력(I/O) 큐 모두를 맵핑한다.
진술 84. 진술 81에 따른 본 발명의 실시 예에 따른 상품에서,
상기 입출력(I/O) 큐 생성 명령어는 상기 LBA 범위의 LBA 범위 속성을 포함한다.
진술 85. 진술 81에 따른 본 발명의 실시 예에 따른 상품에서,
상기 LBA 범위 속성은 시작 LBA와 종료 LBA를 포함한다.
진술 86. 진술 81에 따른 본 발명의 실시 예에 따른 상품에서,
상기 LBA 범위 속성은 시작 LBA를 포함하고, 그리고
상기 입출력(I/O) 큐 생성 명령어는 큐 사이즈를 더 포함한다.
진술 86. 진술 81에 따른 본 발명의 실시 예에 따른 상품에서,
상기 입출력(I/O) 큐 생성 명령어는 제 1 가상 머신(VM)에 대한 QoS 파라미터에 대한 QoS 속성을 포함한다.
진술 88. 진술 87에 따른 본 발명의 실시 예에 따른 상품에서,
상기 QoS 속성은 최소 대역폭, 최대 대역폭, 초당 최소 판독 요청 수, 초당 최대 판독 요청 수, 초당 판독된 최소 바이트 수, 초당 판독된 최대 바이트 수, 초당 최소 쓰기 요청 수, 초당 최대 쓰기 요청 수, 초당 기입된 최소 바이트 수 및 초당 기입된 최대 바이트 수를 포함하는 세트로부터 획득된다.
진술 89. 진술 81에 따른 본 발명의 실시 예에 따른 상품에서,
상기 입출력(I/O) 큐 생성 명령어는 LBA 범위에 대한 접근을 공유하는 네임 스페이스의 배열을 지정하는 공유 네임 스페이스 속성을 포함한다.
진술 90. 진술 81에 따른 본 발명의 실시 예에 따른 상품에서,
복수의 입출력(I/O) 큐와 연관된 복수의 도어벨을 식별하는 단계;
상기 복수의 도어벨들 각각을 상기 FPGA 내의 제 1 복수의 메모리 어드레스들의 메모리 어드레스에 할당하는 단계를 포함하며, 상기 제 1 복수의 메모리 어드레스는 복수의 메모리 페이지들에 걸쳐 분산되고;
상기 호스트 장치로부터 어드레스 공간을 요청하는 단계;
상기 제 1 복수의 메모리 어드레스를 상기 어드레스 공간에서 복수의 메모리 페이지에 걸쳐 분포된 제 2 복수의 메모리 어드레스에 맵핑하는 단계; 그리고
상기 제 2 복수의 메모리 어드레스 중 적어도 도어벨 어드레스를 상기 제 1 가상 머신(VM)에 제공하는 단계를 포함한다.
진술 91. 진술 90에 따른 본 발명의 실시 예에 따른 상품에서,
상기 도어벨 어드레스에 액세스하기 위한 도어벨 요청을 수신하는 단계;
상기 도어벨 어드레스를 상기 제 1 복수의 메모리 어드레스 내의 어드레스로 다시 맵핑하는 단계; 그리고
상기 도어벨 요청을 상기 제 1 복수의 메모리 어드레스들 내의 상기 어드레스로 전송하는 단계를 더 포함한다.
진술 92. 본 발명의 실시 예에 따른 상품에서, 머신에 의해 실행될 때, 아래의 단계들을 수행하는 명령어들이 저장되는 비일시적인 저장 매체를 포함하는 상품에 있어서, 상기 단계들은:
호스트 장치 상의 가상 머신(VM)으로부터 스토리지 장치를 목적지로 하는 제 1 요청을 수신하는 단계;
상기 제 1 요청이 상기 스토리지 장치에 도달하는 것을 트랩하는 단계;
상기 제 1 요청을 시뮬레이팅하는 제 2 요청을 필드 프로그래머블 게이트 어레이(FPGA)에 전송하는 단계;
상기 필드 프로그래머블 게이트 어레이(FPGA)로부터 상기 제 2 요청의 결과를 수신하는 단계; 그리고
상기 제 2 요청의 결과를 상기 가상 머신(VM)에 전송하는 단계를 포함한다.
진술 93. 진술 92에 따른 본 발명의 실시 예에 따른 상품에서,
상기 제 1 요청은 제 1 PCI 설정 공간에 액세스하기 위한 제 1 PCI 설정 공간 요청을 포함하고; 그리고
상기 제 2 요청은 제 2 PCI 설정 공간에 액세스하기 위한 제 2 PCI 설정 공간 요청을 포함한다.
진술 94. 진술 92에 따른 본 발명의 실시 예에 따른 상품에서,
상기 제 1 요청은 상기 스토리지 장치가 입출력(I/O) 큐를 생성하기 위한 입출력(I/O) 큐 생성 요청을 포함하고; 그리고
상기 제 2 요청은 상기 필드 프로그래머블 게이트 어레이(FPGA)가 가상 입출력(I/O) 큐를 생성하기 위한 가상 입출력(I/O) 큐 생성 요청을 포함한다.
진술 95. 진술 94에 따른 본 발명의 실시 예에 따른 상품에서,
상기 제 2 요청은 상기 가상 입출력(I/O) 큐와 연관된 논리 블록 어드레스(LBA)의 범위에 대한 LBA 속성을 포함한다.
진술 96. 진술 95에 따른 본 발명의 실시 예에 따른 상품에서,
상기 입출력(I/O) 큐 생성 명령어는 LBA 범위에 대한 접근을 공유하는 네임 스페이스의 배열을 지정하는 공유 네임 스페이스 속성을 포함한다.
진술 97. 진술 81에 따른 본 발명의 실시 예에 따른 상품에서,
상기 제 2 요청은 상기 가상 머신(VM)에 대한 QoS 파라미터에 대한 QoS 속성을 포함한다.
진술 98. 진술 97에 따른 본 발명의 실시 예에 따른 상품에서,
상기 QoS 속성은 최소 대역폭, 최대 대역폭, 초당 최소 판독 요청 수, 초당 최대 판독 요청 수, 초당 판독된 최소 바이트 수, 초당 판독된 최대 바이트 수, 초당 최소 쓰기 요청 수, 초당 최대 쓰기 요청 수, 초당 기입된 최소 바이트 수 및 초당 기입된 최대 바이트 수를 포함하는 세트로부터 획득된다.
결론적으로, 본 명세서에 기술된 실시 예에 대한 다양한 변경의 관점에서, 이 상세한 설명 및 첨부된 자료는 단지 예시적인 것으로 의도되며, 본 발명의 범위를 제한하는 것으로 간주되어서는 안된다. 그러므로 본 발명의 개념으로서 청구되는 것은 다음의 청구항 및 그 균등물의 범위 및 사상 내에 있을 수 있는 모든 변형이다.

Claims (10)

  1. 스토리지 장치에 있어서:
    데이터를 저장하기 위한 스토리지; 그리고
    호스트 장치의 하나 이상의 가상 머신(VM)으로부터의 요청들을 위한 적어도 하나의 입출력(I/O) 큐를 포함하되,
    상기 스토리지 장치는 상기 적어도 하나의 가상 머신(VM) 중 하나의 가상 머신(VM)을 위해 상기 적어도 하나의 입출력(I/O) 큐 중 하나의 입출력(I/O) 큐의 할당을 요청하기 위한 입출력(I/O) 큐 생성 명령어를 지원하고, 상기 입출력(I/O) 큐 생성 명령어는 상기 하나의 입출력(I/O) 큐에 관련된 논리 블록 어드레스(LBA) 범위에 대한 LBA 범위 속성을 포함하고,
    상기 스토리지 장치는 상기 논리 블록 어드레스(LBA) 범위를 데이터를 저장하기 위한 상기 스토리지의 물리 블록 어드레스(PBA) 범위로 맵핑하는 것을 특징으로 하는 스토리지 장치.
  2. 제 1 항에 있어서,
    상기 스토리지 장치는 솔리드 스테이트 드라이브(SSD) 스토리지 장치를 포함하고, 상기 솔리드 스테이트 드라이브(SSD) 스토리지 장치는 상기 호스트 장치의 NVMe 인터페이스를 사용하는 스토리지 장치.
  3. 제 2 항에 있어서,
    상기 스토리지 장치는 상기 호스트 장치 상의 하이퍼바이저로부터 상기 입출력(I/O) 큐 생성 명령어를 수신하는 스토리지 장치.
  4. 제 2 항에 있어서,
    상기 LBA 범위 속성은 시작 LBA 및 종료 LBA를 포함하는 스토리지 장치.
  5. 제 2 항에 있어서,
    상기 입출력(I/O) 큐 생성 명령어는 상기 가상 머신(VM)에 대한 서비스 품질 파라미터에 대한 서비스 품질(QOS) 속성을 포함하는 스토리지 장치.
  6. 제 2 항에 있어서,
    상기 입출력(I/O) 큐 생성 명령어는 상기 LBA 범위에 대한 접근을 공유하기 위한 네임 스페이스들의 어레이를 지정하는 공유 네임 스페이스 속성을 포함하는 스토리지 장치.
  7. 제 2 항에 있어서,
    복수의 가상 입출력(I/O) 큐를 상기 입출력(I/O) 큐에 맵핑하는 FPGA (Field Programmable Gate Array)를 더 포함하고,
    상기 FPGA는 복수의 가상 입출력(I/O) 큐들 중 제 1 가상 입출력(I/O) 큐의 할당을 요청하기 위한 가상 입출력(I/O) 큐 생성 명령어를 지원하며, 상기 가상 입출력(I/O) 큐 생성 명령어는 상기 입출력(I/O) 큐와 관련된 상기 제 1 가상 입출력(I/O) 큐와 관련된 제 2 LBA 범위의 제 2 LBA 범위 속성을 포함하는 스토리지 장치.
  8. 제 2 항에 있어서,
    제 2 입출력(I/O) 큐를 위한 제 2 도어벨과는 다른 메모리 페이지에서 상기 입출력(I/O) 큐의 제 1 도어벨을 위치시키는 도어벨 분배 로직을 더 포함하는 스토리지 장치.
  9. 필드 프로그래머블 게이트 어레이(FPGA)에 있어서:
    호스트 장치에서 적어도 하나의 가상 머신(VM)으로부터의 요청을 위한 적어도 하나의 가상 입출력(I/O) 큐; 그리고
    상기 적어도 하나의 가상 입출력(I/O) 큐 중에서 가상 입출력(I/O) 큐를 스토리지 장치의 입출력(I/O) 큐에 맵핑시켜, 상기 가상 입출력(I/O) 큐의 가상 머신(VM)으로부터 수신된 입출력(I/O) 요청들이 상기 입출력(I/O) 큐를 사용하여 상기 스토리지 장치에 전달되도록, 그리고 상기 입출력(I/O) 큐의 스토리지 장치로부터 수신된 결과가 상기 가상 입출력(I/O) 큐를 통하여 상기 가상 머신(VM)에 전달되도록 하는 맵핑 로직을 포함하되,
    상기 FPGA는 상기 적어도 하나의 가상 머신(VM)의 가상 머신(VM)을 위한 상기 적어도 하나의 가상 입출력(I/O) 큐 중에서 상기 가상 입출력(I/O) 큐의 할당을 요청하기 위한 가상 입출력(I/O) 큐 생성 명령어를 지원하고, 상기 가상 입출력(I/O) 큐 생성 명령어는 상기 가상 입출력(I/O) 큐와 관련된 논리 블록 어드레스(LBA)의 범위에 대한 논리 블록 어드레스(LBA) 범위 속성을 포함하고,
    상기 스토리지 장치는 상기 FPGA와 별도로 연결되어 있지만, 상기 논리 블록 어드레스(LBA)의 범위를 상기 스토리지 장치 내의 물리적 블록 어드레스(PBA)의 범위로 맵핑하는 필드 프로그래머블 게이트 어레이(FPGA).
  10. 머신에 의해 실행될 때, 아래의 단계들을 수행하는 명령어들이 저장되는 비일시적인 저장 매체를 포함하는 상품에 있어서, 상기 단계들은:
    호스트 장치 상의 가상 머신(VM)으로부터 스토리지 장치를 목적지로 하는 제 1 요청을 수신하는 단계;
    상기 제 1 요청이 상기 스토리지 장치에 도달하는 것을 트랩하는 단계;
    상기 제 1 요청을 시뮬레이팅하는 제 2 요청을 필드 프로그래머블 게이트 어레이(FPGA)에 전송하는 단계;
    상기 필드 프로그래머블 게이트 어레이(FPGA)로부터 상기 제 2 요청의 결과를 수신하는 단계; 그리고
    상기 제 2 요청의 결과를 상기 가상 머신(VM)에 전송하는 단계를 포함하는 상품.
KR1020190006432A 2018-03-13 2019-01-17 가상 환경에서의 물리적 스토리지 장치 자원을 동적으로 할당하는 메커니즘 KR20190108038A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201862642596P 2018-03-13 2018-03-13
US62/642,596 2018-03-13
US15/959,108 2018-04-20
US15/959,108 US11036533B2 (en) 2015-04-17 2018-04-20 Mechanism to dynamically allocate physical storage device resources in virtualized environments

Publications (1)

Publication Number Publication Date
KR20190108038A true KR20190108038A (ko) 2019-09-23

Family

ID=67959015

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190006432A KR20190108038A (ko) 2018-03-13 2019-01-17 가상 환경에서의 물리적 스토리지 장치 자원을 동적으로 할당하는 메커니즘

Country Status (2)

Country Link
KR (1) KR20190108038A (ko)
CN (1) CN110275774A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021183200A1 (en) * 2020-03-10 2021-09-16 Intel Corporation Dynamic interrupt provisioning

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111737176B (zh) * 2020-05-11 2022-07-15 瑞芯微电子股份有限公司 一种基于pcie数据的同步装置及驱动方法
CN111651269A (zh) * 2020-05-18 2020-09-11 青岛镕铭半导体有限公司 实现设备虚拟化的方法、装置及计算机可读存储介质
CN117666925A (zh) * 2022-08-26 2024-03-08 中兴通讯股份有限公司 执行指令的方法、装置、服务器及系统

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021183200A1 (en) * 2020-03-10 2021-09-16 Intel Corporation Dynamic interrupt provisioning

Also Published As

Publication number Publication date
CN110275774A (zh) 2019-09-24

Similar Documents

Publication Publication Date Title
US11768698B2 (en) Mechanism to dynamically allocate physical storage device resources in virtualized environments
EP3608769B1 (en) Apparatus and method for providing quality of service over a virtual interface for solid-state storage
US10216628B2 (en) Efficient and secure direct storage device sharing in virtualized environments
KR20190108038A (ko) 가상 환경에서의 물리적 스토리지 장치 자원을 동적으로 할당하는 메커니즘
WO2018063718A1 (en) Techniques for input/output access to memory or storage by a virtual machine or container
KR102321913B1 (ko) 불휘발성 메모리 장치, 및 그것을 포함하는 메모리 시스템
CN113795828B (zh) 多功能装置的服务类别
US10275558B2 (en) Technologies for providing FPGA infrastructure-as-a-service computing capabilities
CN111176829B (zh) 虚拟化处理系统中的物理功能和虚拟功能的灵活资源分配
CN112306624A (zh) 一种信息处理方法、物理机和pcie设备
CN101777005B (zh) 重定向物理设备控制器的中断而提供多个虚拟设备控制器的装置和方法
US11768783B2 (en) Local non-volatile memory express virtualization device
CN116320469B (zh) 一种虚拟化视频编解码系统及方法、电子设备和存储介质
US10838762B2 (en) Method and device for live migration of virtual machine in a multi-root I/O virtualization environment and computing host thereof
US9229891B2 (en) Determining a direct memory access data transfer mode
US9569373B2 (en) Sharing message-signaled interrupts between peripheral component interconnect (PCI) I/O devices
US10223284B2 (en) Flexible I/O DMA address allocation in virtualized systems
US11513983B2 (en) Interrupt migration
US11003378B2 (en) Memory-fabric-based data-mover-enabled memory tiering system
US20160026567A1 (en) Direct memory access method, system and host module for virtual machine
US20220137998A1 (en) Storage virtualization device supporting virtual machine, operation method thereof, and operation method of system having the same
JPWO2018173300A1 (ja) I/o制御方法およびi/o制御システム

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal