说明:
- KVM版本:5.9.1
- QEMU版本:5.0.0
- 工具:Source Insight 3.5, Visio
1. 概述
先从操作系统的角度来看一下timer的作用吧:
通过timer的中断,OS实现的功能包括但不局限于上图:
- 定时器的维护,包括用户态和内核态,当指定时间段过去后触发事件操作,比如IO操作注册的超时定时器等;
- 更新系统的运行时间、wall time等,此外还保存当前的时间和日期,以便能通过time()等接口返回给用户程序,内核中也可以利用其作为文件和网络包的时间戳;
- 调度器在调度任务分配给CPU时,也会去对task的运行时间进行统计计算,比如CFS调度,Round-Robin调度等;
- 资源使用统计,比如系统负载的记录等,此外用户使用top命令也能进行查看;
timer就像是系统的脉搏,重要性不言而喻。ARMv8架构处理器提供了一个Generic Timer,与GIC类似,Generic Timer在硬件上也支持了虚拟化,减少了软件模拟带来的overhead。
本文将围绕着ARMv8的timer虚拟化来展开。
资料直通车:Linux内核源码技术学习路线+视频教程内核源码
2. ARMv8 Timer虚拟化
2.1 Generic Timer
看一下ARMv8架构下的CPU内部图:
- Generic Timer提供了一个系统计数器,用于测量真实时间的消逝;
- Generic Timer支持虚拟计数器,用于测量虚拟的时间消逝,一个虚拟计数器对应一个虚拟机