进程guesttime的统计计算流程
发布日期:2021-09-16 04:36:42 浏览次数:17 分类:技术文章

本文共 730 字,大约阅读时间需要 2 分钟。

主要流程是qemu调用kvm_vcpu_ioctl(cpu, KVM_RUN, 0)后陷入内核态,然后kvm模块会进入vcpu_run,成功运行,则会进入

kvm_guest_enter,并把进程task_struct  current->flags |= PF_VCPU;,标识进入guest运行。当从guest退回到内核的时候会执行kvm_guest_exit,删除之前设置的PF_VCPU标识current->flags &= ~PF_VCPU;

 

统计流程: 周期性调度会统计这个时间,tick_sched_timer 会调用 account_process_tick → account_system_time,看到没,其实是调用的 account_system_time, 但是没关系,因为我们之前设置了进程的 flags |= PF_VCPU,所以这里判断 这个标识并调用account_guest_time.  在这个方法里会同时把utime和gtime加上cpu_time。这里就比较奇怪,主要是方法名比较怪了,通过account_system_time 函数进来的,结果cputime时间加到 用户态和guest态时间了,也说明用户态时间utime包含 guest态时间。

 

 

同时发现个问题,我看我们好像打开了 CONFIG_VIRT_CPU_ACCOUNTING_GEN,从一些资料来看,说打开这个会有显著的性能影响。

CONFIG_VIRT_CPU_ACCOUNTING_GEN利用上下文跟踪子系统,通过观察每一个内核与用户空间的边界进行统计.该选项对性能有显著的不良影响,目前仅用于完全无滴答子系统(CONFIG_NO_HZ_FULL)的调试

转载地址:https://blog.csdn.net/wllabs/article/details/104908600 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:qcow2 和 rbd qemu侧流程
下一篇:Centos7 内核调试

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月09日 13时50分03秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章