先說一下我的狀況,我是buildroot隨機會出錯,
但是完全沒有改任何設定繼續編譯卻可以編譯成功。
總之就是大量平行編譯會隨機出錯...
使用 https://github.com/suaefar/ryzen-test/blob/master/kill-ryzen.sh
測試(No Ramdisk),果然會出現這樣的錯誤(segmentation fault):
[KERN] Dec 21 22:19:39 Ryzen kernel: bash[7678]: segfault at 45 ip
0000000000701d40 sp 00007ffdcdb4c4e8 error 6
主機板也是Asus b350 plus, BIOS: 3401, 1700 / Ram: 16G DDR4
OS則是Linux Mint 18.2
嘗試過換kenerl版本(4.9-4.11),加過cpu電壓,關掉C-state,BIOS全預設
都一樣會出現上面的錯誤。雖然關掉SMT之後就正常,可是我總不能一直關著SMT阿QQ
後來先嘗試在linux裡關掉ASLR (Address space layout randomization)
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
好像也沒什麼用...
本來已經打算要RMA了,剛好看到板友RMA回來的步進一樣還是B1,
也有提到RCU設定(CONFIG_RCU_NOCB_CPU),就再嘗試看看重新編譯kernel(4.13.16)
主要就是 make menuconfig 裡面
-> General setup
-> RCU subsystem
這一項要打開,然後在grub cmdline裡面加入 rcu_nocbs=0-15
(因為我是8核1700,如果是6核心就是0-11 依此類推...)
看起來像是這樣:
GRUB_CMDLINE_LINUX_DEFAULT="rcu_nocbs=0-15"
再跑一次kill-ryzen.sh測試:
https://gist.github.com/anonymous/216826c5141f99a8307ec0d1da76cea6
就沒問題了。
總結:
BIOS: 3041
關掉C-State, ASLR
開啟RCU
希望跟我有一樣問題的人也可以不用RMA順利解決。