System Engineering/Kubernetes

Kubelet MCE Memory Error - EDAC

Hopulence 2024. 9. 25. 10:07
반응형

 운용중인 시스템에 'Handling MCE Memory Error'라는 문구와 함께 여러 에러가 발생했습니다. 결론적으로 하드웨어 문제는 아니었지만 찾아본 내용을 정리한 내용입니다.

 * MCE = Machine Check Error

describe node 결과

 


EDAC(Error Detection and Corredtion)

  • EDAC는 CPU Cache, Memory, GPU, PCI bus 등과 같은 하드웨어의 에러를 감지하고 가능하다면 이를 수정하기 위한 커널 모듈입니다.
  • 아래는 커널 문서를 정리한 내용입니다.
    /Documentation/driver-api/edac.rst
    /Documentation/admin-guide/ras.rst
    • CPU가 Memory Controller(이하 MC)로 데이터를 쓸 때, MC는 실시간으로 Hamming code 또는 SECDED+를 사용해서 syndrom이라는 것을 계산하여 데이터의 Total width를 산출합니다.
    • 아래 dmidecode 명령어의 결과에서 해당 메모리의 Total width는 72bit, Data width는 64bit입니다. 즉, 여기서 여분의 12bit를 에러 감지와 수정에 사용할 수 있으며 이를 syndrome(ECC memory)이라고 합니다.
    • 만약 Total width와 Data width가 동일하다면, 해당 Locator에 위치한 메모리는 에러 감지와 수정을 수행할 수 없습니다.
$ dmidecode -t memory
...
Memory Device
	Array Handle: 0x0042
	Error Information Handle: Not Provided
	Total Width: 72 bits
	Data Width: 64 bits
	Size: 32 GB
	Form Factor: DIMM
	Set: None
	Locator: P2-DIMME1
	Bank Locator: P1_Node1_Channel1_Dimm0
	Type: DDR4

 

  • ECC(Error-Correction Code) memory
    • CPU가 Memory Controller(이하 MC)로 데이터를 쓸 때, MC는 실시간으로 Hamming code 또는 SECDED+를 사용해서 syndrom이라는 것을 계산하여 데이터의 Total width를 산출합니다.
    • MC는 에러를 감지하기 위해 syndrome을 바라봅니다. 여기서 ECC가 에러를 fix할 수 있으면 CE(Correctable Error), 없으면 UE(Uncorrectable Error)가 됩니다.
    • CE/UE는 MC의 특정 레지스터들에 저장되며 BIOS나 EDAC 드라이버가 이를 읽어 아래 경로에 카운트합니다.
      • ce_count : CE는 MC에 의해 카운트 된 Correctable Errors입니다. (not fetal)
      • ue_count : UE는 Uncorrectable Errors로, 시스템에 auto-correct 할 수 없는 에러를 의미합니다.
$ cat /sys/devices/system/edac/mc/mc*/csrow*/*ce_count
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
$ cat /sys/devices/system/edac/mc/mc*/csrow*/*ue_count
0
0
0

 

  • EDAC 커널 모듈 확인
    • 아래는 Intel skylake 프로세서의 드라이버입니다.
$ lsmod | grep edac
skx_edac			24576	0
nift				77824	1	skx_edac

 

  • HardwareCorrupted
    • /proc/meminfo의 HardwareCorrupted는 ECC에 의해 오류가 감지된 메모리를 의미합니다.
$ cat /proc/meminfo | grep -i hardware
HardwareCorrupted:		0kB
...

 

 

Promethus node-exporter에도 EDAC를 감시하는 기능이 있지만, kubelet이 어떻게 위의 log를 띄웠는지는 좀 더 탐구해봐야겠네요.

node-exporter




결론

  • EDAC는 썩 신뢰할만한 지표는 되지 못하는 것 같네요.
  • 하드웨어 오류인지는 IPMI,iLO,iDRAC등을 통한 바이오스 정보를 확인하는 것이 좋겠네요.

Reference

https://bluesmoke.sourceforge.net/

 

EDAC Project

 

bluesmoke.sourceforge.net

https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-edac

https://github.com/intel/linux-intel-4.9/blob/master/drivers/edac/skx_edac.c

 

linux-intel-4.9/drivers/edac/skx_edac.c at master · intel/linux-intel-4.9

Contribute to intel/linux-intel-4.9 development by creating an account on GitHub.

github.com

https://unix.stackexchange.com/questions/204286/what-does-mean-by-hardwarecorrupted-directmap4k-directmap2m-fields-in-proc-m

 

what does mean by HardwareCorrupted, DirectMap4k, DirectMap2M fields in “/proc/meminfo” file of Linux?

I am looking for description of following terms: HardwareCorrupted, DirectMap4k, DirectMap2M fields in "/proc/meminfo" file of Linux. I could find the following description for the fields

unix.stackexchange.com

 

 

 

 

 

 

 

 

반응형