【发布时间】:2015-08-08 11:58:54
【问题描述】:
支持硬件虚拟化的 ARMv7 架构还包括对定时器和中断控制器的虚拟化支持。
我想知道来宾如何在这个虚拟化环境中访问虚拟计时器?
当访客试图访问虚拟计时器时,它(访客 KVM)是否会向 vgic 代码注入虚拟中断(kvm_vgic_inject_irq)?
谁能提供有关 ARM 中访客访问虚拟计时器的详细信息?
编辑
我试图从访客访问虚拟计时器这一点了解源流。据我了解
当 KVM Guest 试图访问(读取 VTimer tick/count)时,它会通过 ach_timer.c 向 vgic 代码注入虚拟中断
kvm_timer_inject_irq()
|
|
kvm_vgic_inject_irq()
|
|
kvm_vcpu_kick()
|
|
timer_handler()
|
|
arch_timer_reg_read()
|
|
arch_timer_reg_read_cp15()
另外,从 guest 读取 Vtimer 计数不会产生任何陷阱,因为在代码流中找不到任何 vmexit 或 vmentry,对吧?
【问题讨论】:
-
As per the code,它只是读取它的虚拟计数out of CNTVCT,就像主机内核一样。除非您是指对“访问”的其他解释?
-
好的,但是如果客户内核也从 CNTVCT 读取虚拟计数,那么客户如何使用仅在 Hypervisor KVM 中编程的 cntvoff 寄存器与主机同步时间?
-
我不明白您所说的“与主机同步时间”是什么意思 - 虚拟化计数器的全部意义在于向客人隐藏主机时间,所以当他们的 vCPU 在其他东西运行后被重新调度时,他们看不到计数器值有大的跳跃。
-
好的,我的意思是同步,无论在主机上看到什么时间,他们在主机上的时间都是相同的。假设主机在晚上 10 点开始,20 分钟后我们为客人做午餐,客人应该显示时间为晚上 10:20 与主持人相同?
标签: timer arm linux-device-driver kvm armv7