6.2. SR-IOV 구성

단일 루트 I/O 가상화(SR-IOV)를 사용하여 RHOSP(Red Hat OpenStack Platform)를 배포하려면 인스턴스에 직접 액세스를 요청할 수 있는 SR-IOV 기능이 있는 공유 PCIe 리소스를 구성합니다.

참고

다음 CPU 할당, 메모리 할당, NIC 구성은 예제이며 사용 사례와 다를 수 있습니다.

절차

  1. stack 사용자로 언더클라우드에 로그인합니다.
  2. stackrc 파일을 소싱합니다.

    [stack@director ~]$ source ~/stackrc
  3. ControllerComputeSriov 역할을 포함하는 roles_data_compute_sriov.yaml 이라는 새 역할 데이터 파일을 생성합니다.

    (undercloud)$ openstack overcloud roles \
     generate -o /home/stack/templates/roles_data_compute_sriov.yaml \
     Controller ComputeSriov

    ComputeSriov 는 기본 컴퓨팅 서비스 외에도 NeutronSriovAgent,NeutronSriovHostConfig 서비스를 포함하는 RHOSP 설치에 제공되는 사용자 지정 역할입니다.

  4. SR-IOV 컨테이너를 준비하려면 overcloud_images.yaml 파일을 생성할 때 neutron-sriov.yamlroles_data_compute_sriov.yaml 파일을 포함합니다.

    $ sudo openstack tripleo container image prepare \
      --roles-file ~/templates/roles_data_compute_sriov.yaml \
      -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-sriov.yaml \
      -e ~/containers-prepare-parameter.yaml \
      --output-env-file=/home/stack/templates/overcloud_images.yaml

    컨테이너 이미지 준비에 대한 자세한 내용은 Director 설치 및 사용 가이드컨테이너 이미지 준비를 참조하십시오.

  5. 환경 파일 디렉터리에 /usr/share/openstack-tripleo-heat-templates/environments/network-environment.yaml 파일의 사본을 생성합니다.

    $ cp /usr/share/openstack-tripleo-heat-templates/environments/network-environment.yaml /home/stack/templates/network-environment-sriov.yaml
  6. network-environment-sriov.yaml 파일에서 parameter_defaults 아래에 다음 매개변수를 추가하여 클러스터 및 하드웨어 구성에 대한 SR-IOV 노드를 구성합니다.

      NeutronNetworkType: 'vlan'
      NeutronNetworkVLANRanges:
        - tenant:22:22
        - tenant:25:25
      NeutronTunnelTypes: ''
  7. 각 PCI 장치 유형에 대한 vendor_id 및 product_id 를 확인하려면 PCI 카드가 있는 물리적 서버에서 다음 명령 중 하나를 사용합니다.

    • 배포된 오버클라우드에서 vendor_idproduct_id 를 반환하려면 다음 명령을 사용합니다.

      # lspci -nn -s  <pci_device_address>
      3b:00.0 Ethernet controller [0200]: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ [<vendor_id>: <product_id>] (rev 02)
    • 오버클라우드를 아직 배포하지 않은 경우 PF(실제 기능)의 vendor _id 및 product_id 를 반환하려면 다음 명령을 사용합니다.

      (undercloud) [stack@undercloud-0 ~]$ openstack baremetal introspection data save <baremetal_node_name> | jq '.inventory.interfaces[] | .name, .vendor, .product'
  8. network-environment-sriov.yaml 파일에서 SR-IOV 컴퓨팅 노드에 대한 역할별 매개변수를 구성합니다.

      ComputeSriovParameters:
        IsolCpusList: "1-19,21-39"
        KernelArgs: "default_hugepagesz=1GB hugepagesz=1G hugepages=32 iommu=pt intel_iommu=on isolcpus=1-19,21-39"
        TunedProfileName: "cpu-partitioning"
        NeutronBridgeMappings:
          - tenant:br-link0
        NeutronPhysicalDevMappings:
          - tenant:p7p1
        NovaComputeCpuDedicatedSet: '1-19,21-39'
        NovaReservedHostMemory: 4096
    참고

    NovaVcpuPinSet 매개변수는 더 이상 사용되지 않으며 전용 고정된 워크로드에서 NovaComputeCpuDedicatedSet 으로 교체됩니다.

  9. network-environment-sriov.yaml 파일에서 SR-IOV 컴퓨팅 노드의 PCI 패스스루 장치를 구성합니다.

      ComputeSriovParameters:
        ...
        NovaPCIPassthrough:
          - vendor_id: "<vendor_id>"
            product_id: "<product_id>"
            address: <NIC_address>
            physical_network: "<physical_network>"
        ...
    • <vendor_id> 를 PCI 장치의 공급업체 ID로 바꿉니다.
    • <product_id> 를 PCI 장치의 제품 ID로 바꿉니다.
    • <NIC_address> 를 PCI 장치의 주소로 바꿉니다. address 매개변수를 구성하는 방법에 대한 자세한 내용은 Configuring the Compute Service for Instance Creation 가이드의 NovaPCIPassthrough에 대한 지침을 참조하십시오.
    • <physical_network> 를 PCI 장치가 있는 물리적 네트워크의 이름으로 바꿉니다.

      참고

      NIC의 장치 이름이 변경될 수 있으므로 PCI 패스스루를 구성할 때 devname 매개변수를 사용하지 마십시오. PF에서 네트워킹 서비스(neutron) 포트를 생성하려면 NovaPCIPassthrough 에서 vendor _id, product _id 및 PCI 장치 주소를 지정하고 --vnic-type direct-physical 옵션을 사용하여 포트를 만듭니다. 가상 기능(VF)에서 네트워킹 서비스 포트를 생성하려면 NovaPCIPassthrough 에서 vendor_idproduct_id 를 지정하고 --vnic-type direct 옵션을 사용하여 포트를 생성합니다. vendor_idproduct_id 매개변수 값은 물리적 기능(PF)과 VF 컨텍스트마다 다를 수 있습니다. NovaPCIPassthrough 구성 방법에 대한 자세한 내용은 인스턴스 생성 용 Compute 서비스 구성 가이드의 NovaPCIPassthrough구성 지침을 참조하십시오.

  10. compute.yaml 네트워크 구성 템플릿에서 SR-IOV가 활성화된 인터페이스를 구성합니다. SR-IOV VF를 생성하려면 인터페이스를 독립 실행형 NIC로 구성합니다.

                 - type: sriov_pf
                    name: p7p3
                    mtu: 9000
                    numvfs: 10
                    use_dhcp: false
                    defroute: false
                    nm_controlled: true
                    hotplug: true
                    promisc: false
    
                  - type: sriov_pf
                    name: p7p4
                    mtu: 9000
                    numvfs: 10
                    use_dhcp: false
                    defroute: false
                    nm_controlled: true
                    hotplug: true
                    promisc: false
    참고

    numvfs 매개변수는 네트워크 구성 템플릿의 NeutronSriovNumVFs 매개변수를 대체합니다. Red Hat은 배포 후 NeutronSriovNumVFs 매개변수 또는 numvfs 매개 변수의 수정을 지원하지 않습니다. 배포 후 매개변수 중 하나를 수정하면 해당 PF에 SR-IOV 포트가 있는 실행 중인 인스턴스가 중단될 수 있습니다. 이 경우 SR-IOV PCI 장치를 다시 사용하려면 이러한 인스턴스를 하드 재부팅해야 합니다.

  11. 기본 필터 목록에 AggregateInstanceExtraSpecsFilter 값이 포함되어 있는지 확인합니다.

    NovaSchedulerDefaultFilters: ['AvailabilityZoneFilter','ComputeFilter','ComputeCapabilitiesFilter','ImagePropertiesFilter','ServerGroupAntiAffinityFilter','ServerGroupAffinityFilter','PciPassthroughFilter','AggregateInstanceExtraSpecsFilter']
  12. overcloud_deploy.sh 스크립트를 실행합니다.