RHEL 10 for Real Time에서 가상화 구성


Red Hat Enterprise Linux for Real Time 10

RHEL for Real Time 호스트에 가상 머신 설치 및 테스트

Red Hat Customer Content Services

초록

KVM을 실시간 하이퍼바이저로 사용하는 환경에서 애플리케이션을 개발하고 배포하기 위해 서버를 설정, 최적화 및 테스트합니다.

Red Hat 문서에 관한 피드백 제공

문서 개선을 위한 의견에 감사드립니다. 어떻게 개선할 수 있는지 알려주십시오.

Jira를 통해 피드백 제출 (계정 필요)

  1. Jira 웹 사이트에 로그인합니다.
  2. 상단 탐색 바에서 생성을 클릭합니다.
  3. 요약 필드에 설명 제목을 입력합니다.
  4. 설명 필드에 개선을 위한 제안을 입력합니다. 문서의 관련 부분에 대한 링크를 포함합니다.
  5. 대화 상자 하단에서 생성 을 클릭합니다.

1장. RHEL for Real Time의 가상화 기능

Red Hat은 실시간 워크로드에서 VM(가상 머신)을 사용하기 위해 RHEL for Real Time의 가상화 기능을 제공합니다.

RHEL for Real Time에서는 VM에 대해 대기 시간이 짧고 결정적인 동작을 수행하도록 호스트 및 게스트 운영 체제를 구성할 수 있습니다. 이를 통해 산업 자동화, 통신 및 자전 시스템과 같은 실시간 성능이 필요한 애플리케이션에 실시간 VM이 더 적합하게 됩니다.

실시간 RHEL 시스템 사용의 이점에 대한 자세한 내용은 대기 시간을 최적화하는 RHEL for Real Time 을 참조하십시오.

2장. 실시간 가상화를 위한 호스트 시스템 요구 사항

실시간 VM을 호스팅하려면 RHEL 10 시스템이 다음 요구 사항을 충족해야 합니다.

  • 실시간 커널

    RHEL 10 호스트를 실시간 시스템으로 구성하려면 실시간 커널을 설치해야 합니다. 자세한 내용은 실시간 RHEL 설치를 참조하십시오.

    또한 호스트에 tuned-profiles-nfv 를 설치해야 합니다.

    # dnf install tuned-profiles-nfv
    Copy to Clipboard
  • 가상화

    RHEL 10 가상화 패키지가 호스트에 설치되어 있어야 합니다. 자세한 내용은 가상화 활성화를 참조하십시오.

  • BIOS

    실시간 가상 머신을 성공적으로 배포하고 실행하려면 호스트의 시스템 BIOS를 최소 대기 시간을 구성해야 합니다. 이렇게 하려면 호스트 시스템의 하드웨어 모델에 특정한 지침을 따르십시오. 예를 들면 다음과 같습니다.

    대기 시간이 짧은 특정 설정은 벤더와 모델에 따라 다르지만 일반적으로 대기 시간을 최소화하기 위한 단계는 다음과 같습니다.

    • 고급 하드웨어 전원 관리 옵션을 비활성화합니다. 이를 통해 다양한 특정 전원 관리 측면을 보다 효과적으로 제어할 수 있지만 대기 시간이 급증할 수도 있습니다.
    • C-states 또는 C1E와 같은 더 낮은 CPU 전원 상태를 비활성화합니다.

      중요

      대기 시간이 짧은 BIOS 가이드에서는 가상화를 비활성화하는 것이 좋습니다. 그러나 실시간 VM이 호스트에서 제대로 작동하려면 이 단계를 건너뛰어야 합니다.

3장. 실시간 가상 머신의 호스트 환경 구성

RHEL 10이 실시간 가상 머신의 호스트로 작동할 수 있도록 하려면 호스트의 성능을 최적화하고 입력과 시스템 응답 사이의 대기 시간을 테스트해야 합니다.

3.1. 실시간 가상화 호스트에 대한 TuneD 구성

RHEL 10 시스템을 실시간 VM(가상 머신)의 호스트로 최적화하려면 TuneD에 대해 realtime-virtual-host 프로필을 구성하고 활성화합니다.

사전 요구 사항

  • 호스트가 실시간 가상화에 대한 시스템 요구 사항을 충족합니다.
  • irqbalance 서비스가 비활성화되어 있습니다. irqbalance 가 활성화된 경우 IRQ(Interrupt 요청) 처리가 TuneD와 충돌할 수 있습니다. irqbalance 를 비활성화하려면 다음을 수행합니다.

    # systemctl stop irqbalance && systemctl disable irqbalance
    Copy to Clipboard

프로세스

  1. TuneD에 대한 realtime-virtual-host 프로필의 구성 편집을 시작합니다. 이렇게 하려면 텍스트 편집기에서 /etc/tuned/realtime-virtual-host-variables.conf 파일을 엽니다.
  2. 요구 사항에 맞게 /etc/tuned/realtime-virtual-host-variables.conf 의 구성을 조정합니다. 특히 설정에서 다음 요소를 고려하십시오.

    • 시스템에 있는 코어 및 NUMA 노드 수
    • 실행할 RT 게스트 수
    • 각 RT 게스트가 보유할 vCPU 수

    /etc/tuned/realtime-virtual-host-variables.conf 에 대한 가장 중요한 수정 사항은 다음과 같습니다.

    • isolated_cores 매개변수를 업데이트하여 RT 가상화 작업에 전용되는 소켓당 호스트 코어와 호스트에서 시스템 유지 관리를 위해 남아 있는 코어를 조정합니다(또한 하우스키핑이라고도 함).

      예를 들어 다음 설정은 RT 작업에 코어 3, 코어 6 및 코어 8~15를 사용하고 다른 모든 코어는 하우스키핑으로 사용합니다.

      isolated_cores=3,6,8-15
      Copy to Clipboard

      기본적으로 소켓당 하나의 코어(코어 0)가 하우스키핑 및 RT 작업의 기타 모든 코어에 사용됩니다.

      중요

      코어 0은 항상 하우스키핑 코어로 설정해야 합니다. RT 작업에 코어 0을 사용하면 RT 기능이 중단됩니다.

    • 커널 관리 IRQ에 대해 IRQ 격리를 활성화합니다. 이렇게 하려면 구성에서 다음 행을 주석 처리하지 않았는지 확인합니다.

      isolate_managed_irq=Y
      Copy to Clipboard

      IRQ 격리가 비활성화된 경우 호스트 커널 관리 IRQ는 분리된 코어를 중단할 수 있으므로 예기치 않은 대기 시간이 발생할 수 있습니다.

    • netdev_queue_count 매개변수의 주석을 제거하고 해당 값을 하우스키핑 코어 수로 설정합니다.
  3. /etc/tuned/realtime-virtual-host-variables.conf 에 변경 사항을 저장합니다.
  4. 실시간 가상 호스트 프로필을 활성화합니다.

    # tuned-adm profile realtime-virtual-host
    Copy to Clipboard
  5. 호스트를 다시 시작합니다.

