专栏首页皮振伟的专栏[virt][clock]steal time技术分析

[virt][clock]steal time技术分析

前言: 在《clocksource的管理和虚拟化》中,大概分析了kvm clock,tsc,hpet等clock source。其中尤其是kvm clock计算尤其复杂。其目的就在于让Guest中的clock更加准确。但是问题还没有完,Guest只是在Host中的一个进程,还是会发生时钟跳变。下文具体分析。 分析: 1,analysis 当前Host的墙上时间是HWT1,此时Guest中的墙上时间GWT1,如果是同一个时区的话,此时HWT1和GWT1是相等的。 如果此时Host中发生了调度,Guest所在的qemu进程不执行了,那么HWT1将继续增长,GWT1是否应该增长呢? 如果GWT1不增长,那么等到Guest继续执行的时候,就会继续在原来的GWT1基础上增长,那么HWT2到HWT1之间的时间就发生了丢失;现象就是Guest中的时间变慢了。 如果GWT1同时增长,那么就会在Guest进程切回来继续执行的时候,Guest中的时间会瞬间增大了HWT2减掉HWT1的差值。现象就是Guest的墙上时间是对的了。可是新的问题又来了:在Guest的quemu进程被Host切换之前,Guest中刚刚切换走redis,开始执行Nginx;等到Guest继续执行的时候,因为Guest中的时钟跳变增大了很多,Guest会认为Nginx执行了大量的CPU时间。如果Guest中是Linux采用cfs调度算法的话,那么Nginx下次被调度会隔比较长的时间。可是实际呢,Nginx根本没有得到执行!!! 2,steal time 为了解决上述的Guest中的调度问题,就引入了steal time。 Steal time的原理就是:告诉Guest,哪些时间被Host给steal了,调度的时候,忽略这部分时间,就可以正确调度了。 所以,基本就是两个部分:在Host中通知Guest具体的steal time是多少;在Guest中处理这些时间,修正因时间跳变引起的调度错误。 3,guest register steal time linux-4.0.4/arch/x86/kernel/kvm.c

原理和kvm clock一样:通过写MSR,把per_cpu变量steal_time的物理地址(Guest Physical Address)告诉Host。 4,host steal time linux-4.0.4/include/linux/sched.h中:

注意看run_delay,如注释,就是task等待的时间,也就是没有执行的时间(例子中Guest的qemu被切换走的时间)。具体的计算逻辑在linux-4.0.4/kernel/sched目录下的文件中,不具体分析。

在Host中,用run_delay计算出来Guest的steal time,并通过kvm_write_guest_cached告诉Guest(前文中Guest向Host注册的地址,Host直接修改)。 这样,在Guest恢复执行的时候,就可以知道steal time的具体大小了。 5,guest steal time linux-4.0.4/kernel/sched目录下的调度源代码中,计算steal time。 如果Guest的编译选项中打开了CONFIG_PARAVIRT_TIME_ACCOUNTING了,就可以在/proc/stat中的第八项看到steal time。 后记: clocksource虚拟化,再加上steal time机制,基本可以保证Guest中的时间同步问题了。 当然,在Guest中启用ntp服务也是可以的。。 如果Guest的linux版本比较低,或者windows,前后两次gettimeofday得到的时间差别很大,可以怀疑这里。 Good Luck~

文章分享自微信公众号:
AlwaysGeek

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

作者:AlwaysGeek
原始发表时间:2017-02-15
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • [Linux][kernel]sched delay和steal time的原理分析以及atop的监控改进

    前言 在虚拟化场景下,经常会用到steal time来判断虚拟机的vCPU执行是否被抢占,进而来衡量虚拟机的性能指标。同时,在延迟敏感型的业务上(例如redis...

    皮振伟
  • How Linux CPU Usage Time and Percentage is calculated

    CPU time is allocated in discrete time slices (ticks). For a certain number of ...

    用户9732312
  • 【vivado约束学习二】 IO延时约束

    要在设计中精确建模外部时序,必须为输入和输出端口提供时序信息。Xilinx Vivado集成设计环境(IDE)仅在FPGA边界内识别时序,因此必须使用以下命令指...

    FPGA开源工作室
  • top 命令详解

    java404
  • top命令输出详解

    Linux下的top命令我相信大家都用过,自从我接触Linux以来就一直用top查看进程的CPU和MEM排行榜。但是top命令的其他输出结果我都没有了解,这些指...

    用户2937493
  • linux 系统监控、诊断工具之 top 详解

    接触 linux 的人对于 top 命令可能不会陌生(不同系统名字可能不一样,如 IBM 的 aix 中叫 topas ),它的作用主要用来监控系统实时负载率、...

    用户1177713
  • 10分钟教会你看懂top

    后端们最怕的事情之一就是服务器的负载突然飙升,这可能又意味着一个个夺目Call马上要打过来了。碰到这种情况怎么办,大家第一反应一定是登陆到服务器上,先敲一个to...

    昱良
  • Linux系统之 Steal CPU time解析

    正如之前文章讲过:在 Unix / Linux 体系中,常常使用“用户” CPU 时间(us)、“系统” CPU 时间(sy)、“良好”的 CPU 时间(ni...

    Luga Lee
  • Linux top 命令详解

    统计信息区域:包含系统任务统计、进程统计、CPU 统计、内存统计、Swap 交换分区统计

    熬夜的花斑狗
  • 性能监控万能命令之top

    top命令是Linux下常用的性能分析工具,能够实时监控系统的运行状态,主要显示系统中各个进程的资源使用情况,并根据cpu及内存等进行排序,类似于windows...

    吾非同
  • Linux监控系统相关资源和运行状态命令整理

    #前言:Linux系统自带了些实时查看监控系统运行状态的相关命令,接下来我们就来了解一下。

    老油条IT记
  • ucoreOS_lab3 实验报告

    lab3 会依赖 lab1 和 lab2,我们需要把做的 lab1 和 lab2 的代码填到 lab3 中缺失的位置上面。练习 0 就是一个工具的利用。这里我使...

    Angel_Kitty
  • linux中top命令

    系统负载(任务队列的平均长度)三个值分别为1分钟、5分钟、15分钟前到现在的平均值

    yaohong
  • TOP使用参数

    TOP使用参数 top是检查机器当前运行状况的第一个命令,就好比是机器体检时的第一张报告单。 先了解一下TOP命令的使用

    小陈运维
  • 故障分析 | 是谁偷走了我的 IO

    爱可生DBA团队成员,主要负责MySQL和DMP平台日常的维持工作,对数据库自动化运维存有浓厚兴趣。

    爱可生开源社区
  • 监测 Linux 系统平均负载的操作命令

    有诸多方式监测系统平均负载,如 uptime,它会展示系统运行时间、用户数量及平均负载:

    用户4988085
  • VXFS启用异步IO导致的严重问题(r2笔记56天)

    今天在做数据迁移的时候,碰到了一个严重的问题,数据加载完全hang住了,最后无奈回退了。 系统使用的vxfs文件系统,在生产升级前一个月的时候,做过一次小规模的...

    jeanron100
  • FPGA程序升级续

    fpga掉电丢失,一般使用外部flash存储代码,flash有spi、bpi、qspi等接口,外部存储器的时钟管脚一般与fpga的CCLK_0连接,当使用远程更...

    瓜大三哥
  • Linux命令必知必会

    第一行中,03:30:22是当前时间,up 39 min是系统运行的运行了多长时间,1 user指出了当前有几个用户登录到系统,load average指的是系...

    用户2131907

扫码关注腾讯云开发者

领取腾讯云代金券