0001 .. SPDX-License-Identifier: GPL-2.0
0002
0003 ======================================================
0004 Timekeeping Virtualization for X86-Based Architectures
0005 ======================================================
0006
0007 :Author: Zachary Amsden <zamsden@redhat.com>
0008 :Copyright: (c) 2010, Red Hat. All rights reserved.
0009
0010 .. Contents
0011
0012 1) Overview
0013 2) Timing Devices
0014 3) TSC Hardware
0015 4) Virtualization Problems
0016
0017 1. Overview
0018 ===========
0019
0020 One of the most complicated parts of the X86 platform, and specifically,
0021 the virtualization of this platform is the plethora of timing devices available
0022 and the complexity of emulating those devices. In addition, virtualization of
0023 time introduces a new set of challenges because it introduces a multiplexed
0024 division of time beyond the control of the guest CPU.
0025
0026 First, we will describe the various timekeeping hardware available, then
0027 present some of the problems which arise and solutions available, giving
0028 specific recommendations for certain classes of KVM guests.
0029
0030 The purpose of this document is to collect data and information relevant to
0031 timekeeping which may be difficult to find elsewhere, specifically,
0032 information relevant to KVM and hardware-based virtualization.
0033
0034 2. Timing Devices
0035 =================
0036
0037 First we discuss the basic hardware devices available. TSC and the related
0038 KVM clock are special enough to warrant a full exposition and are described in
0039 the following section.
0040
0041 2.1. i8254 - PIT
0042 ----------------
0043
0044 One of the first timer devices available is the programmable interrupt timer,
0045 or PIT. The PIT has a fixed frequency 1.193182 MHz base clock and three
0046 channels which can be programmed to deliver periodic or one-shot interrupts.
0047 These three channels can be configured in different modes and have individual
0048 counters. Channel 1 and 2 were not available for general use in the original
0049 IBM PC, and historically were connected to control RAM refresh and the PC
0050 speaker. Now the PIT is typically integrated as part of an emulated chipset
0051 and a separate physical PIT is not used.
0052
0053 The PIT uses I/O ports 0x40 - 0x43. Access to the 16-bit counters is done
0054 using single or multiple byte access to the I/O ports. There are 6 modes
0055 available, but not all modes are available to all timers, as only timer 2
0056 has a connected gate input, required for modes 1 and 5. The gate line is
0057 controlled by port 61h, bit 0, as illustrated in the following diagram::
0058
0059 -------------- ----------------
0060 | | | |
0061 | 1.1932 MHz|---------->| CLOCK OUT | ---------> IRQ 0
0062 | Clock | | | |
0063 -------------- | +->| GATE TIMER 0 |
0064 | ----------------
0065 |
0066 | ----------------
0067 | | |
0068 |------>| CLOCK OUT | ---------> 66.3 KHZ DRAM
0069 | | | (aka /dev/null)
0070 | +->| GATE TIMER 1 |
0071 | ----------------
0072 |
0073 | ----------------
0074 | | |
0075 |------>| CLOCK OUT | ---------> Port 61h, bit 5
0076 | | |
0077 Port 61h, bit 0 -------->| GATE TIMER 2 | \_.---- ____
0078 ---------------- _| )--|LPF|---Speaker
0079 / *---- \___/
0080 Port 61h, bit 1 ---------------------------------/
0081
0082 The timer modes are now described.
0083
0084 Mode 0: Single Timeout.
0085 This is a one-shot software timeout that counts down
0086 when the gate is high (always true for timers 0 and 1). When the count
0087 reaches zero, the output goes high.
0088
0089 Mode 1: Triggered One-shot.
0090 The output is initially set high. When the gate
0091 line is set high, a countdown is initiated (which does not stop if the gate is
0092 lowered), during which the output is set low. When the count reaches zero,
0093 the output goes high.
0094
0095 Mode 2: Rate Generator.
0096 The output is initially set high. When the countdown
0097 reaches 1, the output goes low for one count and then returns high. The value
0098 is reloaded and the countdown automatically resumes. If the gate line goes
0099 low, the count is halted. If the output is low when the gate is lowered, the
0100 output automatically goes high (this only affects timer 2).
0101
0102 Mode 3: Square Wave.
0103 This generates a high / low square wave. The count
0104 determines the length of the pulse, which alternates between high and low
0105 when zero is reached. The count only proceeds when gate is high and is
0106 automatically reloaded on reaching zero. The count is decremented twice at
0107 each clock to generate a full high / low cycle at the full periodic rate.
0108 If the count is even, the clock remains high for N/2 counts and low for N/2
0109 counts; if the clock is odd, the clock is high for (N+1)/2 counts and low
0110 for (N-1)/2 counts. Only even values are latched by the counter, so odd
0111 values are not observed when reading. This is the intended mode for timer 2,
0112 which generates sine-like tones by low-pass filtering the square wave output.
0113
0114 Mode 4: Software Strobe.
0115 After programming this mode and loading the counter,
0116 the output remains high until the counter reaches zero. Then the output
0117 goes low for 1 clock cycle and returns high. The counter is not reloaded.
0118 Counting only occurs when gate is high.
0119
0120 Mode 5: Hardware Strobe.
0121 After programming and loading the counter, the
0122 output remains high. When the gate is raised, a countdown is initiated
0123 (which does not stop if the gate is lowered). When the counter reaches zero,
0124 the output goes low for 1 clock cycle and then returns high. The counter is
0125 not reloaded.
0126
0127 In addition to normal binary counting, the PIT supports BCD counting. The
0128 command port, 0x43 is used to set the counter and mode for each of the three
0129 timers.
0130
0131 PIT commands, issued to port 0x43, using the following bit encoding::
0132
0133 Bit 7-4: Command (See table below)
0134 Bit 3-1: Mode (000 = Mode 0, 101 = Mode 5, 11X = undefined)
0135 Bit 0 : Binary (0) / BCD (1)
0136
0137 Command table::
0138
0139 0000 - Latch Timer 0 count for port 0x40
0140 sample and hold the count to be read in port 0x40;
0141 additional commands ignored until counter is read;
0142 mode bits ignored.
0143
0144 0001 - Set Timer 0 LSB mode for port 0x40
0145 set timer to read LSB only and force MSB to zero;
0146 mode bits set timer mode
0147
0148 0010 - Set Timer 0 MSB mode for port 0x40
0149 set timer to read MSB only and force LSB to zero;
0150 mode bits set timer mode
0151
0152 0011 - Set Timer 0 16-bit mode for port 0x40
0153 set timer to read / write LSB first, then MSB;
0154 mode bits set timer mode
0155
0156 0100 - Latch Timer 1 count for port 0x41 - as described above
0157 0101 - Set Timer 1 LSB mode for port 0x41 - as described above
0158 0110 - Set Timer 1 MSB mode for port 0x41 - as described above
0159 0111 - Set Timer 1 16-bit mode for port 0x41 - as described above
0160
0161 1000 - Latch Timer 2 count for port 0x42 - as described above
0162 1001 - Set Timer 2 LSB mode for port 0x42 - as described above
0163 1010 - Set Timer 2 MSB mode for port 0x42 - as described above
0164 1011 - Set Timer 2 16-bit mode for port 0x42 as described above
0165
0166 1101 - General counter latch
0167 Latch combination of counters into corresponding ports
0168 Bit 3 = Counter 2
0169 Bit 2 = Counter 1
0170 Bit 1 = Counter 0
0171 Bit 0 = Unused
0172
0173 1110 - Latch timer status
0174 Latch combination of counter mode into corresponding ports
0175 Bit 3 = Counter 2
0176 Bit 2 = Counter 1
0177 Bit 1 = Counter 0
0178
0179 The output of ports 0x40-0x42 following this command will be:
0180
0181 Bit 7 = Output pin
0182 Bit 6 = Count loaded (0 if timer has expired)
0183 Bit 5-4 = Read / Write mode
0184 01 = MSB only
0185 10 = LSB only
0186 11 = LSB / MSB (16-bit)
0187 Bit 3-1 = Mode
0188 Bit 0 = Binary (0) / BCD mode (1)
0189
0190 2.2. RTC
0191 --------
0192
0193 The second device which was available in the original PC was the MC146818 real
0194 time clock. The original device is now obsolete, and usually emulated by the
0195 system chipset, sometimes by an HPET and some frankenstein IRQ routing.
0196
0197 The RTC is accessed through CMOS variables, which uses an index register to
0198 control which bytes are read. Since there is only one index register, read
0199 of the CMOS and read of the RTC require lock protection (in addition, it is
0200 dangerous to allow userspace utilities such as hwclock to have direct RTC
0201 access, as they could corrupt kernel reads and writes of CMOS memory).
0202
0203 The RTC generates an interrupt which is usually routed to IRQ 8. The interrupt
0204 can function as a periodic timer, an additional once a day alarm, and can issue
0205 interrupts after an update of the CMOS registers by the MC146818 is complete.
0206 The type of interrupt is signalled in the RTC status registers.
0207
0208 The RTC will update the current time fields by battery power even while the
0209 system is off. The current time fields should not be read while an update is
0210 in progress, as indicated in the status register.
0211
0212 The clock uses a 32.768kHz crystal, so bits 6-4 of register A should be
0213 programmed to a 32kHz divider if the RTC is to count seconds.
0214
0215 This is the RAM map originally used for the RTC/CMOS::
0216
0217 Location Size Description
0218 ------------------------------------------
0219 00h byte Current second (BCD)
0220 01h byte Seconds alarm (BCD)
0221 02h byte Current minute (BCD)
0222 03h byte Minutes alarm (BCD)
0223 04h byte Current hour (BCD)
0224 05h byte Hours alarm (BCD)
0225 06h byte Current day of week (BCD)
0226 07h byte Current day of month (BCD)
0227 08h byte Current month (BCD)
0228 09h byte Current year (BCD)
0229 0Ah byte Register A
0230 bit 7 = Update in progress
0231 bit 6-4 = Divider for clock
0232 000 = 4.194 MHz
0233 001 = 1.049 MHz
0234 010 = 32 kHz
0235 10X = test modes
0236 110 = reset / disable
0237 111 = reset / disable
0238 bit 3-0 = Rate selection for periodic interrupt
0239 000 = periodic timer disabled
0240 001 = 3.90625 uS
0241 010 = 7.8125 uS
0242 011 = .122070 mS
0243 100 = .244141 mS
0244 ...
0245 1101 = 125 mS
0246 1110 = 250 mS
0247 1111 = 500 mS
0248 0Bh byte Register B
0249 bit 7 = Run (0) / Halt (1)
0250 bit 6 = Periodic interrupt enable
0251 bit 5 = Alarm interrupt enable
0252 bit 4 = Update-ended interrupt enable
0253 bit 3 = Square wave interrupt enable
0254 bit 2 = BCD calendar (0) / Binary (1)
0255 bit 1 = 12-hour mode (0) / 24-hour mode (1)
0256 bit 0 = 0 (DST off) / 1 (DST enabled)
0257 OCh byte Register C (read only)
0258 bit 7 = interrupt request flag (IRQF)
0259 bit 6 = periodic interrupt flag (PF)
0260 bit 5 = alarm interrupt flag (AF)
0261 bit 4 = update interrupt flag (UF)
0262 bit 3-0 = reserved
0263 ODh byte Register D (read only)
0264 bit 7 = RTC has power
0265 bit 6-0 = reserved
0266 32h byte Current century BCD (*)
0267 (*) location vendor specific and now determined from ACPI global tables
0268
0269 2.3. APIC
0270 ---------
0271
0272 On Pentium and later processors, an on-board timer is available to each CPU
0273 as part of the Advanced Programmable Interrupt Controller. The APIC is
0274 accessed through memory-mapped registers and provides interrupt service to each
0275 CPU, used for IPIs and local timer interrupts.
0276
0277 Although in theory the APIC is a safe and stable source for local interrupts,
0278 in practice, many bugs and glitches have occurred due to the special nature of
0279 the APIC CPU-local memory-mapped hardware. Beware that CPU errata may affect
0280 the use of the APIC and that workarounds may be required. In addition, some of
0281 these workarounds pose unique constraints for virtualization - requiring either
0282 extra overhead incurred from extra reads of memory-mapped I/O or additional
0283 functionality that may be more computationally expensive to implement.
0284
0285 Since the APIC is documented quite well in the Intel and AMD manuals, we will
0286 avoid repetition of the detail here. It should be pointed out that the APIC
0287 timer is programmed through the LVT (local vector timer) register, is capable
0288 of one-shot or periodic operation, and is based on the bus clock divided down
0289 by the programmable divider register.
0290
0291 2.4. HPET
0292 ---------
0293
0294 HPET is quite complex, and was originally intended to replace the PIT / RTC
0295 support of the X86 PC. It remains to be seen whether that will be the case, as
0296 the de facto standard of PC hardware is to emulate these older devices. Some
0297 systems designated as legacy free may support only the HPET as a hardware timer
0298 device.
0299
0300 The HPET spec is rather loose and vague, requiring at least 3 hardware timers,
0301 but allowing implementation freedom to support many more. It also imposes no
0302 fixed rate on the timer frequency, but does impose some extremal values on
0303 frequency, error and slew.
0304
0305 In general, the HPET is recommended as a high precision (compared to PIT /RTC)
0306 time source which is independent of local variation (as there is only one HPET
0307 in any given system). The HPET is also memory-mapped, and its presence is
0308 indicated through ACPI tables by the BIOS.
0309
0310 Detailed specification of the HPET is beyond the current scope of this
0311 document, as it is also very well documented elsewhere.
0312
0313 2.5. Offboard Timers
0314 --------------------
0315
0316 Several cards, both proprietary (watchdog boards) and commonplace (e1000) have
0317 timing chips built into the cards which may have registers which are accessible
0318 to kernel or user drivers. To the author's knowledge, using these to generate
0319 a clocksource for a Linux or other kernel has not yet been attempted and is in
0320 general frowned upon as not playing by the agreed rules of the game. Such a
0321 timer device would require additional support to be virtualized properly and is
0322 not considered important at this time as no known operating system does this.
0323
0324 3. TSC Hardware
0325 ===============
0326
0327 The TSC or time stamp counter is relatively simple in theory; it counts
0328 instruction cycles issued by the processor, which can be used as a measure of
0329 time. In practice, due to a number of problems, it is the most complicated
0330 timekeeping device to use.
0331
0332 The TSC is represented internally as a 64-bit MSR which can be read with the
0333 RDMSR, RDTSC, or RDTSCP (when available) instructions. In the past, hardware
0334 limitations made it possible to write the TSC, but generally on old hardware it
0335 was only possible to write the low 32-bits of the 64-bit counter, and the upper
0336 32-bits of the counter were cleared. Now, however, on Intel processors family
0337 0Fh, for models 3, 4 and 6, and family 06h, models e and f, this restriction
0338 has been lifted and all 64-bits are writable. On AMD systems, the ability to
0339 write the TSC MSR is not an architectural guarantee.
0340
0341 The TSC is accessible from CPL-0 and conditionally, for CPL > 0 software by
0342 means of the CR4.TSD bit, which when enabled, disables CPL > 0 TSC access.
0343
0344 Some vendors have implemented an additional instruction, RDTSCP, which returns
0345 atomically not just the TSC, but an indicator which corresponds to the
0346 processor number. This can be used to index into an array of TSC variables to
0347 determine offset information in SMP systems where TSCs are not synchronized.
0348 The presence of this instruction must be determined by consulting CPUID feature
0349 bits.
0350
0351 Both VMX and SVM provide extension fields in the virtualization hardware which
0352 allows the guest visible TSC to be offset by a constant. Newer implementations
0353 promise to allow the TSC to additionally be scaled, but this hardware is not
0354 yet widely available.
0355
0356 3.1. TSC synchronization
0357 ------------------------
0358
0359 The TSC is a CPU-local clock in most implementations. This means, on SMP
0360 platforms, the TSCs of different CPUs may start at different times depending
0361 on when the CPUs are powered on. Generally, CPUs on the same die will share
0362 the same clock, however, this is not always the case.
0363
0364 The BIOS may attempt to resynchronize the TSCs during the poweron process and
0365 the operating system or other system software may attempt to do this as well.
0366 Several hardware limitations make the problem worse - if it is not possible to
0367 write the full 64-bits of the TSC, it may be impossible to match the TSC in
0368 newly arriving CPUs to that of the rest of the system, resulting in
0369 unsynchronized TSCs. This may be done by BIOS or system software, but in
0370 practice, getting a perfectly synchronized TSC will not be possible unless all
0371 values are read from the same clock, which generally only is possible on single
0372 socket systems or those with special hardware support.
0373
0374 3.2. TSC and CPU hotplug
0375 ------------------------
0376
0377 As touched on already, CPUs which arrive later than the boot time of the system
0378 may not have a TSC value that is synchronized with the rest of the system.
0379 Either system software, BIOS, or SMM code may actually try to establish the TSC
0380 to a value matching the rest of the system, but a perfect match is usually not
0381 a guarantee. This can have the effect of bringing a system from a state where
0382 TSC is synchronized back to a state where TSC synchronization flaws, however
0383 small, may be exposed to the OS and any virtualization environment.
0384
0385 3.3. TSC and multi-socket / NUMA
0386 --------------------------------
0387
0388 Multi-socket systems, especially large multi-socket systems are likely to have
0389 individual clocksources rather than a single, universally distributed clock.
0390 Since these clocks are driven by different crystals, they will not have
0391 perfectly matched frequency, and temperature and electrical variations will
0392 cause the CPU clocks, and thus the TSCs to drift over time. Depending on the
0393 exact clock and bus design, the drift may or may not be fixed in absolute
0394 error, and may accumulate over time.
0395
0396 In addition, very large systems may deliberately slew the clocks of individual
0397 cores. This technique, known as spread-spectrum clocking, reduces EMI at the
0398 clock frequency and harmonics of it, which may be required to pass FCC
0399 standards for telecommunications and computer equipment.
0400
0401 It is recommended not to trust the TSCs to remain synchronized on NUMA or
0402 multiple socket systems for these reasons.
0403
0404 3.4. TSC and C-states
0405 ---------------------
0406
0407 C-states, or idling states of the processor, especially C1E and deeper sleep
0408 states may be problematic for TSC as well. The TSC may stop advancing in such
0409 a state, resulting in a TSC which is behind that of other CPUs when execution
0410 is resumed. Such CPUs must be detected and flagged by the operating system
0411 based on CPU and chipset identifications.
0412
0413 The TSC in such a case may be corrected by catching it up to a known external
0414 clocksource.
0415
0416 3.5. TSC frequency change / P-states
0417 ------------------------------------
0418
0419 To make things slightly more interesting, some CPUs may change frequency. They
0420 may or may not run the TSC at the same rate, and because the frequency change
0421 may be staggered or slewed, at some points in time, the TSC rate may not be
0422 known other than falling within a range of values. In this case, the TSC will
0423 not be a stable time source, and must be calibrated against a known, stable,
0424 external clock to be a usable source of time.
0425
0426 Whether the TSC runs at a constant rate or scales with the P-state is model
0427 dependent and must be determined by inspecting CPUID, chipset or vendor
0428 specific MSR fields.
0429
0430 In addition, some vendors have known bugs where the P-state is actually
0431 compensated for properly during normal operation, but when the processor is
0432 inactive, the P-state may be raised temporarily to service cache misses from
0433 other processors. In such cases, the TSC on halted CPUs could advance faster
0434 than that of non-halted processors. AMD Turion processors are known to have
0435 this problem.
0436
0437 3.6. TSC and STPCLK / T-states
0438 ------------------------------
0439
0440 External signals given to the processor may also have the effect of stopping
0441 the TSC. This is typically done for thermal emergency power control to prevent
0442 an overheating condition, and typically, there is no way to detect that this
0443 condition has happened.
0444
0445 3.7. TSC virtualization - VMX
0446 -----------------------------
0447
0448 VMX provides conditional trapping of RDTSC, RDMSR, WRMSR and RDTSCP
0449 instructions, which is enough for full virtualization of TSC in any manner. In
0450 addition, VMX allows passing through the host TSC plus an additional TSC_OFFSET
0451 field specified in the VMCS. Special instructions must be used to read and
0452 write the VMCS field.
0453
0454 3.8. TSC virtualization - SVM
0455 -----------------------------
0456
0457 SVM provides conditional trapping of RDTSC, RDMSR, WRMSR and RDTSCP
0458 instructions, which is enough for full virtualization of TSC in any manner. In
0459 addition, SVM allows passing through the host TSC plus an additional offset
0460 field specified in the SVM control block.
0461
0462 3.9. TSC feature bits in Linux
0463 ------------------------------
0464
0465 In summary, there is no way to guarantee the TSC remains in perfect
0466 synchronization unless it is explicitly guaranteed by the architecture. Even
0467 if so, the TSCs in multi-sockets or NUMA systems may still run independently
0468 despite being locally consistent.
0469
0470 The following feature bits are used by Linux to signal various TSC attributes,
0471 but they can only be taken to be meaningful for UP or single node systems.
0472
0473 ========================= =======================================
0474 X86_FEATURE_TSC The TSC is available in hardware
0475 X86_FEATURE_RDTSCP The RDTSCP instruction is available
0476 X86_FEATURE_CONSTANT_TSC The TSC rate is unchanged with P-states
0477 X86_FEATURE_NONSTOP_TSC The TSC does not stop in C-states
0478 X86_FEATURE_TSC_RELIABLE TSC sync checks are skipped (VMware)
0479 ========================= =======================================
0480
0481 4. Virtualization Problems
0482 ==========================
0483
0484 Timekeeping is especially problematic for virtualization because a number of
0485 challenges arise. The most obvious problem is that time is now shared between
0486 the host and, potentially, a number of virtual machines. Thus the virtual
0487 operating system does not run with 100% usage of the CPU, despite the fact that
0488 it may very well make that assumption. It may expect it to remain true to very
0489 exacting bounds when interrupt sources are disabled, but in reality only its
0490 virtual interrupt sources are disabled, and the machine may still be preempted
0491 at any time. This causes problems as the passage of real time, the injection
0492 of machine interrupts and the associated clock sources are no longer completely
0493 synchronized with real time.
0494
0495 This same problem can occur on native hardware to a degree, as SMM mode may
0496 steal cycles from the naturally on X86 systems when SMM mode is used by the
0497 BIOS, but not in such an extreme fashion. However, the fact that SMM mode may
0498 cause similar problems to virtualization makes it a good justification for
0499 solving many of these problems on bare metal.
0500
0501 4.1. Interrupt clocking
0502 -----------------------
0503
0504 One of the most immediate problems that occurs with legacy operating systems
0505 is that the system timekeeping routines are often designed to keep track of
0506 time by counting periodic interrupts. These interrupts may come from the PIT
0507 or the RTC, but the problem is the same: the host virtualization engine may not
0508 be able to deliver the proper number of interrupts per second, and so guest
0509 time may fall behind. This is especially problematic if a high interrupt rate
0510 is selected, such as 1000 HZ, which is unfortunately the default for many Linux
0511 guests.
0512
0513 There are three approaches to solving this problem; first, it may be possible
0514 to simply ignore it. Guests which have a separate time source for tracking
0515 'wall clock' or 'real time' may not need any adjustment of their interrupts to
0516 maintain proper time. If this is not sufficient, it may be necessary to inject
0517 additional interrupts into the guest in order to increase the effective
0518 interrupt rate. This approach leads to complications in extreme conditions,
0519 where host load or guest lag is too much to compensate for, and thus another
0520 solution to the problem has risen: the guest may need to become aware of lost
0521 ticks and compensate for them internally. Although promising in theory, the
0522 implementation of this policy in Linux has been extremely error prone, and a
0523 number of buggy variants of lost tick compensation are distributed across
0524 commonly used Linux systems.
0525
0526 Windows uses periodic RTC clocking as a means of keeping time internally, and
0527 thus requires interrupt slewing to keep proper time. It does use a low enough
0528 rate (ed: is it 18.2 Hz?) however that it has not yet been a problem in
0529 practice.
0530
0531 4.2. TSC sampling and serialization
0532 -----------------------------------
0533
0534 As the highest precision time source available, the cycle counter of the CPU
0535 has aroused much interest from developers. As explained above, this timer has
0536 many problems unique to its nature as a local, potentially unstable and
0537 potentially unsynchronized source. One issue which is not unique to the TSC,
0538 but is highlighted because of its very precise nature is sampling delay. By
0539 definition, the counter, once read is already old. However, it is also
0540 possible for the counter to be read ahead of the actual use of the result.
0541 This is a consequence of the superscalar execution of the instruction stream,
0542 which may execute instructions out of order. Such execution is called
0543 non-serialized. Forcing serialized execution is necessary for precise
0544 measurement with the TSC, and requires a serializing instruction, such as CPUID
0545 or an MSR read.
0546
0547 Since CPUID may actually be virtualized by a trap and emulate mechanism, this
0548 serialization can pose a performance issue for hardware virtualization. An
0549 accurate time stamp counter reading may therefore not always be available, and
0550 it may be necessary for an implementation to guard against "backwards" reads of
0551 the TSC as seen from other CPUs, even in an otherwise perfectly synchronized
0552 system.
0553
0554 4.3. Timespec aliasing
0555 ----------------------
0556
0557 Additionally, this lack of serialization from the TSC poses another challenge
0558 when using results of the TSC when measured against another time source. As
0559 the TSC is much higher precision, many possible values of the TSC may be read
0560 while another clock is still expressing the same value.
0561
0562 That is, you may read (T,T+10) while external clock C maintains the same value.
0563 Due to non-serialized reads, you may actually end up with a range which
0564 fluctuates - from (T-1.. T+10). Thus, any time calculated from a TSC, but
0565 calibrated against an external value may have a range of valid values.
0566 Re-calibrating this computation may actually cause time, as computed after the
0567 calibration, to go backwards, compared with time computed before the
0568 calibration.
0569
0570 This problem is particularly pronounced with an internal time source in Linux,
0571 the kernel time, which is expressed in the theoretically high resolution
0572 timespec - but which advances in much larger granularity intervals, sometimes
0573 at the rate of jiffies, and possibly in catchup modes, at a much larger step.
0574
0575 This aliasing requires care in the computation and recalibration of kvmclock
0576 and any other values derived from TSC computation (such as TSC virtualization
0577 itself).
0578
0579 4.4. Migration
0580 --------------
0581
0582 Migration of a virtual machine raises problems for timekeeping in two ways.
0583 First, the migration itself may take time, during which interrupts cannot be
0584 delivered, and after which, the guest time may need to be caught up. NTP may
0585 be able to help to some degree here, as the clock correction required is
0586 typically small enough to fall in the NTP-correctable window.
0587
0588 An additional concern is that timers based off the TSC (or HPET, if the raw bus
0589 clock is exposed) may now be running at different rates, requiring compensation
0590 in some way in the hypervisor by virtualizing these timers. In addition,
0591 migrating to a faster machine may preclude the use of a passthrough TSC, as a
0592 faster clock cannot be made visible to a guest without the potential of time
0593 advancing faster than usual. A slower clock is less of a problem, as it can
0594 always be caught up to the original rate. KVM clock avoids these problems by
0595 simply storing multipliers and offsets against the TSC for the guest to convert
0596 back into nanosecond resolution values.
0597
0598 4.5. Scheduling
0599 ---------------
0600
0601 Since scheduling may be based on precise timing and firing of interrupts, the
0602 scheduling algorithms of an operating system may be adversely affected by
0603 virtualization. In theory, the effect is random and should be universally
0604 distributed, but in contrived as well as real scenarios (guest device access,
0605 causes of virtualization exits, possible context switch), this may not always
0606 be the case. The effect of this has not been well studied.
0607
0608 In an attempt to work around this, several implementations have provided a
0609 paravirtualized scheduler clock, which reveals the true amount of CPU time for
0610 which a virtual machine has been running.
0611
0612 4.6. Watchdogs
0613 --------------
0614
0615 Watchdog timers, such as the lock detector in Linux may fire accidentally when
0616 running under hardware virtualization due to timer interrupts being delayed or
0617 misinterpretation of the passage of real time. Usually, these warnings are
0618 spurious and can be ignored, but in some circumstances it may be necessary to
0619 disable such detection.
0620
0621 4.7. Delays and precision timing
0622 --------------------------------
0623
0624 Precise timing and delays may not be possible in a virtualized system. This
0625 can happen if the system is controlling physical hardware, or issues delays to
0626 compensate for slower I/O to and from devices. The first issue is not solvable
0627 in general for a virtualized system; hardware control software can't be
0628 adequately virtualized without a full real-time operating system, which would
0629 require an RT aware virtualization platform.
0630
0631 The second issue may cause performance problems, but this is unlikely to be a
0632 significant issue. In many cases these delays may be eliminated through
0633 configuration or paravirtualization.
0634
0635 4.8. Covert channels and leaks
0636 ------------------------------
0637
0638 In addition to the above problems, time information will inevitably leak to the
0639 guest about the host in anything but a perfect implementation of virtualized
0640 time. This may allow the guest to infer the presence of a hypervisor (as in a
0641 red-pill type detection), and it may allow information to leak between guests
0642 by using CPU utilization itself as a signalling channel. Preventing such
0643 problems would require completely isolated virtual time which may not track
0644 real time any longer. This may be useful in certain security or QA contexts,
0645 but in general isn't recommended for real-world deployment scenarios.