Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

8장. KVM 게스트 타이밍 관리

가상화는 게스트 가상 머신의 유지 시간에 대한 몇 가지 문제가 발생합니다.
  • 인터럽트는 항상 동시에 그리고 모든 게스트 가상 머신에 즉시 전달될 수 없습니다. 이는 가상 머신의 인터럽트가 실제 인터럽트가 아니기 때문입니다. 대신 호스트 시스템에 의해 게스트 가상 머신에 삽입됩니다.
  • 호스트는 다른 게스트 가상 머신을 실행하거나 다른 프로세스를 실행할 수 있습니다. 따라서 일반적으로 인터럽트에 필요한 정확한 타이밍이 항상 가능한 것은 아닙니다.
정확한 시간 유지 없이 게스트 가상 머신은 세션 유효성, 마이그레이션 및 기타 네트워크 활동에 대한 타임스탬프가 정확하므로 네트워크 애플리케이션 및 프로세스에 문제가 발생할 수 있습니다.
KVM은 게스트 가상 머신에 반가상화 클럭(kvm-clock)을 제공하여 이러한 문제를 방지합니다. 그러나 게스트 마이그레이션과 같은 부정확성을 유지하는 시간에 의해 영향을 받을 수 있는 활동을 시도하기 전에 타이밍을 테스트하는 것은 여전히 중요합니다.
중요
위에 설명된 문제를 방지하려면 호스트와 게스트 가상 시스템에서 NTP(Network Time Protocol)를 구성해야 합니다. Red Hat Enterprise Linux 6 및 이전 버전을 사용하는 게스트의 경우 NTP는 ntpd 서비스에 의해 구현됩니다. 자세한 내용은 Red Hat Enterprise 6 배포 가이드 를 참조하십시오.
Red Hat Enterprise Linux 7을 사용하는 시스템에서는 ntpd 또는 chronyd 서비스에서 NTP 시간 동기화 서비스를 제공할 수 있습니다. Chrony는 가상 머신에는 몇 가지 장점이 있습니다. 자세한 내용은 Red Hat Enterprise Linux 7 시스템 관리자 가이드 의 chrony Suite 를 사용한 NTP 구성 및 NTP 사용 ntpd 섹션을 참조하십시오.

게스트 가상 머신 시간 동기화의 메커니즘

기본적으로 게스트는 다음과 같이 하이퍼바이저와 시간을 동기화합니다.

  • 게스트 시스템이 부팅되면 게스트가 에뮬레이션된 실시간 Clock(RTC)에서 시간을 읽습니다.
  • NTP 프로토콜이 시작되면 게스트 클럭을 자동으로 동기화합니다. 이후 일반 게스트 작동 중에 NTP는 게스트에서 클럭 조정을 수행합니다.
  • 일시 중지 또는 복원 프로세스 후 게스트를 다시 시작하면 게스트 시계를 지정된 값과 동기화하는 명령이 관리 소프트웨어(예: virt-manager)에서 발행해야 합니다. 이 동기화는 QEMU 게스트 에이전트 가 게스트에 설치되어 해당 기능을 지원하는 경우에만 작동합니다. 게스트 클럭이 동기화하는 값은 일반적으로 호스트 클럭 값입니다.

고정 TSC (Time Stamp Boost)

최신 Intel 및 AMD CPU는 고정 TSC(Time Stamp counter)를 제공합니다. CPU 코어 자체 변경 빈도(예: 전력 절감 정책 준수)의 개수 빈도는 다릅니다. TSC가 연속된 TSC가 있는 CPU는 KVM 게스트의 클럭 소스로 사용하기 위해 필요합니다.

constant_tsc 플래그가 있는 경우 CPU에는 고정 TSC가 있습니다. CPU에 constant_tsc 플래그가 있는지 확인하려면 다음 명령을 입력합니다.
$ cat /proc/cpuinfo | grep constant_tsc
출력을 지정하면 CPU에 constant_tsc bit가 있습니다. 출력을 지정하지 않으면 아래 지침을 따릅니다.

Constant TSC를 사용하지 않고 호스트 구성

일정한 TSC 빈도가 없는 시스템은 TSC를 가상 머신의 클럭 소스로 사용할 수 없으며 추가 구성이 필요합니다. 전원 관리 기능은 정확한 시간 유지를 방해하고 게스트 가상 머신이 KVM을 사용하여 시간을 정확하게 유지하려면 비활성화해야 합니다.

중요
이 지침은 AMD 버전 F CPU에만 적용됩니다.
CPU에 constant_tsc 비트가 없는 경우 모든 전원 관리 기능 을 비활성화합니다. 각 시스템에는 시간을 유지하기 위해 사용하는 여러 타이머가 있습니다. TSC는 호스트에서 안정적이지 않으며, cpufreq 변경, 깊이 C 상태 또는 더 빠른 TSC를 사용하는 호스트로의 마이그레이션으로 인해 발생하는 경우가 있습니다. 딥 C 절전 상태는 TSC를 중지할 수 있습니다. 커널이 딥 C 상태를 사용하는 것을 방지하기 위해 커널 부팅에 processor.max_cstate=1 을 추가합니다. 이 변경 사항을 영구적으로 변경하려면 /etc/default/grub파일에서 GRUB_CMDLINE_LINUX 키 값을 편집합니다. 예를 들어 각 부팅마다 긴급 모드를 활성화하려면 다음과 같이 항목을 편집합니다.
GRUB_CMDLINE_LINUX="emergency"
GRUB 2 부팅 메뉴에 매개 변수를 추가하는 것과 유사하게 GRUB_CMDLINE_LINUX 키에 대해 여러 매개변수를 지정할 수 있습니다.
cpufreq 를 비활성화하려면 ( constant_tsc없이 호스트에만 필요) kernel-tools 를 설치하고 cpupower.service (systemctl enable cpupower.service)를 활성화합니다. 게스트 가상 머신이 부팅될 때마다 이 서비스를 비활성화하려면 /etc/sysconfig/cpupower 에서 구성 파일을 변경하고 CPUPOWER_START_OPTS 및 CPUPOWER_STOP_OPTS 를 변경합니다. 유효한 제한은 /sys/devices/system/cpu/cpuid/cpufreq/scaling_available_governors 파일에서 확인할 수 있습니다. 이 패키지 또는 전원 관리 및 관리자에 대한 자세한 내용은 Red Hat Enterprise Linux 7 전원 관리 가이드 를 참조하십시오.

8.1. 호스트 전체 시간 동기화

KVM 게스트의 가상 네트워크 장치는 하드웨어 타임스탬프를 지원하지 않으므로 NTP 또는 PTP와 같은 네트워크 프로토콜을 사용하는 게스트의 클럭을 10초보다 더 나은 정확도로 동기화하기가 어렵습니다.
게스트의 보다 정확한 동기화가 필요한 경우 NTP 또는 PTP를 사용하여 호스트의 클럭을 하드웨어 타임스탬프와 동기화하고 게스트를 호스트에 직접 동기화하는 것이 좋습니다. Red Hat Enterprise Linux 7.5 이상에서는 게스트가 마이크로초 정확도와 호스트를 동기화할 수 있는 가상 PTP 하드웨어 클럭 (PHC)을 제공합니다.
중요
EgressIPC가 제대로 작동하려면 호스트와 게스트 모두 RHEL 7.5 이상을 운영 체제 (OS)로 사용해야 합니다.
EgressIPC 장치를 활성화하려면 게스트 OS에서 다음을 수행하십시오.
  1. 재부팅 후 로드하도록 ptp_kvm 모듈을 설정합니다.
    # echo ptp_kvm > /etc/modules-load.d/ptp_kvm.conf
  2. /dev/ptp0 시계를 chrony 구성에 대한 참조로 추가합니다.
    # echo "refclock PHC /dev/ptp0 poll 2" >> /etc/chrony.conf
  3. chrony 데몬을 다시 시작하십시오.
    # systemctl restart chronyd
  4. 호스트 게스트 시간 동기화가 올바르게 구성되었는지 확인하려면 게스트에서 chronyc sources 명령을 사용합니다. 출력은 다음과 유사해야 합니다.
    # chronyc sources
    210 Number of sources = 1
    MS Name/IP address         Stratum Poll Reach LastRx Last sample
    ===============================================================================
    #* PHC0                          0   2   377     4     -6ns[   -6ns] +/-  726ns