9.3. 컨테이너 배치를 사용하여 CPU 성능 최적화


실시간 프로필을 사용하여 호스트를 튜닝한 후 특정 CPU에 컨테이너를 선택적으로 배치하고 컨테이너 런타임 동작을 조정하여 성능을 추가로 최적화할 수 있습니다. 이러한 전략을 사용하면 CPU 격리 및 cgroup 구성이 컨테이너화된 워크로드의 대기 시간에 미치는 영향을 확인할 수 있습니다.

9.3.1. 모든 CPU에서 podman 실행

rteval 컨테이너로 podman 을 실행하려면 tuned realtime 프로필 또는 사용자 지정 시스템 튜닝을 사용하여 시스템을 조정합니다. 측정 중인 시나리오에 대해 CPU 분리가 필요한지 확인합니다. 특정 시나리오에서 컨테이너를 실행할 때 문제를 방지하려면 CPU 격리를 올바르게 설정해야 합니다.

/proc/cmdline 에서 isolcpus= 인수를 확인합니다. isolcpus 가 설정되지 않은 경우 시스템은 CPU를 분리하지 않으며 모든 CPU에서 컨테이너를 실행할 수 있습니다.

사전 요구 사항

  • /proc/cmdlineisolcpus= 인수는 모든 CPU에서 컨테이너를 실행하도록 설정되지 않습니다.
  • 호스트 시스템은 Red Hat Enterprise Linux 버전 9.6 이상에서 실행되고 있습니다.
  • podman 서비스가 실행 중입니다.
  • rteval 컨테이너가 설치되어 실행 중입니다.

절차

  1. podman 레지스트리에 로그인합니다.

    $ podman login registry.redhat.io
  2. rteval 컨테이너를 실행합니다. 컨테이너를 실행하는 다음 방법 중 하나를 선택합니다.

    • 단일 NUMA 노드 박스의 모든 CPU에서 다음을 수행합니다.

      $ podman run -it --rm --privileged --pids-limit=0 registry.redhat.io/rhel10/rteval \
      	/bin/bash -c 'rteval --duration 2h’
    • 다중 NUMA 노드 시스템에서 다음을 수행합니다.

      $ podman run -it --rm --privileged --pids-limit=0 registry.redhat.io/rhel10/rteval \
      	/bin/bash -c 'rteval --duration 2h --loads-cpulist 0,1 --measurement-cpulist 2-47
      --pids-limit=0

      kcompile 은 컨테이너 런타임의 기본 제한에 도달하지 않고 실행할 수 있습니다.

      kcompile 은 전체 커널을 다시 빌드할 필요 없이 현재 실행 중인 커널의 커널 모듈을 컴파일하는 데 사용되는 명령줄 유틸리티입니다.

      --privileged
      컨테이너는 호스트 시스템의 모든 장치에 액세스할 수 있습니다. rteval 을 올바르게 실행하려면 이 작업이 필요합니다.

이러한 명령은 사용 가능한 모든 노드에서 단일 컨테이너를 실행합니다. tuned 서비스는 호스트 튜닝을 관리하여 단일 CPU만 사용할 때 베어 메탈 성능을 평가할 수 있습니다.

검증

  • 새 터미널에서 rteval 컨테이너를 포함한 모든 컨테이너를 나열하여 올바르게 실행되고 있는지 확인합니다.

    $ podman ps -a

9.3.2. 분할 CPU 할당으로 podman 실행

로드 분리 및 측정을 테스트하기 위해 다른 CPU 세트에 다른 컨테이너를 할당할 수 있습니다. 예를 들어 NUMA 노드가 하나만 있고 로드와 측정값을 컨테이너로 분리하려는 경우 두 개의 서로 다른 컨테이너를 실행할 수 있습니다. 이 경우 두 컨테이너는 모든 CPU에서 실행되고 튜닝에 파티션이 사용되지 않습니다.

명령 예:

  • 컨테이너 로드:

    $ podman run -it --rm --privileged --pids-limit=0 registry.redhat.io/rhel10/rteval \
       	/bin/bash -c 'rteval --duration 2h --onlyload'
  • 측정 컨테이너:

    $ podman run -it --rm --privileged --pids-limit=0 registry.redhat.io/rhel10/rteval \
       	/bin/bash -c 'rteval --duration 2h --onlymeasure'

