3.7. NUMA 対応スケジューリングのための SR-IOV ネットワークトポロジーの除外


SR-IOV ネットワークリソースの Non-Uniform Memory Access (NUMA) ノードを Topology Manager にアドバタイズする場合を除外するには、SriovNetworkNodePolicy カスタムリソースで excludeTopology 仕様を設定できます。NUMA 対応 Pod のスケジューリングでより柔軟な SR-IOV ネットワークデプロイメントを行うには、この設定を使用します。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • CPU マネージャーのポリシーを static に設定している。CPU マネージャーの詳細は、関連情報 セクションを参照してください。
  • Topology Manager ポリシーを single-numa-node に設定している。
  • SR-IOV Network Operator がインストールされている。

手順

  1. SriovNetworkNodePolicy CR を作成します。

    1. 次の YAML を sriov-network-node-policy.yaml ファイルに保存し、環境に合わせて YAML 内の値を置き換えます。

      apiVersion: sriovnetwork.openshift.io/v1
      kind: SriovNetworkNodePolicy
      metadata:
        name: <policy_name>
        namespace: openshift-sriov-network-operator
      spec:
        resourceName: sriovnuma0 
      1
      
        nodeSelector:
          kubernetes.io/hostname: <node_name>
        numVfs: <number_of_Vfs>
        nicSelector: 
      2
      
          vendor: "<vendor_ID>"
          deviceID: "<device_ID>"
        deviceType: netdevice
        excludeTopology: true 
      3
      Copy to Clipboard Toggle word wrap
      1
      SR-IOV ネットワークデバイスプラグインのリソース名。この YAML は、サンプルの resourceName 値を使用します。
      2
      ネットワークインターフェイスコントローラー(NIC セレクター)を使用して Operator が設定するデバイスを特定します。
      3
      SR-IOV ネットワークリソースの NUMA ノードを Topology Manager にアドバタイスする場合を除外するには、値を true に設定します。デフォルト値は false です。
      注記

      多くの SriovNetworkNodePolicy リソースが同じ SR-IOV ネットワークリソースをターゲットにする場合、SriovNetworkNodePolicy リソースには excludeTopology 仕様と同じ値を指定する必要があります。そうでない場合、矛盾するポリシーは拒否されます。

    2. 次のコマンドを実行して、SriovNetworkNodePolicy リソースを作成します。成功した出力には、SriovNetworkNodePolicy リソースの名前と created ステータスがリスト表示されます。

      $ oc create -f sriov-network-node-policy.yaml
      Copy to Clipboard Toggle word wrap
  2. SriovNetwork CR を作成します。

    1. 次の YAML を sriov-network.yaml ファイルに保存します。その場合、YAML 内の値は環境に合わせて置き換えます。

      apiVersion: sriovnetwork.openshift.io/v1
      kind: SriovNetwork
      metadata:
        name: sriov-numa-0-network 
      1
      
        namespace: openshift-sriov-network-operator
      spec:
        resourceName: sriovnuma0 
      2
      
        networkNamespace: <namespace> 
      3
      
        ipam: |- 
      4
      
          {
            "type": "<ipam_type>",
          }
      Copy to Clipboard Toggle word wrap
      1
      sriov-numa-0-network は、SR-IOV ネットワークリソースの名前に置き換えます。
      2
      前の手順で作成した SriovNetworkNodePolicy CR のリソース名を指定します。この YAML は、サンプルの resourceName 値を使用します。
      3
      SR-IOV ネットワークリソースの namespace を入力します。
      4
      SR-IOV ネットワークの IP アドレス管理設定を入力します。
    2. 次のコマンドを実行して、SriovNetwork リソースを作成します。成功した出力には、SriovNetwork リソースの名前と created ステータスがリスト表示されます。

      $ oc create -f sriov-network.yaml
      Copy to Clipboard Toggle word wrap
  3. Pod を作成し、前の手順で作成した SR-IOV ネットワークリソースを割り当てます。

    1. 次の YAML を sriov-network-pod.yaml ファイルに保存します。その場合、YAML 内の値は環境に合わせて置き換えます。

      apiVersion: v1
      kind: Pod
      metadata:
        name: <pod_name>
        annotations:
          k8s.v1.cni.cncf.io/networks: |-
            [
              {
                "name": "sriov-numa-0-network", 
      1
      
              }
            ]
      spec:
        containers:
        - name: <container_name>
          image: <image>
          imagePullPolicy: IfNotPresent
          command: ["sleep", "infinity"]
      Copy to Clipboard Toggle word wrap
      1
      これは、SriovNetworkNodePolicy リソースを使用する SriovNetwork リソースの名前です。
    2. 次のコマンドを実行して、Pod リソースを作成します。予想される出力には、Pod リソースの名前と created ステータスが表示されます。

      $ oc create -f sriov-network-pod.yaml
      Copy to Clipboard Toggle word wrap

検証

  1. 次のコマンドを実行して、Pod のステータスを確認します。その場合、<pod_name> は Pod の名前に置き換えます。

    $ oc get pod <pod_name>
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                                     READY   STATUS    RESTARTS   AGE
    test-deployment-sriov-76cbbf4756-k9v72   1/1     Running   0          45h
    Copy to Clipboard Toggle word wrap

  2. ターゲット Pod とのデバッグセッションを開き、SR-IOV ネットワークリソースがメモリーおよび CPU リソースとは異なるノードにデプロイされていることを確認します。

    1. 次のコマンドを実行して、Pod とのデバッグセッションを開きます。その場合、<pod_name> はターゲット Pod の名前に置き換えます。

      $ oc debug pod/<pod_name>
      Copy to Clipboard Toggle word wrap
    2. /host をデバッグシェル内の root ディレクトリーとして設定します。デバッグ Pod は、Pod 内の /host にホストからのルートファイルシステムをマウントします。ルートディレクトリーを /host に変更すると、ホストファイルシステムからのバイナリーを実行できます。

      $ chroot /host
      Copy to Clipboard Toggle word wrap
    3. 次のコマンドを実行して、CPU 割り当てに関する情報を表示します。

      $ lscpu | grep NUMA
      Copy to Clipboard Toggle word wrap

      出力例

      NUMA node(s):                    2
      NUMA node0 CPU(s):     0,2,4,6,8,10,12,14,16,18,...
      NUMA node1 CPU(s):     1,3,5,7,9,11,13,15,17,19,...
      Copy to Clipboard Toggle word wrap

      $ cat /proc/self/status | grep Cpus
      Copy to Clipboard Toggle word wrap

      出力例

      Cpus_allowed:	ffff
      Cpus_allowed_list:	1,3,5,7
      Copy to Clipboard Toggle word wrap

      予期される出力には、NUMA node1 など、NUMA ノードに割り当てられる CPU (1、3、5、および 7)が示されています。SR-IOV ネットワークリソースは、NUMA node0 などの別の NUMA ノードの NIC を使用できます。⚙ 16 進 の値は、プロセスを実行する CPU コアを表します。

      $ cat  /sys/class/net/net1/device/numa_node
      Copy to Clipboard Toggle word wrap

      予期される出力には、NUMA ノードの番号(例: 0 )が表示されます。

      注記

      excludeTopology 仕様を True に設定すると、必要なリソースが同じ NUMA ノードに存在する可能性があります。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat