相关参考

提出问题:

在使用vfio-mdev进行数据传输的时候, 有个问题:
Guest 通过vfio-pci下发数据时,一次iowrite32的时间 是多久,Host才可以收到?
Host通过eventfd给Guest发送中断时,需要多久Guest才可以收到中断?
也就是 vfio-mdev的通信性能如何评估

我尝试在 Guest给Host发送消息时,
Guest获取ktime,然后在Host获取Ktime,进行比较时,发现 Guest有时候时间竟然比Host快???
那么问题是: Guest的时钟来自于哪里?Guest的RTC来自哪里?Guest的定时器来自哪里?Guest时间精度是多少?

本文:假设已经了解了 Linux时钟的机制,这里主要学习Guest时钟的机制。

关于时钟的配置(应用)

qemu-kvm参数

  1. (base) baiy@inno-MS-7B89:drivers$ qemu-system-x86_64 -h
  2. -realtime [mlock=on|off]
  3. run qemu with realtime features
  4. mlock=on|off controls mlock support (default: on)
  5. -rtc [base=utc|localtime|<datetime>][,clock=host|rt|vm][,driftfix=none|slew]
  6. set the RTC base and clock, enable drift fix for clock ticks (x86 only)
  1. -realttime配置
  2. mlock=on | off 影响了什么?
  3. -rtc 的配置
  4. base配置:
  5. utc:
  6. localtime:
  7. datetime:
  8. clock配置:
  9. host
  10. rt
  11. vm
  12. driftfix配置:

Libvirt中时间配置

官方配置:libvirt-formatdomain配置Time keeping 章节

  1. ......
  2. <clock offset='utc'>
  3. <timer name='rtc' tickpolicy='catchup'/>
  4. <timer name='pit' tickpolicy='delay'/>
  5. <timer name='hpet' present='no'/>
  6. </clock>

clock参数的配置

  1. clock offset配置值:
  2. utc:
  3. localtime:
  4. timezone:
  5. variable:

timer参数的配置

虚拟机的时钟(原理)

内核关于kvm 的墙上时间的描述

参考: virt-timekeeping

qmu中源码分析(代码)