第4章 コンピュートノードで CPU を設定する


クラウドユーザーは、インスタンスのスケジューリングおよび配置を設定して、最大のパフォーマンスを得ることができます。そのためには、NFV や高性能コンピューティング (HPC) などの特化されたワークロードを対象にするカスタムフレーバーを作成します。

以下の機能を使用して、最適な CPU パフォーマンスを得るためにインスタンスを調整します。

  • CPU ピニング: 仮想 CPU を物理 CPU に固定します。
  • エミュレータースレッド: インスタンスに関連付けられたエミュレータースレッドを物理 CPU に固定します。
  • CPU 機能フラグ: コンピュートノード間のライブマイグレーションの互換性を向上させるために、インスタンスに適用される CPU 機能フラグの標準セットを設定します。

4.1. コンピュートノードでの CPU ピニングの設定

コンピュートノードで CPU ピニングを有効化することで、各インスタンスの CPU プロセスを専用のホスト CPU で実行するように設定することができます。インスタンスが CPU ピニングを使用する場合には、各インスタンスの仮想 CPU プロセスには、他のインスタンスの仮想 CPU プロセスが使用できない独自のホストの物理 CPU が割り当てられます。CPU ピニングが設定されたコンピュートノード上で動作するインスタンスには、NUMA トポロジーがあります。インスタンスの NUMA トポロジーの各 NUMA ノードは、ホストコンピュートノード上の NUMA ノードにマッピングされます。

専用の (ピニングされた) CPU を持つインスタンスと共有 (フローティング) の CPU を持つインスタンスを同じコンピュートノード上にスケジューリングするように、Compute のスケジューラーを設定することができます。NUMA トポロジーを持つコンピュートノード上で CPU ピニングを設定するには、以下の手順を実施する必要があります。

  1. CPU ピニング用のコンピュートノードを指定する。
  2. ピニングされたインスタンス仮想 CPU プロセス、フローティングのインスタンス仮想 CPU プロセス、およびホストのプロセス用にホストコアを確保するようにコンピュートノードを設定する。
  3. データプレーンをデプロイします。
  4. CPU ピニングを要求するインスタンスを起動するためのフレーバーを作成する。
  5. 共有 (あるいはフローティング) の CPU を使用するインスタンスを起動するためのフレーバーを作成する。
注記

CPU ピニングを設定すると、NUMA トポロジーが要求されていない場合でも、インスタンス上に暗黙的な NUMA トポロジーが作成されます。NUMA 仮想マシンと非 NUMA 仮想マシン (仮想マシン) を同じホストで実行しないでください。

4.1.1. 前提条件

  • コンピュートノードの NUMA トポロジーを把握している。
  • oc コマンドラインツールがワークステーションにインストールされている。
  • cluster-admin 権限を持つユーザーとして、Red Hat OpenStack Services on OpenShift (RHOSO) にログインしている。

4.1.2. CPU ピニング用コンピュートノードの指定と設定

固定された CPU を持つインスタンスにコンピュートノードを指定するには、新しい OpenStackDataPlaneNodeSet カスタムリソース (CR) を作成して設定し、CPU ピニング用に指定されたノードを設定する必要があります。ノードの NUMA トポロジーに基づいて、コンピュートノードでの CPU ピニングを設定します。効率を高めるために、全 NUMA ノードにわたって、CPU コアの一部をホストのプロセス用に確保します。残りの CPU コアをインスタンスの管理に割り当てます。以下の手順では、以下の NUMA トポロジー (8 つの CPU コアを 2 つの NUMA ノードに分散) を使用して、CPU ピニングの設定方法を説明します。

Expand
表4.1 NUMA トポロジーの例

NUMA ノード 0

NUMA ノード 1

コア 0

コア 1

コア 4

コア 5

コア 2

コア 3

コア 6

コア 7

以下の手順では、コア 0 および 4 をホストのプロセス用に、コア 1、3、5、および 7 を CPU ピニングが必要なインスタンス用に、そしてコア 2 および 6 を CPU ピニングが不要なフローティングインスタンス用に、それぞれ確保します。

注記

次の手順は、まだプロビジョニングされていない新しい OpenStackDataPlaneNodeSet CR に適用されます。すでにプロビジョニングされている既存の OpenStackDataPlaneNodeSet を再設定するには、まず OpenStackDataPlaneNodeSet 内のすべてのノードからゲストインスタンスを drain (Pod の退避) する必要があります。

注記

