SR-IOV

최승혁·2022년 7월 15일
0
post-thumbnail

SR-IOV(Single Root - I/O Virtualization)

정의

SR-IOV(Single Root I/O Virtualization)는 시스템에서 여러 파티션이 동시에 실행되어 PCIe 장치를 공유할 수 있도록 PCI3 확장 스펙을 정의하는 PCIe(Peripheral Component Interconnect express) 표준 아키텍처입니다. 아키텍처에서 가상 함수(VF)로 알려진 PCI 함수의 가상 복제본을 정의합니다. 파티션에서 POWER Hypervisor™ 또는 Virtual I/O Server와 같은 VI(Virtual Intermediary)를 거치지 않고도 SR-IOV 어댑터에 직접 연결할 수 있습니다. 따라서 VI를 피할 수 있으므로 대기 시간이 적고 CPU 이용률이 감소합니다.

from IBM

하나의 PCIe의 리소스를 이용하여 파티션을 통해 여러 VM(virtual machine)을 생성하여 사용하는 것이다. 즉, 하나의 NIC과 Physical Device를 가지고 가상화 기술을 통해 여러 개의 HBA Card를 만들어 사용하겠다는 의미이다.

각 노드들은 스위치를 통해 연결되며, VF를 통해 상호작용한다. 여기서 VF는 가상 PCI 카드를 생성해 줄 수 있는 기능을 말한다. VF는 PF를 복사하여 생성한 것으로, PF는 물리적인 PCI 카드를 나타낸다. VF는 가상으로 NIC을 생성하여 실제 Physical NIC과 동일한 기능과 동작을 하지만, 자체적으로 속성 값을 변경하지 못한다는 단점이 있다.

배경

  • VEB(Virtual Ethernet Bridge)의 문제점
    • 가상 머신 트래픽에 대한 정보가 부족하여 모니터링이 안 됨
    • 가상 머신에 연결된 단위 Port별 Policy 적용이나 QoS 설정을 할 수 없다.
    • 기존의 네트워크 계층에서 운용해왔던 것들이 서버 계층으로 통합되면서 정책의 충돌이나 비정상적인 문제가 나타난다.
    • Software Based 기반으로 동작하기 때문에 CPU 오버헤드가 심하다.
    • 가상 머신의 개수와 트래픽이 늘수록 호스트 성능의 범위를 예측할 수 없다.

장점

  • NIC에 적용하는 기술이기 때문에, CPU 오버헤드가 감소하며, 서버 CPU도 사용하지 않기 때문에 성능 또한 향상 된다.
  • NIC과 Quest OS 간의 네트워크 트래픽 전달 성능이 향상된다.
  • SLA를 통한 서비스를 향상시킬 수 있다.

아키텍쳐

Hyper-V 확장 가능 스위치 모듈: Hyper-V 자식 파티션에 대한 네트워크 연결을 제공하도록 SR-IOV 네트워크 어댑터에서 NIC 스위치를 구성하는 확장 가능한 모듈이다. Hyper-V 자식 파티션을 VM으로 지칭한다.

자식 파티션이 PCIe VF에 연결된 경우 확장 가능한 스위치 모듈은 VM과 네트워크 어댑터 간의 데이터 트래픽에 참여하지 않는다. 대신 데이터 트래픽은 VM과 VF가 연결된 VF 간에 직접 전달된다.

스위치

SR-IOV(단일 루트 I/O 가상화)를 지원하는 네트워크 어댑터는 어댑터의 실제 포트와 내부 VPorts(가상 포트) 간에 네트워크 트래픽을 전달하는 하드웨어 브리지를 구현해야 합니다. 이 브리지는 NIC 스위치 라고 하며 다음 그림에 나와 있습니다.

  • 외부 물리적 네트워크에 대한 네트워크 연결을 제공하는 하나의 외부 또는 물리적 포트입니다.

  • 외부 물리적 네트워크에 액세스할 수 있는 네트워크 어댑터에서 PCI Express(PCIe) PF(물리적 함수)를 제공하는 하나의 내부 포트입니다. 내부 포트를 VPort(가상 포트)라고 합니다.

    PF에는 항상 VPort가 만들어지고 할당됩니다. 이 VPort는 기본 VPort라고 하며 DEFAULT_VPORT_ID 식별자에서 참조됩니다.

  • 외부 물리적 네트워크에 액세스할 수 있는 네트워크 어댑터에 PCIe VF(가상 함수)를 제공하는 하나 이상의 VPort입니다.

    참고 네트워크 액세스를 위해 PF에 추가 VPort를 만들고 할당할 수 있습니다.

PF

PF(물리적 함수)는 SR-IOV 인터페이스를 지원하는 NIC의 PCIe 함수이다. PF에는 PCIe 구성 공간에 SR-IOV 확장 기능이 포함되어 있다. 이 기능은 가상화를 사용하도록 설정하고 PCIe VF를 노출하는 등 NIC의 SR-IOV 기능을 구성하고 관리하는 데 사용된다.

