Linux, 工作, 生活, 家人

Hardware, Linux, Ubuntu

Kubuntu 15.04 + Broadwell / Intel i7-5775C 的問題

之前升級了 Broadwell 架構的 i7-5775C 之後, 裝了 Windows 7 並且也升級到 Windows 10 . (見 電腦升級 i7 5775c + ASUS Z97-A/USB3.1 ) 似乎沒有太大的問題.
問題在於, 我就是手賤, 喜歡裝 Linux 來用. 這下慘了, 折磨了我一個月才搞定這個問題.

首先, Kubutun 15.04 支援 UEFI, 所以這部份安裝完後可以正常 Dual Boot 到 Windows/Linux.
Linux 對於 Broadwell i7-5775C 的支援, 大家的講法不一, 目前看起來應該是這個 URL 比較常見
Working Around The Intel Core i7 5775C Broadwell Stability Issue On Linux
圖中貼了一個 crash , 我也在舊版的 Kernel 見過, 文章表示 enable CPU OC Fix mode 就可以解決這個問題.

我的血淚史是: ASUS 在我裝完機之後又新出一個 BIOS, 這個 BIOS 解決了 i7 5775 一直會出現 Machine Exception Check 的問題.
這個問題只要是在機器上執行 Linux 就會出現, 而且如果是裝 Virtual Machine 時, 再裝 Linux 也會出現 (真是神祕啊).
還沒有安裝新的 BIOS 之前, 這問題搞倒我了, 最後還是靠上面那一篇的類似解決方法才可以正常完成安裝(ASUS BIOS 沒有這個選項, 所以我是關 SpeedStep Does Linux run correctly with SpeedStep on Broadwell?)而且還是不穩定.
然後我在將近一個月後之才看到有新的 BIOS Release.
ASUS 你不可以早點做嗎?

另一個問題就是上面那篇文章的錯誤訊息, 我本來想回報到 Linux kernel team bug system , 但是想想是不是應該先換到最新版的 Linux kernel 再試呢?
Kubuntu 15.04 最新的 Kernel 是 3.19.0-26-generic
這時候就要找 Ubuntu mainline kernel 了, 客倌看到這邊應該會想, 要我編 Linux kernel , 殺了我吧.

沒錯, 不過不用殺頭, 我自己也很久沒有下去看/編 Kernel 的東西了, 中間有個連結 Upstream kernels archive http://kernel.ubuntu.com/~kernel-ppa/mainline/?C=N;O=D 點下去就對了.

會看到很多目錄, 我是選最新的 v4.2-rc7-unstable (註: 一直會更新, 所以不見得最新的會和我一樣)
下載 generic 的就好了, 我是 x64 的系統, 所以下的是 amd64 image .
linux-image-4.2.0-040200rc7-generic_4.2.0-040200rc7.201508162030_amd64.deb
linux-headers-4.2.0-040200rc7-generic_4.2.0-040200rc7.201508162030_i386.deb
下載完之後再用 root 執行 dpkg -i 就好了
# sudo dpkg -i linux-image-4.2.0-040200rc7-generic_4.2.0-040200rc7.201508162030_amd64.deb

換了 Linux kernel 4.2RC 之後, Working Around The Intel Core i7 5775C Broadwell Stability Issue On Linux 這個問題就沒有再出現過了.

以上解決方案有錯, 仍然會出現 MCE.
根據 Linux Kernel Bug Report 上的說法,
在 bootup 時的 kernel 參數加上 “processor.max_cstate=0 intel_idle.max_cstate=0 idle=poll” 就可以暫時避開這個問題.
以上這個暫時解決方案會讓 CPU 滿載, 所以建議可以在安裝的時候使用.

如果要穩定一點的解決方案, 可以換到最新版的 Microcode , 原因可能是 Intel 在 Broadwell 仍然未解 TSX 的 Bug
而且也沒有更新 Microcode(目前最新是今年一月), 所以各家 Linux Distributions 也無法更新 Microcode 解決這個問題.
如果 glibc compile 時並未打開 TSX support, 看起來不會踏到這個 BUG
但是如果是有 enable TSX support 的 Linux Distribution , 就會踏到這個 BUG

Ubuntu 下的解決方式如下
1) 下載 iucode-tool
$ sudo apt-get install iucode-tool
2) 下載新版的 Microcode
$ git clone https://github.com/bgw/bdw-ucode-update-tool.git
$ cd bdw-ucode-update-tool
$ sudo ./install.sh –persist-debian
3) 驗證, microcode 版本是 0x13
$ cat /proc/cpuinfo | grep microcode
microcode : 0x13

這還是有缺點,
1) 新裝系統
2) 更新 Kernel
都還是要跑一次這樣的流程, 最好還是跟主機板廠商連絡請他們更新 BIOS .
這邊我就要抱怨 ASUS 了, 搞了一個多月來來回回還是在講同一個問題, 至現在 (11/9) 為止仍然沒有更新 BIOS.

更新完後系統穩定, 並未碰到當機事件了.

後記, 個人覺得以 SoC Errata 的處理, Intel 非常槽糕, 我知道新功能的確可能會有問題.
但是出廠前 Linux/Windows 都應該要測試過才會出門吧.
沒有想到只有 Windows OK.

我在以前根本沒有想到買新 CPU 要先考慮在 Linux 上會不會有問題.
真是 WTF

ref.
Bug 103351 – Machine check exception on Broadwell quad-core with SpeedStep enabled
[haswell] Unable obtain Package Cstates C3 or lower

發佈留言