CPU ピニングを設定すると、NUMA トポロジーが要求されていない場合でも、インスタンス上に暗黙的な NUMA トポロジーが作成されます。NUMA 仮想マシンと非 NUMA 仮想マシン (仮想マシン) を同じホストで実行しないでください。

警告

ノードセット全体のみ設定できます。ノードセット内のノードのサブセットを再設定することはサポートされていません。ノードセット内のノードのサブセットを再設定する必要がある場合は、ノードセットをスケールダウンし、以前に削除したノードから新しいノードセットを作成する必要があります。

前提条件

  • CPU ピニングを指定して設定するノードを定義する OpenStackDataPlaneNodeSet CR を選択済みである。OpenStackDataPlaneNodeSet CR の作成の詳細は、Red Hat OpenStack Services on OpenShift のデプロイガイドの データプレーンの作成 を参照してください。

手順

  1. nova-extra-config.yaml という名前の ConfigMap CR を更新または作成し、[compute] および [default] の下にあるパラメーターの値を設定します。

    apiVersion: v1
    kind: ConfigMap
    metadata:
       name: nova-extra-config
       namespace: openstack
    data:
       25-nova-cpu-pinning.conf: | 
    1
    
          [compute]
          cpu_shared_set = 2,6 
    2
    
          cpu_dedicated_set = 1,3,5,7 
    3
    
          [DEFAULT]
          reserved_huge_pages = node:0,size:4,count:131072 
    4
    
          reserved_huge_pages = node:1,size:4,count:131072
    1
    新しいコンピュート設定ファイルの名前。nova-operator は、01-nova.conf という名前のデフォルト設定ファイルを生成します。デフォルト名は、transport_url などのインフラストラクチャー設定をオーバーライドするため、使用しないでください。nova-compute サービスは、/etc/nova/nova.conf.d/ の下にあるファイルをすべて辞書順に適用します。そのため、後のファイルで定義された設定は、前のファイルで定義された同じ設定をオーバーライドします。
    2
    共有インスタンス用に物理 CPU コアを予約します。
    3
    専用インスタンス用に物理 CPU コアを予約します。
    4
    NUMA ノードごとに予約するメモリーの量を指定します。

    ConfigMap オブジェクトの作成の詳細は、ノードconfig map の作成と使用 を参照してください。

  2. データプレーンノード上のサービスを設定するために新しい OpenStackDataPlaneDeployment CR を作成してデータプレーンをデプロイし、ワークステーション上の compute_cpu_pinning_deploy.yaml という名前のファイルに保存します。

    apiVersion: dataplane.openstack.org/v1beta1
    kind: OpenStackDataPlaneDeployment
    metadata:
      name: openstack-edpm-cpu-pinning

    OpenStackDataPlaneDeployment CR の作成の詳細は、Red Hat OpenStack Services on OpenShift のデプロイ ガイドの データプレーンのデプロイ を参照してください。

  3. compute_cpu_pinning_deploy.yaml で、デプロイするすべての OpenStackDataPlaneNodeSet CR を含めるように nodeSets を指定します。前提条件として選択した OpenStackDataPlaneNodeSet CR が含まれていることを確認してください。この OpenStackDataPlaneNodeSet CR は、CPU ピニングに指定するノードを定義します。

    警告

    デプロイメントに複数のノードセットがある場合、ノードセットと DataPlaneServices がどのように設定されているかにより、nova-extra-config.yaml ConfigMap への変更が複数のノードセットに直接影響する可能性があります。ノードセットが nova-extra-config ConfigMap を使用しているために再設定の影響を受けるかを確認するには、次の手順を実行します。

    1. ノードセットのサービスリストを確認し、nova を指す DataPlaneService の名前を見つけます。
    2. DataPlaneServiceedpmServiceType フィールドの値が nova に設定されていることを確認します。

      DataPlaneService の dataSources リストに nova-extra-config という名前の configMapRef が含まれている場合、このノードセットはこの ConfigMap を使用し、その結果この ConfigMap に加えた設定変更の影響を受けます。影響を受けるノードセットの一部を再設定しない場合は、これらのノードセットの別の ConfigMap を指す新しい DataPlaneService を作成する必要があります。

    apiVersion: dataplane.openstack.org/v1beta1
    kind: OpenStackDataPlaneDeployment
    metadata:
      name: openstack-edpm-cpu-pinning
    spec:
      nodeSets:
        - openstack-edpm
        - compute-cpu-pinning
        - ...
        - <nodeSet_name>
    • <nodeSet_name> は、データプレーンデプロイメントに含める OpenStackDataPlaneNodeSet CR の名前に置き換えます。
  4. compute_cpu_pinning_deploy.yaml デプロイメントファイルを保存します。
  5. データプレーンをデプロイします。

    $ oc create -f compute_cpu_pinning_deploy.yaml
  6. データプレーンがデプロイされていることを確認します。

    $ oc get openstackdataplanenodeset
    NAME           STATUS MESSAGE
    compute-cpu-pinning True   Deployed
  7. openstackclient のリモートシェルにアクセスし、デプロイされたコンピュートノードがコントロールプレーンに表示されることを確認します。

    $ oc rsh -n openstack openstackclient
    $ openstack hypervisor list

4.1.3. インスタンス用の専用 CPU フレーバーの作成

クラウドユーザーが専用の CPU を持つインスタンスを作成できるようにするには、インスタンス起動用の専用 CPU ポリシーが設定されたフレーバーを作成します。

前提条件

  • required cpu_thread_policy を使用する場合は、ホスト上で同時マルチスレッド (SMT) が設定済みである。SMT と非 SMT のコンピュートホストを混在させることができます。require cpu_thread_policy を持つフレーバーは SMT ホストに配置され、isolate を持つフレーバーは非 SMT に配置されている。
  • コンピュートノードが CPU ピニングを許可するように設定されている。詳細は、コンピュートノードでの CPU ピニングの設定 を参照してください。

手順

  1. CPU ピニングを要求するインスタンス用のフレーバーを作成します。

    $ openstack flavor create --ram <size_mb> \
     --disk <size_gb> --vcpus <num_guest_vcpus> pinned_cpus
  2. file-backed メモリーを使用していない場合は、フレーバーの hw:mem_page_size プロパティーで NUMA 対応メモリー割り当てを有効に設定します。

     $ openstack --os-compute-api=2.86 flavor set \
     --property hw:mem_page_size=<page_size> pinned_cpus
    • <page_size> は、次に示す有効な値のいずれかに置き換えます。

      • large: ホストでサポートされる最大のページサイズを選択します。x86_64 システムでは 2 MB または 1 GB です。
      • small: (デフォルト) ホストでサポートされる最小のページサイズを選択します。X86_64 システムでは、4 kB (通常のページ) です。
      • any : イメージに設定された hw_mem_page_size を使用してページサイズを選択します。ページサイズがイメージで指定されていない場合は、libvirt ドライバーで決定される、利用可能な最大のページサイズを選択します。
      • <pagesize>: ワークロードに具体的な要件がある場合、ページサイズを明示的に設定します。ページサイズには整数値を使用し、KB またはその他の標準単位で指定します。(例: 4kB、2MB、2048、1GB)。
    注記

    hw:mem_page_sizesmall または any に設定するには、インスタンスではないプロセス用に各 NUMA ノードで予約するメモリーページの量を設定しておく必要があります。

  3. ピニングされた CPU を要求するには、フレーバーの hw:cpu_policy 属性を dedicated に設定します。

    $ openstack --os-compute-api=2.86 flavor set \
     --property hw:cpu_policy=dedicated pinned_cpus
  4. オプショ: それぞれの仮想 CPU をスレッドシブリングに配置するには、フレーバーの hw:cpu_thread_policy 属性を require に設定します。

    $ openstack --os-compute-api=2.86 flavor set \
     --property hw:cpu_thread_policy=require pinned_cpus
    注記
    • ホストに SMT アーキテクチャーがない場合や、スレッドシブリングが利用可能な CPU コアが十分にない場合には、スケジューリングが失敗します。これを回避するには、hw:cpu_thread_policyrequire ではなく prefer に設定します。prefer ポリシーは、スレッドシブリングが利用可能な場合に使用されるデフォルトのポリシーです。
    • hw:cpu_thread_policy=isolate を使用する場合は、SMT を無効にするか、SMT をサポートしないプラットフォームを使用する必要があります。
  5. フレーバーにより専用の CPU を持つインスタンスが作成されることを確認するには、新しいフレーバーを使用してインスタンスを起動します。

    $ openstack server create --flavor pinned_cpus \
     --image <image> pinned_cpu_instance

4.1.4. インスタンス用の共有 CPU フレーバーの作成

クラウドユーザーが共有の (あるいはフローティング) CPU を使用するインスタンスを作成できるようにするには、インスタンス起動用の共有 CPU ポリシーが設定されたフレーバーを作成します。

前提条件

手順

  1. CPU ピニングを要求しないインスタンス用のフレーバーを作成します。

    $ openstack flavor create --ram <size_mb> \
     --disk <size_gb> --vcpus <no_reserved_vcpus> floating_cpus
  2. フローティング CPU を要求するには、フレーバーの hw:cpu_policy 属性を shared に設定します。

    $ openstack --os-compute-api=2.86 flavor set \
     --property hw:cpu_policy=shared floating_cpus

