내 시스템에서 마이크로코드가 활성화되어 있는지 확인하는 방법 및 재부팅 문제를 일으키는 Intel CPU 펌웨어 패키지를 수정하는 방법 [닫기]

내 시스템에서 마이크로코드가 활성화되어 있는지 확인하는 방법 및 재부팅 문제를 일으키는 Intel CPU 펌웨어 패키지를 수정하는 방법 [닫기]

수리하다Intel의 CPU 펌웨어 패키지로 인해 재부팅 문제가 발생하는 것 같습니다.

centos 7.3배포판을 사용하고 있는데 1.14.14 kernel어떤 패키지가 Intel의 CPU 펌웨어인지, 어떤 버전에 문제가 있는지, 어떻게 해결하는지 알고 싶습니다.

이렇게 생각하면서도마이크로코드패키지가 정확합니다.

나는 또한 이것을 언급했다.문서그러나 정확한 패키지 이름과 버전은 언급되지 않습니다.

시스템 메시지:

sh-4.2# cat /proc/cpuinfo 
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 62
model name  : Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
stepping    : 4
microcode   : 0x42a
cpu MHz     : 2499.980
cache size  : 25600 KB
physical id : 0
siblings    : 2
core id     : 0
cpu cores   : 1
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology cpuid pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cpuid_fault pti retpoline fsgsbase smep erms xsaveopt
bugs        : cpu_meltdown spectre_v1 spectre_v2
bogomips    : 5000.16
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

processor   : 1
vendor_id   : GenuineIntel
cpu family  : 6
model       : 62
model name  : Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
stepping    : 4
microcode   : 0x42a
cpu MHz     : 2499.980
cache size  : 25600 KB
physical id : 0
siblings    : 2
core id     : 0
cpu cores   : 1
apicid      : 1
initial apicid  : 1
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology cpuid pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cpuid_fault pti retpoline fsgsbase smep erms xsaveopt
bugs        : cpu_meltdown spectre_v1 spectre_v2
bogomips    : 5000.16
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

sh-4.2#

마이크로코드 패키지

sh-4.2# yum list installed | grep microcode
microcode_ctl.x86_64             2:2.1-22.5.el7_4                   @updates    
sh-4.2#

또한 알고 싶습니다:

  1. 마이크로코드가 올바른 Intel CPU 펌웨어 패키지입니까?
  2. microcode_ctl은 실제로 무엇을 합니까?
  3. 문제가 있는 패키지를 식별하기 위해 마이크로코드 값을 패키지 버전 /proc/cpuinfo에 매핑하는 방법은 무엇입니까 ?microcode_ctl

고쳐 쓰다:

인텔에서 나열한 패키지 버전을 비교할 수 있었습니다.여기내 시스템 패키지로. 먼저, CPUID다음 명령을 실행하여 내 시스템을 파악 yum install cpuid && cpuid | grep serial하고 영향을 받는 해당 버전을 확인합니다.CPUID 여기. 영향을 받은 패키지를 사용하고 있는 것 같으며 0x42a이 버전을 사용할 예정입니다 cat /proc/cpuinfo | grep microcode. 영향을 받지 않는 것은 0x428이 패키지입니다 microcode_ctl-2.1-16.3.el7_3.x86_64. 이 패키지를 설치했지만 내 시스템에서 마이크로코드가 활성화되어 있는지 확인할 수 없습니다.

몇 가지 질문이 더 있습니다 -

  1. 내 컴퓨터가 microcode시작 시 활성화되어 있는지 확실하지 않습니다. 나는 이 명령에 지쳤고 아무것도 출력하지 않습니다 dmesg | grep microcode. 또한 확인해보니 grep -i 'microcode' /boot/config-$(uname -r)마이크로코드 구성이 "예"로 설정되어 있지만 부팅 시간 로그에는 dmesg | grep microcode아무 것도 표시되지 않습니다. 여기서 마이크로코드가 실제로 활성화되어 있는지, 그렇지 않은 경우 활성화하는 방법은 무엇입니까?
  2. 나는 또한 이것을 언급했다.블로그마이크로코드를 활성화했지만 이 단계에서 멈추면 echo 1 > /sys/devices/system/cpu/microcode/reload시스템은 루트 사용자라도 이 파일을 생성하는 것을 허용하지 않습니다.

답변1

문제의 마이크로코드는 Spectre Variant 2 취약점에 대해 급하게 개발된 완화 기능과 함께 1월 3일(RHEL의 경우) 및 1월 4일(CentOS의 경우)에 릴리스되었습니다.https://lists.centos.org/pipermail/centos-announce/2018-January/022697.html

나중에 Broadwell 및 Haswell 프로세서용 패키지에 포함된 마이크로코드에 문제가 있는 것으로 판명되어 롤백되었습니다. https://access.redhat.com/errata/RHSA-2018:0093

후자의 RedHat 보안 권고에 따르면 microcode_ctl패키지 버전 2:2.1-22.5.el7_4는 문제가 있는 마이크로코드가 롤백된 버전입니다. 그러나 마이크로코드 업데이트는 파일에 내장되어 있으므로 initramfs여전히 마이크로코드 관련 문제가 있다고 의심되는 경우 initramfs파일(일반적으로 mkinitrd명령 또는 dracutRHEL/Centos 7 이상의 경우)을 다시 생성하십시오.

microcode_ctl패키지에는 실제 마이크로코드 파일과 올바른 마이크로코드 업데이트를 파일에 구축하기 위한 일부 도구가 포함되어 있습니다 initramfs. 실제 마이크로코드 파일은 다음 위치에 설치됩니다 /lib/firmware/intel-ucode. 마이크로코드 업데이트가 필요한 각 Intel 프로세서 모델마다 하나씩 꽤 많은 작은 파일이 있습니다.

일부 Intel CPU의 경우 특정 하드웨어 버그를 방지하기 위해 부팅 프로세스 초기에 마이크로코드 업데이트를 적용해야 하는 경우도 있습니다.

/sys/devices/system/cpu/microcode/reload(더 구체적으로 말하면 /proc/cpuinfo 모델 코드 79 및 원시 마이크로코드가 있는 Intel 프로세서의 경우 시스템이 일반 SMP 모드에서 실행되는 동안 사용하면 업데이트 프로세스가 신뢰할 수 없습니다. BIOS에서 마이크로코드 업데이트를 설치하거나 부팅 프로세스가 아직 모든 코어를 시작하지 않았고 여전히 하나의 코어에서만 실행 중인 동안 초기 부팅 시 업데이트됩니다.

이를 위해 Linux에서는 "초기 마이크로코드 로딩" 도구가 개발되었습니다. initrd/initramfs 파일에 kernel/x86/microcode/GenuineIntel.bin(Intel의 경우) 또는 (AMD의 경우) 라는 파일이 포함된 경우 kernel/x86/microcode/AuthenticAMD.bin커널은 부팅 프로세스 초기에 해당 파일을 마이크로코드 업데이트로 로드하려고 시도합니다.이 기능에는 사용자 공간 도구가 필요하지 않습니다..

RHEL/Centos 7에서 initramfs 파일에 초기 마이크로코드 업데이트 파일이 포함되어 있는지 확인하려면 다음 명령을 실행합니다.

lsinitrd /boot/initramfs-$(uname -r).img | less

출력 시작 부분이 다음과 같으면 마이크로코드 업데이트가 포함되어 있는 것입니다.

Image: /boot/initramfs-3.10.0-693.el7.x86_64.img: 20M
========================================================================
Early CPIO image
========================================================================
drwxr-xr-x   3 root     root            0 Oct 11 05:11 .
-rw-r--r--   1 root     root            2 Oct 11 05:11 early_cpio
drwxr-xr-x   3 root     root            0 Oct 11 05:11 kernel
drwxr-xr-x   3 root     root            0 Oct 11 05:11 kernel/x86
drwxr-xr-x   2 root     root            0 Oct 11 05:11 kernel/x86/microcode
-rw-r--r--   1 root     root        12288 Oct 11 05:11 kernel/x86/microcode/GenuineIntel.bin
========================================================================
Version: dracut-033-502.el7

Arguments: -f -v

[... main initrd contents skipped ...]

실제 마이크로코드 파일 외에도 microcode_ctlRPM 패키지에는 다음이 포함되어 있습니다.

  • /usr/lib/dracut/dracut.conf.d/01-microcode.conf, 이 파일은 dracutinitramfs 생성자에게 initramfs 파일에 초기 마이크로코드 업데이트를 추가하라고 지시합니다.
  • /usr/lib/systemd/system/microcode.service/sys/devices/system/cpu/microcode/reload이전 마이크로코드 업데이트가 비활성화되거나 실행에 실패한 경우 마이크로코드 업데이트를 로드하는 데 사용됩니다 . 모델 코드 79를 사용하는 Intel CPU에는 특별한 예외가 있습니다. 이러한 CPU에서는 아무 작업도 수행하지 않습니다.
  • /usr/sbin/intel-microcode2ucode, Intel 마이크로코드 파일을 Linux 마이크로코드 업데이트 메커니즘에서 사용할 수 있는 형식으로 변환하는 도구입니다.
  • /usr/share/doc/microcode_ctl/README.readme 파일

가상 머신에서 실행 중인 경우 마이크로코드 업데이트에 대해 걱정할 필요가 없습니다. 이는 VM(가상화 호스트) 관리자의 작업입니다.할 수 없다해. 패키지를 설치하더라도 microcode_ctl가상 머신에서 실행하면 아무 작업도 수행되지 않습니다.

문제가 있는 마이크로코드를 롤백하려면 시스템에서 문제가 있는 마이크로코드의 모든 소스를 제거해야 합니다.

  • 문제가 있는 펌웨어가 포함된 모든 펌웨어 업그레이드를 롤백합니다.
  • 패키지가 문제가 있는 마이크로코드를 롤백한 버전인지 확인하십시오 microcode_ctl(이미 수행했습니다).
  • microcode_ctl현재 설치된 패키지 의 설치 시간과 일치하도록 initramfs 파일이 업데이트되었는지 확인하십시오.

그 다음에정전그리고 다시 시작하세요. 마이크로코드는 전원을 껐다 켜도 지속되지 않습니다. 그러나 CPU는 이미 최신 마이크로코드 버전이 로드된 경우 더 낮은 버전 번호의 마이크로코드 업데이트를 허용하지 않습니다.

관련 정보