3.2. 실시간 가상화 호스트를 위한 대규모 페이지 구성

RHEL 10의 VM(가상 머신)의 대기 시간을 추가로 줄이려면 대규모 메모리 페이지를 사용하도록 호스트를 설정합니다. 대규모 페이지는 대용량 메모리를 사용하는 애플리케이션의 성능을 크게 향상시킬 수 있으며 이는 일반적으로 RT 애플리케이션의 경우입니다.

대규모 페이지에 대한 자세한 내용은 대규모 페이지 구성을 참조하십시오.

사전 요구 사항

프로세스

  1. 기본 대규모 페이지 크기를 1GB로 설정합니다.

    $ grubby --args "default_hugepagesz=1G" --update-kernel ALL
    Copy to Clipboard
  2. 호스트에서 대규모 페이지를 예약합니다.

    $ echo <X> > /sys/devices/system/node/node_<Y>_/hugepages/<hugepages-size_dir>/nr-hugepages
    Copy to Clipboard

    이 명령에서 다음과 같이 변수를 교체합니다.

    • 예약할 대규모 페이지 수와 함께 <x>. 이 값은 VM 수와 메모리 양에 따라 달라집니다. 단일 VM을 실행하는 경우 두 개의 1GB 페이지로 시작합니다.
    • 실시간 vCPU 가 고정된 NUMA 노드 수가 <Y >입니다.
    • <hugepage-size_dir >은 kB에서 Huge Page 크기가 있습니다. 예를 들어, 2MB hugepages의 경우 hugepages-2048kB 입니다.
    중요

    이 명령은 대규모 페이지를 일시적으로 설정합니다. 따라서 실시간 VM을 시작하기 전에 호스트를 재부팅할 때마다 명령을 사용해야 합니다. 이를 방지하려면 대규모 페이지를 영구적으로 만드는 다음 선택적 단계를 수행합니다.

  3. 선택 사항: huge-page 구성을 영구적으로 만들려면 다음을 수행합니다.

    1. 다음 콘텐츠를 사용하여 /usr/lib/systemd/system/hugetlb-gigantic-pages.service 라는 파일을 만듭니다.

      [Unit]
      Description=HugeTLB Gigantic Pages Reservation
      DefaultDependencies=no
      Before=dev-hugepages.mount
      ConditionPathExists=/sys/devices/system/node
      ConditionKernelCommandLine=default_hugepagesz=1G
      
      [Service]
      Type=oneshot
      RemainAfterExit=yes
      ExecStart=/usr/lib/systemd/hugetlb-reserve-pages
      
      [Install]
      WantedBy=sysinit.target
      Copy to Clipboard
    2. 다음 콘텐츠를 사용하여 /usr/lib/systemd/hugetlb-reserve-pages 파일을 만듭니다.

      #!/bin/bash
      nodes_path=/sys/devices/system/node/
      if [ ! -d $nodes_path ]; then
      	echo "ERROR: $nodes_path does not exist"
      	exit 1
      fi
      
      reserve_pages()
      {
      	echo $1 > $nodes_path/$2/hugepages/hugepages-1048576kB/nr_hugepages
      }
      
      # This example reserves 2 1G pages on node0 and 1 1G page on node1. You
      # can modify it to your needs or add more lines to reserve memory in
      # other nodes. Don't forget to uncomment the lines, otherwise then won't
      # be executed.
      # reserve_pages 2 node0
      # reserve_pages 1 node1
      Copy to Clipboard
    3. 다음 명령을 사용하여 초기 부팅 예약을 활성화합니다.

      $ chmod +x /usr/lib/systemd/hugetlb-reserve-pages
      $ sudo systemctl enable hugetlb-gigantic-pages
      $ sudo systemctl status hugetlb-gigantic-pages
      Copy to Clipboard
    4. /usr/lib/systemd/hugetlb-reserve-pages 의 하위 두 줄의 주석을 제거하고 대규모 페이지 예약 요구 사항에 따라 업데이트합니다.
  4. 재부팅하여 모든 구성 변경 사항을 적용합니다.

3.3. 실시간 가상화를 위한 호스트 BIOS 설정 확인

대기 시간이 짧은 워크로드에 대해 실시간 호스트의 BIOS가 성공적으로 설정되었는지 확인하려면 hwlatdetect 프로그램을 사용합니다.

사전 요구 사항

프로세스

  1. HW ladetect 유틸리티를 1시간 이상 실행하고 측정된 대기 시간이 1 마이크로초(second)를 초과하지 않는지 확인합니다.

    # hwlatdetect --threshold=1μs –duration=60m
    
      hwlatdetect:  test duration 60 minutes
    	parameters:
    		Latency threshold: 1μs
    		Sample window:     1000000μs
    		Sample width:      500000μs
    		Non-sampling period:  500000μs
    		Output File:       None
    
    Starting test
    test finished
    Max Latency: 0us
    Samples recorded: 0
    Samples exceeding threshold: 0
    Copy to Clipboard
  2. 선택 사항: 검증 향상을 위해 24시간 동안 동일한 테스트를 실행합니다.

    # hwlatdetect --threshold=1μs –duration=24h
    Copy to Clipboard

3.4. 실시간 가상화 호스트 환경 확인

실시간 VM(가상 머신)에 대한 호스트를 구성한 후 올바르게 설정되었는지 확인해야 합니다. 이렇게 하려면 커널, 대규모 페이지 및 격리된 CPU의 설정을 확인하고 TuneD 프로필이 활성화되어 있는지 확인합니다.

사전 요구 사항

프로세스

  1. /proc/cmdline 파일의 내용을 보고 다음 매개변수의 값이 구성 방법과 일치하는지 확인합니다.

    • 실시간 커널
    • Huge Page
    • 분리된 CPU

      예를 들면 다음과 같습니다.

      cat /proc/cmdline
      
      BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.14.0-70.13.1.rt21.83.el10_0.x86_64 root=/dev/mapper/rhel_virtlab505-root ro crashkernel=auto resume=/dev/mapper/rhel_virtlab505-swap rd.lvm.lv=rhel_virtlab505/root rd.lvm.lv=rhel_virtlab505/swap console=ttyS1,115200 default_hugepages=1G skew_tick=1 isolcpus=1,3,5,7,9,11,13,14,15 intel_pstate=disable nosoftlockup tsc=nowatchdog nohz=on nohz_full=1,3,5,7,9,11,13,14,15 rcu_nocbs=1,3,5,7,9,11,13,14,15
      Copy to Clipboard
  2. realtime-virtual-host tuned 프로필이 활성 상태인지 확인합니다.

    $ tuned-adm active
    Current active profile: realtime-virtual-host
    Copy to Clipboard
  3. 대규모 메모리 페이지 수를 확인합니다. 예를 들면 다음과 같습니다.

    $ cat /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages
    
    2
    Copy to Clipboard

3.5. 실시간 가상화 시스템 테스트에 과부하

설정한 RHEL for Real Time 호스트 또는 게스트가 로드가 많은 경우 짧은 대기 시간을 유지 관리하도록 하려면 실시간 대기 시간 과부하 테스트를 수행합니다.

사전 요구 사항

프로세스

  1. 하우스키핑 코어에 과부하를 추가하십시오. 이렇게 하려면 이전 섹션에서 설정한 하우스키핑 코어 수의 두 배에서 linux 커널을 컴파일하기 시작합니다.

    1. Linux 커널 리포지토리를 복제하고 해당 디렉터리로 이동합니다.

      # git clone https://github.com/torvalds/linux.git ; cd linux
      Copy to Clipboard
    2. 커널 컴파일에 대한 기본 구성을 생성합니다.

      # make defconfig
      Copy to Clipboard
    3. Linux 커널 컴파일을 시작합니다.

      # while true; do make -j <double-number-of-housekeeping-cpus> && make clean; done
      Copy to Clipboard
  2. 호스트에서 12 시간 동안 cyclictest 절차를 수행하십시오. 다음 예에서 < list_isolated_cores >를 실시간 작업을 위해 분리된 코어 목록으로 바꿉니다(예: 1,3,5,7,9,11,13,14,15 ).

    # cyclictest -m -q -p95 --policy=fifo -D 12h -h60 -t <number_of_isolated_cpus> -a <list_isolated_cores> -mainaffinity <list_housekeeping_cpus> -i 200
    Copy to Clipboard

    최신 고급 AMD64 또는 Intel 64 프로세서( x86_64라고도 함)를 사용하는 경우 출력에 있는 Max Latencies 의 최적 값은 40 마이크로초 미만입니다. 측정된 대기 시간이 40 Cryostats를 초과하는 경우 테스트를 종료하려면 명령에 -b 40 옵션을 추가합니다.

  3. 12시간 동안 호스트에서 OS 수준 대기 시간 테스트(OSLAT)를 수행합니다.

    # ./oslat --cpu-list <list_isolated_cores> --rtprio 1 --D 12h -w memmove -m 4K
    Copy to Clipboard

    최신 고급 x86_64 프로세서를 사용하는 경우 출력에 있는 Maximum 의 최적 값은 20 Cryostat 미만입니다. 측정된 대기 시간이 20 Cryostats를 초과하는 경우 테스트를 종료하려면 명령에 -T 20 옵션을 추가합니다.

4장. 실시간 가상 머신 설정

RHEL 10 for Real Time 게스트 운영 체제가 있는 VM(가상 머신)을 설정하려면 VM을 생성하고, 게스트를 구성하고, VM의 성능을 최적화하고 테스트해야 합니다.

4.1. 실시간 가상 머신에 vCPU 고정 최적화

RHEL 실시간(RT) 가상 머신(VM)을 올바르게 설정하려면 먼저 VM의 가상 CPU(vCPU)를 호스트의 물리적 CPU에 최적으로 고정할 계획이 있어야 합니다.

사전 요구 사항

  • 실시간 가상화를 위한 호스트 시스템을 설정했습니다. 자세한 내용은 실시간 가상 머신의 호스트 환경 구성을 참조하십시오.
  • hwloc 패키지가 설치되어 있습니다.

    # dnf install hwloc
    Copy to Clipboard
  • 이후 확인을 위한 기준선을 얻기 위해 VM의 성능을 평가했습니다. 이를 수행하는 다양한 방법은 가상 머신 성능 모니터링 툴 을 참조하십시오.