4.1.5. インスタンス用の混合 CPU フレーバーの作成

クラウドユーザーが専用 CPU と共有 CPU の組み合わせを持つインスタンスを作成できるようにするには、インスタンス起動用の混合 CPU ポリシーが設定されたフレーバーを作成します。

手順

  1. 専用 CPU と共有 CPU の組み合わせを要求するインスタンス用のフレーバーを作成します。

    $ openstack flavor create --ram <size_mb> \
     --disk <size_gb> --vcpus <number_of_reserved_vcpus> \
     --property hw:cpu_policy=mixed mixed_CPUs_flavor
  2. どの CPU を専用または共有にする必要があるかを指定します。

    $ openstack --os-compute-api=2.86 flavor set \
     --property hw:cpu_dedicated_mask=<CPU_MASK> \
     mixed_CPUs_flavor
    • <CPU_MASK> を、専用または共有にする必要のある CPU に置き換えます。

      • 専用 CPU を指定するには、CPU 番号または CPU 範囲を指定します。たとえば、CPU 2 と 3 を専用に指定し、残りのすべての CPU を共有に指定するには、プロパティーを 2-3 に設定します。
      • 共有 CPU を指定するには、CPU 番号または CPU 範囲の前にキャレット (^) を付けます。たとえば、CPU 0 と 1 を共有に指定し、残りのすべての CPU を専用に指定するには、プロパティーを ^0-1 に設定します。
  3. file-backed メモリーを使用していない場合は、フレーバーの hw:mem_page_size プロパティーで NUMA 対応メモリー割り当てを有効に設定します。

     $ openstack --os-compute-api=2.86 flavor set \
     --property hw:mem_page_size=<page_size> mixed_CPUs_flavor
    • <page_size> は、次に示す有効な値のいずれかに置き換えます。

      • large: ホストでサポートされる最大のページサイズを選択します。x86_64 システムでは 2 MB または 1 GB です。
      • small: (デフォルト) ホストでサポートされる最小のページサイズを選択します。X86_64 システムでは、4 kB (通常のページ) です。
      • any : イメージに設定された hw_mem_page_size を使用してページサイズを選択します。ページサイズがイメージで指定されていない場合は、libvirt ドライバーで決定される、利用可能な最大のページサイズを選択します。
      • <pagesize>: ワークロードに具体的な要件がある場合、ページサイズを明示的に設定します。ページサイズには整数値を使用し、KB またはその他の標準単位で指定します。(例: 4kB、2MB、2048、1GB)。

        注記

        hw:mem_page_sizesmall または any に設定するには、インスタンスではないプロセス用に各 NUMA ノードで予約するメモリーページの量を設定しておく必要があります。

4.1.6. 同時マルチスレッド (SMT) 対応のコンピュートノードでの CPU ピニングの設定

コンピュートノードが同時マルチスレッド (SMT) をサポートする場合、スレッドシブリングを専用または共有セットのいずれかにグルーピングします。スレッドシブリングは共通のハードウェアを共有するため、あるスレッドシブリング上で動作しているプロセスが、他のスレッドシブリングのパフォーマンスに影響を与える可能性があります。

たとえば、ホストは、SMT 対応のデュアルコア CPU に 4 つの論理 CPU コア (0、1、2、および 3) を認識します。この 4 つの CPU に対して、スレッドシブリングのペアが 2 つあります。

  • スレッドシブリング 1: 論理 CPU コア 0 および 2
  • スレッドシブリング 2: 論理 CPU コア 1 および 3

このシナリオでは、論理 CPU コア 0 および 1 を専用として、2 および 3 を共有として割り当てないでください。そうではなく、0 および 2 を専用として、1 および 3 を共有として割り当てます。

/sys/devices/system/cpu/cpuN/topology/thread_siblings_list のファイル。N は論理 CPU 番号で、スレッドペアが含まれます。以下のコマンドを使用して、スレッドシブリングである論理 CPU コアを特定できます。

# grep -H . /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | sort -n -t ':' -k 2 -u

以下の出力は、論理 CPU コア 0 と論理 CPU コア 2 が同じコア上のスレッドであることを示しています。

/sys/devices/system/cpu/cpu0/topology/thread_siblings_list:0,2
/sys/devices/system/cpu/cpu2/topology/thread_siblings_list:1,3

4.1.7. 関連情報

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る