intel-ucode 没有更新?固件错误:由于勘误,TSC_DEADLINE 被禁用;请将微码更新到版本(或更高版本)

Mou*_*inX 5 arch-linux firmware

我在启动时收到此错误:

[Firmware Bug]: TSC_DEADLINE disabled due to Errata; please update microcode to version (or later)
Run Code Online (Sandbox Code Playgroud)

我发现 /boot/intel-ucode.img 中的固件版本与 dmesg 报告的版本之间可能不匹配。但是,我不知道如何解决这个问题。

内核/发行版:

# uname -a
Linux workstation 4.13.9-1-ARCH #1 SMP PREEMPT Sun Oct 22 09:07:32 CEST 2017 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

CPU 信息(机器是双 Xeon,每个 CPU 有 10 个内核,仅列出 1 个)

# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 79
model name      : Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz
stepping        : 1
microcode       : 0xb00001c
cpu MHz         : 2200.126
cache size      : 25600 KB
physical id     : 0
siblings        : 20
core id         : 0
cpu cores       : 10
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 20
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cdp_l3 intel_ppin intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
bugs            :
bogomips        : 4402.59
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:
Run Code Online (Sandbox Code Playgroud)

此条目显示我正在使用所需的两个 initrd 行,其中 intel-ucode.img 首先列出:

# cat /boot/loader/entries/arch.conf 
title          Arch Linux
linux          /vmlinuz-linux
initrd         /intel-ucode.img
initrd         /initramfs-linux.img
options  ...
Run Code Online (Sandbox Code Playgroud)

确认我正在使用上述条目:

# cat /boot/loader/loader.conf 
default arch
Run Code Online (Sandbox Code Playgroud)

确认我的 intel-ucode.img 文件具有正确的日期并且位于正确的位置:

# ls -la /boot/
total 137324
drwxr-xr-x 5 root root     4096 Nov  7 02:18 .
drwxr-xr-x 1 root root      224 Oct 29 02:38 ..
drwxr-xr-x 4 root root     4096 May 16  2016 EFI
-rwxr-xr-x 1 root root 35074017 Nov  2 05:58 initramfs-linux-fallback.img
-rwxr-xr-x 1 root root 19212497 Nov  2 05:58 initramfs-linux.img
-rwxr-xr-x 1 root root 27503970 May 19  2016 initramfs-linux-lts-fallback.img
-rwxr-xr-x 1 root root 19029219 Nov  2 05:58 initramfs-linux-lts.img
-rwxr-xr-x 1 root root 21556194 May 29  2016 initramfs-linux-simple-fallback.img
-rwxr-xr-x 1 root root  6569920 May 29  2016 initramfs-linux-simple.img
-rwxr-xr-x 1 root root  1303040 Jul  9 08:15 intel-ucode.img
drwxr-xr-x 3 root root     4096 Jun 24  2016 loader
-rwxr-xr-x 1 root root  5502736 Oct 22 03:09 vmlinuz-linux
-rwxr-xr-x 1 root root  4827424 Oct 30 04:20 vmlinuz-linux-lts
Run Code Online (Sandbox Code Playgroud)

dmesg 表示需要微码版本 0xb000020(或更高版本),而我的版本是 0xb00001c

# dmesg | grep microcode
[    0.000000] microcode: microcode updated early to revision 0xb00001c, date = 2016-05-20
[    0.000000] [Firmware Bug]: TSC_DEADLINE disabled due to Errata; please update microcode to version: 0xb000020 (or later)
[   22.175583] microcode: sig=0x406f1, pf=0x1, revision=0xb00001c
[   22.177119] microcode: Microcode Update Driver: v2.2.
Run Code Online (Sandbox Code Playgroud)

似乎确认我的微码版本是 0xb00001c

$ grep microcode /proc/cpuinfo
microcode       : 0xb00001c
Run Code Online (Sandbox Code Playgroud)

但是,iucode_tool似乎表明我的文件 /boot/intel-ucode.img 包含微码 rev 0xb000021。

bsdtar -Oxf /boot/intel-ucode.img | iucode_tool -tb -lS - 
iucode_tool: system has processor(s) with signature 0x000406f1
microcode bundle 1: (stdin)
selected microcodes:
001/139: sig 0x000406f1, pf_mask 0xef, 2017-03-01, rev 0xb000021, size 26624
Run Code Online (Sandbox Code Playgroud)

问题是,为什么不使用微码 rev 0xb000021 以及如何正确“加载”它?

更新 - jasonwryan 要求的更多信息。但是,在最初提出这个问题和提供此更新之间,我运行pacman -Syu并获得了一个新内核。所以这里是请求的信息加上当前的输出uname -a

# pacman -Q linux intel-ucode
linux 4.13.11-1
intel-ucode 20170707-1

# uname -a
Linux workstation 4.13.11-1-ARCH #1 SMP PREEMPT Thu Nov 2 10:25:56 CET 2017 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

jas*_*yan 1

您安装的内核和 initramfs 未加载(请参阅uname和 的输出之间的差异pacman -Q linux。这意味着您可能运行了未安装的更新/boot

chroot 进入,确保/boot已安装并重新运行升级并重新生成 initramfs。/boot您可能需要清理将要安装在应该安装的位置的文件。