解决macOS 11下Virtualbox运行虚拟机发生崩溃与死机重启问题

背景

最近更换了之前的macbookPro 2016款到2020款,却发现一个严重的问题。就是Linux虚拟机无论是运行Ubuntu 20.04 LiveCD还是运行Ubuntu 18.04硬盘启动都会不定期出现启动过程中的kernel panic,apt-get安装应用不定时出现安装失败,各种checksum error,各种segmentfault。另外运行Windows XP虚拟机时,启动火狐浏览器也经常出现意外崩溃。另外鼠须管输入法的默认四月拼音方案不定时会出现无法输入中文的问题,还有偶尔机器会出现风扇狂转然后死机报五国错误再重启的问题。这究竟是什么原因?

排查

一开始我并没有把这几件事情关联起来看,而是先处理鼠须管的问题,通过反复用时间机器恢复配置文件,前几次好用,后来就不好用了。迫不得已切换到地球拼音方案先勉强使用。

但是关于Virtualbox,我一开始是以为迁移时文件拷贝发生错误,后来再次拷贝确保vdi文件正确,启动后更新apt仍然出现问题。然后我反复重新安装Virtualbox,调节Virtualbox中的显卡、CPU、内存和各种虚拟化参数,发现单核CPU下出现问题的概率低一些,但是问题仍然没有得到解决。难道是Virtualbox和macbookPro 2020上的IceLake的Intel CPU有不兼容的问题?

排查陷入了僵局,我一度考虑换用Parallel Desktop。但是考虑到我之前2016款使用时一切正常,我还是隐约觉得问题不在于Virtualbox本身有兼容性问题。

不如继续搜索看看吧。我尝试调整了搜索关键词,macos+11+virtualbox+crash一个搜索结果吸引到了我。它描述使用vagrant启动虚拟机遇到了各种各样的奇怪问题,和我遇到的基本相似。并且通过对比问题现象出现时间他所做的操作,定位到是安装了Intel Power Gadget后导致了问题现象的发生。我忽然想起来,这个工具我其实也安装了。大概在两个月前我安装了iStatus Menu作为监控工具,而这个工具要求我安装Intel Power Gadget来作为CPU这边的数据源。文中提到回滚Intel Power Gadget的版本,从3.7.0回滚到3.5.5问题即可解决。

解决

说干就干。首先重启到恢复模式,关闭SIP,再重新安装3.5.5版本的Intel Power Gadget。在内核扩展更新后,再打开SIP,再次重启。然后尝试运行Linux,没再发现任何崩溃和Kernel Panic的问题。另外运行Windows XP的虚拟机,启动Firefox浏览器一切正常,没有出现过崩溃问题。

神奇的事情发生了,我怀着试试看的心态把鼠须管的拼音方案切换到四月拼音,居然一切又恢复正常了! 中文输入提示框可以实时的显示出来,也没有发生卡顿。并且通过观察系统CPU占用,日常非高负载时整个系统的CPU占用都比之前低了一些。

后记

现在终于可以理解苹果在macOS 11下慢慢废弃掉了第三方内核扩展机制的初衷了。这种由于第三方内核扩展引发的问题,现象表现与故障原因几乎没有关联,还让人产生了macOS不靠谱的感觉。期待后续苹果在虚拟化方面也推出更好的扩展接口,早日废弃掉内核扩展。