这可能是我作为Insider、排查过的最难的bug……我想我会记一辈子……
这个故事也告诉我,有时候不只是排除bug需要灵感。其实排查bug更是需要灵感。
尤其是当你只是个Insider,没有什么技术支援或者是代码可以查看时。
一切源自于好几个月前,周年更新版的某个insider preview build。
那个时候我注意到,使用groove music播放音乐一段时间以后,我电脑的CPU会频率降低到一个非常恐怖的水平,0.4GHz - 0.9GHz这样,根本不超过1GHz。
你知道不超过1GHz的处理器是怎样的使用体验吗?Welcome to Hell of Pentium III!
通常来说我会首先怀疑这是Windows的bug,因为这个问题在10586版本上就不存在。但是后来随着我调查的深入,事情变得越发奇怪起来。一开始,我以为这个Bug是:网易云音乐、Groove、微信UWP可能会造成CPU性能低下。其中网易云和Groove在在线播放音乐时尤其容易重现bug。 并且,reddit网友指出,在在线播放音乐的最后十秒时,特别容易复现CPU频率骤降的问题。而有的时候,CPU骤降完然后就不恢复成正常状态了,必须要把应用给完全关闭才行!但是疑点和难题很多啊——首先,Windows Store App都是沙箱应用,理论上来说不大可能越过沙盒去干扰到CPU的性能。其次,这些App看起来毫无共同点啊,而且出现bug的时机也很难归类。随后,在调查深入一些以后,我发现Surface Pro 4和Book和一些OEM电脑、甚至是组装机有这个Bug ,但是又有很多OEM设备一切正常!还有一些朋友说,14955版本似乎没有出现该问题;并且来自reddit的一个朋友也说最新的insider build似乎把毛病给修复了。
然后我就花了半个小时来解决vhd 安装带来的麻烦……总之最后折腾一番我还是毫无保留地从14393升级到了14955.屁啊,根本就没解决好吗QAQ。。。测试一下明明问题毫无改进啊!!!老外不靠谱啊!!!都是大屁燕子!!!因此我不得不去多收集更多、更多的资料和证据来推测问题可能的原因。直到后来,我发现在reddit上主要有两种关于1607更新后、CPU性能低下的反馈:一种是关于Groove Music的,一种是关于Edge浏览器的。新加入bug列表的Edge浏览器出现的问题和Groove它们一模一样:CPU频率锁定在1GHz以下,一开始还好好的,后来就必须要把应用程序(如Edge、Groove)完全关闭,才能让CPU返回到正常的状态来!也就是说,Groove、网易云音乐UWP、微信UWP、Edge浏览器,居然有同一个bug,而且后两者还不知道具体什么时候能触发!如果说他们有什么共同点的话,那就是,1. 他们都用网 2. 他们都可以出声 3. 他们都有界面——但3是废话,所以可以排除
这个时候你也就知道,肯定不是这些APP写的问题了。而是操作系统或者其他更底层的部件有毛病。
此时我仍然在搜集资料。开始有一些朋友反馈给我他的硬件信息。但是,和Surface相似之处很多,例如,它们都是Skylake方案的设备。但它们的差异更大,有的是台式机,有的是笔记本,根本无从下手。@叛逆者 提醒我检查一下离线播放有没有问题。起初受到国外网友误导,我一直以为播放本地音乐是没问题的——直到我亲自测试了,才发现不管是离线播放还是在线播放,都会有bug。这样,就排除掉了网络相关的可能性,只留下了音频方面的问题。然而在这个测试过程中,我又有了新的发现:Groove在播放一些音乐时完全没有降频;在播放另一些音乐时却总会降频——我开始猜测会不会是文件比特率的原因。也许是因为有的文件比特率高,导致系统CPU占用比较高,或许就不会降频?——为此我分别查看了会降频和不会降频的两种音乐文件,最后总结出来的根本规律是:Groove在播放flac文件时不会降频,但在播放MP3时会,而且不管MP3码率多高多低都是一样降频。
一下子豁然开朗!立刻向叛逆者汇报了一下我的新进展,然后再到网易云音乐去做测试。众所周知,网易云音乐UWP是可以播放flac文件的。可随即有趣的事情又出现了:网易云在播放flac文件和mp3文件时,都会出现CPU降频现象。我和龚大因此猜测网易云UWP可能是没有老老实实地解flac,而是采用了什么投机取巧的办法。随后为了验证是系统在播放MP3文件时就会固定出现该bug,我又用Edge浏览器打开了网易云音乐的web版。果然不出所料的是,在每首歌的最后十秒,CPU都出现了显著的降频现象!所以一定是系统用来给UWP播放MP3的什么玩意坏掉了!!!!而微信UWP呢?在接收消息时,微信UWP有可能会通过API播放MP3格式的消息提示音,很可能就是因为这个导致有时候微信也让整个系统卡住的。但是为了以防万一我还是重新安装了一下微信UWP,然后找到了提示音文件。欸,怎么是个wav……
好吧没关系,说不定是同一个bug呢!开开心心地把微信的提示音.wav(一千多kbps,一个铃声有必要吗……)放到了groove播放列表里,开始循环播放——果然不出几遍,CPU就开始剧烈降频了……所以果然是同一个bug啊摔!!!但是为毛Groove放flac就没bug啊!!!不能理解啊!!!算了我不管了!!!放好放好……小破出租屋就一张桌子,掀了就从25楼飞下去了可能会出事儿的……这个点富士康员工都开始从我家楼下路过吃完早饭去上班了……总之在明白这是系统在播放特定类型音乐文件才有的问题时,一切就已经简单多了。叛逆者说已经可以去找人踹门了(逃。但我还是有些地方没搞明白:为什么有的电脑会出问题,有的电脑就不会呢?都是全新安装的系统,驱动也是齐备的啊。
这时候我所能收集到的出问题的电脑的硬件信息越来越多了,有一台电脑引起了我的注意:它是唯一一台我收集到的没用skylake芯片却也出现了这个毛病的电脑,这里我要着重感谢@Neon LYC 同学,是他的Acer Aspire E1-472G让我彻底摆脱了对Skylake的怀疑。E1-472G是一台采用了三代酷睿的电脑。如果它也出现了这个毛病的话,只能说Skylake应该是无辜的,而是什么其他的共同点使他们出现了一样的问题。我和叛叛开始怀疑起了声卡驱动。别问我为什么之前没怀疑到这里。因为我觉得任何智商正常的厂商应该不会推出有这种明显bug的驱动。然后呢,我开始发现所有出现这个问题的电脑其实只有两个真正的共同特征:1. 软件上跑的是Win10 1607 2. 硬件上声卡用的是Realtek ALC系列。不是所有的ALC声卡都会出问题;但是所有出问题的似乎都是ALC声卡。这……这不禁让我浮想联翩,但是我一想到网友小键的悲惨遭遇就不敢多想多说什么了。和叛叛又汇报了一下进展,同时他也告诉我他从公司借到的SB跑10586时确实没有降频问题;升级到14393以后问题立刻复现了,这下真的可以去踹门了……哈哈哈哈最后我突然想起来,要验证到底是不是声卡驱动的问题,我只要再接一块声卡然后用外接的声卡来输出看看还降频与否——不就好了吗?妈呀我怎么这么蠢?居然才想到这个办法?然后三下五除二接上我的创新E5,换成E5输出,然后不管是Groove还是网易云音乐都正常了。如果它俩正常了的话,Edge和微信应该也不会出问题。Another case solved!
真凶就是你!死螃蟹!!!
别以为我驱动版本老,实际上我在截完这张图以后又去装了realtek今年10月出的一款新驱动,结果问题没有丝毫改善。。。
总之这个故事告诉我们:1. 排查bug有时候需要的是灵感2. 排查bug有时候不能太相信经验3. 排查bug的时候,不能总觉得大家都是按规矩办事的4. 排查bug的时候,要考虑每一个环节可能都会出现傻逼5. 真相永远只有一个,可可苏玛才是最忠诚的软狗!Voila!所以下一步就等着@叛逆者 去踹门了, 踹完门后的流程,我估计要不就是微软胁迫realtek赶紧写修复驱动,要不就是微软自己回退一些东西到10586时候的状态.总之这不再是一个"谜",而是一个我们确切知道由什么引起的可复现问题了. 作为一个Insider,我感到非常满意. 因为我这瞎捣鼓一宿,就能改善数百万人的使用体验——而且这还只算上了Surface用户,还有更多的OEM用户在不知不觉中受影响。心满意足!作为软狗的三件小事以后又丰富了一些,啊哈(๑•̀ㅂ•́) ✧!
最后配图: