Guest OS time retention
KVM Technology is full virtualization, the guest OS does not need to make changes to run directly, but in the timing of the problem, the guest OS timing is a way to count the clock interrupt, and then the conversion, but the host generated clock interrupt can not reach all the guest OS in time, Because interrupts in the guest OS are not real hardware interrupts, it is an interrupt injected by host
Many Web applications, sessions authentication in the Web, and so on, will call the system time, the guest OS if the time is wrong, it will cause a program error, to this end, KVM to guest VMs provide a semi-virtualized clock (kvm-clock), In RHEL5.5 and above, Kvm-clock is used as the default clock source, and you can use the following command in guest to see if Kvm-clock is used
Cat /sys/devices/system/clocksource/clocksource0/current_clocksource
Kvm-clock
In the Kvm-clock mode, the guest OS does not have direct access to the host clock, and the host writes the system time to a memory page that the guest can read, so that the guest can read this memory page to set its own hardware time, but host does not update the memory page in real time. Instead, it is updated when a VM event (VM shutdown, reboot, etc.) occurs, so this does not keep the guest time accurate
Before proceeding, we must first understand the concepts of system time and hardware time.
UTC time and local time
UTC time: Also known as world standard Time, World unification time, UTC is calibrated by atomic clock, the rest of the world is based on this as the base time with its own time zone to set its local time
local time: local time is generally different from UTC because it is in a different time zone, and the conversion method is
local time = UTC + Time zone or UTC = local time-time zone
Time zone East is positive, West is negative, in China, time zone for East Eight district, that is, +8 District, local time all use Beijing time, on Linux display is CST, so cst=utc+ (+ 8 hours) or utc=cst-(+ 8 hours)
(Chinese standard Time, when China standards, attention to the central United States Standard Time is also abbreviated as CST)
System time and hardware time
Hardware time: The motherboard on the BIOS time, by the motherboard battery power to maintain the operation, the system to read this time when the boot, and according to it to set the system time (Note: System startup time According to the hardware time set the process may exist time zone conversion, according to/etc/localtime)
System time: This is the time that we see when we execute the date command, and all the time calls under the Linux system (except the commands that directly access hardware time) are used.
/etc/localtime This file is used to set the time zone of the system, copy the corresponding time zone file in/usr/share/zoneinfo/to/etc and rename it to LocalTime to modify the time zone setting (also can be modified using the Tzselect command). And this modification is immediately valid for the date command. This file is used for both date and hwclock, which translates between UTC and local time based on the time zone setting of the file.
Setting the virtual machine hardware clock in Libvirt
KVM virtual machines are typically managed using Libvirt, and in their configured XML file, there are information about the virtual machine hardware clock settings
<offset= ' localtime '> </clock>
The offset property of clock has "UTC", "LocalTime", "timezone", "variable" four selectable options
If the guest OS is a Linux system, "UTC" Should be used, and the guest OS will synchronize the UTC time to host at startup and then calculate the system time based on the time zone set in/etc/localtime
If the guest OS is a Windows system, then "LocalTime" should be selected, and the guest OS will synchronize the system time to host at startup
Time zone settings in a KVM virtualized environment