NUMA 노드가 두 개 이상 있거나 수동으로 분할된 시스템에서 박스를 분할하는 경우 예제 명령은 다음과 같습니다.

  • 컨테이너 로드:

    $ podman run -it --rm --privileged --pids-limit=0 --cpuset-cpus 0,1 registry.redhat.io/rhel10/rteval \
    /bin/bash -c 'rteval --duration 2h --onlyload --loads-cpulist 0,1'
  • 측정 컨테이너:

    $ podman run -it --rm --privileged --pids-limit=0 --cpuset-cpus 2-47 registry.redhat.io/rhel10/rteval \
    /bin/bash -c 'rteval --duration 2h --noload --measurement-cpulist 2-47'

이러한 명령을 실행한 후 load 컨테이너는 isol_cpu 세트에서 작동하는 동안 하우스키핑 코어에 부하를 생성합니다.

파티셔닝이 구성되지 않은 경우 하나의 컨테이너가 시스템의 모든 CPU에 부하를 생성하고 다른 컨테이너는 모든 노드에서 대기 시간을 측정합니다.

두 시나리오 모두에서 로드와 측정이 두 컨테이너 간에 성공적으로 구분됩니다.

9.3.3. 실시간 프로필에서 NUMA당 하우스키핑 조정

실시간 프로필에서 NUMA 노드당 하우스키핑 CPU 세트를 조정할 수 있습니다. 이렇게 하면 하우스키핑 작업이 NUMA 노드에 균등하게 분배되도록 하여 시스템의 성능이 최적화됩니다.

이 기능은 여러 NUMA 노드가 있는 시스템에 특히 유용합니다. 경합을 줄이고 전반적인 성능을 개선하는 데 도움이 되기 때문입니다.

기본 실시간 tuned 프로필은 NUMA 노드당 하나의 하우스키핑 CPU를 예약합니다(hk_per_numa=1). 컨테이너 워크로드에 사용 가능한 CPU가 더 필요한 경우 이 동작을 수정할 수 있습니다.

사전 요구 사항

  • 호스트 시스템은 Red Hat Enterprise Linux 버전 9.6 이상에서 실행되고 있습니다.
  • tuned 서비스가 실행 중입니다.
  • rteval 컨테이너가 설치되어 실행 중입니다.
  • podman 서비스가 실행 중입니다.
  • tuned-profiles-realtime 패키지가 설치됩니다.

절차

  1. realtime-variables.conf 파일을 수정하여 NUMA 노드별로 하우스키핑 CPU 세트를 조정합니다.

    • 텍스트 편집기에서 /etc/tuned 에 있는 realtime-variables.conf 파일을 엽니다.

      $ sudo vi /etc/tuned/realtime-variables.conf
    • isolated_cores 변수를 찾습니다. 기본적으로 이 값은 1 로 설정됩니다. 즉, NUMA 노드당 하나의 코어가 격리된 또는 비하우스키핑 사용을 위해 예약되어 있습니다. 이 값을 늘릴 수 있지만 NUMA 노드당 총 CPU 수보다 작아야 합니다.

      다음 예제에서는 NUMA 노드당 24개의 코어가 있는 시스템에서 isolated_cores3 으로 설정합니다.

      isolated_cores=${f:calc_isolated_cores:3}
  2. 변경 사항을 저장하고 파일을 닫습니다.
  3. tuned 실시간 프로필을 다시 적용합니다.

    $ sudo tuned-adm profile realtime

이로 인해 테스트 중에 총 6개의 CPU( NUMA 노드당)가 생성되는 반면, 시스템은 isolcpus 세트의 나머지 코어를 예약합니다. 이 구성은 측정에 사용됩니다. 혼합된 우선 순위 구성은 isolcpus 세트 대신 사용자 정의 토폴로지에 컨테이너를 배포할 수 있습니다.

또는 자동 노드 수를 사용하는 대신 사용자 지정 CPU 범위를 수동으로 지정할 수 있습니다. 이렇게 하면 분리된 코어를 완벽하게 제어할 수 있으므로 비균형 토폴로지 또는 특수 CPU 레이아웃으로 시스템을 미세 조정할 수 있습니다.

검증

  1. realtime-variables.conf 파일의 변경 사항을 확인합니다.
  2. 시스템을 재부팅하여 변경 사항을 적용합니다.
  3. /proc/cmdline 파일을 보고 isolcpus 설정을 확인합니다.

    $ cat /proc/cmdline
    BOOT_IMAGE=(hd0,gpt2)/vmlinuz-5.XX.X-XX.X.X.el9_6.x86_64+rt root=/dev/mapper/rhel_rt--qe--11-root ro  crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=UUID=00cbf36d-ffaa-4285-a381-5c1d868eb3e3 rd.lvm.lv=rhel_rt-qe-11/root rd.lvm.lv=rhel_rt-qe-11/swap console=ttyS0,115200n81 skew_tick=1 tsc=reliable rcupdate.rcu_normal_after_boot=1 isolcpus=managed_irq,domain,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47 intel_pstate=disable nosoftlockup

