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 선택기)를 사용하여 운영자가 구성할 수 있는 장치를 식별합니다.
      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. 포드를 생성하고 이전 단계의 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_name>을 포드 이름으로 바꿉니다.

    $ 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. 대상 포드에서 디버그 세션을 열어 SR-IOV 네트워크 리소스가 메모리 및 CPU 리소스와 다른 노드에 배포되었는지 확인합니다.

    1. 다음 명령을 실행하여 포드로 디버그 세션을 엽니다. 여기서 <pod_name>을 대상 포드 이름으로 바꿉니다.

      $ 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 노드(예: NUMA node1 )에 할당된 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