12.6. GPU デバイスの PCI パススルーの有効化
PCI パススルーを使用して、グラフィックカード等の物理 PCI デバイスをインスタンスに接続することができます。デバイスに PCI パススルーを使用する場合、インスタンスはタスクを実行するためにデバイスへの排他的アクセスを確保し、ホストはデバイスを利用することができません。
前提条件
-
pciutilsパッケージが PCI カードを持つ物理サーバーにインストールされている。 - GPU デバイスのドライバーが、デバイスをパススルーするインスタンスにインストールされている必要があります。したがって、必要な GPU ドライバーがインストールされたカスタムのインスタンスイメージを作成している必要があります。GPU ドライバーがインストールされたカスタムのインスタンスイメージを作成する方法についての詳細は、Creating a custom GPU instance image を参照してください。
手順
各パススルーデバイス種別のベンダー ID および製品 ID を確認するには、PCI カードを持つ物理サーバーで以下のコマンドを入力します。
lspci -nn | grep -i <gpu_name>
# lspci -nn | grep -i <gpu_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、NVIDIA GPU のベンダーおよび製品 ID を確認するには、以下のコマンドを入力します。
lspci -nn | grep -i nvidia
# lspci -nn | grep -i nvidia 3b:00.0 3D controller [0302]: NVIDIA Corporation TU104GL [Tesla T4] [10de:1eb8] (rev a1) d8:00.0 3D controller [0302]: NVIDIA Corporation TU104GL [Tesla T4] [10de:1db4] (rev a1)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 各 PCI デバイスに Single Root I/O Virtualization (SR-IOV) 機能があるかどうかを確認するには、PCI カードを持つ物理サーバーで以下のコマンドを入力します。
lspci -v -s 3b:00.0
# lspci -v -s 3b:00.0 3b:00.0 3D controller: NVIDIA Corporation TU104GL [Tesla T4] (rev a1) ... Capabilities: [bcc] Single Root I/O Virtualization (SR-IOV) ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
PCI パススルー用にオーバークラウド上のコントローラーノードを設定するには、環境ファイル (例:
pci_passthru_controller.yaml) を作成します。 pci_passthru_controller.yamlのNovaSchedulerDefaultFiltersパラメーターにPciPassthroughFilterを追加します。parameter_defaults: NovaSchedulerDefaultFilters: ['AvailabilityZoneFilter','ComputeFilter','ComputeCapabilitiesFilter','ImagePropertiesFilter','ServerGroupAntiAffinityFilter','ServerGroupAffinityFilter','PciPassthroughFilter','NUMATopologyFilter']
parameter_defaults: NovaSchedulerDefaultFilters: ['AvailabilityZoneFilter','ComputeFilter','ComputeCapabilitiesFilter','ImagePropertiesFilter','ServerGroupAntiAffinityFilter','ServerGroupAffinityFilter','PciPassthroughFilter','NUMATopologyFilter']Copy to Clipboard Copied! Toggle word wrap Toggle overflow コントローラーノード上のデバイスの PCI エイリアスを指定するには、以下の設定を
pci_passthru_controller.yamlに追加します。PCI デバイスに SR-IOV 機能がある場合:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow PCI デバイスに SR-IOV 機能がない場合:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow device_typeフィールドの設定に関する詳細は、PCI passthrough device type field を参照してください。注記nova-apiサービスが Controller 以外のロールで実行されている場合は、ControllerExtraConfigを<Role>ExtraConfigの形式でユーザーロールに置き換えます。
-
PCI パススルー用にオーバークラウド上のコンピュートノードを設定するには、環境ファイル (例:
pci_passthru_compute.yaml) を作成します。 コンピュートノード上のデバイスで利用可能な PCI を指定するには、以下の設定を
pci_passthru_compute.yamlに追加します。parameter_defaults: NovaPCIPassthrough: - vendor_id: "10de" product_id: "1eb8"parameter_defaults: NovaPCIPassthrough: - vendor_id: "10de" product_id: "1eb8"Copy to Clipboard Copied! Toggle word wrap Toggle overflow インスタンスの移行およびサイズ変更の操作を行うために、コンピュートノードの PCI エイリアスのコピーを作成する必要があります。コンピュートノード上のデバイスの PCI エイリアスを指定するには、以下の設定を
pci_passthru_compute.yamlに追加します。PCI デバイスに SR-IOV 機能がある場合:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow PCI デバイスに SR-IOV 機能がない場合:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記コンピュートノードのエイリアスは、コントローラーノードのエイリアスと同じでなければなりません。
PCI パススルーをサポートするためにコンピュートノードのサーバー BIOS で IOMMU を有効にするには、
pci_passthru_compute.yamlにKernelArgsパラメーターを追加します。parameter_defaults: ... ComputeParameters: KernelArgs: "intel_iommu=on iommu=pt"parameter_defaults: ... ComputeParameters: KernelArgs: "intel_iommu=on iommu=pt"Copy to Clipboard Copied! Toggle word wrap Toggle overflow その他の環境ファイルと共にこれらのカスタム環境ファイルをスタックに追加して、オーバークラウドをデプロイします。
openstack overcloud deploy --templates \ -e [your environment files] \ -e /home/stack/templates/pci_passthru_controller.yaml \ -e /home/stack/templates/pci_passthru_compute.yaml
(undercloud)$ openstack overcloud deploy --templates \ -e [your environment files] \ -e /home/stack/templates/pci_passthru_controller.yaml \ -e /home/stack/templates/pci_passthru_compute.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow PCI デバイスを要求するためのフレーバーを設定します。以下の例では、それぞれベンダー ID および製品 ID が
10deおよび13f2の 2 つのデバイスをリクエストします。openstack flavor set m1.large \ --property "pci_passthrough:alias"="t4:2"
# openstack flavor set m1.large \ --property "pci_passthrough:alias"="t4:2"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
PCI パススルーデバイスを設定してインスタンスを作成します。
openstack server create --flavor m1.large \ --image <custom_gpu> --wait test-pci
# openstack server create --flavor m1.large \ --image <custom_gpu> --wait test-pciCopy to Clipboard Copied! Toggle word wrap Toggle overflow <custom_gpu>を、必要な GPU ドライバーがインストールされたカスタムインスタンスイメージの名前に置き換えます。- クラウドユーザーとしてインスタンスにログインします。
インスタンスが GPU にアクセスできることを確認するには、インスタンスから以下のコマンドを入力します。
lspci -nn | grep <gpu_name>
$ lspci -nn | grep <gpu_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow NVIDIA System Management Interface のステータスを確認するには、インスタンスから以下のコマンドを入力します。
nvidia-smi
$ nvidia-smiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow