Guest虚拟机观测实战:Xen超调用与CPU Stolen时间
引言:Xen虚拟化与BPF观测能力
在硬件虚拟化场景中,Xen是一个典型的裸机Hypervisor。Guest虚拟机(Domain U)运行在PV(ParaVirtualization)或HVM(Hardware Virtual Machine)模式下。对于PV Guest,它可以主动发起超调用(hypercall)请求Hypervisor提供服务,例如MMU更新、TLB刷新等。从Guest侧,我们可以利用BPF工具对这些超调用进行追踪,评估Hypervisor的性能影响。
此外,Xen Hypervisor也会主动回调Guest(如IRQ通知),以及物理CPU被其他Guest或Hypervisor调度走导致的stolen time,这些都可以通过BPF工具从Guest侧观测。本文将基于BCC和bpftrace介绍实用方法。
Xen PV超调用追踪方法
Xen PV采用批处理机制将多个超调用组合成multicall,以降低开销。内核中提供了多个tracepoint用于观测multicall的生命周期:
xen:xen_mc_batch:开始一批multicallxen:xen_mc_entry:向批次中添加一个超调用xen:xen_mc_issue:发出批次(但尚未真正执行)xen:xen_mc_flush:实际执行flush,调用Hypervisor完成超调用xen:xen_mmu_
