5.2. PCI 패스스루 컴퓨팅 노드 구성

클라우드 사용자가 PCI 장치가 연결된 인스턴스를 생성할 수 있도록 하려면 PCI 장치와 컨트롤러 노드가 있는 컴퓨팅 노드 모두를 구성해야 합니다.

절차

  1. 환경 파일을 생성하여 PCI 패스스루의 오버클라우드에서 컨트롤러 노드를 구성합니다(예: pci_passthrough_controller.yaml ).
  2. pci_pass through_controller.yaml의 NovaSchedulerDefaultFilters 매개변수에 PciPass throughFilter를 추가합니다.

    parameter_defaults:
      NovaSchedulerDefaultFilters: ['AvailabilityZoneFilter','ComputeFilter','ComputeCapabilitiesFilter','ImagePropertiesFilter','ServerGroupAntiAffinityFilter','ServerGroupAffinityFilter','PciPassthroughFilter','NUMATopologyFilter']
  3. 컨트롤러 노드에서 장치의 PCI 별칭을 지정하려면 pci_passthrough_controller.yaml에 다음 구성을 추가합니다.

    parameter_defaults:
      ...
      ControllerExtraConfig:
        nova::pci::aliases:
          - name: "a1"
            product_id: "1572"
            vendor_id: "8086"
            device_type: "type-PF"

    device_type 필드 구성에 대한 자세한 내용은 PCI 패스스루 장치 유형 필드를 참조하십시오.

    참고

    nova-api 서비스가 Controller 역할과 다른 역할에서 실행 중인 경우 Controller ExtraConfig<Role>ExtraConfig 형식의 사용자 역할로 교체합니다.

  4. 선택 사항: PCI 패스스루 장치에 대한 기본 NUMA 선호도 정책을 설정하려면 3단계의 nova::pci::aliases: 구성에 numa_policy 를 추가합니다.

    parameter_defaults:
      ...
      ControllerExtraConfig:
        nova::pci::aliases:
          - name: "a1"
            product_id: "1572"
            vendor_id: "8086"
            device_type: "type-PF"
            numa_policy: "preferred"
  5. PCI 패스스루에 대해 오버클라우드에서 Compute 노드를 구성하려면 환경 파일(예: pci_passthrough_compute.yaml )을 생성합니다.
  6. Compute 노드에서 장치에 사용 가능한 PCI를 지정하려면 vendor_id 및 product_id 옵션을 사용하여 인스턴스 통과에 사용할 수 있는 PCI 장치 풀에 일치하는 모든 PCI 장치를 추가합니다. 예를 들어 인스턴스에 대한 패스스루에 사용할 수 있는 PCI 장치 풀에 Intel® 이더넷 컨트롤러 X710 장치를 추가하려면 pci_passthrough_compute.yaml에 다음 구성을 추가합니다.

    parameter_defaults:
      ...
      ComputePCIParameters:
        NovaPCIPassthrough:
          - vendor_id: "8086"
            product_id: "1572"

    NovaPCIPassthrough 구성 방법에 대한 자세한 내용은 NovaPCIPassthrough 구성을 위한 지침을 참조하십시오 .

  7. 인스턴스 마이그레이션 및 크기 조정 작업을 위해 컴퓨팅 노드에 PCI 별칭 사본을 생성해야 합니다. PCI 패스스루 컴퓨팅 노드에서 장치의 PCI 별칭을 지정하려면 pci_passthrough_compute.yaml에 다음을 추가합니다.

    parameter_defaults:
      ...
      ComputePCIExtraConfig:
        nova::pci::aliases:
          - name: "a1"
            product_id: "1572"
            vendor_id: "8086"
            device_type: "type-PF"
    참고

    컴퓨팅 노드 별칭은 컨트롤러 노드의 별칭과 동일해야 합니다. 따라서 pci_passthrough _ controller.yaml의 nova::pci::aliases 에 numa_affinity 를 추가한 경우 pci_ passthrough_compute.yamlnova::pci::aliases 에도 추가해야 합니다.

  8. Compute 노드의 서버 BIOS에서 IOMMU를 활성화하여 PCI 패스스루를 지원하려면 KernelArgs 매개변수를 pci_passthrough_compute.yaml 에 추가합니다. 예를 들어 다음 KernalArgs 설정을 사용하여 Intel IOMMU를 활성화합니다.

    parameter_defaults:
      ...
      ComputePCIParameters:
        KernelArgs: "intel_iommu=on iommu=pt"

    AMD IOMMU를 사용하려면 KernelArgs"amd_iommu=on iommu=pt" 로 설정합니다.

  9. 다른 환경 파일을 사용하여 스택에 사용자 지정 환경 파일을 추가하고 오버클라우드를 배포합니다.

    (undercloud)$ openstack overcloud deploy --templates \
      -e [your environment files] \
      -e /home/stack/templates/pci_passthrough_controller.yaml \
      -e /home/stack/templates/pci_passthrough_compute.yaml \
  10. 클라우드 사용자가 PCI 장치를 요청하는 데 사용할 수 있는 플레이버를 생성하고 구성합니다. 다음 예제에서는 각각 7단계에 정의된 별칭을 사용하여 공급업체 ID가 8086 이고 제품 ID가 1572 인 두 개의 장치를 요청합니다.

    (overcloud)# openstack flavor set \
     --property "pci_passthrough:alias"="a1:2" device_passthrough
  11. 선택 사항: PCI 통과 장치의 기본 NUMA 선호도 정책을 재정의하려면 플레이버 또는 이미지에 NUMA 선호도 정책 키를 추가할 수 있습니다.

    • 플레이버를 사용하여 기본 NUMA 선호도 정책을 재정의하려면 hw:pci_numa_affinity_policy 속성 키를 추가합니다.

      (overcloud)# openstack flavor set \
       --property "hw:pci_numa_affinity_policy"="required" \
       device_passthrough

      hw:pci_numa_affinity_policy 의 유효한 값에 대한 자세한 내용은 Flavor metadata 를 참조하십시오.

    • 이미지를 사용하여 기본 NUMA 선호도 정책을 재정의하려면 hw_pci_numa_affinity_policy 속성 키를 추가합니다.

      (overcloud)# openstack image set \
       --property hw_pci_numa_affinity_policy=required \
       device_passthrough_image
      참고

      이미지와 플레이버 모두에 NUMA 선호도 정책을 설정하면 속성 값이 일치해야 합니다. 플레이버 설정이 이미지와 기본 설정보다 우선합니다. 따라서 이미지에 대한 NUMA 선호도 정책의 구성은 플레이버에 특성이 설정되지 않은 경우에만 적용됩니다.

검증

  1. PCI 패스스루 장치를 사용하여 인스턴스를 생성합니다.

    # openstack server create --flavor device_passthrough \
     --image <image> --wait test-pci
  2. 클라우드 사용자로 인스턴스에 로그인합니다. 자세한 내용은 인스턴스에 연결을 참조하십시오.
  3. 인스턴스에서 PCI 장치에 액세스할 수 있는지 확인하려면 인스턴스에서 다음 명령을 입력합니다.

    $ lspci -nn | grep <device_name>