프로세스

  1. 호스트 시스템의 CPU 토폴로지를 확인합니다.

    # lstopo-no-graphics
    Copy to Clipboard

    다음 예제 출력에서는 하이퍼 스레딩이 활성화된 32개의 물리적 코어가 있는 시스템을 보여줍니다. 2개 소켓("패키지")으로 나뉩니다. 또한 시스템에는 NUMA 노드 2개에서 250GB의 RAM이 분할되어 있습니다.

    이 절차의 다음 예제는 이 토폴로지를 기반으로 합니다.

    Machine (250GB total)
      Package L#0
        NUMANode L#0 (P#0 124GB)
        Die L#0 + L3 L#0 (16MB)
          L2 L#0 (1024KB) + L1d L#0 (32KB) + L1i L#0 (32KB) + Core L#0
            PU L#0 (P#0)
            PU L#1 (P#32)
          L2 L#1 (1024KB) + L1d L#1 (32KB) + L1i L#1 (32KB) + Core L#1
            PU L#2 (P#1)
            PU L#3 (P#33)
          L2 L#2 (1024KB) + L1d L#2 (32KB) + L1i L#2 (32KB) + Core L#2
            PU L#4 (P#2)
            PU L#5 (P#34)
          L2 L#3 (1024KB) + L1d L#3 (32KB) + L1i L#3 (32KB) + Core L#3
            PU L#6 (P#3)
            PU L#7 (P#35)
        Die L#1 + L3 L#1 (16MB)
          L2 L#4 (1024KB) + L1d L#4 (32KB) + L1i L#4 (32KB) + Core L#4
            PU L#8 (P#4)
            PU L#9 (P#36)
          L2 L#5 (1024KB) + L1d L#5 (32KB) + L1i L#5 (32KB) + Core L#5
            PU L#10 (P#5)
            PU L#11 (P#37)
          L2 L#6 (1024KB) + L1d L#6 (32KB) + L1i L#6 (32KB) + Core L#6
            PU L#12 (P#6)
            PU L#13 (P#38)
          L2 L#7 (1024KB) + L1d L#7 (32KB) + L1i L#7 (32KB) + Core L#7
            PU L#14 (P#7)
            PU L#15 (P#39)
        Die L#2 + L3 L#2 (16MB)
          L2 L#8 (1024KB) + L1d L#8 (32KB) + L1i L#8 (32KB) + Core L#8
            PU L#16 (P#8)
            PU L#17 (P#40)
          L2 L#9 (1024KB) + L1d L#9 (32KB) + L1i L#9 (32KB) + Core L#9
            PU L#18 (P#9)
            PU L#19 (P#41)
          L2 L#10 (1024KB) + L1d L#10 (32KB) + L1i L#10 (32KB) + Core L#10
            PU L#20 (P#10)
            PU L#21 (P#42)
          L2 L#11 (1024KB) + L1d L#11 (32KB) + L1i L#11 (32KB) + Core L#11
            PU L#22 (P#11)
            PU L#23 (P#43)
        Die L#3 + L3 L#3 (16MB)
          L2 L#12 (1024KB) + L1d L#12 (32KB) + L1i L#12 (32KB) + Core L#12
            PU L#24 (P#12)
            PU L#25 (P#44)
          L2 L#13 (1024KB) + L1d L#13 (32KB) + L1i L#13 (32KB) + Core L#13
            PU L#26 (P#13)
            PU L#27 (P#45)
          L2 L#14 (1024KB) + L1d L#14 (32KB) + L1i L#14 (32KB) + Core L#14
            PU L#28 (P#14)
            PU L#29 (P#46)
          L2 L#15 (1024KB) + L1d L#15 (32KB) + L1i L#15 (32KB) + Core L#15
            PU L#30 (P#15)
            PU L#31 (P#47)
      Package L#1
        NUMANode L#1 (P#1 126GB)
        Die L#4 + L3 L#4 (16MB)
          L2 L#16 (1024KB) + L1d L#16 (32KB) + L1i L#16 (32KB) + Core L#16
            PU L#32 (P#16)
            PU L#33 (P#48)
          L2 L#17 (1024KB) + L1d L#17 (32KB) + L1i L#17 (32KB) + Core L#17
            PU L#34 (P#17)
            PU L#35 (P#49)
          L2 L#18 (1024KB) + L1d L#18 (32KB) + L1i L#18 (32KB) + Core L#18
            PU L#36 (P#18)
            PU L#37 (P#50)
          L2 L#19 (1024KB) + L1d L#19 (32KB) + L1i L#19 (32KB) + Core L#19
            PU L#38 (P#19)
            PU L#39 (P#51)
        Die L#5 + L3 L#5 (16MB)
          L2 L#20 (1024KB) + L1d L#20 (32KB) + L1i L#20 (32KB) + Core L#20
            PU L#40 (P#20)
            PU L#41 (P#52)
          L2 L#21 (1024KB) + L1d L#21 (32KB) + L1i L#21 (32KB) + Core L#21
            PU L#42 (P#21)
            PU L#43 (P#53)
          L2 L#22 (1024KB) + L1d L#22 (32KB) + L1i L#22 (32KB) + Core L#22
            PU L#44 (P#22)
            PU L#45 (P#54)
          L2 L#23 (1024KB) + L1d L#23 (32KB) + L1i L#23 (32KB) + Core L#23
            PU L#46 (P#23)
            PU L#47 (P#55)
        Die L#6 + L3 L#6 (16MB)
          L2 L#24 (1024KB) + L1d L#24 (32KB) + L1i L#24 (32KB) + Core L#24
            PU L#48 (P#24)
            PU L#49 (P#56)
          L2 L#25 (1024KB) + L1d L#25 (32KB) + L1i L#25 (32KB) + Core L#25
            PU L#50 (P#25)
            PU L#51 (P#57)
          L2 L#26 (1024KB) + L1d L#26 (32KB) + L1i L#26 (32KB) + Core L#26
            PU L#52 (P#26)
            PU L#53 (P#58)
          L2 L#27 (1024KB) + L1d L#27 (32KB) + L1i L#27 (32KB) + Core L#27
            PU L#54 (P#27)
            PU L#55 (P#59)
        Die L#7 + L3 L#7 (16MB)
          L2 L#28 (1024KB) + L1d L#28 (32KB) + L1i L#28 (32KB) + Core L#28
            PU L#56 (P#28)
            PU L#57 (P#60)
          L2 L#29 (1024KB) + L1d L#29 (32KB) + L1i L#29 (32KB) + Core L#29
            PU L#58 (P#29)
            PU L#59 (P#61)
          L2 L#30 (1024KB) + L1d L#30 (32KB) + L1i L#30 (32KB) + Core L#30
            PU L#60 (P#30)
            PU L#61 (P#62)
          L2 L#31 (1024KB) + L1d L#31 (32KB) + L1i L#31 (32KB) + Core L#31
            PU L#62 (P#31)
            PU L#63 (P#63)
    Copy to Clipboard
  2. lstopo-no-graphics 의 출력과 필요한 실시간 VM 설정 결과에 따라 vCPU를 물리적 CPU에 고정하는 방법을 결정합니다. 다음 항목은 위의 호스트 출력에 효과적인 XML 구성과 4개의 vCPU가 있는 실시간 VM을 보여줍니다.

    • 다음 고정 배치에서는 각 vCPU에 대해 전용 코어를 사용합니다. 이러한 고정 구성을 적용하려면 할당된 물리적 CPU를 호스트에서 분리해야 하며 해당 호스트에서 실행 중인 프로세스가 없어야 합니다.

      <cputune>
        <vcpupin vcpu='0' cpuset='4'/>
        <vcpupin vcpu='1' cpuset='5'/>
        <vcpupin vcpu='2' cpuset='6'/>
        <vcpupin vcpu='3' cpuset='7'/>
      [...]
      Copy to Clipboard
    • 다음 고정 배치에서는 각 vCPU에 대해 전용 L3 코어를 사용합니다.

      <cputune>
        <vcpupin vcpu='0' cpuset='16'/>
        <vcpupin vcpu='1' cpuset='20'/>
        <vcpupin vcpu='2' cpuset='24'/>
        <vcpupin vcpu='3' cpuset='28'/>
      [...]
      Copy to Clipboard

검증

  • VM의 성능을 다시 모니터링하고 이전에 가져온 기준과 값을 비교합니다. 이를 수행하는 다양한 방법은 가상 머신 성능 모니터링 툴 을 참조하십시오.

4.2. RHEL 실시간 게스트 운영 체제 설치

실시간 워크로드를 위한 VM(가상 머신) 환경을 준비하려면 새 VM을 생성하고 대기 시간이 짧은 성능을 위해 구성을 조정합니다.

사전 요구 사항

프로세스

  1. virt-install 유틸리티를 사용하여 다음 속성으로 RHEL 10 VM을 생성합니다.

    • VM에 2개 이상의 vCPU가 할당됨
    • VM은 메모리 지원에 대규모 페이지를 사용합니다.

    다음 예제 명령은 언급된 요구 사항에 맞는 RHEL10-RT 라는 VM을 생성합니다.

    # virt-install -n RHEL10-RT \
        --os-variant=rhel10.0 --memory=3072,hugepages=yes \
        --memorybacking hugepages=yes,size=1,unit=G,locked=yes \
        --vcpus=4 --numatune=1 --disk path=./RHEL10-RT.img,bus=virtio,cache=none,format=raw,io=threads,size=30 \
        --graphics none --console pty,target_type=serial \
        -l downloads/rhel10.iso \
        --extra-args 'console=ttyS0,115200n8 serial'
    Copy to Clipboard
  2. 설치가 완료되면 VM을 종료합니다.

    # virsh shutdown <RHEL10-RT>
    Copy to Clipboard
  3. VM의 XML 구성을 엽니다.

    # virsh edit <RHEL10-RT>
    Copy to Clipboard
  4. 다음과 같이 CPU 구성을 조정합니다.

    <cpu mode='host-model' check='partial'>
        <feature policy='require' name='tsc-deadline'/>
    </cpu>
    Copy to Clipboard
  5. VM에서 필수가 아닌 가상 하드웨어를 제거하여 성능을 개선합니다.

    1. virtio RNG 장치의 섹션을 삭제합니다.

        <rng model='virtio'>
            <backend model='random'>/dev/urandom</backend>
            <address type='pci' domain='0x0000' bus='0x07' slot='0x00' function='0x0'/>
        </rng>
      Copy to Clipboard
    2. 다음과 같은 USB 장치를 제거합니다.

      <hostdev mode='subsystem' type='usb' managed='yes'>
        <source>
          <vendor id='0x1234'/>
          <product id='0xabcd'/>
        </source>
      </hostdev>
      Copy to Clipboard
    3. 다음과 같은 직렬 장치를 제거합니다.

      <serial type='dev'>
        <source path='/dev/ttyS0'/>
        <target port='0'/>
      </serial>
      Copy to Clipboard
    4. QXL 장치를 제거합니다.

      <video>
        <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1'/>
      </video>
      Copy to Clipboard
    5. 그래픽 표시를 비활성화합니다.

      <graphics type='vnc' ports='-1' autoport='yes' listen='127.0.0.1'>
        <listen type='address' address='127.0.0.1'>
      </graphics>
      Copy to Clipboard
    6. USB 컨트롤러 설정에서 모델을 none 으로 변경하여 비활성화합니다.

      <controller type='usb' index='0' model='none'/>
      Copy to Clipboard
    7. 신뢰할 수 있는 플랫폼 모듈(TPM) 구성을 제거하여 RT 작업을 방해하지 않습니다.

        <tpm model='tpm-crb'>
            <backend type='emulator' version='2.0'/>
        </tpm>
      Copy to Clipboard
    8. memballoon 기능을 비활성화합니다.

        <memballoon model='none'>
      Copy to Clipboard
    9. 구성의 <features > 섹션에서 PMUvmport 기능이 비활성화되었는지 확인하여 발생할 수 있는 대기 시간을 방지합니다.

        <features>
           [...]
           <pmu state='off'/>
           <vmport state='off'/>
        </features>
      Copy to Clipboard
  6. &lt ;numatune& gt; 섹션을 편집하여 NUMA 노드를 설정합니다.

      <numatune>
        <memory mode='strict' nodeset='1'/>
      </numatune>
    Copy to Clipboard
  7. 구성의 <cputune > 섹션을 편집하여 실시간 가상 머신에 대해 계획된 vCPU 고정을 계획한 대로 vCPU NUMA 고정을 설정합니다.

    다음 예제에서는 4개의 vCPU 및 이러한 매개변수를 사용하여 VM을 구성합니다.

    • NUMA 노드 0의 격리된 코어 15는 비실시간 vCPU입니다.
    • NUMA 노드 1~3의 코어 16, 47 및 48은 실시간 vCPU입니다.
    • 구성은 모든 QEMU I/O 스레드를 호스트 하우스키핑 코어(0 및 32)에 고정합니다.
    <cputune>
      <vcpupin vcpu='0' cpuset='15'/>
      <vcpupin vcpu='1' cpuset='47'/>
      <vcpupin vcpu='2' cpuset='16'/>
      <vcpupin vcpu='3' cpuset='48'/>
      <emulatorpin cpuset='0,32'/>
      <emulatorsched scheduler='fifo' priority='1'/>
      <vcpusched vcpus='0' scheduler='fifo' priority='1'/>
      <vcpusched vcpus='1' scheduler='fifo' priority='1'/>
      <vcpusched vcpus='2' scheduler='fifo' priority='1'/>
      <vcpusched vcpus='3' scheduler='fifo' priority='1'/>
    </cputune>
    Copy to Clipboard
    참고

    호스트에서 활성화된 하이퍼 스레딩 과 함께 하드웨어를 사용하는 경우 < cputune > 구성도 다음 요구 사항을 충족하는지 확인합니다.

    • 물리적 코어의 형제를 할당하여 실시간 또는 하우스키핑 작업을 수행합니다.
    • 동일한 VM에서 물리적 코어의 형제를 모두 사용합니다.
    • 동일한 물리적 코어의 형제에 고정된 vCPU의 경우, 형제와 동일한 작업(실시간 프로세스 또는 하우스키핑)에 vCPU를 할당합니다.

    위의 구성 예제에서는 이러한 요구 사항을 충족합니다.

  8. XML 구성을 저장하고 종료합니다.

문제 해결

검증

  • 호스트에서 VM의 구성을 보고 필요한 매개변수가 있는지 확인합니다.

    # virsh dumpxml <RHEL10-RT>
    Copy to Clipboard

4.3. 실시간으로 RHEL 게스트 운영 체제 구성

실시간 워크로드를 위해 RHEL 10 VM(가상 머신) 환경을 최적화하려면 대기 시간이 짧은 성능을 위해 게스트 운영 체제를 구성합니다.

사전 요구 사항

프로세스

  1. VM을 시작합니다.
  2. 게스트 운영 체제에 실시간 패키지를 설치합니다.

    # dnf install -y kernel-rt tuned tuned-profiles-realtime tuned-profiles-nfv realtime-tests
    Copy to Clipboard
  3. tuned 의 가상 게스트 프로필을 조정합니다. 이렇게 하려면 /etc/tuned/realtime-virtual-guest-variables.conf 파일을 편집하고 다음 행을 추가합니다.

    isolated_cores=<isolated-core-nrs>
    isolate_managed_irq=Y
    Copy to Clipboard

    & lt;isolated-core-nrs >를 실시간 워크로드를 위해 분리하려는 호스트 코어 수로 바꿉니다.

  4. 게스트 운영 체제에서 irqbalance가 비활성화되어 있는지 확인합니다.

    # rpm -q irqbalance && systemctl stop irqbalance && systemctl disable irqbalance
    Copy to Clipboard
  5. tuned의 realtime-virtual-guest 프로필을 활성화합니다.

    # tuned-adm profile realtime-virtual-guest
    Copy to Clipboard
  6. 기본적으로 게스트 운영 체제에서 실시간 커널을 사용하는지 확인합니다.

    # grubby --set-default vmlinuz-5.14.0-XXX.el10.x86_64+rt
    Copy to Clipboard
  7. 호스트에서와 동일한 방식으로 게스트 운영 체제에 대한 대규모 페이지를 구성합니다. 자세한 내용은 실시간 가상화 호스트에 대한 대규모 페이지 구성 을 참조하십시오.

검증

문제 해결

stress 테스트의 결과가 필요한 대기 시간을 초과하는 경우 다음을 수행합니다.

  1. 호스트에서 과부하 테스트를 다시 수행합니다. 대기 시간 결과가 최적인 경우 TuneD 및 Huge 페이지의 호스트 구성을 조정한 후 다시 테스트합니다. 자세한 내용은 실시간 가상화 호스트에 대한 TuneD 구성 및 실시간 가상화 호스트에 대한 대규모 페이지 구성을 참조하십시오.
  2. 호스트의 과부하 테스트 결과가 충분히 짧은 대기 시간을 표시하지만 게스트에서 그렇지 않은 경우 trace-cmd 유틸리티를 사용하여 자세한 테스트 보고서를 생성합니다. 자세한 내용은 RHEL 실시간 게스트의 대기 시간 문제 해결을 참조하십시오.

4.4. 실시간 가상 머신의 캐시 보호 설정

