운용중인 시스템에 'Handling MCE Memory Error'라는 문구와 함께 여러 에러가 발생했습니다. 결론적으로 하드웨어 문제는 아니었지만 찾아본 내용을 정리한 내용입니다.
* MCE = Machine Check Error
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를 띄웠는지는 좀 더 탐구해봐야겠네요.
결론
- 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
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
'System Engineering > Kubernetes' 카테고리의 다른 글
Kubernetes x509 SAN (Golang 1.15 or later) (0) | 2022.10.11 |
---|---|
Node Problem Detector and Draino (0) | 2022.09.27 |
Kubernetes Authentication (0) | 2022.09.11 |
Kubernetes Lease (Node Heartbeat) (0) | 2022.01.10 |
8. K8s AutoScaling (0) | 2021.04.11 |