近几年的linux kernel, 尤其是4.1以后,在Bay Trail平台上会随机挂起和死机,亲测j1900,死机非常频繁,而且死机前毫无征兆,直接就挂起了,console也没有相应。
这个问题在bugzilla.kernel.org上已经吵翻了,从2015年年初,一直到现在,仍然没有彻底解决,临时方案有几个,但不保证一定管用。
总结一下自己的j1900测试过的,可能管用的方案。
方案1:
在kernel flag里加上:
intel_idle.max_cstate=
经测试,在ubuntu 14.04, 15.10上有效,功耗会略微增大,但是在ubuntu 16.04上无效,仍然死机,只是死机间隔变长。
编辑/etc/default/grub,加一行:
GRUB_CMDLINE_LINUX="intel_idle.max_cstate=1"
方案2:
kernel flag加上:
processor.max_cstate= intel_idle.max_cstate=
或者
processor.max_cstate=
没有经过长期测试,效果未知。参考文档
方案3:
kernel flag:
intel_idle.max_cstate=
在rc.local加上:
echo > /sys/devices/system/cpu/intel_pstate/no_turbo
echo > /sys/devices/system/cpu/cpu0/cpuidle/state3/disable
echo > /sys/devices/system/cpu/cpu1/cpuidle/state3/disable
echo > /sys/devices/system/cpu/cpu2/cpuidle/state3/disable
echo > /sys/devices/system/cpu/cpu3/cpuidle/state3/disable
禁用state3,正在测试中,效果未知。
cpuidle state似乎没法在登陆之后更改,总是提示Permission denied,用sudo也不行。
---------------------------
更新:
只禁用state3仍然会死机。大约24小时就会死机。
正在测试禁用state2至state5。
更新2:
在bios中将主板设置成win8模式,内核更新到4.4.0-57,使用intel_idle.max_cstate=1内核参数,似乎是一个解决方案。9天没有死机。