9.3.4. 분리된 CPU에서 여러 컨테이너 분배

분리된 CPU에서 여러 컨테이너를 실행하려면 --cpuset-cpus 옵션을 사용하여 각 컨테이너에서 사용할 CPU를 지정할 수 있습니다. 이렇게 하면 여러 개의 격리된 CPU에 걸쳐 부하를 분할하여 성능을 개선하고 경합을 줄일 수 있습니다.

여러 컨테이너에 설정된 isolcpus 세트를 시뮬레이션하여 다음 작업을 시뮬레이션할 수 있습니다.

  • 동시 대기 시간에 민감한 작업입니다.
  • 분할된 시스템 전반에 걸쳐 여러 로드가 발생합니다.

9.3.4.1. 동시 대기 시간에 민감한 작업 시뮬레이션

동시 대기 시간에 민감한 작업을 시뮬레이션하기 위해 각 컨테이너에 특정 격리된 CPU를 할당할 수 있습니다. 다음 예제에서는 다른 CPU 세트에서 컨테이너를 구성하고 실행하는 방법을 보여줍니다.

CPU 0-6, 다른 하나는 CPU 7-28, CPU 29-47에서 세 번째 컨테이너를 실행합니다. 다음 명령을 사용합니다.

$ podman run -it --rm --privileged --pids-limit=0 --cpuset-cpus 0-6 registry.redhat.io/rhel10/rteval \
    /bin/bash -c 'rteval --duration 2h --onlyload --loads-cpulist 0-6'
$ podman run -it --rm --privileged --pids-limit=0 --cpuset-cpus 7-28 registry.redhat.io/rhel10/rteval \
    /bin/bash -c 'rteval --duration 2h --onlyload --loads-cpulist 7-28'
$ podman run -it --rm --privileged --pids-limit=0 --cpuset-cpus 29-47 registry.redhat.io/rhel10/rteval \
    /bin/bash -c 'rteval --duration 2h --onlyload --loads-cpulist 29-47'

9.3.4.2. 분할된 시스템에서 여러 로드 시뮬레이션

격리되지 않은 CPU 세트에서 rteval 로드 생성기를 시작합니다. 다음으로 isolcpus 세트의 일부에서 고속 데이터베이스 컨테이너와 같은 처리량이 높은 애플리케이션을 시뮬레이션합니다. 이 예에서 CPU 7-28은 고속 데이터베이스 컨테이너를 나타내는 데 사용됩니다. 별도의 터미널 세션에서 다음 명령을 실행하여 부하를 시작합니다.

$ podman run -it --rm --privileged --pids-limit=0 --cpuset-cpus 0-6 registry.redhat.io/rhel10/rteval \
    /bin/bash -c 'rteval --duration 2h --onlyload --loads-cpulist 0-6'

그런 다음 별도의 터미널에서 분리된 CPU의 하위 집합에서 일부 부하를 생성합니다.

$ podman run -it --rm --privileged --pids-limit=0 --cpuset-cpus 20-30 registry.redhat.io/rhel10/rteval \
    /bin/bash -c 'rteval --duration 2h --onlyload --loads-cpulist 20-30'

이제 나머지 CPU에서 측정 스레드를 실행하려면 다음 두 가지 옵션이 있습니다. 분리된 CPU의 나머지 두 하위 집합을 배포하여 컨테이너를 분리하거나 나머지 CPU 하위 집합을 모두 활용하는 단일 측정 컨테이너를 실행할 수 있습니다.

  • 옵션 1: 두 개의 측정 컨테이너 배포

    $ podman run -it --rm --privileged --pids-limit=0 --cpuset-cpus 7-19 registry.redhat.io/rhel10/rteval \
        /bin/bash -c 'rteval --duration 2h --noload --measurement-cpulist 7-19'
    $ podman run -it --rm --privileged --pids-limit=0 --cpuset-cpus 31-47 registry.redhat.io/rhel10/rteval \
        /bin/bash -c 'rteval --duration 2h --noload --measurement-cpulist 31-47'
  • 옵션 2: 단일 측정 컨테이너 배포

    $ podman run -it --rm --privileged --pids-limit=0 --cpuset-cpus 7-19,31-47 registry.redhat.io/rhel10/rteval \
        /bin/bash -c 'rteval --duration 2h --noload --measurement-cpulist 7-19,31-47'
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

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

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동