Boot

為什麼 linux 核心無法在我的新 Intel i7-6500U CPU 上啟動?

  • June 26, 2017

我知道,很難隔離 CPU,但我看到的錯誤表明這就是問題所在。

這絕對不是硬體故障/損壞問題。在過去的幾天裡,我整天都在執行 Windows 10,而且這東西速度很快!沒有崩潰。更重要的是,我執行了 Windows 記憶體檢查器。記憶力都很好。

機器規格

該機器是全新的聯想 Yoga 710 15"

x64
Intel i7-6500 CPU @ 2.50 GHz, 2601 Mhz, 2 Cores, 4 Logical Processors
SMBIOS Version 2.8
BIOS Mode UEFI
16.0 GB DDR4 Ram
256 MB SSD

隔離到 linux 核心 (?)

我在兩者上都看到了相同的問題

  • archlinux-2016.08.01-dual.iso
  • ubuntu-gnome-16.04.1-desktop-amd64.iso

對於 Arch——問題只是在從 U 盤啟動時間歇性地出現。我設法將 Arch 安裝在驅動器上的 100GB ext4 分區上。該安裝在引導期間間歇性地(如 90% 的時間)存在相同的問題。如果我通過了引導,那麼在我執行的前幾個終端命令之後隨機出現問題,最終導致完全死鎖。

對於 Ubuntu——U 盤甚至無法啟動。我立即被這些相同的錯誤阻止。僵局…

這麼多錯誤…

每當發生這種情況時,日誌都會充滿與記憶體相關的錯誤,但我看到的關鍵錯誤是:

  • General protection fault 0000[#1] PREEMPT SMP
  • RIP kmem_cache_alloc
  • RIP kmem_cache_alloc_trace

對於這些錯誤,我已經多次看到一些相同的堆棧跟踪:

rbt_memtype_copy_nth_element
on_each_cpu
flusH_tbl_kernel_range
__purge_umap_area_lazy
um_unmam_aliases
change_page_attr_set_clr
set_memory_ro
frob_text.isra
module_enable_ro

kobject_create
kobject_create_and_add
load_module
__symbol_put
kernel_read
sys_finit_module
entry_SYSCALL_64_fastpath

kmem_cache_alloc_trace
allocate_cgrp_cset_links
...
sys_write
entry_SYSCALL-64_fastpath

Linux 也一直承諾它正在解決這個問題

修復遞歸故障,但需要重新啟動!

我希望..

英特爾 ucode

我還嘗試intel-ucode在我的 Arch 安裝中安裝該軟體包。我在dmesg日誌中看到微碼已更新,但不幸的是並沒有解決我的問題。

可能是什麼問題?如何解決?


編輯

附加說明。

一般保護故障消息和“檢測到鎖定”類型的消息通常引用 CPU。我在這些消息中看到了CPU0CPU1和。似乎有什麼東西導致了 CPU 無法相處,就像他們都在試圖清除高速記憶體記憶體或其他東西時陷入僵局。CPU2``CPU3


編輯2

錯誤提及的 BIOS

我在一些錯誤中看到了這一點資訊:

LENOVO 80U01LENOVO YOGA710-1 BIOS OGCN20WW(v1.04) 6/30/2016

不確定這是否有助於專業人士理解這個問題……


編輯3

最大CPU=1

我在核心參數文件中尋找調試選項,發現maxcpus

如果我將最大 cpu 設置為 1,那麼問題就會消失。所以看起來問題是某種共享記憶體記憶體違規。


編輯3

maxcpus=1 + Gnome = 又壞了

雖然maxcpus=1似乎只使用 1 個 CPU 就可以使系統工作,但我安裝了 gnome 然後執行systemctl enable gdm.service

現在,當我重新啟動時,我的所有錯誤又回來了,但這一次它們都發生在 CPU0 上

因此,即使使用 1 個 CPU,似乎仍有一些東西導致記憶體違規。


編輯4

諾拉皮克

所以使用nolapic似乎讓一切“工作”

但是通過使用nolapic,我有效地禁用了我的另一個 CPU 和 1 個工作 CPU 中的所有多執行緒。

我正在嘗試將其用於 OpenMP,並且在使用 啟動後nolapic,OpenMP 和 linux 核心只能找到 1 個執行緒、1 個 CPU。太糟糕了!

我也試過intel_idle.max_cstate=0and 1,2等。但這並不能解決啟動問題。

還有什麼可能導致核心無法使用我的多核機器?

原來問題是i2c_hid

這似乎是某種觸摸板驅動程序。出於某種原因,當我禁用它時,我仍然可以使用我的觸摸板。可能是筆記型電腦上的觸摸屏也使用了這個驅動程序,因為這不起作用。

無論如何,我不喜歡用指紋破壞我的筆記型電腦螢幕……所以再見i2c_hid

我通過將其添加到核心參數來修復它: modprobe.blacklist=i2c_hid

儘管nolapic也有效,但它禁用了處理器中除 1 個核心之外的所有核心。

我強烈建議其他任何人不要使用apci=offnolapic出於這個原因。

使用這些選項是可能使您的機器工作的核武器,但您會損失很多性能和/或 i/o 設備作為附帶損害。這是啟動的一個很好的起點,然後你可以像我一樣通過 journalctl 來分析失敗的靴子。

祝找到這個的人好運。

引用自:https://unix.stackexchange.com/questions/305588