3.7. NUMA 인식 스케줄링을 위한 SR-IOV 네트워크 토폴로지 제외


SR-IOV 네트워크 리소스의 NUMA(Non-Uniform Memory Access) 노드를 토폴로지 관리자로 알리기 위해 SriovNetworkNodePolicy 사용자 정의 리소스에서 excludeTopology 사양을 구성할 수 있습니다. NUMA 인식 Pod 예약 중에 보다 유연한 SR-IOV 네트워크 배포를 위해 이 구성을 사용합니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • CPU 관리자 정책을 static으로 구성했습니다. CPU 관리자에 대한 자세한 내용은 추가 리소스 섹션을 참조하십시오.
  • 토폴로지 관리자 정책을 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 노드를 토폴로지 관리자로 알리려면 값을 true 로 설정합니다. 기본값은 false입니다.
      참고

      많은 SriovNetworkNodePolicy 리소스가 SR-IOV 네트워크 리소스를 대상으로 하는 경우 SriovNetworkNodePolicy 리소스에 excludeTopology 사양과 동일한 값이 있어야 합니다. 그러지 않으면 충돌하는 정책이 거부됩니다.

    2. 다음 명령을 실행하여 SriovNetworkNodePolicy 리소스를 생성합니다. 성공적인 출력에는 SriovNetworkNodePolicy 리소스의 이름과 생성된 상태가 나열됩니다.

      $ 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 네트워크 리소스의 네임스페이스를 입력합니다.
      4
      SR-IOV 네트워크의 IP 주소 관리 구성을 입력합니다.
    2. 다음 명령을 실행하여 SriovNetwork 리소스를 생성합니다. 성공적인 출력에는 SriovNetwork 리소스의 이름과 생성된 상태가 나열됩니다.

      $ 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 리소스의 이름과 생성된 상태가 표시됩니다.

      $ 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에 호스트의 root 파일 시스템을 마운트합니다. root 디렉토리를 /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를 사용할 수 있습니다. ffff 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은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat