6.17.3. KVM 가상 머신 타이밍 관리

가상화는 가상 머신 시간 유지에 대한 다양한 문제를 제기합니다. 클럭 소스로서 TSC를 사용하는 가상 머신은 일부 CPU에 고정 TSC가 없으므로 타이밍 문제가 발생할 수 있습니다. 정확한 유지 관리 없이 실행되는 가상 머신은 가상 머신이 실제 시간보다 빠르게 실행되거나 느려지기 때문에 일부 네트워크화된 애플리케이션에 심각한 영향을 미칠 수 있습니다.

KVM은 가상 머신에 반가상화 클럭을 제공하여 이 문제를 해결합니다. KVM pvclock 은 이를 지원하는 KVM 게스트에 대한 안정적인 타이밍 소스를 제공합니다.

현재 Red Hat Enterprise Linux 5.4 이상 가상 머신만 반가상화 클럭을 완벽하게 지원합니다.

가상 머신은 부정확한 클럭 및 카운터로 인해 발생하는 여러 가지 문제가 있을 수 있습니다.

  • 클럭은 세션을 무효화하고 네트워크에 영향을 미치는 실제 시간과 동기화되지 않을 수 있습니다.
  • 느린 클럭이 있는 가상 머신의 마이그레이션에 문제가 있을 수 있습니다.

이러한 문제는 다른 가상화 플랫폼에 존재하며 타이밍은 항상 테스트해야 합니다.

중요

NTP(Network Time Protocol) 데몬은 호스트 및 가상 시스템에서 실행해야 합니다. ntpd 서비스를 활성화하고 기본 시작 순서에 추가합니다.

  • For Red Hat Enterprise Linux 6
# service ntpd start
# chkconfig ntpd on
  • For Red Hat Enterprise Linux 7
# systemctl start ntpd.service
# systemctl enable ntpd.service

ntpd 서비스를 사용하면 모든 경우에 클럭 오차의 영향을 최소화해야 합니다.

사용하려는 NTP 서버가 작동 가능하고 호스트 및 가상 시스템에서 액세스할 수 있어야 합니다.

CPU에 고정 TSC가 있는지 확인

constant_tsc 플래그가 있는 경우 CPU에는 고정 TSC가 있습니다. CPU에 constant_tsc 플래그가 있는지 확인하려면 다음 명령을 실행합니다.

$ cat /proc/cpuinfo | grep constant_tsc

어떤 출력이 지정된 경우 CPU에 constant_tsc 비트가 있습니다. 출력이 제공되지 않으면 아래 지침을 따르십시오.

고정 TSC가 없는 호스트 구성

일정한 타임스탬프 카운터가 없는 시스템에는 추가 구성이 필요합니다. 전원 관리 기능은 정확한 시간 유지를 방해하며 KVM을 정확하게 사용하려면 가상 머신을 비활성화해야 합니다.

중요

이러한 지침은 AMD 리버전 F CPU에만 적용됩니다.

CPU에 constant_tsc 비트가 없는 경우 모든 전원 관리 기능(BZ#513138)을 비활성화합니다. 각 시스템에는 시간을 유지하는 데 사용하는 몇 가지 타이머가 있습니다. TSC는 호스트에서 안정적이지 않으며, 이로 인해 cpufreq 변경, 깊은 C 상태 또는 더 빠른 TSC가 있는 호스트로 마이그레이션되는 경우가 있습니다. 깊은 C 수면 상태는 TSC를 중지할 수 있습니다. 커널이 C 상태를 많이 사용하지 않도록 하려면 호스트의 grub.conf 파일의 커널 부팅 옵션에 processor.max_cstate=1 을 추가합니다.

term Red Hat Enterprise Linux Server (2.6.18-159.el5)
        root (hd0,0)
	kernel /vmlinuz-2.6.18-159.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet processor.max_cstate=1

/etc/sysconfig/cpuspeed 구성 파일을 편집하고 MIN_SPEEDMAX_SPEED 변수를 사용 가능한 최고 빈도로 변경하여 cpufreq ( constant_tsc없이 호스트에만 필요)를 비활성화합니다. 유효한 제한은 /sys/devices/system/cpu/cpu/cpufreq/scaling_available_frequeies 파일에서 확인할 수 있습니다.

engine-config 도구를 사용하여 호스트가 동기화되지 않을 때 경고를 수신합니다.

engine-config 도구를 사용하여 호스트가 동기화되지 않을 때 경고를 구성할 수 있습니다.

호스트에 시간 드리프트에 대한 두 가지 관련 매개 변수가 있습니다. Enable HostTimeDrift InSec. EnableHostTimeDrift 값이 false인 EnableHostTimeDrift는 호스트 시간 드리프트에 대한 경고 알림을 수신하도록 활성화할 수 있습니다. HostTimeDriftInSec 매개변수는 경고가 전송되기 전에 허용되는 최대 드리프트를 설정하는 데 사용됩니다.

호스트당 시간당 한 번씩 경고가 전송됩니다.

Red Hat Enterprise Linux 가상 머신에서 반가상화 클럭 사용

특정 Red Hat Enterprise Linux 가상 머신의 경우 추가 커널 매개 변수가 필요합니다. 이러한 매개변수는 가상 시스템의 /boot/grub/grub.conf 파일에 있는 /kernel 행 끝에 추가하여 설정할 수 있습니다.

참고

ktune 패키지를 사용하여 커널 매개 변수를 구성하는 프로세스를 자동화할 수 있습니다.

ktune 패키지는 대화형 Bourne 쉘 스크립트인 fix_clock_drift.sh 를 제공합니다. 수퍼유저로 실행하는 경우 이 스크립트는 다양한 시스템 매개 변수를 검사하여 실행되는 가상 시스템이 부하에서 클럭 드리프트에 취약할 수 있는지 확인합니다. 이 경우 /boot/grub/ 디렉터리에 새 grub.conf.kvm 파일을 생성합니다. 이 파일에는 커널이 KVM 가상 머신에서 상당한 클럭 드리프트를 허용할 수 있는 추가 커널 매개변수가 포함된 커널 부팅 줄이 포함되어 있습니다. superuser로 fix_clock_drift.sh 를 실행한 후 스크립트가 grub.conf.kvm 파일을 생성한 후 시스템 관리자가 수동으로 가상 시스템의 현재 grub.conf 파일을 백업해야 합니다. 새 grub.conf.kvm 파일은 수동으로 검사해야 합니다. 추가 부팅 행 매개 변수를 제외하고 grub.conf.kvm 파일을 수동으로 검사해야 합니다. grub.conf.kvm 파일의 이름은 grub.conf 여야 하며, 가상 시스템을 재부팅해야 합니다.

아래 표에는 고정 TSC가 없는 시스템의 가상 머신에 필요한 Red Hat Enterprise Linux 버전 및 매개 변수가 나열되어 있습니다.

Red Hat Enterprise Linux추가 가상 머신 커널 매개변수

반가상화 시계가 포함된 AMD64/Intel 64

추가 매개변수가 필요하지 않음

반가상화 시계가 없는 AMD64/Intel 64

notsc lpj=n

반가상화 시계가 있는 5.4 x86

추가 매개변수가 필요하지 않음

반가상화 클럭이 없는 5.4 x86

clocksource=acpi_pm lpj=n

5.3 AMD64/Intel 64

notsc

5.3 x86

clocksource=acpi_pm

4.8 AMD64/Intel 64

notsc

4.8 x86

clock=pmtmr

3.9 AMD64/Intel 64

추가 매개변수가 필요하지 않음

3.9 x86

추가 매개변수가 필요하지 않음