PF는 Hyper-V 부모 파티션의 관리 운영 체제에서 가상 NIC으로 노출된다. PF 미니포트 드라이버는 관리 운영 체제에서 PF를 관리하는 NDIS 미니포트 드라이버이다. VF를 지원하기 위한 다른 하드웨어 및 소프트웨어 리소스와 함께 VF의 구성 및 프로비전은 PF 미니포트 드라이버를 통해 수행되나. PF 미니포트 드라이버는 기존의 NDIS 미니포트 드라이버 기능을 사용하여 관리 운영 체제에 대한 네트워킹 I/O 리소스에 대한 액세스를 제공한다. PF 드라이버는 VF 어댑터에 할당된 리소스를 관리하는 방법으로도 사용된다.

  • Hyper-V 부모 파티션에 대한 네트워크 연결을 제공하는 가상 네트워크 어댑터입니다.
  • 할당된 VF가 없는 Hyper-V 자식 파티션에 대한 네트워크 연결을 제공하는 가상 네트워크 어댑터입니다.

VF

PCI Express(PCIe) VF(가상 함수)는 SR-IOV(단일 루트 I/O 가상화)를 지원하는 네트워크 어댑터의 경량 PCIe 함수입니다.

VF는 네트워크 어댑터의 PCIe PF(물리적 함수)와 연결되며 네트워크 어댑터의 가상화된 인스턴스를 나타냅니다. 각 VF에는 자체 PCI 구성 공간이 있습니다. 또한 각 VF는 네트워크 어댑터에 있는 하나 이상의 물리적 리소스(예: 외부 네트워크 포트)를 PF 및 기타 VF와 공유합니다.

VF는 본격적인 PCIe 디바이스가 아닙니다. 그러나 Hyper-V 자식 파티션과 기본 SR-IOV 네트워크 어댑터 간에 데이터를 직접 전송하기 위한 기본 메커니즘을 제공합니다. 데이터 전송에 연결된 소프트웨어 리소스는 VF에서 직접 사용할 수 있으며 다른 VF 또는 PF에서 사용하지 않도록 격리됩니다. 그러나 이러한 리소스의 대부분은 Hyper-V 부모 파티션의 관리 운영 체제에서 실행되는 PF 미니포트 드라이버에 의해 수행됩니다.

VF는 Hyper-V 자식 파티션에서 실행되는 게스트 운영 체제에서 가상 네트워크 어댑터(VF 네트워크 어댑터)로 노출됩니다. VF가 SR-IOV 네트워크 어댑터의 NIC 스위치에서 VPort(가상 포트)와 연결되면 VM에서 실행되는 VPCI(가상 PCI) 드라이버가 VF 네트워크 어댑터를 노출합니다. 노출되면 게스트 운영 체제의 PnP 관리자가 VF 미니포트 드라이버를 로드합니다.

VPort

VPort(가상 포트)는 SR-IOV(단일 루트 I/O 가상화)를 지원하는 네트워크 어댑터의 NIC 스위치에 있는 내부 포트를 나타내는 데이터 개체입니다. 각 NIC 스위치에는 네트워크 연결에 대해 다음과 같은 포트가 있습니다.

  • 외부 물리적 네트워크에 연결하기 위한 하나의 외부 물리적 포트입니다.

  • PCI PF(Express Physical Function) 또는 VF(가상 함수)에 연결된 하나 이상의 내부 VPort입니다.

    PF는 Hyper-V 부모 파티션에 연결되며 해당 파티션에서 실행되는 관리 운영 체제의 가상 네트워크 어댑터로 노출됩니다.

    VF는 Hyper-V 자식 파티션에 연결되고 해당 파티션에서 실행되는 게스트 운영 체제의 가상 네트워크 어댑터로 노출됩니다.

NIC 스위치는 네트워크 트래픽을 물리적 포트에서 하나 이상의 VPort로 연결합니다. 이렇게 하면 기본 물리적 네트워크 인터페이스에 대한 가상화된 액세스 권한이 제공됩니다.

각 VPort에는 네트워크 어댑터의 NIC 스위치에 대해 고유한 고유 식별자(VPortId)가 있습니다. 기본 VPort는 항상 기본 NIC 스위치에 존재하며 삭제할 수 없습니다. 기본 VPort에는 NDIS_DEFAULT_VPORT_ID VPortId가 있습니다.

PF 미니포트 드라이버가 OID_NIC_SWITCH_CREATE_SWITCH OID(개체 식별자) 메서드 요청을 처리하면 해당 스위치에 대한 NIC 스위치와 기본 VPort가 만들어집니다. 기본 VPort는 항상 PF에 연결되며 항상 작동 상태입니다.

기본이 아닌 VPort는 OID_NIC_SWITCH_CREATE_VPORT OID 메서드 요청을 통해 만들어집니다. 기본이 아닌 VPort 하나만 VF에 연결할 수 있습니다. 연결되면 기본값은 작동 상태입니다. 하나 이상의 기본이 아닌 VPort를 만들어 PF에 연결할 수도 있습니다. 이러한 VPort는 만들 때 비 운용성이며 OID_NIC_SWITCH_VPORT_PARAMETERS OID 집합 요청을 통해 작동할 수 있습니다.

참고 자료
profile
그냥 기록하는 블로그

0개의 댓글