第5章 PCI パススルーの設定
PCI パススルーを使用して、グラフィックカードまたはネットワークデバイス等の物理 PCI デバイスをインスタンスにアタッチすることができます。デバイスに PCI パススルーを使用する場合、インスタンスはタスクを実行するためにデバイスへの排他的アクセスを確保し、ホストはデバイスを利用することができません。
ルーティング対応プロバイダーネットワークでの PCI パススルーの使用
Compute サービスは、複数のプロバイダーネットワークにまたがる単一のネットワークをサポートしません。ネットワークに複数の物理ネットワークが含まれる場合、Compute サービスは最初の物理ネットワークだけを使用します。したがって、ルーティング対応プロバイダーネットワークを使用する場合は、すべてのコンピュートノードで同じ physical_network
名を使用する必要があります。
VLAN またはフラットネットワークのルーティング対応プロバイダーネットワークを使用する場合は、すべてのセグメントで同じ physical_network
名を使用する必要があります。その後、ネットワークに複数のセグメントを作成し、そのセグメントを適切なサブネットにマッピングします。
クラウドユーザーが PCI デバイスがアタッチされたインスタンスを作成できるようにするには、以下の手順を実施する必要があります。
- PCI パススルー用のコンピュートノードを指定する。
- 必要な PCI デバイスを持つ PCI パススルー用のコンピュートノードを設定する。
- オーバークラウドをデプロイする。
- PCI デバイスがアタッチされたインスタンスを起動するためのフレーバーを作成する。
前提条件
- 必要な PCI デバイスを持つコンピュートノード
5.1. PCI パススルー用コンピュートノードの指定
物理 PCI デバイスがアタッチされたインスタンス用にコンピュートノードを指定するには、PCI パススルーロールを設定するための新規ロールファイルを作成し、PCI パススルーのためにコンピュートノードをタグ付けするための新規オーバークラウドフレーバーおよび PCI パススルーリソースクラスを設定する必要があります。
手順
-
アンダークラウドに
stack
ユーザーとしてログインします。 stackrc
ファイルを取得します。[stack@director ~]$ source ~/stackrc
roles_data_pci_passthrough.yaml
という名前で、Controller
、Compute
、およびComputePCI
ロールが含まれる新しいロールデータファイルを生成します。(undercloud)$ openstack overcloud roles \ generate -o /home/stack/templates/roles_data_pci_passthrough.yaml \ Compute:ComputePCI Compute Controller
roles_data_pci_passthrough.yaml
を開き、以下のパラメーターおよびセクションを編集または追加します。セクション/パラメーター 現在の値 新しい値 ロールのコメント
Role: Compute
Role: ComputePCI
ロール名
Compute
name: ComputePCI
description
Basic Compute Node role
PCI パススルー用コンピュートノードロール
HostnameFormatDefault
%stackname%-novacompute-%index%
%stackname%-novacomputepci-%index%
deprecated_nic_config_name
compute.yaml
compute-pci-passthrough.yaml
-
オーバークラウドの PCI パススルー用コンピュートノードをノード定義のテンプレート
node.json
またはnode.yaml
に追加して、そのノードを登録します。詳細は、director のインストールと使用方法 の オーバークラウドノードの登録 を参照してください。 ノードのハードウェアを検査します。
(undercloud)$ openstack overcloud node introspect \ --all-manageable --provide
詳細は、Director Installation and Usage ガイドの Creating an inventory of the bare-metal node hardware を参照してください。
PCI パススルーを使用するコンピュートノード用の
compute-pci-passthrough
オーバークラウドフレーバーを作成します。(undercloud)$ openstack flavor create --id auto \ --ram <ram_size_mb> --disk <disk_size_gb> \ --vcpus <no_vcpus> compute-pci-passthrough
-
<ram_size_mb>
をベアメタルノードの RAM (MB 単位) に置き換えます。 -
<disk_size_gb>
をベアメタルノード上のディスク容量 (GB 単位) に置き換えます。 <no_vcpus>
をベアメタルノードの CPU 数に置き換えます。注記これらの属性は、インスタンスのスケジューリングには使用されません。ただし Compute スケジューラーは、ディスク容量を使用してルートパーティションのサイズを決定します。
-
ノードリストを取得して UUID を把握します。
(undercloud)$ openstack baremetal node list
PCI パススルー用に指定する各ベアメタルノードに、カスタムの PCI パススルーリソースクラスをタグ付けします。
(undercloud)$ openstack baremetal node set \ --resource-class baremetal.PCI-PASSTHROUGH <node>
<node>
をベアメタルノードの ID に置き換えてください。compute-pci-passthrough
フレーバーをカスタムの PCI パススルーリソースクラスに関連付けます。(undercloud)$ openstack flavor set \ --property resources:CUSTOM_BAREMETAL_PCI_PASSTHROUGH=1 \ compute-pci-passthrough
Bare Metal サービスノードのリソースクラスに対応するカスタムリソースクラスの名前を指定するには、リソースクラスを大文字に変換し、すべての句読点をアンダースコアに置き換え、
CUSTOM_
の接頭辞を追加します。注記フレーバーが要求できるのは、ベアメタルリソースクラスの 1 つのインスタンスだけです。
以下のフレーバー属性を設定して、Compute スケジューラーがインスタンスのスケジューリングにベアメタルフレーバー属性を使用するのを防ぎます。
(undercloud)$ openstack flavor set \ --property resources:VCPU=0 --property resources:MEMORY_MB=0 \ --property resources:DISK_GB=0 compute-pci-passthrough
以下のパラメーターを
node-info.yaml
ファイルに追加して、PCI パススルー用コンピュートノードの数および PCI パススルー対応コンピュートノードに使用するフレーバーを指定します。parameter_defaults: OvercloudComputePCIFlavor: compute-pci-passthrough ComputePCICount: 3
ロールが作成されたことを確認するには、以下のコマンドを入力します。
(undercloud)$ openstack overcloud profiles list