캐시 라인을 제거하면 실시간 VM(가상 머신)에서 성능 문제가 발생할 수 있습니다. 선택적으로 이 문제를 방지하려면 사용자 인터페이스 리소스 제어(resctrlfs') 기능을 사용하여 캐시 및 캐시 파티션을 관리합니다.

  • 호스트 시스템의 주 메모리 캐시를 파티션으로 분할
  • 각 파티션에 별도의 작업 할당
  • 실시간 애플리케이션을 실행하는 vCPU를 하나의 캐시 파티션에 할당
  • 하우스키핑 워크로드를 실행하는 vCPU 및 호스트 CPU를 다른 캐시 파티션에 할당

사전 요구 사항

  • 호스트에 실시간 가상 머신을 생성했습니다. 자세한 내용은 RHEL 실시간 게스트 운영 체제 설치를 참조하십시오.
  • 호스트에서 L2 또는 L3 캐시 파티셔닝을 지원하는 Intel 프로세서를 사용하고 있습니다. 이러한 경우를 확인하려면 다음을 수행하십시오.

    1. intel-cmt-cat 유틸리티를 설치합니다.

      # dnf install intel-cmt-cat
      Copy to Clipboard
    2. pqos 유틸리티를 사용하여 코어 캐시 세부 정보를 표시합니다.

      # pqos -d
      
      [...]
         Allocation
            Cache Allocation Technology (CAT)
              L3 CAT
      Copy to Clipboard

      이 출력은 CPU가 L3 캐시 파티셔닝을 지원하는 것을 나타냅니다.

프로세스

다음 단계에서는 다음과 같은 NUMA vCPU 고정 할당이 CPU에 있다고 가정합니다.

<cputune>
    <vcpupin vcpu='0' cpuset='16'/>
    <vcpupin vcpu='1' cpuset='17'/>
    <vcpupin vcpu='2' cpuset='18'/>
    <vcpupin vcpu='3' cpuset='19'/>
Copy to Clipboard
  1. resctrl 파일 시스템을 마운트합니다. 이렇게 하면 프로세서의 리소스 제어 기능을 사용할 수 있습니다.

    # mount -t resctrl resctrl /sys/fs/resctrl
    Copy to Clipboard

    시스템이 L2 또는 L3 캐시 파티션을 지원하는지 여부에 따라 L2 또는 L3 이라는 하위 디렉터리는 /sys/fs/resctrl/info 디렉터리에 마운트됩니다. 다음 단계에서는 시스템이 L3 캐시 파티셔닝을 지원하는 것으로 가정합니다.

  2. 캐시 디렉터리로 이동하고 해당 콘텐츠를 나열합니다.

    # cd /sys/fs/resctrl/info/L3/; ls
    
    bit_usage  cbm_mask  min_cbm_bits  num_closids  shareable_bits  sparse_masks
    Copy to Clipboard
  3. cbm_mask 파일의 값을 확인합니다.

    # cat cbm_mask
    
    ffff
    Copy to Clipboard

    이 값은 16진수 코드의 캐시 비트마스크를 나타냅니다. ffff 는 모든 16비트의 캐시를 워크로드에서 사용할 수 있음을 의미합니다.

  4. "shareable_bits" 파일의 값을 확인합니다.

    # cat shareable_bits
    
    0
    Copy to Clipboard

    이 값은 I/O와 같은 다른 실행 중인 프로세스에서 공유하는 L3 캐시 파티션을 나타내며 전용 캐시 파티션에서는 사용해서는 안 됩니다. 0 은 모든 L3 캐시 파티션을 사용할 수 있음을 의미합니다.

  5. 스키마타 파일을 보고 글로벌 캐시 할당을 확인합니다.

    # cat /sys/fs/resctrl/schemata
    
    L3:0=ffff;2=ffff;4=ffff;6=ffff;8=ffff;10=ffff;12=ffff;14=ffff
    Copy to Clipboard

    이 출력은 L3 캐시 파티션, CPU 소켓 0, 2, 4, 6, 8, 10, 12 및 14의 경우 기본 제어 그룹에 완전히 할당되었음을 나타냅니다. 이 예에서 CPU 소켓 16 - 19는 vCPU 0-3에 고정되어 있습니다.

  6. 실시간 애플리케이션에 대해 설정할 캐시 배포를 결정합니다. 예를 들어 실시간 애플리케이션 및 하우스키핑 애플리케이션 모두에 대해 8MB를 균등하게 배포하는 경우 다음을 수행합니다.

    • 실시간 애플리케이션의 캐시 비트마스크는 ff00입니다.
    • 하우스키핑 애플리케이션의 캐시 비트마스크는 00ff입니다.
  7. 하우스키핑 프로세스에 필요한 캐시 할당으로 기본 schemata 파일을 조정합니다. 예를 들어 CPU 소켓 8에 8MB를 할당하려면 다음을 수행합니다.

    # echo "L3:0=ffff;2=ffff;4=ffff;6=ffff;8=00ff;10=ffff;12=ffff;14=ffff" > /sys/fs/resctrl/schemata
    Copy to Clipboard
  8. 실시간 프로세스에 대한 특정 제어 그룹(예: part1 )을 생성합니다.

    # mkdir /sys/fs/resctrl/part1
    Copy to Clipboard
  9. part1 제어 그룹에 대한 schemata 파일을 만들고 하우스키핑 캐시 할당과 충돌하지 않는 캐시 할당을 사용하도록 설정합니다.

    # echo "L3:0=ffff;2=ffff;4=ffff;6=ffff;8=ff00;10=ffff;12=ffff;14=ffff" > /sys/fs/resctrl/part1/schemata
    Copy to Clipboard

    이 설정을 통해 L3 캐시 8은 실시간 프로세스에 캐시 할당의 절반을 사용하고 나머지 절반은 하우스키핑 프로세스에 사용합니다. 다른 모든 L3 캐시는 실시간 프로세스와 하우스키핑에서 자유롭게 사용할 수 있습니다.

  10. 실시간 vCPU(이 경우 17, 18 및 19)에 고정된 CPU를 이 제어 그룹에 할당합니다.

    # echo 17,18,19 > part1/cpus_list
    Copy to Clipboard

검증

  • 이전에 VM의 대기 시간을 테스트한 경우 cyclictest 유틸리티를 다시 실행합니다. 자세한 내용은 실시간 가상화 시스템 테스트를 참조하십시오.

    최대 대기 시간이 이전보다 작으면 캐시 보호를 올바르게 설정했습니다.

4.5. RHEL 실시간 게스트 설치 문제 해결

실시간 호스트에 RHEL 10 가상 머신(VM)을 설치하는 동안 다음 오류 중 하나가 발생할 수 있습니다. 이러한 문제를 해결하거나 해결하려면 다음 권장 사항을 사용하십시오.

  • 오류: 호스트가 가상화 옵션을 지원하지 않음

    • 호스트 BIOS에서 가상화가 활성화되었는지 확인합니다.
    • 호스트의 cpu 플래그에 Intel의 vmx 또는 AMD의 경우 svm 이 포함되어 있는지 확인합니다.

      $ cat /proc/cpuinfo | grep vmx
      Copy to Clipboard
    • lsmod 명령이 kvmkvm_intel 또는 kvm_amd 모듈을 감지하는지 확인합니다.

      $ lsmod | grep kvm
      Copy to Clipboard
    • kernel-rt-kvm 패키지가 설치되어 있는지 확인합니다.

      $ dnf info kernel-rt-kvm
      Copy to Clipboard
    • /dev/kvm 장치가 있는지 확인합니다.
    • virt-host-validate 유틸리티를 실행하여 추가 문제를 감지합니다.
    • kvm-unit-tests 를 실행합니다.
  • 디스크 이미지에 액세스하는 동안 권한 관련 문제

    • /etc/libvirt/qemu.conf 파일에서 group =user = 행의 주석을 제거합니다.
    • virtqemud 서비스를 다시 시작합니다.

      $ service virtqemud restart
      Copy to Clipboard

4.6. RHEL 실시간 게스트의 대기 시간 문제 해결

RHEL 실시간 게스트 운영 체제의 대기 시간을 해결하려면 trace-cmd 테스트를 실행하여 게스트에 대한 커널 추적 파일을 생성합니다. 이후 이 테스트의 출력을 사용하여 Red Hat의 지원을 요청할 수 있습니다.

사전 요구 사항

  • RHEL 10 가상 머신을 설치하고 실시간 워크로드에 맞게 구성을 조정했습니다. 자세한 내용은 RHEL 실시간 게스트 운영 체제 설치를 참조하십시오.
  • SSH를 사용하여 게스트에 연결할 수 있습니다. 자세한 내용은 SSH를 사용하여 가상 머신에 연결을 참조하십시오.
  • trace-cmd 유틸리티는 호스트와 게스트 모두에 설치됩니다.

    # dnf install trace-cmd
    Copy to Clipboard

프로세스

  1. VSOCK 인터페이스를 사용하도록 테스트할 VM을 구성합니다.

    1. 호스트에서 virsh edit 명령을 사용하여 VM의 XML 구성을 엽니다.
    2. 구성의 < devices> 섹션에 다음 행을 추가합니다.

      <vsock model="virtio">
        <cid auto="no" address="3"/>
      Copy to Clipboard

      여러 VM에서 테스트를 수행하는 경우 각각에 대해 다른 주소 값을 설정합니다.

    3. 구성을 저장하고 종료합니다.
  2. 추적이 제대로 작동하는지 확인하려면 호스트에서 다음 짧은 테스트를 실행합니다. 이렇게 하면 Cryostat_FIFO 우선 순위에서 실행되는 vCPU로 인해 게스트가 응답하지 않습니다.

    1. 호스트에서 다음 명령을 사용합니다.

      # trace-cmd record -m 1000 -e kvm_exit
      Copy to Clipboard
    2. 약 10초 후에 Ctrl-C 를 눌러 테스트를 중단합니다.
    3. 테스트에서 동일한 디렉터리에 trace.dat 파일을 생성하고 파일이 비어 있지 않은지 확인합니다.
  3. VM을 시작합니다.
  4. 호스트에서 VM에 대한 암호 없는 SSH 액세스를 구성합니다.

    1. VM의 IP 주소를 가져옵니다.

      # virsh domifaddr <vm-name>
      
       Name       MAC address          Protocol     Address
      -------------------------------------------------------------------
       vnet0      52:54:00:6b:29:9f    ipv4         192.168.122.145/24
      Copy to Clipboard
    2. SSH 공개 키를 VM에 복사합니다.

      # ssh-copy-id root@<vm-ip>
      Copy to Clipboard
    3. 선택 사항: VM에 대한 암호 없는 로그인을 테스트합니다.

      # ssh root@<vm-ip>
      Copy to Clipboard

      게스트의 루트 액세스에 연결하는 경우 암호 없는 SSH를 성공적으로 구성했습니다.

  5. 게스트 운영 체제에서 백그라운드에서 trace-cmd 에이전트를 시작합니다.

    # trace-cmd agent &
    Copy to Clipboard

    에이전트는 게스트에서 지속적으로 실행되며 호스트의 명령을 기다립니다.

  6. 호스트에서 trace-cmd 명령을 사용하고 VM에서 vCPU 고정 구성의 매개변수를 조정합니다.

    # trace-cmd record --poll -m 1000 \
      -e <host-trace-points> \
      -f "cpu==<host_cpu_num> || cpu==<host_cpu_num> || cpu==<host_cpu_num>" \
      -A <guest-vsock-port> \
      -e <guest-trace-points> \
      -f "cpu==<guest_cpu_num> || cpu==<guest_cpu_num> || cpu==<guest_cpu_num>" \
      ssh root@<vm-ip> "<latency-test-command>"
    Copy to Clipboard

    다음과 같이 명령의 값을 바꿉니다.

    여러 VM을 동시에 테스트하려면 다음과 같이 명령을 조정합니다.

    # trace-cmd record -m 1000 \
      -e <host-trace-points> \
      -A <guest1-vsock-port> -e <guest-trace-points> \
      -A <guest2-vsock-port> -e <guest-trace-points> \
      bash -c "ssh root@<vm1-ip> \
      \"<latency-test-command>\" \
      & ssh root@<vm2-ip> \
      \"<latency-test-command>\""
    Copy to Clipboard

    예를 들면 다음과 같습니다.

    # trace-cmd record --poll -m 1000 \
      -e sched_switch -e hrtimer_start -e hrtimer_expire_entry -e hrtimer_expire_exit -e irq_handler_entry -e local_timer_entry -e local_timer_exit -e reschedule_entry -e reschedule_exit -e call_function_entry -e call_function_exit -e call_function_single_entry -e call_function_single_exit -e irq_work_entry -e irq_work_exit -e tick_stop -e ipi_send_cpumask -e kvm_exit -e kvm_entry -e ipi_send_cpu -e csd_queue_cpu -e csd_function_entry -e csd_function_exit \
      -f "cpu==3 || cpu==5 || cpu==7 || cpu==9 || cpu==11 || cpu==13 || cpu==15 || cpu==17" \
      -A 3 \
      -e sched_switch -e hrtimer_start -e hrtimer_expire_entry -e hrtimer_expire_exit -e irq_handler_entry -e local_timer_entry -e local_timer_exit -e reschedule_entry -e reschedule_exit -e call_function_entry -e call_function_exit -e call_function_single_entry -e call_function_single_exit -e irq_work_entry -e irq_work_exit -e tick_stop -e ipi_send_cpumask -e kvm_exit -e kvm_entry -e ipi_send_cpu -e csd_queue_cpu -e csd_function_entry -e csd_function_exit \
      -f "cpu==2 || cpu==3 || cpu==4 || cpu==5 || cpu==6 || cpu==7 || cpu==8 || cpu==9" \
      ssh root@192.168.122.10 "cyclictest -m -q -p95 --policy=fifo -D 10min -h60 -t 8 -a 2,3,4,5,6,7,8,9 -i 200 -b 50 --mainaffinity 0,1 --tracemark"
    Copy to Clipboard

    이 명령은 다음을 수행합니다.

    • IP 192.168.122.10 및 VSOCK 포트 3으로 단일 VM 테스트
    • 실시간 배포와 관련된 일반적인 추적 지점을 사용합니다.
    • vCPU 2-9가 NUMA 고정되는 호스트 CPU 3,5,7,9,11,13,15 및 17을 추적합니다.
    • 10 분 동안 cyclictest 를 트리거합니다.

    테스트가 완료되면 추적 데이터가 호스트에 trace.dat 파일과 trace-.dat 파일로 저장됩니다.

  7. trace-cmd 데이터에서 사람이 읽을 수 있는 보고서를 생성합니다. 예를 들어 VM의 VSOCK 포트가 3인 경우

    # trace-cmd report -i trace.dat -i trace-3.dat > kvm_rt_latency.log
    Copy to Clipboard

    여러 VM에서 테스트를 수행한 경우 각각에 대한 보고서를 생성합니다.

    # trace-cmd report -i trace.dat -i trace-3.dat > kvm_rt_latency_1.log
    # trace-cmd report -i trace.dat -i trace-4.dat > kvm_rt_latency_2.log
    Copy to Clipboard
  8. 테스트를 완료한 후 게스트 운영 체제에서 trace-cmd 에이전트를 중지합니다.

    # pkill trace-cmd
    Copy to Clipboard
  9. Red Hat에서 지원 케이스를 열고 이전 단계에서 얻은 추적 로그를 첨부합니다.

문제 해결

추적에 실패하는 경우 다음을 수행하고 다시 시도합니다.

  • vsock 이 게스트에 올바르게 구성되었는지 확인합니다.
  • trace-cmd 에이전트가 게스트에서 실행 중인지 확인합니다.
  • 호스트에 추적 파일을 위한 충분한 디스크 공간이 있는지 확인합니다. 최적으로 추적을 실행하는 분마다 최소 2GB의 여유 디스크 공간이 있어야 합니다.
  • VM의 vCPU 고정 구성이 trace-cmd 에 사용한 매개변수와 일치하는지 확인합니다. VM 구성의 관련 부분을 보려면 virsh vcpupin < vm-name> 을 사용합니다.

법적 공지

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat