云计算之路:2009年Xen一个补丁背后那不为人知的故事
仔细阅读了http://www.cnblogs.com/cmt/p/3729386.html这篇关于xen的博文,这篇博文写的挺赞的,分析的也很细致,涉及到4年前的一个patch的故事。在讲这个故事之前,先说明下,阿里云官方的xen已经包含了博文中提到的xen的cpu idle潜在问题的修复版本(commit见:
http://xenbits.xen.org/gitweb/?p=xen.git;a=commit;h=964fae8ac2fa6732856179a2532b0914dba5e4bb),请童鞋们放心。
下面进入故事环节:先说patch的V1
版。当时是Xen Power Management开发的高峰时期,又正快到Xen3.4的代码冻结时间,代码冻结后就不会再接受新的feature patch,但bugfix patch还是可以提交进入upstream。
当时有一系列Xen cpuidle/cpufreq的patch已经进了Xen3.4 upstream-upstable,所以希望让这个feature patch先上车,然后补票(追加一个bugfix patch)。这是基于两点:一是这个patch的开发者Ke Ke同学是调bug的高手,有把握在代码冻结期间搞定这个bug;二是这个bug波及不到普通用户,所以放到patch里一般不会有什么负面影响。博主博客中提到的‘普通用户’其实就是指HVM
domain,原因是在Xen3.4时期VCPUOP_set_singleshot_timer仅属于PV domain的一个hypercall(不像现在扩展到对HVM domain提供支持),所以对HVM domain没影响。但Keir同学还是没同意,所以Ke Ke同学只好苦哈哈地加班调bug去了 :)
这个bug其实比较诡异,如同博主博文中对V2 patch分析的那样,根源是V1 patch的出现导致IPI唤醒处于deep Cx的处理器失败。这里我只是补充一点问题产生的背景:Xen为什么要用IPI唤醒deep Cx处理器?V1 patch为什么导致IPI中断唤醒失败?
其实这一问题产生于某些老处理器硬件上存在的缺陷。通常中断的发生都会导致处于deep
Cx的处理器被唤醒,所以理论上大可不必大费周章地由一个处理器发IPI唤醒另一个睡眠中处理器。但凡事总有例外 -- 处理器的设计一般是希望CPU进入deep
Cx时,关闭尽可能多的部件以节省更多能耗 -- 但有些老处理器设计时把诸如APIC Timer部件的电源也顺手关了。这使得CPU进入deep Cx时产生不了APIC Timer中断。为了防止这种有问题的处理器进入深度睡眠时,无法产生APIC Timer中断而导致的Timer到期无法醒来的问题,Xen采用了比较保守的方法来处理,即由另一处理器在HPET Timer 发生时通过IPI来唤醒处于深度睡眠的处理器。HPET部件位于南桥,不受CPU状态的影响,工作可靠,精度开销都还可以接受,于是皆大欢喜…
但Ke Ke同学的V1 patch又踩了什么坑,导致IPI无法唤醒处于深度睡眠的处理器?原来Xen hypervisor的wakeup IPI的逻辑是,先检查对方是否有pending的softirq。如果有,则不必发IPI以节省开销,其原因是处理器进入深度睡眠之前都要检查并处理自己当前pending的softirq,所以如果对方有pending softirq则肯定没睡,那就没必要发IPI了。V1 patch正好踩了这个坑:在CPU进入睡眠前处理完pending softirq后,新增的sched_tick_suspend()会在某些情况下设置TIMER_SOFTIRQ,于是别的处理器发wakeup IPI就‘被节省’了,再后来就是博主所说的那样,处于深度睡眠的处理器悲催了…
云计算之路:2009年Xen一个补丁背后那不为人知的故事的更多相关文章
- 云计算之路-阿里云上:“黑色1秒”问题与2009年Xen一个补丁的故事
在之前对“黑色1秒”问题的分析博文中,我们将最大嫌疑对象锁定在了Xen,在这篇博文我们将从Xen的角度进行分析.也许有人会问,为什么不知道天多高地多厚地去研究不属于自己范围的问题?只因我们对一个问题的 ...
- 云计算之路-阿里云上:对“黑色n秒”问题的最终猜想——CPU C-states引起的
如果说2013年云计算之路的主题是“踩坑”,那么2014年我们希望云计算之路的主题变成“填坑”——当然填坑是阿里云来完成的,我们只是见证曾经的坑坑洼洼变成平坦大道. 15号(周四)晚上我们发现了SLB ...
- 云计算之路-阿里云上:SLB会话保持的一个坑
冒着被大家厌烦的风险,今天再发一篇“云计算之路-阿里云上”.这是在前一篇发过之后真实发生的事情,我们觉得定位问题的过程值得分享.而且估计园子里不少朋友被这个问题骚扰过,我们有责任让大家知道问题的真正原 ...
- 云计算之路-出海记:建一个免费仓库 Amazon RDS for SQL Server
上周由于园子后院起火,不得不调兵回去救火,出海记暂时停更,这周继续更新,"出海记"记录的是我们在 AWS 上建设博客园海外站的历程. 在这一记中记录的是我们基于 AWS 免费套餐( ...
- 云计算之路-阿里云上-新发现:又一种与虚拟内存有关的CPU波动情况
在云上真是无奇不有,昨天偶然间发现在IIS的应用程序池回收设置中,仅仅设置了一下基于虚拟内存限制的回收,就引发了CPU有规律的波动.在这篇博文中,我们将向大家汇报一下云计算之路上的这个小发现. 在之前 ...
- 云计算之路-阿里云上:从ASP.NET线程角度对“黑色30秒”问题的全新分析
在这篇博文中,我们抛开对阿里云的怀疑,完全从ASP.NET的角度进行分析,看能不能找到针对问题现象的更合理的解释. “黑色30秒”问题现象的主要特征是:排队的请求(Requests Queued)突增 ...
- 云计算之路-阿里云上-容器难容:容器服务故障以及自建 docker swarm 集群故障
3月21日,由于使用阿里云服务器自建 docker swarm 集群的不稳定,我们将自建 docker swarm 集群上的所有应用切换阿里云容器服务 swarm 版(非swarm mode). 3月 ...
- 云计算之路-试用Azure:上不了高速的跑车,无法跨Cloud Service的DNS服务器
从阿里云的踩坑大师,到Azure的抹黑大师,我们似乎成了云计算负面用户的典型,可是我们还是忍不住想表达自己真实的使用感受.如果有错误的地方,欢迎大家批评! 在Azure上建好虚拟网(Vitual Ne ...
- 云计算之路-试用Azure:制作虚拟机自定义镜像
虚拟机自定义镜像(Image)是一个很有用的功能,可以在一台虚拟机上配置好基本的系统环境,然后做个镜像,以后创建虚拟机直接从这个镜像创建,会省掉很多重复的配置工作. 阿里云与UCloud都有这个功能, ...
随机推荐
- C# Winform 实现自定义半透明遮罩层介绍
在网页中通过div+css实现半透明效果不难,今天我们看看一种在winfrom中实现的方法: 效果图如下,正常时: 显示遮罩层时: 自定义遮罩层控件的源码如下: View Row Code 1 usi ...
- Newton's method Drawback and advantage
Newton Raphson Method: Advantages and Drawbacks: v=QwyjgmqbR9s" target="_blank"& ...
- C#实现的自定义IIS认证模块 转载
IIS7以后application pool都支持两种模式:经典模式和集成模式. 所谓经典模式就是与IIS6的application pool运行模式相同,对于asp.net的页面请求处理由单独的as ...
- Controller Service Dao总结
今天主要学习了Controller,Service,Dao的相关知识 我的理解主要是这种,Controller主要与前台页面打交道 比方:前台页面有一个"加入用户"的提交butto ...
- 标志位 last break
last-完成rewrite指令的处理,之后搜索对应的URI和location; break-完成rewrite指令的外理 [root@web01 app]# cat /app/server/ngin ...
- word中特殊符号的替换
首先在word里替换快捷键是ctrl+H,点击“更多”,会出现更多选项,在特殊格式那里可以选在各种符号,比如回车,空格什么的. 有的时候在word里看不到一些格式,需要点一下下图的对着的两个箭头图标: ...
- gcc 遇到过的语法问题
1.在ubuntu 12.04 环境下,在/etc/ld.so.conf.d/目录里添加某个so库的配置路径,比如 /home/myself/abc/lib/ 执行 sudo ldconfig
- hdu6069 Counting Divisors 晒区间素数
/** 题目:hdu6069 Counting Divisors 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6069 题意:求[l,r]内所有数的k次方 ...
- 【揭秘】什么是不对称秘钥和CA证书
密钥交换简单的说就是利用非对称加密算法来加密对称密钥保证传输的安全性,之后用对称密钥来加密数据. ★方案1--单纯用"对称加密算法"的可行性 首先简单阐述一下,"单纯用对 ...
- [Tips] Resolve error: server certificate verification failed.
# sympton: piaoger@piaoger-ubuntu:~/w/temp$ git clone https://mygit/solidmcp/solidmcp.gitCloning int ...